pax_global_header00006660000000000000000000000064116710510070014510gustar00rootroot0000000000000052 comment=6815bc73969d38c2226cf6e3366c1e4f4f756ba0 gnulib-20111211-stable/000077500000000000000000000000001167105100700144725ustar00rootroot00000000000000gnulib-20111211-stable/.cvsignore000066400000000000000000000000161167105100700164670ustar00rootroot00000000000000.msg testdir* gnulib-20111211-stable/.gitattributes000066400000000000000000000003741167105100700173710ustar00rootroot00000000000000# 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-20111211-stable/.gitignore000066400000000000000000000001001167105100700164510ustar00rootroot00000000000000*.orig *.rej *~ .#* \#*# allsnippets.tmp amsnippet.tmp testdir* gnulib-20111211-stable/COPYING000066400000000000000000000016651167105100700155350ustar00rootroot00000000000000$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. gnulib-20111211-stable/ChangeLog000066400000000000000000146643711167105100700162720ustar00rootroot000000000000002011-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-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/archive/html/bug-diffutils/2011-08/msg00047.html and fix suggested by Eric Blake in: http://lists.gnu.org/archive/html/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/archive/html/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 occured 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/archive/html/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: accomodate 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 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/archive/html/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: accomodate 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/archive/html/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/archive/html/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/archive/html/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 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 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: 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 funtion 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/archive/html/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: accomodate 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 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/archive/html/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 occurance 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/archive/html/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 accomodate 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/archive/html/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): Substibute 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): Substibute 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 agains +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/archive/html/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/getaddinfo (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/archive/html/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/archive/html/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 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 whther 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/archive/html/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/archive/html/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/archive/html/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/archive/html/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/archive/html/bug-gnulib/2003-01/msg00090.html http://mail.gnu.org/archive/html/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/archive/html/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/archive/html/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/archive/html/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/archive/html/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/archive/html/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-2011 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-20111211-stable/DEPENDENCIES000066400000000000000000000110441167105100700162430ustar00rootroot00000000000000The 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 2.95 or newer. + GCC Homepage: http://gcc.gnu.org/ + Download: http://ftp.gnu.org/gnu/gcc/ ftp://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: http://www.gnu.org/software/make/ + Download: http://ftp.gnu.org/gnu/make/ ftp://ftp.gnu.org/gnu/make/ * GNU M4 1.4.5 or newer. + 1.4.5 or newer is mandatory, but 1.4.9 or newer is recommended. + Homepage: http://www.gnu.org/software/m4/ + Download: http://ftp.gnu.org/gnu/m4/ ftp://ftp.gnu.org/gnu/m4/ * Autoconf 2.59 or newer. + Mandatory. + Homepage: http://www.gnu.org/software/autoconf/ + Download: http://ftp.gnu.org/gnu/autoconf/ ftp://ftp.gnu.org/gnu/autoconf/ * Automake 1.9.6 or newer. + Mandatory. + Homepage: http://www.gnu.org/software/automake/ + Download: http://ftp.gnu.org/gnu/automake/ ftp://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: http://www.gnu.org/software/bash/ + Download: http://ftp.gnu.org/gnu/bash/ ftp://ftp.gnu.org/gnu/bash/ * Core POSIX utilities, including: [ basename cat chgrp chmod chown cp dd echo expand expr false hostname install 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: http://www.gnu.org/software/coreutils/ + Download: http://ftp.gnu.org/gnu/coreutils/ ftp://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: http://www.gnu.org/software/diffutils/ + Download: http://ftp.gnu.org/gnu/diffutils/ ftp://ftp.gnu.org/gnu/diffutils/ * Grep. + Mandatory. Using the platform's native grep gives good portability exposure, but you can also use GNU grep. + Homepage: http://www.gnu.org/software/grep/ + Download: http://ftp.gnu.org/gnu/grep/ ftp://ftp.gnu.org/gnu/grep/ * GNU gettext. + Always use the newest available gettext release, see . + Recommended. Needed if you use modules that use internationalization (many do). + Homepage: http://www.gnu.org/software/gettext/ + Download: http://ftp.gnu.org/gnu/gettext/ ftp://ftp.gnu.org/gnu/gettext/ * Bison 2.0 or newer. + Recommended. Needed if you use the 'parse-datetime' module. + Homepage: http://www.gnu.org/software/bison/ + Download: http://ftp.gnu.org/gnu/bison/ ftp://ftp.gnu.org/gnu/bison/ * GNU gperf 3.0.1 or newer. + Recommended. Needed if you use the 'iconv_open' module. + Homepage: http://www.gnu.org/software/gperf/ + Download: http://ftp.gnu.org/gnu/gperf/ ftp://ftp.gnu.org/gnu/gperf/ * Texinfo 4.6 or newer. + Recommended. Needed if you use modules that include documentation. + Homepage: http://www.gnu.org/software/texinfo/ + Download: http://ftp.gnu.org/gnu/texinfo/ ftp://ftp.gnu.org/gnu/texinfo/ * GNU sed. + Recommended. Needed on platforms where the vendor's 'sed' program is too buggy. + Homepage: http://www.gnu.org/software/sed/ + Download: http://ftp.gnu.org/gnu/sed/ ftp://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: http://www.gnu.org/software/libtool/ + Download: http://ftp.gnu.org/gnu/libtool/ ftp://ftp.gnu.org/gnu/libtool/ gnulib-20111211-stable/MODULES.html.sh000077500000000000000000002340311167105100700171070ustar00rootroot00000000000000#!/bin/sh # # Copyright (C) 2002-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 . # # 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='http://www.opengroup.org/susv3' POSIX2008_URL='http://www.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='http://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 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 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 func_module malloc-gnu func_module realloc-gnu 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_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 strftime 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-one-bits 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 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 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 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_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-sha1 func_module crypto/gc-random func_module crypto/gc-rijndael func_module crypto/gc-sha1 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 diacrit func_module diffseq 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 func_module readline func_module readtokens func_module readtokens0 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 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_end_table element="Sizes of integer types " element=`printf "%s" "$element" | sed -e "$sed_lt" -e "$sed_gt"` func_section_wrap isoc_sup_limits func_wrap H3 func_echo "$element" func_begin_table func_module size_max 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 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 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 draft ISO C 1X" func_section_wrap c1x_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 c1x_core_properties func_wrap H3 func_echo "$element" func_begin_table func_module stdalign 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 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 tsearch func_module ttyname_r func_module uname func_module unistd func_module unlink func_module unlockpt 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 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 rename-dest-slash 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-posix 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 areadlink func_module areadlink-with-size func_module areadlinkat func_module areadlinkat-with-size func_module backupfile func_module canonicalize func_module canonicalize-lgpl func_module chdir-safer 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 read-file func_module readlinkat 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 dup3 func_module fd-safer-flag func_module getdtablesize func_module fcntl-safer func_module openat-safer func_module safe-read func_module safe-write func_module full-read func_module full-write func_module binary-io func_module isapipe func_module pipe-posix func_module pipe2 func_module pipe2-safer 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/bidicategory-byname func_module unictype/bidicategory-name func_module unictype/bidicategory-of func_module unictype/bidicategory-test func_module unictype/bidicategory-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 exitfail func_module error func_module extensions func_module forkpty func_module getdomainname func_module xgetdomainname func_module getloadavg func_module getpagesize 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 elisp-comp 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 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 readme-release func_module update-copyright func_module useless-if-before-free func_module vc-list-files 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 /CVS/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 '
    ' func_echo 'Generated from MODULES.html.sh on '`LC_ALL=C date +"%e %B %Y"`. 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-20111211-stable/Makefile000066400000000000000000000122561167105100700161400ustar00rootroot00000000000000# GNU Makefile for gnulib central. # Copyright (C) 2006, 2009-2011 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=/bin/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=http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/22874; \ git grep '^[ ]*TESTS_ENVIRONMENT += PATH=' modules \ && { printf '%s\n' 'Do not augment PATH via TESTS_ENVIRONMENT;' \ " see <$$url>" 1>&2; exit 1; } || : \ else :; fi # 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=http://article.gmane.org/gmane.comp.lib.gnulib.bugs/26995; \ 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 # 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. update-copyright: exempt=$$(mktemp); \ 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; \ 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 gnulib-20111211-stable/NEWS000066400000000000000000001013741167105100700151770ustar00rootroot00000000000000Important notes --------------- 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 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 remamed to "xmalloca.h". The function was renamed: xallocsa -> xmalloca 2007-06-09 allocsa Renamed to malloca. The include file "allocsa.h" was remamed 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: # indent-tabs-mode: nil # whitespace-check-buffer-indent: nil # End: gnulib-20111211-stable/NEWS.stable000066400000000000000000000545311167105100700164520ustar00rootroot00000000000000 Gnulib stable snapshot ---------------------- * 20111211-stable Snapshot taken based on: commit b572c3a256e7bf1e4eecc8c36448c08093240a6a Date: Sat Dec 3 13:09:58 2011 +0100 with the following additional commits: * [c69114d]->[b3a93d2] tests: Avoid spurious error message on platforms without mktemp program. * [8446103]->[46519aa] autoupdate * [7c25126]->[6057366] autoupdate ---------------------------------------------------------------------- * 20110908-stable Snapshot taken based on: commit 0ba19fcc5ff43167939e465af4b93f965fffcc8c Date: Tue Aug 30 16:38:59 2011 -0700 with the following additional commits: * [a0d9972]->[21d1619] freopen: Don't crash if the filename argument is NULL. * [a5a35f0]->[c4596b1] freopen: Documentation. * [9926b90]->[395f9e6] tests: avoid spurious assertion failure in test-float.c on ppc64 * [8b18afa]->[c948e19] sys_select: Avoid a syntax error regarding timespec_t on IRIX 6.5. * [de1fa2a]->[17f0ec6] openat: work around AIX 7.1 fstatat issue * [6cf1a95]->[338ebcb] lib/fstatat.c: Include before . * [d21602d]->[aa4ddc3] pthread: Determine $(LIB_PTHREAD) correctly on IRIX 6.5. * [7c712d9]->[b34698e] imaxabs: Avoid link error on OSF/1 with DTK cc. * [d828cda]->[6add58a] imaxdiv: Avoid link error on OSF/1 with DTK cc. * [ae006b4]->[4a9738e] strtoimax: Avoid link error on OSF/1 with DTK cc. * [24bfc89]->[1d71dc7] strtoumax: Avoid link error on OSF/1 with DTK cc. * [d1fa59e]->[e238a25] strtoimax, strtoumax: Document problem on HP-UX 11. * [e4078c6]->[b26a79b] avoid literal : in index entries * [e91216b]->[946c971] openat: test for fstatat (AT_FDCWD, ..., 0) bug * [204072b]->[9f60473] openat: test for fstatat (..., 0) bug * [a05ce27]->[f4293d3] openat: port to AIX 7.1 with large files * [90a660c]->[e916d00] autoupdate * [76074e9]->[a5e4927] openat: Work around compilation error with OSF/1 5.1 DTK cc. ---------------------------------------------------------------------- * 20110609-stable Snapshot taken based on: commit 0c4be75eb0966bde4533bc111778e0ab494a93be Date: Wed May 18 13:13:03 2011 -0600 with the following additional commits: * [48cc748]->[a5f8483] intprops: TYPE_IS_INTEGER, TYPE_SIGNED not integer constant exprs * [8cc0fee]->[8c5e817] intprops: work around C compiler bugs * [92c71a1]->[2dd0ce3] intprops: work around IRIX 6.5 cc bug with 0u - 0u + -1 * [c9ff025]->[056b00f] maint: correct misuse of "a" and "an" * [93d7550]->[0cc5541] maint: replace misused "a" with "an" * [325f131]->[f00bf3d] relocatable-prog-wrapper: Fix possible link error. * [21eb071]->[8694861] clock-time: change to LGPLv2+. * [6c8bcfc]->[617bbef] * doc/intprops.texi: fix typo in copyright date * [99b3138]->[9279f19] verify: fix bug when gnulib is also included * [64c6332]->[98ce667] linkat, renameat: Update dependencies. * [fbd3cc5]->[be2aacf] getugroups: Fix module description. * [ddd54c7]->[cd78e73] gnulib-tool: fix portability problem with MacOS sed * [59ed6e8]->[1166200] idcache: Fix module description. * [1e8752a]->[4831e70] Fix recent ChangeLog entry. * [d94bbd1]->[4af1887] opendir-safer.c: don't clobber errno; don't close negative FD * [6dc42e2]->[d0fe920] utimensat: do not reference an out-of-scope buffer * [866bbae]->[b9bb8b9] tests: fix logic bug in init.sh * [fc9b0f6]->[cca883f] atexit-tests: ensure reliable exit status * [f4c4af0]->[61c4bf6] docs: document recently fixed glibc printf bug * [9d196fa]->[a3a87d2] test-intprops: disable -Wtype-limits diagnostics * [1622b36]->[527d6c4] getcwd: work around mingw bug * [4ed9779]->[d1c9bfc] mbsrchr: Avoid collision with system function on Interix. * [03f358b]->[1ad6403] gen-uni-tables: Say "gen-uni-tables.c" consistently. * [8d8a973]->[cb6151a] getloadavg: Remove an unreliable safety check. * [fdc9e6c]->[264ebf0] Status of work-in-progress around libposix. * [2449068]->[cfd76ac] trim: avoid a warning from -O2 -Wstrict-overflow * [a8ff65c]->[264aa35] parse-datetime.y: accommodate -Wstrict-overflow * [05f391a]->[ca57003] wctype-h: Avoid namespace pollution on Solaris 2.6. * [224c034]->[225c8ef] Fix link errors in tests: wait-process uses gettext-h. * [9c3746f]->[7f56311] build-aux/config.sub * [7c886ca]->[802ee67] Fix link errors in tests: openat-die uses gettext-h. * [64e3383]->[e54b616] pipe2: Remove dependency on 'nonblocking' module. * [27edfbd]->[4ba5a2c] doc: Fix a module name. * [872f360]->[8248d1a] Copyright: Use LGPL 2.1 instead of LGPL 2.0. * [0605107]->[d9883ac] setlocale: Enable replacement on Cygwin 1.5. * [d3e6271]->[1a2b0e6] sys_select: Ensure memset is declared also on AIX 7. * [c00787b]->[11da7a4] setenv: Avoid gcc warning. * [6f88ff3]->[4c509f3] unsetenv: Avoid gcc warning. * [1866b23]->[0560196] localename: Fix link dependencies. * [bf7690a]->[54731c1] pipe-filter-ii: Fix test failure on AIX and IRIX. * [e7754b0]->[52062c8] acl: Fix test failure on AIX 7. * [c914617]->[34d3cce] ansi-c++-opt: Interoperability with libtool. * [3f9fff2]->[0bd455a] careadlinkat: Avoid mismatch between ssize_t and int. * [c224523]->[5c698ae] canonicalize-lgpl: work around AIX realpath bug * [79aac72]->[cc1a9b7] canonicalize-lgpl: use common idiom * [3180807]->[768eb31] doc/lgpl-2.1.texi * [fba3245]->[a96c4d5] tests: fix usage message in 'mktempd_' * [7b2b693]->[a43f6fd] autoupdate * [3639716]->[74c0798] rmdir: Avoid test failure on HP-UX 10.20. * [9776680]->[6ddae30] acl tests: Fix compilation error on HP-UX 11. * [5f0441a]->[c1bf224] thread: Fix confusion between NULL and 0. ---------------------------------------------------------------------- * 20110412-stable Snapshot taken based on: commit dec3475763be252103922a887920012eeb32dc26 Date: Thu Mar 31 15:28:37 2011 -0600 with the following additional commits: * [b64c50c]->[c8bdb92] wcpcpy, wcpncpy: Ensure declaration on glibc >= 2.13 systems. * [25d7f3a]->[6c630cd] wmemchr, wcschr, wcsrchr, wcspbrk, wcsstr: Avoid errors in C++ mode. * [eccf108]->[de98845] autoupdate * [a2c7be5]->[d6acfb1] maint.mk: Don't trigger sc_space_tab check. * [31c3890]->[eb1217e] pipe2: Relicense under LGPLv2+. * [bd5d1e6]->[2db494c] binary-io: relicense under LGPLv2+ * [b277764]->[a7091b5] fcntl-h: fix O_ACCMODE on cygwin * [306bd09]->[6870aba] autoupdate * [62f3b86]->[90309e4] getaddrinfo: Fix test for sa_len member. * [5e29a7a]->[9bb2e6b] test-chown.h: correct a cast * [eff4c03]->[7f3fdea] stdint test: Fix compilation failure on OSF/1 with DTK compiler. * [ca6143b]->[8571b74] autoupdate * [fb79969]->[fa84676] autoupdate ---------------------------------------------------------------------- * 20110216-stable Snapshot taken based on: commit f9289f00be9b70c0cb469faee8a40a768d7c6d43 Date: Wed Feb 9 20:55:19 2011 +0100 with the following additional commits: * [27147dc]->[4c5d3e6] doc: update users.txt * [a54ee6e]->[a1245ce] doc: update users.txt * [4cce65c]->[b9f1203] doc: update users.txt * [aa887f8]->[ce38c27] mbsrtowcs: Work around bug on native Windows. * [c9dc6ff]->[461ace8] wcsrtombs: Work around bug on native Windows. * [06c2675]->[1138b90] stdlib: support non-GCC __attribute__ * [4baa767]->[1dfaba6] quotearg test: Avoid test failure on mingw. * [b45dc21]->[d19a89f] stdlib: don't get in the way of non-GCC __attribute__ * [9fbdea6]->[860215e] Fix last ChangeLog entry. * [e680a55]->[2d86779] Don't interfere with a program's definition of __attribute__. * [a38e4bb]->[6f5e418] mbsinit: Don't crash for a NULL argument. * [cca34e7]->[1b94e03] mbsinit: Work around mingw bug. * [a035a8d]->[2bbd452] mbrtowc: Work around native Windows bug. * [f6a5a12]->[c7a1790] Don't interfere with a program's definition of __attribute__. * [59b191e]->[5f5a2a4] Consistent macro naming for macros that use GCC __attribute__. * [bf2664d]->[25ab657] doc: update users.txt * [665d45c]->[321331f] autoupdate ---------------------------------------------------------------------- * 20101221-stable This snapshot is identical to the previous 20101220-stable snapshot, with the addition of one fix: * [d534aa8]->[385ec31] iconv_open: Fix regression from 2010-12-04. ---------------------------------------------------------------------- * 20101220-stable Snapshot taken based on: commit 64911207854610668b480939469282fdaeb96f74 Date: Tue Dec 7 03:32:46 2010 +0100 with the following additional commits: * [8029e49]->[6f83d07] autoupdate * [0de2016]->[c94504d] * build-aux/gendocs.sh: restore x bit * [82afcdd]->[e631098] autoupdate * [980f9d2]->[20c5bd5] cloexec, fcntl: relax license * [15a8eaf]->[68e0cfc] tests: set fail=0 at start * [ef6309e]->[d157341] acl: port to Solaris 8 when copying from tmpfs to ufs * [585734b]->[fb7d1d8] iconv: Make it possible again to use this module without 'iconv-h'. * [7b4e992]->[3eb5095] unistr/u8-mbsnlen: Add missing dependency. * [cc0adb3]->[e65c7e5] relocatable-prog-wrapper: Separate from relocatable-prog. * [423d3ca]->[6f9e924] doc: Mention vasprintf-posix module. * [224a907]->[7131d7e] Document some different function declarations on OSF/1 5.1. ---------------------------------------------------------------------- * 20101024-stable Snapshot taken based on: commit ba523890aa7bae76e3ac6b3ce68f22a79d25ce2c Date: Wed Oct 13 10:15:38 2010 +0200 with the following additional commits: * [b6d1430]->[fef7abe] termios: fix compilation on mingw * [74b1e48]->[7bf74f7] socketlib: Fix. * [d239853]->[ced7fa1] vasnprintf: Don't set errno to 0. * [fdaeccf]->[66e670a] GNUmakefile: handle "stable" target, not "major" * [cac3889]->[7661272] ignore-value: make header idempotent * [61241ea]->[25d72f8] termios: Update documentation. * [94617c2]->[a964f9e] Fix date in ChangeLog. * [3f75f63]->[7966020] nextafter: Fix configure check. * [b86f488]->[ddc319e] c-stack: work around libsigsegv 2.8 bug * [a0598ff]->[69c6204] nl_langinfo test: Avoid test failure on NetBSD 5. * [f8dd25c]->[9116c10] Tests: Fix LOCALE_JA on MirBSD 10. * [9645318]->[87dea4e] nl_langinfo: Mention problem with CRNCYSTR on NetBSD 5.0. ---------------------------------------------------------------------- * 20100829-stable Snapshot taken based on: commit 3f08220c1a263dfc45f6e0ce6dcee97631dd5e56 Date: Tue Aug 17 07:18:27 2010 -0700 with the following additional commits: * [6333e13]->[a2ae92e] Fix gnulib-tool sed script de-commentation for AIX sed. * [350aad7]->[9e05eaf] autoupdate * [06728e0]->[c94cede] fts: allow compilation with C++ * [51c2a23]->[880d107] poll, select: handle ERROR_BROKEN_PIPE. * [0c37a90]->[0b22530] argz: fix shell quoting issue * [204e903]->[99d6cd5] stdbool: avoid rejecting clang * [5a2d7e1]->[21182ba] priv-set: fix comments * [a9ec89b]->[325e969] priv-set: fix comment * [667277d]->[d74874d] getloadavg: don't define SVR4 on cygwin * [8c8ee4b]->[24ad42e] getloadavg: simplify code * [cab03f4]->[6acb78a] stdbool: avoid spurious failure with modern xlc * [8951e0e]->[2981537] Fix test-unlinkat, test-rmdir failure on AIX 5.3. * [0a05120]->[a83a25f] poll: return immediately on POLLHUP. * [fc9e09a]->[63b29c2] autoupdate * [20e165d]->[6a0e461] stat-time: relax license LGPL * [2901094]->[90aa7a1] acl: fix compilation test * [a228f53]->[0b86eb2] lseek: fix link test * [14b6d70]->[3056d82] btowc: fix missing file * [78ea303]->[0e59cb6] glob: fix compile test * [06e1426]->[7434863] lib-symbol-versions: fix m4 quoting * [6530a2c]->[d45eaf1] login_tty: add missing dependeny * [f99e41e]->[176c42a] * ChangeLog: fix typo * [ebf441c]->[2a3686a] sys_socket, netdb: Ensure socklen_t gets defined. * [63d392e]->[cb49949] Avoid relocwrapper link errors due to gnulib replacement functions. * [7a6e9cf]->[da66e7e] ftello: Relax license. * [5712b08]->[02df495] autoupdate * [6c345f6]->[9a348fb] unistr/u*-strchr: Fix tests dependencies. * [c4bc551]->[2b958de] pread, pwrite: add missing dependency ---------------------------------------------------------------------- * 20100704-stable Snapshot taken based on: commit 86ba51d2c17219b82b977da0a912e05a3d9bf858 Date: Sun Jun 20 13:31:40 2010 +0200 with the following additional commits: * [d0ed135]->[8626eaa] autoupdates * [386abcb]->[a155c56] autoupdate * [599af40]->[170554f] unitypes: Fix bug introduced on 2010-05-18. * [7740412]->[331fd48] string: Fix syntax error with g++ 2.96. * [5616180]->[ce5a4ac] idpriv-drop: Fix tests. * [6e9c624]->[cbec1d8] gettext: Use AC_GNU_SOURCE as a fallback for AC_USE_SYSTEM_EXTENSIONS. * [7773f84]->[a01b938] stdbool: Update doc. ---------------------------------------------------------------------- * 20100424-stable Snapshot taken based on: commit ba564f2164f381af846d9695e6465cffe7ec918c Date: Fri Apr 9 02:02:15 2010 +0200 with the following additional commits: * [950f346]->[99a272b] ftruncate: mark module as obsolete; even MinGW provides it, now * [2d4d227]->[358e18f] Add attribution to a ChangeLog entry. * [38e3c69]->[a11321f] ftruncate: add two years to projected module removal date: 2012 * [6b8b58b]->[1ce7c50] init.sh: run tr in the "C" locale to avoid multibyte interpretation * [85f6993]->[bcd59b9] Add missing parenthesis in manywarnings example * [3213c10]->[102392e] vasnprintf test: Reduce code duplication. * [3c65a68]->[4b43aec] write: Fix a C++ test error on mingw. * [067d1f1]->[cc75f4b] vasnprintf: Fix multiple test failures on mingw. * [32d1664]->[e651e75] vasnprintf: Fix crash in %ls directive. * [0167c19]->[8bd3d4c] vasnprintf: Correct handling of unconvertible wide string arguments. * [de9f4b1]->[c886605] vasnprintf: Add more tests. * [15a0c62]->[849156a] fchownat: Fix a C++ test error on Solaris 8. * [67c7b8e]->[42d09c4] maint.mk: correct a diagnostic * [b969309]->[70b21bf] mkdir: Make it work on mingw64. * [3c79d51]->[9f9fbf6] Update comment. * [03271c7]->[f5544ce] Fix typo in comment. * [1820b30]->[3e18c19] libunistring: Detect libunistring also when it depends on libiconv. * [82b0be3]->[6f6d4bf] havelib: Add static libraries to LIBS in the right order. * [e330e06]->[1d3b6f0] libunistring: Correct value of $LTLIBUNISTRING. * [c9f911d]->[86cda03] autoupdate * [197b47e]->[5510d3d] git-version-gen: use "git update-index..." rather than "git status" * [5fbd6e3]->[5fbd6e3] doc: users.txt: GNU patch now uses gnulib * [2abb98c]->[f07545c] getopt-posix: avoid spurious failure on FreeBSD * [3108b95]->[1454b1f] getopt-posix: avoid spurious failure on Solaris * [5cc0bcf]->[d711c30] getopt-posix: detect MacOS bug * [db3e280]->[cc1fb6a] getopt: merge bug fixes from glibc * [61c96af]->[6229a28] getopt-gnu: match recent glibc fixes and posix ruling * [d39bc2c]->[588d54b] autoupdate * [7c1b995]->[a251be0] strtok_r: relax license to LGPLv2+ * [56d363d]->[57a3236] test-forkpty: fix expected signature * [e764ea2]->[0dc1446] openpty: Fix mistake from 2010-03-21. * [ae75893]->[854fe4e] Override netdb.h always. * [93b28fe]->[e7f1d9f] ioctl: Move autoconf macro to a .m4 file. * [710c8d3]->[8cf9b2c] relocatable: Drop the need to define RELOCATABLE_STRIP in Makefile.am. * [2f31750]->[2676677] relocatable: Simplify doc. * [cea53ef]->[5428678] bootstrap: use "git -h" instead of "git --help" * [e51d12c]->[528ab01] vasnprintf: Correct errno value in case of out-of-memory. and one local commit, submitted upstream: * [7ffc813]->[b219cbd] make check: avoid an error when no .git dir present. ---------------------------------------------------------------------- * 20100308-stable Snapshot taken based on: commit 4fc10daa05477586fea99b6b3ca02a87d1102fa1 Date: Mon Mar 1 22:09:44 2010 +0100 with the following additional commits: * [88baa1e]->[6681664] spawn: Don't override the system defined values on FreeBSD 8. * [ca156dd]->[12e638f] copy-acl: enhance Solaris ACL error handling * [fa93cea]->[fbe6ced] exit: Obsolete module, use stdlib instead. * [eb6dce1]->[529ebff] exitfail: Relax license to LGPLv2.1+. Drop exitfail.m4. * [434627d]->[3dfb904] Prefer lib_SOURCES over unconditional AC_LIBOBJ. * [032088a]->[99e99ca] euidaccess: relax license to LGPLv2+ * [3753983]->[51c9c87] Fix incorrect Makefile.am generation in German locale. * [89e5b6b]->[6fde090] Clarify access, euidaccess, faccessat. * [798f5bd]->[661fa69] Fix link error on platforms with GNU libiconv. * [94a90dc]->[a62a0db] Exclude lib-ignore module. * [fc980d5]->[9f46144] Fix test-dirent link error. * [f19a2e5]->[2e4b5be] Fix test-dirent-safer link error. Correct last commit. * [7d09cc8]->[c896764] Fix test-cond link error. ---------------------------------------------------------------------- * 20100109-stable Snapshot taken based on: commit 12319ff4e84ca616a671216d991dd6eaf1c39c47 Date: Fri Jan 1 16:00:07 2010 +0100 with the following additional commits: * [e7100ae]->[60a41fa] headers: make check of system header explicit * [1bf02c3]->[2e79dd2] wchar: Remove unused configure check. * [8f3aa1f]->[ab43907] autoupdate * [e138cd8]->[18a2e77] fdopendir: fix configure test * [7a29e00]->[11639c6] nl_langinfo: avoid configure-time syntax error * [51983dc]->[fab630e] mkdir: avoid xalloc * [28e6fc0]->[b8025c4] xalloc.h: use consistent formatting * [0c2fded]->[41d7de2] maint.mk: include 4 more function names in alloca.h-checking regexp * [0e0f8f1]->[2d44e17] maint: remove useless inclusions of "alloca.h" * [c1b6197]->[9e93370] ChangeLog: correct last entry: s/alloca.h/xalloc.h/ * [f8b8f4f]->[bfdc843] strcase: document what it provides * [41c44a6]->[88de58a] utimens (fdutimens): ignore a negative FD, per contract * [735d9d0]->[8a69e5c] maint: support 'make announcement' from a VPATH build * [816a1ec]->[0d57ec9] readtokens: this module *does* require xalloc.h * [f9eed4b]->[58b5448] nl_langinfo: do not call AC_CHECK_FUNC_ONCE inside if. * [60ad192]->[932e55d] stdio, unistd: guarantee ssize_t * [ae0044c]->[78c1179] autoupdate * [eb9c0c2]->[d0f97a4] cleanup after gl_FUNC_READLINK, for gl_FUNC_SYMLINK test * [e5697c6]->[b4e7212] linkat, renameat: avoid bad free * [010ecd2]->[65e8854] dirent: fix test failure * [978114f]->[eb65fea] pread: fix compilation on glibc * [2f0e0a8]->[c93838e] doc: regenerate INSTALL * [654c876]->[4b8c490] select: add missing dependency * [c4b4563]->[9ebfb66] maint.mk: ignore multi-line copyright in NEWS * [cb361c9]->[d9d722c] maint.mk: detect incorrect GFDL usage * [c1a179c]->[abd3f20] wctype: allow C++ use * [6751651]->[1c3411f] autoupdate * [5cd308a]->[d1ecc61] ChangeLog: Correct a recent entry. * [7f01cc5]->[77f03a3] nl_langinfo: Simplify logic. * [cc6a687]->[efba37d] doc: Clarify the platforms. * [64cbadd]->[a75ac7f] xlist, xoset: Fix missing dependency bug, introduced on 2009-12-13. * [f1195cc]->[877b01f] stdio: Ensure defines off_t, ssize_t, va_list. * [027bd46]->[53c2db0] dirent: Document the last fix. * [969fe75]->[085b493] mbslen: Avoid collision with system function. * [ccc06b2]->[3437136] Fix indentation of wctype.in.h, broken since 2007-01-06. * [0906b5f]->[6b40a56] glob: Fix C++ compilation. * [2cf2e37]->[0b0ac4a] dup2: work around mingw bug * [581419c]->[fad0fe1] lib/dup2.c (rpl_dup2): Improve comment. * [dd5823d]->[465b4d1] Tests for module 'getlogin_r'. * [3361cfa]->[5bfd3af] getlogin_r: Add comment. * [89b39ef]->[88bc1a6] getlogin_r: Small fixes. * [570a589]->[d6b7bf8] getlogin_r: Support for native Windows. * [630a387]->[b2c3f71] unistr/u8-to-u16: Reject invalid input. * [95a86a9]->[f3af270] unistr/u8-to-u32: Reject invalid input. * [f03c8d5]->[987b3c4] unistr/u16-to-u8: Reject invalid input. * [19aa55e]->[b4ee15b] unistr/u16-to-u32: Reject invalid input. ---------------------------------------------------------------------- * 20091120-stable Snapshot taken based on: commit 7becd9d708425924f3a402fdd3c6e18ba2a7e4e3 Date: Sat Nov 7 16:03:38 2009 -0700 with the following additional commits: * [26c5fd7]->[7eb2ad0] utimens: remove invalid futimesat call * [6553be8]->[510522d] strftime.c: include ignore-value.h only when FPRINTFTIME is defined * [349396e]->[cc85265] stat: detect FreeBSD bug * [48e9883]->[7f013da] open: detect FreeBSD bug * [d462fe1]->[02634ef] rename: detect FreeBSD bug * [b0d3085]->[fd021c4] autoupdate * [2420877]->[12a64eb] unlink, remove: detect FreeBSD bug * [492960c]->[24c30ab] link: detect FreeBSD bug * [24a6037]->[ec14720] symlink: detect FreeBSD bug * [dfd4d11]->[3bb65d2] readlink: detect FreeBSD bug * [7127847]->[c9698f2] bootstrap: generalize autoheader check * [ac67780]->[3739c19] fts: do not fail on a submount during traversal * [08e6b4c]->[82a192d] getgroups: fix logic error * [80074d1]->[d9cc1a4] getgroups: avoid calling exit * [61b3a42]->[a12148f] getgroups, getugroups: provide stubs for mingw * [0173b1e]->[dc5014b] test-getgroups: avoid compilation failure * [f3a2c4a]->[5390af1] getgroups: avoid compilation failure * [1e642be]->[867cf3b] getgroups: work around FreeBSD bug * [cf0c4ab]->[2d61dc2] getgroups: avoid compiler warning * [ee8909a]->[28fc486] strftime.h: wrap funtion declaration in extern "C" block * [fb1b608]->[d837f67] gnulib-tool: correctly detect absence of m4 directories * [a86ea84]->[e14e479] fnmatch: avoid compiler warning * [24a6641]->[16685f1] lib/gc-pbkdf2-sha1.c: Remove comments from RFC 2898. * [1b712ba]->[4b4b924] avoid new AC_REQUIRE expanded-before-required warnings * [6963723]->[456348e] better AC_REQUIRE expanded-before-required-warning avoidance * [1c32714]->[dc372f7] version-etc: relax license to LGPLv3+ * [7e52ced]->[3f0179e] version-etc-fsf: relax license to LGPLv3+ * [b205080]->[e09f5b5] version-etc: use proper license string * [b9d28ec]->[f2baca9] Add `gnulib-tool --import' support for LGPLv3+. * [d9d9b26]->[6d8c90b] Add. * [0883405]->[72abcbb] utimens: fix regression on Solaris * [8cfd4a9]->[8607d21] tests: avoid false negative with --with-packager * [111e540]->[0028f27] build: avoid compiler warnings * [841ad19]->[c6d977e] manywarnings: depend on warnings * [758f912]->[dd21f46] autoupdate gnulib-20111211-stable/README000066400000000000000000000327721167105100700153650ustar00rootroot00000000000000Gnulib ====== 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 gnulib-tool script. Since there is no installation procedure for Gnulib, 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 gnulib-tool, or by using a symbolic link from a place inside your PATH to the gnulib-tool file of your preferred Gnulib checkout. For example: $ ln -s $HOME/gnu/src/gnulib.git/gnulib-tool $HOME/bin/gnulib-tool The home page for Gnulib is http://www.gnu.org/software/gnulib. git and CVS =========== Gnulib is available for anonymous checkout. In any Bourne-shell the following should work: $ git clone git://git.sv.gnu.org/gnulib.git For a read-write checkout you need to have a login on savannah.gnu.org and be a member of the gnulib project at http://savannah.gnu.org/projects/gnulib . Then, instead of the URL git://git.sv.gnu.org/gnulib use the URL ssh://@git.sv.gnu.org/srv/git/gnulib where is your login name on savannah.gnu.org. git resources: Overview: http://en.wikipedia.org/wiki/Git_(software) Homepage: http://git.or.cz/ Download: http://www.kernel.org/pub/software/scm/git/ Tutorial: http://git.or.cz/course/ http://www.kernel.org/pub/software/scm/git/docs/tutorial.html FAQ: http://git.or.cz/gitwiki/GitFaq When you use "git annotate" or "git blame" with gnulib, it's recommended that you use the "-w" option, in order to ignore massive whitespace changes that happened in 2009. CVS checkouts are also supported: $ cvs -d :pserver:anonymous@pserver.git.sv.gnu.org:/gnulib.git co -d gnulib HEAD Gnulib is hosted on savannah.gnu.org. The project page is http://savannah.gnu.org/projects/gnulib. Keeping Up-to-date ================== The best way to work with Gnulib is to check it out of git. Subscribing to the 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. To synchronize, you can use "git pull", or "cvs update -dP" if you are still using CVS. 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. 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 bug-gnulib@gnu.org. You can review the archives, subscribe, etc., via http://lists.gnu.org/mailman/listinfo/bug-gnulib. Generally we are looking for files that fulfill at least one of the following requirements: * If your .c and .h files define functions that are broken or missing on some other system, we should be able to include it. * 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. If your functions define completely new but rarely used functionality, you should probably consider packaging it as a separate library. License ------- 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. Indent with spaces, not TABs ---------------------------- We use space-only indentation in nearly all files. This includes all *.h, *.c, *.y files, except for the 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. * For Emacs: Add these lines to your Emacs initialization file ($HOME/.emacs or similar): ;; 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)))) * For vi (vim): Add these lines to your $HOME/.vimrc file: " Don't use tabs for indentation. Spaces are nicer to work with. set expandtab For Makefile and ChangeLog files, compensate this by adding this to your $HOME/.vim/after/indent/make.vim and $HOME/.vim/after/indent/changelog.vim files: " Use tabs for indentation, regardless of the global setting. set noexpandtab * For Eclipse: In the "Window|Preferences" dialog (or "Eclipse|Preferences" dialog on MacOS), 1. Under "General|Editors|Text Editors", select the "Insert spaces for tabs" checkbox. 2. 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. If you use the GNU indent program, pass it the option '--no-tabs'. How to add a new module ----------------------- * Add the header files and source files to lib/. * If the module needs configure-time checks, write an autoconf macro for it in m4/.m4. See m4/README for details. * Write a module description modules/, based on modules/TEMPLATE. * If the module contributes a section to the end-user documentation, put this documentation in doc/.texi and add it to the "Files" section of modules/. Most modules don't do this; they have only documentation for the programmer (= gnulib user). Such documentation usually goes into the lib/ source files. It may also go into doc/; but don't add it to the module description in this case. * Add the module to the list in MODULES.html.sh. You can test that a module builds correctly with: $ ./gnulib-tool --create-testdir --dir=/tmp/testdir module1 ... moduleN $ cd /tmp/testdir $ ./configure && make Other things: * Check the license and copyright year of headers. * Check that the source code follows the GNU coding standards; see . * Add source files to config/srclist* if they are identical to upstream and should be upgraded in gnulib whenever the upstream source changes. * Include header files in source files to verify the function prototypes. * Make sure a replacement function doesn't cause warnings or clashes on systems that have the function. * Autoconf functions can use gl_* prefix. The AC_* prefix is for autoconf internal functions. * Build files only if they are needed on a platform. Look at the alloca and fnmatch modules for how to achieve this. If for some reason you cannot do this, and you have a .c file that leads to an empty .o file on some platforms (through some big #if around all the code), then ensure that the compilation unit is not empty after preprocessing. One way to do this is to #include or before the big #if. Portability guidelines ---------------------- Gnulib code is intended to be portable to a wide variety of platforms, not just GNU platforms. See the documentation section "Target Platforms" for details. Many Gnulib modules exist so that applications need not worry about undesirable variability in implementations. For example, an application that uses the 'malloc' module need not worry about (malloc (0)) returning NULL on some Standard C platforms; and 'time_r' users need not worry about localtime_r returning int (not char *) on some platforms that predate POSIX 1003.1-2001. Currently we assume at least a freestanding C89 compiler, possibly operating with a C library that predates C89. The oldest environments currently ported to are probably HP-UX 10.20 and IRIX 5.3, though we are not testing these platforms very often. Because we assume a freestanding C89 compiler, Gnulib code can include , , , and unconditionally. It can also assume the existence of , , , , , , , , and . Similarly, many modules include even though it's not even in C99; that's OK since has been around nearly forever. Even if the include files exist, they may not conform to C89. However, GCC has a "fixincludes" script that attempts to fix most C89-conformance problems. So 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 to C89, the library itself may not. For example, strtod and mktime have some bugs on some platforms. You can work around some of these problems by requiring the relevant modules, e.g., the Gnulib 'mktime' module supplies a working and conforming 'mktime'. The GNU coding standards allow one departure from strict C99: Gnulib code can assume that standard internal types like size_t are no wider than 'long'. POSIX 1003.1-2001 and the GNU coding standards both require 'int' to be at least 32 bits wide, so Gnulib code assumes this as well. Gnulib code makes the following additional assumptions: * Signed integer arithmetic is two's complement. Previously, gnulib code sometimes 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. For more, please see the file doc/intprops.texi. Some gnulib modules contain explicit support for the other signed integer representations allowed by C99 (ones' complement and signed magnitude), but these modules are the exception rather than the rule. All practical gnulib targets use two's complement. * There are no "holes" in integer values: all the bits of an integer contribute to its value in the usual way. * If two nonoverlapping objects have sizes S and T represented as size_t values, then S + T cannot overflow. This assumption is true for all practical hosts with flat address spaces, but it is not always true for hosts with segmented address spaces. * If an existing object has size S, and if T is sufficiently small (e.g., 8 KiB), then S + T cannot overflow. Overflow in this case would mean that the rest of your program fits into T bytes, which can't happen in realistic flat-address-space hosts. * Objects with all bits zero are treated as 0 or NULL. For example, memset (A, 0, sizeof A) initializes an array A of pointers to NULL. * Adding zero to a null pointer does not change the pointer. For example, 0 + (char *) NULL == (char *) NULL. The above assumptions are not required by the C or POSIX standards but hold on all practical porting targets that we're familiar with. If you have a porting target where these assumptions are not true, we'd appreciate hearing of any fixes. We need fixes that do not increase runtime overhead on standard hosts and that are relatively easy to maintain. With the above caveats, Gnulib code should port without problem to new hosts, e.g., hosts conforming to C99 or to recent POSIX standards. Hence Gnulib code should avoid using constructs (e.g., undeclared functions return 'int') that do not conform to C99. 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 *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. ----- Copyright 2001, 2003-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 . gnulib-20111211-stable/STATUS-libposix000066400000000000000000000107261167105100700172750ustar00rootroot00000000000000Status 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-20111211-stable/build-aux/000077500000000000000000000000001167105100700163645ustar00rootroot00000000000000gnulib-20111211-stable/build-aux/announce-gen000077500000000000000000000360401167105100700206720ustar00rootroot00000000000000eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}' & eval 'exec perl -wS "$0" $argv:q' if 0; # Generate a release announcement message. my $VERSION = '2011-11-09 21:30'; # 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-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 . # Written by Jim Meyering use strict; use Getopt::Long; use Digest::MD5; use Digest::SHA1; use POSIX qw(strftime); (my $ME = $0) =~ s|.*/||; my %valid_release_types = map {$_ => 1} qw (alpha beta stable); my @archive_suffixes = ('tar.gz', 'tar.bz2', 'tar.lzma', 'tar.xz'); 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 --human $f"; my $t = `$cmd`; # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS $@ and (warn "$ME: command failed: `$cmd'\n"), $fail = 1; chomp $t; $t =~ 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 MD5 and SHA1 checksums:\n"; print "\n"; foreach my $meth (qw (md5 sha1)) { foreach my $f (@file) { open IN, '<', $f or die "$ME: $f: cannot open for reading: $!\n"; binmode IN; my $dig = ($meth eq 'md5' ? Digest::MD5->new->addfile(*IN)->hexdigest : Digest::SHA1->new->addfile(*IN)->hexdigest); close IN; print "$dig $f\n"; } } print "\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|^\./||; 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 "$ME: 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 "$ME: $t: unexpected --version output\n:$first_line"; $fail = 1; } } $fail and exit 1; return @tool_version_pair; } { # Neutralize the locale, so that, for instance, "du" does not # issue "1,2" instead of "1.2", what confuses 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; 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, '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"; exit }, ) or usage 1; my $fail = 0; # Ensure that sure each required option is specified. $release_type or (warn "$ME: release type not specified\n"), $fail = 1; $package_name or (warn "$ME: package name not specified\n"), $fail = 1; $prev_version or (warn "$ME: previous version string not specified\n"), $fail = 1; $curr_version or (warn "$ME: current version string not specified\n"), $fail = 1; $gpg_key_id or (warn "$ME: GnuPG key ID not specified\n"), $fail = 1; @url_dir_list or (warn "$ME: URL directory name(s) not specified\n"), $fail = 1; my @tool_list = split ',', $bootstrap_tools; grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version and (warn "$ME: 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; exists $valid_release_types{$release_type} or (warn "$ME: `$release_type': invalid release type\n"), $fail = 1; @ARGV and (warn "$ME: 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!http://ftp\.gnu\.org/gnu/!) { (my $m = "$url_dir_list[0]/$tarballs[0]") =~ s!http://ftp\.gnu\.org/gnu/!http://ftpmirror\.gnu\.org/!; print " $m\n" . " $m.sig\n\n"; } else { print " http://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 Win32 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*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) 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 local_gl_dir=gl # Temporary directory names. bt='._bootmp' bt_regex=`echo "$bt"| sed 's/\./[.]/g'` bt2=${bt}2 me=$0 usage() { cat </dev/null 2>&1; then find_tool_res=$i break fi done else find_tool_error_prefix="\$$find_tool_envvar: " fi if test x"$find_tool_res" = x; then echo >&2 "$me: one of these is required: $find_tool_names" exit 1 fi ($find_tool_res --version /dev/null 2>&1 || { echo >&2 "$me: ${find_tool_error_prefix}cannot run $find_tool_res --version" exit 1 } eval "$find_tool_envvar=\$find_tool_res" eval "export $find_tool_envvar" } # Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6. find_tool SHA1SUM sha1sum gsha1sum shasum # 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 # Extra files from gnulib, which override files from other sources. test -z "${gnulib_extra_files}" && \ gnulib_extra_files=" $build_aux/install-sh $build_aux/missing $build_aux/mdate-sh $build_aux/texinfo.tex $build_aux/depcomp $build_aux/config.guess $build_aux/config.sub doc/INSTALL " if test "$vc_ignore" = auto; then vc_ignore= test -d .git && vc_ignore=.gitignore test -d CVS && vc_ignore="$vc_ignore .cvsignore" fi # Translate configuration into internal form. # Parse options. for option do case $option in --help) usage exit;; --gnulib-srcdir=*) GNULIB_SRCDIR=`expr "X$option" : 'X--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;; *) echo >&2 "$0: $option: unknown option" exit 1;; esac done if $use_git || test -d "$GNULIB_SRCDIR"; then : else echo "$0: Error: --no-git requires --gnulib-srcdir" >&2 exit 1 fi if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2 exit 1 fi # Ensure that lines starting with ! sort last, per gitignore conventions # for whitelisting exceptions after a more generic blacklist pattern. sort_patterns() { sort -u "$@" | sed '/^!/ { H d } $ { P x s/^\n// }' | sed '/^$/d' } # If $STR is not already on a line by itself in $FILE, insert it, # sorting the new contents of the file and replacing $FILE with the result. insert_sorted_if_absent() { file=$1 str=$2 test -f $file || touch $file echo "$str" | sort_patterns - $file | cmp - $file > /dev/null \ || { echo "$str" | sort_patterns - $file > $file.bak \ && mv $file.bak $file; } \ || exit 1 } # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with # insert_sorted_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_sorted_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 if test $found_aux_dir = no; then echo "$0: expected line not found in configure.ac. Add the following:" >&2 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2 exit 1 fi # 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() { app=$1 $app --version >/dev/null 2>&1 || return 1 $app --version 2>&1 | sed -n '# 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' } 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 | tr '[a-z]-' '[A-Z]_'` test "$appvar" = TAR && appvar=AMTAR case $appvar in GZIP) ;; # Do not use $GZIP: it contains gzip options. *) eval "app=\${$appvar-$app}" ;; 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. $app --version >/dev/null 2>&1 if [ 126 -le $? ]; then echo "$me: Error: '$app' not found" >&2 ret=1 fi else # Require app to produce a new enough version string. inst_ver=$(get_version $app) if [ ! "$inst_ver" ]; then echo "$me: Error: '$app' not found" >&2 ret=1 else latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) if [ ! "$latest_ver" = "$inst_ver" ]; then echo "$me: Error: '$app' version == $inst_ver is too old" >&2 echo " '$app' version >= $req_ver is required" >&2 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 } 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 if ! printf "$buildreq" | check_versions; then echo >&2 if test -f README-prereq; then echo "$0: See README-prereq for how to get the prerequisite programs" >&2 else echo "$0: Please install the prerequisite programs" >&2 fi exit 1 fi echo "$0: Bootstrapping from checked-out $package sources..." # See if we can use gnulib's git-merge-changelog merge driver. if test -d .git && (git --version) >/dev/null 2>/dev/null ; then if git config merge.merge-changelog.driver >/dev/null ; then : elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; 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 "$@" } gnulib_path=`git_modules_config submodule.gnulib.path` test -z "$gnulib_path" && gnulib_path=gnulib # Get gnulib files. case ${GNULIB_SRCDIR--} in -) if git_modules_config submodule.gnulib.url >/dev/null; then echo "$0: getting gnulib files..." git submodule init || exit $? git submodule update || exit $? elif [ ! -d "$gnulib_path" ]; then echo "$0: getting gnulib files..." trap cleanup_gnulib 1 2 13 15 shallow= git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" || cleanup_gnulib trap - 1 2 13 15 fi GNULIB_SRCDIR=$gnulib_path ;; *) # Use GNULIB_SRCDIR as a reference. if 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 || 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 && git submodule update \ || exit $? fi fi GNULIB_SRCDIR=$gnulib_path fi ;; esac if $bootstrap_sync; then cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { echo "$0: updating bootstrap and restarting..." exec sh -c \ 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ -- "$GNULIB_SRCDIR/build-aux/bootstrap" \ "$0" "$@" --no-bootstrap-sync } fi gnulib_tool=$GNULIB_SRCDIR/gnulib-tool <$gnulib_tool || exit # Get translations. download_po_files() { subdir=$1 domain=$2 echo "$me: getting translations into $subdir for $domain..." cmd=`printf "$po_download_command_format" "$domain" "$subdir"` 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 --status "$cksum_file" \ < "$new_po" > /dev/null; then echo "$me: updated $po_dir/$po.po..." cp "$new_po" "$po_dir/$po.po" \ && $SHA1SUM < "$new_po" > "$cksum_file" 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 `echo "$dst_dir"|sed 's,.*/,,'` 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 time stamp 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 *//* | */../* | */./* | /*/*/*/*/*/) echo >&2 "$me: invalid symlink calculation: $src -> $dst" exit 1;; /*/*/*/*/) dot_dots=../../../;; /*/*/*/) dot_dots=../../;; /*/*/) dot_dots=../;; esac;; esac echo "$me: ln -fs $dot_dots$src $dst" && ln -fs "$dot_dots$src" "$dst" } fi } } cp_mark_as_generated() { cp_src=$1 cp_dst=$2 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst" elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then symlink_to_dir $local_gl_dir "$cp_dst" else case $cp_dst in *.[ch]) c1='/* '; c2=' */';; *.texi) c1='@c '; c2= ;; *.m4|*/Make*|Make*) c1='# ' ; c2= ;; *) c1= ; c2= ;; esac # If the destination directory doesn't exist, create it. # This is required at least for "lib/uniwidth/cjk.h". dst_dir=`dirname "$cp_dst"` test -d "$dst_dir" || mkdir -p "$dst_dir" if test -z "$c1"; then cmp -s "$cp_src" "$cp_dst" || { # Copy the file first to get proper permissions if it # doesn't already exist. Then overwrite the copy. echo "$me: cp -f $cp_src $cp_dst" && rm -f "$cp_dst" && cp "$cp_src" "$cp_dst-t" && sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" && mv -f "$cp_dst-t" "$cp_dst" } else # Copy the file first to get proper permissions if it # doesn't already exist. Then overwrite the copy. cp "$cp_src" "$cp_dst-t" && ( echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" && echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" && sed "s!$bt_regex/!!g" "$cp_src" ) > $cp_dst-t && if cmp -s "$cp_dst-t" "$cp_dst"; then rm -f "$cp_dst-t" else echo "$me: cp $cp_src $cp_dst # with edits" && mv -f "$cp_dst-t" "$cp_dst" fi fi fi } version_controlled_file() { dir=$1 file=$2 found=no if test -d CVS; then grep -F "/$file/" $dir/CVS/Entries 2>/dev/null | grep '^/[^/]*/[0-9]' > /dev/null && found=yes elif test -d .git; then git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes elif test -d .svn; then svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes else echo "$me: no version control for $dir/$file?" >&2 fi test $found = yes } slurp() { for dir in . `(cd $1 && find * -type d -print)`; do copied= sep= for file in `ls -a $1/$dir`; do case $file in .|..) continue;; # FIXME: should all file names starting with "." be ignored? .*) continue;; esac test -d $1/$dir/$file && continue for excluded_file in $excluded_files; do test "$dir/$file" = "$excluded_file" && continue 2 done if test $file = Makefile.am && test "X$gnulib_mk" != XMakefile.am; then copied=$copied${sep}$gnulib_mk; sep=$nl remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || { echo "$me: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && rm -f $dir/$gnulib_mk && sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk && gnulib_mk_hook $dir/$gnulib_mk } elif { test "${2+set}" = set && test -r $2/$dir/$file; } || version_controlled_file $dir $file; then echo "$me: $dir/$file overrides $1/$dir/$file" else copied=$copied$sep$file; sep=$nl cp_mark_as_generated $1/$dir/$file $dir/$file fi || exit done for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$dir/$dot_ig if test -n "$copied"; then insert_vc_ignore $ig "$copied" # If an ignored file name ends with .in.h, then also add # the name with just ".h". Many gnulib headers are generated, # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc. # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed f=`echo "$copied" | sed ' s/\.in\.h$/.h/ s/\.sin$/.sed/ s/\.y$/.c/ s/\.gperf$/.h/ ' ` insert_vc_ignore $ig "$f" # For files like sys_stat.in.h and sys_time.in.h, record as # ignorable the directory we might eventually create: sys/. f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'` insert_vc_ignore $ig "$f" fi done done } # Create boot temporary directories to import from gnulib and gettext. rm -fr $bt $bt2 && mkdir $bt $bt2 || exit # Import from gnulib. gnulib_tool_options="\ --import\ --no-changelog\ --aux-dir $bt/$build_aux\ --doc-base $bt/$doc_base\ --lib $gnulib_name\ --m4-base $bt/$m4_base/\ --source-base $bt/$source_base/\ --tests-base $bt/$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 && slurp $bt || exit for file in $gnulib_files; do symlink_to_dir "$GNULIB_SRCDIR" $file || exit done # Import from gettext. with_gettext=yes grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ with_gettext=no if test $with_gettext = yes; then echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..." cp configure.ac $bt2 && (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) && slurp $bt2 $bt || exit fi rm -fr $bt $bt2 || exit # 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 # Reconfigure, getting other files. # Skip autoheader if it's not needed. grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null || AUTOHEADER=true for command in \ libtool \ "${ACLOCAL-aclocal} --force -I '$m4_base' $ACLOCAL_FLAGS" \ "${AUTOCONF-autoconf} --force" \ "${AUTOHEADER-autoheader} --force" \ "${AUTOMAKE-automake} --add-missing --copy --force-missing" do if test "$command" = libtool; then test $use_libtool = 0 \ && continue command="${LIBTOOLIZE-libtoolize} -c -f" fi echo "$0: $command ..." eval "$command" || exit done # 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/`expr "$file" : 'build-aux/\(.*\)'`;; *) dst=$file;; esac symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit 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 || exit 1 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 || exit 1 # 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnulib-20111211-stable/build-aux/bootstrap.conf000066400000000000000000000041321167105100700212500ustar00rootroot00000000000000# Bootstrap configuration. # Copyright (C) 2006-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 . # 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-20111211-stable/build-aux/compile000077500000000000000000000153301167105100700177440ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2010-11-15.09; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010 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 Win32 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*) 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/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # 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*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l*) lib=${1#-l} 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 set x "$@" "$dir/$lib.dll.lib" break fi if test -f "$dir/$lib.lib"; then found=yes set x "$@" "$dir/$lib.lib" break fi done IFS=$save_IFS test "$found" != yes && set x "$@" "$lib.lib" shift ;; -L*) func_file_conv "${1#-L}" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" ;; -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 ) 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnulib-20111211-stable/build-aux/config.guess000077500000000000000000001270451167105100700207150ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011 Free Software Foundation, Inc. timestamp='2011-11-11' # 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 program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # 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. # # 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 Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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 trap 'exit 1' 1 2 15 # 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. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { 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) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; 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 ; set_cc_for_build= ;' # 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) >/dev/null 2>&1 ; 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 # 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 tupples: *-*-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". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-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. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $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 # 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/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) 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. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $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 [ "$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 echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; 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) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # 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:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $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; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $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 echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *: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 [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 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 [ -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 [ "${HP_ARCH}" = "" ]; then eval $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 [ ${HP_ARCH} = "hppa2.0w" ] then eval $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 echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $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; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; 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*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; 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:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; 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/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 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/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` 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="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo hexagon-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; 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. echo i386-sequent-sysv4 exit ;; 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. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; 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 echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; 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 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; 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 configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; 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*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$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 UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *: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 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #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 (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #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 printf ("vax-dec-ultrix\n"); exit (0); # 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; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 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 exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnulib-20111211-stable/build-aux/config.libpath000077500000000000000000000100461167105100700212020ustar00rootroot00000000000000#! /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-2011 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*) 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.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) 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* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; 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=/' <. Submit a context # diff and a properly formatted GNU ChangeLog entry. # # 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: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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" 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 # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -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) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # 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) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $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 ;; -mvs* | -opened*) vendor=ibm ;; -os400*) 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 basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnulib-20111211-stable/build-aux/csharpcomp.sh.in000066400000000000000000000125421167105100700214700ustar00rootroot00000000000000#!/bin/sh # Compile a C# program. # Copyright (C) 2003-2006, 2009-2011 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_cscc= options_mcs= options_csc="-nologo" sources= while test $# != 0; do case "$1" in -o) case "$2" in *.dll) options_cscc="$options_cscc -shared" options_mcs="$options_mcs -target:library" options_csc="$options_csc -target:library" ;; *.exe) options_csc="$options_csc -target:exe" ;; esac options_cscc="$options_cscc -o "`echo "$2" | sed -e "$sed_quote_subst"` 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_cscc="$options_cscc -L "`echo "$2" | sed -e "$sed_quote_subst"` 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_cscc="$options_cscc -l "`echo "$2" | sed -e "$sed_quote_subst"` 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_cscc="$options_cscc -O" options_csc="$options_csc -optimize+" ;; -g) options_cscc="$options_cscc -g" options_mcs="$options_mcs -debug" options_csc="$options_csc -debug+" ;; -*) echo "csharpcomp: unknown option '$1'" 1>&2 exit 1 ;; *.resources) options_cscc="$options_cscc -fresources="`echo "$1" | sed -e "$sed_quote_subst"` 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_CSCC@"; then test -z "$CSHARP_VERBOSE" || echo cscc $options_cscc $sources exec cscc $options_cscc $sources else 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 pnet, then reconfigure' 1>&2 exit 1 fi fi fi gnulib-20111211-stable/build-aux/csharpexec.sh.in000066400000000000000000000054211167105100700214540ustar00rootroot00000000000000#!/bin/sh # Execute a C# program. # Copyright (C) 2003, 2005, 2009-2011 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' options_ilrun= libdirs_mono= prog= while test $# != 0; do case "$1" in -L) options_ilrun="$options_ilrun -L "`echo "$2" | sed -e "$sed_quote_subst"` 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_ILRUN@"; then test -z "$CSHARP_VERBOSE" || echo ilrun $options_ilrun "$@" exec ilrun $options_ilrun "$@" else 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 pnet, then reconfigure' 1>&2 exit 1 fi fi fi gnulib-20111211-stable/build-aux/depcomp000077500000000000000000000475561167105100700177620ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2011-12-04.11; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 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 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 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" # 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 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. 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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 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 -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 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 -eq 0; then : else 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,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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" = 0; then : else 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/\(.*\)/ \1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/ / G p }' >> "$depfile" 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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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:: \1 \\:p' >> "$depfile" echo " " >> "$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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnulib-20111211-stable/build-aux/do-release-commit-and-tag000077500000000000000000000110041167105100700231250ustar00rootroot00000000000000#!/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=2011-05-04.11 # UTC # Note: this is a bash script (could be zsh or dash) # Copyright (C) 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 . # Written by Jim Meyering ME=`basename "$0"` warn() { printf '%s: %s\n' "$ME" "$*" >&2; } die() { warn "$*"; exit 1; } help_version() { case $1 in --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 ;; *) die "unrecognized option: $1";; esac } branch=master case $1 in --branch) shift; branch=$1; shift ;; esac case $# in 1) help_version $1; exit 0;; 2) ;; *) warn "Usage: $ME [OPTION...] VERSION TYPE"; exit 1;; esac ver=$1 type=$2 # 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";; esac case $type in alpha|beta|stable) ;; *) die "invalid release type: $type";; esac # Extract package name from Makefile. pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' Makefile) \ || die 'failed to determine package name from Makefile' # simple check: no question marks on line 3 of NEWS noteworthy='* Noteworthy changes in release' test "$(sed -n 3p NEWS)" = "$noteworthy ?.? (????-??-??) [?]" \ || die 'line 3 of NEWS looks fishy!' # No dirt allowed. case $(git diff-index --name-only HEAD) in '') ;; *) die 'this tree is dirty; commit your changes first';; esac # 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' # 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 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 'write-file-hooks 'time-stamp) # time-stamp-start: "VERSION=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: " # UTC" # End: gnulib-20111211-stable/build-aux/elisp-comp000077500000000000000000000053671167105100700203750ustar00rootroot00000000000000#!/bin/sh # Copyright (C) 1995, 2000, 2003, 2004, 2005, 2009, 2010 Free Software # Foundation, Inc. scriptversion=2010-02-06.18; # UTC # Franc,ois Pinard , 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 . # 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 # . case $1 in '') echo "$0: No files. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: elisp-comp [--help] [--version] FILES... This script byte-compiles all `.el' files listed as FILES using GNU Emacs, and put the resulting `.elc' files into the current directory, so disregarding the original directories used in `.el' arguments. This script manages in such a way that all Emacs LISP files to be compiled are made visible between themselves, in the event they require or load-library one another. Report bugs to . EOF exit $? ;; -v | --v*) echo "elisp-comp $scriptversion" exit $? ;; esac if test -z "$EMACS" || test "$EMACS" = "t"; then # Value of "t" means we are running in a shell under Emacs. # Just assume Emacs is called "emacs". EMACS=emacs fi tempdir=elc.$$ # Cleanup the temporary directory on exit. trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0 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 mkdir $tempdir cp "$@" $tempdir ( cd $tempdir echo "(setq load-path (cons nil load-path))" > script $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $? mv *.elc .. ) || exit $? (exit 0); exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnulib-20111211-stable/build-aux/gendocs.sh000077500000000000000000000320021167105100700203420ustar00rootroot00000000000000#!/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=2011-04-08.14 # Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 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 . # # Original author: Mohit Agarwal. # Send bug reports and any other correspondence to bug-texinfo@gnu.org. # # The latest version of this script, and the companion template, is # available from Texinfo CVS: # http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh # http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template # # An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib). prog=`basename "$0"` srcdir=`pwd` scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh" templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template" : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} : ${MAKEINFO="makeinfo"} : ${TEXI2DVI="texi2dvi -t @finalout"} : ${DVIPS="dvips"} : ${DOCBOOK2HTML="docbook2html"} : ${DOCBOOK2PDF="docbook2pdf"} : ${DOCBOOK2PS="docbook2ps"} : ${DOCBOOK2TXT="docbook2txt"} : ${GENDOCS_TEMPLATE_DIR="."} : ${TEXI2HTML="texi2html"} unset CDPATH unset use_texi2html version="gendocs.sh $scriptversion Copyright 2010 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 various output formats from PACKAGE.texinfo (or .texi or .txi) source. See the GNU Maintainers document for a more extensive discussion: http://www.gnu.org/prep/maintain_toc.html Options: -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -o OUTDIR write files into OUTDIR, instead of manual/. --email ADR use ADR as contact in generated web pages. --docbook convert to DocBook too (xml, txt, html, pdf and ps). --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets. --texi2html use texi2html to generate HTML targets. --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 to specify your bug-reporting address 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.) You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and DVIPS 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, DOCBOOK2PS, and DOCBOOK2TXT are also respected. 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-texinfo@gnu.org. " calcsize() { size=`ls -ksl $1 | awk '{print $1}'` echo $size } MANUAL_TITLE= PACKAGE= EMAIL=webmasters@gnu.org # please override with --email htmlarg= outdir=manual srcfile= while test $# -gt 0; do case $1 in --email) shift; EMAIL=$1;; --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; -s) shift; srcfile=$1;; -o) shift; outdir=$1;; --docbook) docbook=yes;; --html) shift; htmlarg=$1;; --texi2html) use_texi2html=1;; -*) 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 # For most of the following, the base name is just $PACKAGE base=$PACKAGE 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 case $outdir in /*) abs_outdir=$outdir;; *) abs_outdir=$srcdir/$outdir;; esac echo Generating output formats for $srcfile cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\"" echo "Generating info files... ($cmd)" eval "$cmd" mkdir -p "$outdir/" tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* 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. cmd="$SETLANG ${TEXI2DVI} \"$srcfile\"" echo "Generating dvi ... ($cmd)" eval "$cmd" # now, before we compress dvi: echo Generating postscript... ${DVIPS} $PACKAGE -o gzip -f -9 $PACKAGE.ps ps_gz_size=`calcsize $PACKAGE.ps.gz` mv $PACKAGE.ps.gz "$outdir/" # compress/finish dvi: gzip -f -9 $PACKAGE.dvi dvi_gz_size=`calcsize $PACKAGE.dvi.gz` mv $PACKAGE.dvi.gz "$outdir/" cmd="$SETLANG ${TEXI2DVI} --pdf \"$srcfile\"" echo "Generating pdf ... ($cmd)" eval "$cmd" pdf_size=`calcsize $PACKAGE.pdf` mv $PACKAGE.pdf "$outdir/" cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\"" echo "Generating ASCII... ($cmd)" 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/" html_split() { opt="--split=$1 $htmlarg --node-files" cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" echo "Generating html by $1... ($cmd)" 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 $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" echo "Generating monolithic html... ($cmd)" 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/" cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\"" echo "Generating html by node... ($cmd)" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 tar -czf "$abs_outdir/${PACKAGE}.html_node.tar.gz" -- *.html ) html_node_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node.tar.gz"` rm -f "$outdir"/html_node/*.html mkdir -p "$outdir/html_node/" mv ${split_html_dir}/*.html "$outdir/html_node/" rmdir ${split_html_dir} else cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\"" echo "Generating monolithic html... ($cmd)" 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 echo Making .tar.gz for sources... d=`dirname $srcfile` ( cd "$d" srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null` || true tar cvzfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles ) texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` if test -n "$docbook"; then cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml" echo "Generating docbook XML... ($cmd)" 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 cmd="${DOCBOOK2HTML} -o $split_html_db_dir \"${outdir}/$PACKAGE-db.xml\"" echo "Generating docbook HTML... ($cmd)" 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\"" echo "Generating docbook ASCII... ($cmd)" eval "$cmd" docbook_ascii_size=`calcsize $PACKAGE-db.txt` mv $PACKAGE-db.txt "$outdir/" cmd="${DOCBOOK2PS} \"${outdir}/$PACKAGE-db.xml\"" echo "Generating docbook PS... ($cmd)" eval "$cmd" gzip -f -9 -c $PACKAGE-db.ps >"$outdir/$PACKAGE-db.ps.gz" docbook_ps_gz_size=`calcsize "$outdir/$PACKAGE-db.ps.gz"` mv $PACKAGE-db.ps "$outdir/" cmd="${DOCBOOK2PDF} \"${outdir}/$PACKAGE-db.xml\"" echo "Generating docbook PDF... ($cmd)" eval "$cmd" docbook_pdf_size=`calcsize $PACKAGE-db.pdf` mv $PACKAGE-db.pdf "$outdir/" fi echo "Writing index file..." if test -z "$use_texi2html"; then CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" else 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!%%PS_GZ_SIZE%%!$ps_gz_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_PS_GZ_SIZE%%!$docbook_ps_gz_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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/git-version-gen����������������������������������������������������0000775�0000000�0000000�00000017201�11671051007�0021330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Print a version string. scriptversion=2011-11-13.13; # UTC # 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 <http://www.gnu.org/licenses/>. # This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/. # 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 version="git-version-gen $scriptversion Copyright 2011 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: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] Print a version string. Options: --prefix prefix of git tags (default 'v') --help display this help and exit --version output version information and exit Running without arguments will suffice in most cases." while test $# -gt 0; do case $1 in --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; --prefix) shift; prefix="$1";; -*) echo "$0: Unknown option \`$1'." >&2 echo "$0: Try \`--help' for more information." >&2 exit 1;; *) if test -z "$tarball_version_file"; then tarball_version_file="$1" elif test -z "$tag_sed_script"; then tag_sed_script="$1" else echo "$0: extra non-option argument \`$1'." >&2 exit 1 fi;; esac shift done if test -z "$tarball_version_file"; then echo "$usage" exit 1 fi tag_sed_script="${tag_sed_script:-s/x/x/}" prefix="${prefix:-v}" 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 [0-9]*) ;; *) v= ;; esac test -z "$v" \ && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2 fi if test -n "$v" 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 case $v in *-*-*) : git describe is 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 first '-' to a '.', so version-comparing tools work properly. # Remove the "g" in git describe's output string, to save a byte. v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`; v_from_git=1 else v=UNKNOWN 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 -n "$v_from_git"; then # Don't declare a version "dirty" merely because a time stamp 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. echo "$v" | tr -d "$nl" # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/gitlog-to-changelog������������������������������������������������0000775�0000000�0000000�00000023647�11671051007�0022160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}' & eval 'exec perl -wS "$0" $argv:q' if 0; # Convert git log output to ChangeLog format. my $VERSION = '2011-11-02 07:53'; # 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) 2008-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 <http://www.gnu.org/licenses/>. # Written by Jim Meyering use strict; use warnings; use Getopt::Long; use POSIX qw(strftime); (my $ME = $0) =~ s|.*/||; # use File::Coda; # http://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. --since=DATE convert only the logs since DATE; the default is to convert all log entries. --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' --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 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 =~ /^([0-9a-fA-F]{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; } { my $since_date; my $format_string = '%s%n%b%n'; my $amend_file; my $append_dot = 0; GetOptions ( help => sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; exit }, 'since=s' => \$since_date, 'format=s' => \$format_string, 'amend=s' => \$amend_file, 'append-dot' => \$append_dot, ) or usage 1; defined $since_date and unshift @ARGV, "--since=$since_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 = (qw (git 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_date_line = ''; my @prev_coauthors = (); 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 =~ /^[0-9a-fA-F]{40}$/ or die "$ME:$.: invalid SHA1: $sha\n"; # 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 = $_; } my @line = split "\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"; my $date_line = sprintf "%s $2\n", strftime ("%F", localtime ($1)); # Format 'Co-authored-by: A U Thor <email@example.com>' lines in # standard multi-author ChangeLog format. my @coauthors = grep /^Co-authored-by:.*$/, @line; for (@coauthors) { s/^Co-authored-by:\s*/\t /; s/\s*</ </; /<.*?@.*\..*>/ or warn "$ME: warning: missing email address for " . substr ($_, 5) . "\n"; } # If this header would be the same as the previous date/name/email/ # coauthors header, then arrange not to print it. if ($date_line ne $prev_date_line or "@coauthors" ne "@prev_coauthors") { $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; # Omit "Co-authored-by..." and "Signed-off-by..." lines. @line = grep !/^Signed-off-by: .*>$/, @line; @line = grep !/^Co-authored-by: /, @line; # Remove leading and trailing blank lines. if (@line) { while ($line[0] =~ /^\s*$/) { shift @line; } while ($line[$#line] =~ /^\s*$/) { pop @line; } } # If there were any lines if (@line == 0) { warn "$ME: warning: empty commit message:\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] .= '.'; } } # 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 'write-file-hooks 'time-stamp) # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d %02H:%02M" # time-stamp-time-zone: "UTC" # time-stamp-end: "'; # UTC" # End: �����������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/gnu-web-doc-update�������������������������������������������������0000775�0000000�0000000�00000006563�11671051007�0021713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Run this after each non-alpha release, to update the web documentation at # http://www.gnu.org/software/$pkg/manual/ # This script must be run from the top-level directory, # 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. VERSION=2009-07-21.16; # UTC # Copyright (C) 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 <http://www.gnu.org/licenses/>. # Requirements: everything required to bootstrap your package, # plus these: git, cvs, cvsu, rsync, mktemp ME=`basename "$0"` warn() { printf '%s: %s\n' "$ME" "$*" >&2; } die() { warn "$*"; exit 1; } help_version() { case $1 in --help) cat <<EOF Usage: $ME Run this script (no options or arguments) after each non-alpha release, to update the web documentation at http://www.gnu.org/software/\$pkg/manual/ Run it from your project's the top-level directory. Options: --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 <http://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 ;; *) die "unrecognized option: $1";; esac } case $# in 0) ;; 1) help_version $1 ;; *) die "$ME: too many options" ;; esac prev=.prev-version version=$(cat $prev) || die "$ME: no $prev file?" pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' Makefile) || die "$ME: no Makefile?" tmp_branch=web-doc-$version-$$ cleanup() { __st=$?; rm -rf "$tmp" git checkout master 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. git checkout -b $tmp_branch v$version ok=0 ./bootstrap && ./configure && make && make web-manual && ok=1 test $ok = 1 || exit 1 tmp=$(mktemp -d --tmpdir=. web-doc-update.XXXXXX) || exit 1 ( cd $tmp \ && cvs -d $USER@cvs.sv.gnu.org:/webcvs/$pkg co $pkg ) rsync -avP doc/manual/ $tmp/$pkg/manual ( cd $tmp/$pkg/manual # Add any new files: cvsu --types='?'|sed s/..// | xargs --no-run-if-empty -- cvs add -ko cvs ci -m $version ) # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "VERSION=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/gnupload�����������������������������������������������������������0000775�0000000�0000000�00000025444�11671051007�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Sign files and upload them. scriptversion=2010-05-23.15; # UTC # Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 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 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 <http://www.gnu.org/licenses/>. # Originally written by Alexandre Duret-Lutz <adl@gnu.org>. set -e GPG='gpg --batch --no-tty' conffile=.gnuploadrc to= dry_run=false 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 selected destinations according to CMD. <http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html> explains further. Commands: --delete delete FILES from destination --symlink create symbolic links --rmsymlink remove symbolic links -- treat the remaining arguments as files to upload Options: --help print this help text and exit --to DEST specify one destination for FILES (multiple --to options are allowed) --user NAME sign with key NAME --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names --dry-run do nothing, show what would have been done --version output version information 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. 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. 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 5. 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 uses the ncftpput program 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 (http://savannah.gnu.org/projects/gnulib) may serve as a replacement. Report bugs to <bug-automake@gnu.org>. Send patches to <automake-patches@gnu.org>." # 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 --help) echo "$usage" exit $? ;; --to) if test -z "$2"; then echo "$0: Missing argument for --to" 1>&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 ;; --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 ;; --dry-run|-n) dry_run=: ;; --version) echo "gnupload $scriptversion" exit $? ;; --) 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 # 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. PATH=/empty echo -n "Enter GPG passphrase: " stty -echo read -r passphrase stty echo echo 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.1 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= 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/install-reloc������������������������������������������������������0000775�0000000�0000000�00000014667�11671051007�0021100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install-reloc - install a program including a relocating wrapper # Copyright (C) 2003, 2005-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. # Usage: # 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 # install-reloc renames destprog to destprog.bin and installs a relocating # wrapper in the place of destprog. progname=$0 if test $# -eq 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 if test $# -ge 11; then # Get fixed position arguments. 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 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 # Remove trailing $exeext, if present. if test -n "$exeext"; then sed_quote='s,\.,\\.,g' sed_remove_exeext='s|'`echo "$exeext" | sed -e "$sed_quote"`'$||' destprog=`echo "$destprog" | sed -e "$sed_remove_exeext"` fi # Outputs a command and runs it. func_verbose () { echo "$@" "$@" } # Run install_command. func_verbose $install_prog "$@" || exit $? # Run strip_command. test "$strip_prog" = ':' || func_verbose "$strip_prog" "$destprog$exeext" || exit $? # 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. installdir=`echo "$destprog" | sed -e 's,/[^/]*$,,'` 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 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"/canonicalize-lgpl.c \ "$srcdir"/malloca.c \ "$srcdir"/relocatable.c \ "$srcdir"/setenv.c \ "$srcdir"/strerror.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 \ canonicalize-lgpl.o \ malloca.o \ relocatable.o \ setenv.o \ strerror.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 exit 0 �������������������������������������������������������������������������gnulib-20111211-stable/build-aux/install-sh���������������������������������������������������������0000775�0000000�0000000�00000033255�11671051007�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # 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. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # 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_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= 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 the last 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. -s $stripprog installed files. -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 " 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 *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done 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 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=$? 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; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # 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 case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/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. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or 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 eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob 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=$dstdir/_inst.$$_ rmtmp=$dstdir/_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 && $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` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # 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 -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/javacomp.sh.in�����������������������������������������������������0000664�0000000�0000000�00000005256�11671051007�0021135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Compile a Java program. # Copyright (C) 2001-2002, 2006, 2009-2011 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 <http://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-20111211-stable/build-aux/javaexec.sh.in�����������������������������������������������������0000664�0000000�0000000�00000004653�11671051007�0021123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Execute a Java program. # Copyright (C) 2001, 2006, 2009-2011 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 <http://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-20111211-stable/build-aux/ldd.sh.in����������������������������������������������������������0000664�0000000�0000000�00000001556�11671051007�0020077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Determine the dynamically linked dependencies of a program. # Copyright (C) 2006, 2009-2011 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 <http://www.gnu.org/licenses/>. # Usage: ldd.sh program @LDDPROG@ "$1" @LDDPOSTPROC@ ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/mdate-sh�����������������������������������������������������������0000775�0000000�0000000�00000013717�11671051007�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2010-08-21.06; # UTC # Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007, 2009, 2010 # 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 <http://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 # 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: �������������������������������������������������gnulib-20111211-stable/build-aux/missing������������������������������������������������������������0000775�0000000�0000000�00000026233�11671051007�0017771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 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 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 <http://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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to <bug-automake@gnu.org>." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/mkinstalldirs������������������������������������������������������0000775�0000000�0000000�00000006722�11671051007�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # 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 "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 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 else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ����������������������������������������������gnulib-20111211-stable/build-aux/mktempd������������������������������������������������������������0000775�0000000�0000000�00000007215�11671051007�0017760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Create a temporary directory, much like mktemp -d does. # 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 <http://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; netstat -n' 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-20111211-stable/build-aux/move-if-change�����������������������������������������������������0000775�0000000�0000000�00000005130�11671051007�0021076�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='2011-01-28 20:09'; # 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-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 <http://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>." version=`expr "$VERSION" : '\([^ ]*\)'` version="move-if-change (gnulib) $version Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://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 'write-file-hooks 'time-stamp) ## time-stamp-start: "VERSION='" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC" ## time-stamp-end: "'; # UTC" ## End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/build-aux/ncftpput-ftp�������������������������������������������������������0000775�0000000�0000000�00000002601�11671051007�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright (C) 2008-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 <http://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-20111211-stable/build-aux/pmccabe.css��������������������������������������������������������0000664�0000000�0000000�00000004517�11671051007�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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-20111211-stable/build-aux/pmccabe2html�������������������������������������������������������0000664�0000000�0000000�00000060413�11671051007�0020654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pmccabe2html - AWK script to convert pmccabe output to html -*- awk -*- # 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 <http://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="http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD" \ # -v url="http://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 { 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 " systime() " -->" 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)
                {
                    sub(/\\/, ">", codeline)
                    sub(/&/, "&", 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: " strftime() "

    " } if (output_lang == "wiki") { print "==" package_name " Cyclomatic Complexity Report==" print "Report generated at: '''" strftime() "'''" } 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-20111211-stable/build-aux/po/000077500000000000000000000000001167105100700170025ustar00rootroot00000000000000gnulib-20111211-stable/build-aux/po/Makefile.in.in000066400000000000000000000374511167105100700214660ustar00rootroot00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.18 GETTEXT_MACRO_VERSION = 0.18 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ 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@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update 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@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: 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, stamp-po is a nop (i.e. a phony target). # 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 via CVS, and the $(DOMAIN).pot file is not in CVS, # "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. 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 stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT 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. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ package_gnu='GNU '; \ else \ package_gnu=''; \ 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: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_gnu}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ 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): $(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} $${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-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${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: mostlyclean: rm -f remove-potcdate.sed rm -f 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 *.mo 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 stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: 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"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$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-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -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-20111211-stable/build-aux/po/remove-potcdate.sin000066400000000000000000000006601167105100700226150ustar00rootroot00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # 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-20111211-stable/build-aux/reloc-ldflags000077500000000000000000000064171167105100700210400ustar00rootroot00000000000000#! /bin/sh # Output a system dependent linker command for putting a relocatable library # search path into an executable. # # Copyright 2003, 2009-2011 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 case "$host_os" in linux*) # Supported since Linux 2.1 and glibc 2.1. rpath= 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"`echo "$idir" | sed -e 's,//*[^/]*,/..,g'`"$dir" # Add dir to rpath. rpath="${rpath}${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"; then echo "-Wl,-rpath,$rpath" fi ;; *) echo "relocation via rpath not supported on this system: $host" 1>&2 exit 1 ;; esac exit 0 gnulib-20111211-stable/build-aux/relocatable.sh.in000066400000000000000000000112361167105100700216050ustar00rootroot00000000000000# 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, 2005-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 . # # 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); exit 1; } } } # 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-20111211-stable/build-aux/snippet/000077500000000000000000000000001167105100700200465ustar00rootroot00000000000000gnulib-20111211-stable/build-aux/snippet/_Noreturn.h000066400000000000000000000004201167105100700221660ustar00rootroot00000000000000#ifndef _Noreturn # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif gnulib-20111211-stable/build-aux/snippet/arg-nonnull.h000066400000000000000000000023251167105100700224550ustar00rootroot00000000000000/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 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 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 . */ /* _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_MINOR__ >= 3) || __GNUC__ > 3 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif gnulib-20111211-stable/build-aux/snippet/c++defs.h000066400000000000000000000270001167105100700214300ustar00rootroot00000000000000/* C++ compatible function declaration macros. Copyright (C) 2010-2011 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 . */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* 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, ...)); */ #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 \ { \ rettype (*const func) parameters = ::rpl_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_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 \ { \ rettype (*const func) parameters = \ reinterpret_cast(::rpl_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_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, ...)); */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* If we were to write rettype (*const func) parameters = ::func; like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls better (remove an indirection through a 'static' pointer variable), but then the _GL_CXXALIASWARN macro below would cause a warning not only for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */ # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static rettype (*func) parameters = ::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 rettype (*func) parameters = \ reinterpret_cast(::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 rettype (*func) parameters = \ reinterpret_cast( \ (rettype2(*)parameters2)(::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 , we enable the warning only when not optimizing. */ # if !__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 , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ extern __typeof__ (func) func # 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-20111211-stable/build-aux/snippet/link-warning.h000066400000000000000000000044531167105100700226250ustar00rootroot00000000000000/* A C macro for emitting link time warnings. Copyright (C) 1995, 1997, 2000, 2002-2003, 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 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-20111211-stable/build-aux/snippet/unused-parameter.h000066400000000000000000000030671167105100700235060ustar00rootroot00000000000000/* A C macro for declaring that specific function parameters are not used. Copyright (C) 2008-2011 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 . */ /* _GL_UNUSED_PARAMETER is a marker that can be appended 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: type param _GL_UNUSED_PARAMETER or more generally param_decl _GL_UNUSED_PARAMETER For example: int param _GL_UNUSED_PARAMETER int *(*param)(void) _GL_UNUSED_PARAMETER Other possible, but obscure and discouraged syntaxes: int _GL_UNUSED_PARAMETER *(*param)(void) _GL_UNUSED_PARAMETER int *(*param)(void) */ #ifndef _GL_UNUSED_PARAMETER # if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED_PARAMETER __attribute__ ((__unused__)) # else # define _GL_UNUSED_PARAMETER # endif #endif gnulib-20111211-stable/build-aux/snippet/warn-on-use.h000066400000000000000000000120431167105100700223720ustar00rootroot00000000000000/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2011 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 . */ /* _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. This macro is 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. 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 ]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system : #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 inline 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 */ #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))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that 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 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # 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-20111211-stable/build-aux/texinfo.tex000066400000000000000000011506461167105100700205770ustar00rootroot00000000000000% 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{2011-11-09.15} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011 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 has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % 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 including 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 http://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} \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\ptexstar=\* \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 % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \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 } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % 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 } % 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 }% % 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} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \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. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \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\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % 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. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \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 % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\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} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % 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. % \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. \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\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \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 executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \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\*{\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. % \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 = \pageheight \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\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % 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 } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @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\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\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\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @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 = {}% } % @refill is a no-op. \let\refill=\relax % 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 (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\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 \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % 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 % 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. % 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). % double active backslashes. % {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslashdouble{% @catcode`@\=@active @let\=@doublebackslash} } % To handle parens, we must adopt a different approach, since parens are % not active characters. hyperref.dtx (which has the same problem as % us) handles it with this amazing macro to replace tokens, with minor % changes for Texinfo. It is included here under the GPL by permission % from the author, Heiko Oberdiek. % % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. % \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% \ifx\\##2\\% \else #2% \HyReturnAfterFi{% \HyPsdReplace##2\END }% \fi }% \xdef#3{\expandafter\HyPsdReplace#3#1\END}% } \long\def\HyReturnAfterFi#1\fi{\fi#1} % #1 is a control sequence in which to do the replacements. \def\backslashparens#1{% \xdef#1{#1}% redefine it as its expansion; the definition is simply % \lastnode when called from \setref -> \pdfmkdest. \HyPsdSubst{(}{\realbackslash(}{#1}% \HyPsdSubst{)}{\realbackslash)}{#1}% } \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 based on 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. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K 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\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \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\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\imageheight{#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 \imagewidth \fi \ifdim \wd2 >0pt height \imageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#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 \turnoffactive \activebackslashdouble \makevalueexpandable \def\pdfdestname{#1}% \backslashparens\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \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. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else % Doubled backslashes in the name. {\activebackslashdouble \xdef\pdfoutlinedest{#3}% \backslashparens\pdfoutlinedest}% \fi % % Also double the backslashes in the display string. {\activebackslashdouble \xdef\pdfoutlinetext{#1}% \backslashparens\pdfoutlinetext}% % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % 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. \def\numchapentry##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. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \setupdatafile \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\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} \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 \message{fonts,} % 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 ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \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}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % 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}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % 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} % \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 #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (currently only OT1, OT1IT and OT1TT are allowed, pass % empty to omit). \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 % emacs-page 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. This is 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\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\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 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\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 @acro 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 % 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\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\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 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 @acro 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 % 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 } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, 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 % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % 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} % 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 \message{markup,} % 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 } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} \gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright \let\markupsetuplqkbd \markupsetnoligaturesquoteleft % 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{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \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{% \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 } % 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\ptexslash \fi\fi\fi \aftersmartic } % like \smartslanted except unconditionally uses \ttsl, and no ic. % @var is set to this for defun arguments. \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\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@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 \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % 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{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % ctrl is no longer a Texinfo command. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \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 % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % 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 \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\realdash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \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 undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \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 } % @uref (abbreviation for `urlref') 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. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\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}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \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\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \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} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \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 \urefpoststretch \fi } } % One more complication: 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{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \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} \ifpdf \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 % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} % @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 \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @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} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @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{% {\selectfonts\lsize #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{% \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 $\finishmath } \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 } } \message{glyphs,} % and logos. % @@ prints an @. \def\@{\char64 } % Used to generate quoted braces. Unless we're in typewriter, use % \ecfont because the CM text fonts do not have braces, and we don't % want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @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{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \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. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @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 % {\tentt \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{{\it\$}} % @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 ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % 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}% \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \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{\selectfonts\lllsize 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\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \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 % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \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 % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rmisbold #1} % 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\rmisbold \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\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \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}}} \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}}} \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\pageheight 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 \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\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. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % 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{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \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\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\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 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}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \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 } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % 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 } % multitable-only commands. % % @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 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 \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \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 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \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 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \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-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \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 } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the 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 ifclear reads 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}} % @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 foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \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{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @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{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % 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 \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \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. % % For control letters, we have \definedummyletter, which omits the % space. % % 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). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \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\arrow \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\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\indicateurl \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \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\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \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 % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\}{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \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{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % 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 } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % 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{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % 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} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each 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} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % 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 if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \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 \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 \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\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 .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \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. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % 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}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % 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 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \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 % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \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\pagewidth{\box0\hfil\box2}% } % % All done 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 \pageheight (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. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \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 (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \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\rmisbold #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 \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} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % 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{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \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 % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}% \bigskip \par\penalty 200\relax \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}} \def\chappager{\par\vfill\supereject} % 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 } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \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\lastchapterdefs{% \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=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection 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\lastsection{#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{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \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 } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % 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, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\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\lastsectiondefs{% \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\lastsectiondefs{% \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. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#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.) \vskip-\parskip % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: % @section sec-whatever % @deffn def-whatever \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'. \ifpdf \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. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \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. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \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 \lastnegativepageno = \pageno \global\pageno = \savepageno } % 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 \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % 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{\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}\labelspace#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 \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{% \setupmarkupstyle{tex}% \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 \escapechar=`\\ % % ' 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 % \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\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % 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 % 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 }} \let\afterenvbreak = \aboveenvbreak % \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. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \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 \envdef\cartouche{% \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 % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % 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 \fi % \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 \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % 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 % \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\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @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 plus2em \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{% {\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 \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \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 } % 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}% \setupmarkupstyle{verb}% \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. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\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 \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % 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{#2\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. \endgroup % \envdef\verbatim{% \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}% \input #1 \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 very 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 % % 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 } % 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{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \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 \tenrm % \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. Let's try @var for that. \def\var##1{{\setupmarkupstyle{var}\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} } \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 \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\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\definedummyword#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} } % 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 \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \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\definedummyword\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\definedummyword \noexpand#1% \fi } % This makes use of the obscure 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. \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}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si 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). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % 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 underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % 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. \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}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \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} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \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}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \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 } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing 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}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \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 \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \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}} \let\nwnode=\node \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 \lastsection, % 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 {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \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#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We 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 {\indexnofonts \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. \getfilename{#4}% % % See comments at \activebackslashdouble. {\activebackslashdouble \xdef\pdfxrefdest{#1}% \backslashparens\pdfxrefdest}% % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 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 \wd1 > 0pt \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % 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 } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \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 #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % 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 } % 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 % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ 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{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \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 % 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=\pagewidth \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 % 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 ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisiundefined \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 % If the image is by itself, center it. \ifvmode \imagevmodetrue \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. On the other hand, if % it's at the top level, we don't want the normal paragraph indentation. \noindent % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \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}% \fi % \ifimagevmode \medskip \fi % space after the standalone image \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 \lastsection 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\lastsection{\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. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \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 % \lastsection 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{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \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 \endgroup} % % 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 } % 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. % \parseargdef\documentencoding{% % 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 \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #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 % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^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 } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \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{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{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{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{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{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \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{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{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{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{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{02DB}{\ogonek{ }} \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} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \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 \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \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 \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 \hfuzz = 1pt \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 \hfuzz = 1pt \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 \hfuzz = 1pt \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 \hfuzz = 1.2pt \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 }} % @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 \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \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} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % 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~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % 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 \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % 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=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active @def@normalbackslash{{@tt@backslashcurfont}} % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % @def@normalturnoffactive{% @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % 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. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % 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. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @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 @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore gnulib-20111211-stable/build-aux/update-copyright000077500000000000000000000216271167105100700216120ustar00rootroot00000000000000eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}' & eval 'exec perl -wS -0777 -pi "$0" $argv:q' if 0; # Update an FSF copyright year list to include the current year. my $VERSION = '2011-01-02.20:59'; # UTC # Copyright (C) 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, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General 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 # 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 Softward 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 formated 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. © # # 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 dashes. 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. # 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.". use strict; use warnings; my $copyright_re = 'Copyright'; my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)'; 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/$final_year_orig/$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 { $stmt =~ s/ (\d{4}) (?: (,\ |-) ((??{ if ($2 eq '-') { '\d{4}'; } elsif (!$3) { $1 + 1; } else { $3 + 1; } })) )+ /$1-$3/gx; } # 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"; } # Local variables: # mode: perl # indent-tabs-mode: nil # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d.%02H:%02M" # time-stamp-time-zone: "UTC" # time-stamp-end: "'; # UTC" # End: gnulib-20111211-stable/build-aux/useless-if-before-free000077500000000000000000000141141167105100700225510ustar00rootroot00000000000000eval '(exit $?0)' && eval 'exec perl -wST "$0" ${1+"$@"}' & eval 'exec perl -wST "$0" $argv:q' if 0; # Detect instances of "if (p) free (p);". # Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces. my $VERSION = '2011-04-20 13:43'; # 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) 2008-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 . # Written by Jim Meyering use strict; use warnings; use Getopt::Long; (my $ME = $0) =~ s|.*/||; # use File::Coda; # http://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"; 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 = )) { 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 'write-file-hooks 'time-stamp) ## time-stamp-start: "my $VERSION = '" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC" ## time-stamp-end: "'; # UTC" ## End: gnulib-20111211-stable/build-aux/vc-list-files000077500000000000000000000073431167105100700210020ustar00rootroot00000000000000#!/bin/sh # List version-controlled file names. # Print a version string. scriptversion=2011-05-16.22; # UTC # Copyright (C) 2006-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 . # 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: http://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; 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 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnulib-20111211-stable/build-aux/x-to-1.in000066400000000000000000000037171167105100700177510ustar00rootroot00000000000000#! /bin/sh # # Copyright (C) 2001, 2003, 2006, 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 . # # This program creates a program's manual from the .x skeleton and its --help # output. # 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. 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" progname=`basename $aux .x` case "$PERL" in *"/missing perl") perlok=no;; *) perlok=yes;; 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-20111211-stable/build-aux/ylwrap000077500000000000000000000143571167105100700176420ustar00rootroot00000000000000#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2011-08-25.18; # UTC # Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, # 2007, 2009, 2010, 2011 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 # . case "$1" in '') echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input="$1" shift case "$input" in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input="`pwd`/$input" ;; esac pairlist= while test "$#" -ne 0; do if test "$1" = "--"; then shift break fi pairlist="$pairlist $1" shift done # The program to run. prog="$1" shift # Make any relative path in $prog absolute. case "$prog" in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog="`pwd`/$prog" ;; esac # FIXME: add hostname here for parallel makes that run commands on # other machines. But that might take us over the 14-char limit. dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (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 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then set X $pairlist shift first=yes # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot="no" if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot="yes" fi # The directory holding the input. input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'` # Quote $INPUT_DIR so we can use it in a regexp. # FIXME: really we should care about more than `.' and `\'. input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'` while test "$#" -ne 0; do from="$1" # Handle y_tab.c and y_tab.h output by DOS if test $y_tab_nodot = "yes"; then if test $from = "y.tab.c"; then from="y_tab.c" else if test $from = "y.tab.h"; then from="y_tab.h" fi fi fi if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend `../'. case "$2" in [\\/]* | ?:[\\/]*) target="$2";; *) target="../$2";; esac # We do not want to overwrite a header file if it hasn't # changed. This avoid useless recompilations. However the # parser itself (the first file) should always be updated, # because it is the destination of the .y.c rule in the # Makefile. Divert the output of all other files to a temporary # file so we can compare them to existing versions. if test $first = no; then realtarget="$target" target="tmp-`echo $target | sed s/.*[\\/]//g`" fi # Edit out `#line' or `#' directives. # # We don't want the resulting debug information to point at # an absolute srcdir; it is better for it to just mention the # .y file with no path. # # We want to use the real output file name, not yy.lex.c for # instance. # # We want the include guards to be adjusted too. FROM=`echo "$from" | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` TARGET=`echo "$2" | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'` sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \ -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$? # Check whether header files must be updated. if test $first = no; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$2" is unchanged rm -f "$target" else echo updating "$2" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the first file. This # is a blatant hack to let us support using "yacc -d". If -d # is not specified, we don't want an error when the header # file is "missing". if test $first = yes; then ret=1 fi fi shift shift first=no done else ret=$? fi # Remove the directory. cd .. rm -rf $dirname exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnulib-20111211-stable/check-copyright000077500000000000000000000044711167105100700175110ustar00rootroot00000000000000#!/bin/sh # # 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 . # error=0 for module in `./gnulib-tool --list`; do module_license=`./gnulib-tool --extract-license $module` if test "$module_license" = 'GPLed build tool'; then module_license='GPL' fi for file in `./gnulib-tool --extract-filelist $module | grep '^\(lib\|build-aux\)/'`; do if grep 'GNU General Public' $file > /dev/null; then if grep 'version 3 or later' $file > /dev/null \ || grep 'either version 3' $file > /dev/null; then file_license='GPL' else if grep 'version 2 or later' $file > /dev/null \ || grep 'either version 2' $file > /dev/null; then file_license='GPLv2+' else file_license='GPL??' fi fi else if grep 'Lesser General' $file > /dev/null; then if grep 'version 3 or later' $file > /dev/null \ || grep 'either version 3' $file > /dev/null; then file_license='LGPL' else if grep 'version 2 or later' $file > /dev/null \ || grep 'version 2 of the License, or' $file > /dev/null \ || grep 'version 2\.1 of the License, or' $file > /dev/null; then file_license='LGPLv2+' else file_license='LGPL??' fi fi else file_license='??' fi fi if test "$file_license" != "$module_license"; then if test $error = 0; then echo "Module License File License File name" echo "============== ============== =====================================" fi printf '%-14s %-14s %s\n' "$module_license" "$file_license" "$file" error=1 fi done done exit $error gnulib-20111211-stable/check-module000077500000000000000000000170551167105100700167700ustar00rootroot00000000000000#!/usr/bin/perl -w # Check a gnulib module. # Copyright (C) 2005-2007, 2009-2011 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) 2006 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-20111211-stable/config/000077500000000000000000000000001167105100700157375ustar00rootroot00000000000000gnulib-20111211-stable/config/argz.mk000066400000000000000000000042571167105100700172430ustar00rootroot00000000000000# 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-2011 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, write to the Free Software Foundation," \ " Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */"\ "" \ "#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-20111211-stable/config/srclist-update000077500000000000000000000103511167105100700206300ustar00rootroot00000000000000#!/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. # # Copyright (C) 2002-2003, 2005, 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 . # 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 *' gpl '*) sed_command="$sed_command; $fixlicense";; esac sed "$sed_command" $1 >$2 } # cat | while read src dst options; do #echo "src=$src, dst=$dst, options=$options" >&2 case $src:$dst in *: ) continue;; # skip lines without second element '#'* ) continue;; # skip comment-only lines esac # Expand variables and make sure we have an input file. eval src=$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` # 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 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-20111211-stable/config/srclist.txt000066400000000000000000000251171167105100700201710ustar00rootroot00000000000000# 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/elisp-comp build-aux $AUTOMAKE/lib/gnupload build-aux $AUTOMAKE/lib/install-sh build-aux $AUTOMAKE/lib/mdate-sh build-aux $AUTOMAKE/lib/missing build-aux $AUTOMAKE/lib/mkinstalldirs build-aux $AUTOMAKE/lib/ylwrap build-aux # $TEXINFOSRC/doc/texinfo.tex build-aux $TEXINFOSRC/util/gendocs.sh build-aux $TEXINFOSRC/util/gendocs_template doc $TEXINFOSRC/util/gendocs_template_min doc # # we generate INSTALL from this via a rule in doc/Makefile. $AUTOCONF/doc/install.texi doc # $GNUSTANDARDS/maintain.texi doc $GNUSTANDARDS/standards.texi doc $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 $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. $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 $GNUORG/assign.manual doc/Copyright $GNUORG/assign.changes.manual doc/Copyright $GNUORG/assign.future.manual doc/Copyright $GNUORG/assign.translation.manual doc/Copyright $GNUORG/disclaim.manual doc/Copyright $GNUORG/disclaim.changes.manual doc/Copyright $GNUORG/disclaim.program doc/Copyright # 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/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 # # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1293 #$LIBCSRC/libidn/iconvme.h lib gpl #$LIBCSRC/libidn/iconvme.c lib gpl # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1057 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1217 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1220 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1223 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1224 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1237 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1240 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1241 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1273 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1278 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1280 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1281 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1282 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1285 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1291 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1302 #$LIBCSRC/posix/regcomp.c lib gpl # # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1238 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1245 #$LIBCSRC/posix/regex.c lib gpl # # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1201 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1207 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1222 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1232 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1236 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1240 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1281 #$LIBCSRC/posix/regex.h lib gpl # # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1215 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1218 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1220 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1226 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1231 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1237 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1241 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1248 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1281 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1282 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1284 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1285 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1286 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1287 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1291 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1302 #$LIBCSRC/posix/regex_internal.c lib gpl # # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1054 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1221 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1237 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1241 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1245 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1248 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1273 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1278 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1281 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1285 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1291 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1302 #$LIBCSRC/posix/regex_internal.h lib gpl # # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1216 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1220 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1225 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1227 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1231 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1237 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1241 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1245 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1278 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1279 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1280 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1281 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1282 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1284 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1285 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1302 #$LIBCSRC/posix/regexec.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 #$LIBCSRC/time/mktime.c lib gpl # # http://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 # # http://sources.redhat.com/bugzilla/show_bug.cgi?id=321 #$LIBCSRC/malloc/obstack.c lib gpl # # http://sources.redhat.com/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 # # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1060 # http://sources.redhat.com/bugzilla/show_bug.cgi?id=1062 #$LIBCSRC/posix/glob.c lib gpl # # http://sources.redhat.com/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_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/posix/dup2.c lib gpl #$LIBCSRC/sysdeps/posix/euidaccess.c lib gpl #$LIBCSRC/sysdeps/posix/tempname.c lib gpl #$LIBCSRC/sysdeps/unix/bsd/poll.c lib gpl #$LIBCSRC/sysdeps/unix/bsd/ptsname.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 #$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 # 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-20111211-stable/config/srclistvars.sh000066400000000000000000000025441167105100700206570ustar00rootroot00000000000000# Variables for srclist-update and srclist.txt. # Will change for each user. # Copyright (C) 2002, 2003, 2004 2005, 2006, 2008 # 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) : ${ACLOCAL=/usr/local/gnu/share/aclocal} : ${GNUBIN=/usr/local/gnu/bin} : ${GNUORG=$HOME/gnu/gnuorg} : ${GNUWWWLICENSES=$HOME/gnu/www/www/licenses} : ${TEXMFROOT=/usr/local/texmf/texmf-dist} ;; esac # Default to sibling (of parent) directories. : ${AUTOCONF=../autoconf} : ${AUTOMAKE=../automake} : ${GETTEXT=../gettext} : ${GNUCONFIG=../config} : ${GNULIBSRC=../gnulib} : ${GNUORG=../gnuorg} : ${GNUSTANDARDS=../gnustandards} : ${GNUWWWLICENSES=$GNUORG} : ${LIBCSRC=../libc} : ${LIBTOOL=../libtool} : ${TEXINFOSRC=../texinfo} gnulib-20111211-stable/doc/000077500000000000000000000000001167105100700152375ustar00rootroot00000000000000gnulib-20111211-stable/doc/.cvsignore000066400000000000000000000000551167105100700172370ustar00rootroot00000000000000gnulib.?? gnulib.??? gnulib.info gnulib.html gnulib-20111211-stable/doc/.gitignore000066400000000000000000000004021167105100700172230ustar00rootroot00000000000000gnulib.aux gnulib.cn gnulib.cp gnulib.cps 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 updated-stamp gnulib-20111211-stable/doc/COPYING.LESSERv2000066400000000000000000000636421167105100700175510ustar00rootroot00000000000000 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-20111211-stable/doc/COPYING.LESSERv3000066400000000000000000000167431167105100700175520ustar00rootroot00000000000000 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-20111211-stable/doc/COPYINGv2000066400000000000000000000432541167105100700165520ustar00rootroot00000000000000 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-20111211-stable/doc/COPYINGv3000066400000000000000000001045131167105100700165470ustar00rootroot00000000000000 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-20111211-stable/doc/Copyright/000077500000000000000000000000001167105100700172075ustar00rootroot00000000000000gnulib-20111211-stable/doc/Copyright/assign.changes.manual000066400000000000000000000127561167105100700233140ustar00rootroot00000000000000The way to assign copyright to the Foundation is to sign an assignment contract. This is what legally makes the FSF the copyright holder so that we can register the copyright on the new version. I'm assuming that you wrote these changes yourself; if other people wrote parts, we may need papers from them. If you are employed to do writing (even at a university), or have made an agreement with your employer or school saying it owns text you write, then you and we need a signed piece of paper from your employer disclaiming rights to your changes. The disclaimer should be signed by a vice president or general manager of the company. If you can't get at them, anyone else authorized to license manuals produced there will do. Here is a sample wording: Digital Stimulation Corporation hereby disclaims all copyright interest in the changes and enhancements made by Hugh Heffner to the manual "The Seduction Manual", also including any future revisions of these changes and enhancements. We do not consider them as a work made for hire for us. , 1 April 1987 Ty Coon, President of Vice, Digital Stimulation Corp. IMPORTANT: When you talk to your employer, *no matter what instructions they have given you*, don't fail to show them the sample disclaimer above, or a disclaimer with the details filled in for your specific case. Companies are usually willing to sign a disclaimer without any fuss. If you make your request less specific, you may open Pandora's box and cause a long and unnecessary delay. Below is the assignment contract that we usually use. You would need to print it out, sign it, and snail it to: Richard Stallman 77 Mass Ave rm 32-381 Cambridge MA 02139 USA Snail a copy of the employer's disclaimer as well. Please send me email about what you decide to do. If you have any questions, or would like something to be changed, ask rms@ai.mit.edu via email. ASSIGNMENT For good and valuable consideration, receipt of which I acknowledge, I, NAME OF PERSON, hereby transfer to the Free Software Foundation, Inc. (the "Foundation") my entire right, title, and interest (including all rights under copyright) in my changes and enhancements to the manual "NAME OF MANUAL", subject to the conditions below. These changes and enhancements are herein called the "Work". The work hereby assigned shall also include any future revisions of these changes and enhancements hereafter made by me. Upon thirty days' prior written notice, the Foundation agrees to grant me non-exclusive rights to use the Work (i.e. my changes and enhancements, not the manual which I enhanced) as I see fit; (and the Foundation's rights shall otherwise continue unchanged). For the purposes of this contract, a work "based on the Work" means any work that in whole or in part incorporates or is derived from all or part of the Work. The Foundation promises that all distribution of the Work, or of any work "based on the Work", that takes place under the control of the Foundation or its assignees, shall be on terms that explicitly and perpetually permit anyone possessing a copy of the work to which the terms apply, and possessing accurate notice of these terms, to redistribute copies of the work to anyone on the same terms. These terms shall not restrict which members of the public copies may be distributed to. These terms shall not require a member of the public to pay any royalty to the Foundation or to anyone else for any permitted use of the work they apply to, or to communicate with the Foundation or its agents in any way either when redistribution is performed or on any other occasion. The Foundation promises to give or send me, upon reasonable prior notice and payment of a fee no more than twenty times the cost of the necessary materials and postage, a copy of any or all of the works "based on the Work" that it offers to the public or that it has offered within the past six months, or that it distributed for the first time within the past six months. My request shall detail whether I wish to receive all such works or specific works. My choice of works to request may affect the cost and therefore the fee. I hereby represent and warrant that I am the sole copyright holder for the Work and that I have the right and power to enter into this contract. I hereby indemnify and hold harmless the Foundation, its officers, employees, and agents against any and all claims, actions or damages (including attorney's reasonable fees) asserted by or paid to any party on account of a breach or alleged breach of the foregoing warranty. I make no other express or implied warranty (including without limitation, in this disclaimer of warranty, any warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE). Agreed: [signature] Date: ACCEPTED: FREE SOFTWARE FOUNDATION - Thanks for contributing to the GNU project! Richard M. Stallman, President Please do not delete the control-l character before this line. Please print this as a separate page. Please email a copy of the information on this page to fsf-records@gnu.org, if you can, so that our clerk doesn't have to type it in. Use your full name as the subject line. Otherwise, please write down the answers and snail this with your assignment. [For the copyright registration, what country are you a citizen of?] [What year were you born?] [What is your email address?] [Please write your snail address here, so we can snail a copy back to you.] [Which files have you changed so far, and which new files have you written so far?] gnulib-20111211-stable/doc/Copyright/assign.future.manual000066400000000000000000000127521167105100700232120ustar00rootroot00000000000000The way to assign copyright to the Foundation is to sign an assignment contract. This is what legally makes the FSF the copyright holder so that we can register the copyright on the new version. I'm assuming that you wrote these changes yourself; if other people wrote parts, we may need papers from them. If you are employed to do writing (even at a university), or have made an agreement with your employer or school saying it owns text you write, then you and we need a signed piece of paper from your employer disclaiming rights to your changes. The disclaimer should be signed by a vice president or general manager of the company. If you can't get at them, anyone else authorized to license manuals produced there will do. Here is a sample wording: Digital Stimulation Corporation hereby disclaims all copyright interest in the changes and enhancements made by Hugh Heffner to the manual "The Seduction Manual", including both those he has already made and those he will make in the future. We do not consider them as works made for hire for us. , 1 April 1987 Ty Coon, President of Vice, Digital Stimulation Corp. IMPORTANT: When you talk to your employer, *no matter what instructions they have given you*, don't fail to show them the sample disclaimer above, or a disclaimer with the details filled in for your specific case. Companies are usually willing to sign a disclaimer without any fuss. If you make your request less specific, you may open Pandora's box and cause a long and unnecessary delay. Below is the assignment contract that we usually use. You would need to print it out, sign it, and snail it to: Richard Stallman 77 Mass Ave rm 32-381 Cambridge MA 02139 USA Snail a copy of the employer's disclaimer as well. Please send me email about what you decide to do. If you have any questions, or would like something to be changed, ask rms@ai.mit.edu via email. ASSIGNMENT For good and valuable consideration, receipt of which I acknowledge, I, NAME OF PERSON, hereby transfer to the Free Software Foundation, Inc. (the "Foundation") my entire right, title, and interest (including all rights under copyright) in my changes and enhancements to the manual "NAME OF MANUAL", including those I have already made and those I shall make in the future, subject to the conditions below. These changes and enhancements are herein called the "Work". Upon thirty days' prior written notice, the Foundation agrees to grant me non-exclusive rights to use the Work (i.e. my changes and enhancements, not the manual which I enhanced) as I see fit; (and the Foundation's rights shall otherwise continue unchanged). For the purposes of this contract, a work "based on the Work" means any work that in whole or in part incorporates or is derived from all or part of the Work. The Foundation promises that all distribution of the Work, or of any work "based on the Work", that takes place under the control of the Foundation or its assignees, shall be on terms that explicitly and perpetually permit anyone possessing a copy of the work to which the terms apply, and possessing accurate notice of these terms, to redistribute copies of the work to anyone on the same terms. These terms shall not restrict which members of the public copies may be distributed to. These terms shall not require a member of the public to pay any royalty to the Foundation or to anyone else for any permitted use of the work they apply to, or to communicate with the Foundation or its agents in any way either when redistribution is performed or on any other occasion. The Foundation promises to give or send me, upon reasonable prior notice and payment of a fee no more than twenty times the cost of the necessary materials and postage, a copy of any or all of the works "based on the Work" that it offers to the public or that it has offered within the past six months, or that it distributed for the first time within the past six months. My request shall detail whether I wish to receive all such works or specific works. My choice of works to request may affect the cost and therefore the fee. I hereby represent and warrant that I am the sole copyright holder for the Work and that I have the right and power to enter into this contract. I hereby indemnify and hold harmless the Foundation, its officers, employees, and agents against any and all claims, actions or damages (including attorney's reasonable fees) asserted by or paid to any party on account of a breach or alleged breach of the foregoing warranty. I make no other express or implied warranty (including without limitation, in this disclaimer of warranty, any warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE). Agreed: [signature] Date: For the Free Software Foundation, ACCEPTED: FREE SOFTWARE FOUNDATION - Thanks for contributing to the GNU project! Richard M. Stallman, President Please do not delete the control-l character before this line. Please print this as a separate page. Please email a copy of the information on this page to fsf-records@gnu.org, if you can, so that our clerk doesn't have to type it in. Use your full name as the subject line. Otherwise, please write down the answers and snail this with your assignment. [For the copyright registration, what country are you a citizen of?] [What year were you born?] [What is your email address?] [Please write your snail address here, so we can snail a copy back to you.] [Which files have you changed so far, and which new files have you written so far?] gnulib-20111211-stable/doc/Copyright/assign.manual000066400000000000000000000123731167105100700217000ustar00rootroot00000000000000The way to assign copyright on this manual to the Foundation is to sign an assignment contract. In addition, if you have made an agreement with an employer or school to give them rights to such work, or if it might be considered part of your job, then you and we need a signed piece of paper from your employer or school, disclaiming rights to the manual. The disclaimer should be signed by a vice president or general manager of the company. If you can't get at them, anyone else authorized to license works produced there will do. Here is a sample wording: Digital Stimulation Corporation hereby disclaims all copyright interest in the manual, "The Automatic Manual", written by Mr. Write, including both the present version of the manual and his/her future changes and enhancements to it. We do not consider it or them as a work made for hire for us. , 1 April 1987 Ty Coon, President of Vice, Digital Stimulation Corp. IMPORTANT: When you talk to your employer, *no matter what instructions they have given you*, don't fail to show them the sample disclaimer above. Companies are usually willing to sign a disclaimer without any fuss. If you vary the request, or make it less specific, you are liable to open a Pandora's Box and cause a long and unnecessary delay. Below is the assignment contract that we usually use. You would need to print it out, sign it, and snail it to me: Richard Stallman 77 Mass Ave rm 32-381 Cambridge MA 02139 USA Snail me a copy of the employer's disclaimer as well. Please send me email about what you decide to do. If you have any questions, or would like something to be changed, ask me via email. ASSIGNMENT For $1 and other good and valuable consideration, receipt of which I acknowledge, I, NAME OF PERSON, hereby transfer to the Free Software Foundation, Inc. (the "Foundation") my entire right, title, and interest (including all rights under copyright) in my manual "NAME OF MANUAL" (the "Work"), subject to the conditions below. The work hereby assigned shall further include any future changes and/or enhancements hereafter made by me. Upon thirty days' prior written notice, the Foundation agrees to grant me non-exclusive rights to use the Work as I see fit; (and the Foundation's rights shall otherwise continue unchanged). For the purposes of this contract, a work "based on the Work" means any work that in whole or in part incorporates or is derived from all or part of the Work. The Foundation promises that all distribution of the Work, or of any work "based on the Work", that takes place under the control of the Foundation or its agents or assignees, shall be on terms that explicitly and perpetually permit anyone possessing a copy of the work to which the terms apply, and possessing accurate notice of these terms, to redistribute copies of the work to anyone on the same terms. These terms shall not restrict which members of the public copies may be distributed to. These terms shall not require a member of the public to pay any royalty to the Foundation or to anyone else for any permitted use of the work they apply to, or to communicate with the Foundation or its agents in any way either when redistribution is performed or on any other occasion. The Foundation promises that any work "based on the Work" which is a program, and which is offered to the public by the Foundation or its agents or assignees, shall be offered in the form of machine-readable source code, in addition to any other forms of the Foundation's choosing. However, the Foundation is free to choose at its convenience the media of distribution for machine-readable source code. The Foundation promises to give or send me, upon reasonable prior notice and payment of a fee no more than twenty times the cost of the necessary materials and postage, a copy of any or all of the works "based on the Work" that it offers to the public or that it has offered within the past six months, or that it distributed for the first time within the past six months. For works that are programs, the machine-readable source code shall be included. My request shall detail whether I wish to receive all such works or specific works. My choice of works to request may affect the cost and therefore the fee. I hereby represent and warrant that I am the sole copyright holder for the Work and that I have the right and power to enter into this contract. I hereby indemnify and hold harmless the Foundation, its officers, employees, and agents against any and all claims, actions or damages (including attorney's reasonable fees) asserted by or paid to any party on account of a breach or alleged breach of the foregoing warranty. I make no other express or implied warranty (including without limitation, in this disclaimer of warranty, any warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE). Agreed: [signature and date] ACCEPTED: FREE SOFTWARE FOUNDATION - Thanks for contributing to the GNU project! Richard M. Stallman, President Please write down the answers to these questions, and snail this page with your assignment. [For the copyright registration, what country are you a citizen of?] [What year were you born?] [What is your email address?] [Please write your snail address here, so we can snail a copy back to you.] gnulib-20111211-stable/doc/Copyright/assign.translation.manual000066400000000000000000000116051167105100700242320ustar00rootroot00000000000000The way to assign copyright to the Foundation is to sign an assignment contract. This is what legally makes the FSF the copyright holder so that we can register the copyright on the new version. I'm assuming that you did all the translating yourself; if other people wrote parts, we may need papers from them as well. If you are employed to do writing (even at a university), or have made an agreement with your employer or school saying it owns text you write, then you and we need a signed piece of paper from your employer disclaiming rights to your changes. The disclaimer should be signed by a vice president or general manager of the company. If you can't get at them, anyone else authorized to license manuals written there will do. Here is a sample wording: Digital Stimulation Corporation hereby disclaims all copyright interest in Hugh Heffner's translation of "The Seduction Manual", also including any future revisions he makes to this translation. We do not consider it or them as a work made for hire for us. , 1 April 1987 Ty Coon, President of Vice, Digital Stimulation Corp. IMPORTANT: When you talk to your employer, *no matter what instructions they have given you*, don't fail to show them the sample disclaimer above, or a disclaimer with the details filled in for your specific case. Companies are usually willing to sign a disclaimer without any fuss. If you make your request less specific, you may open Pandora's box and cause a long and unnecessary delay. Below is the assignment contract that we usually use. You would need to print it out, sign it, and snail it to: Richard Stallman 545 Tech Sq rm 425 Cambridge, MA 02139 USA Snail a copy of the employer's disclaimer as well. Please send me email about what you decide to do. If you have any questions, or would like something to be changed, ask rms@ai.mit.edu via email. ASSIGNMENT For good and valuable consideration, receipt of which I acknowledge, I, NAME OF PERSON, hereby transfer to the Free Software Foundation, Inc. (the "Foundation") my entire right, title, and interest (including all rights under copyright) in my translation of the manual "NAME OF MANUAL", subject to the conditions below. This translation is herein called the "Work". The work hereby assigned shall also include any future revisions of this translation hereafter made by me. For the purposes of this contract, a work "based on the Work" means any work that in whole or in part incorporates or is derived from all or part of the Work. The Foundation promises that all distribution of the Work, or of any work "based on the Work", that takes place under the control of the Foundation or its assignees, shall be on terms that explicitly and perpetually permit anyone possessing a copy of the work to which the terms apply, and possessing accurate notice of these terms, to redistribute copies of the work to anyone on the same terms. These terms shall not restrict which members of the public copies may be distributed to. These terms shall not require a member of the public to pay any royalty to the Foundation or to anyone else for any permitted use of the work they apply to, or to communicate with the Foundation or its agents in any way either when redistribution is performed or on any other occasion. The Foundation promises to give or send me, upon reasonable prior notice and payment of a fee no more than twenty times the cost of the necessary materials and postage, a copy of any or all of the works "based on the Work" that it offers to the public or that it has offered within the past six months, or that it distributed for the first time within the past six months. My request shall detail whether I wish to receive all such works or specific works. My choice of works to request may affect the cost and therefore the fee. I hereby represent and warrant that I am the sole copyright holder for the Work and that I have the right and power to enter into this contract. I hereby indemnify and hold harmless the Foundation, its officers, employees, and agents against any and all claims, actions or damages (including attorney's reasonable fees) asserted by or paid to any party on account of a breach or alleged breach of the foregoing warranty. I make no other express or implied warranty (including without limitation, in this disclaimer of warranty, any warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE). Agreed: [signature] Date: For the Free Software Foundation, Richard Stallman, President: Please do not delete the control-l character before this line. Please print this as a separate page. [For the copyright registration, what country are you a citizen of? What year were you born? Please write the information here; sending it separately (eg. in a message) makes extra clerical work for us.] [What is your email address?] [Please write your snail address here, so we can snail a copy back to you.] gnulib-20111211-stable/doc/Copyright/conditions.text000066400000000000000000000144061167105100700222730ustar00rootroot00000000000000Legal Issues about Contributing Code to GNU last updated 8 Feb 2009 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 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 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 Stimulation Corporation hereby disclaims all copyright interest in the program "seduce.el" (a program to direct assemblers to make passes at compilers under GNU Emacs) written by Hugh Heffner. , 1 April 1987 Ty Coon, President of Vice, Digital Stimulation 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 Heffner to the program "seduce.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-20111211-stable/doc/Copyright/disclaim.changes.manual000066400000000000000000000050351167105100700236050ustar00rootroot00000000000000I'd like to ask you to sign a disclaimer for your changes, thus putting them in the public domain. (For small to medium changes such as this, that is just as good for us as assigning copyright.) I'm assuming that you wrote these changes yourself; if other people wrote parts, we may need papers from them. I, , hereby disclaim all copyright interest in my changes and enhancements to the manual . I affirm that I have no other intellectual property interest that would undermine this release. I represent that these changes and enhancements are my own and not a copy of someone else's work. *Don't forget to include the date.* Spell out the month name--don't use a number for the month. Dates using a number for the month are ambiguous; 2/8/95 means one thing in the US and another in Europe. If your job includes writing manuals (even at a university), or have made an agreement with your employer or school saying it owns manuals you write, then we also need a signed disclaimer from your employer or school. This disclaimer should be signed by a vice president or general manager of the company. If you can't get at them, anyone else authorized to license a manual produced there will do. Here is a sample wording: Digital Stimulation Corporation hereby disclaims all copyright interest in the changes and enhancements made by Hugh Heffner to the manual "The Seduction Manual". We do not consider them as a work made for hire for us. Digital Stimulation Corporation affirms that it has no other intellectual property interest that would undermine this release. , 1 April 1987 Ty Coon, President of Vice, Digital Stimulation Corp. If your employer says they do have an intellectual property claim that could conflict with releasing your changes, then please put me in touch with a suitable representative of the company, so that we can negotiate what to do about it. IMPORTANT: When you talk to your employer, *no matter what instructions they have given you*, don't fail to show them the sample disclaimer above, or a disclaimer with the details filled in for your specific case. Companies are usually willing to sign a disclaimer without any fuss. If you make your request less specific, you may open Pandora's box and cause a long and unnecessary delay. Please snail the signed disclaimers to: Attn: Disclaimer Clerk Free Software Foundation 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA Please print your email address on the printed disclaimer. gnulib-20111211-stable/doc/Copyright/disclaim.manual000066400000000000000000000050621167105100700221760ustar00rootroot00000000000000I'd like to ask you to sign a disclaimer for the manual, thus putting it in the public domain. (For a small manual such as this, it's not worth our trying to assert a copyleft.) I, , hereby disclaim all copyright interest in my manual which does . I affirm that I have no other intellectual property interest that would undermine this release, and will do nothing to undermine it in the future. I represent that the work is my own and not a copy of someone else's work. *Don't forget to include the date.* Spell out the month name--don't use a number for the month. Dates using a number for the month are ambiguous; 2/8/95 means one thing in the US and another in Europe. If you are employed to do writing (even at a university), or have made an agreement with your employer or school saying it owns what you write, then we also need a signed disclaimer from your employer or school. This disclaimer should be signed by a vice president or general manager of the company. If you can't get at them, anyone else authorized to license software produced there will do. Here is a sample wording: Digital Stimulation Corporation hereby disclaims all copyright interest in the manual "seduce.tex" written by Hugh Heffner, including both the present version of the program and his/her future changes and enhancements to it. We do not consider it or them as a work made for hire for us. Digital Stimulation Corporation affirms that it has no other intellectual property interest that would undermine this release, and will do nothing to undermine it in the future. , 1 April 1987 Ty Coon, President of Vice, Digital Stimulation Corp. If your employer says they do have an intellectual property claim that could conflict with the use of the manual, then please put me in touch with a suitable representative of the company, so that we can negotiate what to do about it. IMPORTANT: When you talk to your employer, *no matter what instructions they have given you*, don't fail to show them the sample disclaimer above, or a disclaimer with the details filled in for your specific case. Companies are usually willing to sign a disclaimer without any fuss. If you make your request less specific, you may open Pandora's box and cause a long and unnecessary delay. Please snail the signed disclaimers to: Attn: Disclaimer Clerk Free Software Foundation 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA Please print your email address on the printed disclaimer. gnulib-20111211-stable/doc/Copyright/disclaim.program000066400000000000000000000052141167105100700223670ustar00rootroot00000000000000I'd like to ask you to sign a disclaimer for the program, thus putting it in the public domain. (For a small program such as this, it's not worth our trying to assert a copyleft.) I, , hereby disclaim all copyright interest in my program which does . I affirm that I have no other intellectual property interest that would undermine this release, and will do nothing to undermine it in the future. I represent that the work is my own and not a copy of someone else's work. *Don't forget to include the date.* Spell out the month name--don't use a number for the month. Dates using a number for the month are ambiguous; 2/8/95 means one thing in the US and another in Europe. If you are employed to do programming (even at a university), or have made an agreement with your employer or school saying it owns programs you write, then we also need a signed disclaimer from your employer or school. This disclaimer should be signed by a vice president or general manager of the company. If you can't get at them, anyone else authorized to license software produced there will do. Here is a sample wording: Digital Stimulation Corporation hereby disclaims all copyright interest in the program "seduce" (a program to direct assemblers to make passes at compilers under GNU Emacs) written by Hugh Heffner, including both the present version of the program and his/her future changes and enhancements to it. We do not consider it or them as a work made for hire for us. Digital Stimulation Corporation affirms that it has no other intellectual property interest that would undermine this release, and will do nothing to undermine it in the future. , 1 April 1987 Ty Coon, President of Vice, Digital Stimulation Corp. If your employer says they do have an intellectual property claim that could conflict with the use of the program, then please put me in touch with a suitable representative of the company, so that we can negotiate what to do about it. IMPORTANT: When you talk to your employer, *no matter what instructions they have given you*, don't fail to show them the sample disclaimer above, or a disclaimer with the details filled in for your specific case. Companies are usually willing to sign a disclaimer without any fuss. If you make your request less specific, you may open Pandora's box and cause a long and unnecessary delay. Please snail the signed disclaimers to: Attn: Disclaimer Clerk Free Software Foundation 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA Please print your email address on the printed disclaimer. gnulib-20111211-stable/doc/Copyright/request-assign.changes000066400000000000000000000021331167105100700235120ustar00rootroot00000000000000Please 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-20111211-stable/doc/Copyright/request-assign.future000066400000000000000000000017131167105100700234170ustar00rootroot00000000000000Please 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-20111211-stable/doc/Copyright/request-assign.program000066400000000000000000000014331167105100700235530ustar00rootroot00000000000000Please 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-20111211-stable/doc/Copyright/request-disclaim.changes000066400000000000000000000024571167105100700240240ustar00rootroot00000000000000Please 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-20111211-stable/doc/INSTALL000066400000000000000000000366001167105100700162750ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 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 commands `./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 time stamps 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 bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /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-20111211-stable/doc/INSTALL.ISO000066400000000000000000000366001167105100700167260ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 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 commands './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 time stamps 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 bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /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-20111211-stable/doc/INSTALL.UTF-8000066400000000000000000000377741167105100700171140ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 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 commands ‘./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 time stamps 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 bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /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-20111211-stable/doc/Makefile000066400000000000000000000053541167105100700167060ustar00rootroot00000000000000# Makefile for gnulib doc. # Copyright (C) 2004, 2006-2011 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' # INSTALL file with old ASCII quotation marks (looks ugly on modern machines). INSTALL: install.texi $(INSTALL_PRELUDE) | cat - $< > tmp.texi $(MAKEINFO) --plaintext --no-validate tmp.texi > $@ rm -f tmp.texi # INSTALL file with ISO 646 or ISO 8859 quotation marks. INSTALL.ISO: install.texi $(INSTALL_PRELUDE) | cat - $< > tmpi.texi $(MAKEINFO) --plaintext --no-validate tmpi.texi \ | sed -e "s/\`\([^']*\)'/'\1'/g" > $@ rm -f tmpi.texi # INSTALL file wit ISO 10646 (Unicode) quotation marks. INSTALL.UTF-8: install.texi $(INSTALL_PRELUDE) | cat - $< > tmpu.texi $(MAKEINFO) --plaintext --no-validate tmpu.texi \ | sed -e "s/\`\([^']*\)'/‘\1’/g" > $@ rm -f tmpu.texi 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) # Date of last update. Requires GNU date. updated-stamp: $(GNULIB_TEXI_FILES) date -u -r `ls -t $^ | sed 1q` +"@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-20111211-stable/doc/README000066400000000000000000000030551167105100700161220ustar00rootroot00000000000000Misc 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. http://www.gnu.org/server/standards/readme_index.html http://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_CHECKOUT/doc make updated-stamp ../build-aux/gendocs.sh -o "$GNULIB_WWW_CHECKOUT/manual" \ gnulib "The GNU Portability Library" cd $GNULIB_WWW_CHECKOUT Verify that the result 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-20111211-stable/doc/acl-cygwin.txt000066400000000000000000000116101167105100700200340ustar00rootroot00000000000000$ 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-20111211-stable/doc/acl-resources.txt000066400000000000000000000216131167105100700205520ustar00rootroot00000000000000General introduction: http://www.suse.de/~agruen/acl/linux-acls/online/ POSIX ACLs Documents from POSIX.1e (headers & functions) and POSIX.2c (utilities): http://wt.xpilot.org/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: http://www.linuxmanpages.com/ 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 http://www.cs.duke.edu/csl/faqs/solaris-acls.php Manual pages: http://docs.sun.com/app/docs/doc/816-5167/acl-2?l=en&a=view http://docs.sun.com/app/docs/doc/816-5165/getfacl-1?l=en&a=view http://docs.sun.com/app/docs/doc/816-5165/setfacl-1?l=en&a=view http://docs.sun.com/app/docs/doc/816-5167/pathconf-2?l=en&a=view 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: http://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: http://www.freebsd.org/cgi/man.cgi http://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. MacOS X ACLs Manual pages: http://developer.apple.com/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: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c02261503/c02261503.pdf setacl, fsetacl: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c02267386/c02267386.pdf lsacl: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c02261049/c02261049.pdf chacl: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c01921575/c01921575.pdf p. 125 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: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c02254861/c02254861.pdf acl: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c01921366/c01921366.pdf p. 27 aclsort: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c02254876/c02254876.pdf getacl: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c02261501/c02261501.pdf setacl: http://h20000.www2.hp.com/bc/docs/support/SupportManual/c02267385/c02267385.pdf 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: http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51_HTML/MAN/MAN4/0083____.HTM 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: http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.security/doc/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: http://www.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 Win32 ACLs Introduction: http://setacl.sourceforge.net/html/doc-basics.html Manual pages: http://msdn.microsoft.com/en-us/library/aa374872(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa446659(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa374931(VS.85).aspx http://en.wikipedia.org/wiki/Cacls Library: ? Functions: GetAclInformation SetAclInformation ... Utilities: cacls gnulib-20111211-stable/doc/agpl-3.0.texi000066400000000000000000001031521167105100700173550ustar00rootroot00000000000000@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{http://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{http://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{http://www.gnu.org/licenses/}. gnulib-20111211-stable/doc/alloca-opt.texi000066400000000000000000000037641167105100700201770ustar00rootroot00000000000000@c Documentation of gnulib module 'alloca-opt'. @c Copyright (C) 2004, 2007, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. The 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 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-20111211-stable/doc/alloca.texi000066400000000000000000000041561167105100700173730ustar00rootroot00000000000000@c Documentation of gnulib module 'alloca'. @c Copyright (C) 2004, 2007, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. The 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-20111211-stable/doc/c-ctype.texi000066400000000000000000000033231167105100700174770ustar00rootroot00000000000000@c Documentation of gnulib module 'c-ctype'. @c Copyright (C) 2008-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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-20111211-stable/doc/c-strcase.texi000066400000000000000000000024251167105100700200210ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strcase'. @c Copyright (C) 2008-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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-20111211-stable/doc/c-strcaseeq.texi000066400000000000000000000023541167105100700203500ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strcaseeq'. @c Copyright (C) 2008-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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-20111211-stable/doc/c-strcasestr.texi000066400000000000000000000021651167105100700205530ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strcasestr'. @c Copyright (C) 2008-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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-20111211-stable/doc/c-strstr.texi000066400000000000000000000017631167105100700177220ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strstr'. @c Copyright (C) 2008-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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-20111211-stable/doc/c-strtod.texi000066400000000000000000000023151167105100700176720ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strtod'. @c Copyright (C) 2008-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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-20111211-stable/doc/c-strtold.texi000066400000000000000000000020211167105100700200400ustar00rootroot00000000000000@c Documentation of gnulib module 'c-strtold'. @c Copyright (C) 2008-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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-20111211-stable/doc/configmake.texi000066400000000000000000000026001167105100700202330ustar00rootroot00000000000000@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-20111211-stable/doc/ctime.texi000066400000000000000000000030241167105100700172320ustar00rootroot00000000000000@node ctime @section ctime @findex ctime @c Copyright (C) 2005, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. The @code{ctime} function need not be reentrant, and consequently is not required to be thread safe. Implementations of @code{ctime} typically write the time stamp 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}, that take a pre-allocated buffer and length of the buffer, and return @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} return @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-20111211-stable/doc/error.texi000066400000000000000000000023031167105100700172610ustar00rootroot00000000000000@node error and progname @section error and progname @findex error @findex progname @vindex program_name @c Copyright (C) 2007, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. The @code{error} function uses the @code{program_name} variable, but does not depend on the @code{progname} module. Why? Because @code{error} is released under the LGPL, whereas @code{progname} is GPL. RMS does not want additional baggage accompanying the @code{error} module, so an LGPL user must provide their own replacement @code{program_name}, and a GPL user should manually specify using the @code{progname} module. Additionally, using the @code{progname} module is not something that can be done implicitly. It requires that every @code{main} function be modified to set @code{program_name} as one of its first actions. gnulib-20111211-stable/doc/fdl-1.2.texi000066400000000000000000000510301167105100700171740ustar00rootroot00000000000000@c The GNU Free Documentation License. @center Version 1.2, November 2002 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, 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 @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 @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, @acronym{SGML} or @acronym{XML} using a publicly available @acronym{DTD}, and standard-conforming simple @acronym{HTML}, PostScript or @acronym{PDF} designed for human modification. Examples of transparent image formats include @acronym{PNG}, @acronym{XCF} and @acronym{JPG}. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, @acronym{SGML} or @acronym{XML} for which the @acronym{DTD} and/or processing tools are not generally available, and the machine-generated @acronym{HTML}, PostScript or @acronym{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. 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 for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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 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{http://www.gnu.org/copyleft/}. 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. @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.2 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-20111211-stable/doc/fdl-1.3.texi000066400000000000000000000556101167105100700172050ustar00rootroot00000000000000@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{http://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{http://www.gnu.org/copyleft/}. 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-20111211-stable/doc/fdl.texi000066400000000000000000000556101167105100700167060ustar00rootroot00000000000000@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{http://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{http://www.gnu.org/copyleft/}. 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-20111211-stable/doc/func.texi000066400000000000000000000007041167105100700170660ustar00rootroot00000000000000@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-20111211-stable/doc/gcd.texi000066400000000000000000000040241167105100700166670ustar00rootroot00000000000000@node gcd @section gcd: greatest common divisor @findex gcd @c Copyright (C) 2006, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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-20111211-stable/doc/gendocs_template000066400000000000000000000066701167105100700205100ustar00rootroot00000000000000 %%TITLE%% - GNU Project - Free Software Foundation (FSF)

    %%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-20111211-stable/doc/gendocs_template_min000066400000000000000000000064221167105100700213460ustar00rootroot00000000000000 %%TITLE%% - GNU Project - Free Software Foundation (FSF)

    %%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.)

    gnulib-20111211-stable/doc/getdate.texi000066400000000000000000000000351167105100700175450ustar00rootroot00000000000000@include parse-datetime.texi gnulib-20111211-stable/doc/glibc-functions/000077500000000000000000000000001167105100700203255ustar00rootroot00000000000000gnulib-20111211-stable/doc/glibc-functions/accept4.texi000066400000000000000000000006701167105100700225460ustar00rootroot00000000000000@node accept4 @subsection @code{accept4} @findex accept4 Gnulib module: accept4 Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/acct.texi000066400000000000000000000004641167105100700221360ustar00rootroot00000000000000@node acct @subsection @code{acct} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/addmntent.texi000066400000000000000000000006301167105100700231750ustar00rootroot00000000000000@node addmntent @subsection @code{addmntent} @findex addmntent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/addseverity.texi000066400000000000000000000006221167105100700235430ustar00rootroot00000000000000@node addseverity @subsection @code{addseverity} @findex addseverity Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/adjtime.texi000066400000000000000000000004751167105100700226430ustar00rootroot00000000000000@node adjtime @subsection @code{adjtime} @findex adjtime Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/adjtimex.texi000066400000000000000000000006601167105100700230270ustar00rootroot00000000000000@node adjtimex @subsection @code{adjtimex} @findex adjtimex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/advance.texi000066400000000000000000000006451167105100700226260ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/aio_init.texi000066400000000000000000000006351167105100700230170ustar00rootroot00000000000000@node aio_init @subsection @code{aio_init} @findex aio_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: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_err_exit_status.texi000066400000000000000000000007241167105100700254600ustar00rootroot00000000000000@node argp_err_exit_status @subsection @code{argp_err_exit_status} @findex argp_err_exit_status 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_error.texi000066400000000000000000000006661167105100700233720ustar00rootroot00000000000000@node argp_error @subsection @code{argp_error} @findex argp_error 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_failure.texi000066400000000000000000000006741167105100700236670ustar00rootroot00000000000000@node argp_failure @subsection @code{argp_failure} @findex argp_failure 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_help.texi000066400000000000000000000006631167105100700231660ustar00rootroot00000000000000@node argp_help @subsection @code{argp_help} @findex argp_help 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_parse.texi000066400000000000000000000006661167105100700233530ustar00rootroot00000000000000@node argp_parse @subsection @code{argp_parse} @findex argp_parse 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_program_bug_address.texi000066400000000000000000000007401167105100700262430ustar00rootroot00000000000000@node argp_program_bug_address @subsection @code{argp_program_bug_address} @findex argp_program_bug_address 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_program_version.texi000066400000000000000000000007241167105100700254500ustar00rootroot00000000000000@node argp_program_version @subsection @code{argp_program_version} @findex argp_program_version 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_program_version_hook.texi000066400000000000000000000007431167105100700264710ustar00rootroot00000000000000@node argp_program_version_hook @subsection @code{argp_program_version_hook} @findex argp_program_version_hook 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_state_help.texi000066400000000000000000000007051167105100700243630ustar00rootroot00000000000000@node argp_state_help @subsection @code{argp_state_help} @findex argp_state_help 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argp_usage.texi000066400000000000000000000006661167105100700233450ustar00rootroot00000000000000@node argp_usage @subsection @code{argp_usage} @findex argp_usage 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_add.texi000066400000000000000000000007411167105100700227750ustar00rootroot00000000000000@node argz_add @subsection @code{argz_add} @findex argz_add Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_add_sep.texi000066400000000000000000000007551167105100700236510ustar00rootroot00000000000000@node argz_add_sep @subsection @code{argz_add_sep} @findex argz_add_sep Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_append.texi000066400000000000000000000007521167105100700235160ustar00rootroot00000000000000@node argz_append @subsection @code{argz_append} @findex argz_append Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_count.texi000066400000000000000000000007471167105100700234030ustar00rootroot00000000000000@node argz_count @subsection @code{argz_count} @findex argz_count Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_create.texi000066400000000000000000000007521167105100700235120ustar00rootroot00000000000000@node argz_create @subsection @code{argz_create} @findex argz_create Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_create_sep.texi000066400000000000000000000007661167105100700243660ustar00rootroot00000000000000@node argz_create_sep @subsection @code{argz_create_sep} @findex argz_create_sep Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_delete.texi000066400000000000000000000007521167105100700235110ustar00rootroot00000000000000@node argz_delete @subsection @code{argz_delete} @findex argz_delete Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_extract.texi000066400000000000000000000007551167105100700237240ustar00rootroot00000000000000@node argz_extract @subsection @code{argz_extract} @findex argz_extract Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_insert.texi000066400000000000000000000007521167105100700235530ustar00rootroot00000000000000@node argz_insert @subsection @code{argz_insert} @findex argz_insert Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_next.texi000066400000000000000000000007441167105100700232260ustar00rootroot00000000000000@node argz_next @subsection @code{argz_next} @findex argz_next Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_replace.texi000066400000000000000000000007551167105100700236650ustar00rootroot00000000000000@node argz_replace @subsection @code{argz_replace} @findex argz_replace Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/argz_stringify.texi000066400000000000000000000007631167105100700242670ustar00rootroot00000000000000@node argz_stringify @subsection @code{argz_stringify} @findex argz_stringify Gnulib module: argz Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is broken on some platforms: Cygwin 1.5.24. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/asprintf.texi000066400000000000000000000041161167105100700230500ustar00rootroot00000000000000@node asprintf @subsection @code{asprintf} @findex asprintf 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5. @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, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: Solaris 11 2010-11. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, Solaris 11 2010-11, Cygwin 1.5.x, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, Cygwin 1.5.x, BeOS. @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 2010-11. @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, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, Solaris 11 2010-11, Cygwin 1.5.x. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: BeOS. @item This function can crash in out-of-memory conditions on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/authdes_create.texi000066400000000000000000000006051167105100700242010ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/authdes_getucred.texi000066400000000000000000000006131167105100700245370ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/authdes_pk_create.texi000066400000000000000000000007131167105100700246730ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/authnone_create.texi000066400000000000000000000004771167105100700243740ustar00rootroot00000000000000@node authnone_create @subsection @code{authnone_create} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/authunix_create.texi000066400000000000000000000005351167105100700244130ustar00rootroot00000000000000@node authunix_create @subsection @code{authunix_create} @findex 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 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/authunix_create_default.texi000066400000000000000000000005651167105100700261220ustar00rootroot00000000000000@node authunix_create_default @subsection @code{authunix_create_default} @findex 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 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/backtrace.texi000066400000000000000000000006421167105100700231410ustar00rootroot00000000000000@node backtrace @subsection @code{backtrace} @findex backtrace 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 X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/backtrace_symbols.texi000066400000000000000000000006721167105100700247140ustar00rootroot00000000000000@node backtrace_symbols @subsection @code{backtrace_symbols} @findex backtrace_symbols 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 X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/backtrace_symbols_fd.texi000066400000000000000000000007031167105100700253600ustar00rootroot00000000000000@node backtrace_symbols_fd @subsection @code{backtrace_symbols_fd} @findex backtrace_symbols_fd 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 X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/bdflush.texi000066400000000000000000000006551167105100700226550ustar00rootroot00000000000000@node bdflush @subsection @code{bdflush} @findex bdflush 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/bind_textdomain_codeset.texi000066400000000000000000000006661167105100700261060ustar00rootroot00000000000000@node bind_textdomain_codeset @subsection @code{bind_textdomain_codeset} @findex bind_textdomain_codeset Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/bindresvport.texi000066400000000000000000000005061167105100700237420ustar00rootroot00000000000000@node bindresvport @subsection @code{bindresvport} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/bindtextdomain.texi000066400000000000000000000006331167105100700242330ustar00rootroot00000000000000@node bindtextdomain @subsection @code{bindtextdomain} @findex bindtextdomain Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/brk.texi000066400000000000000000000004211167105100700217730ustar00rootroot00000000000000@node brk @subsection @code{brk} @findex brk Gnulib 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, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/bswap_16.texi000066400000000000000000000006471167105100700226510ustar00rootroot00000000000000@node bswap_16 @subsection @code{bswap_16} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/bswap_32.texi000066400000000000000000000006471167105100700226470ustar00rootroot00000000000000@node bswap_32 @subsection @code{bswap_32} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/bswap_64.texi000066400000000000000000000006471167105100700226540ustar00rootroot00000000000000@node bswap_64 @subsection @code{bswap_64} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/callrpc.texi000066400000000000000000000004471167105100700226450ustar00rootroot00000000000000@node callrpc @subsection @code{callrpc} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/canonicalize_file_name.texi000066400000000000000000000011171167105100700256560ustar00rootroot00000000000000@node canonicalize_file_name @subsection @code{canonicalize_file_name} @findex canonicalize_file_name Gnulib module: canonicalize-lgpl Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/capget.texi000066400000000000000000000006521167105100700224660ustar00rootroot00000000000000@node capget @subsection @code{capget} @findex capget 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/capset.texi000066400000000000000000000006521167105100700225020ustar00rootroot00000000000000@node capset @subsection @code{capset} @findex capset 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/cbc_crypt.texi000066400000000000000000000006251167105100700231730ustar00rootroot00000000000000@node cbc_crypt @subsection @code{cbc_crypt} @findex cbc_crypt Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/cfmakeraw.texi000066400000000000000000000005631167105100700231640ustar00rootroot00000000000000@node cfmakeraw @subsection @code{cfmakeraw} @findex cfmakeraw Gnulib module: --- Portability problems fixed 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 4.3.2, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/cfree.texi000066400000000000000000000005171167105100700223070ustar00rootroot00000000000000@node cfree @subsection @code{cfree} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/cfsetspeed.texi000066400000000000000000000005601167105100700233460ustar00rootroot00000000000000@node cfsetspeed @subsection @code{cfsetspeed} @findex cfsetspeed Gnulib module: --- Portability problems fixed 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 4.3.2, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/chroot.texi000066400000000000000000000004301167105100700225130ustar00rootroot00000000000000@node chroot @subsection @code{chroot} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clearenv.texi000066400000000000000000000006011167105100700230140ustar00rootroot00000000000000@node clearenv @subsection @code{clearenv} @findex clearenv Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clearerr_unlocked.texi000066400000000000000000000006271167105100700247100ustar00rootroot00000000000000@node clearerr_unlocked @subsection @code{clearerr_unlocked} @findex clearerr_unlocked Gnulib 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnt_broadcast.texi000066400000000000000000000004741167105100700242070ustar00rootroot00000000000000@node clnt_broadcast @subsection @code{clnt_broadcast} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnt_create.texi000066400000000000000000000004631167105100700235060ustar00rootroot00000000000000@node clnt_create @subsection @code{clnt_create} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnt_pcreateerror.texi000066400000000000000000000005051167105100700247350ustar00rootroot00000000000000@node clnt_pcreateerror @subsection @code{clnt_pcreateerror} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnt_perrno.texi000066400000000000000000000004631167105100700235500ustar00rootroot00000000000000@node clnt_perrno @subsection @code{clnt_perrno} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnt_perror.texi000066400000000000000000000004631167105100700235540ustar00rootroot00000000000000@node clnt_perror @subsection @code{clnt_perror} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnt_spcreateerror.texi000066400000000000000000000005101167105100700251140ustar00rootroot00000000000000@node clnt_spcreateerror @subsection @code{clnt_spcreateerror} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnt_sperrno.texi000066400000000000000000000004661167105100700237360ustar00rootroot00000000000000@node clnt_sperrno @subsection @code{clnt_sperrno} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnt_sperror.texi000066400000000000000000000004661167105100700237420ustar00rootroot00000000000000@node clnt_sperror @subsection @code{clnt_sperror} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clntraw_create.texi000066400000000000000000000004741167105100700242220ustar00rootroot00000000000000@node clntraw_create @subsection @code{clntraw_create} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clnttcp_create.texi000066400000000000000000000004741167105100700242170ustar00rootroot00000000000000@node clnttcp_create @subsection @code{clnttcp_create} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clntudp_bufcreate.texi000066400000000000000000000005051167105100700247110ustar00rootroot00000000000000@node clntudp_bufcreate @subsection @code{clntudp_bufcreate} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clntudp_create.texi000066400000000000000000000004741167105100700242210ustar00rootroot00000000000000@node clntudp_create @subsection @code{clntudp_create} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clntunix_create.texi000066400000000000000000000006571167105100700244170ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clog10.texi000066400000000000000000000006331167105100700223070ustar00rootroot00000000000000@node clog10 @subsection @code{clog10} @findex clog10 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/clog10f.texi000066400000000000000000000006361167105100700224600ustar00rootroot00000000000000@node clog10f @subsection @code{clog10f} @findex clog10f Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/clog10l.texi000066400000000000000000000006551167105100700224670ustar00rootroot00000000000000@node clog10l @subsection @code{clog10l} @findex clog10l 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/clone.texi000066400000000000000000000006221167105100700223200ustar00rootroot00000000000000@node clone @subsection @code{clone} @findex 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 X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/crypt_r.texi000066400000000000000000000006551167105100700227100ustar00rootroot00000000000000@node crypt_r @subsection @code{crypt_r} @findex crypt_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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/cuserid.texi000066400000000000000000000005001167105100700226510ustar00rootroot00000000000000@node cuserid @subsection @code{cuserid} @findex cuserid Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/daemon.texi000066400000000000000000000005041167105100700224620ustar00rootroot00000000000000@node daemon @subsection @code{daemon} @findex 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, OSF/1 5.1, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dcgettext.texi000066400000000000000000000006141167105100700232140ustar00rootroot00000000000000@node dcgettext @subsection @code{dcgettext} @findex dcgettext Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dcngettext.texi000066400000000000000000000006171167105100700233750ustar00rootroot00000000000000@node dcngettext @subsection @code{dcngettext} @findex dcngettext Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/des_setparity.texi000066400000000000000000000006021167105100700240750ustar00rootroot00000000000000@node des_setparity @subsection @code{des_setparity} @findex des_setparity Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dgettext.texi000066400000000000000000000006111167105100700230460ustar00rootroot00000000000000@node dgettext @subsection @code{dgettext} @findex dgettext Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dl_iterate_phdr.texi000066400000000000000000000006471167105100700243600ustar00rootroot00000000000000@node dl_iterate_phdr @subsection @code{dl_iterate_phdr} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dladdr.texi000066400000000000000000000005171167105100700224550ustar00rootroot00000000000000@node dladdr @subsection @code{dladdr} @findex 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dladdr1.texi000066400000000000000000000006201167105100700225310ustar00rootroot00000000000000@node dladdr1 @subsection @code{dladdr1} @findex 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 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dlinfo.texi000066400000000000000000000006001167105100700224670ustar00rootroot00000000000000@node dlinfo @subsection @code{dlinfo} @findex 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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dlmopen.texi000066400000000000000000000006201167105100700226540ustar00rootroot00000000000000@node dlmopen @subsection @code{dlmopen} @findex 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 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dlvsym.texi000066400000000000000000000006521167105100700225410ustar00rootroot00000000000000@node dlvsym @subsection @code{dlvsym} @findex dlvsym 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dn_expand.texi000066400000000000000000000004551167105100700231640ustar00rootroot00000000000000@node dn_expand @subsection @code{dn_expand} @findex 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 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/dngettext.texi000066400000000000000000000006141167105100700232270ustar00rootroot00000000000000@node dngettext @subsection @code{dngettext} @findex dngettext Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/drand48_r.texi000066400000000000000000000006201167105100700230030ustar00rootroot00000000000000@node drand48_r @subsection @code{drand48_r} @findex drand48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/drem.texi000066400000000000000000000004561167105100700221540ustar00rootroot00000000000000@node drem @subsection @code{drem} @findex drem Gnulib module: --- Portability problems fixed 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 2010-11, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/dremf.texi000066400000000000000000000005221167105100700223140ustar00rootroot00000000000000@node dremf @subsection @code{dremf} @findex dremf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/dreml.texi000066400000000000000000000006231167105100700223240ustar00rootroot00000000000000@node dreml @subsection @code{dreml} @findex dreml Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/dup3.texi000066400000000000000000000006541167105100700221000ustar00rootroot00000000000000@node dup3 @subsection @code{dup3} @findex dup3 Gnulib module: dup3 Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/dysize.texi000066400000000000000000000006521167105100700225320ustar00rootroot00000000000000@node dysize @subsection @code{dysize} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ecb_crypt.texi000066400000000000000000000006251167105100700231750ustar00rootroot00000000000000@node ecb_crypt @subsection @code{ecb_crypt} @findex ecb_crypt Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ecvt_r.texi000066400000000000000000000005751167105100700225110ustar00rootroot00000000000000@node ecvt_r @subsection @code{ecvt_r} @findex ecvt_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/encrypt_r.texi000066400000000000000000000006411167105100700232260ustar00rootroot00000000000000@node encrypt_r @subsection @code{encrypt_r} @findex encrypt_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endaliasent.texi000066400000000000000000000006711167105100700235130ustar00rootroot00000000000000@node endaliasent @subsection @code{endaliasent} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endfsent.texi000066400000000000000000000005251167105100700230300ustar00rootroot00000000000000@node endfsent @subsection @code{endfsent} @findex endfsent Gnulib module: --- Portability problems fixed 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endmntent.texi000066400000000000000000000006201167105100700232120ustar00rootroot00000000000000@node endmntent @subsection @code{endmntent} @findex endmntent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endnetgrent.texi000066400000000000000000000005001167105100700235300ustar00rootroot00000000000000@node endnetgrent @subsection @code{endnetgrent} @findex endnetgrent Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endrpcent.texi000066400000000000000000000004551167105100700232060ustar00rootroot00000000000000@node endrpcent @subsection @code{endrpcent} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endsgent.texi000066400000000000000000000006761167105100700230400ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endspent.texi000066400000000000000000000006111167105100700230360ustar00rootroot00000000000000@node endspent @subsection @code{endspent} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endttyent.texi000066400000000000000000000005251167105100700232400ustar00rootroot00000000000000@node endttyent @subsection @code{endttyent} @findex 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/endusershell.texi000066400000000000000000000006441167105100700237210ustar00rootroot00000000000000@node endusershell @subsection @code{endusershell} @findex endusershell Gnulib module: getusershell Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 4.3.2, IRIX 6.5, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is missing a declaration on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/endutent.texi000066400000000000000000000005271167105100700230520ustar00rootroot00000000000000@node endutent @subsection @code{endutent} @findex endutent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/envz_add.texi000066400000000000000000000006371167105100700230200ustar00rootroot00000000000000@node envz_add @subsection @code{envz_add} @findex envz_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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/envz_entry.texi000066400000000000000000000006451167105100700234300ustar00rootroot00000000000000@node envz_entry @subsection @code{envz_entry} @findex envz_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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/envz_get.texi000066400000000000000000000006371167105100700230470ustar00rootroot00000000000000@node envz_get @subsection @code{envz_get} @findex envz_get Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/envz_merge.texi000066400000000000000000000006451167105100700233660ustar00rootroot00000000000000@node envz_merge @subsection @code{envz_merge} @findex envz_merge Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/envz_remove.texi000066400000000000000000000006501167105100700235600ustar00rootroot00000000000000@node envz_remove @subsection @code{envz_remove} @findex envz_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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/envz_strip.texi000066400000000000000000000006451167105100700234300ustar00rootroot00000000000000@node envz_strip @subsection @code{envz_strip} @findex envz_strip Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/epoll_create.texi000066400000000000000000000006741167105100700236650ustar00rootroot00000000000000@node epoll_create @subsection @code{epoll_create} @findex epoll_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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/epoll_ctl.texi000066400000000000000000000006631167105100700232020ustar00rootroot00000000000000@node epoll_ctl @subsection @code{epoll_ctl} @findex epoll_ctl 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/epoll_wait.texi000066400000000000000000000006661167105100700233670ustar00rootroot00000000000000@node epoll_wait @subsection @code{epoll_wait} @findex epoll_wait 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/erand48_r.texi000066400000000000000000000006201167105100700230040ustar00rootroot00000000000000@node erand48_r @subsection @code{erand48_r} @findex erand48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/err.texi000066400000000000000000000004721167105100700220130ustar00rootroot00000000000000@node err @subsection @code{err} @findex 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: AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/error.texi000066400000000000000000000006511167105100700223530ustar00rootroot00000000000000@node error @subsection @code{error} @findex error Gnulib module: error Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/error_at_line.texi000066400000000000000000000006771167105100700240560ustar00rootroot00000000000000@node error_at_line @subsection @code{error_at_line} @findex error_at_line 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/error_message_count.texi000066400000000000000000000007211167105100700252650ustar00rootroot00000000000000@node error_message_count @subsection @code{error_message_count} @findex error_message_count 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/error_one_per_line.texi000066400000000000000000000007161167105100700250730ustar00rootroot00000000000000@node error_one_per_line @subsection @code{error_one_per_line} @findex error_one_per_line 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/error_print_progname.texi000066400000000000000000000007241167105100700254600ustar00rootroot00000000000000@node error_print_progname @subsection @code{error_print_progname} @findex error_print_progname 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/errx.texi000066400000000000000000000004751167105100700222060ustar00rootroot00000000000000@node errx @subsection @code{errx} @findex errx Gnulib 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ether_aton.texi000066400000000000000000000004721167105100700233530ustar00rootroot00000000000000@node ether_aton @subsection @code{ether_aton} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ether_aton_r.texi000066400000000000000000000006521167105100700236740ustar00rootroot00000000000000@node ether_aton_r @subsection @code{ether_aton_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ether_hostton.texi000066400000000000000000000005031167105100700241030ustar00rootroot00000000000000@node ether_hostton @subsection @code{ether_hostton} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ether_line.texi000066400000000000000000000004721167105100700233410ustar00rootroot00000000000000@node ether_line @subsection @code{ether_line} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ether_ntoa.texi000066400000000000000000000004721167105100700233530ustar00rootroot00000000000000@node ether_ntoa @subsection @code{ether_ntoa} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ether_ntoa_r.texi000066400000000000000000000006521167105100700236740ustar00rootroot00000000000000@node ether_ntoa_r @subsection @code{ether_ntoa_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ether_ntohost.texi000066400000000000000000000005031167105100700241030ustar00rootroot00000000000000@node ether_ntohost @subsection @code{ether_ntohost} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/euidaccess.texi000066400000000000000000000016441167105100700233350ustar00rootroot00000000000000@node euidaccess @subsection @code{euidaccess} @findex euidaccess Gnulib module: euidaccess Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/execvpe.texi000066400000000000000000000006701167105100700226620ustar00rootroot00000000000000@node execvpe @subsection @code{execvpe} @findex execvpe 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/exp10.texi000066400000000000000000000006361167105100700221620ustar00rootroot00000000000000@node exp10 @subsection @code{exp10} @findex exp10 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/exp10f.texi000066400000000000000000000006411167105100700223240ustar00rootroot00000000000000@node exp10f @subsection @code{exp10f} @findex exp10f Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/exp10l.texi000066400000000000000000000006521167105100700223340ustar00rootroot00000000000000@node exp10l @subsection @code{exp10l} @findex exp10l 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fallocate.texi000066400000000000000000000012261167105100700231530ustar00rootroot00000000000000@node fallocate @subsection @code{fallocate} @findex fallocate Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on older glibc versions and all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/fcloseall.texi000066400000000000000000000006141167105100700231650ustar00rootroot00000000000000@node fcloseall @subsection @code{fcloseall} @findex fcloseall Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 10, mingw, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/fcvt_r.texi000066400000000000000000000005751167105100700225120ustar00rootroot00000000000000@node fcvt_r @subsection @code{fcvt_r} @findex fcvt_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/fedisableexcept.texi000066400000000000000000000007041167105100700243500ustar00rootroot00000000000000@node fedisableexcept @subsection @code{fedisableexcept} @findex fedisableexcept Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/feenableexcept.texi000066400000000000000000000007011167105100700241700ustar00rootroot00000000000000@node feenableexcept @subsection @code{feenableexcept} @findex feenableexcept Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fegetexcept.texi000066400000000000000000000006771167105100700235350ustar00rootroot00000000000000@node fegetexcept @subsection @code{fegetexcept} @findex fegetexcept 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/feof_unlocked.texi000066400000000000000000000006131167105100700240230ustar00rootroot00000000000000@node feof_unlocked @subsection @code{feof_unlocked} @findex feof_unlocked Gnulib 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/ferror_unlocked.texi000066400000000000000000000006211167105100700244020ustar00rootroot00000000000000@node ferror_unlocked @subsection @code{ferror_unlocked} @findex ferror_unlocked Gnulib 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/fflush_unlocked.texi000066400000000000000000000006531167105100700243770ustar00rootroot00000000000000@node fflush_unlocked @subsection @code{fflush_unlocked} @findex fflush_unlocked Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/ffsl.texi000066400000000000000000000006261167105100700221560ustar00rootroot00000000000000@node ffsl @subsection @code{ffsl} @findex ffsl Gnulib module: ffsl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.4, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/ffsll.texi000066400000000000000000000006411167105100700223270ustar00rootroot00000000000000@node ffsll @subsection @code{ffsll} @findex ffsll Gnulib module: ffsll Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetc_unlocked.texi000066400000000000000000000007021167105100700241730ustar00rootroot00000000000000@node fgetc_unlocked @subsection @code{fgetc_unlocked} @findex fgetc_unlocked 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetfilecon.texi000066400000000000000000000001431167105100700235030ustar00rootroot00000000000000@node fgetfilecon @subsection @code{fgetfilecon} @findex fgetfilecon @getfileconDesc{fgetfilecon} gnulib-20111211-stable/doc/glibc-functions/fgetgrent.texi000066400000000000000000000005561167105100700232130ustar00rootroot00000000000000@node fgetgrent @subsection @code{fgetgrent} @findex fgetgrent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetgrent_r.texi000066400000000000000000000006101167105100700235230ustar00rootroot00000000000000@node fgetgrent_r @subsection @code{fgetgrent_r} @findex fgetgrent_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetpwent.texi000066400000000000000000000005711167105100700232260ustar00rootroot00000000000000@node fgetpwent @subsection @code{fgetpwent} @findex fgetpwent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetpwent_r.texi000066400000000000000000000006101167105100700235410ustar00rootroot00000000000000@node fgetpwent_r @subsection @code{fgetpwent_r} @findex fgetpwent_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgets_unlocked.texi000066400000000000000000000006631167105100700242210ustar00rootroot00000000000000@node fgets_unlocked @subsection @code{fgets_unlocked} @findex fgets_unlocked Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetsgent.texi000066400000000000000000000007011167105100700232040ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetsgent_r.texi000066400000000000000000000007071167105100700235330ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetspent.texi000066400000000000000000000006141167105100700232200ustar00rootroot00000000000000@node fgetspent @subsection @code{fgetspent} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetspent_r.texi000066400000000000000000000006341167105100700235430ustar00rootroot00000000000000@node fgetspent_r @subsection @code{fgetspent_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 5.3, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetwc_unlocked.texi000066400000000000000000000011021167105100700243550ustar00rootroot00000000000000@node fgetwc_unlocked @subsection @code{fgetwc_unlocked} @findex fgetwc_unlocked 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetws_unlocked.texi000066400000000000000000000011021167105100700243750ustar00rootroot00000000000000@node fgetws_unlocked @subsection @code{fgetws_unlocked} @findex fgetws_unlocked 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/fgetxattr.texi000066400000000000000000000006721167105100700232350ustar00rootroot00000000000000@node fgetxattr @subsection @code{fgetxattr} @findex 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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fileno_unlocked.texi000066400000000000000000000006211167105100700243570ustar00rootroot00000000000000@node fileno_unlocked @subsection @code{fileno_unlocked} @findex fileno_unlocked Gnulib 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/finite.texi000066400000000000000000000004311167105100700224740ustar00rootroot00000000000000@node finite @subsection @code{finite} @findex finite Gnulib module: --- Portability problems fixed 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 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/finitef.texi000066400000000000000000000005301167105100700226420ustar00rootroot00000000000000@node finitef @subsection @code{finitef} @findex finitef Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/finitel.texi000066400000000000000000000006231167105100700226530ustar00rootroot00000000000000@node finitel @subsection @code{finitel} @findex finitel Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/flistxattr.texi000066400000000000000000000006751167105100700234340ustar00rootroot00000000000000@node flistxattr @subsection @code{flistxattr} @findex 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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/flock.texi000066400000000000000000000005511167105100700223170ustar00rootroot00000000000000@node flock @subsection @code{flock} @findex flock Gnulib module: flock Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9 @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 5.1, HP-UX 11.23, Solaris 11 2010-11, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fopencookie.texi000066400000000000000000000007001167105100700235160ustar00rootroot00000000000000@node fopencookie @subsection @code{fopencookie} @findex fopencookie 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/forkpty.texi000066400000000000000000000016111167105100700227150ustar00rootroot00000000000000@node forkpty @subsection @code{forkpty} @findex forkpty 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 2010-11. @item One some systems (at least including Cygwin, Interix, OSF/1 4 and 5, 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 Cygwin, Interix, OSF/1 4 and 5, and glibc. It is declared in util.h on Mac OS X, OpenBSD and NetBSD. It is declared in libutil.h on FreeBSD. @item Some platforms declare the function without marking the last two parameters @code{const}. FreeBSD, Cygwin 1.7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/fputc_unlocked.texi000066400000000000000000000006631167105100700242320ustar00rootroot00000000000000@node fputc_unlocked @subsection @code{fputc_unlocked} @findex fputc_unlocked Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/fputs_unlocked.texi000066400000000000000000000007021167105100700242440ustar00rootroot00000000000000@node fputs_unlocked @subsection @code{fputs_unlocked} @findex fputs_unlocked 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fputwc_unlocked.texi000066400000000000000000000011021167105100700244060ustar00rootroot00000000000000@node fputwc_unlocked @subsection @code{fputwc_unlocked} @findex fputwc_unlocked 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/fputws_unlocked.texi000066400000000000000000000011021167105100700244260ustar00rootroot00000000000000@node fputws_unlocked @subsection @code{fputws_unlocked} @findex fputws_unlocked 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/fread_unlocked.texi000066400000000000000000000006501167105100700241660ustar00rootroot00000000000000@node fread_unlocked @subsection @code{fread_unlocked} @findex fread_unlocked Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/freeifaddrs.texi000066400000000000000000000005551167105100700235030ustar00rootroot00000000000000@node freeifaddrs @subsection @code{freeifaddrs} @findex 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fremovexattr.texi000066400000000000000000000007031167105100700237460ustar00rootroot00000000000000@node fremovexattr @subsection @code{fremovexattr} @findex 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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fsetxattr.texi000066400000000000000000000006721167105100700232510ustar00rootroot00000000000000@node fsetxattr @subsection @code{fsetxattr} @findex 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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fstatfs.texi000066400000000000000000000010221167105100700226650ustar00rootroot00000000000000@node fstatfs @subsection @code{fstatfs} @findex 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 9, Interix 3.5, BeOS. @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 MacOS X. @end itemize gnulib-20111211-stable/doc/glibc-functions/fts_children.texi000066400000000000000000000013561167105100700236710ustar00rootroot00000000000000@node fts_children @subsection @code{fts_children} @findex 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @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 MacOS X systems). @end itemize gnulib-20111211-stable/doc/glibc-functions/fts_close.texi000066400000000000000000000005241167105100700232020ustar00rootroot00000000000000@node fts_close @subsection @code{fts_close} @findex 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fts_open.texi000066400000000000000000000005211167105100700230330ustar00rootroot00000000000000@node fts_open @subsection @code{fts_open} @findex 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/fts_read.texi000066400000000000000000000013421167105100700230070ustar00rootroot00000000000000@node fts_read @subsection @code{fts_read} @findex 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @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 MacOS X systems). @end itemize gnulib-20111211-stable/doc/glibc-functions/fts_set.texi000066400000000000000000000005161167105100700226710ustar00rootroot00000000000000@node fts_set @subsection @code{fts_set} @findex 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/futimes.texi000066400000000000000000000007121167105100700226740ustar00rootroot00000000000000@node futimes @subsection @code{futimes} @findex futimes Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function cannot set full timestamp resolution. Use @code{futimens(fd,times)} instead. @end itemize gnulib-20111211-stable/doc/glibc-functions/futimesat.texi000066400000000000000000000012531167105100700232220ustar00rootroot00000000000000@node futimesat @subsection @code{futimesat} @findex 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 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, OSF/1 5.1, Solaris 8, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @item On some platforms, this function mis-handles trailing slash: Solaris 9. @item This function cannot set full timestamp resolution. Use @code{file ? utimensat(fd,file,times,0) : futimens(fd,times)}, or the gnulib module fdutimensat, instead. @end itemize gnulib-20111211-stable/doc/glibc-functions/fwrite_unlocked.texi000066400000000000000000000006531167105100700244100ustar00rootroot00000000000000@node fwrite_unlocked @subsection @code{fwrite_unlocked} @findex fwrite_unlocked Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/gamma.texi000066400000000000000000000004231167105100700223010ustar00rootroot00000000000000@node gamma @subsection @code{gamma} @findex gamma Gnulib module: --- Portability problems fixed 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-20111211-stable/doc/glibc-functions/gammaf.texi000066400000000000000000000005011167105100700224440ustar00rootroot00000000000000@node gammaf @subsection @code{gammaf} @findex gammaf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/gammal.texi000066400000000000000000000006021167105100700224540ustar00rootroot00000000000000@node gammal @subsection @code{gammal} @findex gammal Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/get_avphys_pages.texi000066400000000000000000000007171167105100700245550ustar00rootroot00000000000000@node get_avphys_pages @subsection @code{get_avphys_pages} @findex get_avphys_pages 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/get_current_dir_name.texi000066400000000000000000000007151167105100700254020ustar00rootroot00000000000000@node get_current_dir_name @subsection @code{get_current_dir_name} @findex get_current_dir_name Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/get_myaddress.texi000066400000000000000000000004711167105100700240540ustar00rootroot00000000000000@node get_myaddress @subsection @code{get_myaddress} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/get_nprocs.texi000066400000000000000000000010401167105100700233560ustar00rootroot00000000000000@node get_nprocs @subsection @code{get_nprocs} @findex get_nprocs 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 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, OSF/1 5.1, Solaris 10, Cygwin 1.7.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Gnulib provides the module @code{nproc} that performs a similar function but is portable to more systems. gnulib-20111211-stable/doc/glibc-functions/get_nprocs_conf.texi000066400000000000000000000007041167105100700243710ustar00rootroot00000000000000@node get_nprocs_conf @subsection @code{get_nprocs_conf} @findex get_nprocs_conf 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 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, OSF/1 5.1, Solaris 10, Cygwin 1.7.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/get_phys_pages.texi000066400000000000000000000007111167105100700242200ustar00rootroot00000000000000@node get_phys_pages @subsection @code{get_phys_pages} @findex get_phys_pages 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getaliasbyname.texi000066400000000000000000000007021167105100700242040ustar00rootroot00000000000000@node getaliasbyname @subsection @code{getaliasbyname} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getaliasbyname_r.texi000066400000000000000000000007101167105100700245240ustar00rootroot00000000000000@node getaliasbyname_r @subsection @code{getaliasbyname_r} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getaliasent.texi000066400000000000000000000006711167105100700235240ustar00rootroot00000000000000@node getaliasent @subsection @code{getaliasent} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getaliasent_r.texi000066400000000000000000000006771167105100700240530ustar00rootroot00000000000000@node getaliasent_r @subsection @code{getaliasent_r} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getdate_r.texi000066400000000000000000000006261167105100700231620ustar00rootroot00000000000000@node getdate_r @subsection @code{getdate_r} @findex getdate_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getdirentries.texi000066400000000000000000000010501167105100700240640ustar00rootroot00000000000000@node getdirentries @subsection @code{getdirentries} @findex 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: Minix 3.1.8, AIX 4.3.2, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/getdomainname.texi000066400000000000000000000012771167105100700240370ustar00rootroot00000000000000@node getdomainname @subsection @code{getdomainname} @findex getdomainname Gnulib module: getdomainname Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is declared in @code{netdb.h}, not in @code{unistd.h}, on some platforms: AIX 7.1. @item This function is declared in @code{netdb.h} and in @code{sys/socket.h}, not in @code{unistd.h}, on some platforms: OSF/1 5.1. @item The second argument is of type @code{int}, not @code{size_t}, on some platforms: MacOS X 10.5, FreeBSD 6.4, AIX 7.1, IRIX 6.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/getdtablesize.texi000066400000000000000000000004501167105100700240450ustar00rootroot00000000000000@node getdtablesize @subsection @code{getdtablesize} @findex getdtablesize Gnulib module: getdtablesize Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/getfilecon-desc.texi000066400000000000000000000021471167105100700242570ustar00rootroot00000000000000@macro getfileconDesc{fn} Gnulib module: selinux-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. 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-20111211-stable/doc/glibc-functions/getfilecon.texi000066400000000000000000000001371167105100700233400ustar00rootroot00000000000000@node getfilecon @subsection @code{getfilecon} @findex getfilecon @getfileconDesc{getfilecon} gnulib-20111211-stable/doc/glibc-functions/getfsent.texi000066400000000000000000000005251167105100700230410ustar00rootroot00000000000000@node getfsent @subsection @code{getfsent} @findex getfsent Gnulib module: --- Portability problems fixed 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getfsfile.texi000066400000000000000000000005301167105100700231660ustar00rootroot00000000000000@node getfsfile @subsection @code{getfsfile} @findex getfsfile Gnulib module: --- Portability problems fixed 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getfsspec.texi000066400000000000000000000005301167105100700232010ustar00rootroot00000000000000@node getfsspec @subsection @code{getfsspec} @findex getfsspec Gnulib module: --- Portability problems fixed 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getgrent_r.texi000066400000000000000000000005541167105100700233640ustar00rootroot00000000000000@node getgrent_r @subsection @code{getgrent_r} @findex getgrent_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 X 10.5, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getgrouplist.texi000066400000000000000000000005621167105100700237530ustar00rootroot00000000000000@node getgrouplist @subsection @code{getgrouplist} @findex getgrouplist Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gethostbyaddr_r.texi000066400000000000000000000006241167105100700244060ustar00rootroot00000000000000@node gethostbyaddr_r @subsection @code{gethostbyaddr_r} @findex gethostbyaddr_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gethostbyname2.texi000066400000000000000000000006021167105100700241510ustar00rootroot00000000000000@node gethostbyname2 @subsection @code{gethostbyname2} @findex gethostbyname2 Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gethostbyname2_r.texi000066400000000000000000000007101167105100700244720ustar00rootroot00000000000000@node gethostbyname2_r @subsection @code{gethostbyname2_r} @findex gethostbyname2_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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gethostbyname_r.texi000066400000000000000000000006241167105100700244140ustar00rootroot00000000000000@node gethostbyname_r @subsection @code{gethostbyname_r} @findex gethostbyname_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gethostent_r.texi000066400000000000000000000006131167105100700237250ustar00rootroot00000000000000@node gethostent_r @subsection @code{gethostent_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getifaddrs.texi000066400000000000000000000005521167105100700233360ustar00rootroot00000000000000@node getifaddrs @subsection @code{getifaddrs} @findex 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getipv4sourcefilter.texi000066400000000000000000000007031167105100700252310ustar00rootroot00000000000000@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: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getloadavg.texi000066400000000000000000000007451167105100700233430ustar00rootroot00000000000000@node getloadavg @subsection @code{getloadavg} @findex getloadavg 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, OSF/1 5.1, Solaris 2.6, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is declared in @code{}, not @code{}, on some platforms: Solaris 11 2010-11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/getmntent.texi000066400000000000000000000005571167105100700232340ustar00rootroot00000000000000@node getmntent @subsection @code{getmntent} @findex getmntent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, OSF/1 5.1, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getmntent_r.texi000066400000000000000000000006711167105100700235520ustar00rootroot00000000000000@node getmntent_r @subsection @code{getmntent_r} @findex getmntent_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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getnetbyaddr_r.texi000066400000000000000000000006211167105100700242140ustar00rootroot00000000000000@node getnetbyaddr_r @subsection @code{getnetbyaddr_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getnetbyname_r.texi000066400000000000000000000006211167105100700242220ustar00rootroot00000000000000@node getnetbyname_r @subsection @code{getnetbyname_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getnetent_r.texi000066400000000000000000000006101167105100700235330ustar00rootroot00000000000000@node getnetent_r @subsection @code{getnetent_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getnetgrent.texi000066400000000000000000000005001167105100700235410ustar00rootroot00000000000000@node getnetgrent @subsection @code{getnetgrent} @findex getnetgrent Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getnetgrent_r.texi000066400000000000000000000006311167105100700240670ustar00rootroot00000000000000@node getnetgrent_r @subsection @code{getnetgrent_r} @findex getnetgrent_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getnetname.texi000066400000000000000000000005441167105100700233520ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getopt_long.texi000066400000000000000000000027671167105100700235550ustar00rootroot00000000000000@node getopt_long @subsection @code{getopt_long} @findex getopt_long 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, OSF/1 5.1, MSVC 9, Interix 3.5. @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 X 10.5, AIX 5.2, OSF/1 5.1, Solaris 10. @item The value of @code{optind} after a missing required argument is wrong on some platforms: MacOS 10.5. @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 X 10.5, 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-20111211-stable/doc/glibc-functions/getopt_long_only.texi000066400000000000000000000035101167105100700246010ustar00rootroot00000000000000@node getopt_long_only @subsection @code{getopt_long_only} @findex getopt_long_only 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 X 10.5, AIX 5.2, OSF/1 5.1, Solaris 10. @item The value of @code{optind} after a missing required argument is wrong on some platforms: MacOS 10.5. @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 X 10.5, OpenBSD 4.0, AIX 5.2, Solaris 11 2010-11, Cygwin 1.5.x. @item This function is missing on some platforms: MacOS X 10.3, FreeBSD 5.2.1, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, mingw, MSVC 9, Interix 3.5. @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-20111211-stable/doc/glibc-functions/getpagesize.texi000066400000000000000000000005271167105100700235330ustar00rootroot00000000000000@node getpagesize @subsection @code{getpagesize} @findex getpagesize Gnulib module: getpagesize Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 9, BeOS. @item This function is broken on some platforms: mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/getpass.texi000066400000000000000000000014041167105100700226650ustar00rootroot00000000000000@node getpass @subsection @code{getpass} @findex getpass 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 9, BeOS. @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: MacOS X 10.5 (128), FreeBSD 6.2 (128), NetBSD 3.0 (128), OpenBSD 4.0 (128), AIX 5.1 (32), HP-UX 11 (8), IRIX 6.5 (32), OSF/1 5.1 (80), 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-20111211-stable/doc/glibc-functions/getprotobyname_r.texi000066400000000000000000000005761167105100700246100ustar00rootroot00000000000000@node getprotobyname_r @subsection @code{getprotobyname_r} @findex 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 X 10.5, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getprotobynumber_r.texi000066400000000000000000000006041167105100700251500ustar00rootroot00000000000000@node getprotobynumber_r @subsection @code{getprotobynumber_r} @findex 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 X 10.5, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getprotoent_r.texi000066400000000000000000000005651167105100700241210ustar00rootroot00000000000000@node getprotoent_r @subsection @code{getprotoent_r} @findex 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 X 10.5, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getpt.texi000066400000000000000000000006471167105100700223520ustar00rootroot00000000000000@node getpt @subsection @code{getpt} @findex getpt 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getpublickey.texi000066400000000000000000000005771167105100700237200ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getpw.texi000066400000000000000000000005421167105100700223470ustar00rootroot00000000000000@node getpw @subsection @code{getpw} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getpwent_r.texi000066400000000000000000000005541167105100700234020ustar00rootroot00000000000000@node getpwent_r @subsection @code{getpwent_r} @findex getpwent_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 X 10.5, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getresgid.texi000066400000000000000000000006231167105100700231760ustar00rootroot00000000000000@node getresgid @subsection @code{getresgid} @findex 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 X 10.5, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getresuid.texi000066400000000000000000000006231167105100700232140ustar00rootroot00000000000000@node getresuid @subsection @code{getresuid} @findex 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 X 10.5, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getrpcbyname.texi000066400000000000000000000004661167105100700237060ustar00rootroot00000000000000@node getrpcbyname @subsection @code{getrpcbyname} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getrpcbyname_r.texi000066400000000000000000000006341167105100700242240ustar00rootroot00000000000000@node getrpcbyname_r @subsection @code{getrpcbyname_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getrpcbynumber.texi000066400000000000000000000004741167105100700242550ustar00rootroot00000000000000@node getrpcbynumber @subsection @code{getrpcbynumber} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getrpcbynumber_r.texi000066400000000000000000000006421167105100700245730ustar00rootroot00000000000000@node getrpcbynumber_r @subsection @code{getrpcbynumber_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getrpcent.texi000066400000000000000000000004551167105100700232170ustar00rootroot00000000000000@node getrpcent @subsection @code{getrpcent} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getrpcent_r.texi000066400000000000000000000006231167105100700235350ustar00rootroot00000000000000@node getrpcent_r @subsection @code{getrpcent_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getrpcport.texi000066400000000000000000000005051167105100700234110ustar00rootroot00000000000000@node getrpcport @subsection @code{getrpcport} @findex 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, AIX 4.3.2, IRIX 6.5, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getsecretkey.texi000066400000000000000000000006141167105100700237170ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getservbyname_r.texi000066400000000000000000000005731167105100700244210ustar00rootroot00000000000000@node getservbyname_r @subsection @code{getservbyname_r} @findex 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 X 10.5, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getservbyport_r.texi000066400000000000000000000005731167105100700244650ustar00rootroot00000000000000@node getservbyport_r @subsection @code{getservbyport_r} @findex 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 X 10.5, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getservent_r.texi000066400000000000000000000005621167105100700237320ustar00rootroot00000000000000@node getservent_r @subsection @code{getservent_r} @findex 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 X 10.5, FreeBSD 6.0, Minix 3.1.8, HP-UX 11, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getsgent.texi000066400000000000000000000006761167105100700230510ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getsgent_r.texi000066400000000000000000000007041167105100700233620ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getsgnam.texi000066400000000000000000000006761167105100700230360ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getsgnam_r.texi000066400000000000000000000007041167105100700233470ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getsourcefilter.texi000066400000000000000000000006671167105100700244370ustar00rootroot00000000000000@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: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getspent.texi000066400000000000000000000006111167105100700230470ustar00rootroot00000000000000@node getspent @subsection @code{getspent} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getspent_r.texi000066400000000000000000000006311167105100700233720ustar00rootroot00000000000000@node getspent_r @subsection @code{getspent_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 5.3, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getspnam.texi000066400000000000000000000006111167105100700230340ustar00rootroot00000000000000@node getspnam @subsection @code{getspnam} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getspnam_r.texi000066400000000000000000000006311167105100700233570ustar00rootroot00000000000000@node getspnam_r @subsection @code{getspnam_r} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 5.3, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gettext.texi000066400000000000000000000006061167105100700227060ustar00rootroot00000000000000@node gettext @subsection @code{gettext} @findex gettext Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getttyent.texi000066400000000000000000000005251167105100700232510ustar00rootroot00000000000000@node getttyent @subsection @code{getttyent} @findex 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getttynam.texi000066400000000000000000000005251167105100700232360ustar00rootroot00000000000000@node getttynam @subsection @code{getttynam} @findex 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getusershell.texi000066400000000000000000000006441167105100700237320ustar00rootroot00000000000000@node getusershell @subsection @code{getusershell} @findex getusershell Gnulib module: getusershell Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 4.3.2, IRIX 6.5, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is missing a declaration on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/getutent.texi000066400000000000000000000005271167105100700230630ustar00rootroot00000000000000@node getutent @subsection @code{getutent} @findex getutent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getutent_r.texi000066400000000000000000000006311167105100700234000ustar00rootroot00000000000000@node getutent_r @subsection @code{getutent_r} @findex getutent_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getutid.texi000066400000000000000000000005401167105100700226640ustar00rootroot00000000000000@node getutid @subsection @code{getutid} @findex getutid Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getutid_r.texi000066400000000000000000000006261167105100700232120ustar00rootroot00000000000000@node getutid_r @subsection @code{getutid_r} @findex getutid_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getutline.texi000066400000000000000000000005461167105100700232250ustar00rootroot00000000000000@node getutline @subsection @code{getutline} @findex getutline Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getutline_r.texi000066400000000000000000000006341167105100700235440ustar00rootroot00000000000000@node getutline_r @subsection @code{getutline_r} @findex getutline_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getutmp.texi000066400000000000000000000005721167105100700227110ustar00rootroot00000000000000@node getutmp @subsection @code{getutmp} @findex getutmp Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.4, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getutmpx.texi000066400000000000000000000005751167105100700231040ustar00rootroot00000000000000@node getutmpx @subsection @code{getutmpx} @findex getutmpx Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.4, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getw.texi000066400000000000000000000003721167105100700221700ustar00rootroot00000000000000@node getw @subsection @code{getw} @findex getw Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/getwc_unlocked.texi000066400000000000000000000010531167105100700242140ustar00rootroot00000000000000@node getwc_unlocked @subsection @code{getwc_unlocked} @findex getwc_unlocked Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/getwchar_unlocked.texi000066400000000000000000000011101167105100700247010ustar00rootroot00000000000000@node getwchar_unlocked @subsection @code{getwchar_unlocked} @findex getwchar_unlocked 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/getxattr.texi000066400000000000000000000006671167105100700230730ustar00rootroot00000000000000@node getxattr @subsection @code{getxattr} @findex 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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/glob_pattern_p.texi000066400000000000000000000007111167105100700242160ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gnu_dev_major.texi000066400000000000000000000006771167105100700240510ustar00rootroot00000000000000@node gnu_dev_major @subsection @code{gnu_dev_major} @findex gnu_dev_major 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gnu_dev_makedev.texi000066400000000000000000000007051167105100700243450ustar00rootroot00000000000000@node gnu_dev_makedev @subsection @code{gnu_dev_makedev} @findex gnu_dev_makedev 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gnu_dev_minor.texi000066400000000000000000000006771167105100700240650ustar00rootroot00000000000000@node gnu_dev_minor @subsection @code{gnu_dev_minor} @findex gnu_dev_minor 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/gnu_get_libc_release.texi000066400000000000000000000007051167105100700253430ustar00rootroot00000000000000@node gnu_get_libc_release @subsection @code{gnu_get_libc_release} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/gnu_get_libc_version.texi000066400000000000000000000007051167105100700254100ustar00rootroot00000000000000@node gnu_get_libc_version @subsection @code{gnu_get_libc_version} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/group_member.texi000066400000000000000000000007051167105100700237050ustar00rootroot00000000000000@node group_member @subsection @code{group_member} @findex group_member Gnulib module: group-member Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/gsignal.texi000066400000000000000000000005421167105100700226450ustar00rootroot00000000000000@node gsignal @subsection @code{gsignal} @findex gsignal Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/hasmntopt.texi000066400000000000000000000005671167105100700232450ustar00rootroot00000000000000@node hasmntopt @subsection @code{hasmntopt} @findex hasmntopt Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, OSF/1 5.1, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/hcreate_r.texi000066400000000000000000000006011167105100700231510ustar00rootroot00000000000000@node hcreate_r @subsection @code{hcreate_r} @findex hcreate_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/hdestroy_r.texi000066400000000000000000000006041167105100700234020ustar00rootroot00000000000000@node hdestroy_r @subsection @code{hdestroy_r} @findex hdestroy_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/herror.texi000066400000000000000000000004431167105100700225220ustar00rootroot00000000000000@node herror @subsection @code{herror} @findex 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 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/host2netname.texi000066400000000000000000000005521167105100700236310ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/hsearch_r.texi000066400000000000000000000006011167105100700231530ustar00rootroot00000000000000@node hsearch_r @subsection @code{hsearch_r} @findex hsearch_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/hstrerror.texi000066400000000000000000000004741167105100700232570ustar00rootroot00000000000000@node hstrerror @subsection @code{hstrerror} @findex 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 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/in6addr_any.texi000066400000000000000000000005661167105100700234250ustar00rootroot00000000000000@node in6addr_any @subsection @code{in6addr_any} @findex in6addr_any 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 X 10.5, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/in6addr_loopback.texi000066400000000000000000000006201167105100700244170ustar00rootroot00000000000000@node in6addr_loopback @subsection @code{in6addr_loopback} @findex in6addr_loopback 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 X 10.5, Minix 3.1.8, AIX 4.3.2, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet6_option_alloc.texi000066400000000000000000000006211167105100700250060ustar00rootroot00000000000000@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: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet6_option_append.texi000066400000000000000000000006241167105100700251660ustar00rootroot00000000000000@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: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet6_option_find.texi000066400000000000000000000006161167105100700246400ustar00rootroot00000000000000@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: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet6_option_init.texi000066400000000000000000000006161167105100700246630ustar00rootroot00000000000000@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: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet6_option_next.texi000066400000000000000000000006161167105100700246760ustar00rootroot00000000000000@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: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet6_option_space.texi000066400000000000000000000006211167105100700250070ustar00rootroot00000000000000@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: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_aton.texi000066400000000000000000000004301167105100700231750ustar00rootroot00000000000000@node inet_aton @subsection @code{inet_aton} @findex inet_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: mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_lnaof.texi000066400000000000000000000004601167105100700233360ustar00rootroot00000000000000@node inet_lnaof @subsection @code{inet_lnaof} @findex inet_lnaof Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_makeaddr.texi000066400000000000000000000004611167105100700240100ustar00rootroot00000000000000@node inet_makeaddr @subsection @code{inet_makeaddr} @findex inet_makeaddr Gnulib module: --- Portability problems fixed 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, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_net_ntop.texi000066400000000000000000000005501167105100700240650ustar00rootroot00000000000000@node inet_net_ntop @subsection @code{inet_net_ntop} @findex 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, OSF/1 4.0, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_net_pton.texi000066400000000000000000000005501167105100700240650ustar00rootroot00000000000000@node inet_net_pton @subsection @code{inet_net_pton} @findex 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, OSF/1 4.0, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_neta.texi000066400000000000000000000005501167105100700231660ustar00rootroot00000000000000@node inet_neta @subsection @code{inet_neta} @findex inet_neta Gnulib module: --- Portability problems fixed 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, OSF/1 4.0, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_netof.texi000066400000000000000000000004501167105100700233510ustar00rootroot00000000000000@node inet_netof @subsection @code{inet_netof} @findex inet_netof Gnulib module: --- Portability problems fixed 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, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_network.texi000066400000000000000000000004411167105100700237270ustar00rootroot00000000000000@node inet_network @subsection @code{inet_network} @findex inet_network Gnulib 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_nsap_addr.texi000066400000000000000000000005401167105100700241710ustar00rootroot00000000000000@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: Minix 3.1.8, HP-UX 11.00, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/inet_nsap_ntoa.texi000066400000000000000000000005401167105100700242200ustar00rootroot00000000000000@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: Minix 3.1.8, HP-UX 11.00, IRIX 5.3, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/initgroups.texi000066400000000000000000000004501167105100700234220ustar00rootroot00000000000000@node initgroups @subsection @code{initgroups} @findex initgroups Gnulib 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 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/initstate_r.texi000066400000000000000000000006331167105100700235470ustar00rootroot00000000000000@node initstate_r @subsection @code{initstate_r} @findex initstate_r Gnulib module: random_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/innetgr.texi000066400000000000000000000004641167105100700226720ustar00rootroot00000000000000@node innetgr @subsection @code{innetgr} @findex innetgr Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ioperm.texi000066400000000000000000000006521167105100700225160ustar00rootroot00000000000000@node ioperm @subsection @code{ioperm} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/iopl.texi000066400000000000000000000006441167105100700221670ustar00rootroot00000000000000@node iopl @subsection @code{iopl} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/isctype.texi000066400000000000000000000006321167105100700227010ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/isfdtype.texi000066400000000000000000000006321167105100700230500ustar00rootroot00000000000000@node isfdtype @subsection @code{isfdtype} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/isinff.texi000066400000000000000000000005551167105100700225030ustar00rootroot00000000000000@node isinff @subsection @code{isinff} @findex isinff Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/isinfl.texi000066400000000000000000000006331167105100700225060ustar00rootroot00000000000000@node isinfl @subsection @code{isinfl} @findex isinfl Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/isnanf.texi000066400000000000000000000004631167105100700225010ustar00rootroot00000000000000@node isnanf @subsection @code{isnanf} @findex isnanf Gnulib module: isnanf Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/isnanl.texi000066400000000000000000000005701167105100700225060ustar00rootroot00000000000000@node isnanl @subsection @code{isnanl} @findex isnanl Gnulib module: isnanl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/j0f.texi000066400000000000000000000004701167105100700217000ustar00rootroot00000000000000@node j0f @subsection @code{j0f} @findex j0f Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/j0l.texi000066400000000000000000000005711167105100700217100ustar00rootroot00000000000000@node j0l @subsection @code{j0l} @findex j0l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/j1f.texi000066400000000000000000000004701167105100700217010ustar00rootroot00000000000000@node j1f @subsection @code{j1f} @findex j1f Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/j1l.texi000066400000000000000000000005711167105100700217110ustar00rootroot00000000000000@node j1l @subsection @code{j1l} @findex j1l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/jnf.texi000066400000000000000000000004701167105100700217760ustar00rootroot00000000000000@node jnf @subsection @code{jnf} @findex jnf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/jnl.texi000066400000000000000000000005711167105100700220060ustar00rootroot00000000000000@node jnl @subsection @code{jnl} @findex jnl Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/jrand48_r.texi000066400000000000000000000006201167105100700230110ustar00rootroot00000000000000@node jrand48_r @subsection @code{jrand48_r} @findex jrand48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/key_decryptsession.texi000066400000000000000000000006061167105100700251500ustar00rootroot00000000000000@node key_decryptsession @subsection @code{key_decryptsession} @findex 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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/key_decryptsession_pk.texi000066400000000000000000000006551167105100700256460ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/key_encryptsession.texi000066400000000000000000000006061167105100700251620ustar00rootroot00000000000000@node key_encryptsession @subsection @code{key_encryptsession} @findex 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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/key_encryptsession_pk.texi000066400000000000000000000006551167105100700256600ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/key_gendes.texi000066400000000000000000000005561167105100700233430ustar00rootroot00000000000000@node key_gendes @subsection @code{key_gendes} @findex 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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/key_get_conv.texi000066400000000000000000000005771167105100700237050ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/key_secretkey_is_set.texi000066400000000000000000000006411167105100700254350ustar00rootroot00000000000000@node key_secretkey_is_set @subsection @code{key_secretkey_is_set} @findex 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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/key_setsecret.texi000066400000000000000000000005671167105100700241010ustar00rootroot00000000000000@node key_setsecret @subsection @code{key_setsecret} @findex 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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/klogctl.texi000066400000000000000000000006551167105100700226650ustar00rootroot00000000000000@node klogctl @subsection @code{klogctl} @findex klogctl 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/lchmod.texi000066400000000000000000000006011167105100700224630ustar00rootroot00000000000000@node lchmod @subsection @code{lchmod} @findex lchmod Gnulib module: lchmod Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.4, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/lckpwdf.texi000066400000000000000000000005741167105100700226600ustar00rootroot00000000000000@node lckpwdf @subsection @code{lckpwdf} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/lcong48_r.texi000066400000000000000000000006201167105100700230150ustar00rootroot00000000000000@node lcong48_r @subsection @code{lcong48_r} @findex lcong48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/lgamma_r.texi000066400000000000000000000005031167105100700227750ustar00rootroot00000000000000@node lgamma_r @subsection @code{lgamma_r} @findex lgamma_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 X 10.5 x86, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/lgammaf_r.texi000066400000000000000000000005251167105100700231470ustar00rootroot00000000000000@node lgammaf_r @subsection @code{lgammaf_r} @findex lgammaf_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 X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/lgammal_r.texi000066400000000000000000000006151167105100700231550ustar00rootroot00000000000000@node lgammal_r @subsection @code{lgammal_r} @findex lgammal_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/lgetfilecon.texi000066400000000000000000000001431167105100700235110ustar00rootroot00000000000000@node lgetfilecon @subsection @code{lgetfilecon} @findex lgetfilecon @getfileconDesc{lgetfilecon} gnulib-20111211-stable/doc/glibc-functions/lgetxattr.texi000066400000000000000000000006721167105100700232430ustar00rootroot00000000000000@node lgetxattr @subsection @code{lgetxattr} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/listxattr.texi000066400000000000000000000006721167105100700232630ustar00rootroot00000000000000@node listxattr @subsection @code{listxattr} @findex 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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/llistxattr.texi000066400000000000000000000006751167105100700234420ustar00rootroot00000000000000@node llistxattr @subsection @code{llistxattr} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/loc1.texi000066400000000000000000000006341167105100700220610ustar00rootroot00000000000000@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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/loc2.texi000066400000000000000000000006341167105100700220620ustar00rootroot00000000000000@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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/locs.texi000066400000000000000000000006341167105100700221630ustar00rootroot00000000000000@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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/login_tty.texi000066400000000000000000000017371167105100700232400ustar00rootroot00000000000000@node login_tty @subsection @code{login_tty} @findex login_tty 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 2010-11. @item This function requires linking with @code{-lutil} on some platforms: glibc 2.3.6, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8. It is available without link options on other platforms: MacOS X 10.5, OSF/1 5.1, Cygwin, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @item This function is declared in @code{} on glibc, Cygwin, in @code{} on MacOS X 10.5, NetBSD 5.0, OpenBSD 3.8, in @code{} on FreeBSD 6.0, Haiku, and not declared at all on OSF/1 5.1, Interix 3.5. 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-20111211-stable/doc/glibc-functions/lrand48_r.texi000066400000000000000000000006201167105100700230130ustar00rootroot00000000000000@node lrand48_r @subsection @code{lrand48_r} @findex lrand48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/lremovexattr.texi000066400000000000000000000007031167105100700237540ustar00rootroot00000000000000@node lremovexattr @subsection @code{lremovexattr} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/lsetxattr.texi000066400000000000000000000006721167105100700232570ustar00rootroot00000000000000@node lsetxattr @subsection @code{lsetxattr} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/lutimes.texi000066400000000000000000000013161167105100700227030ustar00rootroot00000000000000@node lutimes @subsection @code{lutimes} @findex lutimes Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.4, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This function cannot set full timestamp resolution. Use @code{utimensat(AT_FDCWD,file,times,AT_SYMLINK_NOFOLLOW)}, or the gnulib module 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-20111211-stable/doc/glibc-functions/madvise.texi000066400000000000000000000004601167105100700226500ustar00rootroot00000000000000@node madvise @subsection @code{madvise} @findex madvise Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/mallinfo.texi000066400000000000000000000006011167105100700230160ustar00rootroot00000000000000@node mallinfo @subsection @code{mallinfo} @findex mallinfo Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/malloc_get_state.texi000066400000000000000000000007101167105100700245240ustar00rootroot00000000000000@node malloc_get_state @subsection @code{malloc_get_state} @findex malloc_get_state 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/malloc_info.texi000066400000000000000000000007071167105100700235060ustar00rootroot00000000000000@node malloc_info @subsection @code{malloc_info} @findex 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 all non-glibc platforms: glibc 2.9, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/malloc_set_state.texi000066400000000000000000000007101167105100700245400ustar00rootroot00000000000000@node malloc_set_state @subsection @code{malloc_set_state} @findex malloc_set_state 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/malloc_stats.texi000066400000000000000000000006531167105100700237110ustar00rootroot00000000000000@node malloc_stats @subsection @code{malloc_stats} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/malloc_trim.texi000066400000000000000000000006501167105100700235230ustar00rootroot00000000000000@node malloc_trim @subsection @code{malloc_trim} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/malloc_usable_size.texi000066400000000000000000000007001167105100700250510ustar00rootroot00000000000000@node malloc_usable_size @subsection @code{malloc_usable_size} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/mallopt.texi000066400000000000000000000005761167105100700227000ustar00rootroot00000000000000@node mallopt @subsection @code{mallopt} @findex mallopt Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/matherr.texi000066400000000000000000000005041167105100700226610ustar00rootroot00000000000000@node matherr @subsection @code{matherr} @findex 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 6.0, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/mcheck.texi000066400000000000000000000006331167105100700224540ustar00rootroot00000000000000@node mcheck @subsection @code{mcheck} @findex mcheck Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/mcheck_check_all.texi000066400000000000000000000007101167105100700244350ustar00rootroot00000000000000@node mcheck_check_all @subsection @code{mcheck_check_all} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/mcheck_pedantic.texi000066400000000000000000000007051167105100700243230ustar00rootroot00000000000000@node mcheck_pedantic @subsection @code{mcheck_pedantic} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/memalign.texi000066400000000000000000000005761167105100700230210ustar00rootroot00000000000000@node memalign @subsection @code{memalign} @findex memalign Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.00, OSF/1 5.1, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/memfrob.texi000066400000000000000000000006551167105100700226550ustar00rootroot00000000000000@node memfrob @subsection @code{memfrob} @findex memfrob 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/memmem.texi000066400000000000000000000024541167105100700225020ustar00rootroot00000000000000@node memmem @subsection @code{memmem} @findex memmem Gnulib module: memmem or memmem-simple Both modules implement the same replacement for the @code{memmem} function with the 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: MacOS X 10.5, FreeBSD 5.2.1, OpenBSD 4.0, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5, BeOS. @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, 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 5.0, AIX 5.1, Solaris 11 2010-11, 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-20111211-stable/doc/glibc-functions/mempcpy.texi000066400000000000000000000006401167105100700226720ustar00rootroot00000000000000@node mempcpy @subsection @code{mempcpy} @findex mempcpy Gnulib module: mempcpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/memrchr.texi000066400000000000000000000006611167105100700226600ustar00rootroot00000000000000@node memrchr @subsection @code{memrchr} @findex memrchr Gnulib module: memrchr Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/mincore.texi000066400000000000000000000005341167105100700226560ustar00rootroot00000000000000@node mincore @subsection @code{mincore} @findex 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: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/mkostemp.texi000066400000000000000000000013301167105100700230540ustar00rootroot00000000000000@node mkostemp @subsection @code{mkostemp} @findex mkostemp Gnulib module: mkostemp Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.5, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/mkostemps.texi000066400000000000000000000013511167105100700232420ustar00rootroot00000000000000@node mkostemps @subsection @code{mkostemps} @findex mkostemps Gnulib module: mkostemps Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: glibc 2.10, MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.5, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/mkstemps.texi000066400000000000000000000014331167105100700230640ustar00rootroot00000000000000@node mkstemps @subsection @code{mkstemps} @findex 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is declared in @code{} instead of @code{} on some platforms: MacOS X 10.5. @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-20111211-stable/doc/glibc-functions/monstartup.texi000066400000000000000000000005601167105100700234350ustar00rootroot00000000000000@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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/mount.texi000066400000000000000000000004231167105100700223610ustar00rootroot00000000000000@node mount @subsection @code{mount} @findex mount Gnulib 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 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/mprobe.texi000066400000000000000000000006331167105100700225060ustar00rootroot00000000000000@node mprobe @subsection @code{mprobe} @findex mprobe Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/mrand48_r.texi000066400000000000000000000006201167105100700230140ustar00rootroot00000000000000@node mrand48_r @subsection @code{mrand48_r} @findex mrand48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/mremap.texi000066400000000000000000000006411167105100700225020ustar00rootroot00000000000000@node mremap @subsection @code{mremap} @findex mremap 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/mtrace.texi000066400000000000000000000006521167105100700224760ustar00rootroot00000000000000@node mtrace @subsection @code{mtrace} @findex mtrace 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/muntrace.texi000066400000000000000000000006601167105100700230400ustar00rootroot00000000000000@node muntrace @subsection @code{muntrace} @findex muntrace 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/netname2host.texi000066400000000000000000000005521167105100700236310ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/netname2user.texi000066400000000000000000000005521167105100700236320ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ngettext.texi000066400000000000000000000006111167105100700230600ustar00rootroot00000000000000@node ngettext @subsection @code{ngettext} @findex ngettext Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_add.texi000066400000000000000000000006211167105100700226200ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_add_entry.texi000066400000000000000000000006431167105100700240450ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_addmember.texi000066400000000000000000000006431167105100700240140ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_checkpoint.texi000066400000000000000000000006461167105100700242260ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_clone_object.texi000066400000000000000000000006301167105100700245160ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_creategroup.texi000066400000000000000000000006511167105100700244130ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_destroy_object.texi000066400000000000000000000006361167105100700251150ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_destroygroup.texi000066400000000000000000000006541167105100700246440ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_dir_cmp.texi000066400000000000000000000006111167105100700235040ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_domain_of.texi000066400000000000000000000006171167105100700240300ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_domain_of_r.texi000066400000000000000000000007051167105100700243470ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_first_entry.texi000066400000000000000000000006511167105100700244430ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_freenames.texi000066400000000000000000000006431167105100700240410ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_freeresult.texi000066400000000000000000000006461167105100700242570ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_freeservlist.texi000066400000000000000000000006541167105100700246130ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_freetags.texi000066400000000000000000000006401167105100700236710ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_getnames.texi000066400000000000000000000006401167105100700236740ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_getservlist.texi000066400000000000000000000006511167105100700244460ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_ismember.texi000066400000000000000000000006401167105100700236740ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_leaf_of.texi000066400000000000000000000006111167105100700234620ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_leaf_of_r.texi000066400000000000000000000006301167105100700240040ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_lerror.texi000066400000000000000000000006321167105100700233770ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_list.texi000066400000000000000000000006241167105100700230460ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_local_directory.texi000066400000000000000000000006411167105100700252500ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_local_group.texi000066400000000000000000000006251167105100700244020ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_local_host.texi000066400000000000000000000006221167105100700242200ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_local_principal.texi000066400000000000000000000006651167105100700252330ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_lookup.texi000066400000000000000000000006321167105100700234030ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_mkdir.texi000066400000000000000000000006271167105100700232040ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_modify.texi000066400000000000000000000006321167105100700233610ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_modify_entry.texi000066400000000000000000000006541167105100700246060ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_name_of.texi000066400000000000000000000006111167105100700234730ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_name_of_r.texi000066400000000000000000000006541167105100700240230ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_next_entry.texi000066400000000000000000000006461167105100700242760ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_perror.texi000066400000000000000000000006321167105100700234030ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_ping.texi000066400000000000000000000006241167105100700230300ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_directory.texi000066400000000000000000000006761167105100700253220ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_entry.texi000066400000000000000000000006621167105100700244520ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_group.texi000066400000000000000000000006621167105100700244450ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_group_entry.texi000066400000000000000000000007051167105100700256640ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_link.texi000066400000000000000000000006571167105100700242520ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_object.texi000066400000000000000000000006541167105100700245600ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_result.texi000066400000000000000000000007101167105100700246210ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_rights.texi000066400000000000000000000006541167105100700246120ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_print_table.texi000066400000000000000000000006621167105100700244000ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_remove.texi000066400000000000000000000006321167105100700233670ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_remove_entry.texi000066400000000000000000000006541167105100700246140ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_removemember.texi000066400000000000000000000006541167105100700245630ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_rmdir.texi000066400000000000000000000006271167105100700232130ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_servstate.texi000066400000000000000000000006431167105100700241140ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_sperrno.texi000066400000000000000000000006351167105100700235650ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_sperror.texi000066400000000000000000000006351167105100700235710ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_sperror_r.texi000066400000000000000000000006541167105100700241130ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_stats.texi000066400000000000000000000006271167105100700232340ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nis_verifygroup.texi000066400000000000000000000006511167105100700244540ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/nrand48_r.texi000066400000000000000000000006201167105100700230150ustar00rootroot00000000000000@node nrand48_r @subsection @code{nrand48_r} @findex nrand48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/ntp_adjtime.texi000066400000000000000000000006031167105100700235150ustar00rootroot00000000000000@node ntp_adjtime @subsection @code{ntp_adjtime} @findex ntp_adjtime Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ntp_gettime.texi000066400000000000000000000006031167105100700235360ustar00rootroot00000000000000@node ntp_gettime @subsection @code{ntp_gettime} @findex ntp_gettime Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/obstack_alloc_failed_handler.texi000066400000000000000000000007351167105100700270260ustar00rootroot00000000000000@node obstack_alloc_failed_handler @subsection @code{obstack_alloc_failed_handler} @findex obstack_alloc_failed_handler 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/obstack_exit_failure.texi000066400000000000000000000007051167105100700254100ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/obstack_free.texi000066400000000000000000000006551167105100700236550ustar00rootroot00000000000000@node obstack_free @subsection @code{obstack_free} @findex obstack_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: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/obstack_printf.texi000066400000000000000000000056331167105100700242370ustar00rootroot00000000000000@node obstack_printf @subsection @code{obstack_printf} @findex obstack_printf 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems fixed by Gnulib module @code{ostack-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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @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 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @item This function can crash in out-of-memory conditions on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @item This function does not fully support the @samp{n} directive on some platforms: HP-UX 11, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/obstack_vprintf.texi000066400000000000000000000056361167105100700244300ustar00rootroot00000000000000@node obstack_vprintf @subsection @code{obstack_vprintf} @findex obstack_vprintf 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems fixed by Gnulib module @code{ostack-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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @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 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @item This function can crash in out-of-memory conditions on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @item This function does not fully support the @samp{n} directive on some platforms: HP-UX 11, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/on_exit.texi000066400000000000000000000006361167105100700226720ustar00rootroot00000000000000@node on_exit @subsection @code{on_exit} @findex on_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/openpty.texi000066400000000000000000000021761167105100700227240ustar00rootroot00000000000000@node openpty @subsection @code{openpty} @findex openpty 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 2010-11. @item One some systems (at least including Cygwin, Interix, OSF/1 4 and 5, 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 Cygwin, Interix, OSF/1 4 and 5, and glibc. It is declared in util.h on Mac OS X, OpenBSD and NetBSD. It is declared in libutil.h on FreeBSD. @item Some platforms declare the function without marking the last two parameters @code{const}. FreeBSD, Cygwin 1.7.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @item After a successful call to @code{openpty}, the application needs to close the master's file descriptor before closing the slave's file descriptor, otherwise the process may hang in a state where it cannot be killed, on some platforms: MacOS X 10.4.11. @end itemize gnulib-20111211-stable/doc/glibc-functions/parse_printf_format.texi000066400000000000000000000007211167105100700252640ustar00rootroot00000000000000@node parse_printf_format @subsection @code{parse_printf_format} @findex parse_printf_format 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/personality.texi000066400000000000000000000006711167105100700235750ustar00rootroot00000000000000@node personality @subsection @code{personality} @findex personality 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pipe2.texi000066400000000000000000000012521167105100700222370ustar00rootroot00000000000000@node pipe2 @subsection @code{pipe2} @findex pipe2 Gnulib module: pipe2 Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.1, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/pmap_getmaps.texi000066400000000000000000000004661167105100700237030ustar00rootroot00000000000000@node pmap_getmaps @subsection @code{pmap_getmaps} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pmap_getport.texi000066400000000000000000000004661167105100700237270ustar00rootroot00000000000000@node pmap_getport @subsection @code{pmap_getport} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pmap_rmtcall.texi000066400000000000000000000004661167105100700237010ustar00rootroot00000000000000@node pmap_rmtcall @subsection @code{pmap_rmtcall} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pmap_set.texi000066400000000000000000000004521167105100700230310ustar00rootroot00000000000000@node pmap_set @subsection @code{pmap_set} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pmap_unset.texi000066400000000000000000000004601167105100700233730ustar00rootroot00000000000000@node pmap_unset @subsection @code{pmap_unset} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pow10.texi000066400000000000000000000006361167105100700221730ustar00rootroot00000000000000@node pow10 @subsection @code{pow10} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/pow10f.texi000066400000000000000000000006411167105100700223350ustar00rootroot00000000000000@node pow10f @subsection @code{pow10f} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/pow10l.texi000066400000000000000000000006521167105100700223450ustar00rootroot00000000000000@node pow10l @subsection @code{pow10l} @findex pow10l 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/prctl.texi000066400000000000000000000006241167105100700223460ustar00rootroot00000000000000@node prctl @subsection @code{prctl} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/preadv.texi000066400000000000000000000011061167105100700224770ustar00rootroot00000000000000@node preadv @subsection @code{preadv} @findex preadv Gnulib 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 X 10.5, FreeBSD 5.2.1, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/printf_size.texi000066400000000000000000000006711167105100700235600ustar00rootroot00000000000000@node printf_size @subsection @code{printf_size} @findex printf_size 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/printf_size_info.texi000066400000000000000000000007101167105100700245650ustar00rootroot00000000000000@node printf_size_info @subsection @code{printf_size_info} @findex printf_size_info 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/profil.texi000066400000000000000000000004721167105100700225160ustar00rootroot00000000000000@node profil @subsection @code{profil} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/program_invocation_name.texi000066400000000000000000000007161167105100700261240ustar00rootroot00000000000000@node program_invocation_name @subsection @code{program_invocation_name} @findex program_invocation_name 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/program_invocation_short_name.texi000066400000000000000000000007401167105100700273400ustar00rootroot00000000000000@node program_invocation_short_name @subsection @code{program_invocation_short_name} @findex program_invocation_short_name 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_attr_getaffinity_np.texi000066400000000000000000000011071167105100700267660ustar00rootroot00000000000000@node pthread_attr_getaffinity_np @subsection @code{pthread_attr_getaffinity_np} @findex 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 all non-glibc platforms: glibc 2.3.2, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item This function has a different signature on some platforms: glibc 2.3.3. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_attr_setaffinity_np.texi000066400000000000000000000011071167105100700270020ustar00rootroot00000000000000@node pthread_attr_setaffinity_np @subsection @code{pthread_attr_setaffinity_np} @findex 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 all non-glibc platforms: glibc 2.3.2, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item This function has a different signature on some platforms: glibc 2.3.3. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_getaffinity_np.texi000066400000000000000000000012241167105100700257340ustar00rootroot00000000000000@node pthread_getaffinity_np @subsection @code{pthread_getaffinity_np} @findex 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 X 10.5, FreeBSD 6.4, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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 7.2, NetBSD 5.0. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_getattr_np.texi000066400000000000000000000007161167105100700251020ustar00rootroot00000000000000@node pthread_getattr_np @subsection @code{pthread_getattr_np} @findex 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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_getname_np.texi000066400000000000000000000007071167105100700250500ustar00rootroot00000000000000@node pthread_getname_np @subsection @code{pthread_getname_np} @findex 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, MacOS X 10.5, FreeBSD 6.4, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_kill_other_threads_np.texi000066400000000000000000000007571167105100700273030ustar00rootroot00000000000000@node pthread_kill_other_threads_np @subsection @code{pthread_kill_other_threads_np} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_mutex_consistent_np.texi000066400000000000000000000007611167105100700270430ustar00rootroot00000000000000@node pthread_mutex_consistent_np @subsection @code{pthread_mutex_consistent_np} @findex pthread_mutex_consistent_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.6, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 7, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_mutexattr_getrobust_np.texi000066400000000000000000000011371167105100700275610ustar00rootroot00000000000000@node pthread_mutexattr_getrobust_np @subsection @code{pthread_mutexattr_getrobust_np} @findex pthread_mutexattr_getrobust_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.6, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 7, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize This function has now been standardized by POSIX under the name @code{pthread_mutexattr_getrobust}. gnulib-20111211-stable/doc/glibc-functions/pthread_mutexattr_setrobust_np.texi000066400000000000000000000011371167105100700275750ustar00rootroot00000000000000@node pthread_mutexattr_setrobust_np @subsection @code{pthread_mutexattr_setrobust_np} @findex pthread_mutexattr_setrobust_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.6, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 7, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize This function has now been standardized by POSIX under the name @code{pthread_mutexattr_setrobust}. gnulib-20111211-stable/doc/glibc-functions/pthread_rwlockattr_getkind_np.texi000066400000000000000000000007571167105100700273360ustar00rootroot00000000000000@node pthread_rwlockattr_getkind_np @subsection @code{pthread_rwlockattr_getkind_np} @findex 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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_rwlockattr_setkind_np.texi000066400000000000000000000007571167105100700273520ustar00rootroot00000000000000@node pthread_rwlockattr_setkind_np @subsection @code{pthread_rwlockattr_setkind_np} @findex 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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_setaffinity_np.texi000066400000000000000000000012241167105100700257500ustar00rootroot00000000000000@node pthread_setaffinity_np @subsection @code{pthread_setaffinity_np} @findex 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 X 10.5, FreeBSD 6.4, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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 7.2, NetBSD 5.0. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_setname_np.texi000066400000000000000000000013051167105100700250570ustar00rootroot00000000000000@node pthread_setname_np @subsection @code{pthread_setname_np} @findex 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, MacOS X 10.5, FreeBSD 6.4, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item This function has a different signature on some platforms: NetBSD 5.0, OSF/1 5.1. On OSF/1 the third argument must be @code{NULL}. On NetBSD the second argument is interpreted as a @code{printf} format string, with the third argument as parameter. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_sigqueue.texi000066400000000000000000000007271167105100700245640ustar00rootroot00000000000000@node pthread_sigqueue @subsection @code{pthread_sigqueue} @findex 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 all non-glibc platforms: glibc 2.10, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_timedjoin_np.texi000066400000000000000000000011471167105100700254110ustar00rootroot00000000000000@node pthread_timedjoin_np @subsection @code{pthread_timedjoin_np} @findex 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 all non-glibc platforms: glibc 2.3.2, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/pthread_tryjoin_np.texi000066400000000000000000000007361167105100700251300ustar00rootroot00000000000000@node pthread_tryjoin_np @subsection @code{pthread_tryjoin_np} @findex 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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pthread_yield.texi000066400000000000000000000006101167105100700240320ustar00rootroot00000000000000@node pthread_yield @subsection @code{pthread_yield} @findex pthread_yield Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, NetBSD 5.0, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ptrace.texi000066400000000000000000000004551167105100700225020ustar00rootroot00000000000000@node ptrace @subsection @code{ptrace} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ptsname_r.texi000066400000000000000000000011271167105100700232110ustar00rootroot00000000000000@node ptsname_r @subsection @code{ptsname_r} @findex ptsname_r Gnulib module: ptsname_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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 2010-11, Cygwin 1.7.9, mingw, MSVC 9, BeOS. @item This function is not declared unless @code{_REENTRANT} is defined, on some platforms: OSF/1 5.1. @item This function has an incompatible declaration on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/putgrent.texi000066400000000000000000000006231167105100700230710ustar00rootroot00000000000000@node putgrent @subsection @code{putgrent} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/putpwent.texi000066400000000000000000000005531167105100700231110ustar00rootroot00000000000000@node putpwent @subsection @code{putpwent} @findex putpwent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/putsgent.texi000066400000000000000000000006761167105100700231020ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/putspent.texi000066400000000000000000000006111167105100700231000ustar00rootroot00000000000000@node putspent @subsection @code{putspent} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pututline.texi000066400000000000000000000005461167105100700232560ustar00rootroot00000000000000@node pututline @subsection @code{pututline} @findex pututline Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/putw.texi000066400000000000000000000003721167105100700222210ustar00rootroot00000000000000@node putw @subsection @code{putw} @findex putw Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/putwc_unlocked.texi000066400000000000000000000010531167105100700242450ustar00rootroot00000000000000@node putwc_unlocked @subsection @code{putwc_unlocked} @findex putwc_unlocked Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/putwchar_unlocked.texi000066400000000000000000000011101167105100700247320ustar00rootroot00000000000000@node putwchar_unlocked @subsection @code{putwchar_unlocked} @findex putwchar_unlocked 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/pvalloc.texi000066400000000000000000000006551167105100700226660ustar00rootroot00000000000000@node pvalloc @subsection @code{pvalloc} @findex pvalloc 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/pwritev.texi000066400000000000000000000011111167105100700227120ustar00rootroot00000000000000@node pwritev @subsection @code{pwritev} @findex pwritev Gnulib 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 X 10.5, FreeBSD 5.2.1, Minix 3.1.8, AIX 5.2, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/qecvt.texi000066400000000000000000000006121167105100700223410ustar00rootroot00000000000000@node qecvt @subsection @code{qecvt} @findex qecvt Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/qecvt_r.texi000066400000000000000000000006551167105100700226710ustar00rootroot00000000000000@node qecvt_r @subsection @code{qecvt_r} @findex qecvt_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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/qfcvt.texi000066400000000000000000000006121167105100700223420ustar00rootroot00000000000000@node qfcvt @subsection @code{qfcvt} @findex qfcvt Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/qfcvt_r.texi000066400000000000000000000006551167105100700226720ustar00rootroot00000000000000@node qfcvt_r @subsection @code{qfcvt_r} @findex qfcvt_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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/qgcvt.texi000066400000000000000000000006121167105100700223430ustar00rootroot00000000000000@node qgcvt @subsection @code{qgcvt} @findex qgcvt Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/qsort_r.texi000066400000000000000000000006271167105100700227160ustar00rootroot00000000000000@node qsort_r @subsection @code{qsort_r} @findex qsort_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: glibc 2.7, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/quick_exit.texi000066400000000000000000000007041167105100700233660ustar00rootroot00000000000000@node quick_exit @subsection @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 all non-glibc platforms: glibc 2.9, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/quotactl.texi000066400000000000000000000005241167105100700230550ustar00rootroot00000000000000@node quotactl @subsection @code{quotactl} @findex 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/random_r.texi000066400000000000000000000006221167105100700230210ustar00rootroot00000000000000@node random_r @subsection @code{random_r} @findex random_r Gnulib module: random_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/rawmemchr.texi000066400000000000000000000006711167105100700232110ustar00rootroot00000000000000@node rawmemchr @subsection @code{rawmemchr} @findex rawmemchr Gnulib module: rawmemchr Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/rcmd.texi000066400000000000000000000004111167105100700221410ustar00rootroot00000000000000@node rcmd @subsection @code{rcmd} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/rcmd_af.texi000066400000000000000000000005451167105100700226170ustar00rootroot00000000000000@node rcmd_af @subsection @code{rcmd_af} @findex 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, OSF/1 4.0, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_comp.texi000066400000000000000000000005421167105100700226450ustar00rootroot00000000000000@node re_comp @subsection @code{re_comp} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_compile_fastmap.texi000066400000000000000000000006771167105100700250630ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_compile_pattern.texi000066400000000000000000000006771167105100700251050ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_exec.texi000066400000000000000000000005421167105100700226330ustar00rootroot00000000000000@node re_exec @subsection @code{re_exec} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_match.texi000066400000000000000000000006411167105100700230030ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_match_2.texi000066400000000000000000000006471167105100700232320ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_search.texi000066400000000000000000000006441167105100700231570ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_search_2.texi000066400000000000000000000006521167105100700233770ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_set_registers.texi000066400000000000000000000006711167105100700245740ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_set_syntax.texi000066400000000000000000000006601167105100700241110ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/re_syntax_options.texi000066400000000000000000000006741167105100700250160ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/readahead.texi000066400000000000000000000006631167105100700231230ustar00rootroot00000000000000@node readahead @subsection @code{readahead} @findex readahead 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/reboot.texi000066400000000000000000000004551167105100700225160ustar00rootroot00000000000000@node reboot @subsection @code{reboot} @findex 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/register_printf_function.texi000066400000000000000000000007401167105100700263340ustar00rootroot00000000000000@node register_printf_function @subsection @code{register_printf_function} @findex register_printf_function 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/register_printf_modifier.texi000066400000000000000000000007561167105100700263140ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/register_printf_specifier.texi000066400000000000000000000007611167105100700264630ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/register_printf_type.texi000066400000000000000000000007421167105100700254720ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/remap_file_pages.texi000066400000000000000000000007101167105100700245000ustar00rootroot00000000000000@node remap_file_pages @subsection @code{remap_file_pages} @findex remap_file_pages 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/removexattr.texi000066400000000000000000000007001167105100700235750ustar00rootroot00000000000000@node removexattr @subsection @code{removexattr} @findex 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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/res_init.texi000066400000000000000000000004521167105100700230350ustar00rootroot00000000000000@node res_init @subsection @code{res_init} @findex 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 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/res_mkquery.texi000066400000000000000000000004631167105100700235710ustar00rootroot00000000000000@node res_mkquery @subsection @code{res_mkquery} @findex 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: Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/res_query.texi000066400000000000000000000004551167105100700232420ustar00rootroot00000000000000@node res_query @subsection @code{res_query} @findex 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 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/res_querydomain.texi000066400000000000000000000004771167105100700244360ustar00rootroot00000000000000@node res_querydomain @subsection @code{res_querydomain} @findex 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: Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/res_search.texi000066400000000000000000000004601167105100700233360ustar00rootroot00000000000000@node res_search @subsection @code{res_search} @findex 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 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/revoke.texi000066400000000000000000000005321167105100700225130ustar00rootroot00000000000000@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 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/rexec.texi000066400000000000000000000005151167105100700223270ustar00rootroot00000000000000@node rexec @subsection @code{rexec} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/rexec_af.texi000066400000000000000000000006261167105100700230000ustar00rootroot00000000000000@node rexec_af @subsection @code{rexec_af} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 4.0, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/rpc_createerr.texi000066400000000000000000000005271167105100700240440ustar00rootroot00000000000000@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, OSF/1 5.1, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/rpmatch.texi000066400000000000000000000006261167105100700226620ustar00rootroot00000000000000@node rpmatch @subsection @code{rpmatch} @findex rpmatch Gnulib module: rpmatch Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/rresvport.texi000066400000000000000000000004451167105100700232710ustar00rootroot00000000000000@node rresvport @subsection @code{rresvport} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/rresvport_af.texi000066400000000000000000000005641167105100700237410ustar00rootroot00000000000000@node rresvport_af @subsection @code{rresvport_af} @findex 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, OSF/1 4.0, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/rtime.texi000066400000000000000000000005751167105100700223470ustar00rootroot00000000000000@node rtime @subsection @code{rtime} @findex 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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ruserok.texi000066400000000000000000000004371167105100700227160ustar00rootroot00000000000000@node ruserok @subsection @code{ruserok} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ruserok_af.texi000066400000000000000000000006661167105100700233700ustar00rootroot00000000000000@node ruserok_af @subsection @code{ruserok_af} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sbrk.texi000066400000000000000000000004141167105100700221600ustar00rootroot00000000000000@node sbrk @subsection @code{sbrk} @findex 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: AIX 5.1, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/scalbf.texi000066400000000000000000000005011167105100700224460ustar00rootroot00000000000000@node scalbf @subsection @code{scalbf} @findex scalbf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/scalbl.texi000066400000000000000000000006021167105100700224560ustar00rootroot00000000000000@node scalbl @subsection @code{scalbl} @findex scalbl Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sched_getaffinity.texi000066400000000000000000000007131167105100700247000ustar00rootroot00000000000000@node sched_getaffinity @subsection @code{sched_getaffinity} @findex sched_getaffinity 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sched_setaffinity.texi000066400000000000000000000007131167105100700247140ustar00rootroot00000000000000@node sched_setaffinity @subsection @code{sched_setaffinity} @findex sched_setaffinity 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/seed48_r.texi000066400000000000000000000006151167105100700226370ustar00rootroot00000000000000@node seed48_r @subsection @code{seed48_r} @findex seed48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/semtimedop.texi000066400000000000000000000006341167105100700233710ustar00rootroot00000000000000@node semtimedop @subsection @code{semtimedop} @findex semtimedop Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sendfile.texi000066400000000000000000000010761167105100700230150ustar00rootroot00000000000000@node sendfile @subsection @code{sendfile} @findex 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: MacOS X 10.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 4.0, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/setaliasent.texi000066400000000000000000000006711167105100700235400ustar00rootroot00000000000000@node setaliasent @subsection @code{setaliasent} @findex 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setbuffer.texi000066400000000000000000000004511167105100700232050ustar00rootroot00000000000000@node setbuffer @subsection @code{setbuffer} @findex setbuffer Gnulib module: --- Portability problems fixed 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 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/setdomainname.texi000066400000000000000000000005171167105100700240470ustar00rootroot00000000000000@node setdomainname @subsection @code{setdomainname} @findex setdomainname Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setfsent.texi000066400000000000000000000005251167105100700230550ustar00rootroot00000000000000@node setfsent @subsection @code{setfsent} @findex setfsent Gnulib module: --- Portability problems fixed 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setfsgid.texi000066400000000000000000000006601167105100700230320ustar00rootroot00000000000000@node setfsgid @subsection @code{setfsgid} @findex setfsgid 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setfsuid.texi000066400000000000000000000006601167105100700230500ustar00rootroot00000000000000@node setfsuid @subsection @code{setfsuid} @findex setfsuid 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setgroups.texi000066400000000000000000000011351167105100700232530ustar00rootroot00000000000000@node setgroups @subsection @code{setgroups} @findex setgroups Gnulib 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 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/sethostid.texi000066400000000000000000000005411167105100700232260ustar00rootroot00000000000000@node sethostid @subsection @code{sethostid} @findex sethostid Gnulib module: --- Portability problems fixed 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sethostname.texi000066400000000000000000000006271167105100700235570ustar00rootroot00000000000000@node sethostname @subsection @code{sethostname} @findex sethostname Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is not declared on some platforms: AIX 7.1, OSF/1 5.1, Solaris 10. @end itemize gnulib-20111211-stable/doc/glibc-functions/setipv4sourcefilter.texi000066400000000000000000000007141167105100700252470ustar00rootroot00000000000000@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 all non-glibc platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setkey_r.texi000066400000000000000000000006361167105100700230520ustar00rootroot00000000000000@node setkey_r @subsection @code{setkey_r} @findex setkey_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setlinebuf.texi000066400000000000000000000004571167105100700233660ustar00rootroot00000000000000@node setlinebuf @subsection @code{setlinebuf} @findex setlinebuf Gnulib module: --- Portability problems fixed 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 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/setlogin.texi000066400000000000000000000005501167105100700230440ustar00rootroot00000000000000@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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setmntent.texi000066400000000000000000000006201167105100700232370ustar00rootroot00000000000000@node setmntent @subsection @code{setmntent} @findex setmntent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setnetgrent.texi000066400000000000000000000005001167105100700235550ustar00rootroot00000000000000@node setnetgrent @subsection @code{setnetgrent} @findex setnetgrent Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setresgid.texi000066400000000000000000000006061167105100700232130ustar00rootroot00000000000000@node setresgid @subsection @code{setresgid} @findex 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 X 10.5, NetBSD 5.0, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setresuid.texi000066400000000000000000000006061167105100700232310ustar00rootroot00000000000000@node setresuid @subsection @code{setresuid} @findex 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 X 10.5, NetBSD 5.0, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setrpcent.texi000066400000000000000000000004551167105100700232330ustar00rootroot00000000000000@node setrpcent @subsection @code{setrpcent} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setsgent.texi000066400000000000000000000006761167105100700230650ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setsourcefilter.texi000066400000000000000000000007001167105100700244370ustar00rootroot00000000000000@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 all non-glibc platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setspent.texi000066400000000000000000000006111167105100700230630ustar00rootroot00000000000000@node setspent @subsection @code{setspent} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setstate_r.texi000066400000000000000000000006301167105100700233740ustar00rootroot00000000000000@node setstate_r @subsection @code{setstate_r} @findex setstate_r Gnulib module: random_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/settimeofday.texi000066400000000000000000000004411167105100700237140ustar00rootroot00000000000000@node settimeofday @subsection @code{settimeofday} @findex settimeofday Gnulib 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setttyent.texi000066400000000000000000000005251167105100700232650ustar00rootroot00000000000000@node setttyent @subsection @code{setttyent} @findex 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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setusershell.texi000066400000000000000000000006441167105100700237460ustar00rootroot00000000000000@node setusershell @subsection @code{setusershell} @findex setusershell Gnulib module: getusershell Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 4.3.2, IRIX 6.5, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is missing a declaration on some platforms: Solaris 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/setutent.texi000066400000000000000000000005271167105100700230770ustar00rootroot00000000000000@node setutent @subsection @code{setutent} @findex setutent Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/setxattr.texi000066400000000000000000000006671167105100700231070ustar00rootroot00000000000000@node setxattr @subsection @code{setxattr} @findex 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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sgetsgent.texi000066400000000000000000000007011167105100700232210ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sgetsgent_r.texi000066400000000000000000000007071167105100700235500ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sgetspent.texi000066400000000000000000000006631167105100700232410ustar00rootroot00000000000000@node sgetspent @subsection @code{sgetspent} @findex sgetspent 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sgetspent_r.texi000066400000000000000000000006711167105100700235610ustar00rootroot00000000000000@node sgetspent_r @subsection @code{sgetspent_r} @findex 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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sigandset.texi000066400000000000000000000006631167105100700232060ustar00rootroot00000000000000@node sigandset @subsection @code{sigandset} @findex sigandset 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sigblock.texi000066400000000000000000000004761167105100700230240ustar00rootroot00000000000000@node sigblock @subsection @code{sigblock} @findex sigblock Gnulib module: --- Portability problems fixed 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 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/siggetmask.texi000066400000000000000000000006571167105100700233660ustar00rootroot00000000000000@node siggetmask @subsection @code{siggetmask} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sigisemptyset.texi000066400000000000000000000006771167105100700241430ustar00rootroot00000000000000@node sigisemptyset @subsection @code{sigisemptyset} @findex sigisemptyset 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/significand.texi000066400000000000000000000005151167105100700234770ustar00rootroot00000000000000@node significand @subsection @code{significand} @findex significand Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/significandf.texi000066400000000000000000000005361167105100700236500ustar00rootroot00000000000000@node significandf @subsection @code{significandf} @findex significandf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/significandl.texi000066400000000000000000000006371167105100700236600ustar00rootroot00000000000000@node significandl @subsection @code{significandl} @findex significandl Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sigorset.texi000066400000000000000000000006601167105100700230610ustar00rootroot00000000000000@node sigorset @subsection @code{sigorset} @findex sigorset 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sigreturn.texi000066400000000000000000000005361167105100700232460ustar00rootroot00000000000000@node sigreturn @subsection @code{sigreturn} @findex 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: AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sigsetmask.texi000066400000000000000000000005041167105100700233710ustar00rootroot00000000000000@node sigsetmask @subsection @code{sigsetmask} @findex sigsetmask Gnulib module: --- Portability problems fixed 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 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sigstack.texi000066400000000000000000000005641167105100700230350ustar00rootroot00000000000000@node sigstack @subsection @code{sigstack} @findex sigstack Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sigvec.texi000066400000000000000000000005021167105100700224750ustar00rootroot00000000000000@node sigvec @subsection @code{sigvec} @findex 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 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sincos.texi000066400000000000000000000005641167105100700225230ustar00rootroot00000000000000@node sincos @subsection @code{sincos} @findex sincos Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/sincosf.texi000066400000000000000000000005671167105100700226740ustar00rootroot00000000000000@node sincosf @subsection @code{sincosf} @findex sincosf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/sincosl.texi000066400000000000000000000006051167105100700226730ustar00rootroot00000000000000@node sincosl @subsection @code{sincosl} @findex sincosl Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sprofil.texi000066400000000000000000000006351167105100700227020ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.11, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/srand48_r.texi000066400000000000000000000006201167105100700230220ustar00rootroot00000000000000@node srand48_r @subsection @code{srand48_r} @findex srand48_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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/srandom_r.texi000066400000000000000000000006251167105100700232070ustar00rootroot00000000000000@node srandom_r @subsection @code{srandom_r} @findex srandom_r Gnulib module: random_r Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/ssignal.texi000066400000000000000000000005421167105100700226610ustar00rootroot00000000000000@node ssignal @subsection @code{ssignal} @findex ssignal Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/statfs.texi000066400000000000000000000010341167105100700225220ustar00rootroot00000000000000@node statfs @subsection @code{statfs} @findex 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 9, Interix 3.5, BeOS. @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 MacOS X. @end itemize gnulib-20111211-stable/doc/glibc-functions/step.texi000066400000000000000000000006341167105100700221760ustar00rootroot00000000000000@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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/stime.texi000066400000000000000000000005171167105100700223440ustar00rootroot00000000000000@node stime @subsection @code{stime} @findex stime Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/strcasestr.texi000066400000000000000000000015611167105100700234200ustar00rootroot00000000000000@node strcasestr @subsection @code{strcasestr} @findex strcasestr 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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. @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 5.0, OpenBSD 4.0, Solaris 11 2010-11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/strchrnul.texi000066400000000000000000000010211167105100700232360ustar00rootroot00000000000000@node strchrnul @subsection @code{strchrnul} @findex strchrnul Gnulib module: strchrnul Portability problems fixed by Gnulib: @itemize @item This function is missing on many non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.7.8, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-functions/strfry.texi000066400000000000000000000006521167105100700225540ustar00rootroot00000000000000@node strfry @subsection @code{strfry} @findex strfry 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strptime_l.texi000066400000000000000000000006551167105100700234100ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strsep.texi000066400000000000000000000005101167105100700225340ustar00rootroot00000000000000@node strsep @subsection @code{strsep} @findex strsep Gnulib module: strsep Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/strtod_l.texi000066400000000000000000000006471167105100700230610ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strtof_l.texi000066400000000000000000000006471167105100700230630ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strtol_l.texi000066400000000000000000000006471167105100700230710ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strtold_l.texi000066400000000000000000000006521167105100700232310ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strtoll_l.texi000066400000000000000000000006521167105100700232410ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strtoq.texi000066400000000000000000000005321167105100700225540ustar00rootroot00000000000000@node strtoq @subsection @code{strtoq} @findex strtoq Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/strtoul_l.texi000066400000000000000000000006521167105100700232520ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strtoull_l.texi000066400000000000000000000006551167105100700234310ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/strtouq.texi000066400000000000000000000005351167105100700227440ustar00rootroot00000000000000@node strtouq @subsection @code{strtouq} @findex strtouq Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/strverscmp.texi000066400000000000000000000006751167105100700234400ustar00rootroot00000000000000@node strverscmp @subsection @code{strverscmp} @findex strverscmp Gnulib module: strverscmp Portability problems fixed by Gnulib: @itemize @item This function is missing on all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_exit.texi000066400000000000000000000005601167105100700230450ustar00rootroot00000000000000@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 X 10.5, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_fdset.texi000066400000000000000000000005251167105100700232020ustar00rootroot00000000000000@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, OSF/1 5.1, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_getreq.texi000066400000000000000000000004601167105100700233620ustar00rootroot00000000000000@node svc_getreq @subsection @code{svc_getreq} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_getreq_common.texi000066400000000000000000000005761167105100700247420ustar00rootroot00000000000000@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 X 10.5, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_getreq_poll.texi000066400000000000000000000005571167105100700244170ustar00rootroot00000000000000@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 X 10.5, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_getreqset.texi000066400000000000000000000004711167105100700241000ustar00rootroot00000000000000@node svc_getreqset @subsection @code{svc_getreqset} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_max_pollfd.texi000066400000000000000000000006301167105100700242170ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_pollfd.texi000066400000000000000000000006141167105100700233540ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_register.texi000066400000000000000000000004661167105100700237250ustar00rootroot00000000000000@node svc_register @subsection @code{svc_register} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_run.texi000066400000000000000000000004471167105100700227040ustar00rootroot00000000000000@node svc_run @subsection @code{svc_run} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_sendreply.texi000066400000000000000000000004711167105100700241020ustar00rootroot00000000000000@node svc_sendreply @subsection @code{svc_sendreply} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svc_unregister.texi000066400000000000000000000004741167105100700242670ustar00rootroot00000000000000@node svc_unregister @subsection @code{svc_unregister} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcerr_auth.texi000066400000000000000000000004631167105100700235500ustar00rootroot00000000000000@node svcerr_auth @subsection @code{svcerr_auth} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcerr_decode.texi000066400000000000000000000004711167105100700240310ustar00rootroot00000000000000@node svcerr_decode @subsection @code{svcerr_decode} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcerr_noproc.texi000066400000000000000000000004711167105100700241060ustar00rootroot00000000000000@node svcerr_noproc @subsection @code{svcerr_noproc} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcerr_noprog.texi000066400000000000000000000004711167105100700241120ustar00rootroot00000000000000@node svcerr_noprog @subsection @code{svcerr_noprog} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcerr_progvers.texi000066400000000000000000000004771167105100700244630ustar00rootroot00000000000000@node svcerr_progvers @subsection @code{svcerr_progvers} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcerr_systemerr.texi000066400000000000000000000005021167105100700246360ustar00rootroot00000000000000@node svcerr_systemerr @subsection @code{svcerr_systemerr} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcerr_weakauth.texi000066400000000000000000000004771167105100700244250ustar00rootroot00000000000000@node svcerr_weakauth @subsection @code{svcerr_weakauth} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcraw_create.texi000066400000000000000000000004711167105100700240520ustar00rootroot00000000000000@node svcraw_create @subsection @code{svcraw_create} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svctcp_create.texi000066400000000000000000000004711167105100700240470ustar00rootroot00000000000000@node svctcp_create @subsection @code{svctcp_create} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcudp_bufcreate.texi000066400000000000000000000005021167105100700245410ustar00rootroot00000000000000@node svcudp_bufcreate @subsection @code{svcudp_bufcreate} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcudp_create.texi000066400000000000000000000004711167105100700240510ustar00rootroot00000000000000@node svcudp_create @subsection @code{svcudp_create} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/svcunix_create.texi000066400000000000000000000006541167105100700242470ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/swapoff.texi000066400000000000000000000006151167105100700226670ustar00rootroot00000000000000@node swapoff @subsection @code{swapoff} @findex 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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/swapon.texi000066400000000000000000000005451167105100700225330ustar00rootroot00000000000000@node swapon @subsection @code{swapon} @findex 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 3.8, Minix 3.1.8, AIX 5.1, IRIX 6.5, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/syncfs.texi000066400000000000000000000006711167105100700225310ustar00rootroot00000000000000@node syncfs @subsection @code{syncfs} @findex 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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sys_errlist.texi000066400000000000000000000005331167105100700236030ustar00rootroot00000000000000@node sys_errlist @subsection @code{sys_errlist} @findex 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 X 10.5, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sys_nerr.texi000066400000000000000000000005221167105100700230630ustar00rootroot00000000000000@node sys_nerr @subsection @code{sys_nerr} @findex 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 X 10.5, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sys_siglist.texi000066400000000000000000000005731167105100700236010ustar00rootroot00000000000000@node sys_siglist @subsection @code{sys_siglist} @findex sys_siglist 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 X 10.5, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/syscall.texi000066400000000000000000000004601167105100700226720ustar00rootroot00000000000000@node syscall @subsection @code{syscall} @findex syscall Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sysctl.texi000066400000000000000000000005551167105100700225460ustar00rootroot00000000000000@node sysctl @subsection @code{sysctl} @findex sysctl Gnulib module: --- Portability problems fixed 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 5.3, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sysinfo.texi000066400000000000000000000005611167105100700227140ustar00rootroot00000000000000@node sysinfo @subsection @code{sysinfo} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/sysv_signal.texi000066400000000000000000000006521167105100700235640ustar00rootroot00000000000000@node sysv_signal @subsection @code{sysv_signal} @findex sysv_signal Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/tdestroy.texi000066400000000000000000000006371167105100700231030ustar00rootroot00000000000000@node tdestroy @subsection @code{tdestroy} @findex tdestroy Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/textdomain.texi000066400000000000000000000006171167105100700234000ustar00rootroot00000000000000@node textdomain @subsection @code{textdomain} @findex textdomain Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/timegm.texi000066400000000000000000000005331167105100700225030ustar00rootroot00000000000000@node timegm @subsection @code{timegm} @findex timegm 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/timelocal.texi000066400000000000000000000005331167105100700231720ustar00rootroot00000000000000@node timelocal @subsection @code{timelocal} @findex timelocal Gnulib 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/tmpnam_r.texi000066400000000000000000000006231167105100700230360ustar00rootroot00000000000000@node tmpnam_r @subsection @code{tmpnam_r} @findex tmpnam_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 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ttyslot.texi000066400000000000000000000004221167105100700227400ustar00rootroot00000000000000@node ttyslot @subsection @code{ttyslot} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ulckpwdf.texi000066400000000000000000000005771167105100700230500ustar00rootroot00000000000000@node ulckpwdf @subsection @code{ulckpwdf} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/umount.texi000066400000000000000000000005311167105100700225460ustar00rootroot00000000000000@node umount @subsection @code{umount} @findex umount Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/umount2.texi000066400000000000000000000006231167105100700226320ustar00rootroot00000000000000@node umount2 @subsection @code{umount2} @findex umount2 Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/updwtmp.texi000066400000000000000000000006001167105100700227140ustar00rootroot00000000000000@node updwtmp @subsection @code{updwtmp} @findex updwtmp Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, OSF/1 5.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/updwtmpx.texi000066400000000000000000000006031167105100700231070ustar00rootroot00000000000000@node updwtmpx @subsection @code{updwtmpx} @findex 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 X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/user2netname.texi000066400000000000000000000005521167105100700236320ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ustat.texi000066400000000000000000000005531167105100700223630ustar00rootroot00000000000000@node ustat @subsection @code{ustat} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/utmpname.texi000066400000000000000000000005271167105100700230520ustar00rootroot00000000000000@node utmpname @subsection @code{utmpname} @findex utmpname Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/utmpxname.texi000066400000000000000000000005701167105100700232400ustar00rootroot00000000000000@node utmpxname @subsection @code{utmpxname} @findex utmpxname Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.4, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/valloc.texi000066400000000000000000000004431167105100700225010ustar00rootroot00000000000000@node valloc @subsection @code{valloc} @findex valloc Gnulib module: --- Portability problems fixed 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, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/vasprintf.texi000066400000000000000000000041211167105100700232320ustar00rootroot00000000000000@node vasprintf @subsection @code{vasprintf} @findex vasprintf 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5. @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, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: Solaris 11 2010-11. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, Solaris 11 2010-11, Cygwin 1.5.x, BeOS. @item This function does not support the @samp{F} directive on some platforms: NetBSD 3.0, Cygwin 1.5.x, BeOS. @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 2010-11. @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, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, Solaris 11 2010-11, Cygwin 1.5.x. @item This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: BeOS. @item This function can crash in out-of-memory conditions on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-functions/verr.texi000066400000000000000000000004751167105100700222040ustar00rootroot00000000000000@node verr @subsection @code{verr} @findex verr Gnulib 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/verrx.texi000066400000000000000000000005001167105100700223610ustar00rootroot00000000000000@node verrx @subsection @code{verrx} @findex verrx Gnulib 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/versionsort.texi000066400000000000000000000006711167105100700236210ustar00rootroot00000000000000@node versionsort @subsection @code{versionsort} @findex versionsort 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/vhangup.texi000066400000000000000000000005641167105100700226750ustar00rootroot00000000000000@node vhangup @subsection @code{vhangup} @findex 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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, OSF/1 5.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/vlimit.texi000066400000000000000000000006301167105100700225230ustar00rootroot00000000000000@node vlimit @subsection @code{vlimit} @findex vlimit Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/vm86.texi000066400000000000000000000006441167105100700220240ustar00rootroot00000000000000@node vm86 @subsection @code{vm86} @findex vm86 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/vsyslog.texi000066400000000000000000000004751167105100700227340ustar00rootroot00000000000000@node vsyslog @subsection @code{vsyslog} @findex vsyslog Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/vtimes.texi000066400000000000000000000006521167105100700225320ustar00rootroot00000000000000@node vtimes @subsection @code{vtimes} @findex vtimes 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/vwarn.texi000066400000000000000000000005001167105100700223500ustar00rootroot00000000000000@node vwarn @subsection @code{vwarn} @findex vwarn Gnulib 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/vwarnx.texi000066400000000000000000000005031167105100700225430ustar00rootroot00000000000000@node vwarnx @subsection @code{vwarnx} @findex vwarnx Gnulib 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/wait3.texi000066400000000000000000000004461167105100700222530ustar00rootroot00000000000000@node wait3 @subsection @code{wait3} @findex wait3 Gnulib module: --- Portability problems fixed 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, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/wait4.texi000066400000000000000000000005101167105100700222440ustar00rootroot00000000000000@node wait4 @subsection @code{wait4} @findex wait4 Gnulib module: --- Portability problems fixed 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 4.3.2, HP-UX 11.11, IRIX 6.5, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/warn.texi000066400000000000000000000004751167105100700221750ustar00rootroot00000000000000@node warn @subsection @code{warn} @findex warn Gnulib 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/warnx.texi000066400000000000000000000005001167105100700223520ustar00rootroot00000000000000@node warnx @subsection @code{warnx} @findex warnx Gnulib 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcschrnul.texi000066400000000000000000000010601167105100700232250ustar00rootroot00000000000000@node wcschrnul @subsection @code{wcschrnul} @findex wcschrnul 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcsftime_l.texi000066400000000000000000000010521167105100700233520ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstod_l.texi000066400000000000000000000010441167105100700230350ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstof_l.texi000066400000000000000000000010441167105100700230370ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstol_l.texi000066400000000000000000000010441167105100700230450ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstold_l.texi000066400000000000000000000010471167105100700232140ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstoll_l.texi000066400000000000000000000010471167105100700232240ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstoq.texi000066400000000000000000000010471167105100700225420ustar00rootroot00000000000000@node wcstoq @subsection @code{wcstoq} @findex wcstoq 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstoul_l.texi000066400000000000000000000010471167105100700232350ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstoull_l.texi000066400000000000000000000010521167105100700234050ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wcstouq.texi000066400000000000000000000010521167105100700227230ustar00rootroot00000000000000@node wcstouq @subsection @code{wcstouq} @findex wcstouq 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/wmempcpy.texi000066400000000000000000000010551167105100700230620ustar00rootroot00000000000000@node wmempcpy @subsection @code{wmempcpy} @findex wmempcpy 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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_array.texi000066400000000000000000000004631167105100700232160ustar00rootroot00000000000000@node xdr_array @subsection @code{xdr_array} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_authunix_parms.texi000066400000000000000000000005461167105100700251510ustar00rootroot00000000000000@node xdr_authunix_parms @subsection @code{xdr_authunix_parms} @findex 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 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_bool.texi000066400000000000000000000004601167105100700230300ustar00rootroot00000000000000@node xdr_bool @subsection @code{xdr_bool} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_bytes.texi000066400000000000000000000004631167105100700232260ustar00rootroot00000000000000@node xdr_bytes @subsection @code{xdr_bytes} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_callhdr.texi000066400000000000000000000004631167105100700235110ustar00rootroot00000000000000@node xdr_callhdr @subsection @code{xdr_callhdr} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_callmsg.texi000066400000000000000000000004631167105100700235220ustar00rootroot00000000000000@node xdr_callmsg @subsection @code{xdr_callmsg} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_cback_data.texi000066400000000000000000000006461167105100700241370ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_char.texi000066400000000000000000000004601167105100700230120ustar00rootroot00000000000000@node xdr_char @subsection @code{xdr_char} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_cryptkeyarg.texi000066400000000000000000000005751167105100700244500ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_cryptkeyarg2.texi000066400000000000000000000006131167105100700245230ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_cryptkeyres.texi000066400000000000000000000005751167105100700244700ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_des_block.texi000066400000000000000000000004711167105100700240240ustar00rootroot00000000000000@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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_domainname.texi000066400000000000000000000006051167105100700242060ustar00rootroot00000000000000@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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_double.texi000066400000000000000000000004661167105100700233550ustar00rootroot00000000000000@node xdr_double @subsection @code{xdr_double} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_enum.texi000066400000000000000000000004601167105100700230410ustar00rootroot00000000000000@node xdr_enum @subsection @code{xdr_enum} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_float.texi000066400000000000000000000004631167105100700232050ustar00rootroot00000000000000@node xdr_float @subsection @code{xdr_float} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_free.texi000066400000000000000000000004601167105100700230160ustar00rootroot00000000000000@node xdr_free @subsection @code{xdr_free} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_getcredres.texi000066400000000000000000000005721167105100700242300ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_hyper.texi000066400000000000000000000005331167105100700232250ustar00rootroot00000000000000@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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_int.texi000066400000000000000000000004551167105100700226730ustar00rootroot00000000000000@node xdr_int @subsection @code{xdr_int} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_int16_t.texi000066400000000000000000000005741167105100700233670ustar00rootroot00000000000000@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: MacOS X 10.3, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_int32_t.texi000066400000000000000000000005741167105100700233650ustar00rootroot00000000000000@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: MacOS X 10.3, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_int64_t.texi000066400000000000000000000006111167105100700233620ustar00rootroot00000000000000@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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_int8_t.texi000066400000000000000000000006371167105100700233100ustar00rootroot00000000000000@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 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, OSF/1 5.1, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_key_netstarg.texi000066400000000000000000000006131167105100700245740ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_key_netstres.texi000066400000000000000000000006131167105100700246140ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_keybuf.texi000066400000000000000000000005561167105100700233700ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_keydat.texi000066400000000000000000000006051167105100700233570ustar00rootroot00000000000000@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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_keystatus.texi000066400000000000000000000005671167105100700241410ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_long.texi000066400000000000000000000004601167105100700230340ustar00rootroot00000000000000@node xdr_long @subsection @code{xdr_long} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_longlong_t.texi000066400000000000000000000005521167105100700242410ustar00rootroot00000000000000@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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_mapname.texi000066400000000000000000000005741167105100700235210ustar00rootroot00000000000000@node xdr_mapname @subsection @code{xdr_mapname} @findex xdr_mapname Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_netnamestr.texi000066400000000000000000000005721167105100700242610ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_netobj.texi000066400000000000000000000004661167105100700233640ustar00rootroot00000000000000@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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_obj_p.texi000066400000000000000000000006271167105100700231730ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_opaque.texi000066400000000000000000000004661167105100700233750ustar00rootroot00000000000000@node xdr_opaque @subsection @code{xdr_opaque} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_opaque_auth.texi000066400000000000000000000004771167105100700244200ustar00rootroot00000000000000@node xdr_opaque_auth @subsection @code{xdr_opaque_auth} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_peername.texi000066400000000000000000000005771167105100700237020ustar00rootroot00000000000000@node xdr_peername @subsection @code{xdr_peername} @findex xdr_peername Gnulib module: --- Portability problems fixed 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_pmap.texi000066400000000000000000000004521167105100700230330ustar00rootroot00000000000000@node xdr_pmap @subsection @code{xdr_pmap} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_pmaplist.texi000066400000000000000000000004661167105100700237340ustar00rootroot00000000000000@node xdr_pmaplist @subsection @code{xdr_pmaplist} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_pointer.texi000066400000000000000000000004711167105100700235570ustar00rootroot00000000000000@node xdr_pointer @subsection @code{xdr_pointer} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_quad_t.texi000066400000000000000000000006661167105100700233620ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_reference.texi000066400000000000000000000004771167105100700240430ustar00rootroot00000000000000@node xdr_reference @subsection @code{xdr_reference} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_replymsg.texi000066400000000000000000000004661167105100700237450ustar00rootroot00000000000000@node xdr_replymsg @subsection @code{xdr_replymsg} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_rmtcall_args.texi000066400000000000000000000005401167105100700245460ustar00rootroot00000000000000@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 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_rmtcallres.texi000066400000000000000000000004741167105100700242520ustar00rootroot00000000000000@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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_short.texi000066400000000000000000000004631167105100700232370ustar00rootroot00000000000000@node xdr_short @subsection @code{xdr_short} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_sizeof.texi000066400000000000000000000006141167105100700233750ustar00rootroot00000000000000@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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_string.texi000066400000000000000000000004661167105100700234110ustar00rootroot00000000000000@node xdr_string @subsection @code{xdr_string} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_u_char.texi000066400000000000000000000004661167105100700233440ustar00rootroot00000000000000@node xdr_u_char @subsection @code{xdr_u_char} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_u_hyper.texi000066400000000000000000000005531167105100700235530ustar00rootroot00000000000000@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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_u_int.texi000066400000000000000000000004631167105100700232160ustar00rootroot00000000000000@node xdr_u_int @subsection @code{xdr_u_int} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_u_long.texi000066400000000000000000000004661167105100700233660ustar00rootroot00000000000000@node xdr_u_long @subsection @code{xdr_u_long} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_u_longlong_t.texi000066400000000000000000000005601167105100700245640ustar00rootroot00000000000000@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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_u_quad_t.texi000066400000000000000000000006741167105100700237050ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_u_short.texi000066400000000000000000000004711167105100700235620ustar00rootroot00000000000000@node xdr_u_short @subsection @code{xdr_u_short} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_uint16_t.texi000066400000000000000000000007701167105100700235520ustar00rootroot00000000000000@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 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, OSF/1 5.1, Cygwin 1.7.4, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is not declared in the header on some platforms: Cygwin 1.7.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_uint32_t.texi000066400000000000000000000007621167105100700235510ustar00rootroot00000000000000@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 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is not declared in the header on some platforms: Cygwin 1.7.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_uint64_t.texi000066400000000000000000000007621167105100700235560ustar00rootroot00000000000000@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 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is not declared in the header on some platforms: Cygwin 1.7.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_uint8_t.texi000066400000000000000000000007571167105100700235000ustar00rootroot00000000000000@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 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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is not declared in the header on some platforms: Cygwin 1.7.5. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_union.texi000066400000000000000000000004631167105100700232300ustar00rootroot00000000000000@node xdr_union @subsection @code{xdr_union} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_unixcred.texi000066400000000000000000000005641167105100700237230ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_valdat.texi000066400000000000000000000006051167105100700233510ustar00rootroot00000000000000@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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_vector.texi000066400000000000000000000004661167105100700234050ustar00rootroot00000000000000@node xdr_vector @subsection @code{xdr_vector} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_void.texi000066400000000000000000000004601167105100700230360ustar00rootroot00000000000000@node xdr_void @subsection @code{xdr_void} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_wrapstring.texi000066400000000000000000000005021167105100700242720ustar00rootroot00000000000000@node xdr_wrapstring @subsection @code{xdr_wrapstring} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_yp_buf.texi000066400000000000000000000005611167105100700233630ustar00rootroot00000000000000@node xdr_yp_buf @subsection @code{xdr_yp_buf} @findex xdr_yp_buf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypall.texi000066400000000000000000000005421167105100700232170ustar00rootroot00000000000000@node xdr_ypall @subsection @code{xdr_ypall} @findex xdr_ypall Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypbind_binding.texi000066400000000000000000000006351167105100700250600ustar00rootroot00000000000000@node xdr_ypbind_binding @subsection @code{xdr_ypbind_binding} @findex xdr_ypbind_binding Gnulib 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypbind_resp.texi000066400000000000000000000005141167105100700244130ustar00rootroot00000000000000@node xdr_ypbind_resp @subsection @code{xdr_ypbind_resp} @findex xdr_ypbind_resp Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypbind_resptype.texi000066400000000000000000000006141167105100700253160ustar00rootroot00000000000000@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, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypbind_setdom.texi000066400000000000000000000005221167105100700247340ustar00rootroot00000000000000@node xdr_ypbind_setdom @subsection @code{xdr_ypbind_setdom} @findex xdr_ypbind_setdom Gnulib module: --- Portability problems fixed 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypdelete_args.texi000066400000000000000000000006061167105100700247260ustar00rootroot00000000000000@node xdr_ypdelete_args @subsection @code{xdr_ypdelete_args} @findex xdr_ypdelete_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: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypmap_parms.texi000066400000000000000000000005471167105100700244330ustar00rootroot00000000000000@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 X 10.5, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypmaplist.texi000066400000000000000000000005321167105100700241170ustar00rootroot00000000000000@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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_yppush_status.texi000066400000000000000000000006651167105100700250370ustar00rootroot00000000000000@node xdr_yppush_status @subsection @code{xdr_yppush_status} @findex xdr_yppush_status Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_yppushresp_xfr.texi000066400000000000000000000005601167105100700251770ustar00rootroot00000000000000@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 X 10.5, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypreq_key.texi000066400000000000000000000005061167105100700241060ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypreq_nokey.texi000066400000000000000000000005141167105100700244420ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypreq_xfr.texi000066400000000000000000000005411167105100700241140ustar00rootroot00000000000000@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 X 10.5, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypresp_all.texi000066400000000000000000000006211167105100700242460ustar00rootroot00000000000000@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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypresp_key_val.texi000066400000000000000000000005251167105100700251330ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypresp_maplist.texi000066400000000000000000000005251167105100700251520ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypresp_master.texi000066400000000000000000000005221167105100700247710ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypresp_order.texi000066400000000000000000000005171167105100700246150ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypresp_val.texi000066400000000000000000000005111167105100700242560ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypresp_xfr.texi000066400000000000000000000006541167105100700243030ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypstat.texi000066400000000000000000000006051167105100700234220ustar00rootroot00000000000000@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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypupdate_args.texi000066400000000000000000000006061167105100700247460ustar00rootroot00000000000000@node xdr_ypupdate_args @subsection @code{xdr_ypupdate_args} @findex xdr_ypupdate_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: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdr_ypxfrstat.texi000066400000000000000000000006511167105100700241430ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdrmem_create.texi000066400000000000000000000004771167105100700240470ustar00rootroot00000000000000@node xdrmem_create @subsection @code{xdrmem_create} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdrrec_create.texi000066400000000000000000000004771167105100700240420ustar00rootroot00000000000000@node xdrrec_create @subsection @code{xdrrec_create} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdrrec_endofrecord.texi000066400000000000000000000005161167105100700250630ustar00rootroot00000000000000@node xdrrec_endofrecord @subsection @code{xdrrec_endofrecord} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdrrec_eof.texi000066400000000000000000000004661167105100700233460ustar00rootroot00000000000000@node xdrrec_eof @subsection @code{xdrrec_eof} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdrrec_skiprecord.texi000066400000000000000000000005131167105100700247330ustar00rootroot00000000000000@node xdrrec_skiprecord @subsection @code{xdrrec_skiprecord} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xdrstdio_create.texi000066400000000000000000000005051167105100700244030ustar00rootroot00000000000000@node xdrstdio_create @subsection @code{xdrstdio_create} @findex 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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xprt_register.texi000066400000000000000000000004711167105100700241230ustar00rootroot00000000000000@node xprt_register @subsection @code{xprt_register} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/xprt_unregister.texi000066400000000000000000000004771167105100700244740ustar00rootroot00000000000000@node xprt_unregister @subsection @code{xprt_unregister} @findex 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, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/y0f.texi000066400000000000000000000004701167105100700217170ustar00rootroot00000000000000@node y0f @subsection @code{y0f} @findex y0f Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/y0l.texi000066400000000000000000000005711167105100700217270ustar00rootroot00000000000000@node y0l @subsection @code{y0l} @findex y0l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/y1f.texi000066400000000000000000000004701167105100700217200ustar00rootroot00000000000000@node y1f @subsection @code{y1f} @findex y1f Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/y1l.texi000066400000000000000000000005711167105100700217300ustar00rootroot00000000000000@node y1l @subsection @code{y1l} @findex y1l Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ynf.texi000066400000000000000000000004701167105100700220150ustar00rootroot00000000000000@node ynf @subsection @code{ynf} @findex ynf Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-functions/ynl.texi000066400000000000000000000005711167105100700220250ustar00rootroot00000000000000@node ynl @subsection @code{ynl} @findex ynl Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_all.texi000066400000000000000000000004611167105100700225010ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_bind.texi000066400000000000000000000004641167105100700226500ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_first.texi000066400000000000000000000004671167105100700230660ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_get_default_domain.texi000066400000000000000000000005501167105100700255420ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_master.texi000066400000000000000000000004721167105100700232260ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_match.texi000066400000000000000000000004671167105100700230330ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_next.texi000066400000000000000000000004641167105100700227120ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_order.texi000066400000000000000000000004671167105100700230520ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_unbind.texi000066400000000000000000000004721167105100700232120ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yp_update.texi000066400000000000000000000005711167105100700232150ustar00rootroot00000000000000@node yp_update @subsection @code{yp_update} @findex yp_update Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ypbinderr_string.texi000066400000000000000000000006621167105100700246100ustar00rootroot00000000000000@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 X 10.5, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/yperr_string.texi000066400000000000000000000005031167105100700237450ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-functions/ypprot_err.texi000066400000000000000000000004751167105100700234330ustar00rootroot00000000000000@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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/000077500000000000000000000000001167105100700177305ustar00rootroot00000000000000gnulib-20111211-stable/doc/glibc-headers/a.out.texi000066400000000000000000000010611167105100700216470ustar00rootroot00000000000000@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 X 10.5, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item This header file is useless because most executables and object files are in ELF format on some platforms: glibc 2.3.6, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8. @end itemize gnulib-20111211-stable/doc/glibc-headers/aliases.texi000066400000000000000000000013651167105100700222510ustar00rootroot00000000000000@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{http://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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/alloca.texi000066400000000000000000000013071167105100700220570ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/Variable-Size-Automatic.html}, @end ifnotinfo @item @uref{http://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 5.0, OpenBSD 3.8, AIX 4.3.2, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-headers/ar.texi000066400000000000000000000006421167105100700212270ustar00rootroot00000000000000@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 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/argp.texi000066400000000000000000000011551167105100700215560ustar00rootroot00000000000000@node argp.h @section @file{argp.h} Documentation: @itemize @item @ifinfo @ref{Argp,,Parsing Program Options with Argp,libc}, @end ifinfo @ifnotinfo @url{http://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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-headers/argz.texi000066400000000000000000000013511167105100700215660ustar00rootroot00000000000000@node argz.h @section @file{argz.h} Documentation: @itemize @item @ifinfo @ref{Argz Functions,,,libc}, @end ifinfo @ifnotinfo @url{http://www.gnu.org/software/libc/manual/html_node/Argz-Functions.html}, @end ifnotinfo @item @uref{http://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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item The argz functions do not work on some platforms: Cygwin. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-headers/byteswap.texi000066400000000000000000000007711167105100700224660ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-headers/crypt.texi000066400000000000000000000024011167105100700217610ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/crypt.html}, @url{http://www.gnu.org/software/libc/manual/html_node/DES-Encryption.html}, @end ifnotinfo @item @uref{http://www.kernel.org/doc/man-pages/online/pages/man3/crypt.3.html,,man crypt}, @uref{http://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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, Interix 3.5, BeOS. @item The functions @code{crypt}, @code{setkey}, @code{encrypt} are missing on some platforms: HP-UX 11, OSF/1 5.1. @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 2010-11, Cygwin. @end itemize gnulib-20111211-stable/doc/glibc-headers/endian.texi000066400000000000000000000010731167105100700220620ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-headers/envz.texi000066400000000000000000000012501167105100700216030ustar00rootroot00000000000000@node envz.h @section @file{envz.h} Documentation: @itemize @item @ifinfo @ref{Envz Functions,,,libc}, @end ifinfo @ifnotinfo @url{http://www.gnu.org/software/libc/manual/html_node/Envz-Functions.html}, @end ifnotinfo @item @uref{http://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 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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/err.texi000066400000000000000000000013221167105100700214110ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{http://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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/error.texi000066400000000000000000000016401167105100700217550ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/Error-Messages.html}, @end ifnotinfo @item @uref{http://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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, Interix 3.5, BeOS. @item This header file contains unrelated definitions on some platforms: MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-headers/execinfo.texi000066400000000000000000000014231167105100700224230ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/Backtraces.html}, @end ifnotinfo @item @uref{http://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 header file is missing on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/fpu_control.texi000066400000000000000000000011341167105100700231540ustar00rootroot00000000000000@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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/fstab.texi000066400000000000000000000016021167105100700217210ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/fstab.html}, @end ifnotinfo @item @uref{http://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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item The macro @code{_PATH_FSTAB} is missing on some platforms: AIX 5.1, HP-UX 11. @end itemize gnulib-20111211-stable/doc/glibc-headers/fts.texi000066400000000000000000000011661167105100700214230ustar00rootroot00000000000000@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{http://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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/getopt.texi000066400000000000000000000024541167105100700221320ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/Getopt.html}, @end ifnotinfo @item @uref{http://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 9, Interix 3.5. @item The function @code{getopt_long} is missing on some platforms: IRIX 6.5, OSF/1 5.1, Solaris 9. @item The function @code{getopt_long_only} is missing on some platforms: MacOS X 10.3, FreeBSD 5.2.1, NetBSD 5.0, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw. @item The method to reset options is incompatible on some platforms: FreeBSD 6.0, NetBSD 5.0(?), OpenBSD 3.8, 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-20111211-stable/doc/glibc-headers/gshadow.texi000066400000000000000000000012531167105100700222600ustar00rootroot00000000000000@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 X 10.5, FreeBSD 6.4, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/ieee754.texi000066400000000000000000000010171167105100700217710ustar00rootroot00000000000000@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 @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/ifaddrs.texi000066400000000000000000000011011167105100700222300ustar00rootroot00000000000000@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{http://ecos.sourceware.org/docs-latest/ref/net-common-tcpip-manpages-getifaddrs.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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/libintl.texi000066400000000000000000000024001167105100700222540ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/Message-catalogs-with-gettext.html}, @end ifnotinfo @item @ifinfo @ref{gettext,,,gettext}, @end ifinfo @ifnotinfo @url{http://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 X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-headers/mcheck.texi000066400000000000000000000014571167105100700220640ustar00rootroot00000000000000@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{http://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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/glibc-headers/mntent.texi000066400000000000000000000021271167105100700221320ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/mtab.html}, @end ifnotinfo @item @uref{http://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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9, Interix 3.5, BeOS. @item The function @code{getmntent_r} is missing on all non-glibc platforms: AIX 5.1, HP-UX 11, IRIX 6.5, Cygwin. @end itemize Gnulib module @code{mountlist} provides a higher-level abstraction. gnulib-20111211-stable/doc/glibc-headers/obstack.texi000066400000000000000000000011161167105100700222500ustar00rootroot00000000000000@node obstack.h @section @file{obstack.h} Documentation: @itemize @item @ifinfo @ref{Obstacks,,,libc}, @end ifinfo @ifnotinfo @url{http://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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-headers/paths.texi000066400000000000000000000006171167105100700217460ustar00rootroot00000000000000@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 9, BeOS. @item The set of @code{_PATH_*} macros is platform dependent. @end itemize gnulib-20111211-stable/doc/glibc-headers/printf.texi000066400000000000000000000015771167105100700221370ustar00rootroot00000000000000@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{http://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: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize gnulib-20111211-stable/doc/glibc-headers/pty.texi000066400000000000000000000017231167105100700214420ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/Pseudo_002dTerminal-Pairs.html}, @end ifnotinfo @item @uref{http://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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8. @item This header file is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 9. @end itemize gnulib-20111211-stable/doc/glibc-headers/resolv.texi000066400000000000000000000016171167105100700221420ustar00rootroot00000000000000@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{fp_nquery}, @code{fp_query}, @code{hostalias}, @code{p_query}, @code{res_close}, @code{res_init}, @code{res_isourserver}, @code{res_mkquery}, @code{res_query}, @code{res_querydomain}, @code{res_search}, @code{res_send}. Documentation: @itemize @item @uref{http://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, mingw, MSVC 9, Interix 3.5, BeOS. @item The functions are missing on some platforms: HP-UX 11. @end itemize gnulib-20111211-stable/doc/glibc-headers/shadow.texi000066400000000000000000000021131167105100700221050ustar00rootroot00000000000000@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{http://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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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 2010-11. @end itemize gnulib-20111211-stable/doc/glibc-headers/sys_ioctl.texi000066400000000000000000000012611167105100700226330ustar00rootroot00000000000000@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{http://www.gnu.org/software/libc/manual/html_node/IOCTLs.html}, @end ifnotinfo @item @uref{http://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 9. @item This header file does not declare the @code{ioctl} function on some platforms: AIX 5.1, Solaris 11 2010-11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize gnulib-20111211-stable/doc/glibc-headers/sysexits.texi000066400000000000000000000006341167105100700225210ustar00rootroot00000000000000@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 9, Interix 3.5, BeOS. @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-20111211-stable/doc/glibc-headers/ttyent.texi000066400000000000000000000011251167105100700221510ustar00rootroot00000000000000@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{http://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 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/gnu-oids.texi000066400000000000000000000036511167105100700176640ustar00rootroot00000000000000@c This table of OID's is included in the GNU Coding Standards. @c @c Copyright 2008, 2009, 2010 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 http://www.alvestrand.no/objectid/ (except it gets an internal @c server error, so never mind) @c (Our page is http://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 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 gnulib-20111211-stable/doc/gnulib-intro.texi000066400000000000000000000460261167105100700205530ustar00rootroot00000000000000@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 C99, POSIX:2001) 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. As of 2011, the list of supported platforms is the following: @itemize @item glibc systems. With glibc 2.8 or newer, they are frequently tested. With glibc 2.3 or newer, they are occasionally tested. @item MacOS X. In versions 10.5 and 10.6, it's frequently tested. In version 10.4, it's rarely tested. @item FreeBSD 6.0 or newer is occasionally tested. FreeBSD 5.x is rarely tested. @item NetBSD 5.0 or newer is occasionally tested. NetBSD 3.0 or newer is rarely tested. @item OpenBSD 4.0 or newer is occasionally tested. OpenBSD 3.8 or newer is rarely tested. @item AIX 6.1 or newer is occasionally tested. AIX 5.1 or newer is rarely tested. @item HP-UX 11.11 or newer is occasionally tested. HP-UX 11.00 is rarely tested. HP-UX 10.20 is rarely tested and low priority. @item IRIX 6.5 is occasionally tested. IRIX 5.3 is rarely tested and low priority. @item OSF/1 5.1 is occasionally tested. OSF/1 4.0 is rarely tested and low priority. @item Solaris 8 and newer are occasionally tested. Solaris 7 is rarely tested. Solaris 2.6 and older are rarely tested and low priority. @item Cygwin 1.7.x is frequently tested. Cygwin 1.5.x is occasionally tested. @item mingw is frequently 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. @item Native Windows, with MSVC as compiler, is rarely tested and low priority. @item mingw in 64-bit mode is not tested and low priority so far. @item Interix 6.1 is rarely tested, and requires the @code{suacomp} library (@url{http://sourceforge.net/projects/suacomp/}) in version 0.6.8 or newer. Interix 3.5 is not tested. @item Haiku is rarely tested, BeOS is not tested and low priority. @item uClibc on Linux is rarely tested. @item QNX is not tested and low priority. @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. 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. @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 Woe32 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 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. The source files always say "GPL", but the real license specification is in the module description file. 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). More precisely, the license specification in the module description file applies to the files in @file{lib/} and @file{build-aux/}. Different licenses apply to files in special directories: @table @file @item modules/ Module description files are under this copyright: @quotation Copyright @copyright{} 200X-200Y 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{} 200X-200Y 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-200Y 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 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 replace the GPL header with an LGPL header while copying the source files to your package. 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 for a "License: LGPL" information in the corresponding module description. @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. Gnulib is available in two qualities: @itemize @item There is the newest version of Gnulib from the Git repository. The source tree can also be fetched from a read-only CVS that mirrors the Git repository. @item We also make stable releases every two months, at @url{http://erislabs.net/ianb/projects/gnulib/}. @end itemize If you are willing to report an occasional regression, we recommend to use the newest version always, except in periods of major changes. Most Gnulib users do this. If you prefer stable releases, please use the newest stable release. @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-20111211-stable/doc/gnulib-tool.texi000066400000000000000000000760561167105100700204030ustar00rootroot00000000000000@node Invoking gnulib-tool @chapter Invoking gnulib-tool @c Copyright (C) 2005-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. @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. * 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 three 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{http://www.gnu.org/software/gnulib/MODULES.html}. @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 and Automake among your build tools. Note that 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. But when you use Gnulib, Automake will be used at least in a subdirectory of your project. 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 C89 and C99 (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 If you are using @code{AC_PROG_CC_STDC}, the macro @code{gl_EARLY} must be called after it, like this: @example ... AC_PROG_CC AC_PROG_CC_STDC 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 pre-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 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 solution is therefore: @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{http://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. Then, after @code{gettextize}, invoke @code{gnulib-tool}. @item When a script of yours run @code{autopoint}, invoke @code{gnulib-tool} afterwards. @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}. @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{http://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{.cvsignore}. 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{.cvsignore} 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 -- git://git.sv.gnu.org/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-20111211-stable/doc/gnulib.texi000066400000000000000000005433601167105100700174250ustar00rootroot00000000000000\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename gnulib.info @settitle GNU Gnulib @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-2011 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 @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 * Introduction:: * 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. * Particular Modules:: Documentation of individual modules. * Regular expressions:: The regex module. * 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 Introduction @chapter Introduction Gnulib is a source code library. It provides basic functionalities to programs and libraries. Currently (as of October 2006) more than 30 packages make use of Gnulib. Resources: @itemize @item Gnulib is hosted at Savannah: @url{http://savannah.gnu.org/projects/gnulib}. Get the sources through Git or CVS from there. @item The Gnulib home page: @url{http://www.gnu.org/software/gnulib/}. @end itemize @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:: * 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 C89 and C99 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, OSF/1, 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 2010), half of gnulib uses the first practice, nearly half 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} implicity 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 @item License This field specifies the license that governs the source code parts of this module. See @ref{Copyright} for details. @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 using @code{AC_LIBOBJ} (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 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 values of @code{EXEEXT} and of @code{srcdir}, from Autoconf and Automake, 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 @samp{--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 @samp{--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 @samp{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 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:: * A C++ namespace for gnulib:: A different way of using Gnulib in C++ * Library version handling:: * Windows sockets:: * Libtool and Windows:: * License Texinfo sources:: * Build robot for gnulib:: @end menu @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. @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 @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} 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} and @code{gnulib-tool --create-megatestdir} 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. @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{} 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{} and use it in a compilation unit that does not include @code{}, 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. @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 @node Windows sockets @section Windows sockets There are several issues when building applications that should work under Windows. The most problematic part is for applications that use sockets. Hopefully, we can add helpful notes to this section that will help you port your application to Windows using gnulib. @subsection Getaddrinfo and WINVER This was written for the getaddrinfo module, but may be applicable to other functions too. The getaddrinfo function exists in ws2tcpip.h and -lws2_32 on Windows XP. The function declaration is present if @code{WINVER >= 0x0501}. Windows 2000 does not have getaddrinfo in its @file{WS2_32.DLL}. Thus, if you want to assume Windows XP or later, you can add AC_DEFINE(WINVER, 0x0501) to avoid compiling the (partial) 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 getaddrinfo function available, and use it when available. @node Libtool and Windows @section Libtool and Windows If you want it to be possible to cross-compile your program to MinGW and you use Libtool, you need to put: @example AC_LIBTOOL_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 @node License Texinfo sources @section License Texinfo sources Gnulib provides copies of the GNU GPL, GNU LGPL, and GNU FDL licenses in Texinfo form. (The master location is @url{http://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. @node Build robot for gnulib @section Build robot for gnulib To simplify testing on a wide set of platforms, gnulib is built on many platforms every day and the results are uploaded to: @url{http://autobuild.josefsson.org/gnulib/} If you wish to help the gnulib development effort with build logs for your favorite platform, you may perform these steps: @enumerate @item Create gnulib directory On a machine with recent automake, autoconf, m4 installed and with a gnulib git or cvs checkout (typically a Linux machine), 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 'logs/' with a log file for each module. @item Submit build logs Submit each log file to Simon's site, either through a @example mail `echo gnulib__at__autobuild.josefsson.org | sed -e s/__at__/@@/` @end example or through netcat @example autobuild-submit logs/* @end example @end enumerate @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:: * 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:: * time.h:: * trace.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/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/time.texi @include posix-headers/trace.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 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:: * 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:: * 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:: * 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:: * 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:: @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/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/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/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/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/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/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/dprintf.texi @include posix-functions/drand48.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/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/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/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/fesetexceptflag.texi @include posix-functions/fesetround.texi @include posix-functions/fetestexcept.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/fmemopen.texi @include posix-functions/fmin.texi @include posix-functions/fminf.texi @include posix-functions/fminl.texi @include posix-functions/fmod.texi @include posix-functions/fmodf.texi @include posix-functions/fmodl.texi @include posix-functions/fmtmsg.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/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/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/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/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/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/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/nexttoward.texi @include posix-functions/nexttowardf.texi @include posix-functions/nexttowardl.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/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/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/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/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/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/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/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/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/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 (POSIX:2001) 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:: * index:: * 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:: * mcheck.h:: * mntent.h:: * obstack.h:: * paths.h:: * printf.h:: * pty.h:: * resolv.h:: * shadow.h:: * sys/ioctl.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/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/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 crypt.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 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/des_crypt.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/yp_prot.h:: * Glibc rpcsvc/ypclnt.h:: * Glibc rpcsvc/ypupd.h:: * Glibc sched.h:: * Glibc search.h:: * Glibc selinux/selinux.h:: * Glibc shadow.h:: * Glibc signal.h:: * Glibc stdio.h:: * Glibc stdlib.h:: * Glibc string.h:: * Glibc sys/capability.h:: * Glibc sys/epoll.h:: * Glibc sys/file.h:: * Glibc sys/fsuid.h:: * Glibc sys/gmon.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/reboot.h:: * Glibc sys/sem.h:: * Glibc sys/sendfile.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/timex.h:: * Glibc sys/uio.h:: * Glibc sys/ustat.h:: * Glibc sys/vlimit.h:: * Glibc sys/vm86.h:: * Glibc sys/vtimes.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_neta:: * 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_neta.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{} @node Glibc crypt.h @section Glibc @code{} @menu * crypt_r:: * encrypt_r:: * setkey_r:: @end menu @include glibc-functions/crypt_r.texi @include glibc-functions/encrypt_r.texi @include glibc-functions/setkey_r.texi @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:: * versionsort:: @end menu @include glibc-functions/getdirentries.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:: * readahead:: @end menu @include glibc-functions/fallocate.texi @include glibc-functions/readahead.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:: * malloc_get_state:: * malloc_set_state:: * malloc_info:: * malloc_stats:: * malloc_trim:: * malloc_usable_size:: * mallopt:: * memalign:: * pvalloc:: @end menu @include glibc-functions/mallinfo.texi @include glibc-functions/malloc_get_state.texi @include glibc-functions/malloc_set_state.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:: * 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/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{} @c @node Glibc poll.h @c @section Glibc Extensions to @code{} @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_getaffinity_np:: * pthread_getattr_np:: * pthread_getname_np:: * pthread_kill_other_threads_np:: * pthread_mutex_consistent_np:: * pthread_mutexattr_getrobust_np:: * pthread_mutexattr_setrobust_np:: * pthread_rwlockattr_getkind_np:: * pthread_rwlockattr_setkind_np:: * pthread_setaffinity_np:: * pthread_setname_np:: * pthread_sigqueue:: * pthread_timedjoin_np:: * pthread_tryjoin_np:: * pthread_yield:: @end menu @include glibc-functions/pthread_attr_getaffinity_np.texi @include glibc-functions/pthread_attr_setaffinity_np.texi @include glibc-functions/pthread_getaffinity_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_consistent_np.texi @include glibc-functions/pthread_mutexattr_getrobust_np.texi @include glibc-functions/pthread_mutexattr_setrobust_np.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_setname_np.texi @include glibc-functions/pthread_sigqueue.texi @include glibc-functions/pthread_timedjoin_np.texi @include glibc-functions/pthread_tryjoin_np.texi @include glibc-functions/pthread_yield.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_expand:: * res_init:: * res_mkquery:: * res_query:: * res_querydomain:: * res_search:: @end menu @include glibc-functions/dn_expand.texi @include glibc-functions/res_init.texi @include glibc-functions/res_mkquery.texi @include glibc-functions/res_query.texi @include glibc-functions/res_querydomain.texi @include glibc-functions/res_search.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 @node Glibc rpc/des_crypt.h @section Glibc @code{} @menu * cbc_crypt:: * des_setparity:: * ecb_crypt:: @end menu @include glibc-functions/cbc_crypt.texi @include glibc-functions/des_setparity.texi @include glibc-functions/ecb_crypt.texi @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_mapname:: * xdr_peername:: * xdr_valdat:: * xdr_ypbind_binding:: * xdr_ypbind_resp:: * xdr_ypbind_resptype:: * xdr_ypbind_setdom:: * xdr_ypmap_parms:: * xdr_ypmaplist:: * xdr_yppush_status:: * 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_mapname.texi @include glibc-functions/xdr_peername.texi @include glibc-functions/xdr_valdat.texi @include glibc-functions/xdr_ypbind_binding.texi @include glibc-functions/xdr_ypbind_resp.texi @include glibc-functions/xdr_ypbind_resptype.texi @include glibc-functions/xdr_ypbind_setdom.texi @include glibc-functions/xdr_ypmap_parms.texi @include glibc-functions/xdr_ypmaplist.texi @include glibc-functions/xdr_yppush_status.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 @node Glibc rpcsvc/yp_prot.h @section Glibc @code{} @menu * xdr_ypall:: @end menu @include glibc-functions/xdr_ypall.texi @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:: * yp_update:: * 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/yp_update.texi @include glibc-functions/ypbinderr_string.texi @include glibc-functions/yperr_string.texi @include glibc-functions/ypprot_err.texi @node Glibc rpcsvc/ypupd.h @section Glibc @code{} @menu * xdr_yp_buf:: * xdr_ypdelete_args:: * xdr_ypupdate_args:: @end menu @include glibc-functions/xdr_yp_buf.texi @include glibc-functions/xdr_ypdelete_args.texi @include glibc-functions/xdr_ypupdate_args.texi @node Glibc sched.h @section Glibc Extensions to @code{} @menu * clone:: * sched_getaffinity:: * sched_setaffinity:: @end menu @include glibc-functions/clone.texi @include glibc-functions/sched_getaffinity.texi @include glibc-functions/sched_setaffinity.texi @node Glibc search.h @section Glibc Extensions to @code{} @menu * hcreate_r:: * hdestroy_r:: * hsearch_r:: * tdestroy:: @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 @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 @c @node Glibc semaphore.h @c @section Glibc Extensions to @code{} @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:: @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 @c @node Glibc spawn.h @c @section Glibc Extensions to @code{} @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:: * 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/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:: * mrand48_r:: * mkstemps:: * nrand48_r:: * on_exit:: * ptsname_r:: * qecvt:: * qecvt_r:: * qfcvt:: * qfcvt_r:: * qgcvt:: * qsort_r:: * quick_exit:: * random_r:: * rpmatch:: * 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/mrand48_r.texi @include glibc-functions/mkstemps.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/quick_exit.texi @include glibc-functions/random_r.texi @include glibc-functions/rpmatch.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 * ffsl:: * ffsll:: * memfrob:: * memmem:: * mempcpy:: * memrchr:: * rawmemchr:: * strcasestr:: * strchrnul:: * strfry:: * strsep:: * strverscmp:: @end menu @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/strcasestr.texi @include glibc-functions/strchrnul.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/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_ctl:: * epoll_wait:: @end menu @include glibc-functions/epoll_create.texi @include glibc-functions/epoll_ctl.texi @include glibc-functions/epoll_wait.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/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:: * mincore:: * mremap:: * remap_file_pages:: @end menu @include glibc-functions/madvise.texi @include glibc-functions/mincore.texi @include glibc-functions/mremap.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/reboot.h @section Glibc @code{} @menu * reboot:: @end menu @include glibc-functions/reboot.texi @c @node Glibc sys/resource.h @c @section Glibc Extensions to @code{} @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/socket.h @section Glibc Extensions to @code{} @menu * accept4:: * isfdtype:: @end menu @include glibc-functions/accept4.texi @include glibc-functions/isfdtype.texi @node Glibc sys/stat.h @section Glibc Extensions to @code{} @menu * lchmod:: @end menu @include glibc-functions/lchmod.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{} @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:: @end menu @include glibc-functions/adjtimex.texi @include glibc-functions/ntp_adjtime.texi @include glibc-functions/ntp_gettime.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:: * pwritev:: @end menu @include glibc-functions/preadv.texi @include glibc-functions/pwritev.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 @node Glibc sys/vm86.h @section Glibc @code{} @menu * vm86:: @end menu @include glibc-functions/vm86.texi @node Glibc sys/vtimes.h @section Glibc @code{} @menu * vtimes:: @end menu @include glibc-functions/vtimes.texi @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 * dysize:: * getdate_r:: * stime:: * strptime_l:: * timegm:: * timelocal:: @end menu @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 @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 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 * acct:: * brk:: * chroot:: * daemon:: * dup3:: * endusershell:: * euidaccess:: * execvpe:: * get_current_dir_name:: * getdomainname:: * getdtablesize:: * getpagesize:: * getpass:: * getresgid:: * getresuid:: * getusershell:: * group_member:: * pipe2:: * profil:: * revoke:: * sbrk:: * setlogin:: * setdomainname:: * sethostid:: * sethostname:: * setresgid:: * setresuid:: * setusershell:: * syncfs:: * syscall:: * ttyslot:: * vhangup:: @end menu @include glibc-functions/acct.texi @include glibc-functions/brk.texi @include glibc-functions/chroot.texi @include glibc-functions/daemon.texi @include glibc-functions/dup3.texi @include glibc-functions/endusershell.texi @include glibc-functions/euidaccess.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/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_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_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 Particular Modules @chapter Particular Modules @menu * alloca:: * alloca-opt:: * Safe Allocation Macros:: * Compile-time Assertions:: * Integer Properties:: * String Functions in C Locale:: * Quoting:: * error and progname:: * gcd:: * Searching for Libraries:: * Exported Symbols of Shared Libraries:: * LD Version Scripts:: * Visual Studio Compatibility:: * Supporting Relocation:: * func:: * configmake:: * warnings:: * manywarnings:: * Running self-tests under valgrind:: * 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 verify.texi @include intprops.texi @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 @include quote.texi @include error.texi @include gcd.texi @include havelib.texi @include lib-symbol-visibility.texi @include ld-version-script.texi @include ld-output-def.texi @include relocatable-maint.texi @include func.texi @include configmake.texi @include warnings.texi @include manywarnings.texi @include valgrind-tests.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 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-20111211-stable/doc/gpl-2.0.texi000066400000000000000000000436271167105100700172250ustar00rootroot00000000000000@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-20111211-stable/doc/gpl-3.0.texi000066400000000000000000001044131167105100700172150ustar00rootroot00000000000000@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{http://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{http://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{http://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{http://www.gnu.org/philosophy/why-not-lgpl.html}. gnulib-20111211-stable/doc/havelib.texi000066400000000000000000000203671167105100700175540ustar00rootroot00000000000000@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}. @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-20111211-stable/doc/inet_ntoa.texi000066400000000000000000000017511167105100700201160ustar00rootroot00000000000000@node inet_ntoa @section inet_ntoa @findex inet_ntoa @c Copyright (C) 2005, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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 time stamp 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. Further, @code{inet_ntoa} is specific for @acronym{IPv4} addresses. A protocol independent function is @code{inet_ntop}. gnulib-20111211-stable/doc/install.texi000066400000000000000000000417221167105100700176060ustar00rootroot00000000000000@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-2011 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 commands @samp{./configure; make; make 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 time stamps 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 bug. Until the bug is fixed you can use this workaround: @example CONFIG_SHELL=/bin/bash /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-20111211-stable/doc/intprops.texi000066400000000000000000000304051167105100700200120ustar00rootroot00000000000000@node Integer Properties @section Integer Properties @c Copyright (C) 2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. @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, GCC's @option{-ftrapv} option, GCC's no-undefined-overflow branch, the As-if Infinitely Ranged (AIR) model implemented in Clang, saturation semantics where overflow reliably yields an extreme value, the RICH static transformer to an overflow-checking variant, and special testing methods. For more information about these techniques, see: Dannenberg R, Dormann W, Keaton D @emph{et al.}, @url{http://www.sei.cmu.edu/library/abstracts/reports/10tn008.cfm, As-if Infinitely Ranged integer model -- 2nd ed.}, Software Engineering Institute Technical Note CMU/SEI-2010-TN-008, April 2010. Gnulib supports the precondition testing technique, as this is easy to support portably. There are two families of precondition tests: the first, for integer ranges, has a simple and straightforward implementation, while the second, for integer types, is easier to use. @menu * Integer Type Determination:: Whether a type has integer properties. * Integer Bounds:: Bounds on integer values and representations. * Integer Range Overflow:: Integer overflow checking if bounds are known. * Integer Type Overflow:: General integer overflow checking. @end menu @node Integer Type Determination @subsection Integer Type Determination @findex TYPE_IS_INTEGER @code{TYPE_IS_INTEGER (@var{t})} expands to a 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})} expands to a constant expression that is 1 if the arithmetic type @var{t} is a signed integer type or a floating type. If @var{t} is an integer type, @code{TYPE_SIGNED (@var{t})} expands to an integer constant expression. Example usage: @example #include #include enum @{ time_t_is_signed_integer = TYPE_IS_INTEGER (time_t) && TYPE_SIGNED (time_t) @}; @end example @node Integer Bounds @subsection Integer Bounds @cindex integer bounds @findex INT_BUFSIZE_BOUND @code{INT_BUFSIZE_BOUND (@var{t})} expands to 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_STRLEN_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})} expands to 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})} expand to 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 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 expand to integer constant expresssions 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 Seacord R, The CERT C Secure Coding Standard (2009, revised 2011), in its two sections ``@url{https://www.securecoding.cert.org/confluence/display/seccode/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/seccode/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 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); @} @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 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 and @code{@var{a} >> @var{b}} has implementation-defined behavior, but this macro does not check these other restrictions. @end table @node Integer Type Overflow @subsection Integer Type Overflow @cindex integer type overflow @cindex overflow, integer type 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 expand to integer constant expresssions if their arguments are. They are easier to use than the integer range overflow macros (@pxref{Integer Range Overflow}). Example usage: @example #include 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); @} @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 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 and @code{@var{a} >> @var{b}} has implementation-defined behavior, but this macro does not check these other restrictions. @end table gnulib-20111211-stable/doc/ld-output-def.texi000066400000000000000000000050401167105100700206220ustar00rootroot00000000000000@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{http://support.microsoft.com/kb/131313/en-us}. 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 (@url{http://sei.pku.edu.cn/~caodg/course/c/reference/win32/tools/dlltool.html}) 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 defexecdir = $(bindir) 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-20111211-stable/doc/ld-version-script.texi000066400000000000000000000044331167105100700215220ustar00rootroot00000000000000@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{http://people.redhat.com/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-20111211-stable/doc/lgpl-2.1.texi000066400000000000000000000636771167105100700174110ustar00rootroot00000000000000@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-20111211-stable/doc/lgpl-3.0.texi000066400000000000000000000171141167105100700173720ustar00rootroot00000000000000@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{http://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-20111211-stable/doc/lib-symbol-visibility.texi000066400000000000000000000161031167105100700223710ustar00rootroot00000000000000@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-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. 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. 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{http://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{http://people.redhat.com/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-20111211-stable/doc/maintain.texi000066400000000000000000002705031167105100700177410ustar00rootroot00000000000000\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 December 2, 2011 @c %**end of header @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 Free Software Foundation, Inc. @quotation 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, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @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:: * Getting a GNU Account:: * Stepping Down:: * Recruiting Developers:: * Legal Matters:: * Clean Ups:: * Platforms:: * Mail:: * Old Versions:: * Distributions:: * Web Pages:: * Ethical and Philosophical Consideration:: * Terminology:: * 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}). @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{http://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{http://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'', ``per'', ``pers'' and ``perself'' which 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 equally to males and females. For example, ``Person placed per new program under the GNU GPL, to let the public benefit from per work, and to enable per to feel person 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{http://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{http://identi.ca/group/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{http://identi.ca/group/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 are responsible for the network and GNU hardware. You can email them at @email{sysadmin@@fsf.org}, but please try not to burden them unnecessarily. @node Getting a GNU Account @chapter Getting a GNU Account @cindex shell account, on fencepost @cindex @code{fencepost.gnu.org} GNU machine @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, @url{http://www.gnu.org/software/README.accounts.html}. You can also ask for accounts for people who significantly help you in working on the package. @end macro @gdgnuorgtext{} @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{http://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:: @end menu @node Copyright Papers @section Copyright Papers @cindex copyright papers 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. @strong{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. @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{http://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. All contributors then print the assignment and sign it. Contributors residing outside the U.S. must mail the signed form to the FSF via the post. Contributors located in the U.S. can then email or fax a scanned copy back to the FSF (or use postal mail, if they prefer). (To emphasize, the necessary distinction is between US residents and non-residents, 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{http://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. 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 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. Especially when code has been released into the public domain, authors sometimes fail to write a license statement in each file. In this case, please first be sure 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 released under a GPL-compatible free license, rather than being in the public domain, may require preserving copyright notices or other steps. Of course, you should do what is needed. If you are maintaining an FSF-copyrighted package, please verify we have papers for the code you are copying, @emph{before} copying it. 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. * 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{http://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{http://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{http://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{http://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{http://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{http://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{http://@/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. @xref{GNU Sample Texts,,, texinfo, Texinfo}, for a full example in a Texinfo manual, and see @url{http://www.gnu.org/licenses/fdl-howto.html} for more advice about how to use the GNU FDL. 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 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. @node External Libraries @section External Libraries When maintaining an FSF-copyrighted GNU package, you may occasionally want to use a general-purpose free software module which offers a useful functionality, as a ``library'' facility (though the module is not always packaged technically as a library). In a case like this, it would be unreasonable to ask the author of that module to assign the copyright to the FSF. After all, person did not write it specifically as a contribution to your package, so it would be impertinent to ask per, out of the blue, ``Please give the FSF your copyright.'' So the thing to do in this case is to make your program use the module, but not consider it a part of your program. There are two reasonable methods of doing this: @enumerate @item Assume the module is already installed on the system, and use 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, 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. For this method, it is not necessary to treat the module as a library and make a @samp{.a} file from it. You can link with the @samp{.o} files directly 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 consider using these methods only for general-purpose modules that were written for other programs and released separately for general use. For anything that was written as a contribution to your package, please get papers signed. @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. 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 makes no sense in a GNU package. 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{http://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}.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}} 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{http://www.gnu.org/software/README.accounts.html} (@pxref{Getting a GNU Account}). But if you don't want to learn how to do those things, you can alternatively ask @email{alias-file@@gnu.org} to add you to the bug-reporting list for your program. To set up a new list, contact @email{new-mailing-list@@gnu.org}. You can subscribe to a list managed by Mailman by sending mail to the corresponding @samp{-request} address. @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{http://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{http://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{http://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{http://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 It is important to follow the GNU conventions when making GNU software distributions. @menu * Distribution tar Files:: * Distribution Patches:: * 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 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 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 GNU packages are distributed through the directory @file{/gnu} on @code{ftp.gnu.org}, via both HTTP and FTP. Each package should have a subdirectory named after the package, and all the distribution files for the package should go in that subdirectory. @xref{Automated FTP Uploads}, for 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 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 two 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.) The other 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. 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 crytographically signed before they are made publicly available. @menu * Automated Upload Registration:: * Automated Upload Procedure:: * 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{http://savannah.gnu.org}, if you don't already have one. By the way, this is also needed to maintain the web pages at @url{http://www.gnu.org} for your project (@pxref{Web Pages}). @item In the @samp{My Account Conf} page on @code{savannah}, upload the GPG key you will use to sign your packages. If you haven't created one before, you can do so with the command @code{gpg --gen-key} (you can accept all the default answers to its questions). Optional but recommended: Send your key 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{http://www.gnu.org/software/gpg}. @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} 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 An ASCII armored copy of your GPG key, as an attachment. (@samp{gpg --export -a @var{your_key_id} >mykey.asc} should give you this.) @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 @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. @node Automated Upload Procedure @subsection Automated Upload Procedure @cindex uploads Once you have registered your information as described in the previous section, you will be able to do ftp uploads for yourself using the following procedure. For each upload destined for @code{ftp.gnu.org} or @code{alpha.gnu.org}, three files (a @dfn{triplet}) need to be uploaded via ftp to the host @code{ftp-upload.gnu.org}. @enumerate @item The file to be distributed; for example, @file{foo.tar.gz}. @item Detached GPG binary signature file for (1); for example, @file{foo.tar.gz.sig}. Make this with @samp{gpg -b foo.tar.gz}. @item A clearsigned @dfn{directive file}; for example, @file{foo.tar.gz.directive.asc}. Make this by preparing the plain text file @file{foo.tar.gz.directive} and then run @samp{gpg --clearsign foo.tar.gz.directive}. @xref{FTP Upload Directive File - v1.1}, for the contents of the directive file. @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}. Since v1.1 of the upload script, it is also possible to upload a clearsigned directive file on its own (no accompanying @file{.sig} or any other file) to perform certain operations on the server. @xref{FTP Upload Directive File - v1.1}, for more information. Upload the file(s) via anonymous ftp to @code{ftp-upload.gnu.org}. If the upload is destined for @code{ftp.gnu.org}, place the file(s) in the @file{/incoming/ftp} directory. If the upload is destined for @code{alpha.gnu.org}, place the file(s) in the @file{/incoming/alpha} directory. 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. Uploaded files that belong to an incomplete triplet are deleted automatically after 24 hours. Your designated upload email addresses (@pxref{Automated Upload Registration}) are sent a message if there are any problems processing an upload for your package. You also receive a message when your upload has been successfully processed. One automated 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{http://savannah.gnu.org/projects/gnulib}. @code{gnupload} can also remove uploaded files. Run @code{gnupload --help} for a description and examples. @code{gnupload} uses the @code{ncftpput} program 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} serves as a replacement which uses plain command line @code{ftp}. 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 Directive File - v1.1 @subsection FTP Upload Directive File - v1.1 The directive file name must end in @file{directive.asc}. When part of a triplet, the directive file must always contain the directives @code{version}, @code{directory} and @code{filename}, as described. In addition, a 'comment' directive is allowed. The @code{version} directive must always have the value @samp{1.1}. The @code{directory} directive specifies the final destination directory where the uploaded file and its @file{.sig} companion are to be placed. The @code{filename} directive must contain the name of the file to be distributed (item@tie{}(1) above). For example, as part of an uploaded triplet, a @file{foo.tar.gz.directive.asc} file might contain these lines (before being gpg clearsigned): @example version: 1.1 directory: bar/v1 filename: foo.tar.gz comment: hello world! @end example This directory line indicates that @file{foo.tar.gz} and @file{foo.tar.gz.sig} are part of package @code{bar}. If you uploaded this triplet to @file{/incoming/ftp} and the system positively authenticates the signatures, the files @file{foo.tar.gz} and @file{foo.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}). If you upload a file that already exists in the FTP directory, the original will simply be archived and replaced with the new upload. @subheading Standalone directives When uploaded by itself, the directive file must contain one or more of the directives @code{symlink}, @code{rmsymlink} or @code{archive}, in addition to the obligatory @code{directory} and @code{version} directives. A @code{filename} directive is not allowed, and a @code{comment} directive remains optional. If you use more than one directive, 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. However, 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 removed.) Here are a few examples. The first removes a symlink: @example version: 1.1 directory: bar/v1 rmsymlink: foo-latest.tgz comment: remove a symlink @end example @noindent Archive an old file, taking it offline: @example version: 1.1 directory: bar/v1 archive: foo-1.1.tar.gz comment: archive an old file; it will not be comment: available through FTP any more. @end example @noindent Archive an old directory (with all contents), taking it offline: @example version: 1.1 directory: bar/v1 archive: foo comment: archive an old directory; it and its entire comment: contents will not be available through FTP anymore @end example @noindent Create a new symlink: @example version: 1.1 directory: bar/v1 symlink: foo-1.2.tar.gz foo-latest.tgz comment: create a new symlink @end example @noindent Do everything at once: @example version: 1.1 directory: bar/v1 rmsymlink: foo-latest.tgz symlink: foo-1.2.tar.gz foo-latest.tgz archive: foo-1.1.tar.gz comment: now do everything at once @end example @node FTP Upload Directive File - v1.0 @subsection FTP Upload Directive File - v1.0 @dfn{As of June 2006, the upload script is running in compatibility mode, allowing uploads with either version@tie{}1.1 or version@tie{}1.0 of the directive file syntax. Support for v1.0 uploads will be phased out by the end of 2006, so please upgrade to@tie{}v1.1.} The directive file should contain 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.tar.gz.directive.asc} file might contain the single line: @example directory: bar/v1 @end example This directory line indicates that @file{foo.tar.gz} and @file{foo.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.tar.gz} and @file{foo.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{http://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{http://planet.gnu.org} (GNU Planet). 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 @email{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{http://www.gnu.org/software/@var{package}/}). @item Your package's download location (normally @indicateurl{http://ftp.gnu.org/gnu/@var{package}/}). It is also useful to mention the mirror list at @url{http://www.gnu.org/order/ftp.html}, and that @url{http://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 @node Web Pages @chapter Web Pages @cindex web pages Please write web pages about your package, and install them on @code{www.gnu.org}. They should follow our usual standards for web pages (see @url{http://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 flashy eye candy, and to keep the site simple and uniform. We encourage you to use the standard @code{www.gnu.org} template as the basis for your pages: @url{http://www.gnu.org/server/@/standards/@/boilerplate-source.html}. 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. @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 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 repository'' available on Savannah, which corresponds to @indicateurl{http://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. 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{http://www.gnu.org/server/standards/README.webmastering.html#symlinks}. @node Freedom for Web Pages @section Freedom for Web Pages 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. 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{http://www.gnu.org/philosophy/gif.html}. @node Manuals on Web Pages @section Manuals on Web Pages The web pages for the package should include its manuals, in HTML, DVI, Info, PostScript, PDF, plain ASCII, and Texinfo format (source). All of these can be generated automatically from the Texinfo source using Makeinfo and other programs. 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{http://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 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 Texinfo CVS sources: @smallformat @uref{http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh} @uref{http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template} @end smallformat There is also a minimalistic template, available from: @smallformat @uref{http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/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 @acronym{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}, @env{TEXI2HTML} and @env{DVIPS} 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 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 at @url{http://ximbiot.com/cvs/manual}. 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. For example, the MP3 audio format is covered by a software patent in the USA and some other countries. A patent holder has threatened lawsuits against the developers of free programs (these are not GNU programs) to produce and play MP3, and some GNU/Linux distributors are afraid to include them. Development of the programs continues, but we campaign for the rejection of MP3 format in favor of Ogg Vorbis format. 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. 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. 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 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{http://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'', 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{http://www.gnu.org/gnu/linux-and-gnu.html}. To contrast the GNU system properly with respect to 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. @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 http://www.gnu.org/philosophy/free-sw.html. If you are looking for service or support for GNU software, see http://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. Of course, it is also good to encourage people to join or contribute to the FSF (@url{http://www.fsf.org}), 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{http://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 'write-file-hooks 'time-stamp) time-stamp-start: "@set lastupdate " time-stamp-start: "@set lastupdate " time-stamp-end: "$" time-stamp-format: "%:b %:d, %:y" compile-command: "make -C work.m" End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/make-stds.texi�����������������������������������������������������������0000664�0000000�0000000�00000133255�11671051007�0020033�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 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 `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@@}.) @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.in} 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-20111211-stable/doc/manywarnings.texi��������������������������������������������������������0000664�0000000�0000000�00000004457�11671051007�0020661�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 -Wsystem-headers" # Don't let system headers trigger warnings nw="$nw -Wundef" # All compiler preprocessors support #if UNDEF nw="$nw -Wtraditional" # All compilers nowadays support ANSI C nw="$nw -Wconversion" # These warnings usually don't point to mistakes. nw="$nw -Wsign-conversion" # Likewise. # 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-20111211-stable/doc/parse-datetime.texi������������������������������������������������������0000664�0000000�0000000�00000056566�11671051007�0021060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c GNU date syntax documentation @c Copyright (C) 1994-2006, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. @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 @sc{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:: 19 Dec 1994. * Time of day items:: 9:20pm. * Time zone items:: @sc{est}, @sc{pdt}, @sc{gmt}. * Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500 * Day of week items:: Monday and others. * Relative items in date strings:: next tuesday, 2 years ago. * Pure numbers in date strings:: 19931219, 1440. * Seconds since the Epoch:: @@1078100502. * 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 Mon Mar 1 00:21:42 UTC 2004 $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' 2004-03-01 00:21:42Z $ date --rfc-3339=ns # --rfc-3339 is a GNU extension. 2004-02-29 16:21:42.692722128-08:00 $ date --rfc-2822 # a GNU extension Sun, 29 Feb 2004 16:21:42 -0800 $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. 2004-02-29 16:21:42 -0800 $ date +'@@%s.%N' # %s and %N are GNU extensions. @@1078100502.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. Invalid dates like @samp{2005-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 1972-09-24 # @sc{iso} 8601. 72-9-24 # Assume 19xx for 69 through 99, # 20xx for 00 through 68. 72-09-24 # Leading zeros are ignored. 9/24/72 # Common U.S. writing. 24 September 1972 24 Sept 72 # September has a special abbreviation. 24 Sep 72 # Three-letter abbreviations always allowed. Sep 24, 1972 24-sep-72 24sep72 @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 9/24 sep 24 @end example Here are the rules. @cindex @sc{iso} 8601 date format @cindex date format, @sc{iso} 8601 For numeric months, the @sc{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 @sc{est} (U.S. Eastern Standard Time). @end example 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 (@sc{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 @sc{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. 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, time stamps 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 A @dfn{combined date and time of day item} specifies the time on a specific day of the year. This type is needed for formats that cannot be represented by individual calendar date (@pxref{Calendar date items}) and time of day (@pxref{Time of day items}) items due to ambiguity. @example # ISO 8601 extended date and time of day format 1972-09-24T20:02:00,000000-0500 @end example @cindex @sc{iso} 8601 date and time of day format @cindex date and time of day format, @sc{iso} 8601 The @sc{iso} 8601 extended date and time of day format is an @sc{iso} 8601 date, a @samp{T} character separator, followed by an @sc{iso} 8601 time of day. @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{2003-07-31 -1 month} might evaluate to 2003-07-01, because 2003-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 2003 13:02:39 -0700 $ 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 time stamp 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 time stamp. @cindex beginning of time, for @acronym{POSIX} @cindex epoch, for @acronym{POSIX} Internally, computer times are represented as a count of seconds since an epoch---a well-defined point of time. On @acronym{GNU} and @acronym{POSIX} systems, the epoch is 1970-01-01 00:00:00 @sc{utc}, so @samp{@@0} represents this time, @samp{@@1} represents 1970-01-01 00:00:01 @sc{utc}, and so forth. @acronym{GNU} and most other @acronym{POSIX}-compliant systems support such times as an extension to @acronym{POSIX}, using negative counts, so that @samp{@@-1} represents 1969-12-31 23:59:59 @sc{utc}. Traditional Unix 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 @sc{utc}. More modern systems use 64-bit counts of seconds with nanosecond subcounts, and can represent all the times in the known lifetime of the universe to a resolution of 1 nanosecond. On most hosts, these counts ignore the presence of leap seconds. For example, on most hosts @samp{@@915148799} represents 1998-12-31 23:59:59 @sc{utc}, @samp{@@915148800} represents 1999-01-01 00:00:00 @sc{utc}, and there is no way to represent the intervening leap second 1998-12-31 23:59:60 @sc{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 @acronym{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, 2004?'' 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" 2004-10-31 06:30' Sun Oct 31 01:30:00 EDT 2004 @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{2004-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 2004, 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{http://www.twinsun.com/tz/tz-link.htm, @samp{tz} database}. A recent catalog of location names appears in the @uref{http://twiki.org/cgi-bin/xtra/tzdate, TWiki Date and Time Gateway}. A few non-@acronym{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-@acronym{GNU} host that does not support the @samp{tz} database, you may need to use a @acronym{POSIX} rule instead. Simple @acronym{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 @sc{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-20111211-stable/doc/pastposix-functions/�����������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0021277�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/bcmp.texi��������������������������������������������0000664�0000000�0000000�00000000656�11671051007�0023122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bcmp @section @code{bcmp} @findex bcmp POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: Solaris 2.4, mingw, MSVC 9. @item This function is marked as ``legacy'' in POSIX. Better use @code{memcmp} instead. @end itemize ����������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/bcopy.texi�������������������������������������������0000664�0000000�0000000�00000000706�11671051007�0023311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bcopy @section @code{bcopy} @findex bcopy POSIX specification: @url{http://www.opengroup.org/susv3xsh/bcopy.html} Gnulib module: bcopy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Solaris 2.4, mingw, MSVC 9. @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-20111211-stable/doc/pastposix-functions/bsd_signal.texi��������������������������������������0000664�0000000�0000000�00000000665�11671051007�0024306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bsd_signal @section @code{bsd_signal} @findex bsd_signal POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 X 10.5, FreeBSD 6.0, NetBSD 5.0, IRIX 5.3, Solaris 2.5.1, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/bzero.texi�������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0023317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bzero @section @code{bzero} @findex bzero POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: Solaris 2.4, mingw, MSVC 9. @item This function is marked as ``legacy'' in POSIX. Better use @code{memset} instead. @end itemize ������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/ecvt.texi��������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0023140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ecvt @section @code{ecvt} @findex ecvt POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 6.0, NetBSD 5.0. @item This function is marked as ``legacy'' in POSIX. Better use @code{sprintf} instead. @end itemize ������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/fcvt.texi��������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fcvt @section @code{fcvt} @findex fcvt POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 6.0, NetBSD 5.0. @item This function is marked as ``legacy'' in POSIX. Better use @code{sprintf} instead. @end itemize ������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/ftime.texi�������������������������������������������0000664�0000000�0000000�00000001115�11671051007�0023274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftime @section @code{ftime} @findex ftime POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, IRIX 5.3, Solaris 2.4. @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-20111211-stable/doc/pastposix-functions/gcvt.texi��������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0023142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gcvt @section @code{gcvt} @findex gcvt POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 X 10.5, FreeBSD 6.0, NetBSD 5.0. @item This function is marked as ``legacy'' in POSIX. Better use @code{sprintf} instead. @end itemize ����������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/getcontext.texi��������������������������������������0000664�0000000�0000000�00000000626�11671051007�0024362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getcontext @section @code{getcontext} @findex getcontext POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: MacOS X 10.4, OpenBSD 3.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/gethostbyaddr.texi�����������������������������������0000664�0000000�0000000�00000000554�11671051007�0025041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostbyaddr @section @code{gethostbyaddr} @findex gethostbyaddr POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/gethostbyname.texi�����������������������������������0000664�0000000�0000000�00000000554�11671051007�0025047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostbyname @section @code{gethostbyname} @findex gethostbyname POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/getwd.texi�������������������������������������������0000664�0000000�0000000�00000001205�11671051007�0023302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getwd @section @code{getwd} @findex getwd POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: Solaris 2.4, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/pastposix-functions/h_errno.texi�����������������������������������������0000664�0000000�0000000�00000000576�11671051007�0023636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node h_errno @section @code{h_errno} @findex h_errno POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/index.texi�������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0023305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node index @section @code{index} @findex index POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: Solaris 2.4, mingw, MSVC 9. @item This function is marked as ``legacy'' in POSIX. Better use @code{strchr} instead. @end itemize ������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/makecontext.texi�������������������������������������0000664�0000000�0000000�00000000632�11671051007�0024515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node makecontext @section @code{makecontext} @findex makecontext POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: MacOS X 10.4, OpenBSD 3.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/mktemp.texi������������������������������������������0000664�0000000�0000000�00000000702�11671051007�0023466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mktemp @section @code{mktemp} @findex mktemp POSIX specification: @url{http://www.opengroup.org/susv3xsh/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-20111211-stable/doc/pastposix-functions/pthread_attr_getstackaddr.texi�����������������������0000664�0000000�0000000�00000000701�11671051007�0027371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getstackaddr @section @code{pthread_attr_getstackaddr} @findex pthread_attr_getstackaddr POSIX specification: @url{http://www.opengroup.org/susv3xsh/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, Solaris 2.4, Cygwin, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/pthread_attr_setstackaddr.texi�����������������������0000664�0000000�0000000�00000000713�11671051007�0027410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setstackaddr @section @code{pthread_attr_setstackaddr} @findex pthread_attr_setstackaddr POSIX specification: @url{http://www.opengroup.org/susv3xsh/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, IRIX 5.3, Solaris 2.4, Cygwin, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/rindex.texi������������������������������������������0000664�0000000�0000000�00000000667�11671051007�0023474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rindex @section @code{rindex} @findex rindex POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: Solaris 2.4, mingw, MSVC 9. @item This function is marked as ``legacy'' in POSIX. Better use @code{strrchr} instead. @end itemize �������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/scalb.texi�������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0023254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalb @section @code{scalb} @findex scalb POSIX specification: @url{http://www.opengroup.org/susv3xsh/scalb.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/setcontext.texi��������������������������������������0000664�0000000�0000000�00000001127�11671051007�0024373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setcontext @section @code{setcontext} @findex setcontext POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: MacOS X 10.4, OpenBSD 3.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/pastposix-functions/swapcontext.texi�������������������������������������0000664�0000000�0000000�00000000632�11671051007�0024552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node swapcontext @section @code{swapcontext} @findex swapcontext POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: MacOS X 10.4, OpenBSD 3.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/ualarm.texi������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0023455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ualarm @section @code{ualarm} @findex ualarm POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/usleep.texi������������������������������������������0000664�0000000�0000000�00000001467�11671051007�0023477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node usleep @section @code{usleep} @findex usleep POSIX specification: @url{http://www.opengroup.org/susv3xsh/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: mingw. @item This function is missing on some platforms. However, the replacement is designed to be lightweight, and may round to the neareset second; use @code{select} or @code{nanosleep} if better resolution is needed: IRIX 5.3, Solaris 2.4, older mingw, MSVC 9, BeOS. @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-20111211-stable/doc/pastposix-functions/vfork.texi�������������������������������������������0000664�0000000�0000000�00000000534�11671051007�0023323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfork @section @code{vfork} @findex vfork POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/pastposix-functions/wcswcs.texi������������������������������������������0000664�0000000�0000000�00000001150�11671051007�0023500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcswcs @section @code{wcswcs} @findex wcswcs POSIX specification: @url{http://www.opengroup.org/susv3xsh/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 X 10.5, FreeBSD 6.0, IRIX 5.3, Solaris 2.5.1, Cygwin, mingw, MSVC 9, BeOS. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/���������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020407�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/FD_CLR.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node FD_CLR @section @code{FD_CLR} @findex FD_CLR POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/FD_ISSET.texi��������������������������������������������0000664�0000000�0000000�00000000460�11671051007�0022542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node FD_ISSET @section @code{FD_ISSET} @findex FD_ISSET POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/FD_SET.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node FD_SET @section @code{FD_SET} @findex FD_SET POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/FD_ZERO.texi���������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0022435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node FD_ZERO @section @code{FD_ZERO} @findex FD_ZERO POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/_Exit_C99.texi�������������������������������������������0000664�0000000�0000000�00000001142�11671051007�0022774�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 (MacOS X HFS+ and Woe32 @c file systems). POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/_exit.texi�����������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _exit @section @code{_exit} @findex _exit POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/_exit.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/_longjmp.texi��������������������������������������������0000664�0000000�0000000�00000001265�11671051007�0023113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _longjmp @section @code{_longjmp} @findex _longjmp POSIX specification:@* @url{http://www.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: Solaris 2.5.1, mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/_setjmp.texi���������������������������������������������0000664�0000000�0000000�00000001242�11671051007�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _setjmp @section @code{_setjmp} @findex _setjmp POSIX specification:@* @url{http://www.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 This function is missing on some platforms: Solaris 2.5.1. @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-20111211-stable/doc/posix-functions/_tolower.texi��������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _tolower @section @code{_tolower} @findex _tolower POSIX specification:@* @url{http://www.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 X 10.5, Minix 3.1.8. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/_toupper.texi��������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node _toupper @section @code{_toupper} @findex _toupper POSIX specification:@* @url{http://www.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 X 10.5, Minix 3.1.8. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/a64l.texi������������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node a64l @section @code{a64l} @findex a64l POSIX specification:@* @url{http://www.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 9, BeOS. @item This function was not correctly implemented in glibc versions before 2.2.5. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/abort.texi�����������������������������������������������0000664�0000000�0000000�00000001027�11671051007�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node abort @section @code{abort} @findex abort POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/abs.texi�������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node abs @section @code{abs} @findex abs POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/abs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/accept.texi����������������������������������������������0000664�0000000�0000000�00000002052�11671051007�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node accept @section @code{accept} @findex accept POSIX specification:@* @url{http://www.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 for @code{accept} are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @item On BeOS, 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 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-20111211-stable/doc/posix-functions/access.texi����������������������������������������������0000664�0000000�0000000�00000001552�11671051007�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node access @section @code{access} @findex access POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/access.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/acos.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acos @section @code{acos} @findex acos POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/acosf.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acosf @section @code{acosf} @findex acosf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/acosh.texi�����������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acosh @section @code{acosh} @findex acosh POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/acoshf.texi����������������������������������������������0000664�0000000�0000000�00000000636�11671051007�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acoshf @section @code{acoshf} @findex acoshf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/acoshl.texi����������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acoshl @section @code{acoshl} @findex acoshl POSIX specification:@* @url{http://www.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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/acosl.texi�����������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node acosl @section @code{acosl} @findex acosl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/aio_cancel.texi������������������������������������������0000664�0000000�0000000�00000001200�11671051007�0023350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_cancel @section @code{aio_cancel} @findex aio_cancel POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, OSF/1 5.1, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/aio_error.texi�������������������������������������������0000664�0000000�0000000�00000001205�11671051007�0023261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_error @section @code{aio_error} @findex aio_error POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, AIX 5.1, OSF/1 5.1, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/aio_fsync.texi�������������������������������������������0000664�0000000�0000000�00000001222�11671051007�0023251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_fsync @section @code{aio_fsync} @findex aio_fsync POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, AIX 5.1, OSF/1 5.1, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/aio_read.texi��������������������������������������������0000664�0000000�0000000�00000001170�11671051007�0023044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_read @section @code{aio_read} @findex aio_read POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, OSF/1 5.1, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/aio_return.texi������������������������������������������0000664�0000000�0000000�00000001211�11671051007�0023444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_return @section @code{aio_return} @findex aio_return POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, AIX 5.1, OSF/1 5.1, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/aio_suspend.texi�����������������������������������������0000664�0000000�0000000�00000001204�11671051007�0023610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_suspend @section @code{aio_suspend} @findex aio_suspend POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, OSF/1 5.1, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/aio_write.texi�������������������������������������������0000664�0000000�0000000�00000001174�11671051007�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio_write @section @code{aio_write} @findex aio_write POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, OSF/1 5.1, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/alarm.texi�����������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node alarm @section @code{alarm} @findex alarm POSIX specification:@* @url{http://www.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 is missing on some platforms: mingw, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/alphasort.texi�������������������������������������������0000664�0000000�0000000�00000001244�11671051007�0023300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node alphasort @section @code{alphasort} @findex alphasort POSIX specification:@* @url{http://www.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 9, BeOS. @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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Interix 3.5. @item The parameters of this function are declared as @code{void *} on some platforms: AIX 5.1. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/asctime.texi���������������������������������������������0000664�0000000�0000000�00000000577�11671051007�0022740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asctime @section @code{asctime} @findex asctime POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/asctime_r.texi�������������������������������������������0000664�0000000�0000000�00000001163�11671051007�0023251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asctime_r @section @code{asctime_r} @findex asctime_r POSIX specification:@* @url{http://www.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 2010-11 (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 9. @item This function may put more than 26 bytes into the argument buffer if an invalid year is passed. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/asin.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asin @section @code{asin} @findex asin POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/asinf.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinf @section @code{asinf} @findex asinf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/asinh.texi�����������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinh @section @code{asinh} @findex asinh POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/asinhf.texi����������������������������������������������0000664�0000000�0000000�00000000636�11671051007�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinhf @section @code{asinhf} @findex asinhf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/asinhl.texi����������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinhl @section @code{asinhl} @findex asinhl POSIX specification:@* @url{http://www.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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/asinl.texi�����������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node asinl @section @code{asinl} @findex asinl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/assert.texi����������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node assert @section @code{assert} @findex assert POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/atan.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atan @section @code{atan} @findex atan POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/atan2.texi�����������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0022313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atan2 @section @code{atan2} @findex atan2 POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/atan2f.texi����������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atan2f @section @code{atan2f} @findex atan2f POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/atan2l.texi����������������������������������������������0000664�0000000�0000000�00000001040�11671051007�0022456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atan2l @section @code{atan2l} @findex atan2l POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/atanf.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanf @section @code{atanf} @findex atanf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/atanh.texi�����������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanh @section @code{atanh} @findex atanh POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/atanhf.texi����������������������������������������������0000664�0000000�0000000�00000000636�11671051007�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanhf @section @code{atanhf} @findex atanhf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/atanhl.texi����������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanhl @section @code{atanhl} @findex atanhl POSIX specification:@* @url{http://www.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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/atanl.texi�����������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atanl @section @code{atanl} @findex atanl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/atexit.texi����������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atexit @section @code{atexit} @findex atexit POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/atof.texi������������������������������������������������0000664�0000000�0000000�00000002216�11671051007�0022234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atof @section @code{atof} @findex atof POSIX specification:@* @url{http://www.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 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: Solaris 8, Mingw, OpenBSD 4.0. @item This function fails to parse NaN() on some platforms: Solaris 8, Mingw, OpenBSD 4.0, Cygwin < 1.5.25-11. @item This function fails to parse NaN(n-char-sequence) on some platforms: Solaris 8, Mingw, OpenBSD 4.0. @item This function fails to parse C99 hexadecimal floating point on some platforms: Solaris 8, Mingw, OpenBSD 4.0. @item This function fails to correctly parse very long strings on some platforms: Mingw, Cygwin. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/atoi.texi������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atoi @section @code{atoi} @findex atoi POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/atol.texi������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atol @section @code{atol} @findex atol POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/atoll.texi�����������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node atoll @section @code{atoll} @findex atoll POSIX specification:@* @url{http://www.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, OSF/1 5.1, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/basename.texi��������������������������������������������0000664�0000000�0000000�00000001136�11671051007�0023056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node basename @section @code{basename} @findex basename POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/basename.html} Gnulib 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, Solaris 2.5.1, mingw, MSVC 9, BeOS. @item glibc has 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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/bind.texi������������������������������������������������0000664�0000000�0000000�00000000675�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bind @section @code{bind} @findex bind POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/bind.html} Gnulib module: bind Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes for @code{bind} 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-20111211-stable/doc/posix-functions/bsearch.texi���������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0022714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node bsearch @section @code{bsearch} @findex bsearch POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/btowc.texi�����������������������������������������������0000664�0000000�0000000�00000001311�11671051007�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node btowc @section @code{btowc} @findex btowc POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.6, mingw, Interix 3.5. @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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cabs.texi������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cabs @section @code{cabs} @findex cabs POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/cabsf.texi�����������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0022356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cabsf @section @code{cabsf} @findex cabsf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/cabsl.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cabsl @section @code{cabsl} @findex cabsl POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/cacos.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacos @section @code{cacos} @findex cacos POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/cacosf.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacosf @section @code{cacosf} @findex cacosf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/cacosh.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacosh @section @code{cacosh} @findex cacosh POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/cacoshf.texi���������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacoshf @section @code{cacoshf} @findex cacoshf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/cacoshl.texi���������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacoshl @section @code{cacoshl} @findex cacoshl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/cacosl.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cacosl @section @code{cacosl} @findex cacosl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/calloc.texi����������������������������������������������0000664�0000000�0000000�00000001067�11671051007�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node calloc @section @code{calloc} @findex calloc POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize Extension: Gnulib provides a module @samp{calloc-gnu} that substitutes a @code{calloc} implementation that behaves more like the glibc implementation. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/carg.texi������������������������������������������������0000664�0000000�0000000�00000000742�11671051007�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node carg @section @code{carg} @findex carg POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ������������������������������gnulib-20111211-stable/doc/posix-functions/cargf.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cargf @section @code{cargf} @findex cargf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/cargl.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cargl @section @code{cargl} @findex cargl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/casin.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casin @section @code{casin} @findex casin POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/casinf.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinf @section @code{casinf} @findex casinf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/casinh.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinh @section @code{casinh} @findex casinh POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/casinhf.texi���������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinhf @section @code{casinhf} @findex casinhf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/casinhl.texi���������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinhl @section @code{casinhl} @findex casinhl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/casinl.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node casinl @section @code{casinl} @findex casinl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/catan.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catan @section @code{catan} @findex catan POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/catanf.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanf @section @code{catanf} @findex catanf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/catanh.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanh @section @code{catanh} @findex catanh POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/catanhf.texi���������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanhf @section @code{catanhf} @findex catanhf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/catanhl.texi���������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanhl @section @code{catanhl} @findex catanhl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/catanl.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catanl @section @code{catanl} @findex catanl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/catclose.texi��������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0023100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catclose @section @code{catclose} @findex catclose POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/catgets.texi���������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catgets @section @code{catgets} @findex catgets POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/catopen.texi���������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node catopen @section @code{catopen} @findex catopen POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cbrt.texi������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0022234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cbrt @section @code{cbrt} @findex cbrt POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/cbrt.html} Gnulib module: cbrt Portability problems fixed 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-20111211-stable/doc/posix-functions/cbrtf.texi�����������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cbrtf @section @code{cbrtf} @findex cbrtf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/cbrtf.html} Gnulib module: --- Portability problems fixed 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-20111211-stable/doc/posix-functions/cbrtl.texi�����������������������������������������������0000664�0000000�0000000�00000000724�11671051007�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cbrtl @section @code{cbrtl} @findex cbrtl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/cbrtl.html} Gnulib 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, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������gnulib-20111211-stable/doc/posix-functions/ccos.texi������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccos @section @code{ccos} @findex ccos POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/ccosf.texi�����������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccosf @section @code{ccosf} @findex ccosf POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/ccosh.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccosh @section @code{ccosh} @findex ccosh POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/ccoshf.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccoshf @section @code{ccoshf} @findex ccoshf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/ccoshl.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccoshl @section @code{ccoshl} @findex ccoshl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/ccosl.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ccosl @section @code{ccosl} @findex ccosl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/ceil.texi������������������������������������������������0000664�0000000�0000000�00000001211�11671051007�0022211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ceil @section @code{ceil} @findex ceil POSIX specification:@* @url{http://www.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 -1 and 0 on some platforms: AIX 7.1, OSF/1 5.1. @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ceilf.texi�����������������������������������������������0000664�0000000�0000000�00000001526�11671051007�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ceilf @section @code{ceilf} @findex ceilf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems fixed by Gnulib module @code{ceilf-ieee}: @itemize @item This function returns a positive zero for an argument between -1 and 0 on some platforms: MacOS X 10.5, AIX 7.1, OSF/1 5.1. @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ceill.texi�����������������������������������������������0000664�0000000�0000000�00000001437�11671051007�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ceill @section @code{ceill} @findex ceill POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{ceill-ieee}: @itemize @item This function returns a positive zero for an argument between -1 and 0 on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cexp.texi������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cexp @section @code{cexp} @findex cexp POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/cexpf.texi�����������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cexpf @section @code{cexpf} @findex cexpf POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/cexpl.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cexpl @section @code{cexpl} @findex cexpl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/cfgetispeed.texi�����������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cfgetispeed @section @code{cfgetispeed} @findex cfgetispeed POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cfgetospeed.texi�����������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cfgetospeed @section @code{cfgetospeed} @findex cfgetospeed POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cfsetispeed.texi�����������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cfsetispeed @section @code{cfsetispeed} @findex cfsetispeed POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cfsetospeed.texi�����������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cfsetospeed @section @code{cfsetospeed} @findex cfsetospeed POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/chdir.texi�����������������������������������������������0000664�0000000�0000000�00000000655�11671051007�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node chdir @section @code{chdir} @findex chdir POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/chdir.html} Gnulib module: --- 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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/chmod.texi�����������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node chmod @section @code{chmod} @findex chmod POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/chown.texi�����������������������������������������������0000664�0000000�0000000�00000001752�11671051007�0022425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node chown @section @code{chown} @findex chown POSIX specification:@* @url{http://www.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 -1, but no ownership changes resulted: OpenBSD 4.0. @item When passed an argument of -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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/cimag.texi�����������������������������������������������0000664�0000000�0000000�00000000750�11671051007�0022364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cimag @section @code{cimag} @findex cimag POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ������������������������gnulib-20111211-stable/doc/posix-functions/cimagf.texi����������������������������������������������0000664�0000000�0000000�00000000754�11671051007�0022536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cimagf @section @code{cimagf} @findex cimagf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������gnulib-20111211-stable/doc/posix-functions/cimagl.texi����������������������������������������������0000664�0000000�0000000�00000000754�11671051007�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cimagl @section @code{cimagl} @findex cimagl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������gnulib-20111211-stable/doc/posix-functions/clearerr.texi��������������������������������������������0000664�0000000�0000000�00000000460�11671051007�0023101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clearerr @section @code{clearerr} @findex clearerr POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/clock.texi�����������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock @section @code{clock} @findex clock POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/clock_getcpuclockid.texi���������������������������������0000664�0000000�0000000�00000001065�11671051007�0025277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_getcpuclockid @section @code{clock_getcpuclockid} @findex clock_getcpuclockid POSIX specification:@* @url{http://www.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: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/clock_getres.texi����������������������������������������0000664�0000000�0000000�00000000706�11671051007�0023751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_getres @section @code{clock_getres} @findex clock_getres POSIX specification:@* @url{http://www.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: MacOS X 10.5, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/clock_gettime.texi���������������������������������������0000664�0000000�0000000�00000000712�11671051007�0024113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_gettime @section @code{clock_gettime} @findex clock_gettime POSIX specification:@* @url{http://www.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: MacOS X 10.5, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/clock_nanosleep.texi�������������������������������������0000664�0000000�0000000�00000001034�11671051007�0024437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_nanosleep @section @code{clock_nanosleep} @findex clock_nanosleep POSIX specification:@* @url{http://www.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: MacOS 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, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/clock_settime.texi���������������������������������������0000664�0000000�0000000�00000000722�11671051007�0024130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clock_settime @section @code{clock_settime} @findex clock_settime POSIX specification:@* @url{http://www.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: MacOS X 10.5, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/clog.texi������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clog @section @code{clog} @findex clog POSIX specification:@* @url{http://www.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 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, Interix 3.5. @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/clogf.texi�����������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clogf @section @code{clogf} @findex clogf POSIX specification:@* @url{http://www.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 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, Interix 3.5. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/clogl.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node clogl @section @code{clogl} @findex clogl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/close.texi�����������������������������������������������0000664�0000000�0000000�00000001332�11671051007�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node close @section @code{close} @findex close POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/close.html} Gnulib module: close Portability problems fixed by Gnulib: @itemize @item This function crashes when invoked with invalid arguments on some platforms: MSVC 9. @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 @item On BeOS, @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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/closedir.texi��������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0023115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node closedir @section @code{closedir} @findex closedir POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/closelog.texi��������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0023121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node closelog @section @code{closelog} @findex closelog POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/confstr.texi���������������������������������������������0000664�0000000�0000000�00000000622�11671051007�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node confstr @section @code{confstr} @findex confstr POSIX specification:@* @url{http://www.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, IRIX 5.3, Cygwin 1.5.x, mingw, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/conj.texi������������������������������������������������0000664�0000000�0000000�00000000744�11671051007�0022240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node conj @section @code{conj} @findex conj POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������������gnulib-20111211-stable/doc/posix-functions/conjf.texi�����������������������������������������������0000664�0000000�0000000�00000000750�11671051007�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node conjf @section @code{conjf} @findex conjf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ������������������������gnulib-20111211-stable/doc/posix-functions/conjl.texi�����������������������������������������������0000664�0000000�0000000�00000000750�11671051007�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node conjl @section @code{conjl} @findex conjl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������gnulib-20111211-stable/doc/posix-functions/connect.texi���������������������������������������������0000664�0000000�0000000�00000000717�11671051007�0022740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node connect @section @code{connect} @findex connect POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/connect.html} Gnulib module: connect Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes for @code{connect} 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-20111211-stable/doc/posix-functions/copysign.texi��������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0023143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node copysign @section @code{copysign} @findex copysign POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/copysignf.texi�������������������������������������������0000664�0000000�0000000�00000000637�11671051007�0023311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node copysignf @section @code{copysignf} @findex copysignf POSIX specification:@* @url{http://www.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, IRIX 6.5, Solaris 9, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/copysignl.texi�������������������������������������������0000664�0000000�0000000�00000000754�11671051007�0023317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node copysignl @section @code{copysignl} @findex copysignl POSIX specification:@* @url{http://www.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, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������gnulib-20111211-stable/doc/posix-functions/cos.texi�������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0022067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cos @section @code{cos} @findex cos POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/cosf.texi������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cosf @section @code{cosf} @findex cosf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cosh.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cosh @section @code{cosh} @findex cosh POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/coshf.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node coshf @section @code{coshf} @findex coshf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/coshl.texi�����������������������������������������������0000664�0000000�0000000�00000001034�11671051007�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node coshl @section @code{coshl} @findex coshl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cosl.texi������������������������������������������������0000664�0000000�0000000�00000001136�11671051007�0022243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cosl @section @code{cosl} @findex cosl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cpow.texi������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cpow @section @code{cpow} @findex cpow POSIX specification:@* @url{http://www.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 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, Interix 3.5. @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/cpowf.texi�����������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cpowf @section @code{cpowf} @findex cpowf POSIX specification:@* @url{http://www.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 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, Interix 3.5. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/cpowl.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cpowl @section @code{cpowl} @findex cpowl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/cproj.texi�����������������������������������������������0000664�0000000�0000000�00000001027�11671051007�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cproj @section @code{cproj} @findex cproj POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @item The glibc implementation is or was broken. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cprojf.texi����������������������������������������������0000664�0000000�0000000�00000001033�11671051007�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cprojf @section @code{cprojf} @findex cprojf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @item The glibc implementation is or was broken. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/cprojl.texi����������������������������������������������0000664�0000000�0000000�00000001033�11671051007�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cprojl @section @code{cprojl} @findex cprojl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item The glibc implementation is or was broken. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/creal.texi�����������������������������������������������0000664�0000000�0000000�00000000750�11671051007�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node creal @section @code{creal} @findex creal POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ������������������������gnulib-20111211-stable/doc/posix-functions/crealf.texi����������������������������������������������0000664�0000000�0000000�00000000754�11671051007�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node crealf @section @code{crealf} @findex crealf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������gnulib-20111211-stable/doc/posix-functions/creall.texi����������������������������������������������0000664�0000000�0000000�00000000754�11671051007�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node creall @section @code{creall} @findex creall POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������gnulib-20111211-stable/doc/posix-functions/creat.texi�����������������������������������������������0000664�0000000�0000000�00000001213�11671051007�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node creat @section @code{creat} @findex creat POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/creat.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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. @item On platforms where @code{off_t} is a 32-bit type, @code{creat} may not work correctly to create files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/crypt.texi�����������������������������������������������0000664�0000000�0000000�00000001017�11671051007�0022442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node crypt @section @code{crypt} @findex crypt POSIX specification:@* @url{http://www.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: FreeBSD 6.0, NetBSD 5.0, Cygwin, mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/csin.texi������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csin @section @code{csin} @findex csin POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/csinf.texi�����������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinf @section @code{csinf} @findex csinf POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/csinh.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinh @section @code{csinh} @findex csinh POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/csinhf.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinhf @section @code{csinhf} @findex csinhf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/csinhl.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinhl @section @code{csinhl} @findex csinhl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/csinl.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csinl @section @code{csinl} @findex csinl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/csqrt.texi�����������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csqrt @section @code{csqrt} @findex csqrt POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/csqrtf.texi����������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csqrtf @section @code{csqrtf} @findex csqrtf POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/csqrtl.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node csqrtl @section @code{csqrtl} @findex csqrtl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/ctan.texi������������������������������������������������0000664�0000000�0000000�00000000742�11671051007�0022232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctan @section @code{ctan} @findex ctan POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ������������������������������gnulib-20111211-stable/doc/posix-functions/ctanf.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanf @section @code{ctanf} @findex ctanf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/ctanh.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanh @section @code{ctanh} @findex ctanh POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/ctanhf.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanhf @section @code{ctanhf} @findex ctanhf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/ctanhl.texi����������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanhl @section @code{ctanhl} @findex ctanhl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/ctanl.texi�����������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctanl @section @code{ctanl} @findex ctanl POSIX specification:@* @url{http://www.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 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/ctermid.texi���������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctermid @section @code{ctermid} @findex ctermid POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ctime.texi�����������������������������������������������0000664�0000000�0000000�00000001523�11671051007�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctime @section @code{ctime} @findex ctime POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/ctime.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. @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 time stamp 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}. @end itemize A more flexible function is @code{strftime}. However, note that it is locale dependent. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ctime_r.texi���������������������������������������������0000664�0000000�0000000�00000002406�11671051007�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctime_r @section @code{ctime_r} @findex ctime_r POSIX specification:@* @url{http://www.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 2010-11 (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 9. @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-20111211-stable/doc/posix-functions/daylight.texi��������������������������������������������0000664�0000000�0000000�00000001003�11671051007�0023101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node daylight @section @code{daylight} @findex daylight POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, IRIX 6.5, OSF/1 5.1. @item The address of this variable is not a compile-time constant on some platforms: Cygwin, mingw. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_clearerr.texi����������������������������������������0000664�0000000�0000000�00000000715�11671051007�0023726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_clearerr @section @code{dbm_clearerr} @findex dbm_clearerr POSIX specification:@* @url{http://www.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, IRIX 5.3, OSF/1 5.1, Solaris 2.5.1, Cygwin, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_close.texi�������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0023227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_close @section @code{dbm_close} @findex dbm_close POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_delete.texi������������������������������������������0000664�0000000�0000000�00000000624�11671051007�0023370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_delete @section @code{dbm_delete} @findex dbm_delete POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_error.texi�������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_error @section @code{dbm_error} @findex dbm_error POSIX specification:@* @url{http://www.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, IRIX 5.3, OSF/1 4.0, Solaris 2.5.1, Cygwin, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_fetch.texi�������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0023213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_fetch @section @code{dbm_fetch} @findex dbm_fetch POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_firstkey.texi����������������������������������������0000664�0000000�0000000�00000000634�11671051007�0023767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_firstkey @section @code{dbm_firstkey} @findex dbm_firstkey POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_nextkey.texi�����������������������������������������0000664�0000000�0000000�00000000630�11671051007�0023612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_nextkey @section @code{dbm_nextkey} @findex dbm_nextkey POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_open.texi��������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0023066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_open @section @code{dbm_open} @findex dbm_open POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dbm_store.texi�������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0023256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dbm_store @section @code{dbm_store} @findex dbm_store POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/difftime.texi��������������������������������������������0000664�0000000�0000000�00000000460�11671051007�0023071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node difftime @section @code{difftime} @findex difftime POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/dirfd.texi�����������������������������������������������0000664�0000000�0000000�00000001173�11671051007�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dirfd @section @code{dirfd} @findex dirfd POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 10, mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/dirname.texi���������������������������������������������0000664�0000000�0000000�00000001131�11671051007�0022715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dirname @section @code{dirname} @findex dirname POSIX specification:@* @url{http://www.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, Solaris 2.5.1, mingw, MSVC 9, BeOS. @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 that also works with Windows file names. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/div.texi�������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0022065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node div @section @code{div} @findex div POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/dlclose.texi���������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlclose @section @code{dlclose} @findex dlclose POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dlerror.texi���������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlerror @section @code{dlerror} @findex dlerror POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dlopen.texi����������������������������������������������0000664�0000000�0000000�00000000776�11671051007�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlopen @section @code{dlopen} @findex dlopen POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/dlopen.html} Gnulib module: --- Portability problems fixed 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, Interix 3.5, BeOS. @item If the file name argument is not absolute, the file is searched for. The search algorithm is system specific. @end itemize ��gnulib-20111211-stable/doc/posix-functions/dlsym.texi�����������������������������������������������0000664�0000000�0000000�00000001001�11671051007�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlsym @section @code{dlsym} @findex dlsym POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/dlsym.html} Gnulib module: --- Portability problems fixed 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, Interix 3.5, BeOS. @item The visibility of symbols loaded in dependent shared libraries or present in the main executable is system dependent. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dprintf.texi���������������������������������������������0000664�0000000�0000000�00000002115�11671051007�0022747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dprintf @section @code{dprintf} @findex dprintf POSIX specification:@* @url{http://www.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: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems fixed by Gnulib module @code{dprintf-posix}: @itemize @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6. @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 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-20111211-stable/doc/posix-functions/drand48.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node drand48 @section @code{drand48} @findex drand48 POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dup.texi�������������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0022102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dup @section @code{dup} @findex dup POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/dup.html} Gnulib module: dup Portability problems fixed by Gnulib: @itemize @item This function crashes when invoked with invalid arguments on some platforms: MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/dup2.texi������������������������������������������������0000664�0000000�0000000�00000002500�11671051007�0022151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dup2 @section @code{dup2} @findex dup2 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/dup2.html} Gnulib module: dup2 or dup2-obsolete Portability problems fixed by either Gnulib module @code{dup2} or @code{dup2-obsolete}: @itemize @item This function always returns 0 for success on some platforms: mingw, MSVC 9. @item This function can hang when duplicating an fd to itself on some platforms: mingw, MSVC 9. @item This function crashes when invoked with invalid arguments on some platforms: MSVC 9. @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 extremely large targets, which interferes with using @code{dup2(fd,fd)==fd)} as the minimal @code{EBADF} filter: FreeBSD 6.1, Cygwin 1.5. @end itemize Portability problems fixed by Gnulib module @code{dup2-obsolete}: @itemize @item This function is missing on some older platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/duplocale.texi�������������������������������������������0000664�0000000�0000000�00000001167�11671051007�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node duplocale @section @code{duplocale} @findex duplocale POSIX specification:@* @url{http://www.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. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on many platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/encrypt.texi���������������������������������������������0000664�0000000�0000000�00000001035�11671051007�0022765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node encrypt @section @code{encrypt} @findex encrypt POSIX specification:@* @url{http://www.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, Minix 3.1.8, Cygwin, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/posix-functions/endgrent.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endgrent @section @code{endgrent} @findex endgrent POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/endhostent.texi������������������������������������������0000664�0000000�0000000�00000000577�11671051007�0023466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endhostent @section @code{endhostent} @findex endhostent POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/endnetent.texi�������������������������������������������0000664�0000000�0000000�00000000603�11671051007�0023265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endnetent @section @code{endnetent} @findex endnetent POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/endprotoent.texi�����������������������������������������0000664�0000000�0000000�00000000603�11671051007�0023642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endprotoent @section @code{endprotoent} @findex endprotoent POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/endpwent.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endpwent @section @code{endpwent} @findex endpwent POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/endservent.texi������������������������������������������0000664�0000000�0000000�00000000577�11671051007�0023470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endservent @section @code{endservent} @findex endservent POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/endutxent.texi�������������������������������������������0000664�0000000�0000000�00000000660�11671051007�0023322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node endutxent @section @code{endutxent} @findex endutxent POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/environ.texi���������������������������������������������0000664�0000000�0000000�00000001757�11671051007�0022774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node environ @section @code{environ} @findex environ POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, IRIX 6.5, Solaris 11 2010-11. @item On MacOS X 10, this variable is not declared. Up to MacOS 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 X 10.5. 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 X. @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. @end itemize �����������������gnulib-20111211-stable/doc/posix-functions/erand48.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erand48 @section @code{erand48} @findex erand48 POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/erf.texi�������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0022060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erf @section @code{erf} @findex erf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/erfc.texi������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erfc @section @code{erfc} @findex erfc POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/erfcf.texi�����������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erfcf @section @code{erfcf} @findex erfcf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/erfcl.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erfcl @section @code{erfcl} @findex erfcl POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/erff.texi������������������������������������������������0000664�0000000�0000000�00000000617�11671051007�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erff @section @code{erff} @findex erff POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/erfl.texi������������������������������������������������0000664�0000000�0000000�00000000716�11671051007�0022236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node erfl @section @code{erfl} @findex erfl POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������gnulib-20111211-stable/doc/posix-functions/errno.texi�����������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node errno @section @code{errno} @findex errno POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/execl.texi�����������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execl @section @code{execl} @findex execl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/execl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/execle.texi����������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execle @section @code{execle} @findex execle POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/execle.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/execlp.texi����������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execlp @section @code{execlp} @findex execlp POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/execlp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/execv.texi�����������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execv @section @code{execv} @findex execv POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/execv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/execve.texi����������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0022561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execve @section @code{execve} @findex execve POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/execve.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/execvp.texi����������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0022574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node execvp @section @code{execvp} @findex execvp POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/execvp.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/exit.texi������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exit @section @code{exit} @findex exit POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/exp.texi�������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0022077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exp @section @code{exp} @findex exp POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/exp2.texi������������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exp2 @section @code{exp2} @findex exp2 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/exp2.html} Gnulib 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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/exp2f.texi�����������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exp2f @section @code{exp2f} @findex exp2f POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/exp2f.html} Gnulib 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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/exp2l.texi�����������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node exp2l @section @code{exp2l} @findex exp2l POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/exp2l.html} Gnulib 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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/expf.texi������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expf @section @code{expf} @findex expf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������gnulib-20111211-stable/doc/posix-functions/expl.texi������������������������������������������������0000664�0000000�0000000�00000001136�11671051007�0022253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expl @section @code{expl} @findex expl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/expm1.texi�����������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0022337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expm1 @section @code{expm1} @findex expm1 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/expm1.html} Gnulib module: --- Portability problems fixed 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-20111211-stable/doc/posix-functions/expm1f.texi����������������������������������������������0000664�0000000�0000000�00000000624�11671051007�0022504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expm1f @section @code{expm1f} @findex expm1f POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/expm1f.html} Gnulib module: --- Portability problems fixed 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-20111211-stable/doc/posix-functions/expm1l.texi����������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node expm1l @section @code{expm1l} @findex expm1l POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/expm1l.html} Gnulib 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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/fabs.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fabs @section @code{fabs} @findex fabs POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/fabsf.texi�����������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fabsf @section @code{fabsf} @findex fabsf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fabsl.texi�����������������������������������������������0000664�0000000�0000000�00000001017�11671051007�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fabsl @section @code{fabsl} @findex fabsl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fabsl.html} Gnulib 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, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/faccessat.texi�������������������������������������������0000664�0000000�0000000�00000001663�11671051007�0023244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node faccessat @section @code{faccessat} @findex faccessat POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. However, the replacement does not always take into account ACLs. Also, it is not safe to be used in libraries and is not multithread-safe. @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. @end itemize �����������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fattach.texi���������������������������������������������0000664�0000000�0000000�00000000711�11671051007�0022713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fattach @section @code{fattach} @findex fattach POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fchdir.texi����������������������������������������������0000664�0000000�0000000�00000001036�11671051007�0022541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchdir @section @code{fchdir} @findex fchdir POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fchdir.html} Gnulib module: fchdir Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Tandem/NSK, mingw, MSVC 9, BeOS. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function is not declared on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fchmod.texi����������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchmod @section @code{fchmod} @findex fchmod POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fchmodat.texi��������������������������������������������0000664�0000000�0000000�00000001723�11671051007�0023072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchmodat @section @code{fchmodat} @findex fchmodat POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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 @item Some platforms do not allow changing the access bits on symbolic links. POSIX states that @code{fchmodat(@dots{},AT_SYMLINK_NOFOLLOW)} may fail with @code{EOPNOTSUPP} when called on a symlink, but some platforms, as well as the gnulib replacement, fail for any use of AT_SYMLINK_NOFOLLOW even if the target was not a symlink: glibc, Cygwin. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/fchown.texi����������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchown @section @code{fchown} @findex fchown POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fchownat.texi��������������������������������������������0000664�0000000�0000000�00000002120�11671051007�0023106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fchownat @section @code{fchownat} @findex fchownat POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fchownat.html} Gnulib module: fchownat Portability problems fixed by Gnulib: @itemize @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. @item This function is missing on some platforms: glibc 2.3.6, MacOS 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, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fclose.texi����������������������������������������������0000664�0000000�0000000�00000001507�11671051007�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fclose @section @code{fclose} @findex fclose POSIX specification:@* @url{http://www.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.13, FreeBSD. @item This function crashes if the stream's file descriptor has already been closed on some platforms: MSVC 9. @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-20111211-stable/doc/posix-functions/fcntl.texi�����������������������������������������������0000664�0000000�0000000�00000002156�11671051007�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fcntl @section @code{fcntl} @findex fcntl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fcntl.html} Gnulib module: fcntl Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @item This function does not support @code{F_DUPFD_CLOEXEC} on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.1, Interix 3.5, BeOS. Note that the gnulib replacement code is functional but not atomic. @item The @code{F_DUPFD} action of this function does not reject out-of-range targets properly on some platforms: Cygwin 1.5.x, Haiku. @item The @code{F_DUPFD} action of this function mistakenly clears 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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fdatasync.texi�������������������������������������������0000664�0000000�0000000�00000001053�11671051007�0023255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdatasync @section @code{fdatasync} @findex fdatasync POSIX specification:@* @url{http://www.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: MacOS X 10.7. @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fdetach.texi���������������������������������������������0000664�0000000�0000000�00000000711�11671051007�0022677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdetach @section @code{fdetach} @findex fdetach POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fdim.texi������������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdim @section @code{fdim} @findex fdim POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fdimf.texi�����������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdimf @section @code{fdimf} @findex fdimf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/fdiml.texi�����������������������������������������������0000664�0000000�0000000�00000000741�11671051007�0022377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdiml @section @code{fdiml} @findex fdiml POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������gnulib-20111211-stable/doc/posix-functions/fdopen.texi����������������������������������������������0000664�0000000�0000000�00000000753�11671051007�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdopen @section @code{fdopen} @findex fdopen POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/fdopendir.texi�������������������������������������������0000664�0000000�0000000�00000002023�11671051007�0023251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fdopendir @section @code{fdopendir} @findex fdopendir POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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-20111211-stable/doc/posix-functions/feclearexcept.texi���������������������������������������0000664�0000000�0000000�00000000765�11671051007�0024124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feclearexcept @section @code{feclearexcept} @findex feclearexcept POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize �����������gnulib-20111211-stable/doc/posix-functions/fegetenv.texi��������������������������������������������0000664�0000000�0000000�00000000743�11671051007�0023111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fegetenv @section @code{fegetenv} @findex fegetenv POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize �����������������������������gnulib-20111211-stable/doc/posix-functions/fegetexceptflag.texi�������������������������������������0000664�0000000�0000000�00000000775�11671051007�0024450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fegetexceptflag @section @code{fegetexceptflag} @findex fegetexceptflag POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize ���gnulib-20111211-stable/doc/posix-functions/fegetround.texi������������������������������������������0000664�0000000�0000000�00000000721�11671051007�0023444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fegetround @section @code{fegetround} @findex fegetround POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �����������������������������������������������gnulib-20111211-stable/doc/posix-functions/feholdexcept.texi����������������������������������������0000664�0000000�0000000�00000000746�11671051007�0023763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feholdexcept @section @code{feholdexcept} @findex feholdexcept POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/feof.texi������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feof @section @code{feof} @findex feof POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/feraiseexcept.texi���������������������������������������0000664�0000000�0000000�00000000767�11671051007�0024143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feraiseexcept @section @code{feraiseexcept} @findex feraiseexcept POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize ���������gnulib-20111211-stable/doc/posix-functions/ferror.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ferror @section @code{ferror} @findex ferror POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/fesetenv.texi��������������������������������������������0000664�0000000�0000000�00000000741�11671051007�0023123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fesetenv @section @code{fesetenv} @findex fesetenv POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize �������������������������������gnulib-20111211-stable/doc/posix-functions/fesetexceptflag.texi�������������������������������������0000664�0000000�0000000�00000000777�11671051007�0024466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fesetexceptflag @section @code{fesetexceptflag} @findex fesetexceptflag POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize �gnulib-20111211-stable/doc/posix-functions/fesetround.texi������������������������������������������0000664�0000000�0000000�00000000721�11671051007�0023460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fesetround @section @code{fesetround} @findex fesetround POSIX specification:@* @url{http://www.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, Interix 3.5. @end itemize �����������������������������������������������gnulib-20111211-stable/doc/posix-functions/fetestexcept.texi����������������������������������������0000664�0000000�0000000�00000000761�11671051007�0024011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fetestexcept @section @code{fetestexcept} @findex fetestexcept POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize ���������������gnulib-20111211-stable/doc/posix-functions/feupdateenv.texi�����������������������������������������0000664�0000000�0000000�00000000757�11671051007�0023621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node feupdateenv @section @code{feupdateenv} @findex feupdateenv POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.7.7, MSVC 9, Interix 3.5. @end itemize �����������������gnulib-20111211-stable/doc/posix-functions/fexecve.texi���������������������������������������������0000664�0000000�0000000�00000001025�11671051007�0022725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fexecve @section @code{fexecve} @findex fexecve POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fflush.texi����������������������������������������������0000664�0000000�0000000�00000003066�11671051007�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fflush @section @code{fflush} @findex fflush POSIX specification:@* @url{http://www.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. @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 9. @item @code{fflush} on an input stream right after @code{ungetc} does not discard the @code{ungetc} buffer, on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, 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 9. @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 9. @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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ffs.texi�������������������������������������������������0000664�0000000�0000000�00000000535�11671051007�0022063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ffs @section @code{ffs} @findex ffs POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fgetc.texi�����������������������������������������������0000664�0000000�0000000�00000001560�11671051007�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgetc @section @code{fgetc} @findex fgetc POSIX specification:@* @url{http://www.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 9. @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 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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fgetpos.texi���������������������������������������������0000664�0000000�0000000�00000001622�11671051007�0022752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgetpos @section @code{fgetpos} @findex fgetpos POSIX specification:@* @url{http://www.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 9. @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. @item On platforms where @code{off_t} is a 64-bit type, but @code{fseeko} is not present, stream operations on files larger than 2 GB silently do the wrong thing. This affects BSD/OS, which is mostly obsolete. @end itemize ��������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fgets.texi�����������������������������������������������0000664�0000000�0000000�00000001224�11671051007�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgets @section @code{fgets} @findex fgets POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/fgetwc.texi����������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgetwc @section @code{fgetwc} @findex fgetwc POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fgetws.texi����������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0022573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fgetws @section @code{fgetws} @findex fgetws POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fileno.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fileno @section @code{fileno} @findex fileno POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/flockfile.texi�������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0023236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node flockfile @section @code{flockfile} @findex flockfile POSIX specification:@* @url{http://www.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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/floor.texi�����������������������������������������������0000664�0000000�0000000�00000001036�11671051007�0022423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node floor @section @code{floor} @findex floor POSIX specification:@* @url{http://www.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 @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/floorf.texi����������������������������������������������0000664�0000000�0000000�00000001335�11671051007�0022573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node floorf @section @code{floorf} @findex floorf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems fixed by Gnulib module @code{floorf-ieee}: @itemize @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/floorl.texi����������������������������������������������0000664�0000000�0000000�00000001064�11671051007�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node floorl @section @code{floorl} @findex floorl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/fma.texi�������������������������������������������������0000664�0000000�0000000�00000001122�11671051007�0022041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fma @section @code{fma} @findex fma POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @item This function produces wrong results on some platforms: glibc 2.11, MacOS X 10.5, FreeBSD 6.4/x86, OSF/1 5.1, Cygwin 1.5, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fmaf.texi������������������������������������������������0000664�0000000�0000000�00000001127�11671051007�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaf @section @code{fmaf} @findex fmaf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @item This function produces wrong results on some platforms: glibc 2.11, MacOS X 10.5, FreeBSD 6.4/x86, OSF/1 5.1, Cygwin 1.5, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fmal.texi������������������������������������������������0000664�0000000�0000000�00000001131�11671051007�0022215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmal @section @code{fmal} @findex fmal POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @item This function produces wrong results on some platforms: glibc 2.11, MacOS X 10.5, FreeBSD 6.4/x86, OSF/1 5.1, mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fmax.texi������������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmax @section @code{fmax} @findex fmax POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fmaxf.texi�����������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaxf @section @code{fmaxf} @findex fmaxf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/fmaxl.texi�����������������������������������������������0000664�0000000�0000000�00000000741�11671051007�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmaxl @section @code{fmaxl} @findex fmaxl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������gnulib-20111211-stable/doc/posix-functions/fmemopen.texi��������������������������������������������0000664�0000000�0000000�00000001031�11671051007�0023103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmemopen @section @code{fmemopen} @findex fmemopen POSIX specification:@* @url{http://www.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: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fmin.texi������������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmin @section @code{fmin} @findex fmin POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fminf.texi�����������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fminf @section @code{fminf} @findex fminf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/fminl.texi�����������������������������������������������0000664�0000000�0000000�00000000741�11671051007�0022411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fminl @section @code{fminl} @findex fminl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������gnulib-20111211-stable/doc/posix-functions/fmod.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmod @section @code{fmod} @findex fmod POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fmod.html} Gnulib module: fmod Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fmodf.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmodf @section @code{fmodf} @findex fmodf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fmodf.html} Gnulib module: fmodf 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-20111211-stable/doc/posix-functions/fmodl.texi�����������������������������������������������0000664�0000000�0000000�00000001034�11671051007�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmodl @section @code{fmodl} @findex fmodl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fmodl.html} Gnulib 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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fmtmsg.texi����������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmtmsg @section @code{fmtmsg} @findex fmtmsg POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fnmatch.texi���������������������������������������������0000664�0000000�0000000�00000000717�11671051007�0022727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fnmatch @section @code{fnmatch} @findex fnmatch POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fnmatch.html} Gnulib module: fnmatch or fnmatch-gnu Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, mingw, MSVC 9. @item This function is broken in some versions of Solaris and glibc. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fopen.texi�����������������������������������������������0000664�0000000�0000000�00000002622�11671051007�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fopen @section @code{fopen} @findex fopen POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fopen.html} Gnulib module: fopen Portability problems fixed by Gnulib: @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, Irix 5.3. @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 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-20111211-stable/doc/posix-functions/fork.texi������������������������������������������������0000664�0000000�0000000�00000001457�11671051007�0022252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fork @section @code{fork} @findex fork POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/fpathconf.texi�������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0023260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fpathconf @section @code{fpathconf} @findex fpathconf POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fpclassify.texi������������������������������������������0000664�0000000�0000000�00000000704�11671051007�0023446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fpclassify @section @code{fpclassify} @findex fpclassify POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5. @end itemize ������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fprintf.texi���������������������������������������������0000664�0000000�0000000�00000006716�11671051007�0022764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fprintf @section @code{fprintf} @findex fprintf POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @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 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @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: MacOS X 10.3, FreeBSD 6.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 9. @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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/fputc.texi�����������������������������������������������0000664�0000000�0000000�00000002441�11671051007�0022424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fputc @section @code{fputc} @findex fputc POSIX specification:@* @url{http://www.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 9. @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 9. @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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fputs.texi�����������������������������������������������0000664�0000000�0000000�00000002105�11671051007�0022441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fputs @section @code{fputs} @findex fputs POSIX specification:@* @url{http://www.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 9. @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 9. @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-20111211-stable/doc/posix-functions/fputwc.texi����������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fputwc @section @code{fputwc} @findex fputwc POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fputws.texi����������������������������������������������0000664�0000000�0000000�00000001252�11671051007�0022632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fputws @section @code{fputws} @findex fputws POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/fread.texi�����������������������������������������������0000664�0000000�0000000�00000001560�11671051007�0022365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fread @section @code{fread} @findex fread POSIX specification:@* @url{http://www.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 9. @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 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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/free.texi������������������������������������������������0000664�0000000�0000000�00000000760�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node free @section @code{free} @findex free POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/free.html} Gnulib module: free Portability problems fixed by Gnulib: @itemize @item On old platforms such as SunOS4, @code{free (NULL)} fails. However, since all such systems are so old as to no longer be considered ``reasonable portability targets,'' this module is no longer useful. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������gnulib-20111211-stable/doc/posix-functions/freeaddrinfo.texi����������������������������������������0000664�0000000�0000000�00000000727�11671051007�0023740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node freeaddrinfo @section @code{freeaddrinfo} @findex freeaddrinfo POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 7, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/freelocale.texi������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0023375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node freelocale @section @code{freelocale} @findex freelocale POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/freopen.texi���������������������������������������������0000664�0000000�0000000�00000002426�11671051007�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node freopen @section @code{freopen} @findex freopen POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/freopen.html} Gnulib module: freopen Portability problems fixed by Gnulib: @itemize @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, OSF/1 5.1, Solaris 10, mingw, MSVC 9. @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, Irix 5.3. @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 freopen-safer can at least protect @code{stdin}, @code{stdout}, and @code{stderr}. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/frexp.texi�����������������������������������������������0000664�0000000�0000000�00000001074�11671051007�0022430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node frexp @section @code{frexp} @findex frexp POSIX specification:@* @url{http://www.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 9. @item This function does not work on infinite numbers on some platforms: IRIX 6.5, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/frexpf.texi����������������������������������������������0000664�0000000�0000000�00000001230�11671051007�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node frexpf @section @code{frexpf} @findex frexpf POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/frexpl.texi����������������������������������������������0000664�0000000�0000000�00000001632�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node frexpl @section @code{frexpl} @findex frexpl POSIX specification:@* @url{http://www.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, Interix 3.5. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @item This function does not work on finite numbers on some platforms: MacOS X 10.4/PowerPC, AIX 5.1, MSVC 9, BeOS. @item This function does not work on denormalized numbers on some platforms: MacOS X 10.5/i386. @item This function does not work on infinite numbers on some platforms: IRIX 6.5, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fscanf.texi����������������������������������������������0000664�0000000�0000000�00000001420�11671051007�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fscanf @section @code{fscanf} @findex fscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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 9. @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-20111211-stable/doc/posix-functions/fseek.texi�����������������������������������������������0000664�0000000�0000000�00000001266�11671051007�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fseek @section @code{fseek} @findex fseek POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/fseeko.texi����������������������������������������������0000664�0000000�0000000�00000001721�11671051007�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fseeko @section @code{fseeko} @findex fseeko POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/fseeko.html} Gnulib module: fseeko Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, OSF/1 4.0, Solaris 2.5.1, mingw, MSVC 9. @item The declaration of @code{fseeko} in @code{<stdio.h>} is not enabled by default on some platforms: glibc 2.3.6, OSF/1 5.1. @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 @item On platforms where @code{off_t} is a 64-bit type, but @code{fseeko} is not present, stream operations on files larger than 2 GB silently do the wrong thing. This affects BSD/OS, which is mostly obsolete. @end itemize �����������������������������������������������gnulib-20111211-stable/doc/posix-functions/fsetpos.texi���������������������������������������������0000664�0000000�0000000�00000000732�11671051007�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fsetpos @section @code{fsetpos} @findex fsetpos POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/fstat.texi�����������������������������������������������0000664�0000000�0000000�00000001400�11671051007�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fstat @section @code{fstat} @findex fstat POSIX specification:@* @url{http://www.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 9. @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}.) @end itemize Portability problems not fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/fstatat.texi���������������������������������������������0000664�0000000�0000000�00000002367�11671051007�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fstatat @section @code{fstatat} @findex fstatat POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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. @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), @code{st_ino} is always 0. @item On some file systems, @code{st_size} contains bogus information for symlinks; use the gnulib module areadlink-with-size for a better way to get symlink contents. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fstatvfs.texi��������������������������������������������0000664�0000000�0000000�00000001215�11671051007�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fstatvfs @section @code{fstatvfs} @findex fstatvfs POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/fsync.texi�����������������������������������������������0000664�0000000�0000000�00000000547�11671051007�0022432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fsync @section @code{fsync} @findex fsync POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ftell.texi�����������������������������������������������0000664�0000000�0000000�00000002073�11671051007�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftell @section @code{ftell} @findex ftell POSIX specification:@* @url{http://www.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 9. @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. @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 9. @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-20111211-stable/doc/posix-functions/ftello.texi����������������������������������������������0000664�0000000�0000000�00000002673�11671051007�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftello @section @code{ftello} @findex ftello POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/ftello.html} Gnulib module: ftello Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, OSF/1 4.0, Solaris 2.5.1, mingw, MSVC 9. @item The declaration of @code{ftello} in @code{<stdio.h>} is not enabled by default on some platforms: glibc 2.3.6, OSF/1 5.1. @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 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 9. @item On platforms where @code{off_t} is a 64-bit type, but @code{fseeko} is not present, stream operations on files larger than 2 GB silently do the wrong thing. This affects BSD/OS, which is mostly obsolete. @end itemize ���������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ftok.texi������������������������������������������������0000664�0000000�0000000�00000000547�11671051007�0022253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftok @section @code{ftok} @findex ftok POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ftruncate.texi�������������������������������������������0000664�0000000�0000000�00000001063�11671051007�0023275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftruncate @section @code{ftruncate} @findex ftruncate POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/ftrylockfile.texi����������������������������������������0000664�0000000�0000000�00000000633�11671051007�0024001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftrylockfile @section @code{ftrylockfile} @findex ftrylockfile POSIX specification:@* @url{http://www.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, Solaris 2.4, mingw, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ftw.texi�������������������������������������������������0000664�0000000�0000000�00000001142�11671051007�0022100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftw @section @code{ftw} @findex ftw POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/posix-functions/funlockfile.texi�����������������������������������������0000664�0000000�0000000�00000000612�11671051007�0023602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node funlockfile @section @code{funlockfile} @findex funlockfile POSIX specification:@* @url{http://www.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 9. @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/futimens.texi��������������������������������������������0000664�0000000�0000000�00000003236�11671051007�0023140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node futimens @section @code{futimens} @findex futimens POSIX specification:@* @url{http://www.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.3.6, MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. However, the replacement function may end up truncating timestamps to less 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. @item Passing @code{AT_FDCWD} as the fd argument does not properly fail with @code{EBADF} on some systems: glibc 2.11, 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-20111211-stable/doc/posix-functions/fwide.texi�����������������������������������������������0000664�0000000�0000000�00000001246�11671051007�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fwide @section @code{fwide} @findex fwide POSIX specification:@* @url{http://www.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, Solaris 2.6, Cygwin 1.5.x, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/fwprintf.texi��������������������������������������������0000664�0000000�0000000�00000001343�11671051007�0023142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fwprintf @section @code{fwprintf} @findex fwprintf POSIX specification:@* @url{http://www.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 This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/fwrite.texi����������������������������������������������0000664�0000000�0000000�00000002445�11671051007�0022607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fwrite @section @code{fwrite} @findex fwrite POSIX specification:@* @url{http://www.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 9. @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 9. @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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/fwscanf.texi���������������������������������������������0000664�0000000�0000000�00000001106�11671051007�0022727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fwscanf @section @code{fwscanf} @findex fwscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/gai_strerror.texi����������������������������������������0000664�0000000�0000000�00000001304�11671051007�0024002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gai_strerror @section @code{gai_strerror} @findex gai_strerror POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 7, Cygwin 1.5.x, Interix 3.5, BeOS. @item This function is only available in @code{<ws2tcpip.h>} on some platforms: mingw, MSVC 9. @item This function's return type is @code{char *} instead of @code{const char *} on some platforms: AIX 7.1, HP-UX 11, OSF/1 5.1, Solaris 9, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getaddrinfo.texi�����������������������������������������0000664�0000000�0000000�00000001067�11671051007�0023574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getaddrinfo @section @code{getaddrinfo} @findex getaddrinfo POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 7, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @item On Windows, this function is declared in @code{<ws2tcpip.h>} rather than in @code{<netdb.h>}. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getc.texi������������������������������������������������0000664�0000000�0000000�00000001220�11671051007�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getc @section @code{getc} @findex getc POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/getc_unlocked.texi���������������������������������������0000664�0000000�0000000�00000000622�11671051007�0024110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getc_unlocked @section @code{getc_unlocked} @findex getc_unlocked POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getchar.texi���������������������������������������������0000664�0000000�0000000�00000001234�11671051007�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getchar @section @code{getchar} @findex getchar POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/getchar_unlocked.texi������������������������������������0000664�0000000�0000000�00000000636�11671051007�0024610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getchar_unlocked @section @code{getchar_unlocked} @findex getchar_unlocked POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getcwd.texi����������������������������������������������0000664�0000000�0000000�00000003275�11671051007�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getcwd @section @code{getcwd} @findex getcwd POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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 9. @item On glibc 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 9. @item On some platforms, @code{getcwd (buf, 0)} fails with @code{ERANGE} instead of the required @code{EINVAL}: mingw, MSVC 9. @end itemize Portability problems fixed by Gnulib module @code{getcwd}: @itemize @item This function is missing on some older platforms. @item This function does not handle long file names (greater than @code{PATH_MAX}) correctly on some platforms: glibc on Linux 2.4.20, MacOS X 10.5, FreeBSD 6.4, NetBSD 5.1, OpenBSD 4.9, 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 9, 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-20111211-stable/doc/posix-functions/getdate.texi���������������������������������������������0000664�0000000�0000000�00000001132�11671051007�0022714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getdate @section @code{getdate} @findex getdate POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/posix-functions/getdate_err.texi�����������������������������������������0000664�0000000�0000000�00000000741�11671051007�0023571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getdate_err @section @code{getdate_err} @findex getdate_err POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������������������������gnulib-20111211-stable/doc/posix-functions/getdelim.texi��������������������������������������������0000664�0000000�0000000�00000001463�11671051007�0023100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getdelim @section @code{getdelim} @findex getdelim POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getdelim.html} Gnulib module: getdelim Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5. @item This function is missing a declaration on some platforms: BeOS. @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-20111211-stable/doc/posix-functions/getegid.texi���������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getegid @section @code{getegid} @findex getegid POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getenv.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getenv @section @code{getenv} @findex getenv POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/geteuid.texi���������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node geteuid @section @code{geteuid} @findex geteuid POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getgid.texi����������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgid @section @code{getgid} @findex getgid POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getgrent.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrent @section @code{getgrent} @findex getgrent POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getgrgid.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrgid @section @code{getgrgid} @findex getgrgid POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getgrgid_r.texi������������������������������������������0000664�0000000�0000000�00000001044�11671051007�0023416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrgid_r @section @code{getgrgid_r} @findex getgrgid_r POSIX specification:@* @url{http://www.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 2010-11 (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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getgrnam.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrnam @section @code{getgrnam} @findex getgrnam POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getgrnam_r.texi������������������������������������������0000664�0000000�0000000�00000001044�11671051007�0023426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgrnam_r @section @code{getgrnam_r} @findex getgrnam_r POSIX specification:@* @url{http://www.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 2010-11 (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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getgroups.texi�������������������������������������������0000664�0000000�0000000�00000002045�11671051007�0023322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getgroups @section @code{getgroups} @findex getgroups POSIX specification:@* @url{http://www.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 9. @item On some platforms, this function fails to reject a negative count, even though that is less than the size that would be returned: FreeBSD 7.2. @item On Ultrix 4.3, @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 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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/gethostent.texi������������������������������������������0000664�0000000�0000000�00000000624�11671051007�0023470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostent @section @code{gethostent} @findex gethostent POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/gethostid.texi�������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0023276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostid @section @code{gethostid} @findex gethostid POSIX specification:@* @url{http://www.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, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/gethostname.texi�����������������������������������������0000664�0000000�0000000�00000001346�11671051007�0023624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gethostname @section @code{gethostname} @findex gethostname POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/gethostname.html} Gnulib module: gethostname Portability problems fixed by Gnulib: @itemize @item On mingw and MSVC 9, 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: OSF/1 5.1, 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-20111211-stable/doc/posix-functions/getitimer.texi�������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0023300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getitimer @section @code{getitimer} @findex getitimer POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getline.texi���������������������������������������������0000664�0000000�0000000�00000001641�11671051007�0022733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getline @section @code{getline} @findex getline POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getline.html} Gnulib module: getline Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5. @item This function is missing a declaration on some platforms: AIX 7.1, BeOS. @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-20111211-stable/doc/posix-functions/getlogin.texi��������������������������������������������0000664�0000000�0000000�00000000744�11671051007�0023117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getlogin @section @code{getlogin} @findex getlogin POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getlogin.html} Gnulib module: getlogin Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/getlogin_r.texi������������������������������������������0000664�0000000�0000000�00000002043�11671051007�0023432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getlogin_r @section @code{getlogin_r} @findex getlogin_r POSIX specification:@* @url{http://www.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 9. @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 2010-11 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @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: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/getmsg.texi����������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getmsg @section @code{getmsg} @findex getmsg POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getnameinfo.texi�����������������������������������������0000664�0000000�0000000�00000000723�11671051007�0023600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getnameinfo @section @code{getnameinfo} @findex getnameinfo POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 7, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/getnetbyaddr.texi����������������������������������������0000664�0000000�0000000�00000000617�11671051007�0023762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getnetbyaddr @section @code{getnetbyaddr} @findex getnetbyaddr POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getnetbyname.texi����������������������������������������0000664�0000000�0000000�00000000617�11671051007�0023770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getnetbyname @section @code{getnetbyname} @findex getnetbyname POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getnetent.texi�������������������������������������������0000664�0000000�0000000�00000000603�11671051007�0023276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getnetent @section @code{getnetent} @findex getnetent POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getopt.texi����������������������������������������������0000664�0000000�0000000�00000005755�11671051007�0022620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getopt @section @code{getopt} @findex getopt POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getopt.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 The @code{getopt} function keeps some internal state that cannot be explicitly reset on some platforms: mingw. @item The value of @code{optind} after a missing required argument is wrong on some platforms: MacOS 10.5, AIX 7.1. @end itemize Portability problems fixed by Gnulib module @code{getopt-gnu}: @itemize @item This function is missing on some platforms: MSVC 9. @item The function @code{getopt} does not support the @samp{+} flag in the options string on some platforms: MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, 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 X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, 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, OSF/1 5.1, Solaris 9, MSVC 9, Interix 3.5. @item The function @code{getopt_long_only} is missing on some platforms: MacOS X 10.3, FreeBSD 5.2.1, NetBSD 5.0, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw, MSVC 9, Interix 3.5. @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-20111211-stable/doc/posix-functions/getpeername.texi�����������������������������������������0000664�0000000�0000000�00000001142�11671051007�0023574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpeername @section @code{getpeername} @findex getpeername POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getpeername.html} Gnulib module: getpeername Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes for @code{getpeername} are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @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-20111211-stable/doc/posix-functions/getpgid.texi���������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpgid @section @code{getpgid} @findex getpgid POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getpgrp.texi���������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpgrp @section @code{getpgrp} @findex getpgrp POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getpid.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpid @section @code{getpid} @findex getpid POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/getpmsg.texi���������������������������������������������0000664�0000000�0000000�00000000711�11671051007�0022747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpmsg @section @code{getpmsg} @findex getpmsg POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getppid.texi���������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getppid @section @code{getppid} @findex getppid POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getpriority.texi�����������������������������������������0000664�0000000�0000000�00000000620�11671051007�0023661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpriority @section @code{getpriority} @findex getpriority POSIX specification:@* @url{http://www.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: Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getprotobyname.texi��������������������������������������0000664�0000000�0000000�00000000617�11671051007�0024345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getprotobyname @section @code{getprotobyname} @findex getprotobyname POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getprotobynumber.texi������������������������������������0000664�0000000�0000000�00000000627�11671051007�0024716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getprotobynumber @section @code{getprotobynumber} @findex getprotobynumber POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getprotoent.texi�����������������������������������������0000664�0000000�0000000�00000000603�11671051007�0023653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getprotoent @section @code{getprotoent} @findex getprotoent POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getpwent.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwent @section @code{getpwent} @findex getpwent POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getpwnam.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwnam @section @code{getpwnam} @findex getpwnam POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getpwnam_r.texi������������������������������������������0000664�0000000�0000000�00000001243�11671051007�0023445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwnam_r @section @code{getpwnam_r} @findex getpwnam_r POSIX specification:@* @url{http://www.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 2010-11 (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 9, BeOS. @item This function has an incompatible declaration, with fewer than five arguments, on some platforms: IRIX 5.3. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getpwuid.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwuid @section @code{getpwuid} @findex getpwuid POSIX specification:@* @url{http://www.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 missing on some platforms: mingw, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getpwuid_r.texi������������������������������������������0000664�0000000�0000000�00000001061�11671051007�0023451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getpwuid_r @section @code{getpwuid_r} @findex getpwuid_r POSIX specification:@* @url{http://www.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 2010-11 (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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getrlimit.texi�������������������������������������������0000664�0000000�0000000�00000001106�11671051007�0023300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getrlimit @section @code{getrlimit} @findex getrlimit POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getrlimit.html} Gnulib 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 9, BeOS. @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-20111211-stable/doc/posix-functions/getrusage.texi�������������������������������������������0000664�0000000�0000000�00000000761�11671051007�0023274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getrusage @section @code{getrusage} @findex getrusage POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getrusage.html} Gnulib module: --- Portability problems fixed 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 2.4, mingw, MSVC 9. @item Many platforms don't fill in all the fields of @code{struct rusage} with meaningful values. @end itemize ���������������gnulib-20111211-stable/doc/posix-functions/gets.texi������������������������������������������������0000664�0000000�0000000�00000001344�11671051007�0022246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gets @section @code{gets} @findex gets POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/gets.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function should never be used, because it can overflow any given buffer. @item On Windows platforms (excluding Cygwin), this function does not set @code{errno} upon failure. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getservbyname.texi���������������������������������������0000664�0000000�0000000�00000000605�11671051007�0024156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getservbyname @section @code{getservbyname} @findex getservbyname POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getservbyport.texi���������������������������������������0000664�0000000�0000000�00000000613�11671051007�0024221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getservbyport @section @code{getservbyport} @findex getservbyport POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getservent.texi������������������������������������������0000664�0000000�0000000�00000000577�11671051007�0023501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getservent @section @code{getservent} @findex getservent POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getsid.texi����������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0022557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getsid @section @code{getsid} @findex getsid POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getsockname.texi�����������������������������������������0000664�0000000�0000000�00000001142�11671051007�0023600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getsockname @section @code{getsockname} @findex getsockname POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getsockname.html} Gnulib module: getsockname Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes for @code{getsockname} are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @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-20111211-stable/doc/posix-functions/getsockopt.texi������������������������������������������0000664�0000000�0000000�00000001451�11671051007�0023465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getsockopt @section @code{getsockopt} @findex getsockopt POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getsockopt.html} Gnulib module: getsockopt Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes for @code{getsockopt} are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: BeOS. @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. @item BeOS has the @code{setsockopt} function, but not the @code{getsockopt} function. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getsubopt.texi�������������������������������������������0000664�0000000�0000000�00000000760�11671051007�0023321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getsubopt @section @code{getsubopt} @findex getsubopt POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html} Gnulib module: getsubopt Portability problems fixed by Gnulib: @itemize @item This function is declared in @code{unistd.h} instead of @code{stdlib.h} on some platforms: Cygwin 1.7.1. @item This function is missing on some platforms: mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������gnulib-20111211-stable/doc/posix-functions/gettimeofday.texi����������������������������������������0000664�0000000�0000000�00000002235�11671051007�0023765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gettimeofday @section @code{gettimeofday} @findex gettimeofday POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/gettimeofday.html} Gnulib module: gettimeofday Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @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 On some platforms, @code{gettimeofday} clobbers the buffer in which @code{localtime} returns its result: MacOS X 10.0. @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-20111211-stable/doc/posix-functions/getuid.texi����������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getuid @section @code{getuid} @findex getuid POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getutxent.texi�������������������������������������������0000664�0000000�0000000�00000000660�11671051007�0023333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getutxent @section @code{getutxent} @findex getutxent POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getutxid.texi��������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0023144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getutxid @section @code{getutxid} @findex getutxid POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getutxline.texi������������������������������������������0000664�0000000�0000000�00000000664�11671051007�0023500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getutxline @section @code{getutxline} @findex getutxline POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getwc.texi�����������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getwc @section @code{getwc} @findex getwc POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/getwchar.texi��������������������������������������������0000664�0000000�0000000�00000001031�11671051007�0023101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node getwchar @section @code{getwchar} @findex getwchar POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/glob.texi������������������������������������������������0000664�0000000�0000000�00000001311�11671051007�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node glob @section @code{glob} @findex glob POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/glob.html} Gnulib module: glob Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, mingw, MSVC 9, BeOS. @item This function may list symbolic links to nonexistent files among the results, on some platforms. @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-20111211-stable/doc/posix-functions/globfree.texi��������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0023065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node globfree @section @code{globfree} @findex globfree POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/globfree.html} Gnulib module: glob Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/gmtime.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gmtime @section @code{gmtime} @findex gmtime POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/gmtime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/gmtime_r.texi��������������������������������������������0000664�0000000�0000000�00000001067�11671051007�0023111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node gmtime_r @section @code{gmtime_r} @findex gmtime_r POSIX specification:@* @url{http://www.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 9. @item This function is not declared unless @code{_REENTRANT} is defined, on some platforms: HP-UX 11. @item Some platforms define a function of this name that is incompatible to POSIX: HP-UX 10. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/google-ranking.txt���������������������������������������0000664�0000000�0000000�00000146206�11671051007�0024064�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-20111211-stable/doc/posix-functions/grantpt.texi���������������������������������������������0000664�0000000�0000000�00000001102�11671051007�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node grantpt @section @code{grantpt} @findex grantpt POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/grantpt.html} Gnulib module: grantpt Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is not declared on some platforms: IRIX 5.3. @item This function reports success for invalid file descriptors on some platforms: Cygwin 1.7.9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/hcreate.texi���������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hcreate @section @code{hcreate} @findex hcreate POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/hdestroy.texi��������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0023143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hdestroy @section @code{hdestroy} @findex hdestroy POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/hsearch.texi���������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hsearch @section @code{hsearch} @findex hsearch POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/htonl.texi�����������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0022434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node htonl @section @code{htonl} @findex htonl POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/htons.texi�����������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0022443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node htons @section @code{htons} @findex htons POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/hypot.texi�����������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0022451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hypot @section @code{hypot} @findex hypot POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/hypot.html} Gnulib module: hypot Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/hypotf.texi����������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hypotf @section @code{hypotf} @findex hypotf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/hypotf.html} Gnulib module: --- Portability problems fixed 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, MSVC 9. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/hypotl.texi����������������������������������������������0000664�0000000�0000000�00000000730�11671051007�0022621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node hypotl @section @code{hypotl} @findex hypotl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/hypotl.html} Gnulib 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, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������gnulib-20111211-stable/doc/posix-functions/iconv.texi�����������������������������������������������0000664�0000000�0000000�00000002532�11671051007�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iconv @section @code{iconv} @findex iconv POSIX specification:@* @url{http://www.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}. @item Failures are not distinguishable from successful returns on some platforms: AIX 5.1, 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 X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Cygwin, mingw, MSVC 9, BeOS, 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-20111211-stable/doc/posix-functions/iconv_close.texi�����������������������������������������0000664�0000000�0000000�00000001064�11671051007�0023606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iconv_close @section @code{iconv_close} @findex iconv_close POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Cygwin, mingw, MSVC 9, BeOS, when GNU libiconv is not installed. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iconv_open.texi������������������������������������������0000664�0000000�0000000�00000003171�11671051007�0023443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iconv_open @section @code{iconv_open} @findex iconv_open POSIX specification:@* @url{http://www.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}. @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, OSF/1 5.1, Solaris 11 2010-11. @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, OSF/1 5.1, Solaris 8. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Cygwin, mingw, MSVC 9, BeOS, 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-20111211-stable/doc/posix-functions/if_freenameindex.texi������������������������������������0000664�0000000�0000000�00000001146�11671051007�0024574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node if_freenameindex @section @code{if_freenameindex} @findex if_freenameindex POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 7, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @item This is available only as a macro, rather than a function, on some platforms: OpenBSD 4.6, MirBSD 10. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/if_indextoname.texi��������������������������������������0000664�0000000�0000000�00000000744�11671051007�0024300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node if_indextoname @section @code{if_indextoname} @findex if_indextoname POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 7, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������gnulib-20111211-stable/doc/posix-functions/if_nameindex.texi����������������������������������������0000664�0000000�0000000�00000000734�11671051007�0023734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node if_nameindex @section @code{if_nameindex} @findex if_nameindex POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 7, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������gnulib-20111211-stable/doc/posix-functions/if_nametoindex.texi��������������������������������������0000664�0000000�0000000�00000000744�11671051007�0024300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node if_nametoindex @section @code{if_nametoindex} @findex if_nametoindex POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 7, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������gnulib-20111211-stable/doc/posix-functions/ilogb.texi�����������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ilogb @section @code{ilogb} @findex ilogb POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/ilogb.html} Gnulib module: --- Portability problems fixed 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 5.3, MSVC 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ilogbf.texi����������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ilogbf @section @code{ilogbf} @findex ilogbf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/ilogbf.html} Gnulib module: --- Portability problems fixed 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-20111211-stable/doc/posix-functions/ilogbl.texi����������������������������������������������0000664�0000000�0000000�00000000732�11671051007�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ilogbl @section @code{ilogbl} @findex ilogbl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/ilogbl.html} Gnulib 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, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������gnulib-20111211-stable/doc/posix-functions/imaxabs.texi���������������������������������������������0000664�0000000�0000000�00000000731�11671051007�0022727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node imaxabs @section @code{imaxabs} @findex imaxabs POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������gnulib-20111211-stable/doc/posix-functions/imaxdiv.texi���������������������������������������������0000664�0000000�0000000�00000000731�11671051007�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node imaxdiv @section @code{imaxdiv} @findex imaxdiv POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������gnulib-20111211-stable/doc/posix-functions/inet_addr.texi�������������������������������������������0000664�0000000�0000000�00000001017�11671051007�0023232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inet_addr @section @code{inet_addr} @findex inet_addr POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/inet_ntoa.texi�������������������������������������������0000664�0000000�0000000�00000001510�11671051007�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inet_ntoa @section @code{inet_ntoa} @findex inet_ntoa POSIX specification:@* @url{http://www.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 9. @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 time stamp 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 @acronym{IPv4} addresses. A protocol independent function is @code{inet_ntop}. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/inet_ntop.texi�������������������������������������������0000664�0000000�0000000�00000001474�11671051007�0023307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inet_ntop @section @code{inet_ntop} @findex inet_ntop POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 2.5.1, mingw, MSVC 9, Interix 3.5, BeOS. @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 9 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: OSF/1 5.1, Solaris 10. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/inet_pton.texi�������������������������������������������0000664�0000000�0000000�00000001272�11671051007�0023303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inet_pton @section @code{inet_pton} @findex inet_pton POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 2.5.1, mingw, MSVC 9, Interix 3.5, BeOS. @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 9 on Windows >= Vista. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/initstate.texi�������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0023304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node initstate @section @code{initstate} @findex initstate POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/initstate.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Solaris 2.4, mingw, MSVC 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/insque.texi����������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node insque @section @code{insque} @findex insque POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ioctl.texi�����������������������������������������������0000664�0000000�0000000�00000001237�11671051007�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ioctl @section @code{ioctl} @findex ioctl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/ioctl.html} Gnulib module: ioctl Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), @code{ioctl} is called @code{ioctlsocket}, and error codes for this function are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item On glibc platforms, the second parameter is of type @code{unsigned long} rather than @code{int}. @end itemize Portability problems not fixed by Gnulib: @itemize @item Most @code{ioctl} requests are platform and hardware specific. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isalnum.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isalnum @section @code{isalnum} @findex isalnum POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isalnum.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isalnum_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isalnum_l @section @code{isalnum_l} @findex isalnum_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isalpha.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isalpha @section @code{isalpha} @findex isalpha POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isalpha.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isalpha_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isalpha_l @section @code{isalpha_l} @findex isalpha_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isascii.texi���������������������������������������������0000664�0000000�0000000�00000001566�11671051007�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isascii @section @code{isascii} @findex isascii POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isascii.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isastream.texi�������������������������������������������0000664�0000000�0000000�00000000721�11671051007�0023272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isastream @section @code{isastream} @findex isastream POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������gnulib-20111211-stable/doc/posix-functions/isatty.texi����������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0022617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isatty @section @code{isatty} @findex isatty POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isatty.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On Windows, @code{isatty} also returns true for character devices such as @file{NUL}. @end itemize ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isblank.texi���������������������������������������������0000664�0000000�0000000�00000002570�11671051007�0022731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isblank @section @code{isblank} @findex isblank POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isblank.html} Gnulib module: isblank Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 4.3.2, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/isblank_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isblank_l @section @code{isblank_l} @findex isblank_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iscntrl.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iscntrl @section @code{iscntrl} @findex iscntrl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/iscntrl.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/iscntrl_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iscntrl_l @section @code{iscntrl_l} @findex iscntrl_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isdigit.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isdigit @section @code{isdigit} @findex isdigit POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isdigit.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isdigit_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isdigit_l @section @code{isdigit_l} @findex isdigit_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isfinite.texi��������������������������������������������0000664�0000000�0000000�00000001700�11671051007�0023112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isfinite @section @code{isfinite} @findex isfinite POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5. @item This macro incorrectly yields true for some @samp{double} arguments, on some platforms: Linux/ia64 (signalling NaNs). @item This macro incorrectly yields true for some @samp{long double} arguments, on some platforms: x86 (pseudo-zeroes, unnormalized numbers, pseudo-denormals), x86_64 (pseudo-denormals), ia64 (pseudo-NaN, pseudo-Infinity, pseudo-zeroes, unnormalized numbers, pseudo-denormals). @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. @end itemize ����������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isgraph.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isgraph @section @code{isgraph} @findex isgraph POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isgraph.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isgraph_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isgraph_l @section @code{isgraph_l} @findex isgraph_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isgreater.texi�������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0023270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isgreater @section @code{isgreater} @findex isgreater POSIX specification:@* @url{http://www.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 X 10.5, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5, BeOS. @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/isgreaterequal.texi��������������������������������������0000664�0000000�0000000�00000000746�11671051007�0024326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isgreaterequal @section @code{isgreaterequal} @findex isgreaterequal POSIX specification:@* @url{http://www.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 X 10.5, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/isinf.texi�����������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isinf @section @code{isinf} @findex isinf POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 11 2010-11. @item This macro incorrectly yields true for some @samp{long double} arguments, on some platforms: OpenBSD 4.9/x86 (pseudo-Infinity). @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isless.texi����������������������������������������������0000664�0000000�0000000�00000000706�11671051007�0022607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isless @section @code{isless} @findex isless POSIX specification:@* @url{http://www.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 X 10.5, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/islessequal.texi�����������������������������������������0000664�0000000�0000000�00000000732�11671051007�0023636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node islessequal @section @code{islessequal} @findex islessequal POSIX specification:@* @url{http://www.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 X 10.5, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5, BeOS. @end itemize ��������������������������������������gnulib-20111211-stable/doc/posix-functions/islessgreater.texi���������������������������������������0000664�0000000�0000000�00000000742�11671051007�0024161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node islessgreater @section @code{islessgreater} @findex islessgreater POSIX specification:@* @url{http://www.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 X 10.5, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5, BeOS. @end itemize ������������������������������gnulib-20111211-stable/doc/posix-functions/islower.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node islower @section @code{islower} @findex islower POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/islower.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/islower_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node islower_l @section @code{islower_l} @findex islower_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isnan.texi�����������������������������������������������0000664�0000000�0000000�00000002017�11671051007�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isnan @section @code{isnan} @findex isnan POSIX specification:@* @url{http://www.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, OSF/1 5.1 with gcc, Solaris 11 2010-11. @item On IRIX 6.5 with @code{cc}, @code{isnan} does not recognize some NaNs. @item On NetBSD/i386 and glibc/ia64, @code{isnan} does not recognize some forms of NaNs, such as pseudo-NaNs, pseudo-Infinities, and unnormalized numbers. @item On i686 and @var{x}86-64, @code{__builtin_isnanl} (and thus @code{isnan} implementations based on it) in GCC 4.0 and later does not recognize pseudo-denormals as NaNs, and similarly for pseudo-zeroes, unnormalized numbers, and pseudo-denormals on ia64. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isnormal.texi��������������������������������������������0000664�0000000�0000000�00000000674�11671051007�0023135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isnormal @section @code{isnormal} @findex isnormal POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5. @end itemize ��������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isprint.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isprint @section @code{isprint} @findex isprint POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isprint.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isprint_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isprint_l @section @code{isprint_l} @findex isprint_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ispunct.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ispunct @section @code{ispunct} @findex ispunct POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/ispunct.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/ispunct_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ispunct_l @section @code{ispunct_l} @findex ispunct_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isspace.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isspace @section @code{isspace} @findex isspace POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isspace.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isspace_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isspace_l @section @code{isspace_l} @findex isspace_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isunordered.texi�����������������������������������������0000664�0000000�0000000�00000000732�11671051007�0023627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isunordered @section @code{isunordered} @findex isunordered POSIX specification:@* @url{http://www.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 X 10.5, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Interix 3.5, BeOS. @end itemize ��������������������������������������gnulib-20111211-stable/doc/posix-functions/isupper.texi���������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0022766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isupper @section @code{isupper} @findex isupper POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isupper.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isupper_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isupper_l @section @code{isupper_l} @findex isupper_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswalnum.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswalnum @section @code{iswalnum} @findex iswalnum POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswalnum_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswalnum_l @section @code{iswalnum_l} @findex iswalnum_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswalpha.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswalpha @section @code{iswalpha} @findex iswalpha POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswalpha_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswalpha_l @section @code{iswalpha_l} @findex iswalpha_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswblank.texi��������������������������������������������0000664�0000000�0000000�00000001465�11671051007�0023122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswblank @section @code{iswblank} @findex iswblank POSIX specification:@* @url{http://www.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, AIX 4.3.2, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw, MSVC 9. @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. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswblank_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswblank_l @section @code{iswblank_l} @findex iswblank_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswcntrl.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswcntrl @section @code{iswcntrl} @findex iswcntrl POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswcntrl_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswcntrl_l @section @code{iswcntrl_l} @findex iswcntrl_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswctype.texi��������������������������������������������0000664�0000000�0000000�00000001171�11671051007�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswctype @section @code{iswctype} @findex iswctype POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswctype_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswctype_l @section @code{iswctype_l} @findex iswctype_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswdigit.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswdigit @section @code{iswdigit} @findex iswdigit POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswdigit_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswdigit_l @section @code{iswdigit_l} @findex iswdigit_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswgraph.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswgraph @section @code{iswgraph} @findex iswgraph POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswgraph_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswgraph_l @section @code{iswgraph_l} @findex iswgraph_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswlower.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswlower @section @code{iswlower} @findex iswlower POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswlower_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswlower_l @section @code{iswlower_l} @findex iswlower_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswprint.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswprint @section @code{iswprint} @findex iswprint POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswprint_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswprint_l @section @code{iswprint_l} @findex iswprint_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswpunct.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswpunct @section @code{iswpunct} @findex iswpunct POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswpunct_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswpunct_l @section @code{iswpunct_l} @findex iswpunct_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswspace.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswspace @section @code{iswspace} @findex iswspace POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswspace_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswspace_l @section @code{iswspace_l} @findex iswspace_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswupper.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswupper @section @code{iswupper} @findex iswupper POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswupper_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswupper_l @section @code{iswupper_l} @findex iswupper_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswxdigit.texi�������������������������������������������0000664�0000000�0000000�00000001147�11671051007�0023320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswxdigit @section @code{iswxdigit} @findex iswxdigit POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @item This function returns 0 for all possible arguments on some platforms: Linux libc5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/iswxdigit_l.texi�����������������������������������������0000664�0000000�0000000�00000001222�11671051007�0023625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iswxdigit_l @section @code{iswxdigit_l} @findex iswxdigit_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/isxdigit.texi��������������������������������������������0000664�0000000�0000000�00000002421�11671051007�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isxdigit @section @code{isxdigit} @findex isxdigit POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/isxdigit.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/isxdigit_l.texi������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0023433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node isxdigit_l @section @code{isxdigit_l} @findex isxdigit_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/j0.texi��������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0021616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node j0 @section @code{j0} @findex j0 POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/j1.texi��������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0021617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node j1 @section @code{j1} @findex j1 POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/jn.texi��������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0021714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node jn @section @code{jn} @findex jn POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/jrand48.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node jrand48 @section @code{jrand48} @findex jrand48 POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/kill.texi������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node kill @section @code{kill} @findex kill POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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: mingw, MSVC 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/killpg.texi����������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node killpg @section @code{killpg} @findex killpg POSIX specification:@* @url{http://www.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: Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/l64a.texi������������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node l64a @section @code{l64a} @findex l64a POSIX specification:@* @url{http://www.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 9, BeOS. @item This function was not correctly implemented in glibc versions before 2.2.5. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/labs.texi������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node labs @section @code{labs} @findex labs POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/labs.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lchown.texi����������������������������������������������0000664�0000000�0000000�00000001564�11671051007�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lchown @section @code{lchown} @findex lchown POSIX specification:@* @url{http://www.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: MacOS X 10.3, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lcong48.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lcong48 @section @code{lcong48} @findex lcong48 POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ldexp.texi�����������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ldexp @section @code{ldexp} @findex ldexp POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/ldexpf.texi����������������������������������������������0000664�0000000�0000000�00000000761�11671051007�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ldexpf @section @code{ldexpf} @findex ldexpf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������gnulib-20111211-stable/doc/posix-functions/ldexpl.texi����������������������������������������������0000664�0000000�0000000�00000001303�11671051007�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ldexpl @section @code{ldexpl} @findex ldexpl POSIX specification:@* @url{http://www.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, Interix 3.5. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function has no prototype in @code{<math.h>} on some platforms: MacOS 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-20111211-stable/doc/posix-functions/ldiv.texi������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ldiv @section @code{ldiv} @findex ldiv POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/lfind.texi�����������������������������������������������0000664�0000000�0000000�00000000534�11671051007�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lfind @section @code{lfind} @findex lfind POSIX specification:@* @url{http://www.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: BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lgamma.texi����������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lgamma @section @code{lgamma} @findex lgamma POSIX specification:@* @url{http://www.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. @item This function is not declared on some platforms: IRIX 5.3. @end itemize �����������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lgammaf.texi���������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0022710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lgammaf @section @code{lgammaf} @findex lgammaf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/lgammal.texi���������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lgammal @section @code{lgammal} @findex lgammal POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 6.5, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/link.texi������������������������������������������������0000664�0000000�0000000�00000001500�11671051007�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node link @section @code{link} @findex link POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/link.html} Gnulib module: link Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @item This function fails to reject trailing slashes on non-directories on some platforms: FreeBSD 7.2, Solaris 11 2010-11, 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-20111211-stable/doc/posix-functions/linkat.texi����������������������������������������������0000664�0000000�0000000�00000001345�11671051007�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node linkat @section @code{linkat} @findex linkat POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item This function fails to reject trailing slashes on non-directories on some platforms: AIX 7.1, Solaris 11 2010-11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lio_listio.texi������������������������������������������0000664�0000000�0000000�00000001200�11671051007�0023441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lio_listio @section @code{lio_listio} @findex lio_listio POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, OSF/1 5.1, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/listen.texi����������������������������������������������0000664�0000000�0000000�00000000711�11671051007�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node listen @section @code{listen} @findex listen POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/listen.html} Gnulib module: listen Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes for @code{listen} 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-20111211-stable/doc/posix-functions/llabs.texi�����������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llabs @section @code{llabs} @findex llabs POSIX specification:@* @url{http://www.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, OSF/1 5.1, MSVC 9, Interix 3.5. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lldiv.texi�����������������������������������������������0000664�0000000�0000000�00000000635�11671051007�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lldiv @section @code{lldiv} @findex lldiv POSIX specification:@* @url{http://www.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, OSF/1 5.1, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/llrint.texi����������������������������������������������0000664�0000000�0000000�00000000717�11671051007�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llrint @section @code{llrint} @findex llrint POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/llrintf.texi���������������������������������������������0000664�0000000�0000000�00000000735�11671051007�0022761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llrintf @section @code{llrintf} @findex llrintf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5. @end itemize �����������������������������������gnulib-20111211-stable/doc/posix-functions/llrintl.texi���������������������������������������������0000664�0000000�0000000�00000000755�11671051007�0022771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llrintl @section @code{llrintl} @findex llrintl POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������gnulib-20111211-stable/doc/posix-functions/llround.texi���������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llround @section @code{llround} @findex llround POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������������gnulib-20111211-stable/doc/posix-functions/llroundf.texi��������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llroundf @section @code{llroundf} @findex llroundf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/llroundl.texi��������������������������������������������0000664�0000000�0000000�00000000755�11671051007�0023144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node llroundl @section @code{llroundl} @findex llroundl POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������gnulib-20111211-stable/doc/posix-functions/localeconv.texi������������������������������������������0000664�0000000�0000000�00000000470�11671051007�0023430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node localeconv @section @code{localeconv} @findex localeconv POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/localeconv.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/localtime.texi�������������������������������������������0000664�0000000�0000000�00000000464�11671051007�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node localtime @section @code{localtime} @findex localtime POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/localtime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/localtime_r.texi�����������������������������������������0000664�0000000�0000000�00000001103�11671051007�0023567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node localtime_r @section @code{localtime_r} @findex localtime_r POSIX specification:@* @url{http://www.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 9. @item This function is not declared unless @code{_REENTRANT} is defined, on some platforms: HP-UX 11. @item Some platforms define a function of this name that is incompatible to POSIX: HP-UX 10. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lockf.texi�����������������������������������������������0000664�0000000�0000000�00000001120�11671051007�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lockf @section @code{lockf} @findex lockf POSIX specification:@* @url{http://www.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 9, BeOS. @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-20111211-stable/doc/posix-functions/log.texi�������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0022064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log @section @code{log} @findex log POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log.html} Gnulib module: log Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/log10.texi�����������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log10 @section @code{log10} @findex log10 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log10.html} Gnulib module: log10 Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/log10f.texi����������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log10f @section @code{log10f} @findex log10f POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log10f.html} Gnulib module: log10f 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-20111211-stable/doc/posix-functions/log10l.texi����������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log10l @section @code{log10l} @findex log10l POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log10l.html} Gnulib 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, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/log1p.texi�����������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log1p @section @code{log1p} @findex log1p POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log1p.html} Gnulib module: log1p Portability problems fixed 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-20111211-stable/doc/posix-functions/log1pf.texi����������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log1pf @section @code{log1pf} @findex log1pf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log1pf.html} Gnulib module: --- Portability problems fixed 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, MSVC 9. @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/log1pl.texi����������������������������������������������0000664�0000000�0000000�00000000730�11671051007�0022500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log1pl @section @code{log1pl} @findex log1pl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log1pl.html} Gnulib 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, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������gnulib-20111211-stable/doc/posix-functions/log2.texi������������������������������������������������0000664�0000000�0000000�00000001011�11671051007�0022136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log2 @section @code{log2} @findex log2 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log2.html} Gnulib 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, Interix 3.5. @item This function is only provided as a macro on some platforms: Cygwin 1.5.x. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/log2f.texi�����������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0022310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log2f @section @code{log2f} @findex log2f POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log2f.html} Gnulib 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, Interix 3.5. @item This function is only provided as a macro on some platforms: Cygwin 1.5.x. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/log2l.texi�����������������������������������������������0000664�0000000�0000000�00000000724�11671051007�0022324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node log2l @section @code{log2l} @findex log2l POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/log2l.html} Gnulib 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, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������gnulib-20111211-stable/doc/posix-functions/logb.texi������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logb @section @code{logb} @findex logb POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/logb.html} Gnulib module: logb Portability problems fixed by Gnulib: @itemize @item This function is missing a declaration on some platforms: Cygwin 1.5.x. @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-20111211-stable/doc/posix-functions/logbf.texi�����������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logbf @section @code{logbf} @findex logbf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/logbf.html} Gnulib module: --- Portability problems fixed 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-20111211-stable/doc/posix-functions/logbl.texi�����������������������������������������������0000664�0000000�0000000�00000000724�11671051007�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logbl @section @code{logbl} @findex logbl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/logbl.html} Gnulib 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, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������gnulib-20111211-stable/doc/posix-functions/logf.texi������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logf @section @code{logf} @findex logf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/logf.html} Gnulib module: logf 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-20111211-stable/doc/posix-functions/logl.texi������������������������������������������������0000664�0000000�0000000�00000001267�11671051007�0022245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node logl @section @code{logl} @findex logl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @item This function returns wrong results on some platforms: glibc 2.7 on Linux/SPARC64. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/longjmp.texi���������������������������������������������0000664�0000000�0000000�00000001363�11671051007�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node longjmp @section @code{longjmp} @findex longjmp POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/lrand48.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lrand48 @section @code{lrand48} @findex lrand48 POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lrint.texi�����������������������������������������������0000664�0000000�0000000�00000000675�11671051007�0022442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lrint @section @code{lrint} @findex lrint POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lrintf.texi����������������������������������������������0000664�0000000�0000000�00000000713�11671051007�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lrintf @section @code{lrintf} @findex lrintf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �����������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lrintl.texi����������������������������������������������0000664�0000000�0000000�00000000751�11671051007�0022611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lrintl @section @code{lrintl} @findex lrintl POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������gnulib-20111211-stable/doc/posix-functions/lround.texi����������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lround @section @code{lround} @findex lround POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lroundf.texi���������������������������������������������0000664�0000000�0000000�00000000717�11671051007�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lroundf @section @code{lroundf} @findex lroundf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lroundl.texi���������������������������������������������0000664�0000000�0000000�00000000751�11671051007�0022764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lroundl @section @code{lroundl} @findex lroundl POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������gnulib-20111211-stable/doc/posix-functions/lsearch.texi���������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lsearch @section @code{lsearch} @findex lsearch POSIX specification:@* @url{http://www.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: BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lseek.texi�����������������������������������������������0000664�0000000�0000000�00000002210�11671051007�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lseek @section @code{lseek} @findex lseek POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/lseek.html} Gnulib module: lseek Portability problems fixed by Gnulib: @itemize @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 9, BeOS. @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 -1, but in this situation a @code{SIGSYS} signal is raised on some platforms: IRIX 6.5. @item When the @code{lseek} function fails, POSIX says that the file offset remains unchanged. But on some platforms, attempting to set a negative file offset fails and sets the file offset to 0: BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/lstat.texi�����������������������������������������������0000664�0000000�0000000�00000002510�11671051007�0022427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node lstat @section @code{lstat} @findex lstat POSIX specification:@* @url{http://www.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 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}. Solaris 9. @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 On Windows platforms (excluding Cygwin), @code{st_ino} is always 0. @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)}. @item On some file systems, @code{st_size} contains bogus information for symlinks; use the gnulib module areadlink-with-size for a better way to get symlink contents. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/malloc.texi����������������������������������������������0000664�0000000�0000000�00000001277�11671051007�0022560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node malloc @section @code{malloc} @findex malloc POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item @code{malloc (0)} always returns a NULL pointer on some platforms: AIX 5.1, OSF/1 5.1. @end itemize Extension: Gnulib provides a module @samp{malloc-gnu} that substitutes a @code{malloc} implementation that behaves more like the glibc implementation, regarding the result of @code{malloc (0)}. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mblen.texi�����������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mblen @section @code{mblen} @findex mblen POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/mblen.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mbrlen.texi����������������������������������������������0000664�0000000�0000000�00000001572�11671051007�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbrlen @section @code{mbrlen} @findex mbrlen POSIX specification:@* @url{http://www.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, Solaris 2.6, mingw, Interix 3.5. @item This function does not put the state into non-initial state when parsing an incomplete multibyte character on some platforms: AIX 5.1, OSF/1 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-20111211-stable/doc/posix-functions/mbrtowc.texi���������������������������������������������0000664�0000000�0000000�00000002527�11671051007�0022765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbrtowc @section @code{mbrtowc} @findex mbrtowc POSIX specification:@* @url{http://www.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, Solaris 2.6, mingw, Interix 3.5. @item This function does not put the state into non-initial state when parsing an incomplete multibyte character on some platforms: AIX 5.1, OSF/1 5.1. @item This function does not produce correct results in the zh_CN.GB18030 locale on some platforms: Solaris 8. @item This function fails if the @code{pwc} argument is NULL on some platforms: Solaris 7. @item This function does not ignore the @code{pwc} argument if the string argument is NULL on some platforms: OSF/1 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, mingw, possibly MSVC 9. @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 On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mbsinit.texi���������������������������������������������0000664�0000000�0000000�00000001003�11671051007�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbsinit @section @code{mbsinit} @findex mbsinit POSIX specification:@* @url{http://www.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, Solaris 2.6, MSVC 9, Interix 3.5. @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-20111211-stable/doc/posix-functions/mbsnrtowcs.texi������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0023476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbsnrtowcs @section @code{mbsnrtowcs} @findex mbsnrtowcs POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/mbsnrtowcs.html} Gnulib module: mbsnrtowcs Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.3, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @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, MacOS 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-20111211-stable/doc/posix-functions/mbsrtowcs.texi�������������������������������������������0000664�0000000�0000000�00000002156�11671051007�0023331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbsrtowcs @section @code{mbsrtowcs} @findex mbsrtowcs POSIX specification:@* @url{http://www.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, Solaris 2.6, mingw, Interix 3.5. @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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @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 X 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-20111211-stable/doc/posix-functions/mbstowcs.texi��������������������������������������������0000664�0000000�0000000�00000000655�11671051007�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbstowcs @section @code{mbstowcs} @findex mbstowcs POSIX specification:@* @url{http://www.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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mbtowc.texi����������������������������������������������0000664�0000000�0000000�00000001063�11671051007�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mbtowc @section @code{mbtowc} @findex mbtowc POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/mbtowc.html} Gnulib module: mbtowc Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function accumulates hidden state on some platforms: glibc 2.8 (see @url{http://sourceware.org/bugzilla/show_bug.cgi?id=9674}). @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/memccpy.texi���������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memccpy @section @code{memccpy} @findex memccpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/memccpy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/memchr.texi����������������������������������������������0000664�0000000�0000000�00000001175�11671051007�0022561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memchr @section @code{memchr} @findex memchr POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/memchr.html} Gnulib module: memchr or memchr-obsolete Portability problems fixed by either Gnulib module @code{memchr} or @code{memchr-obsolete}: @itemize @item This function dereferences too much memory on some platforms: glibc 2.10 on x86_64, IA-64; glibc 2.11 on Alpha. @end itemize Portability problems fixed by Gnulib module @code{memchr-obsolete}: @itemize @item This function is missing on some older platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/memcmp.texi����������������������������������������������0000664�0000000�0000000�00000001131�11671051007�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memcmp @section @code{memcmp} @findex memcmp POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/memcmp.html} Gnulib module: memcmp Portability problems fixed by Gnulib: @itemize @item This function is missing on some older platforms. @item This function does not work on 8-bit data on some older platforms: SunOS 4.1.3. @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 @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/memcpy.texi����������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memcpy @section @code{memcpy} @findex memcpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/memcpy.html} Gnulib module: memcpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some older platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/memmove.texi���������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0022747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memmove @section @code{memmove} @findex memmove POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/memmove.html} Gnulib module: memmove Portability problems fixed by Gnulib: @itemize @item This function is missing on some older platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/memset.texi����������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node memset @section @code{memset} @findex memset POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/memset.html} Gnulib module: memset Portability problems fixed by Gnulib: @itemize @item This function is missing on some older platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mkdir.texi�����������������������������������������������0000664�0000000�0000000�00000001661�11671051007�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkdir @section @code{mkdir} @findex mkdir POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/mkdir.html} Gnulib module: mkdir 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 9. @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 9. @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 not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mkdirat.texi���������������������������������������������0000664�0000000�0000000�00000001162�11671051007�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkdirat @section @code{mkdirat} @findex mkdirat POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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-20111211-stable/doc/posix-functions/mkdtemp.texi���������������������������������������������0000664�0000000�0000000�00000000670�11671051007�0022746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkdtemp @section @code{mkdtemp} @findex mkdtemp POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mkfifo.texi����������������������������������������������0000664�0000000�0000000�00000000777�11671051007�0022570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkfifo @section @code{mkfifo} @findex mkfifo POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �gnulib-20111211-stable/doc/posix-functions/mkfifoat.texi��������������������������������������������0000664�0000000�0000000�00000001337�11671051007�0023106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkfifoat @section @code{mkfifoat} @findex mkfifoat POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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 @item The gnulib replacement function always fails with @samp{ENOSYS} on some platforms: mingw, MSVC 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mknod.texi�����������������������������������������������0000664�0000000�0000000�00000001364�11671051007�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mknod @section @code{mknod} @findex mknod POSIX specification:@* @url{http://www.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, OpenBSD 3.8. @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 9. @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. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mknodat.texi���������������������������������������������0000664�0000000�0000000�00000001333�11671051007�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mknodat @section @code{mknodat} @findex mknodat POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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 @item The gnulib replacement function always fails with @samp{ENOSYS} on some platforms: mingw, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mkstemp.texi���������������������������������������������0000664�0000000�0000000�00000002201�11671051007�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mkstemp @section @code{mkstemp} @findex mkstemp POSIX specification:@* @url{http://www.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 9. @item This function is declared in @code{<unistd.h>} instead of @code{<stdlib.h>} on some platforms: MacOS X 10.3. @item On some platforms (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. On OSF/1 4.0f, it can create only 32 files per process. @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-20111211-stable/doc/posix-functions/mktime.texi����������������������������������������������0000664�0000000�0000000�00000000673�11671051007�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mktime @section @code{mktime} @findex mktime POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/mktime.html} Gnulib module: mktime Portability problems fixed by Gnulib: @itemize @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 @end itemize ���������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mlock.texi�����������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mlock @section @code{mlock} @findex mlock POSIX specification:@* @url{http://www.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, OSF/1 4.0, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mlockall.texi��������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0023104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mlockall @section @code{mlockall} @findex mlockall POSIX specification:@* @url{http://www.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, OSF/1 4.0, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mmap.texi������������������������������������������������0000664�0000000�0000000�00000002142�11671051007�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mmap @section @code{mmap} @findex mmap POSIX specification:@* @url{http://www.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 9, BeOS. @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-20111211-stable/doc/posix-functions/modf.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node modf @section @code{modf} @findex modf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/modf.html} Gnulib module: modf Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/modff.texi�����������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node modff @section @code{modff} @findex modff POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/modff.html} Gnulib module: modff Portability problems fixed by Gnulib: @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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/modfl.texi�����������������������������������������������0000664�0000000�0000000�00000001026�11671051007�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node modfl @section @code{modfl} @findex modfl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/modfl.html} Gnulib 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, Interix 3.5. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mprotect.texi��������������������������������������������0000664�0000000�0000000�00000001064�11671051007�0023140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mprotect @section @code{mprotect} @findex mprotect POSIX specification:@* @url{http://www.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 9, BeOS. @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-20111211-stable/doc/posix-functions/mq_close.texi��������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0023110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_close @section @code{mq_close} @findex mq_close POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/mq_getattr.texi������������������������������������������0000664�0000000�0000000�00000000762�11671051007�0023456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_getattr @section @code{mq_getattr} @findex mq_getattr POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������gnulib-20111211-stable/doc/posix-functions/mq_notify.texi�������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0023317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_notify @section @code{mq_notify} @findex mq_notify POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/mq_open.texi���������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_open @section @code{mq_open} @findex mq_open POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/mq_receive.texi������������������������������������������0000664�0000000�0000000�00000000762�11671051007�0023426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_receive @section @code{mq_receive} @findex mq_receive POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������gnulib-20111211-stable/doc/posix-functions/mq_send.texi���������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_send @section @code{mq_send} @findex mq_send POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/mq_setattr.texi������������������������������������������0000664�0000000�0000000�00000000762�11671051007�0023472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_setattr @section @code{mq_setattr} @findex mq_setattr POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������gnulib-20111211-stable/doc/posix-functions/mq_timedreceive.texi�������������������������������������0000664�0000000�0000000�00000001042�11671051007�0024441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_timedreceive @section @code{mq_timedreceive} @findex mq_timedreceive POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mq_timedsend.texi����������������������������������������0000664�0000000�0000000�00000001026�11671051007�0023752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_timedsend @section @code{mq_timedsend} @findex mq_timedsend POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/mq_unlink.texi�������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0023307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mq_unlink @section @code{mq_unlink} @findex mq_unlink POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/mrand48.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mrand48 @section @code{mrand48} @findex mrand48 POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/msgctl.texi����������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msgctl @section @code{msgctl} @findex msgctl POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/msgget.texi����������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msgget @section @code{msgget} @findex msgget POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/msgrcv.texi����������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0022611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msgrcv @section @code{msgrcv} @findex msgrcv POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/msgsnd.texi����������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msgsnd @section @code{msgsnd} @findex msgsnd POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/msync.texi�����������������������������������������������0000664�0000000�0000000�00000000660�11671051007�0022435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node msync @section @code{msync} @findex msync POSIX specification:@* @url{http://www.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 9, BeOS. @item On NetBSD, @code{msync} takes only two arguments. @end itemize ��������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/munlock.texi���������������������������������������������0000664�0000000�0000000�00000000630�11671051007�0022751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node munlock @section @code{munlock} @findex munlock POSIX specification:@* @url{http://www.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, OSF/1 4.0, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/munlockall.texi������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0023450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node munlockall @section @code{munlockall} @findex munlockall POSIX specification:@* @url{http://www.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, OSF/1 4.0, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/munmap.texi����������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0022606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node munmap @section @code{munmap} @findex munmap POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nan.texi�������������������������������������������������0000664�0000000�0000000�00000000677�11671051007�0022070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nan @section @code{nan} @findex nan POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �����������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nanf.texi������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nanf @section @code{nanf} @findex nanf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nanl.texi������������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nanl @section @code{nanl} @findex nanl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/nanosleep.texi�������������������������������������������0000664�0000000�0000000�00000001340�11671051007�0023264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nanosleep @section @code{nanosleep} @findex nanosleep POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html} Gnulib module: nanosleep Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @item This function reports failure when called with small arguments such as 1 ns on some platforms: AIX 4.3.2. @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-20111211-stable/doc/posix-functions/nearbyint.texi�������������������������������������������0000664�0000000�0000000�00000000714�11671051007�0023277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nearbyint @section @code{nearbyint} @findex nearbyint POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ����������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nearbyintf.texi������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0023453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nearbyintf @section @code{nearbyintf} @findex nearbyintf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �������������������������gnulib-20111211-stable/doc/posix-functions/nearbyintl.texi������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0023457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nearbyintl @section @code{nearbyintl} @findex nearbyintl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������gnulib-20111211-stable/doc/posix-functions/newlocale.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node newlocale @section @code{newlocale} @findex newlocale POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nextafter.texi�������������������������������������������0000664�0000000�0000000�00000000702�11671051007�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextafter @section @code{nextafter} @findex nextafter POSIX specification:@* @url{http://www.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. @item This function is not declared on some platforms: IRIX 5.3. @end itemize ��������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nextafterf.texi������������������������������������������0000664�0000000�0000000�00000000635�11671051007�0023454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextafterf @section @code{nextafterf} @findex nextafterf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/nextafterl.texi������������������������������������������0000664�0000000�0000000�00000000761�11671051007�0023462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nextafterl @section @code{nextafterl} @findex nextafterl POSIX specification:@* @url{http://www.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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������gnulib-20111211-stable/doc/posix-functions/nexttoward.texi������������������������������������������0000664�0000000�0000000�00000000774�11671051007�0023511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nexttoward @section @code{nexttoward} @findex nexttoward POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����gnulib-20111211-stable/doc/posix-functions/nexttowardf.texi�����������������������������������������0000664�0000000�0000000�00000001000�11671051007�0023636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nexttowardf @section @code{nexttowardf} @findex nexttowardf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/posix-functions/nexttowardl.texi�����������������������������������������0000664�0000000�0000000�00000001000�11671051007�0023644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nexttowardl @section @code{nexttowardl} @findex nexttowardl POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/posix-functions/nftw.texi������������������������������������������������0000664�0000000�0000000�00000001146�11671051007�0022262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nftw @section @code{nftw} @findex nftw POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/posix-functions/nice.texi������������������������������������������������0000664�0000000�0000000�00000000657�11671051007�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nice @section @code{nice} @findex nice POSIX specification:@* @url{http://www.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 9, BeOS. @item In glibc before glibc 2.2.4, @code{nice} returned 0 upon success. @end itemize ���������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nl_langinfo.texi�����������������������������������������0000664�0000000�0000000�00000002402�11671051007�0023566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nl_langinfo @section @code{nl_langinfo} @findex nl_langinfo POSIX specification:@* @url{http://www.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 9, BeOS. @item The constant @code{CODESET} is not supported on some platforms: glibc 2.0.6, OpenBSD 3.8. @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 3.8. @item The constants @code{T_FMT_AMPM}, @code{YESEXPR}, @code{NOEXPR} are not supported on some platforms: IRIX 5.3. @item The constants @code{YESEXPR} and @code{NOEXPR} do not return a valid string on some platforms: Irix 6.5. @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. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nl_langinfo_l.texi���������������������������������������0000664�0000000�0000000�00000001035�11671051007�0024102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nl_langinfo_l @section @code{nl_langinfo_l} @findex nl_langinfo_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/nrand48.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nrand48 @section @code{nrand48} @findex nrand48 POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ntohl.texi�����������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0022434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ntohl @section @code{ntohl} @findex ntohl POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ntohs.texi�����������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0022443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ntohs @section @code{ntohs} @findex ntohs POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/open.texi������������������������������������������������0000664�0000000�0000000�00000002543�11671051007�0022247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node open @section @code{open} @findex open POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/open.html} Gnulib module: open, fchdir Portability problems fixed by the Gnulib module open: @itemize @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: FreeBSD 7.2, AIX 7.1, HP-UX 11.00, Solaris 9, Irix 5.3. @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 9. @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 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 On Windows, this function returns a file handle in @code{O_TEXT} mode by default; this means that it translates '\n' to CR/LF by default. Use the @code{O_BINARY} flag if you need reliable binary I/O. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/open_memstream.texi��������������������������������������0000664�0000000�0000000�00000001047�11671051007�0024317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node open_memstream @section @code{open_memstream} @findex open_memstream POSIX specification:@* @url{http://www.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: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/open_wmemstream.texi�������������������������������������0000664�0000000�0000000�00000001265�11671051007�0024510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node open_wmemstream @section @code{open_wmemstream} @findex open_wmemstream POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/openat.texi����������������������������������������������0000664�0000000�0000000�00000001671�11671051007�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node openat @section @code{openat} @findex openat POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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{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 @end itemize �����������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/opendir.texi���������������������������������������������0000664�0000000�0000000�00000001172�11671051007�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node opendir @section @code{opendir} @findex opendir POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/openlog.texi���������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0022751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node openlog @section @code{openlog} @findex openlog POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/optarg.texi����������������������������������������������0000664�0000000�0000000�00000000605�11671051007�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node optarg @section @code{optarg} @findex optarg POSIX specification:@* @url{http://www.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: MacOS X 10.5, IRIX 6.5, OSF/1 5.1, MSVC 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/opterr.texi����������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0022625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node opterr @section @code{opterr} @findex opterr POSIX specification:@* @url{http://www.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, OSF/1 5.1, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/optind.texi����������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0022607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node optind @section @code{optind} @findex optind POSIX specification:@* @url{http://www.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, OSF/1 5.1, MSVC 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/optopt.texi����������������������������������������������0000664�0000000�0000000�00000000605�11671051007�0022630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node optopt @section @code{optopt} @findex optopt POSIX specification:@* @url{http://www.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: MacOS X 10.5, IRIX 6.5, OSF/1 5.1, MSVC 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pathconf.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pathconf @section @code{pathconf} @findex pathconf POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pause.texi�����������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0022423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pause @section @code{pause} @findex pause POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pclose.texi����������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0022573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pclose @section @code{pclose} @findex pclose POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/perror.texi����������������������������������������������0000664�0000000�0000000�00000002276�11671051007�0022622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node perror @section @code{perror} @findex perror POSIX specification:@* @url{http://www.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, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9. @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 X 10.5. @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, Solaris 8. @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-20111211-stable/doc/posix-functions/pipe.texi������������������������������������������������0000664�0000000�0000000�00000000745�11671051007�0022245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pipe @section @code{pipe} @findex pipe POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/poll.texi������������������������������������������������0000664�0000000�0000000�00000000772�11671051007�0022256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node poll @section @code{poll} @findex poll POSIX specification:@* @url{http://www.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 9, BeOS. @item This function doesn't work on special files like @file{/dev/null} and ttys like @file{/dev/tty} on some platforms: MacOS X 10.4.0, AIX 5.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������gnulib-20111211-stable/doc/posix-functions/popen.texi�����������������������������������������������0000664�0000000�0000000�00000001311�11671051007�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node popen @section @code{popen} @findex popen POSIX specification:@* @url{http://www.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 9. @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 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-20111211-stable/doc/posix-functions/posix_fadvise.texi���������������������������������������0000664�0000000�0000000�00000001350�11671051007�0024144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_fadvise @section @code{posix_fadvise} @findex posix_fadvise POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/posix_fallocate.texi�������������������������������������0000664�0000000�0000000�00000001355�11671051007�0024462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_fallocate @section @code{posix_fallocate} @findex posix_fallocate POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/posix_madvise.texi���������������������������������������0000664�0000000�0000000�00000001000�11671051007�0024143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_madvise @section @code{posix_madvise} @findex posix_madvise POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize gnulib-20111211-stable/doc/posix-functions/posix_mem_offset.texi������������������������������������0000664�0000000�0000000�00000001066�11671051007�0024653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_mem_offset @section @code{posix_mem_offset} @findex posix_mem_offset POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_memalign.texi��������������������������������������0000664�0000000�0000000�00000001227�11671051007�0024317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_memalign @section @code{posix_memalign} @findex posix_memalign POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/posix_memalign.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize The Gnulib module @code{pagealign_alloc} provides a similar API that returns memory aligned on a system page boundary. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_openpt.texi����������������������������������������0000664�0000000�0000000�00000001527�11671051007�0024036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_openpt @section @code{posix_openpt} @findex posix_openpt POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, 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. 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-20111211-stable/doc/posix-functions/posix_spawn.texi�����������������������������������������0000664�0000000�0000000�00000001355�11671051007�0023660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawn @section @code{posix_spawn} @findex posix_spawn POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item When this function fails, it causes the stdio buffer contents to be output twice on some platforms: AIX 6.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function does not work on some platforms: AIX 6.1 (under particular circumstances), mingw. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawn_file_actions_addclose.texi�������������������0000664�0000000�0000000�00000001202�11671051007�0030224�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{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawn_file_actions_adddup2.texi��������������������0000664�0000000�0000000�00000001175�11671051007�0030002�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{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawn_file_actions_addopen.texi��������������������0000664�0000000�0000000�00000001175�11671051007�0030071�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{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawn_file_actions_destroy.texi��������������������0000664�0000000�0000000�00000001175�11671051007�0030150�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{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawn_file_actions_init.texi�����������������������0000664�0000000�0000000�00000001156�11671051007�0027421�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{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_destroy.texi�����������������������������0000664�0000000�0000000�00000001120�11671051007�0026312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_destroy @section @code{posix_spawnattr_destroy} @findex posix_spawnattr_destroy POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_getflags.texi����������������������������0000664�0000000�0000000�00000001125�11671051007�0026422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getflags @section @code{posix_spawnattr_getflags} @findex posix_spawnattr_getflags POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_getpgroup.texi���������������������������0000664�0000000�0000000�00000001132�11671051007�0026640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getpgroup @section @code{posix_spawnattr_getpgroup} @findex posix_spawnattr_getpgroup POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_getschedparam.texi�����������������������0000664�0000000�0000000�00000001156�11671051007�0027441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getschedparam @section @code{posix_spawnattr_getschedparam} @findex posix_spawnattr_getschedparam POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_getschedpolicy.texi����������������������0000664�0000000�0000000�00000001163�11671051007�0027636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getschedpolicy @section @code{posix_spawnattr_getschedpolicy} @findex posix_spawnattr_getschedpolicy POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_getsigdefault.texi�����������������������0000664�0000000�0000000�00000001156�11671051007�0027461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getsigdefault @section @code{posix_spawnattr_getsigdefault} @findex posix_spawnattr_getsigdefault POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_getsigmask.texi��������������������������0000664�0000000�0000000�00000001137�11671051007�0026767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_getsigmask @section @code{posix_spawnattr_getsigmask} @findex posix_spawnattr_getsigmask POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_init.texi��������������������������������0000664�0000000�0000000�00000001101�11671051007�0025563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_init @section @code{posix_spawnattr_init} @findex posix_spawnattr_init POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_setflags.texi����������������������������0000664�0000000�0000000�00000001125�11671051007�0026436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setflags @section @code{posix_spawnattr_setflags} @findex posix_spawnattr_setflags POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_setpgroup.texi���������������������������0000664�0000000�0000000�00000001132�11671051007�0026654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setpgroup @section @code{posix_spawnattr_setpgroup} @findex posix_spawnattr_setpgroup POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_setschedparam.texi�����������������������0000664�0000000�0000000�00000001156�11671051007�0027455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setschedparam @section @code{posix_spawnattr_setschedparam} @findex posix_spawnattr_setschedparam POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_setschedpolicy.texi����������������������0000664�0000000�0000000�00000001163�11671051007�0027652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setschedpolicy @section @code{posix_spawnattr_setschedpolicy} @findex posix_spawnattr_setschedpolicy POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_setsigdefault.texi�����������������������0000664�0000000�0000000�00000001156�11671051007�0027475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setsigdefault @section @code{posix_spawnattr_setsigdefault} @findex posix_spawnattr_setsigdefault POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnattr_setsigmask.texi��������������������������0000664�0000000�0000000�00000001137�11671051007�0027003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnattr_setsigmask @section @code{posix_spawnattr_setsigmask} @findex posix_spawnattr_setsigmask POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_spawnp.texi����������������������������������������0000664�0000000�0000000�00000001362�11671051007�0024036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_spawnp @section @code{posix_spawnp} @findex posix_spawnp POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item When this function fails, it causes the stdio buffer contents to be output twice on some platforms: AIX 6.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function does not work on some platforms: AIX 6.1 (under particular circumstances), mingw. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_destroy.texi����������������������������0000664�0000000�0000000�00000001126�11671051007�0026425�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getclockres.texi������������������������0000664�0000000�0000000�00000001146�11671051007�0027243�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getcreatetime.texi����������������������0000664�0000000�0000000�00000001156�11671051007�0027561�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getgenversion.texi����������������������0000664�0000000�0000000�00000001156�11671051007�0027616�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getinherited.texi�����������������������0000664�0000000�0000000�00000001152�11671051007�0027406�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getlogfullpolicy.texi�������������������0000664�0000000�0000000�00000001172�11671051007�0030321�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getlogsize.texi�������������������������0000664�0000000�0000000�00000001142�11671051007�0027106�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getmaxdatasize.texi���������������������0000664�0000000�0000000�00000001162�11671051007�0027746�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getmaxsystemeventsize.texi��������������0000664�0000000�0000000�00000001216�11671051007�0031423�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getmaxusereventsize.texi����������������0000664�0000000�0000000�00000001206�11671051007�0031054�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getname.texi����������������������������0000664�0000000�0000000�00000001126�11671051007�0026354�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getstreamfullpolicy.texi����������������0000664�0000000�0000000�00000001206�11671051007�0031031�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_getstreamsize.texi����������������������0000664�0000000�0000000�00000001156�11671051007�0027625�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_init.texi�������������������������������0000664�0000000�0000000�00000001112�11671051007�0025672�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_setinherited.texi�����������������������0000664�0000000�0000000�00000001152�11671051007�0027422�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_setlogfullpolicy.texi�������������������0000664�0000000�0000000�00000001172�11671051007�0030335�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_setlogsize.texi�������������������������0000664�0000000�0000000�00000001142�11671051007�0027122�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_setmaxdatasize.texi���������������������0000664�0000000�0000000�00000001162�11671051007�0027762�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_setname.texi����������������������������0000664�0000000�0000000�00000001126�11671051007�0026370�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_setstreamfullpolicy.texi����������������0000664�0000000�0000000�00000001206�11671051007�0031045�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_attr_setstreamsize.texi����������������������0000664�0000000�0000000�00000001156�11671051007�0027641�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_clear.texi�����������������������������������0000664�0000000�0000000�00000001072�11671051007�0024770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_clear @section @code{posix_trace_clear} @findex posix_trace_clear POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_close.texi�����������������������������������0000664�0000000�0000000�00000001072�11671051007�0025007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_close @section @code{posix_trace_close} @findex posix_trace_close POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_create.texi����������������������������������0000664�0000000�0000000�00000001076�11671051007�0025151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_create @section @code{posix_trace_create} @findex posix_trace_create POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_create_withlog.texi��������������������������0000664�0000000�0000000�00000001136�11671051007�0026703�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_event.texi�����������������������������������0000664�0000000�0000000�00000001072�11671051007�0025023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_event @section @code{posix_trace_event} @findex posix_trace_event POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventid_equal.texi���������������������������0000664�0000000�0000000�00000001132�11671051007�0026524�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventid_get_name.texi������������������������0000664�0000000�0000000�00000001146�11671051007�0027201�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventid_open.texi����������������������������0000664�0000000�0000000�00000001126�11671051007�0026361�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventset_add.texi����������������������������0000664�0000000�0000000�00000001126�11671051007�0026347�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventset_del.texi����������������������������0000664�0000000�0000000�00000001126�11671051007�0026363�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventset_empty.texi��������������������������0000664�0000000�0000000�00000001136�11671051007�0026756�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventset_fill.texi���������������������������0000664�0000000�0000000�00000001132�11671051007�0026542�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventset_ismember.texi�����������������������0000664�0000000�0000000�00000001152�11671051007�0027421�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventtypelist_getnext_id.texi����������������0000664�0000000�0000000�00000001206�11671051007�0031032�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_eventtypelist_rewind.texi��������������������0000664�0000000�0000000�00000001166�11671051007�0030175�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_flush.texi�����������������������������������0000664�0000000�0000000�00000001072�11671051007�0025023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_flush @section @code{posix_trace_flush} @findex posix_trace_flush POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_get_attr.texi��������������������������������0000664�0000000�0000000�00000001106�11671051007�0025511�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_get_filter.texi������������������������������0000664�0000000�0000000�00000001116�11671051007�0026025�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_get_status.texi������������������������������0000664�0000000�0000000�00000001116�11671051007�0026063�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_getnext_event.texi���������������������������0000664�0000000�0000000�00000001132�11671051007�0026556�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_open.texi������������������������������������0000664�0000000�0000000�00000001066�11671051007�0024646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_open @section @code{posix_trace_open} @findex posix_trace_open POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_rewind.texi����������������������������������0000664�0000000�0000000�00000001076�11671051007�0025176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_rewind @section @code{posix_trace_rewind} @findex posix_trace_rewind POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_set_filter.texi������������������������������0000664�0000000�0000000�00000001116�11671051007�0026041�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_shutdown.texi��������������������������������0000664�0000000�0000000�00000001106�11671051007�0025553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_shutdown @section @code{posix_trace_shutdown} @findex posix_trace_shutdown POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_start.texi�����������������������������������0000664�0000000�0000000�00000001072�11671051007�0025037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_start @section @code{posix_trace_start} @findex posix_trace_start POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_stop.texi������������������������������������0000664�0000000�0000000�00000001066�11671051007�0024672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node posix_trace_stop @section @code{posix_trace_stop} @findex posix_trace_stop POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_timedgetnext_event.texi����������������������0000664�0000000�0000000�00000001156�11671051007�0027607�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_trid_eventid_open.texi�����������������������0000664�0000000�0000000�00000001152�11671051007�0027402�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_trace_trygetnext_event.texi������������������������0000664�0000000�0000000�00000001146�11671051007�0027322�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_typed_mem_get_info.texi����������������������������0000664�0000000�0000000�00000001126�11671051007�0026361�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/posix_typed_mem_open.texi��������������������������������0000664�0000000�0000000�00000001106�11671051007�0025526�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{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pow.texi�������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0022110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pow @section @code{pow} @findex pow POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/powf.texi������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node powf @section @code{powf} @findex powf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/powl.texi������������������������������������������������0000664�0000000�0000000�00000001030�11671051007�0022255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node powl @section @code{powl} @findex powl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pread.texi�����������������������������������������������0000664�0000000�0000000�00000001331�11671051007�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pread @section @code{pread} @findex pread POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pread.html} Gnulib module: pread Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 10, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/posix-functions/printf.texi����������������������������������������������0000664�0000000�0000000�00000006706�11671051007�0022615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node printf @section @code{printf} @findex printf POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @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 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @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: MacOS X 10.3, FreeBSD 6.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 9. @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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/pselect.texi���������������������������������������������0000664�0000000�0000000�00000001331�11671051007�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pselect @section @code{pselect} @findex pselect POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/psiginfo.texi��������������������������������������������0000664�0000000�0000000�00000000774�11671051007�0023130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node psiginfo @section @code{psiginfo} @findex psiginfo POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, OSF/1 5.1, Cygwin 1.7.9, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����gnulib-20111211-stable/doc/posix-functions/psignal.texi���������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node psignal @section @code{psignal} @findex psignal POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_atfork.texi��������������������������������������0000664�0000000�0000000�00000000723�11671051007�0024301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_atfork @section @code{pthread_atfork} @findex pthread_atfork POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_destroy.texi��������������������������������0000664�0000000�0000000�00000000725�11671051007�0025540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_destroy @section @code{pthread_attr_destroy} @findex pthread_attr_destroy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_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: Minix 3.1.8, HP-UX 11, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_getdetachstate.texi�������������������������0000664�0000000�0000000�00000000747�11671051007�0027044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getdetachstate @section @code{pthread_attr_getdetachstate} @findex pthread_attr_getdetachstate POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getdetachstate.html} Gnulib module: --- Portability problems fixed 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 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_getguardsize.texi���������������������������0000664�0000000�0000000�00000000777�11671051007�0026553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getguardsize @section @code{pthread_attr_getguardsize} @findex pthread_attr_getguardsize POSIX specification:@* @url{http://www.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, HP-UX 11, OSF/1 4.0, Solaris 2.6, Cygwin, mingw, MSVC 9, BeOS. @end itemize �gnulib-20111211-stable/doc/posix-functions/pthread_attr_getinheritsched.texi������������������������0000664�0000000�0000000�00000000753�11671051007�0027221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getinheritsched @section @code{pthread_attr_getinheritsched} @findex pthread_attr_getinheritsched POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_getschedparam.texi��������������������������0000664�0000000�0000000�00000000743�11671051007�0026656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getschedparam @section @code{pthread_attr_getschedparam} @findex pthread_attr_getschedparam POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_getschedpolicy.texi�������������������������0000664�0000000�0000000�00000000747�11671051007�0027061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getschedpolicy @section @code{pthread_attr_getschedpolicy} @findex pthread_attr_getschedpolicy POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_getscope.texi�������������������������������0000664�0000000�0000000�00000000717�11671051007�0025661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getscope @section @code{pthread_attr_getscope} @findex pthread_attr_getscope POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_getstack.texi�������������������������������0000664�0000000�0000000�00000000766�11671051007�0025661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getstack @section @code{pthread_attr_getstack} @findex pthread_attr_getstack POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize ����������gnulib-20111211-stable/doc/posix-functions/pthread_attr_getstacksize.texi���������������������������0000664�0000000�0000000�00000000737�11671051007�0026552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_getstacksize @section @code{pthread_attr_getstacksize} @findex pthread_attr_getstacksize POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_init.texi�����������������������������������0000664�0000000�0000000�00000000714�11671051007�0025010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_init @section @code{pthread_attr_init} @findex pthread_attr_init POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_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: Minix 3.1.8, HP-UX 11.11, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_setdetachstate.texi�������������������������0000664�0000000�0000000�00000000761�11671051007�0027054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setdetachstate @section @code{pthread_attr_setdetachstate} @findex pthread_attr_setdetachstate POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_setdetachstate.html} Gnulib module: --- Portability problems fixed 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 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_setguardsize.texi���������������������������0000664�0000000�0000000�00000000777�11671051007�0026567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setguardsize @section @code{pthread_attr_setguardsize} @findex pthread_attr_setguardsize POSIX specification:@* @url{http://www.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, HP-UX 11, OSF/1 4.0, Solaris 2.6, Cygwin, mingw, MSVC 9, BeOS. @end itemize �gnulib-20111211-stable/doc/posix-functions/pthread_attr_setinheritsched.texi������������������������0000664�0000000�0000000�00000000753�11671051007�0027235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setinheritsched @section @code{pthread_attr_setinheritsched} @findex pthread_attr_setinheritsched POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_setschedparam.texi��������������������������0000664�0000000�0000000�00000000743�11671051007�0026672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setschedparam @section @code{pthread_attr_setschedparam} @findex pthread_attr_setschedparam POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_setschedpolicy.texi�������������������������0000664�0000000�0000000�00000000747�11671051007�0027075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setschedpolicy @section @code{pthread_attr_setschedpolicy} @findex pthread_attr_setschedpolicy POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_setscope.texi�������������������������������0000664�0000000�0000000�00000000717�11671051007�0025675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setscope @section @code{pthread_attr_setscope} @findex pthread_attr_setscope POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_attr_setstack.texi�������������������������������0000664�0000000�0000000�00000000766�11671051007�0025675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setstack @section @code{pthread_attr_setstack} @findex pthread_attr_setstack POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize ����������gnulib-20111211-stable/doc/posix-functions/pthread_attr_setstacksize.texi���������������������������0000664�0000000�0000000�00000000751�11671051007�0026562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_attr_setstacksize @section @code{pthread_attr_setstacksize} @findex pthread_attr_setstacksize POSIX specification:@* @url{http://www.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, HP-UX 11, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������gnulib-20111211-stable/doc/posix-functions/pthread_barrier_destroy.texi�����������������������������0000664�0000000�0000000�00000001062�11671051007�0026207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrier_destroy @section @code{pthread_barrier_destroy} @findex pthread_barrier_destroy POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_barrier_init.texi��������������������������������0000664�0000000�0000000�00000001046�11671051007�0025463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrier_init @section @code{pthread_barrier_init} @findex pthread_barrier_init POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_barrier_wait.texi��������������������������������0000664�0000000�0000000�00000001046�11671051007�0025464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrier_wait @section @code{pthread_barrier_wait} @findex pthread_barrier_wait POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_barrierattr_destroy.texi�������������������������0000664�0000000�0000000�00000001102�11671051007�0027075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrierattr_destroy @section @code{pthread_barrierattr_destroy} @findex pthread_barrierattr_destroy POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_barrierattr_getpshared.texi����������������������0000664�0000000�0000000�00000001147�11671051007�0027543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrierattr_getpshared @section @code{pthread_barrierattr_getpshared} @findex pthread_barrierattr_getpshared POSIX specification:@* @url{http://www.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.6, MacOS X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_barrierattr_init.texi����������������������������0000664�0000000�0000000�00000001066�11671051007�0026360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrierattr_init @section @code{pthread_barrierattr_init} @findex pthread_barrierattr_init POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_barrierattr_setpshared.texi����������������������0000664�0000000�0000000�00000001132�11671051007�0027551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_barrierattr_setpshared @section @code{pthread_barrierattr_setpshared} @findex pthread_barrierattr_setpshared POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cancel.texi��������������������������������������0000664�0000000�0000000�00000000651�11671051007�0024240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cancel @section @code{pthread_cancel} @findex pthread_cancel POSIX specification:@* @url{http://www.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, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cleanup_pop.texi���������������������������������0000664�0000000�0000000�00000001037�11671051007�0025317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cleanup_pop @section @code{pthread_cleanup_pop} @findex pthread_cleanup_pop POSIX specification:@* @url{http://www.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 X 10.5, NetBSD 5.0, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cleanup_push.texi��������������������������������0000664�0000000�0000000�00000001043�11671051007�0025475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cleanup_push @section @code{pthread_cleanup_push} @findex pthread_cleanup_push POSIX specification:@* @url{http://www.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 X 10.5, NetBSD 5.0, Minix 3.1.8, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cond_broadcast.texi������������������������������0000664�0000000�0000000�00000000735�11671051007�0025763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_broadcast @section @code{pthread_cond_broadcast} @findex pthread_cond_broadcast POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_broadcast.html} Gnulib module: --- Portability problems fixed 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 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cond_destroy.texi��������������������������������0000664�0000000�0000000�00000000725�11671051007�0025511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_destroy @section @code{pthread_cond_destroy} @findex pthread_cond_destroy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_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, HP-UX 11, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cond_init.texi�����������������������������������0000664�0000000�0000000�00000000677�11671051007�0024771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_init @section @code{pthread_cond_init} @findex pthread_cond_init POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cond_signal.texi���������������������������������0000664�0000000�0000000�00000000707�11671051007�0025275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_signal @section @code{pthread_cond_signal} @findex pthread_cond_signal POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_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: Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cond_timedwait.texi������������������������������0000664�0000000�0000000�00000000735�11671051007�0026010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_timedwait @section @code{pthread_cond_timedwait} @findex pthread_cond_timedwait POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_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: Minix 3.1.8, HP-UX 11, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_cond_wait.texi�����������������������������������0000664�0000000�0000000�00000000677�11671051007�0024772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_cond_wait @section @code{pthread_cond_wait} @findex pthread_cond_wait POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_condattr_destroy.texi����������������������������0000664�0000000�0000000�00000000733�11671051007�0026403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_destroy @section @code{pthread_condattr_destroy} @findex pthread_condattr_destroy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_condattr_getclock.texi���������������������������0000664�0000000�0000000�00000001123�11671051007�0026477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_getclock @section @code{pthread_condattr_getclock} @findex pthread_condattr_getclock POSIX specification:@* @url{http://www.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.6, MacOS X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_condattr_getpshared.texi�������������������������0000664�0000000�0000000�00000001030�11671051007�0027027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_getpshared @section @code{pthread_condattr_getpshared} @findex pthread_condattr_getpshared POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_condattr_init.texi�������������������������������0000664�0000000�0000000�00000000717�11671051007�0025657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_init @section @code{pthread_condattr_init} @findex pthread_condattr_init POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_condattr_setclock.texi���������������������������0000664�0000000�0000000�00000001123�11671051007�0026513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_setclock @section @code{pthread_condattr_setclock} @findex pthread_condattr_setclock POSIX specification:@* @url{http://www.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.6, MacOS X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_condattr_setpshared.texi�������������������������0000664�0000000�0000000�00000001030�11671051007�0027043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_condattr_setpshared @section @code{pthread_condattr_setpshared} @findex pthread_condattr_setpshared POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_create.texi��������������������������������������0000664�0000000�0000000�00000001313�11671051007�0024252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_create @section @code{pthread_create} @findex pthread_create POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_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: Minix 3.1.8, HP-UX 11.11, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/posix-functions/pthread_detach.texi��������������������������������������0000664�0000000�0000000�00000000651�11671051007�0024243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_detach @section @code{pthread_detach} @findex pthread_detach POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_detach.html} Gnulib module: --- Portability problems fixed 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 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_equal.texi���������������������������������������0000664�0000000�0000000�00000000645�11671051007�0024125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_equal @section @code{pthread_equal} @findex pthread_equal POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_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: Minix 3.1.8, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_exit.texi����������������������������������������0000664�0000000�0000000�00000000653�11671051007�0023766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_exit @section @code{pthread_exit} @findex pthread_exit POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_exit.html} Gnulib module: --- Portability problems fixed 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 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_getconcurrency.texi������������������������������0000664�0000000�0000000�00000000737�11671051007�0026052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_getconcurrency @section @code{pthread_getconcurrency} @findex pthread_getconcurrency POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_getcpuclockid.texi�������������������������������0000664�0000000�0000000�00000001075�11671051007�0025634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_getcpuclockid @section @code{pthread_getcpuclockid} @findex pthread_getcpuclockid POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_getschedparam.texi�������������������������������0000664�0000000�0000000�00000000717�11671051007�0025625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_getschedparam @section @code{pthread_getschedparam} @findex pthread_getschedparam POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_getspecific.texi���������������������������������0000664�0000000�0000000�00000000675�11671051007�0025306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_getspecific @section @code{pthread_getspecific} @findex pthread_getspecific POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_getspecific.html} Gnulib module: --- Portability problems fixed 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 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_join.texi����������������������������������������0000664�0000000�0000000�00000000641�11671051007�0023751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_join @section @code{pthread_join} @findex pthread_join POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_join.html} Gnulib module: --- Portability problems fixed 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 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_key_create.texi����������������������������������0000664�0000000�0000000�00000000671�11671051007�0025130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_key_create @section @code{pthread_key_create} @findex pthread_key_create POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_key_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: Minix 3.1.8, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_key_delete.texi����������������������������������0000664�0000000�0000000�00000000671�11671051007�0025127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_key_delete @section @code{pthread_key_delete} @findex pthread_key_delete POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_key_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: Minix 3.1.8, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_kill.texi����������������������������������������0000664�0000000�0000000�00000000641�11671051007�0023745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_kill @section @code{pthread_kill} @findex pthread_kill POSIX specification:@* @url{http://www.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, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_consistent.texi����������������������������0000664�0000000�0000000�00000001115�11671051007�0026422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_consistent @section @code{pthread_mutex_consistent} @findex pthread_mutex_consistent POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_destroy.texi�������������������������������0000664�0000000�0000000�00000000731�11671051007�0025725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_destroy @section @code{pthread_mutex_destroy} @findex pthread_mutex_destroy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_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, HP-UX 11, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_getprioceiling.texi������������������������0000664�0000000�0000000�00000001034�11671051007�0027235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_getprioceiling @section @code{pthread_mutex_getprioceiling} @findex pthread_mutex_getprioceiling POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_init.texi����������������������������������0000664�0000000�0000000�00000000703�11671051007�0025176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_init @section @code{pthread_mutex_init} @findex pthread_mutex_init POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_lock.texi����������������������������������0000664�0000000�0000000�00000000703�11671051007�0025163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_lock @section @code{pthread_mutex_lock} @findex pthread_mutex_lock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_lock.html} Gnulib module: --- Portability problems fixed 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 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_setprioceiling.texi������������������������0000664�0000000�0000000�00000001034�11671051007�0027251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_setprioceiling @section @code{pthread_mutex_setprioceiling} @findex pthread_mutex_setprioceiling POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_timedlock.texi�����������������������������0000664�0000000�0000000�00000001061�11671051007�0026204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_timedlock @section @code{pthread_mutex_timedlock} @findex pthread_mutex_timedlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_timedlock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_trylock.texi�������������������������������0000664�0000000�0000000�00000000731�11671051007�0025723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_trylock @section @code{pthread_mutex_trylock} @findex pthread_mutex_trylock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_trylock.html} Gnulib module: --- Portability problems fixed 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 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutex_unlock.texi��������������������������������0000664�0000000�0000000�00000000725�11671051007�0025532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutex_unlock @section @code{pthread_mutex_unlock} @findex pthread_mutex_unlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_unlock.html} Gnulib module: --- Portability problems fixed 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 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_destroy.texi���������������������������0000664�0000000�0000000�00000000737�11671051007�0026626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_destroy @section @code{pthread_mutexattr_destroy} @findex pthread_mutexattr_destroy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_getprioceiling.texi��������������������0000664�0000000�0000000�00000001054�11671051007�0030132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_getprioceiling @section @code{pthread_mutexattr_getprioceiling} @findex pthread_mutexattr_getprioceiling POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_getprotocol.texi�����������������������0000664�0000000�0000000�00000001040�11671051007�0027462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_getprotocol @section @code{pthread_mutexattr_getprotocol} @findex pthread_mutexattr_getprotocol POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_getpshared.texi������������������������0000664�0000000�0000000�00000001034�11671051007�0027252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_getpshared @section @code{pthread_mutexattr_getpshared} @findex pthread_mutexattr_getpshared POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_getrobust.texi�������������������������0000664�0000000�0000000�00000001131�11671051007�0027140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_getrobust @section @code{pthread_mutexattr_getrobust} @findex pthread_mutexattr_getrobust POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getrobust.html} Gnulib 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 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_gettype.texi���������������������������0000664�0000000�0000000�00000000737�11671051007�0026616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_gettype @section @code{pthread_mutexattr_gettype} @findex pthread_mutexattr_gettype POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_gettype.html} Gnulib module: --- Portability problems fixed 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 2.6, mingw, MSVC 9, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_init.texi������������������������������0000664�0000000�0000000�00000000723�11671051007�0026073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_init @section @code{pthread_mutexattr_init} @findex pthread_mutexattr_init POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_setprioceiling.texi��������������������0000664�0000000�0000000�00000001054�11671051007�0030146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_setprioceiling @section @code{pthread_mutexattr_setprioceiling} @findex pthread_mutexattr_setprioceiling POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_setprotocol.texi�����������������������0000664�0000000�0000000�00000001040�11671051007�0027476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_setprotocol @section @code{pthread_mutexattr_setprotocol} @findex pthread_mutexattr_setprotocol POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_setpshared.texi������������������������0000664�0000000�0000000�00000001034�11671051007�0027266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_setpshared @section @code{pthread_mutexattr_setpshared} @findex pthread_mutexattr_setpshared POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_setrobust.texi�������������������������0000664�0000000�0000000�00000001131�11671051007�0027154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_setrobust @section @code{pthread_mutexattr_setrobust} @findex pthread_mutexattr_setrobust POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html} Gnulib 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 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, OSF/1 5.1, Solaris 10, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_mutexattr_settype.texi���������������������������0000664�0000000�0000000�00000000737�11671051007�0026632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_mutexattr_settype @section @code{pthread_mutexattr_settype} @findex pthread_mutexattr_settype POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_settype.html} Gnulib module: --- Portability problems fixed 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 2.6, mingw, MSVC 9, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_once.texi����������������������������������������0000664�0000000�0000000�00000000641�11671051007�0023736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_once @section @code{pthread_once} @findex pthread_once POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_once.html} Gnulib module: --- Portability problems fixed 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 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_destroy.texi������������������������������0000664�0000000�0000000�00000000736�11671051007�0026071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_destroy @section @code{pthread_rwlock_destroy} @findex pthread_rwlock_destroy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_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, HP-UX 11, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ����������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_init.texi���������������������������������0000664�0000000�0000000�00000000710�11671051007�0025333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_init @section @code{pthread_rwlock_init} @findex pthread_rwlock_init POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_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, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_rdlock.texi�������������������������������0000664�0000000�0000000�00000000732�11671051007�0025652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_rdlock @section @code{pthread_rwlock_rdlock} @findex pthread_rwlock_rdlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html} Gnulib module: --- Portability problems fixed 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, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_timedrdlock.texi��������������������������0000664�0000000�0000000�00000001061�11671051007�0026671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_timedrdlock @section @code{pthread_rwlock_timedrdlock} @findex pthread_rwlock_timedrdlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_timedrdlock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_timedwrlock.texi��������������������������0000664�0000000�0000000�00000001061�11671051007�0026714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_timedwrlock @section @code{pthread_rwlock_timedwrlock} @findex pthread_rwlock_timedwrlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_timedwrlock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_tryrdlock.texi����������������������������0000664�0000000�0000000�00000000746�11671051007�0026416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_tryrdlock @section @code{pthread_rwlock_tryrdlock} @findex pthread_rwlock_tryrdlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_tryrdlock.html} Gnulib module: --- Portability problems fixed 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, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_trywrlock.texi����������������������������0000664�0000000�0000000�00000000746�11671051007�0026441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_trywrlock @section @code{pthread_rwlock_trywrlock} @findex pthread_rwlock_trywrlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_trywrlock.html} Gnulib module: --- Portability problems fixed 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, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_unlock.texi�������������������������������0000664�0000000�0000000�00000000732�11671051007�0025667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_unlock @section @code{pthread_rwlock_unlock} @findex pthread_rwlock_unlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_unlock.html} Gnulib module: --- Portability problems fixed 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, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlock_wrlock.texi�������������������������������0000664�0000000�0000000�00000000732�11671051007�0025675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlock_wrlock @section @code{pthread_rwlock_wrlock} @findex pthread_rwlock_wrlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_wrlock.html} Gnulib module: --- Portability problems fixed 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, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlockattr_destroy.texi��������������������������0000664�0000000�0000000�00000000756�11671051007�0026766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlockattr_destroy @section @code{pthread_rwlockattr_destroy} @findex pthread_rwlockattr_destroy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlockattr_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, HP-UX 11, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlockattr_getpshared.texi�����������������������0000664�0000000�0000000�00000001006�11671051007�0027410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlockattr_getpshared @section @code{pthread_rwlockattr_getpshared} @findex pthread_rwlockattr_getpshared POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlockattr_init.texi�����������������������������0000664�0000000�0000000�00000000742�11671051007�0026233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlockattr_init @section @code{pthread_rwlockattr_init} @findex pthread_rwlockattr_init POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlockattr_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, HP-UX 11, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_rwlockattr_setpshared.texi�����������������������0000664�0000000�0000000�00000001006�11671051007�0027424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_rwlockattr_setpshared @section @code{pthread_rwlockattr_setpshared} @findex pthread_rwlockattr_setpshared POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, OSF/1 4.0, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_self.texi����������������������������������������0000664�0000000�0000000�00000000653�11671051007�0023746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_self @section @code{pthread_self} @findex pthread_self POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_self.html} Gnulib module: --- Portability problems fixed 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 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_setcancelstate.texi������������������������������0000664�0000000�0000000�00000000723�11671051007�0026015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setcancelstate @section @code{pthread_setcancelstate} @findex pthread_setcancelstate POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_setcanceltype.texi�������������������������������0000664�0000000�0000000�00000000717�11671051007�0025661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setcanceltype @section @code{pthread_setcanceltype} @findex pthread_setcanceltype POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_setconcurrency.texi������������������������������0000664�0000000�0000000�00000000737�11671051007�0026066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setconcurrency @section @code{pthread_setconcurrency} @findex pthread_setconcurrency POSIX specification:@* @url{http://www.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 5.0, Minix 3.1.8, HP-UX 11, Solaris 2.6, mingw, MSVC 9, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_setschedparam.texi�������������������������������0000664�0000000�0000000�00000000717�11671051007�0025641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setschedparam @section @code{pthread_setschedparam} @findex pthread_setschedparam POSIX specification:@* @url{http://www.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, HP-UX 11, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_setschedprio.texi��������������������������������0000664�0000000�0000000�00000001060�11671051007�0025502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setschedprio @section @code{pthread_setschedprio} @findex pthread_setschedprio POSIX specification:@* @url{http://www.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.6, MacOS 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, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_setspecific.texi���������������������������������0000664�0000000�0000000�00000000675�11671051007�0025322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_setspecific @section @code{pthread_setspecific} @findex pthread_setspecific POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_setspecific.html} Gnulib module: --- Portability problems fixed 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 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_sigmask.texi�������������������������������������0000664�0000000�0000000�00000002167�11671051007�0024455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_sigmask @section @code{pthread_sigmask} @findex pthread_sigmask POSIX specification:@* @url{http://www.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, Solaris 2.4, mingw, MSVC 9, BeOS. @item This function is declared in @code{<pthread.h>} instead of @code{<signal.h>} on some platforms: MacOS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6. @item This function does nothing and always returns 0 in programs that are not linked with @code{-lpthread} on some platforms: FreeBSD 6.4, HP-UX 11.31, Solaris 9. @item When it fails, this functions returns -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. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_spin_destroy.texi��������������������������������0000664�0000000�0000000�00000001031�11671051007�0025526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_destroy @section @code{pthread_spin_destroy} @findex pthread_spin_destroy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_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 X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_spin_init.texi�����������������������������������0000664�0000000�0000000�00000001015�11671051007�0025002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_init @section @code{pthread_spin_init} @findex pthread_spin_init POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_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 X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_spin_lock.texi�����������������������������������0000664�0000000�0000000�00000001015�11671051007�0024767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_lock @section @code{pthread_spin_lock} @findex pthread_spin_lock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_lock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_spin_trylock.texi��������������������������������0000664�0000000�0000000�00000001031�11671051007�0025524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_trylock @section @code{pthread_spin_trylock} @findex pthread_spin_trylock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_trylock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_spin_unlock.texi���������������������������������0000664�0000000�0000000�00000001025�11671051007�0025333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_spin_unlock @section @code{pthread_spin_unlock} @findex pthread_spin_unlock POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_spin_unlock.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 5.2.1, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/pthread_testcancel.texi����������������������������������0000664�0000000�0000000�00000000703�11671051007�0025136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread_testcancel @section @code{pthread_testcancel} @findex pthread_testcancel POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ptsname.texi���������������������������������������������0000664�0000000�0000000�00000001461�11671051007�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ptsname @section @code{ptsname} @findex ptsname POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/ptsname.html} Gnulib module: ptsname Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is not declared on some platforms: IRIX 5.3. @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-20111211-stable/doc/posix-functions/putc.texi������������������������������������������������0000664�0000000�0000000�00000002101�11671051007�0022247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putc @section @code{putc} @findex putc POSIX specification:@* @url{http://www.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 9. @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 9. @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-20111211-stable/doc/posix-functions/putc_unlocked.texi���������������������������������������0000664�0000000�0000000�00000001053�11671051007�0024140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putc_unlocked @section @code{putc_unlocked} @findex putc_unlocked POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/putc_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 9. @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-20111211-stable/doc/posix-functions/putchar.texi���������������������������������������������0000664�0000000�0000000�00000002115�11671051007�0022747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putchar @section @code{putchar} @findex putchar POSIX specification:@* @url{http://www.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 9. @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 9. @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-20111211-stable/doc/posix-functions/putchar_unlocked.texi������������������������������������0000664�0000000�0000000�00000001067�11671051007�0024640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putchar_unlocked @section @code{putchar_unlocked} @findex putchar_unlocked POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/putchar_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 9. @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-20111211-stable/doc/posix-functions/putenv.texi����������������������������������������������0000664�0000000�0000000�00000000702�11671051007�0022622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putenv @section @code{putenv} @findex putenv POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/putmsg.texi����������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putmsg @section @code{putmsg} @findex putmsg POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/putpmsg.texi���������������������������������������������0000664�0000000�0000000�00000000711�11671051007�0023000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putpmsg @section @code{putpmsg} @findex putpmsg POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/puts.texi������������������������������������������������0000664�0000000�0000000�00000002101�11671051007�0022267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node puts @section @code{puts} @findex puts POSIX specification:@* @url{http://www.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 9. @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 9. @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-20111211-stable/doc/posix-functions/pututxline.texi������������������������������������������0000664�0000000�0000000�00000000664�11671051007�0023531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pututxline @section @code{pututxline} @findex pututxline POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/putwc.texi�����������������������������������������������0000664�0000000�0000000�00000001246�11671051007�0022447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putwc @section @code{putwc} @findex putwc POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/putwchar.texi��������������������������������������������0000664�0000000�0000000�00000001262�11671051007�0023140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node putwchar @section @code{putwchar} @findex putwchar POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/pwrite.texi����������������������������������������������0000664�0000000�0000000�00000001472�11671051007�0022620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pwrite @section @code{pwrite} @findex pwrite POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/pwrite.html} Gnulib module: pwrite Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: HP-UX 10, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/posix-functions/qsort.texi�����������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0022454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node qsort @section @code{qsort} @findex qsort POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/raise.texi�����������������������������������������������0000664�0000000�0000000�00000000667�11671051007�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node raise @section @code{raise} @findex raise POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/rand.texi������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rand @section @code{rand} @findex rand POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/rand.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/rand_r.texi����������������������������������������������0000664�0000000�0000000�00000000566�11671051007�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rand_r @section @code{rand_r} @findex rand_r POSIX specification:@* @url{http://www.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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/random.texi����������������������������������������������0000664�0000000�0000000�00000000566�11671051007�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node random @section @code{random} @findex random POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/random.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Solaris 2.4, mingw, MSVC 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/read.texi������������������������������������������������0000664�0000000�0000000�00000001576�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node read @section @code{read} @findex read POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/read.html} Gnulib module: stdio, nonblocking Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item This function crashes when invoked with invalid arguments on some platforms: MSVC 9. @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 9. @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 X 10.5. @end itemize For handling @code{EINTR}, Gnulib provides a module @samp{safe-read} with a function @code{safe_read}. ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/readdir.texi���������������������������������������������0000664�0000000�0000000�00000001172�11671051007�0022715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readdir @section @code{readdir} @findex readdir POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/readdir_r.texi�������������������������������������������0000664�0000000�0000000�00000001506�11671051007�0023237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readdir_r @section @code{readdir_r} @findex readdir_r POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/readdir_r.html} Gnulib module: extensions Portability problems fixed by Gnulib: @itemize @item This function has an incompatible declaration on some platforms: Solaris 11 2010-11 (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 9, BeOS. @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. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/readlink.texi��������������������������������������������0000664�0000000�0000000�00000002746�11671051007�0023104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readlink @section @code{readlink} @findex readlink POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/readlink.html} Gnulib module: readlink Portability problems fixed by Gnulib: @itemize @item Some platforms mistakenly succeed on @code{readlink("link/",buf,len)}: FreeBSD 7.2, Solaris 9. @item On some platforms, @code{readlink} returns @code{int} instead of @code{ssize_t}: glibc 2.4, FreeBSD 6.0, OpenBSD 3.8, Cygwin 1.5.x. @item This function is missing on some platforms: mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item When @code{readlink} 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 @code{readlink}. @item When @code{readlink} 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 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, AIX 5.1 and HP-UX 11 set @code{errno} to @code{ERANGE} rather than returning truncated contents, and Linux sets @code{errno} to @code{EINVAL} if the requested length is zero. Use the gnulib module areadlink for improved ability to read symlink contents. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/readlinkat.texi������������������������������������������0000664�0000000�0000000�00000003134�11671051007�0023421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readlinkat @section @code{readlinkat} @findex readlinkat POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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 @item This function always fails on platforms that don't support symlinks: mingw, MSVC 9. @item When @code{readlink} 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 @code{readlink}. @item When @code{readlink} 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 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, AIX 5.1 and HP-UX 11 set @code{errno} to @code{ERANGE} rather than returning truncated contents, and Linux sets @code{errno} to @code{EINVAL} if the requested length is zero. Use the gnulib module areadlink for improved ability to read symlink contents. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/readv.texi�����������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node readv @section @code{readv} @findex readv POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/realloc.texi���������������������������������������������0000664�0000000�0000000�00000002466�11671051007�0022733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node realloc @section @code{realloc} @findex realloc POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item 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, C99 requires that if @code{realloc (p, 0)} returns @code{NULL} then @code{p} is still valid. Among implementations that obey C99, behavior varies on whether @code{realloc (p, 0)} always fails and leaves @code{p} valid, or usually succeeds and returns a unique zero-size object; either way, a program not suspecting these semantics will leak memory (either the still-valid @code{p}, or the non-NULL return value). Meanwhile, several implementations violate C99, by always calling @code{free (p)} but returning NULL: glibc, Cygwin @end itemize Extension: Gnulib provides a module @samp{realloc-gnu} that substitutes a @code{realloc} implementation that behaves more like the glibc implementation. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/realpath.texi��������������������������������������������0000664�0000000�0000000�00000002144�11671051007�0023103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node realpath @section @code{realpath} @findex realpath POSIX specification:@* @url{http://www.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 9, BeOS. @item This function does not allow for a NULL @samp{resolved} parameter on some platforms: MacOS 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. @item This function fails to recognize non-directories followed @samp{..} on some platforms: cygwin. @item This function misbehaves on consecutive slashes on some platforms: 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-20111211-stable/doc/posix-functions/recv.texi������������������������������������������������0000664�0000000�0000000�00000001050�11671051007�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node recv @section @code{recv} @findex recv POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/recv.html} Gnulib module: recv Portability problems fixed by Gnulib: @itemize @item This function has the return type @code{int} instead of @code{ssize_t} on some platforms: OSF/1 5.1. @item On Windows platforms (excluding Cygwin), error codes for @code{recv} 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-20111211-stable/doc/posix-functions/recvfrom.texi��������������������������������������������0000664�0000000�0000000�00000001273�11671051007�0023130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node recvfrom @section @code{recvfrom} @findex recvfrom POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/recvfrom.html} Gnulib module: recvfrom Portability problems fixed by Gnulib: @itemize @item This function has the return type @code{int} instead of @code{ssize_t} on some platforms: OSF/1 5.1. @item On Windows platforms (excluding Cygwin), error codes for @code{recvfrom} are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @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-20111211-stable/doc/posix-functions/recvmsg.texi���������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node recvmsg @section @code{recvmsg} @findex recvmsg POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/regcomp.texi���������������������������������������������0000664�0000000�0000000�00000000650�11671051007�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regcomp @section @code{regcomp} @findex regcomp POSIX specification:@* @url{http://www.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 9. @item Many regular expression implementations have bugs. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/regerror.texi��������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0023135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regerror @section @code{regerror} @findex regerror POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/regexec.texi���������������������������������������������0000664�0000000�0000000�00000000650�11671051007�0022725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regexec @section @code{regexec} @findex regexec POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/regexec.html} Gnulib module: regex Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @item Many regular expression implementations have bugs. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/regfree.texi���������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0022730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regfree @section @code{regfree} @findex regfree POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/remainder.texi�������������������������������������������0000664�0000000�0000000�00000000665�11671051007�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remainder @section @code{remainder} @findex remainder POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/remainder.html} Gnulib module: remainder Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: MSVC 9. @item This function is not declared on some platforms: IRIX 5.3. @end itemize ���������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/remainderf.texi������������������������������������������0000664�0000000�0000000�00000000647�11671051007�0023425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remainderf @section @code{remainderf} @findex remainderf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/remainderf.html} Gnulib module: --- Portability problems fixed 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-20111211-stable/doc/posix-functions/remainderl.texi������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0023432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remainderl @section @code{remainderl} @findex remainderl POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/remainderl.html} Gnulib 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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������gnulib-20111211-stable/doc/posix-functions/remove.texi����������������������������������������������0000664�0000000�0000000�00000001147�11671051007�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remove @section @code{remove} @findex remove POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/remque.texi����������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0022605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remque @section @code{remque} @findex remque POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/remquo.texi����������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remquo @section @code{remquo} @findex remquo POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ���������������������������������������������������gnulib-20111211-stable/doc/posix-functions/remquof.texi���������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remquof @section @code{remquof} @findex remquof POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/remquol.texi���������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0022776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node remquol @section @code{remquol} @findex remquol POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������gnulib-20111211-stable/doc/posix-functions/rename.texi����������������������������������������������0000664�0000000�0000000�00000004764�11671051007�0022564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rename @section @code{rename} @findex rename POSIX specification:@* @url{http://www.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 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9. 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 9. @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 9. @item This function does not allow trailing slashes on source directories on older platforms, as in @samp{rename("dir/","new")}: SunOS 4.1. @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 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 9. @end itemize ������������gnulib-20111211-stable/doc/posix-functions/renameat.texi��������������������������������������������0000664�0000000�0000000�00000003502�11671051007�0023076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node renameat @section @code{renameat} @findex renameat POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/renameat.html} Gnulib module: renameat Portability problems fixed by Gnulib: @itemize @item This function does not reject trailing slashes on non-directories on some platforms, as in @code{renameat(fd,"file",fd,"new/")}: Solaris 11 2010-11. @item This function ignores trailing slashes on symlinks on some platforms, such that @code{renameat(fd,"link/",fd,"new")} corrupts @file{link}: Solaris 9. @item This function is declared in @code{<unistd.h>} instead of @code{<stdio.h>} on some platforms: Solaris 11 2010-11. @item This function is missing on some platforms: glibc 2.3.6, MacOS 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, OSF/1 5.1, Solaris 8, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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 @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 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 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/rewind.texi����������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rewind @section @code{rewind} @findex rewind POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/rewinddir.texi�������������������������������������������0000664�0000000�0000000�00000001041�11671051007�0023265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rewinddir @section @code{rewinddir} @findex rewinddir POSIX specification:@* @url{http://www.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 9. @item On MacOS 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-20111211-stable/doc/posix-functions/rint.texi������������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0022257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rint @section @code{rint} @findex rint POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/rintf.texi�����������������������������������������������0000664�0000000�0000000�00000000625�11671051007�0022427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rintf @section @code{rintf} @findex rintf POSIX specification:@* @url{http://www.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, IRIX 6.5, Solaris 9, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/rintl.texi�����������������������������������������������0000664�0000000�0000000�00000000734�11671051007�0022436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rintl @section @code{rintl} @findex rintl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������gnulib-20111211-stable/doc/posix-functions/rmdir.texi�����������������������������������������������0000664�0000000�0000000�00000001776�11671051007�0022432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node rmdir @section @code{rmdir} @findex rmdir POSIX specification:@* @url{http://www.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 9. @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 9. @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-20111211-stable/doc/posix-functions/round.texi�����������������������������������������������0000664�0000000�0000000�00000001742�11671051007�0022435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node round @section @code{round} @findex round POSIX specification:@* @url{http://www.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, IRIX 6.5, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @item This function is not declared on some platforms: glibc 2.8, OSF/1 5.1. @item This functions returns a wrong result for 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 -0.5 and 0 on some platforms: AIX 7.1, OSF/1 5.1. @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������gnulib-20111211-stable/doc/posix-functions/roundf.texi����������������������������������������������0000664�0000000�0000000�00000001747�11671051007�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node roundf @section @code{roundf} @findex roundf POSIX specification:@* @url{http://www.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, IRIX 6.5, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @item This function is not declared on some platforms: glibc 2.8, OSF/1 5.1. @item This functions returns a wrong result for 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 -0.5 and 0 on some platforms: AIX 7.1, OSF/1 5.1. @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������gnulib-20111211-stable/doc/posix-functions/roundl.texi����������������������������������������������0000664�0000000�0000000�00000001634�11671051007�0022611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node roundl @section @code{roundl} @findex roundl POSIX specification:@* @url{http://www.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, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @item This function is not declared on some platforms: glibc 2.8, OSF/1 5.1. @end itemize Portability problems fixed by Gnulib module @code{roundl-ieee}: @itemize @item This function returns a positive zero for an argument between -0.5 and 0 on some platforms: AIX 7.1. @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/scalbln.texi���������������������������������������������0000664�0000000�0000000�00000000716�11671051007�0022724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalbln @section @code{scalbln} @findex scalbln POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ��������������������������������������������������gnulib-20111211-stable/doc/posix-functions/scalblnf.texi��������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0023067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalblnf @section @code{scalblnf} @findex scalblnf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5. @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/scalblnl.texi��������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0023104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalblnl @section @code{scalblnl} @findex scalblnl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5. @end itemize �������������������������gnulib-20111211-stable/doc/posix-functions/scalbn.texi����������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalbn @section @code{scalbn} @findex scalbn POSIX specification:@* @url{http://www.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, OSF/1 4.0, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/scalbnf.texi���������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalbnf @section @code{scalbnf} @findex scalbnf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9. @end itemize �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/scalbnl.texi���������������������������������������������0000664�0000000�0000000�00000000743�11671051007�0022724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scalbnl @section @code{scalbnl} @findex scalbnl POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5. @end itemize �����������������������������gnulib-20111211-stable/doc/posix-functions/scandir.texi���������������������������������������������0000664�0000000�0000000�00000001736�11671051007�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scandir @section @code{scandir} @findex scandir POSIX specification:@* @url{http://www.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 9, BeOS. @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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Interix 3.5. @item The fourth parameter of this function is declared as @code{int (*) (void *, void *)} on some platforms: AIX 5.1. @end itemize ����������������������������������gnulib-20111211-stable/doc/posix-functions/scanf.texi�����������������������������������������������0000664�0000000�0000000�00000001414�11671051007�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node scanf @section @code{scanf} @findex scanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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 9. @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-20111211-stable/doc/posix-functions/sched_get_priority_max.texi������������������������������0000664�0000000�0000000�00000000752�11671051007�0026041�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{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/sched_get_priority_min.texi������������������������������0000664�0000000�0000000�00000000735�11671051007�0026040�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{http://www.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, IRIX 5.3, mingw, MSVC 9, BeOS. @end itemize �����������������������������������gnulib-20111211-stable/doc/posix-functions/sched_getparam.texi��������������������������������������0000664�0000000�0000000�00000000733�11671051007�0024253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_getparam @section @code{sched_getparam} @findex sched_getparam POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/sched_getscheduler.texi����������������������������������0000664�0000000�0000000�00000000753�11671051007�0025133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_getscheduler @section @code{sched_getscheduler} @findex sched_getscheduler POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������gnulib-20111211-stable/doc/posix-functions/sched_rr_get_interval.texi�������������������������������0000664�0000000�0000000�00000001001�11671051007�0025626�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{http://www.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 X 10.5, OpenBSD 3.8, Minix 3.1.8, HP-UX 11, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sched_setparam.texi��������������������������������������0000664�0000000�0000000�00000000733�11671051007�0024267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_setparam @section @code{sched_setparam} @findex sched_setparam POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������gnulib-20111211-stable/doc/posix-functions/sched_setscheduler.texi����������������������������������0000664�0000000�0000000�00000000753�11671051007�0025147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_setscheduler @section @code{sched_setscheduler} @findex sched_setscheduler POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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 X 10.5, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������gnulib-20111211-stable/doc/posix-functions/sched_yield.texi�����������������������������������������0000664�0000000�0000000�00000000647�11671051007�0023565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched_yield @section @code{sched_yield} @findex sched_yield POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/sched_yield.html} Gnulib module: --- Portability problems fixed 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 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/seed48.texi����������������������������������������������0000664�0000000�0000000�00000000566�11671051007�0022405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node seed48 @section @code{seed48} @findex seed48 POSIX specification:@* @url{http://www.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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/seekdir.texi���������������������������������������������0000664�0000000�0000000�00000001102�11671051007�0022722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node seekdir @section @code{seekdir} @findex seekdir POSIX specification:@* @url{http://www.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 9, BeOS. @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 MacOS X systems). @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/select.texi����������������������������������������������0000664�0000000�0000000�00000003000�11671051007�0022552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node select @section @code{select} @findex select POSIX specification:@* @url{http://www.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 for @code{accept} are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @item This function fails when the @code{nfds} argument is 0 on some platforms: Interix 3.5. @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 On BeOS, @code{select} can only be called on descriptors created by the @code{socket} function, not on regular file descriptors. @item On Solaris 2.6 and older, @code{select} applied to a file descriptor opened for reading and associated with @code{/dev/null} hangs, waiting for input, when instead it should return immediately. @item On Linux, when some file descriptor refers to a regular file, @code{select} may fail, setting @code{errno} to @code{EBADF}. @item This function is declared in @code{<unistd.h>}, not @code{<sys/select.h>}, on some platforms: IRIX 5.3. @end itemize gnulib-20111211-stable/doc/posix-functions/sem_close.texi�������������������������������������������0000664�0000000�0000000�00000000637�11671051007�0023261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_close @section @code{sem_close} @findex sem_close POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_destroy.texi�����������������������������������������0000664�0000000�0000000�00000000647�11671051007�0023646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_destroy @section @code{sem_destroy} @findex sem_destroy POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_getvalue.texi����������������������������������������0000664�0000000�0000000�00000000653�11671051007�0023766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_getvalue @section @code{sem_getvalue} @findex sem_getvalue POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_init.texi��������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0023113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_init @section @code{sem_init} @findex sem_init POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_open.texi��������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0023111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_open @section @code{sem_open} @findex sem_open POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_post.texi��������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0023135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_post @section @code{sem_post} @findex sem_post POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_timedwait.texi���������������������������������������0000664�0000000�0000000�00000001001�11671051007�0024125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_timedwait @section @code{sem_timedwait} @findex sem_timedwait POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_trywait.texi�����������������������������������������0000664�0000000�0000000�00000000647�11671051007�0023660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_trywait @section @code{sem_trywait} @findex sem_trywait POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_unlink.texi������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0023451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_unlink @section @code{sem_unlink} @findex sem_unlink POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sem_wait.texi��������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0023114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sem_wait @section @code{sem_wait} @findex sem_wait POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/semctl.texi����������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node semctl @section @code{semctl} @findex semctl POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/semget.texi����������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0022575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node semget @section @code{semget} @findex semget POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/semop.texi�����������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0022430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node semop @section @code{semop} @findex semop POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/send.texi������������������������������������������������0000664�0000000�0000000�00000001050�11671051007�0022227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node send @section @code{send} @findex send POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/send.html} Gnulib module: send Portability problems fixed by Gnulib: @itemize @item This function has the return type @code{int} instead of @code{ssize_t} on some platforms: OSF/1 5.1. @item On Windows platforms (excluding Cygwin), error codes for @code{send} 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-20111211-stable/doc/posix-functions/sendmsg.texi���������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sendmsg @section @code{sendmsg} @findex sendmsg POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sendto.texi����������������������������������������������0000664�0000000�0000000�00000001064�11671051007�0022577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sendto @section @code{sendto} @findex sendto POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/sendto.html} Gnulib module: sendto Portability problems fixed by Gnulib: @itemize @item This function has the return type @code{int} instead of @code{ssize_t} on some platforms: OSF/1 5.1. @item On Windows platforms (excluding Cygwin), error codes for @code{sendto} 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-20111211-stable/doc/posix-functions/setbuf.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setbuf @section @code{setbuf} @findex setbuf POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/setegid.texi���������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setegid @section @code{setegid} @findex setegid POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setenv.texi����������������������������������������������0000664�0000000�0000000�00000001707�11671051007�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setenv @section @code{setenv} @findex setenv POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/setenv.html} Gnulib module: setenv Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 4.3.2, HP-UX 11.23, IRIX 6.5, Solaris 9, mingw, MSVC 9, BeOS. @item This function is not declared on some platforms: OSF/1 5.1. @item On some platforms, this function does not fail with @samp{EINVAL} when passed an empty string or a string containing @samp{=}: MacOS X 10.5, FreeBSD 6.0, NetBSD 1.6, OpenBSD 3.8, 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-20111211-stable/doc/posix-functions/seteuid.texi���������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0022740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node seteuid @section @code{seteuid} @findex seteuid POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setgid.texi����������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setgid @section @code{setgid} @findex setgid POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setgrent.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setgrent @section @code{setgrent} @findex setgrent POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sethostent.texi������������������������������������������0000664�0000000�0000000�00000000577�11671051007�0023513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sethostent @section @code{sethostent} @findex sethostent POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setitimer.texi�������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0023314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setitimer @section @code{setitimer} @findex setitimer POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setjmp.texi����������������������������������������������0000664�0000000�0000000�00000001401�11671051007�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setjmp @section @code{setjmp} @findex setjmp POSIX specification:@* @url{http://www.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} 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-20111211-stable/doc/posix-functions/setkey.texi����������������������������������������������0000664�0000000�0000000�00000001031�11671051007�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setkey @section @code{setkey} @findex setkey POSIX specification:@* @url{http://www.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: NetBSD 5.0, Minix 3.1.8, Cygwin, mingw, MSVC 9, BeOS. @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-20111211-stable/doc/posix-functions/setlocale.texi�������������������������������������������0000664�0000000�0000000�00000002050�11671051007�0023252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setlocale @section @code{setlocale} @findex setlocale POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/setlocale.html} Gnulib module: setlocale Portability problems fixed by Gnulib: @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. @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. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setlogmask.texi������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0023454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setlogmask @section @code{setlogmask} @findex setlogmask POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setnetent.texi�������������������������������������������0000664�0000000�0000000�00000000603�11671051007�0023312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setnetent @section @code{setnetent} @findex setnetent POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setpgid.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpgid @section @code{setpgid} @findex setpgid POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setpgrp.texi���������������������������������������������0000664�0000000�0000000�00000000607�11671051007�0022771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpgrp @section @code{setpgrp} @findex setpgrp POSIX specification:@* @url{http://www.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 9, Interix 3.5. @end itemize �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setpriority.texi�����������������������������������������0000664�0000000�0000000�00000000620�11671051007�0023675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpriority @section @code{setpriority} @findex setpriority POSIX specification:@* @url{http://www.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: Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setprotoent.texi�����������������������������������������0000664�0000000�0000000�00000000603�11671051007�0023667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setprotoent @section @code{setprotoent} @findex setprotoent POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setpwent.texi��������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setpwent @section @code{setpwent} @findex setpwent POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setregid.texi��������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0023107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setregid @section @code{setregid} @findex setregid POSIX specification:@* @url{http://www.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, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setreuid.texi��������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setreuid @section @code{setreuid} @findex setreuid POSIX specification:@* @url{http://www.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, Solaris 2.4, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setrlimit.texi�������������������������������������������0000664�0000000�0000000�00000001116�11671051007�0023315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setrlimit @section @code{setrlimit} @findex setrlimit POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/setrlimit.html} Gnulib module: --- Portability problems fixed 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, BeOS. @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-20111211-stable/doc/posix-functions/setservent.texi������������������������������������������0000664�0000000�0000000�00000000577�11671051007�0023515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setservent @section @code{setservent} @findex setservent POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setsid.texi����������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setsid @section @code{setsid} @findex setsid POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setsockopt.texi������������������������������������������0000664�0000000�0000000�00000001037�11671051007�0023501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setsockopt @section @code{setsockopt} @findex setsockopt POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/setsockopt.html} Gnulib module: setsockopt Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes for @code{setsockopt} 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-20111211-stable/doc/posix-functions/setstate.texi��������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setstate @section @code{setstate} @findex setstate POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/setstate.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Solaris 2.4, mingw, MSVC 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setuid.texi����������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setuid @section @code{setuid} @findex setuid POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setutxent.texi�������������������������������������������0000664�0000000�0000000�00000000660�11671051007�0023347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setutxent @section @code{setutxent} @findex setutxent POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/setvbuf.texi���������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0022757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setvbuf @section @code{setvbuf} @findex setvbuf POSIX specification:@* @url{http://www.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. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/shm_open.texi��������������������������������������������0000664�0000000�0000000�00000000717�11671051007�0023117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shm_open @section @code{shm_open} @findex shm_open POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������gnulib-20111211-stable/doc/posix-functions/shm_unlink.texi������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0023457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shm_unlink @section @code{shm_unlink} @findex shm_unlink POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.4, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������gnulib-20111211-stable/doc/posix-functions/shmat.texi�����������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shmat @section @code{shmat} @findex shmat POSIX specification:@* @url{http://www.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 9, BeOS. @item Attempts to @code{shmat} into a previously malloc-ed region fail on SunOS 4, with @code{errno} set to @code{EINVAL}, even if there is an @code{munmap} call in between. @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-20111211-stable/doc/posix-functions/shmctl.texi����������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shmctl @section @code{shmctl} @findex shmctl POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/shmdt.texi�����������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0022424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shmdt @section @code{shmdt} @findex shmdt POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/shmget.texi����������������������������������������������0000664�0000000�0000000�00000001014�11671051007�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shmget @section @code{shmget} @findex shmget POSIX specification:@* @url{http://www.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 9, BeOS. @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-20111211-stable/doc/posix-functions/shutdown.texi��������������������������������������������0000664�0000000�0000000�00000000725�11671051007�0023161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node shutdown @section @code{shutdown} @findex shutdown POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/shutdown.html} Gnulib module: shutdown Portability problems fixed by Gnulib: @itemize @item On Windows platforms (excluding Cygwin), error codes for @code{shutdown} 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-20111211-stable/doc/posix-functions/sigaction.texi�������������������������������������������0000664�0000000�0000000�00000002777�11671051007�0023277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigaction @section @code{sigaction} @findex sigaction POSIX specification:@* @url{http://www.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 9. @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 9, cygwin. @item Support for SA_SIGINFO is missing on some platforms: mingw, MSVC 9, Interix 3.5. @item Support for SIGCHLD, and thus for SA_NOCLDSTOP and SA_NOCLDWAIT, is missing on some platforms: mingw, MSVC 9. @item Support for SA_RESETHAND is missing on some platforms: NonStop. @item Support for SA_RESTART is missing on some platforms: mingw, MSVC 9, NonStop. @item In spite of having SA_SIGACTION, struct sigaction lacks the sa_sigaction member on some platforms: Irix 5.3. @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-20111211-stable/doc/posix-functions/sigaddset.texi�������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigaddset @section @code{sigaddset} @findex sigaddset POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigaltstack.texi�����������������������������������������0000664�0000000�0000000�00000001240�11671051007�0023610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigaltstack @section @code{sigaltstack} @findex sigaltstack POSIX specification:@* @url{http://www.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, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/sigdelset.texi�������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigdelset @section @code{sigdelset} @findex sigdelset POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigemptyset.texi�����������������������������������������0000664�0000000�0000000�00000000605�11671051007�0023660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigemptyset @section @code{sigemptyset} @findex sigemptyset POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigfillset.texi������������������������������������������0000664�0000000�0000000�00000000601�11671051007�0023444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigfillset @section @code{sigfillset} @findex sigfillset POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sighold.texi���������������������������������������������0000664�0000000�0000000�00000000632�11671051007�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sighold @section @code{sighold} @findex sighold POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigignore.texi�������������������������������������������0000664�0000000�0000000�00000000676�11671051007�0023301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigignore @section @code{sigignore} @findex sigignore POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/siginterrupt.texi����������������������������������������0000664�0000000�0000000�00000001042�11671051007�0024036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node siginterrupt @section @code{siginterrupt} @findex siginterrupt POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Note: POSIX recommends using @code{sigaction} with SA_RESTART instead of @code{siginterrupt (sig, 0)}. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigismember.texi�����������������������������������������0000664�0000000�0000000�00000000605�11671051007�0023611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigismember @section @code{sigismember} @findex sigismember POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/siglongjmp.texi������������������������������������������0000664�0000000�0000000�00000000711�11671051007�0023452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node siglongjmp @section @code{siglongjmp} @findex siglongjmp POSIX specification:@* @url{http://www.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 9. @item This is only provided as a macro on some platforms: Cygwin. @end itemize �������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/signal.texi����������������������������������������������0000664�0000000�0000000�00000001755�11671051007�0022567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node signal @section @code{signal} @findex signal POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/signbit.texi���������������������������������������������0000664�0000000�0000000�00000000704�11671051007�0022742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node signbit @section @code{signbit} @findex signbit POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/signgam.texi���������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node signgam @section @code{signgam} @findex signgam POSIX specification:@* @url{http://www.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 X 10.5, Minix 3.1.8, AIX 5.1, IRIX 6.5, OSF/1 5.1, mingw, MSVC 9. @end itemize ������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigpause.texi��������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0023122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigpause @section @code{sigpause} @findex sigpause POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/sigpause.html} Gnulib module: --- Portability problems fixed 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, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigpending.texi������������������������������������������0000664�0000000�0000000�00000000601�11671051007�0023426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigpending @section @code{sigpending} @findex sigpending POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigprocmask.texi�����������������������������������������0000664�0000000�0000000�00000000605�11671051007�0023625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigprocmask @section @code{sigprocmask} @findex sigprocmask POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigqueue.texi��������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0023132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigqueue @section @code{sigqueue} @findex sigqueue POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigrelse.texi��������������������������������������������0000664�0000000�0000000�00000000636�11671051007�0023124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigrelse @section @code{sigrelse} @findex sigrelse POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigset.texi����������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigset @section @code{sigset} @findex sigset POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigsetjmp.texi�������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0023305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigsetjmp @section @code{sigsetjmp} @findex sigsetjmp POSIX specification:@* @url{http://www.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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigsuspend.texi������������������������������������������0000664�0000000�0000000�00000000571�11671051007�0023471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigsuspend @section @code{sigsuspend} @findex sigsuspend POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigtimedwait.texi����������������������������������������0000664�0000000�0000000�00000001120�11671051007�0023766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigtimedwait @section @code{sigtimedwait} @findex sigtimedwait POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, Minix 3.1.8, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item Linux implements the meaning of NULL timeout by doing what @code{sigwaitinfo} does; other platforms may not do the same. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sigwait.texi���������������������������������������������0000664�0000000�0000000�00000001443�11671051007�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigwait @section @code{sigwait} @findex sigwait POSIX specification:@* @url{http://www.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 2010-11 (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 9, BeOS. @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-20111211-stable/doc/posix-functions/sigwaitinfo.texi�����������������������������������������0000664�0000000�0000000�00000000705�11671051007�0023627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sigwaitinfo @section @code{sigwaitinfo} @findex sigwaitinfo POSIX specification:@* @url{http://www.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 X 10.5, OpenBSD 3.8, Minix 3.1.8, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sin.texi�������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0022074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sin @section @code{sin} @findex sin POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/sinf.texi������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinf @section @code{sinf} @findex sinf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sinh.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinh @section @code{sinh} @findex sinh POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/sinhf.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinhf @section @code{sinhf} @findex sinhf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/sinhl.texi�����������������������������������������������0000664�0000000�0000000�00000001034�11671051007�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinhl @section @code{sinhl} @findex sinhl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sinl.texi������������������������������������������������0000664�0000000�0000000�00000001136�11671051007�0022250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sinl @section @code{sinl} @findex sinl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sleep.texi�����������������������������������������������0000664�0000000�0000000�00000001357�11671051007�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sleep @section @code{sleep} @findex sleep POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/snprintf.texi��������������������������������������������0000664�0000000�0000000�00000006656�11671051007�0023162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node snprintf @section @code{snprintf} @findex snprintf POSIX specification:@* @url{http://www.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: IRIX 5.3, OSF/1 4.0, Solaris 2.5.1, MSVC 9. @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, BeOS. @item This function does not return a byte count as specified in C99 on some platforms: HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw. @item This function overwrites memory even when a size argument of 1 is passed on some platforms: Linux libc5, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @item This function does not truncate the result as specified in C99 on some platforms: mingw, MSVC 9. @item This function does not fully support the @samp{n} directive on some platforms: HP-UX 11, mingw, MSVC 9. @item This function overwrites memory even when a zero size argument is passed on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sockatmark.texi������������������������������������������0000664�0000000�0000000�00000000762�11671051007�0023446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sockatmark @section @code{sockatmark} @findex sockatmark POSIX specification:@* @url{http://www.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: MacOS X 10.4, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11.23, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������gnulib-20111211-stable/doc/posix-functions/socket.texi����������������������������������������������0000664�0000000�0000000�00000001657�11671051007�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node socket @section @code{socket} @findex socket POSIX specification:@* @url{http://www.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 for @code{socket} are not placed in @code{errno}, and @code{WSAGetLastError} must be used instead. @end itemize Portability problems not fixed by Gnulib: @itemize @item On BeOS, 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. @end itemize ���������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/socketpair.texi������������������������������������������0000664�0000000�0000000�00000000577�11671051007�0023457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node socketpair @section @code{socketpair} @findex socketpair POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sprintf.texi���������������������������������������������0000664�0000000�0000000�00000005166�11671051007�0022777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sprintf @section @code{sprintf} @findex sprintf POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @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 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sqrt.texi������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0022273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sqrt @section @code{sqrt} @findex sqrt POSIX specification:@* @url{http://www.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 @item This function is missing on some platforms: MacOS X 10.3. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sqrtf.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sqrtf @section @code{sqrtf} @findex sqrtf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/sqrtl.texi�����������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0022446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sqrtl @section @code{sqrtl} @findex sqrtl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/srand.texi�����������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node srand @section @code{srand} @findex srand POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/srand.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/srand48.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node srand48 @section @code{srand48} @findex srand48 POSIX specification:@* @url{http://www.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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/srandom.texi���������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node srandom @section @code{srandom} @findex srandom POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/srandom.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Solaris 2.4, mingw, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sscanf.texi����������������������������������������������0000664�0000000�0000000�00000001005�11671051007�0022553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sscanf @section @code{sscanf} @findex sscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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-20111211-stable/doc/posix-functions/stat.texi������������������������������������������������0000664�0000000�0000000�00000002311�11671051007�0022252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stat @section @code{stat} @findex stat POSIX specification:@* @url{http://www.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 some platforms, @code{stat("link-to-file/",buf)} succeeds instead of failing with @code{ENOTDIR}. FreeBSD 7.2, AIX 7.1, Solaris 9. @item On some platforms, @code{stat(".",buf)} and @code{stat("./",buf)} give different results: mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item Cygwin's @code{stat} function sometimes sets @code{errno} to @code{EACCES} when @code{ENOENT} would be more appropriate. @item On Windows platforms (excluding Cygwin), @code{st_ino} is always 0. @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-20111211-stable/doc/posix-functions/statvfs.texi���������������������������������������������0000664�0000000�0000000�00000001347�11671051007�0023001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node statvfs @section @code{statvfs} @findex statvfs POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/stderr.texi����������������������������������������������0000664�0000000�0000000�00000001576�11671051007�0022616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stderr @section @code{stderr} @findex stderr POSIX specification:@* @url{http://www.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 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-20111211-stable/doc/posix-functions/stdin.texi�����������������������������������������������0000664�0000000�0000000�00000001564�11671051007�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdin @section @code{stdin} @findex stdin POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/stdout.texi����������������������������������������������0000664�0000000�0000000�00000001575�11671051007�0022634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdout @section @code{stdout} @findex stdout POSIX specification:@* @url{http://www.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 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-20111211-stable/doc/posix-functions/stpcpy.texi����������������������������������������������0000664�0000000�0000000�00000000743�11671051007�0022630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stpcpy @section @code{stpcpy} @findex stpcpy POSIX specification:@* @url{http://www.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, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������gnulib-20111211-stable/doc/posix-functions/stpncpy.texi���������������������������������������������0000664�0000000�0000000�00000001132�11671051007�0022777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stpncpy @section @code{stpncpy} @findex stpncpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/stpncpy.html} Gnulib module: stpncpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @item This function has an incompatible return value on some platforms: AIX 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strcasecmp.texi������������������������������������������0000664�0000000�0000000�00000001141�11671051007�0023443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcasecmp @section @code{strcasecmp} @findex strcasecmp POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/strcasecmp_l.texi����������������������������������������0000664�0000000�0000000�00000001031�11671051007�0023754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcasecmp_l @section @code{strcasecmp_l} @findex strcasecmp_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strcat.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcat @section @code{strcat} @findex strcat POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strcat.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strchr.texi����������������������������������������������0000664�0000000�0000000�00000000751�11671051007�0022612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strchr @section @code{strchr} @findex strchr POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strcmp.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcmp @section @code{strcmp} @findex strcmp POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strcoll.texi���������������������������������������������0000664�0000000�0000000�00000000776�11671051007�0022776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcoll @section @code{strcoll} @findex strcoll POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strcoll_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcoll_l @section @code{strcoll_l} @findex strcoll_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strcpy.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcpy @section @code{strcpy} @findex strcpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strcpy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strcspn.texi���������������������������������������������0000664�0000000�0000000�00000001042�11671051007�0022773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strcspn @section @code{strcspn} @findex strcspn POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strdup.texi����������������������������������������������0000664�0000000�0000000�00000001273�11671051007�0022626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strdup @section @code{strdup} @findex strdup POSIX specification:@* @url{http://www.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 is missing on some old platforms. @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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strerror.texi��������������������������������������������0000664�0000000�0000000�00000002152�11671051007�0023164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strerror @section @code{strerror} @findex strerror POSIX specification:@* @url{http://www.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, OSF/1 5.1, NonStop Kernel, Cygwin 1.5.x, mingw, MSVC 9. @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, OpenBSD 4.7, MacOS X 10.5. @item This function fails to return a string for out-of-range integers on some platforms: HP-UX 11, IRIX 6.5, Solaris 8. (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-20111211-stable/doc/posix-functions/strerror_l.texi������������������������������������������0000664�0000000�0000000�00000001036�11671051007�0023477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strerror_l @section @code{strerror_l} @findex strerror_l POSIX specification:@* @url{http://www.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.3.6, MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strerror_r.texi������������������������������������������0000664�0000000�0000000�00000004621�11671051007�0023510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strerror_r @section @code{strerror_r} @findex strerror_r POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strerror_r.html} 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 9. @item glibc and Cygwin 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, OSF/1 5.1. @item The third argument is of type @code{int} instead of @code{size_t} on some platforms: AIX 5.1, OSF/1 5.1. @item When this function fails, it returns -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, OSF/1 5.1. @item When this function fails, it corrupts @code{errno}, on some platforms: Solaris 10. @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, OSF/1 5.1, 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 X 10.5. @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, OSF/1 5.1. @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-20111211-stable/doc/posix-functions/strfmon.texi���������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0022775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strfmon @section @code{strfmon} @findex strfmon POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, IRIX 5.3, Cygwin 1.7.1, mingw, MSVC 9, BeOS. @end itemize �������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strfmon_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strfmon_l @section @code{strfmon_l} @findex strfmon_l POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strfmon_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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strftime.texi��������������������������������������������0000664�0000000�0000000�00000001155�11671051007�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strftime @section @code{strftime} @findex strftime POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strftime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @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). @end itemize Extension: Gnulib offers a module @samp{strftime} that provides an @code{nstrftime} function with various GNU extensions. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strftime_l.texi������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0023444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strftime_l @section @code{strftime_l} @findex strftime_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strlen.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strlen @section @code{strlen} @findex strlen POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strncasecmp.texi�����������������������������������������0000664�0000000�0000000�00000001170�11671051007�0023623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncasecmp @section @code{strncasecmp} @findex strncasecmp POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/strncasecmp_l.texi���������������������������������������0000664�0000000�0000000�00000001035�11671051007�0024136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncasecmp_l @section @code{strncasecmp_l} @findex strncasecmp_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strncat.texi���������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0022756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncat @section @code{strncat} @findex strncat POSIX specification:@* @url{http://www.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. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strncmp.texi���������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0022773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncmp @section @code{strncmp} @findex strncmp POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strncpy.texi���������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0023007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strncpy @section @code{strncpy} @findex strncpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strncpy.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strndup.texi���������������������������������������������0000664�0000000�0000000�00000001115�11671051007�0022777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strndup @section @code{strndup} @findex strndup POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strndup.html} Gnulib module: strndup Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/strnlen.texi���������������������������������������������0000664�0000000�0000000�00000001031�11671051007�0022762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strnlen @section @code{strnlen} @findex strnlen POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strnlen.html} Gnulib module: strnlen Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw, Interix 3.5. @item This function is buggy on some platforms: AIX 4.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strpbrk.texi���������������������������������������������0000664�0000000�0000000�00000001042�11671051007�0022766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strpbrk @section @code{strpbrk} @findex strpbrk POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strptime.texi��������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0023153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strptime @section @code{strptime} @findex strptime POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strptime.html} Gnulib module: strptime Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strrchr.texi���������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0023001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strrchr @section @code{strrchr} @findex strrchr POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strsignal.texi�������������������������������������������0000664�0000000�0000000�00000001367�11671051007�0023317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strsignal @section @code{strsignal} @findex strsignal POSIX specification:@* @url{http://www.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, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/strspn.texi����������������������������������������������0000664�0000000�0000000�00000000743�11671051007�0022637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strspn @section @code{strspn} @findex strspn POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strstr.texi����������������������������������������������0000664�0000000�0000000�00000002063�11671051007�0022644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strstr @section @code{strstr} @findex strstr POSIX specification:@* @url{http://www.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. @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 X 10.5, FreeBSD 6.2, NetBSD 5.0, OpenBSD 4.0, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/strtod.texi����������������������������������������������0000664�0000000�0000000�00000005131�11671051007�0022621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtod @section @code{strtod} @findex strtod POSIX specification:@* @url{http://www.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, OSF/1 5.1. @item This function allows whitespace between @samp{e} and the exponent on some platforms: HP-UX 11.11, IRIX 6.5, OSF/1 4.0. @item This function returns the wrong end pointer for @samp{-0x} on some platforms: glibc 2.4, MacOS X 10.5, FreeBSD 6.2, AIX 7.1, Cygwin < 1.5.25-11. @item This function returns +0.0 (not -0.0) for @samp{-0} on some platforms: IRIX 6.5, OSF/1 4.0. @item This function fails to parse Infinities and plain NaNs on some platforms: OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw, MSVC 9. @item This function fails to parse @samp{NaN()} on some platforms: glibc-2.3.6, MacOS X 10.5, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Cygwin < 1.5.25-11, mingw, MSVC 9. @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, OSF/1 5.1, mingw, MSVC 9. @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, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @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 -0.0) for negative underflow on some platforms: glibc 2.7, Cygwin 1.5.x, mingw, MSVC 9. @item This function cannot distinguish between ``nan'' and ``-nan'' on some platforms: glibc 2.7, IRIX 6.5, OSF/1 5.1, mingw, MSVC 9. @item This function fails to correctly parse very long strings on some platforms: MacOS X 10.5, FreeBSD 6.2, NetBSD 5.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9. @item The replacement function does not always return correctly rounded results. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strtof.texi����������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0022625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtof @section @code{strtof} @findex strtof POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strtoimax.texi�������������������������������������������0000664�0000000�0000000�00000001025�11671051007�0023332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoimax @section @code{strtoimax} @findex strtoimax POSIX specification:@* @url{http://www.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, AIX 4.3.2, IRIX 6.5, OSF/1 5.1, Solaris 9, MSVC 9, Interix 3.5. @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-20111211-stable/doc/posix-functions/strtok.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtok @section @code{strtok} @findex strtok POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strtok_r.texi��������������������������������������������0000664�0000000�0000000�00000001247�11671051007�0023155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtok_r @section @code{strtok_r} @findex strtok_r POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/strtol.texi����������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0022631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtol @section @code{strtol} @findex strtol POSIX specification:@* @url{http://www.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. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strtold.texi���������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0023001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtold @section @code{strtold} @findex strtold POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strtold.html} Gnulib 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, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strtoll.texi���������������������������������������������0000664�0000000�0000000�00000000617�11671051007�0023011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoll @section @code{strtoll} @findex strtoll POSIX specification:@* @url{http://www.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, OSF/1 5.1, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strtoul.texi���������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0023023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoul @section @code{strtoul} @findex strtoul POSIX specification:@* @url{http://www.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. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strtoull.texi��������������������������������������������0000664�0000000�0000000�00000000624�11671051007�0023174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoull @section @code{strtoull} @findex strtoull POSIX specification:@* @url{http://www.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, OSF/1 5.1, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/strtoumax.texi�������������������������������������������0000664�0000000�0000000�00000001023�11671051007�0023344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strtoumax @section @code{strtoumax} @findex strtoumax POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, MSVC 9, Interix 3.5. @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-20111211-stable/doc/posix-functions/strxfrm.texi���������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0023012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strxfrm @section @code{strxfrm} @findex strxfrm POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/strxfrm_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strxfrm_l @section @code{strxfrm_l} @findex strxfrm_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/swab.texi������������������������������������������������0000664�0000000�0000000�00000000530�11671051007�0022234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node swab @section @code{swab} @findex swab POSIX specification:@* @url{http://www.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: BeOS. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/swprintf.texi��������������������������������������������0000664�0000000�0000000�00000001361�11671051007�0023157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node swprintf @section @code{swprintf} @findex swprintf POSIX specification:@* @url{http://www.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 This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item On AIX and Windows 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. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/swscanf.texi���������������������������������������������0000664�0000000�0000000�00000001106�11671051007�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node swscanf @section @code{swscanf} @findex swscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/symlink.texi���������������������������������������������0000664�0000000�0000000�00000001125�11671051007�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node symlink @section @code{symlink} @findex symlink POSIX specification:@* @url{http://www.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: 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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item Some file systems do not support symbolic links. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/symlinkat.texi�������������������������������������������0000664�0000000�0000000�00000001520�11671051007�0023313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node symlinkat @section @code{symlinkat} @findex symlinkat POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. 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. @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 9. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sync.texi������������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0022264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sync @section @code{sync} @findex sync POSIX specification:@* @url{http://www.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 9, Interix 3.5. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/sysconf.texi���������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sysconf @section @code{sysconf} @findex sysconf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/syslog.texi����������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0022631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node syslog @section @code{syslog} @findex syslog POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/system.texi����������������������������������������������0000664�0000000�0000000�00000001472�11671051007�0022632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node system @section @code{system} @findex system POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/system.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-20111211-stable/doc/posix-functions/tan.texi�������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0022065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tan @section @code{tan} @findex tan POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/tanf.texi������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanf @section @code{tanf} @findex tanf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tanh.texi������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanh @section @code{tanh} @findex tanh POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/tanhf.texi�����������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0022403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanhf @section @code{tanhf} @findex tanhf POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������gnulib-20111211-stable/doc/posix-functions/tanhl.texi�����������������������������������������������0000664�0000000�0000000�00000001034�11671051007�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanhl @section @code{tanhl} @findex tanhl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tanl.texi������������������������������������������������0000664�0000000�0000000�00000001136�11671051007�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tanl @section @code{tanl} @findex tanl POSIX specification:@* @url{http://www.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, Interix 3.5, BeOS. @item This function is only defined as a macro with arguments on some platforms: MSVC 9. @item This function is not declared on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcdrain.texi���������������������������������������������0000664�0000000�0000000�00000001043�11671051007�0022724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcdrain @section @code{tcdrain} @findex tcdrain POSIX specification:@* @url{http://www.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 9. @item On some platforms, @code{tcdrain} on a non-tty fails with @code{errno} set to @code{EINVAL} or, on MacOS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcflow.texi����������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcflow @section @code{tcflow} @findex tcflow POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcflush.texi���������������������������������������������0000664�0000000�0000000�00000001331�11671051007�0022750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcflush @section @code{tcflush} @findex tcflush POSIX specification:@* @url{http://www.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 9. @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 MacOS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcgetattr.texi�������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0023311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcgetattr @section @code{tcgetattr} @findex tcgetattr POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcgetpgrp.texi�������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0023277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcgetpgrp @section @code{tcgetpgrp} @findex tcgetpgrp POSIX specification:@* @url{http://www.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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcgetsid.texi��������������������������������������������0000664�0000000�0000000�00000001363�11671051007�0023113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcgetsid @section @code{tcgetsid} @findex tcgetsid POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/tcgetsid.html} Gnulib module: tcgetsid Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.3, FreeBSD 6.0, OpenBSD 4.5, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item This function is not declared on some platforms: OSF/1 5.1. @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, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcsendbreak.texi�����������������������������������������0000664�0000000�0000000�00000000575�11671051007�0023576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcsendbreak @section @code{tcsendbreak} @findex tcsendbreak POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcsetattr.texi�������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0023325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcsetattr @section @code{tcsetattr} @findex tcsetattr POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tcsetpgrp.texi�������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0023313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tcsetpgrp @section @code{tcsetpgrp} @findex tcsetpgrp POSIX specification:@* @url{http://www.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 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tdelete.texi���������������������������������������������0000664�0000000�0000000�00000000766�11671051007�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tdelete @section @code{tdelete} @findex tdelete POSIX specification:@* @url{http://www.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 9, BeOS. @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-20111211-stable/doc/posix-functions/telldir.texi���������������������������������������������0000664�0000000�0000000�00000001102�11671051007�0022733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node telldir @section @code{telldir} @findex telldir POSIX specification:@* @url{http://www.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 9, BeOS. @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 MacOS X systems). @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tempnam.texi���������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tempnam @section @code{tempnam} @findex tempnam POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/tfind.texi�����������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tfind @section @code{tfind} @findex tfind POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tgamma.texi����������������������������������������������0000664�0000000�0000000�00000000716�11671051007�0022554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tgamma @section @code{tgamma} @findex tgamma POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tgammaf.texi���������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tgammaf @section @code{tgammaf} @findex tgammaf POSIX specification:@* @url{http://www.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, OSF/1 4.0, Solaris 9, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-functions/tgammal.texi���������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tgammal @section @code{tgammal} @findex tgammal POSIX specification:@* @url{http://www.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 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������gnulib-20111211-stable/doc/posix-functions/time.texi������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node time @section @code{time} @findex time POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/timer_create.texi����������������������������������������0000664�0000000�0000000�00000000746�11671051007�0023754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_create @section @code{timer_create} @findex timer_create POSIX specification:@* @url{http://www.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: MacOS X 10.5, FreeBSD 6.4, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS, Tandem/NSK. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/timer_delete.texi����������������������������������������0000664�0000000�0000000�00000000746�11671051007�0023753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_delete @section @code{timer_delete} @findex timer_delete POSIX specification:@* @url{http://www.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: MacOS X 10.5, FreeBSD 6.4, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS, Tandem/NSK. @end itemize ��������������������������gnulib-20111211-stable/doc/posix-functions/timer_getoverrun.texi������������������������������������0000664�0000000�0000000�00000000753�11671051007�0024707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_getoverrun @section @code{timer_getoverrun} @findex timer_getoverrun POSIX specification:@* @url{http://www.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: MacOS X 10.5, FreeBSD 6.0, Minix 3.1.8, IRIX 5.3, Solaris 2.4, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������������������gnulib-20111211-stable/doc/posix-functions/timer_gettime.texi���������������������������������������0000664�0000000�0000000�00000000735�11671051007�0024145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_gettime @section @code{timer_gettime} @findex timer_gettime POSIX specification:@* @url{http://www.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: MacOS X 10.5, FreeBSD 6.4, Minix 3.1.8, IRIX 5.3, mingw, MSVC 9, Interix 3.5, BeOS, Tandem/NSK. @end itemize �����������������������������������gnulib-20111211-stable/doc/posix-functions/timer_settime.texi���������������������������������������0000664�0000000�0000000�00000000752�11671051007�0024160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timer_settime @section @code{timer_settime} @findex timer_settime POSIX specification:@* @url{http://www.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: MacOS X 10.5, FreeBSD 6.4, Minix 3.1.8, IRIX 5.3, Solaris 2.4, mingw, MSVC 9, Interix 3.5, BeOS, Tandem/NSK. @end itemize ����������������������gnulib-20111211-stable/doc/posix-functions/times.texi�����������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node times @section @code{times} @findex times POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-functions/timezone.texi��������������������������������������������0000664�0000000�0000000�00000000732�11671051007�0023136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node timezone @section @code{timezone} @findex timezone POSIX specification:@* @url{http://www.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, OSF/1 5.1, mingw. @item The address of this variable is not a compile-time constant on some platforms: mingw. @end itemize ��������������������������������������gnulib-20111211-stable/doc/posix-functions/tmpfile.texi���������������������������������������������0000664�0000000�0000000�00000001046�11671051007�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tmpfile @section @code{tmpfile} @findex tmpfile POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/tmpfile.html} Gnulib module: tmpfile Portability problems fixed by Gnulib: @itemize @item This function often fails for trivial reasons on some platforms: mingw, MSVC 9. @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-20111211-stable/doc/posix-functions/tmpnam.texi����������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tmpnam @section @code{tmpnam} @findex tmpnam POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/toascii.texi���������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0022740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node toascii @section @code{toascii} @findex toascii POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/toascii.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tolower.texi���������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0022777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tolower @section @code{tolower} @findex tolower POSIX specification:@* @url{http://www.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 On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tolower_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tolower_l @section @code{tolower_l} @findex tolower_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/toupper.texi���������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0023002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node toupper @section @code{toupper} @findex toupper POSIX specification:@* @url{http://www.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 On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/toupper_l.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node toupper_l @section @code{toupper_l} @findex toupper_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/towctrans.texi�������������������������������������������0000664�0000000�0000000�00000001070�11671051007�0023324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towctrans @section @code{towctrans} @findex towctrans POSIX specification:@* @url{http://www.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, Solaris 2.5.1, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/towctrans_l.texi�����������������������������������������0000664�0000000�0000000�00000001222�11671051007�0023636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towctrans_l @section @code{towctrans_l} @findex towctrans_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/towlower.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towlower @section @code{towlower} @findex towlower POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/towlower.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @item This function returns values of which the upper 16 bits are incorrect on some platforms: mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/towlower_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towlower_l @section @code{towlower_l} @findex towlower_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/towupper.texi��������������������������������������������0000664�0000000�0000000�00000001143�11671051007�0023166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towupper @section @code{towupper} @findex towupper POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/towupper.html} Gnulib module: wctype-h Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @item This function returns values of which the upper 16 bits are incorrect on some platforms: mingw. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/towupper_l.texi������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0023502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node towupper_l @section @code{towupper_l} @findex towupper_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/trunc.texi�����������������������������������������������0000664�0000000�0000000�00000001371�11671051007�0022437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node trunc @section @code{trunc} @findex trunc POSIX specification:@* @url{http://www.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, Interix 3.5. @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 @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/truncate.texi��������������������������������������������0000664�0000000�0000000�00000001060�11671051007�0023124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node truncate @section @code{truncate} @findex truncate POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/truncate.html} Gnulib 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 9. @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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/truncf.texi����������������������������������������������0000664�0000000�0000000�00000001442�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node truncf @section @code{truncf} @findex truncf POSIX specification:@* @url{http://www.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, Interix 3.5. @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 @item This function returns a positive zero for a minus zero argument on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/truncl.texi����������������������������������������������0000664�0000000�0000000�00000001573�11671051007�0022617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node truncl @section @code{truncl} @findex truncl POSIX specification:@* @url{http://www.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, MSVC 9, Interix 3.5, BeOS. @item This function is not declared (without @code{-D_GNU_SOURCE}) on some platforms: glibc 2.8. @item This function crashes on some platforms: OSF/1 4.0. @end itemize Portability problems fixed by Gnulib module @code{truncl-ieee}: @itemize @item This function returns a positive zero for an argument between -1 and 0 on some platforms: OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tsearch.texi���������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0022733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tsearch @section @code{tsearch} @findex tsearch POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ttyname.texi���������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ttyname @section @code{ttyname} @findex ttyname POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ttyname_r.texi�������������������������������������������0000664�0000000�0000000�00000001635�11671051007�0023311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ttyname_r @section @code{ttyname_r} @findex ttyname_r POSIX specification:@* @url{http://www.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 9, BeOS. @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: MacOS X 10.4, Solaris 11 2010-11 (when @code{_POSIX_PTHREAD_SEMANTICS} is not defined). @item This function ignores the size argument, thus overwriting memory after the buffer, on some platforms: OSF/1 5.1. @item This function refuses to do anything when the output buffer is less than 128 bytes large, on some platforms: Solaris 11 2010-11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/twalk.texi�����������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0022432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node twalk @section @code{twalk} @findex twalk POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/tzname.texi����������������������������������������������0000664�0000000�0000000�00000000732�11671051007�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tzname @section @code{tzname} @findex tzname POSIX specification:@* @url{http://www.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, OSF/1 5.1, mingw. @item The address of this variable is not a compile-time constant on some platforms: Cygwin, mingw. @end itemize ��������������������������������������gnulib-20111211-stable/doc/posix-functions/tzset.texi�����������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tzset @section @code{tzset} @findex tzset POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/tzset.html} Gnulib module: tzset Portability problems fixed by Gnulib: @itemize @item This function clobbers the buffer used by the localtime function on some platforms: Solaris 2.6. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ulimit.texi����������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ulimit @section @code{ulimit} @findex ulimit POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/umask.texi�����������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0022424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node umask @section @code{umask} @findex umask POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/uname.texi�����������������������������������������������0000664�0000000�0000000�00000000547�11671051007�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node uname @section @code{uname} @findex uname POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/ungetc.texi����������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ungetc @section @code{ungetc} @findex ungetc POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/ungetwc.texi���������������������������������������������0000664�0000000�0000000�00000001025�11671051007�0022754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ungetwc @section @code{ungetwc} @findex ungetwc POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/unlink.texi����������������������������������������������0000664�0000000�0000000�00000002532�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unlink @section @code{unlink} @findex unlink POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/unlink.html} Gnulib module: unlink Portability problems fixed by Gnulib: @itemize @item Some systems mistakenly succeed on @code{unlink("link-to-file/")}: GNU/Hurd, FreeBSD 7.2, AIX 7.1, Solaris 9. @item On MacOS X 10.5.6, 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 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-20111211-stable/doc/posix-functions/unlinkat.texi��������������������������������������������0000664�0000000�0000000�00000004011�11671051007�0023123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unlinkat @section @code{unlinkat} @findex unlinkat POSIX specification:@* @url{http://www.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, MacOS 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, OSF/1 5.1, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. But the replacement function is not safe to be used in libraries and is not multithread-safe. @item Some systems mistakenly succeed on @code{unlinkat(fd,"file/",flag)}: GNU/Hurd, Solaris 9. @item Some platforms declare this function in @code{fcntl.h} instead of @code{unistd.h}: Cygwin 1.7.1. @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 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-20111211-stable/doc/posix-functions/unlockpt.texi��������������������������������������������0000664�0000000�0000000�00000001123�11671051007�0023136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unlockpt @section @code{unlockpt} @findex unlockpt POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/unlockpt.html} Gnulib module: unlockpt Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is not declared on some platforms: IRIX 5.3. @item This function reports success for invalid file descriptors on some platforms: NetBSD 5.1, Cygwin 1.7.9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/unsetenv.texi��������������������������������������������0000664�0000000�0000000�00000002203�11671051007�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unsetenv @section @code{unsetenv} @findex unsetenv POSIX specification:@* @url{http://www.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 9, BeOS. @item This function is not declared on some platforms: OSF/1 5.1. @item This function has the return type @samp{void} instead of @samp{int} on some platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 1.6, OpenBSD 3.8, OSF/1 5.1. @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 2010-11, 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-20111211-stable/doc/posix-functions/uselocale.texi�������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node uselocale @section @code{uselocale} @findex uselocale POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/utime.texi�����������������������������������������������0000664�0000000�0000000�00000001472�11671051007�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utime @section @code{utime} @findex utime POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/utime.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @item On some old platforms (Sequent), @code{utime (file, NULL)} fails to set the file's timestamp to the current time. @item On some platforms, this function mis-handles trailing slash: Solaris 9. @item This function cannot set full timestamp resolution. Use @code{utimensat(AT_FDCWD,file,times,0)}, or the gnulib module utimens, instead. @item On some platforms, the prototype for @code{utime} omits @code{const} for the second argument. Fortunately, the argument is not modified, so it is safe to cast away const: mingw, MSVC 9. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/utimensat.texi�������������������������������������������0000664�0000000�0000000�00000004143�11671051007�0023315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utimensat @section @code{utimensat} @findex utimensat POSIX specification:@* @url{http://www.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.3.6, MacOS 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, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. However, the replacement function may end up truncating timestamps to less 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. @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. @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 fdutimensat provides a similar interface. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/utimes.texi����������������������������������������������0000664�0000000�0000000�00000002303�11671051007�0022606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utimes @section @code{utimes} @findex utimes POSIX specification:@* @url{http://www.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 9, Interix 3.5, BeOS. @item The declaration of this function lacks @code{const} in the second argument on some platforms: OSF/1 5.1. @item On some platforms, this function mis-handles 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 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. @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-20111211-stable/doc/posix-functions/va_arg.texi����������������������������������������������0000664�0000000�0000000�00000002044�11671051007�0022541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node va_arg @section @code{va_arg} @findex va_arg POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/va_copy.texi���������������������������������������������0000664�0000000�0000000�00000000655�11671051007�0022750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node va_copy @section @code{va_copy} @findex va_copy POSIX specification:@* @url{http://www.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, OSF/1 5.1 with cc. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/va_end.texi����������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node va_end @section @code{va_end} @findex va_end POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/va_start.texi��������������������������������������������0000664�0000000�0000000�00000000460�11671051007�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node va_start @section @code{va_start} @findex va_start POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/vdprintf.texi��������������������������������������������0000664�0000000�0000000�00000003033�11671051007�0023135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vdprintf @section @code{vdprintf} @findex vdprintf POSIX specification:@* @url{http://www.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: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems fixed by Gnulib module @code{vdprintf-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: BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: BeOS. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, BeOS. @item This function does not support the @samp{F} directive on some platforms: BeOS. @item This function does not support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}, on some platforms: BeOS. @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, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/vfprintf.texi��������������������������������������������0000664�0000000�0000000�00000006726�11671051007�0023153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfprintf @section @code{vfprintf} @findex vfprintf POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @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 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @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: MacOS X 10.3, FreeBSD 6.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 9. @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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/vfscanf.texi���������������������������������������������0000664�0000000�0000000�00000001617�11671051007�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfscanf @section @code{vfscanf} @findex vfscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: Minix 3.1.8, AIX 4.3.2, IRIX 6.5, OSF/1 5.1, Solaris 8, Interix 3.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-20111211-stable/doc/posix-functions/vfwprintf.texi�������������������������������������������0000664�0000000�0000000�00000001347�11671051007�0023334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfwprintf @section @code{vfwprintf} @findex vfwprintf POSIX specification:@* @url{http://www.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 This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/vfwscanf.texi��������������������������������������������0000664�0000000�0000000�00000001134�11671051007�0023116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vfwscanf @section @code{vfwscanf} @findex vfwscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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, OSF/1 5.1, Solaris 8, Cygwin 1.5.x, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/vprintf.texi���������������������������������������������0000664�0000000�0000000�00000006716�11671051007�0023004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vprintf @section @code{vprintf} @findex vprintf POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @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 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @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: MacOS X 10.3, FreeBSD 6.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 9. @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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @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-20111211-stable/doc/posix-functions/vscanf.texi����������������������������������������������0000664�0000000�0000000�00000001557�11671051007�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vscanf @section @code{vscanf} @findex vscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item This function is missing on some platforms: AIX 4.3.2, IRIX 6.5, OSF/1 5.1, Solaris 8. @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-20111211-stable/doc/posix-functions/vsnprintf.texi�������������������������������������������0000664�0000000�0000000�00000006562�11671051007�0023344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vsnprintf @section @code{vsnprintf} @findex vsnprintf POSIX specification:@* @url{http://www.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 is missing on some platforms: IRIX 5.3, OSF/1 4.0, Solaris 2.5.1. @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 9, BeOS. @item This function overwrites memory even when a size argument of 1 is passed on some platforms: Linux libc5, BeOS. @item This function does not return a byte count as specified in C99 on some platforms: HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw, MSVC 9. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @item This function does not truncate the result as specified in C99 on some platforms: mingw, MSVC 9. @item This function does not fully support the @samp{n} directive on some platforms: HP-UX 11, mingw, MSVC 9. @item This function overwrites memory even when a zero size argument is passed on some platforms: HP-UX 11, OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/vsprintf.texi��������������������������������������������0000664�0000000�0000000�00000005173�11671051007�0023163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vsprintf @section @code{vsprintf} @findex vsprintf POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.24, mingw, MSVC 9, BeOS. @item printf of @samp{long double} numbers is unsupported on some platforms: mingw, MSVC 9, BeOS. @item printf @code{"%f"}, @code{"%e"}, @code{"%g"} of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, OSF/1 5.1, Solaris 11 2010-11, mingw, MSVC 9. @item This function does not support the @samp{a} and @samp{A} directives on some platforms: glibc-2.3.6, MacOS X 10.5, NetBSD 5.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @item This function does not support the @samp{n} directive on some platforms: MSVC 9. @item This function does not support the @samp{ls} directive on some platforms: OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Haiku. @item This function does not support precisions in the @samp{ls} directive correctly on some platforms: Solaris 11 2010-11. @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 9, BeOS. @item This function doesn't support the @code{'} flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 9. @item This function behaves incorrectly when a @samp{-} flag and a negative width are specified together, on some platforms: HP-UX 10.20. @item printf @code{"%010f"} of NaN and Infinity yields an incorrect result (padded with zeroes) on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9. @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 9, BeOS. @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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/vsscanf.texi���������������������������������������������0000664�0000000�0000000�00000001116�11671051007�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vsscanf @section @code{vsscanf} @findex vsscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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: Solaris 8, MSVC 9. @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-20111211-stable/doc/posix-functions/vswprintf.texi�������������������������������������������0000664�0000000�0000000�00000001236�11671051007�0023346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vswprintf @section @code{vswprintf} @findex vswprintf POSIX specification:@* @url{http://www.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 This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS. @item On AIX and Windows 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. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/vswscanf.texi��������������������������������������������0000664�0000000�0000000�00000001144�11671051007�0023134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vswscanf @section @code{vswscanf} @findex vswscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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, OSF/1 5.1, Solaris 8, Cygwin 1.5.x, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/vwprintf.texi��������������������������������������������0000664�0000000�0000000�00000001520�11671051007�0023157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vwprintf @section @code{vwprintf} @findex vwprintf POSIX specification:@* @url{http://www.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 This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS, Cygwin 1.7. @item This function exists, but does not support wide arguments on some platforms: Cygwin 1.5.x. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/vwscanf.texi���������������������������������������������0000664�0000000�0000000�00000001130�11671051007�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node vwscanf @section @code{vwscanf} @findex vwscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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, OSF/1 5.1, Solaris 8, Cygwin 1.5.x, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wait.texi������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0022246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wait @section @code{wait} @findex wait POSIX specification:@* @url{http://www.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 9. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/waitid.texi����������������������������������������������0000664�0000000�0000000�00000001053�11671051007�0022562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node waitid @section @code{waitid} @findex waitid POSIX specification:@* @url{http://www.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: MacOS X 10.4, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item As of 2005, no system is known on which @code{waitid} with flag @code{WNOWAIT} works correctly. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/waitpid.texi���������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0022745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node waitpid @section @code{waitpid} @findex waitpid POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/waitpid.html} Gnulib module: waitpid Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcpcpy.texi����������������������������������������������0000664�0000000�0000000�00000001343�11671051007�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcpcpy @section @code{wcpcpy} @findex wcpcpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcpcpy.html} Gnulib module: wcpcpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcpncpy.texi���������������������������������������������0000664�0000000�0000000�00000001350�11671051007�0022764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcpncpy @section @code{wcpncpy} @findex wcpncpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcpncpy.html} Gnulib module: wcpncpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcrtomb.texi���������������������������������������������0000664�0000000�0000000�00000001255�11671051007�0022762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcrtomb @section @code{wcrtomb} @findex wcrtomb POSIX specification:@* @url{http://www.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, Solaris 2.6, mingw, Interix 3.5. @item This function returns 0 when the first argument is NULL in some locales on some platforms: AIX 4.3, OSF/1 5.1, Solaris 11 2010-11. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcscasecmp.texi������������������������������������������0000664�0000000�0000000�00000001165�11671051007�0023435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscasecmp @section @code{wcscasecmp} @findex wcscasecmp POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcscasecmp.html} Gnulib module: wcscasecmp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcscasecmp_l.texi����������������������������������������0000664�0000000�0000000�00000001237�11671051007�0023750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscasecmp_l @section @code{wcscasecmp_l} @findex wcscasecmp_l POSIX specification:@* @url{http://www.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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcscat.texi����������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0022574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscat @section @code{wcscat} @findex wcscat POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcscat.html} Gnulib module: wcscat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������gnulib-20111211-stable/doc/posix-functions/wcschr.texi����������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcschr @section @code{wcschr} @findex wcschr POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcschr.html} Gnulib module: wcschr Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������gnulib-20111211-stable/doc/posix-functions/wcscmp.texi����������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscmp @section @code{wcscmp} @findex wcscmp POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcscmp.html} Gnulib module: wcscmp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������gnulib-20111211-stable/doc/posix-functions/wcscoll.texi���������������������������������������������0000664�0000000�0000000�00000001005�11671051007�0022744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscoll @section @code{wcscoll} @findex wcscoll POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcscoll_l.texi�������������������������������������������0000664�0000000�0000000�00000001212�11671051007�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscoll_l @section @code{wcscoll_l} @findex wcscoll_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcscpy.texi����������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0022620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscpy @section @code{wcscpy} @findex wcscpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcscpy.html} Gnulib module: wcscpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������gnulib-20111211-stable/doc/posix-functions/wcscspn.texi���������������������������������������������0000664�0000000�0000000�00000000770�11671051007�0022766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcscspn @section @code{wcscspn} @findex wcscspn POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcscspn.html} Gnulib module: wcscspn Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������gnulib-20111211-stable/doc/posix-functions/wcsdup.texi����������������������������������������������0000664�0000000�0000000�00000001130�11671051007�0022602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsdup @section @code{wcsdup} @findex wcsdup POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsdup.html} Gnulib module: wcsdup Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcsftime.texi��������������������������������������������0000664�0000000�0000000�00000001046�11671051007�0023124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsftime @section @code{wcsftime} @findex wcsftime POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html} Gnulib 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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcslen.texi����������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcslen @section @code{wcslen} @findex wcslen POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcslen.html} Gnulib module: wcslen Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������gnulib-20111211-stable/doc/posix-functions/wcsncasecmp.texi�����������������������������������������0000664�0000000�0000000�00000001200�11671051007�0023601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncasecmp @section @code{wcsncasecmp} @findex wcsncasecmp POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsncasecmp.html} Gnulib module: wcsncasecmp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcsncasecmp_l.texi���������������������������������������0000664�0000000�0000000�00000001243�11671051007�0024123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncasecmp_l @section @code{wcsncasecmp_l} @findex wcsncasecmp_l POSIX specification:@* @url{http://www.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 all non-glibc platforms: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcsncat.texi���������������������������������������������0000664�0000000�0000000�00000000770�11671051007�0022750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncat @section @code{wcsncat} @findex wcsncat POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsncat.html} Gnulib module: wcsncat Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������gnulib-20111211-stable/doc/posix-functions/wcsncmp.texi���������������������������������������������0000664�0000000�0000000�00000000770�11671051007�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncmp @section @code{wcsncmp} @findex wcsncmp POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsncmp.html} Gnulib module: wcsncmp Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������gnulib-20111211-stable/doc/posix-functions/wcsncpy.texi���������������������������������������������0000664�0000000�0000000�00000000770�11671051007�0022774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsncpy @section @code{wcsncpy} @findex wcsncpy POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsncpy.html} Gnulib module: wcsncpy Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������gnulib-20111211-stable/doc/posix-functions/wcsnlen.texi���������������������������������������������0000664�0000000�0000000�00000001176�11671051007�0022760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsnlen @section @code{wcsnlen} @findex wcsnlen POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsnlen.html} Gnulib module: wcsnlen Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcsnrtombs.texi������������������������������������������0000664�0000000�0000000�00000001237�11671051007�0023506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsnrtombs @section @code{wcsnrtombs} @findex wcsnrtombs POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsnrtombs.html} Gnulib module: wcsnrtombs Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: MacOS X 10.3, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcspbrk.texi���������������������������������������������0000664�0000000�0000000�00000000770�11671051007�0022761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcspbrk @section @code{wcspbrk} @findex wcspbrk POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcspbrk.html} Gnulib module: wcspbrk Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������gnulib-20111211-stable/doc/posix-functions/wcsrchr.texi���������������������������������������������0000664�0000000�0000000�00000000770�11671051007�0022761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsrchr @section @code{wcsrchr} @findex wcsrchr POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsrchr.html} Gnulib module: wcsrchr Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������gnulib-20111211-stable/doc/posix-functions/wcsrtombs.texi�������������������������������������������0000664�0000000�0000000�00000001647�11671051007�0023335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsrtombs @section @code{wcsrtombs} @findex wcsrtombs POSIX specification:@* @url{http://www.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, Solaris 2.6, mingw, Interix 3.5. @item This function may set the source pointer to NULL before NUL terminating the destination string on some platforms: OSF/1 5.1. @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, OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcsspn.texi����������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0022625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsspn @section @code{wcsspn} @findex wcsspn POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsspn.html} Gnulib module: wcsspn Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������gnulib-20111211-stable/doc/posix-functions/wcsstr.texi����������������������������������������������0000664�0000000�0000000�00000000776�11671051007�0022641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsstr @section @code{wcsstr} @findex wcsstr POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.6. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��gnulib-20111211-stable/doc/posix-functions/wcstod.texi����������������������������������������������0000664�0000000�0000000�00000001013�11671051007�0022600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstod @section @code{wcstod} @findex wcstod POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstof.texi����������������������������������������������0000664�0000000�0000000�00000001133�11671051007�0022605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstof @section @code{wcstof} @findex wcstof POSIX specification:@* @url{http://www.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, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstoimax.texi�������������������������������������������0000664�0000000�0000000�00000001126�11671051007�0023320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoimax @section @code{wcstoimax} @findex wcstoimax POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstok.texi����������������������������������������������0000664�0000000�0000000�00000001001�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstok @section @code{wcstok} @findex wcstok POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcstok.html} Gnulib module: wcstok Portability problems fixed by Gnulib: @itemize @item This function is missing on some platforms: IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstol.texi����������������������������������������������0000664�0000000�0000000�00000001013�11671051007�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstol @section @code{wcstol} @findex wcstol POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstold.texi���������������������������������������������0000664�0000000�0000000�00000001131�11671051007�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstold @section @code{wcstold} @findex wcstold POSIX specification:@* @url{http://www.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, AIX 4.3.2, HP-UX 11, IRIX 6.5, OSF/1 4.0, Solaris 9, Cygwin, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstoll.texi���������������������������������������������0000664�0000000�0000000�00000001070�11671051007�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoll @section @code{wcstoll} @findex wcstoll POSIX specification:@* @url{http://www.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, IRIX 5.3, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstombs.texi��������������������������������������������0000664�0000000�0000000�00000000655�11671051007�0023151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstombs @section @code{wcstombs} @findex wcstombs POSIX specification:@* @url{http://www.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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstoul.texi���������������������������������������������0000664�0000000�0000000�00000001017�11671051007�0023001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoul @section @code{wcstoul} @findex wcstoul POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstoull.texi��������������������������������������������0000664�0000000�0000000�00000001074�11671051007�0023160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoull @section @code{wcstoull} @findex wcstoull POSIX specification:@* @url{http://www.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, IRIX 5.3, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcstoumax.texi�������������������������������������������0000664�0000000�0000000�00000001126�11671051007�0023334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcstoumax @section @code{wcstoumax} @findex wcstoumax POSIX specification:@* @url{http://www.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, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, MSVC 9, Interix 3.5. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcswidth.texi��������������������������������������������0000664�0000000�0000000�00000001233�11671051007�0023135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcswidth @section @code{wcswidth} @findex wcswidth POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, mingw, MSVC 9, BeOS. @item This function handles combining characters in UTF-8 locales incorrectly on some platforms: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcsxfrm.texi���������������������������������������������0000664�0000000�0000000�00000001023�11671051007�0022767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsxfrm @section @code{wcsxfrm} @findex wcsxfrm POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, Cygwin 1.5.x. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcsxfrm_l.texi�������������������������������������������0000664�0000000�0000000�00000001212�11671051007�0023302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcsxfrm_l @section @code{wcsxfrm_l} @findex wcsxfrm_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wctob.texi�����������������������������������������������0000664�0000000�0000000�00000001371�11671051007�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctob @section @code{wctob} @findex wctob POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.6, mingw, Interix 3.5. @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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wctomb.texi����������������������������������������������0000664�0000000�0000000�00000000650�11671051007�0022576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctomb @section @code{wctomb} @findex wctomb POSIX specification:@* @url{http://www.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 On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wctrans.texi���������������������������������������������0000664�0000000�0000000�00000001056�11671051007�0022765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctrans @section @code{wctrans} @findex wctrans POSIX specification:@* @url{http://www.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, Solaris 2.5.1, mingw, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wctrans_l.texi�������������������������������������������0000664�0000000�0000000�00000001212�11671051007�0023272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctrans_l @section @code{wctrans_l} @findex wctrans_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wctype.texi����������������������������������������������0000664�0000000�0000000�00000001167�11671051007�0022622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctype @section @code{wctype} @findex wctype POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, 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 AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wctype_l.texi��������������������������������������������0000664�0000000�0000000�00000001206�11671051007�0023127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctype_l @section @code{wctype_l} @findex wctype_l POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wcwidth.texi���������������������������������������������0000664�0000000�0000000�00000001352�11671051007�0022754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wcwidth @section @code{wcwidth} @findex wcwidth POSIX specification:@* @url{http://www.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, IRIX 5.3, Solaris 2.5.1, mingw, MSVC 9, BeOS. @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: MacOS X 10.3. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wmemchr.texi���������������������������������������������0000664�0000000�0000000�00000001030�11671051007�0022736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemchr @section @code{wmemchr} @findex wmemchr POSIX specification:@* @url{http://www.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, Solaris 2.6, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wmemcmp.texi���������������������������������������������0000664�0000000�0000000�00000001030�11671051007�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemcmp @section @code{wmemcmp} @findex wmemcmp POSIX specification:@* @url{http://www.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, Solaris 2.6, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wmemcpy.texi���������������������������������������������0000664�0000000�0000000�00000001030�11671051007�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemcpy @section @code{wmemcpy} @findex wmemcpy POSIX specification:@* @url{http://www.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, Solaris 2.6, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wmemmove.texi��������������������������������������������0000664�0000000�0000000�00000001035�11671051007�0023135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemmove @section @code{wmemmove} @findex wmemmove POSIX specification:@* @url{http://www.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, Solaris 2.6, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wmemset.texi���������������������������������������������0000664�0000000�0000000�00000001030�11671051007�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wmemset @section @code{wmemset} @findex wmemset POSIX specification:@* @url{http://www.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, Solaris 2.6, MSVC 9, Interix 3.5. @end itemize Portability problems not fixed by Gnulib: @itemize @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wordexp.texi���������������������������������������������0000664�0000000�0000000�00000001131�11671051007�0022766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wordexp @section @code{wordexp} @findex wordexp POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @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-20111211-stable/doc/posix-functions/wordfree.texi��������������������������������������������0000664�0000000�0000000�00000000704�11671051007�0023120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wordfree @section @code{wordfree} @findex wordfree POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, IRIX 5.3, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wprintf.texi���������������������������������������������0000664�0000000�0000000�00000001462�11671051007�0022776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wprintf @section @code{wprintf} @findex wprintf POSIX specification:@* @url{http://www.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 This function is missing on some platforms: NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, HP-UX 11.00, IRIX 6.5, Solaris 2.6, Interix 3.5, BeOS. @item This function exists, but does not support wide arguments on some platforms: Cygwin 1.5.x. @item On AIX and Windows 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-20111211-stable/doc/posix-functions/write.texi�����������������������������������������������0000664�0000000�0000000�00000002740�11671051007�0022437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node write @section @code{write} @findex write POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/write.html} Gnulib module: write, nonblocking, sigpipe Portability problems fixed by Gnulib module @code{stdio}, together with module @code{nonblocking}: @itemize @item This function crashes when invoked with invalid arguments on some platforms: MSVC 9. @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 9. @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 9. @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 9. @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 X 10.5. @end itemize For handling @code{EINTR}, Gnulib provides a module @samp{safe-write} with a function @code{safe_write}. ��������������������������������gnulib-20111211-stable/doc/posix-functions/writev.texi����������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node writev @section @code{writev} @findex writev POSIX specification:@* @url{http://www.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 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/wscanf.texi����������������������������������������������0000664�0000000�0000000�00000001102�11671051007�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wscanf @section @code{wscanf} @findex wscanf POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/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, Solaris 2.6, Cygwin 1.5.x, Interix 3.5, BeOS. @item On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-functions/y0.texi��������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0021635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node y0 @section @code{y0} @findex y0 POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/y1.texi��������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0021636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node y1 @section @code{y1} @findex y1 POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-functions/yn.texi��������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0021733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node yn @section @code{yn} @findex yn POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-headers/�����������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020012�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/aio.texi���������������������������������������������������0000664�0000000�0000000�00000000650�11671051007�0021456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node aio.h @section @file{aio.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/arpa_inet.texi���������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0022657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node arpa/inet.h @section @file{arpa/inet.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/assert.texi������������������������������������������������0000664�0000000�0000000�00000002330�11671051007�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node assert.h @section @file{assert.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/assert.h.html} Gnulib module: assert-h See also the Gnulib module @code{assert}. Portability problems fixed by Gnulib: @itemize @item The draft C1X and C++0X @code{static_assert}, and the draft C1X @code{_Static_assert}, are not supported by many platforms. For example, GCC versions before 4.6.0 do not support @code{_Static_assert}, and G++ versions through at least 4.6.0 do not support @code{static_assert}. @end itemize Portability problems not fixed by Gnulib: @itemize @item Draft C1X @code{_Static_assert} and draft C++0X @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 draft C1X @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, @code{assert} can be applied to any scalar expression. In C89, the argument to @code{assert} is of type @code{int}. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/complex.texi�����������������������������������������������0000664�0000000�0000000�00000000724�11671051007�0022357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node complex.h @section @file{complex.h} POSIX specification:@* @url{http://www.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, OSF/1 5.1, Cygwin 1.7.7, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������gnulib-20111211-stable/doc/posix-headers/cpio.texi��������������������������������������������������0000664�0000000�0000000�00000000605�11671051007�0021640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node cpio.h @section @file{cpio.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, Minix 3.1.8, Cygwin, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/ctype.texi�������������������������������������������������0000664�0000000�0000000�00000000435�11671051007�0022033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ctype.h @section @file{ctype.h} POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-headers/dirent.texi������������������������������������������������0000664�0000000�0000000�00000000656�11671051007�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dirent.h @section @file{dirent.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/dirent.h.html} Gnulib module: dirent Portability problems fixed by Gnulib: @itemize @item The type @code{ino_t} is missing on some platforms: glibc 2.8 and others. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file is missing on some platforms: MSVC 9. @end itemize ����������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/dlfcn.texi�������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0021776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node dlfcn.h @section @file{dlfcn.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/errno.texi�������������������������������������������������0000664�0000000�0000000�00000002743�11671051007�0022040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node errno.h @section @file{errno.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html} Gnulib module: errno Portability problems fixed by Gnulib: @itemize @item The macros @code{EOVERFLOW}, @code{ENOLINK}, @code{EMULTIHOP} are not defined on some platforms: OpenBSD 4.0, OSF/1 5.1, mingw, MSVC 9. @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 9, Interix 3.5. @item The macro @code{EDQUOT} is not defined on some platforms: NonStop Kernel, mingw, MSVC 9. @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. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������gnulib-20111211-stable/doc/posix-headers/fcntl.texi�������������������������������������������������0000664�0000000�0000000�00000005157�11671051007�0022023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fcntl.h @section @file{fcntl.h} POSIX specification:@* @url{http://www.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 9. @item The type @code{mode_t} is not defined on some platforms: MSVC 9. @item @samp{O_CLOEXEC}, @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. @item @samp{O_ACCMODE} is not defined on some platforms: MSVC 9. @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 Woe32 platforms) are defined on some platforms but not on others. @item @samp{O_DIRECT}, @samp{O_NDELAY}, @samp{O_NOATIME}, and @samp{O_NOLINKS} (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 9. @item @samp{F_DUPFD_CLOEXEC} is not defined on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.7.1, mingw, MSVC 9, Interix 3.5, BeOS. @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, MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 8, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @item @samp{AT_FDCWD} is defined with a value too large for an @code{int} on some platforms: Solaris 11 2010-11. @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_SETLOKW}, @samp{F_GETOWN}, and @samp{F_SETOWN} are not defined on some platforms: mingw, MSVC 9. @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-20111211-stable/doc/posix-headers/fenv.texi��������������������������������������������������0000664�0000000�0000000�00000000674�11671051007�0021652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fenv.h @section @file{fenv.h} POSIX specification:@* @url{http://www.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, OSF/1 5.1, Cygwin 1.7.7, MSVC 9, Interix 3.5, BeOS. @end itemize ��������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/float.texi�������������������������������������������������0000664�0000000�0000000�00000002107�11671051007�0022012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node float.h @section @file{float.h} POSIX specification:@* @url{http://www.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, MirBSD 10, and BeOS, 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-20111211-stable/doc/posix-headers/fmtmsg.texi������������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fmtmsg.h @section @file{fmtmsg.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/fnmatch.texi�����������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0022325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node fnmatch.h @section @file{fnmatch.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/fnmatch.h.html} Gnulib module: fnmatch-posix or fnmatch-gnu Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/ftw.texi���������������������������������������������������0000664�0000000�0000000�00000000625�11671051007�0021510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ftw.h @section @file{ftw.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 5.2.1, NetBSD 3.0, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/glob.texi��������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0021632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node glob.h @section @file{glob.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/glob.h.html} Gnulib module: glob Portability problems fixed by Gnulib: @itemize @item This header file is missing on some platforms: mingw, MSVC 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/google-ranking.txt�����������������������������������������0000664�0000000�0000000�00000003740�11671051007�0023462�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-20111211-stable/doc/posix-headers/grp.texi���������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0021474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node grp.h @section @file{grp.h} POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/iconv.texi�������������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0022020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iconv.h @section @file{iconv.h} POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS, when GNU libiconv is not installed. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/inttypes.texi����������������������������������������������0000664�0000000�0000000�00000001515�11671051007�0022566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node inttypes.h @section @file{inttypes.h} POSIX specification:@* @url{http://www.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: OSF/1 4.0, MSVC 9, Interix 3.5. @item This header file is very incomplete on some platforms. @item The PRI* macros are defined to non-string values on AIX 4.3.3. @item The declarations of @code{imaxabs} and @code{imaxdiv} are missing on some platforms: NetBSD 3.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, BeOS. @item The declarations of @code{strtoimax} and @code{strtoumax} are missing on some platforms: OpenBSD 3.8, AIX 4.3.2, AIX 5.1 (missing only @code{strtoumax}), OSF/1 5.1. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/iso646.texi������������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0021744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node iso646.h @section @file{iso646.h} POSIX specification:@* @url{http://www.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, OSF/1 4.0, Cygwin, mingw, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/langinfo.texi����������������������������������������������0000664�0000000�0000000�00000001352�11671051007�0022503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node langinfo.h @section @file{langinfo.h} POSIX specification:@* @url{http://www.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 9, BeOS. @item The constant @code{CODESET} is not defined on some platforms: glibc 2.0.6, OpenBSD 3.8. @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 3.8. @item The constants @code{T_FMT_AMPM}, @code{YESEXPR}, @code{NOEXPR} are not defined on some platforms: IRIX 5.3. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/libgen.texi������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0022145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node libgen.h @section @file{libgen.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/limits.texi������������������������������������������������0000664�0000000�0000000�00000002103�11671051007�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node limits.h @section @file{limits.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html} Gnulib module: gethostname Portability problems fixed by Gnulib: @itemize @item The @code{HOST_NAME_MAX} macro is not defined on some platforms: MacOS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item The macros @code{LLONG_MIN}, @code{LLONG_MAX}, @code{ULLONG_MAX} are not defined on some platforms: AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1 with gcc. @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 9. @item The macro @code{SSIZE_MAX} is not defined on some platforms: MSVC 9. @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-20111211-stable/doc/posix-headers/locale.texi������������������������������������������������0000664�0000000�0000000�00000001100�11671051007�0022134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node locale.h @section @file{locale.h} POSIX specification:@* @url{http://www.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 9. @item The @code{locale_t} type is not defined on some platforms: glibc 2.11, MacOS X 10.5. @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-20111211-stable/doc/posix-headers/math.texi��������������������������������������������������0000664�0000000�0000000�00000002012�11671051007�0021631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node math.h @section @file{math.h} POSIX specification:@* @url{http://www.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, OSF/1 5.1. @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. @end itemize Portability problems not fixed by Gnulib: @itemize @item @code{NAN} is not a compile time constant with some compilers: OSF/1 with Compaq (ex-DEC) C 6.4. @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, OSF/1 5.1, Cygwin 1.7.9, mingw, MSVC 9. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/monetary.texi����������������������������������������������0000664�0000000�0000000�00000000634�11671051007�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node monetary.h @section @file{monetary.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/monetary.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, Cygwin, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/mqueue.texi������������������������������������������������0000664�0000000�0000000�00000000676�11671051007�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node mqueue.h @section @file{mqueue.h} POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/ndbm.texi��������������������������������������������������0000664�0000000�0000000�00000000542�11671051007�0021626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ndbm.h @section @file{ndbm.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/net_if.texi������������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0022157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node net/if.h @section @file{net/if.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/net_if.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 9, Interix 3.5, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/netdb.texi�������������������������������������������������0000664�0000000�0000000�00000001276�11671051007�0022007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node netdb.h @section @file{netdb.h} POSIX specification:@* @url{http://www.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 9, BeOS. @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: HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS. @item This header file does not define @code{AI_ALL}, @code{AI_V4MAPPED}, @code{AI_ADDRCONFIG} on some platforms: NetBSD 5.0. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/netinet_in.texi��������������������������������������������0000664�0000000�0000000�00000001000�11671051007�0023030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node netinet/in.h @section @file{netinet/in.h} POSIX specification:@* @url{http://www.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 9, BeOS. @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-20111211-stable/doc/posix-headers/netinet_tcp.texi�������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0023231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node netinet/tcp.h @section @file{netinet/tcp.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/nl_types.texi����������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node nl_types.h @section @file{nl_types.h} POSIX specification:@* @url{http://www.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: MacOS 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, BeOS. @end itemize �������������gnulib-20111211-stable/doc/posix-headers/poll.texi��������������������������������������������������0000664�0000000�0000000�00000000670�11671051007�0021656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node poll.h @section @file{poll.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item This header file does not defined @code{nfds_t} on some platforms: IRIX 5.3. @end itemize ������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/pthread.texi�����������������������������������������������0000664�0000000�0000000�00000000570�11671051007�0022336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pthread.h @section @file{pthread.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/pthread.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 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/pwd.texi���������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0021476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node pwd.h @section @file{pwd.h} POSIX specification:@* @url{http://www.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 9. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/regex.texi�������������������������������������������������0000664�0000000�0000000�00000000730�11671051007�0022017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node regex.h @section @file{regex.h} POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-headers/sched.texi�������������������������������������������������0000664�0000000�0000000�00000001216�11671051007�0021773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sched.h @section @file{sched.h} POSIX specification:@* @url{http://www.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 9, BeOS. @item This header file does not define the type @code{pid_t} on some platforms: glibc 2.11, MacOS X 10.5. @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-20111211-stable/doc/posix-headers/search.texi������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0022153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node search.h @section @file{search.h} POSIX specification:@* @url{http://www.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, BeOS. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/semaphore.texi���������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0022700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node semaphore.h @section @file{semaphore.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/setjmp.texi������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node setjmp.h @section @file{setjmp.h} POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-headers/signal.texi������������������������������������������������0000664�0000000�0000000�00000003206�11671051007�0022163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node signal.h @section @file{signal.h} POSIX specification:@* @url{http://www.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 9. @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 9. @item @code{struct sigaction} lacks the @code{sa_sigaction} member on some platforms: Irix 5.3, Interix 3.5. @item The type @code{pid_t} is not defined on some platforms: MSVC 9. @item The signal @code{SIGPIPE} is not defined on some platforms: mingw, MSVC 9. @item The macro @code{SA_NODEFER} is not defined on some platforms: Interix 3.5. @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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @item Many signals are not defined on some platforms: mingw, MSVC 9. @item The macros @code{SIGRTMIN} and @code{SIGRTMAX} expand to an expression of type @code{long} instead of @code{int} on some platforms: OSF/1 5.1. @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-20111211-stable/doc/posix-headers/spawn.texi�������������������������������������������������0000664�0000000�0000000�00000000745�11671051007�0022043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node spawn.h @section @file{spawn.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ���������������������������gnulib-20111211-stable/doc/posix-headers/stdalign.texi����������������������������������������������0000664�0000000�0000000�00000003524�11671051007�0022516�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 C1X @url{http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf} sections 6.5.3.4, 6.7.5, 7.15. C++0X @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 most circa-2011 platforms. @item Clang 3.0's @code{<stdalign.h>} does not define @code{alignof}/@code{_Alignof}. @end itemize Portability problems not fixed by Gnulib: @itemize @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.11 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.11 compiler sometimes mishandles the alignment of multiple external variables that are declared close together with @code{_Alignas}/@code{alignas}. This compiler bug causes the Gnulib module @code{stdalign-tests} to fail. The Sun Studio Developer Bug Report Review Team assigned the internal review ID 2125432 (dated 2011-11-01) to this issue. @item @code{<stdalign.h>} must be #included before @samp{_Alignas} and @samp{_Alignof} can be used. @item You cannot assume that @code{_Alignas} and @code{_Alignof} are reserved words; they might be macros. @end itemize ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/stdarg.texi������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdarg.h @section @file{stdarg.h} POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-headers/stdbool.texi�����������������������������������������������0000664�0000000�0000000�00000002214�11671051007�0022352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdbool.h @section @file{stdbool.h} POSIX specification:@* @url{http://www.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, OSF/1 5.1. @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 @code{<stdbool.h>} must be #included before @samp{_Bool} can be used. @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 casted 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-20111211-stable/doc/posix-headers/stddef.texi������������������������������������������������0000664�0000000�0000000�00000001320�11671051007�0022152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stddef.h @section @file{stddef.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html} Gnulib module: stddef Portability problems fixed by Gnulib: @itemize @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 @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 2010-11 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-20111211-stable/doc/posix-headers/stdint.texi������������������������������������������������0000664�0000000�0000000�00000004107�11671051007�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdint.h @section @file{stdint.h} POSIX specification:@* @url{http://www.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, OSF/1 5.1, MSVC 9, Interix 3.5, BeOS. @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. @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 macros @code{WCHAR_MIN} and @code{WCHAR_MAX} are not defined in @code{<stdint.h>} (only in @code{<wchar.h>}) on some platforms: Dragonfly, BSDI. @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. @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 stdint.h 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-20111211-stable/doc/posix-headers/stdio.texi�������������������������������������������������0000664�0000000�0000000�00000001317�11671051007�0022031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdio.h @section @file{stdio.h} POSIX specification:@* @url{http://www.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, MacOS X 10.5, Solaris 10, MSVC 9, and others. @item The type @code{va_list} is missing on some platforms: glibc 2.8, OpenBSD 4.0, Solaris 11 2010-11, 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-20111211-stable/doc/posix-headers/stdlib.texi������������������������������������������������0000664�0000000�0000000�00000002054�11671051007�0022167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stdlib.h @section @file{stdlib.h} POSIX specification:@* @url{http://www.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 The macro @code{EXIT_FAILURE} is incorrectly defined on Tandem/NSK. @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 X 10.5. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/string.texi������������������������������������������������0000664�0000000�0000000�00000000613�11671051007�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node string.h @section @file{string.h} POSIX specification:@* @url{http://www.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-20111211-stable/doc/posix-headers/strings.texi�����������������������������������������������0000664�0000000�0000000�00000001040�11671051007�0022371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node strings.h @section @file{strings.h} POSIX specification:@* @url{http://www.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 9. @item This header file defines symbols, such as @samp{index}, often used for variables, making debugging harder. @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/stropts.texi�����������������������������������������������0000664�0000000�0000000�00000000664�11671051007�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node stropts.h @section @file{stropts.h} POSIX specification:@* @url{http://www.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 X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_ipc.texi�����������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0022361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/ipc.h @section @file{sys/ipc.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_mman.texi����������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0022541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/mman.h @section @file{sys/mman.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_msg.texi�����������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/msg.h @section @file{sys/msg.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_resource.texi������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0023442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/resource.h @section @file{sys/resource.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/sys_resource.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 9. @item On some platforms, this header file requires that <sys/types.h> and <sys/time.h> already be included: FreeBSD 5.0. @end itemize ������������������gnulib-20111211-stable/doc/posix-headers/sys_select.texi��������������������������������������������0000664�0000000�0000000�00000001417�11671051007�0023065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/select.h @section @file{sys/select.h} POSIX specification:@* @url{http://www.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 9, BeOS. @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 @code{struct timeval} on some platforms: OSF/1 4.0. @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 2010-11. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_sem.texi�����������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/sem.h @section @file{sys/sem.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_shm.texi�����������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/shm.h @section @file{sys/shm.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_socket.texi��������������������������������������������0000664�0000000�0000000�00000002352�11671051007�0023075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/socket.h @section @file{sys/socket.h} POSIX specification:@* @url{http://www.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 9. @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: HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS. @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. @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-20111211-stable/doc/posix-headers/sys_stat.texi����������������������������������������������0000664�0000000�0000000�00000002251�11671051007�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/stat.h @section @file{sys/stat.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html} Gnulib module: sys_stat Portability problems fixed by Gnulib: @itemize @item The type @code{mode_t} is not defined on some platforms: MSVC 9. @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 9. @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 not fixed by Gnulib: @itemize @item The macro @code{S_IFBLK} is missing on some platforms: MSVC 9. @end itemize �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_statvfs.texi�������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0023276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/statvfs.h @section @file{sys/statvfs.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, mingw, MSVC 9. @end itemize ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_time.texi����������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0022545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/time.h @section @file{sys/time.h} POSIX specification:@* @url{http://www.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 9. @item @samp{struct timeval} is not defined on some platforms. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ��������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_timeb.texi���������������������������������������������0000664�0000000�0000000�00000000421�11671051007�0022700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/timeb.h @section @file{sys/timeb.h} POSIX specification:@* @url{http://www.opengroup.org/susv3xbd/sys/timeb.h.html} Gnulib module: --- Portability problems fixed by Gnulib: @itemize @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_times.texi���������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/times.h @section @file{sys/times.h} POSIX specification:@* @url{http://www.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 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_types.texi���������������������������������������������0000664�0000000�0000000�00000001126�11671051007�0022747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/types.h @section @file{sys/types.h} POSIX specification:@* @url{http://www.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 9. @item The type @code{size_t} is not defined in this file on some platforms: MSVC 9. @item The type @code{ssize_t} is not defined on some platforms: MSVC 9. @item The type @code{mode_t} is not defined on some platforms: MSVC 9. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_uio.texi�����������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/uio.h @section @file{sys/uio.h} POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-headers/sys_un.texi������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/un.h @section @file{sys/un.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/sys_utsname.texi�������������������������������������������0000664�0000000�0000000�00000000706�11671051007�0023262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/utsname.h @section @file{sys/utsname.h} POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-headers/sys_wait.texi����������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node sys/wait.h @section @file{sys/wait.h} POSIX specification:@* @url{http://www.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 9. @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 X 10.5. @end itemize ���������������������������������gnulib-20111211-stable/doc/posix-headers/syslog.texi������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0022225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node syslog.h @section @file{syslog.h} POSIX specification:@* @url{http://www.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 9, BeOS. @end itemize ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/tar.texi���������������������������������������������������0000664�0000000�0000000�00000000547�11671051007�0021501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tar.h @section @file{tar.h} POSIX specification:@* @url{http://www.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, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/termios.texi�����������������������������������������������0000664�0000000�0000000�00000000757�11671051007�0022400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node termios.h @section @file{termios.h} POSIX specification:@* @url{http://www.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 9. @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 9. @end itemize �����������������gnulib-20111211-stable/doc/posix-headers/tgmath.texi������������������������������������������������0000664�0000000�0000000�00000000750�11671051007�0022173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node tgmath.h @section @file{tgmath.h} POSIX specification:@* @url{http://www.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: MacOS X 10.5, FreeBSD 5.2.1, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ������������������������gnulib-20111211-stable/doc/posix-headers/time.texi��������������������������������������������������0000664�0000000�0000000�00000000703�11671051007�0021643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node time.h @section @file{time.h} POSIX specification:@* @url{http://www.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 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-20111211-stable/doc/posix-headers/trace.texi�������������������������������������������������0000664�0000000�0000000�00000000767�11671051007�0022015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node trace.h @section @file{trace.h} POSIX specification:@* @url{http://www.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 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, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ���������gnulib-20111211-stable/doc/posix-headers/ucontext.texi����������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ucontext.h @section @file{ucontext.h} POSIX specification:@* @url{http://www.opengroup.org/susv3xbd/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 3.8, Cygwin, mingw, MSVC 9, BeOS. @end itemize ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/ulimit.texi������������������������������������������������0000664�0000000�0000000�00000000612�11671051007�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node ulimit.h @section @file{ulimit.h} POSIX specification:@* @url{http://www.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 3.8, Minix 3.1.8, Cygwin, mingw, MSVC 9, BeOS. @end itemize ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/unistd.texi������������������������������������������������0000664�0000000�0000000�00000001312�11671051007�0022210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node unistd.h @section @file{unistd.h} POSIX specification:@* @url{http://www.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 9. @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-20111211-stable/doc/posix-headers/utime.texi�������������������������������������������������0000664�0000000�0000000�00000000622�11671051007�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utime.h @section @file{utime.h} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/basedefs/utime.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: MSVC 9. Use @code{<sys/utime.h>} if @code{<utime.h>} is missing. @end itemize ��������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/utmpx.texi�������������������������������������������������0000664�0000000�0000000�00000000632�11671051007�0022063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node utmpx.h @section @file{utmpx.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, FreeBSD 6.0, OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize ������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/wchar.texi�������������������������������������������������0000664�0000000�0000000�00000001744�11671051007�0022017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wchar.h @section @file{wchar.h} POSIX specification:@* @url{http://www.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 This header file is not self-contained on some platforms: OSF/1 with Desktop Toolkit C, BSD/OS 4.0.1. @item The type @code{wint_t} and macro @code{WEOF} are missing on some platforms: IRIX 5.3. @item The type @code{wint_t} is incorrect on some platforms: MSVC 9. @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-20111211-stable/doc/posix-headers/wctype.texi������������������������������������������������0000664�0000000�0000000�00000002003�11671051007�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wctype.h @section @file{wctype.h} POSIX specification:@* @url{http://www.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, BeOS. @item This header file is not self-contained on some platforms: Solaris 2.5, OSF/1 with Desktop Toolkit C, BSD/OS 4.0.1. @item The type @code{wint_t} and macro @code{WEOF} are missing on some platforms: IRIX 5.3. @item The type @code{wint_t} is incorrect on some platforms: MSVC 9. @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. @item The functions @code{isw*} are actually defined as macros that don't work, on IRIX 5.3. @item This header file defines some identifiers, such as @code{multibyte}, as macros on some platforms: Solaris 2.6. @end itemize Portability problems not fixed by Gnulib: @itemize @end itemize �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/posix-headers/wordexp.texi�����������������������������������������������0000664�0000000�0000000�00000000656�11671051007�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node wordexp.h @section @file{wordexp.h} POSIX specification:@* @url{http://www.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: MacOS X 10.3, OpenBSD 3.8, Minix 3.1.8, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. @end itemize ����������������������������������������������������������������������������������gnulib-20111211-stable/doc/quote.texi���������������������������������������������������������������0000664�0000000�0000000�00000002711�11671051007�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Quoting @section Quoting @c Copyright (C) 2005, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. @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 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-20111211-stable/doc/regex.texi���������������������������������������������������������������0000664�0000000�0000000�00000231242�11671051007�0017250�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 @sc{gnu} group---is more powerful but not completely compatible with the other two, namely the @sc{posix} and Berkeley @sc{unix} groups; its interface was designed specifically for @sc{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 `\' 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---@sc{gnu} Emacs, @cindex Emacs @sc{posix} Awk, @cindex POSIX Awk traditional Awk, @cindex Awk Grep, @cindex Grep @cindex Egrep Egrep---in addition to syntaxes for @sc{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 @sc{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 @sc{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 @sc{posix}; @sc{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 @sc{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 @sc{gnu}, a space or tab @item cntrl control characters (in the @sc{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 @sc{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 @sc{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 @sc{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. @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 @sc{gnu} defines (and @sc{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 @sc{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 @sc{gnu} defines (and @sc{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 @sc{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 @sc{gnu}, one compatible with @sc{posix} (as specified by @sc{posix}, draft 1003.2/D11.2), and one compatible with Berkeley @sc{unix}. The @sc{posix} interface is not documented here; see the documentation of GNU libc, or the POSIX man pages. The Berkeley @sc{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 @sc{posix} or Berkeley @sc{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 `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 @sc{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 @sc{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 @sc{posix} error code. @node GNU Matching @subsection GNU Matching @cindex matching with GNU functions Matching the @sc{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 @sc{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 @sc{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 @sc{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 @sc{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 (posssibly 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 @sc{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 @sc{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 @sc{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 @sc{unix} compatible, you'll need to use these functions whose interfaces are the same as those in Berkeley @sc{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 @sc{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 @sc{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 @sc{gnu} fastmap (@pxref{Searching with Fastmaps}). ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/regexprops-generic.texi��������������������������������������������������0000664�0000000�0000000�00000061346�11671051007�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c Copyright (C) 1994, 1996, 1998, 2000-2001, 2003-2007, 2009-2011 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, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. @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 not supported, so for example you would need to use @samp{[0-9]} instead of @samp{[[: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 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 supported; for example @samp{[[:digit:]]} will match a single decimal digit. Non-matching lists @samp{[^@dots{}]} do not ever match newline. 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{()}. 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. 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 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 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 + 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 ignored. Within square brackets, @samp{\} is taken literally. Character classes are supported; for example @samp{[[:digit:]]} will match a single decimal digit. Non-matching lists @samp{[^@dots{}]} do not ever match newline. 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 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-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 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 supported; for example @samp{[[:digit:]]} will match a single decimal digit. Non-matching lists @samp{[^@dots{}]} do not ever match newline. 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{()}. 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 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-20111211-stable/doc/relocatable-maint.texi���������������������������������������������������0000664�0000000�0000000�00000012756�11671051007�0021530�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 similar package systems 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 GNU/Linux, 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. @item On other Unix systems, it installs a wrapper executable. The wrapper sets the environment variable that controls shared library searching (usually @env{LD_LIBRARY_PATH}) and then invokes the real executable. This approach does not always work. On OpenBSD and OpenServer, prereleases of Libtool 1.5 put absolute file names of libraries in executables, which prevents searching any other locations. @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. @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 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}. @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: @example @@relocatable_sh@@ if test "@@RELOCATABLE@@" = yes; then exec_prefix="@@exec_prefix@@" bindir="@@bindir@@" orig_installdir="$bindir" # see Makefile.am's *_SCRIPTS variables func_find_curr_installdir # determine curr_installdir func_find_prefixes # Relocate the directory variables that we use. gettext_dir=` echo "$gettext_dir/" \ | sed -e "s%^$@{orig_installprefix@}/%$@{curr_installprefix@}/%" \ | sed -e 's,/$,,'` fi @end example You must adapt the definition of @code{orig_installdir}, depending on where the script gets installed. Also, at the end, instead of @code{gettext_dir}, 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 @item You may also need to add a couple of variable assignments to your @file{configure.ac}. 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 @var{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 @var{RELOCATABLE_CONFIG_H_DIR} to its directory, e.g. @example RELOCATABLE_CONFIG_H_DIR='$(top_builddir)/src' @end example @end enumerate ������������������gnulib-20111211-stable/doc/relocatable.texi���������������������������������������������������������0000664�0000000�0000000�00000005575�11671051007�0020423�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. Red Hat, Debian, and similar package systems 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. Also, installation with @option{--enable-relocatable} might not work on OpenBSD, when the package contains shared libraries and libtool versions 1.5.xx are used. 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-20111211-stable/doc/safe-alloc.texi����������������������������������������������������������0000664�0000000�0000000�00000005247�11671051007�0020150�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 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 It uses @code{calloc} instead of @code{malloc}. @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 -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 -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 -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. Returns -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-20111211-stable/doc/solaris-versions���������������������������������������������������������0000664�0000000�0000000�00000004155�11671051007�0020511�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 thru 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 <http://www.sun.com/service/eosl/solaris/solaris_vintage_eol_5.2005.xml>. ----- Copyright (C) 2003, 2005-2006, 2009-2011 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-20111211-stable/doc/standards.texi�����������������������������������������������������������0000664�0000000�0000000�00000427371�11671051007�0020133�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 December 10, 2011 @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 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, with no Front-Cover Texts, and with 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{http://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{http://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{http://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{http://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 acknowledgements in GNU software packages or documentation. Trademark acknowledgements 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 acknowledgements 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. If you wish to praise Microsoft Windows when speaking on your own, by all means do so, but not in GNU software. Usually we write the name ``Windows'' in full, but when brevity is very important (as in file names and sometimes symbol names), we abbreviate it to ``w''. For instance, the files and functions in Emacs that deal with Windows start with @samp{w32}. @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. Using another language is like using a non-standard feature: it will cause trouble for users. Even if GCC supports the other language, users may find it inconvenient to have to install the compiler for that other language in order to build your program. For example, if you write your program in C++, people will have to install the GNU C++ compiler in order to compile your program. C has one other advantage over C++ and other compiled languages: more people know C, so more people will find it easy to read and modify the program if it is written in C. So in general it is much better to use C, rather than the comparable alternatives. But there are two exceptions to that conclusion: @itemize @bullet @item It is no problem to use another language to write a tool specifically intended for use with that language. That is because the only people who want to build the tool will be those who have installed the other language anyway. @item If an application is of interest only to a narrow part of the community, then the question of which language it is written in has less effect on other people, so you may as well please yourself. @end itemize 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{http://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 very important for the overall consistency of the GNU system. @node Compatibility @section Compatibility with Other Implementations @cindex compatibility with C and @sc{posix} standards @cindex @sc{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 @sc{posix} if @sc{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 @sc{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 @sc{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 @sc{ansi} C standard 1989 Standard C is widespread enough now that it is ok to use its features in new programs. There is one exception: do not ever use the ``trigraph'' feature of Standard C. 1999 Standard C is not widespread yet, so please do not require its features in programs. It is ok to use its features if they are present. However, it is easy to support pre-standard compilers in most programs, so if you know how to do that, feel free. If a program you are maintaining has such support, you should try to keep it working. @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. * 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 @emph{including those with codes above 0177}. The only sensible exceptions would be utilities specifically intended for interface to certain types of terminals or printers that can't handle those characters. Whenever possible, try to make programs work properly with sequences of bytes that represent multibyte characters; UTF-8 is the most important. @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{perror}, @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 zero. 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. In Unix, @code{realloc} can destroy the storage block if it returns zero. GNU @code{realloc} does not have this bug: if it fails, the original block is unchanged. Feel free to assume the bug is fixed. If you wish to run your program on Unix, and wish to avoid lossage in this case, you can use the GNU @code{malloc}. 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. 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 @sc{posix} @code{sigaction} function; the alternative USG @code{signal} interface is an inferior design. Nowadays, using the @sc{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{source-file-name}:@var{lineno}: @var{message} @end example @noindent If you want to mention the column number, use one of these formats: @example @var{source-file-name}:@var{lineno}:@var{column}: @var{message} @var{source-file-name}:@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{source-file-name}:@var{lineno-1}.@var{column-1}-@var{lineno-2}.@var{column-2}: @var{message} @var{source-file-name}:@var{lineno-1}.@var{column-1}-@var{column-2}: @var{message} @var{source-file-name}:@var{lineno-1}-@var{lineno-2}: @var{message} @end example @noindent When an error is spread over several files, you can use this format: @example @var{file-1}:@var{lineno-1}.@var{column-1}-@var{file-2}:@var{lineno-2}.@var{column-2}: @var{message} @end example Error messages from other noninteractive programs should look like this: @example @var{program}:@var{source-file-name}:@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{source-file-name}:@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. Instead, use a run time option or a compilation switch or both to select among the alternate behaviors. @cindex output device and program's behavior Likewise, please don't make the behavior of the program depend on the type of output device it is used with. 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. 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 Graphical Interfaces @section Standards for Graphical Interfaces @cindex graphical user interface @cindex interface styles @cindex user interface styles @cindex GTK+ When you write a program that provides a graphical user interface, please make it work with the X Window System and the GTK+ 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. @node Command-Line Interfaces @section Standards for Command Line Interfaces @cindex command-line interface @findex getopt It is a good idea to follow the @sc{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 @sc{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 @url{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 abbrevations 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 <http://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 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{http://www.gnu.org/@/licenses/@/gpl.html}. @item LGPL GNU Lesser General Public License, @url{http://www.gnu.org/@/licenses/@/lgpl.html}. @item GPL/Ada GNU GPL with the exception for Ada. @item Apache The Apache Software Foundation license, @url{http://www.apache.org/@/licenses}. @item Artistic The Artistic license used for Perl, @url{http://www.perlfoundation.org/@/legal}. @item Expat The Expat license, @url{http://www.jclark.com/@/xml/@/copying.txt}. @item MPL The Mozilla Public License, @url{http://www.mozilla.org/@/MPL/}. @item OBSD The original (4-clause) BSD license, incompatible with the GNU GPL @url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#6}. @item PHP The license used for PHP, @url{http://www.php.net/@/license/}. @item public domain The non-license that is being in the public domain, @url{http://www.gnu.org/@/licenses/@/license-list.html#PublicDomain}. @item Python The license for Python, @url{http://www.python.org/@/2.0.1/@/license.html}. @item RBSD The revised (3-clause) BSD, compatible with the GNU GPL,@* @url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#5}. @item X11 The simple non-copyleft license used for most versions of the X Window System, @url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#3}. @item Zlib The license for Zlib, @url{http://www.gzip.org/@/zlib/@/zlib_license.html}. @end table More information about these licenses and many more are on the GNU licensing web pages, @url{http://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{http://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: <http://www.gnu.org/software/@var{pkg}/> General help using GNU software: <http://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 Werner Koch). These are used for SNMP, LDAP, X.509 certificates, and so on. The web site @url{http://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 zero. @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 `...' 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 open brace @cindex braces, in C source 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 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 the reader can see that for himself. 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 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)) == 0) fatal ("virtual memory exhausted"); @end example @noindent instead, write this: @example foo = (char *) malloc (sizeof *foo); if (foo == 0) fatal ("virtual memory exhausted"); @end example This example uses zero without a cast as a null pointer constant. This is perfectly fine, except that a cast is needed when calling a varargs function or when using @code{sizeof}. @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 on top of the GNU kernel, compiled with the GNU C compiler, on various types of @sc{cpu}. So the kinds of portability that are absolutely necessary are quite limited. But it is important to support Linux-based GNU systems, since they are the form of GNU that is popular. Beyond that, it is good to support the other free operating systems (*BSD), and it is nice to support other Unix-like systems if you want to. 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. @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-@sc{posix} systems, and portability As for systems that are not like Unix, such as MSDOS, 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''. 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 this in GNU packages. Instead of abbreviating ``Windows'' to ``win'', you can write it in full or abbreviate it to ``woe'' or ``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}. 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 @sc{cpu}s @cindex data types, and portability @cindex portability, and data types Even GNU systems will differ because of differences among @sc{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. Similarly, don't make any effort to cater to the possibility that @code{long} will be smaller than predefined types like @code{size_t}. For example, the following code is ok: @example printf ("size = %lu\n", (unsigned long) sizeof array); printf ("diff = %ld\n", (long) (pointer2 - pointer1)); @end example 1989 Standard C requires this to work, and we know of only one counterexample: 64-bit programs on Microsoft Windows. We will leave it to those who want to port GNU programs to that environment to figure out how to do 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, very few systems lack a C89 compiler and GNU C supports almost all of C99. Similarly, most systems implement POSIX.1-1993 libraries and tools, and many have POSIX.1-2001. Hence, there is little reason to support old C or non-POSIX systems, and you may want to take advantage of C99 and POSIX-1.2001 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{http://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'...")); @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 grave accent In the C locale, GNU programs should stick to plain ASCII for quotation characters in messages to users: preferably 0x60 (@samp{`}) for left quotes and 0x27 (@samp{'}) for right quotes. It is ok, but not required, to use locale-specific quotes in other locales. The @uref{http://www.gnu.org/software/gnulib/, Gnulib} @code{quote} and @code{quotearg} modules provide a reasonably straightforward way to support locale-specific quote characters, as well as taking care of other issues, such as quoting a filename that itself contains a quote character. See the Gnulib documentation for usage details. In any case, the documentation for your program should clearly specify how it does quoting, if different than the preferred method of @samp{`} and @samp{'}. This is especially important if the output of your program is ever likely to be parsed by another program. Quotation characters are a difficult area in the computing world at this time: there are no true left or right quote characters in Latin1; the @samp{`} character we use was standardized there as a grave accent. Moreover, Latin1 is still not universally usable. Unicode contains the unambiguous quote characters required. However, Unicode and UTF-8 are not universally well-supported, either. This may change over the next few years, and then we will revisit this. @node Mmap @section Mmap @findex mmap Don't assume that @code{mmap} 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. 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 list 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. @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{http://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{http://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 and who they came from. @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 You can think of the change log as a conceptual ``undo list'' which explains 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. The change log file is normally called @file{ChangeLog} and covers an entire directory. Each directory can have its own change log, or a directory can use the change log of its parent directory---it's up to you. Another alternative is to record change log information with a version control system such as RCS or CVS. This can be converted automatically to a @file{ChangeLog} file using @code{rcs2log}; in Emacs, the command @kbd{C-x v a} (@code{vc-update-change-log}) does the job. There's no need to describe the full purpose of the changes or how they work together. However, sometimes it is useful to write one line to describe the overall purpose of a change or a batch of changes. If you think that a change calls for explanation, you're probably right. Please do explain it---but please put the full explanation in comments in the code, where people will see it whenever they see the code. For example, ``New function'' is enough for the change log when you add a function, because there should be a comment before the function definition to explain what it does. In the past, we recommended not mentioning changes in non-software files (manuals, help files, etc.) in change logs. However, we've been advised that it is a good idea to include them, for the sake of copyright records. The easiest way to add an entry to @file{ChangeLog} is with the Emacs command @kbd{M-x add-change-log-entry}. An entry should have an asterisk, the name of the changed file, and then in parentheses the name of the changed functions, variables or whatever, followed by a colon. Then describe the changes you made to that function or variable. @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 and GCC.) @example 1998-08-17 Richard Stallman <rms@@gnu.org> * register.el (insert-register): Return nil. (jump-to-register): Likewise. * sort.el (sort-subr): Return nil. * tex-mode.el (tex-bibtex-file, tex-file, tex-region): Restart the tex shell if process is gone or stopped. (tex-shell-running): New function. * expr.c (store_one_arg): Round size up for move_block_to_reg. (expand_call): Round up when emitting USE insns. * stmt.c (assign_parms): Round size up for move_block_from_reg. @end example It's important to name the changed function or variable 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. When two entries represent parts of the same change, so that they work together, then don't put blank lines between them. Then you can omit the file name and the asterisk when successive entries 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{(} as in this example: @example * keyboard.c (menu_bar_items, tool_bar_items) (Fexecute_extended_command): Deal with `keymap' property. @end example 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 As for the date, that should be the date you applied the change. @node Simple Changes @subsection Simple Changes Certain simple kinds of changes don't need much detail in the change log. 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. There's no technical need to make change log entries for documentation files. This is because documentation is not susceptible to bugs that are hard to fix. Documentation does not consist of parts that must interact in a precisely engineered fashion. To correct an error, you need not know the history of the erroneous passage; it is enough to compare what the documentation says with the way the program actually works. However, you should keep change logs for documentation files when the project gets copyright assignments from its contributors, so as to make the records of authorship more accurate. @node Conditional Changes @subsection Conditional Changes @cindex conditional changes, and change logs @cindex change logs, conditional changes C programs often contain compile-time @code{#if} conditionals. Many changes are conditional; sometimes you add a new definition which is entirely contained in a conditional. It is very useful to indicate in the change log the conditions for which the change applies. Our convention for indicating conditional changes is to use square brackets around the name of the condition. Here is a simple example, describing a change which is conditional but does not have a function or entity name associated with it: @example * xterm.c [SOLARIS2]: Include string.h. @end example Here is an entry describing a new definition which is entirely conditional. This new definition for the macro @code{FRAME_WINDOW_P} is used only when @code{HAVE_X_WINDOWS} is defined: @example * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined. @end example Here is 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 Here is an entry for a change that takes affect only when a certain macro is @emph{not} defined: @example (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 explaining 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{http://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 explaining 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 --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{http://git.savannah.gnu.org/@/gitweb/@/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD, @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{http://git.savannah.gnu.org/@/gitweb/@/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD, @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 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} which gives the name of the package, and a general description of what it does. It is also good to explain the purpose of each of the first-level subdirectories in the package, if there are any. The @file{README} file should either state the version number of the package, or refer to where in the package it can be found. The @file{README} file should refer to the file @file{INSTALL}, which should contain an explanation of the installation procedure. The @file{README} file should also refer 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}. 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{lex}, @TeX{}, and @code{makeinfo}; this helps avoid unnecessary dependencies between our distributions, so that users can install whichever packages they want to install. 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 idea that their existence is ethical. The GNU definition of free software is found on the GNU web site at @url{http://www.gnu.org/@/philosophy/@/free-sw.html}, and the definition of free documentation is found at @url{http://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{http://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. 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. 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, many Java programs depend on some non-free Java libraries. To recommend or promote such a program is to promote the other programs it needs. This is why we are careful about listing Java programs in the Free Software Directory: we don't want to promote the non-free Java libraries. We hope this particular problem with Java will be gone by and by, as we replace the remaining non-free standard Java libraries with free software, 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. Following links from nearly any web site can lead eventually to non-free software; this is inherent in the nature of the web. So it makes no sense to criticize a site for having such links. As long as the site does not itself recommend a non-free program, there is no need to consider the question of the sites that it links to for other reasons. Thus, for example, 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 site that links to AT&T's site presenting it as a place to get some non-free program, because that link recommends and legitimizes the non-free program. However, that a site contains a link to AT&T's web site for some other purpose (such as long-distance telephone service) is not an objection against it. @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 'write-file-hooks 'time-stamp) time-stamp-start: "@set lastupdate " time-stamp-end: "$" time-stamp-format: "%:b %:d, %:y" compile-command: "cd work.s && make" End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/stat-size.texi�����������������������������������������������������������0000664�0000000�0000000�00000001745�11671051007�0020064�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-20111211-stable/doc/valgrind-tests.texi������������������������������������������������������0000664�0000000�0000000�00000002421�11671051007�0021077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@node Running self-tests under valgrind @section Running self-tests under valgrind For projects written in C or similar languages, running the self-tests under Valgrind can reveal hard to find memory issues. The @code{valgrind-tests} module searches for Valgrind and declares the @code{VALGRIND} automake variable for use with automake's @code{TESTS_ENVIRONMENT}. 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 TESTS_ENVIRONMENT = $(VALGRIND) @end smallexample This will run all self-checks under valgrind. This can be wasteful if you have many shell scripts or other non-binaries. Using the Automake parallel-tests feature, this can be avoided by using the following instead: @smallexample AUTOMAKE_OPTIONS = parallel-tests TEST_EXTENSIONS = .pl .sh LOG_COMPILER = $(VALGRIND) @end smallexample Then valgrind will only be used for the non-.sh and non-.pl tests. However, this means that binaries invoked through scripts will not be invoked under valgrind, which could be solved by adding the following: @smallexample TESTS_ENVIRONMENT = VALGRIND='$(VALGRIND)' @end smallexample And then modify the shell scripts to invoke the binary prefixed with @code{$VALGRIND}. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/verify.texi��������������������������������������������������������������0000664�0000000�0000000�00000007351�11671051007�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c GNU verify module documentation @c Copyright (C) 2006, 2009-2011 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 @c or any later version published by the Free Software Foundation; @c with no Invariant Sections, no Front-Cover Texts, and no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. @node Compile-time Assertions @section Compile-time Assertions @cindex assertion @findex verify @findex verify_expr The @samp{verify} module supports 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. This module provides a header file @file{verify.h} that defines two macros: @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. @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, draft C1X specifies a builtin @code{_Static_assert (@var{V}, @var{STRING-LITERAL})}, its @file{assert.h} header has a similar macro named @code{static_assert}, and draft C++0X has a similar @code{static_assert} builtin. These draft 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 require the programmer to specify a compile-time diagnostic as a string literal. Here are some example uses of @code{verify} and @code{verify_expr}. @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)) @end example ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/doc/warnings.texi������������������������������������������������������������0000664�0000000�0000000�00000004215�11671051007�0017764�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 allows to 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.) @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 Note that it is a bad idea to use @samp{gl_WARN_ADD([-Werror])}. 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 maintainers use @samp{-Werror} only for themselves (for example, during @samp{make distcheck}, as mentioned above). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/gnulib-tool������������������������������������������������������������������0000775�0000000�0000000�00000733474�11671051007�0016675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # # Copyright (C) 2002-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 <http://www.gnu.org/licenses/>. # # This program is meant for authors or maintainers which want to import # modules from gnulib into their packages. progname=$0 package=gnulib nl=' ' IFS=" "" $nl" # You can set AUTOCONFPATH to empty if autoconf 2.57 is already in your PATH. AUTOCONFPATH= #case $USER in # bruno ) # AUTOCONFBINDIR=/packages/gnu-inst-autoconf/2.57/bin # AUTOCONFPATH="eval env PATH=${AUTOCONFBINDIR}:\$PATH " # ;; #esac # 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= # 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 # <http://lists.gnu.org/archive/html/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-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 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, --create-[mega]testdir, --[mega]test: --with-tests Include unit tests for the included modules. --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. --with-longrunning-tests Include even unit tests that are long-runners. --with-privileged-tests Include even unit tests that require root privileges. --with-unportable-tests Include even 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). --no-changelog Don't update or create ChangeLog files. Options for --create-[mega]testdir, --[mega]test: --without-c++-tests Exclude unit tests for C++ interoperability. --without-longrunning-tests Exclude unit tests that are long-runners. --without-privileged-tests Exclude unit tests that require root privileges. --without-unportable-tests Exclude unit tests that fail on some platforms. --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 Make symbolic links instead of copying files, and don't replace copyright notices. 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 if test -d "$gnulib_dir"/CVS \ && (cvs --version) >/dev/null 2>/dev/null; then # gnulib checked out from CVS. sed_extract_first_date='/^date: /{ s/^date: \([0-9][0-9][0-9][0-9]\).\([0-9][0-9]\).\([0-9][0-9]\) \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1-\2-\3 \4/p q }' date=`cd "$gnulib_dir" && cvs log -N ChangeLog 2>/dev/null | sed -n -e "$sed_extract_first_date"` else # gnulib copy without versioning information. date=`sed -e 's/ .*//;q' "$gnulib_dir"/ChangeLog` fi 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 <http://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" "and" "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 <http://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+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 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 # 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 -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 # 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_ln 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. func_ln () { case "$1" in /*) ln -s "$1" "$2" ;; *) # SRC is relative. case "$2" in /*) ln -s "`pwd`/$1" "$2" ;; *) # DEST is relative too. ln_destdir=`echo "$2" | sed -e 's,[^/]*$,,'` test -n "$ln_destdir" || ln_destdir="." func_relativize "$ln_destdir" "$1" ln -s "$reldir" "$2" ;; esac ;; esac } # func_ln_if_changed SRC DEST # Like func_ln, but avoids munging timestamps if the link is correct. func_ln_if_changed () { if test $# -ne 2; then echo "usage: func_ln_if_changed SRC DEST" >&2 fi ln_target=`func_readlink "$2"` if test -h "$2" && test "$1" = "$ln_target"; then : else rm -f "$2" func_ln "$1" "$2" 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 # <http://lists.gnu.org/archive/html/bug-bash/2008-12/msg00050.html> # <http://lists.gnu.org/archive/html/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 # Command-line option processing. # Removes the OPTIONS from the arguments. Sets the variables: # - mode list or import or add-import or remove-import or update # or create-testdir or create-megatestdir # - destdir from --dir # - local_gnulib_dir from --local-dir # - 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, 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 # - 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 # - do_changelog false if --no-changelog was given, : otherwise # - doit : if actions shall be executed, false if only to be printed # - symbolic true if --symlink or --more-symlinks was given, blank # otherwise # - lsymbolic true if --local-symlink was given, blank otherwise # - do_copyrights blank if --more-symlinks was given, true otherwise { mode= destdir= local_gnulib_dir= 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= makefile_name= libtool= macro_prefix= po_domain= witness_c_macro= vc_files= do_changelog=: doit=: symbolic= lsymbolic= do_copyrights=true 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 local_gnulib_dir=$1 shift ;; --local-dir=* ) local_gnulib_dir=`echo "X$1" | sed -e 's/^X--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-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 | 3) ;; *) func_fatal_error "invalid LGPL version number for --lgpl" ;; esac lgpl=$arg 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 ) do_changelog=false shift ;; --dry-run ) doit=false shift ;; -s | --symbolic | --symboli | --symbol | --symbo | --symb | --symlink | --symlin | --symli | --syml | --sym | --sy ) symbolic=true shift ;; --local-symlink | --local-symlin | --local-symli | --local-syml | --local-sym | --local-sy | --local-s ) lsymbolic=true shift ;; -S | --more-symlinks | --more-symlink | --more-symlin | --more-symli | --more-syml | --more-sym | --more-sy | --more-s | --more- | --more | --mor | --mo ) symbolic=true do_copyrights= shift ;; --help | --hel | --he | --h ) 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 # This code helps migrating from --import to --add-import or --update. It can # be removed on 2012-01-01. if test "$mode" = import && test $# = 0; then echo "gnulib-tool: cowardly refusing to erase the module list." 1>&2 echo "The meaning of the option '--import' has changed." 1>&2 echo "See the documentation at" 1>&2 echo "<http://www.gnu.org/software/gnulib/manual/html_node/Modified-imports.html>." 1>&2 echo "For updating to a newer version of gnulib, use" 1>&2 echo " gnulib-tool --add-import" 1>&2 echo "For restoring files that were omitted from version control, use" 1>&2 echo " gnulib-tool --update" 1>&2 func_exit 1 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_dir" || 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 do_changelog=false 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 if test "$cond_dependencies" = true && test -n "$inctests"; then echo "gnulib-tool: option --conditional-dependencies is not supported with --with-tests" 1>&2 func_exit 1 fi # Determine the minimum supported autoconf version from the project's # configure.ac. DEFAULT_AUTOCONF_MINVERSION="2.59" 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-4]* | 2.5[0-8]*) func_fatal_error "minimum supported autoconf version is 2.59. 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,' case "$local_gnulib_dir" in */ ) local_gnulib_dir=`echo "$local_gnulib_dir" | sed -e "$sed_trimtrailingslashes"` ;; esac 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_file file # looks up a file in $local_gnulib_dir or $gnulib_dir, or combines it through # 'patch'. # Input: # - local_gnulib_dir 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" if test -n "$local_gnulib_dir" && test -f "$local_gnulib_dir/$lkfile"; then lookedup_file="$local_gnulib_dir/$lkfile" lookedup_tmp= else if test -f "$gnulib_dir/$lkfile"; then if test -n "$local_gnulib_dir" && test -f "$local_gnulib_dir/$lkfile.diff"; then lkbase=`echo "$lkfile" | sed -e 's,^.*/,,'` rm -f "$tmp/$lkbase" cp "$gnulib_dir/$lkfile" "$tmp/$lkbase" patch -s "$tmp/$lkbase" < "$local_gnulib_dir/$lkfile.diff" \ || func_fatal_error "patch file $local_gnulib_dir/$lkfile.diff didn't apply cleanly" lookedup_file="$tmp/$lkbase" lookedup_tmp=true else lookedup_file="$gnulib_dir/$lkfile" lookedup_tmp= fi else func_fatal_error "file $gnulib_dir/$lkfile not found" fi 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 '/^CVS\//d' -e '/\/CVS\//d' \ -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_all_modules # Input: # - local_gnulib_dir 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/,,') if test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules"; then (cd "$local_gnulib_dir" && find modules -type f -print | sed -e 's,^modules/,,' -e 's,\.diff$,,') fi } \ | func_sanitize_modulelist \ | sed -e '/-tests$/d' \ | LC_ALL=C sort -u } # func_exists_module module # tests whether a module, given by name, exists # Input: # - local_gnulib_dir from --local-dir func_exists_module () { { test -f "$gnulib_dir/modules/$1" \ || { test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules" \ && test -f "$local_gnulib_dir/modules/$1"; }; } \ && test "CVS" != "$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_dir from --local-dir # - module module name argument 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_dir 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_dir 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_dir 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_dir 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_dir 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_dir 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_dir 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_dir 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/gnulib-common.m4 case "$autoconf_minversion" in 2.59) echo m4/onceonly.m4 ;; esac } # 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_dir 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' } # func_get_autoconf_early_snippet module # Input: # - local_gnulib_dir 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_dir 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 } # func_get_automake_snippet_conditional module # returns the part of the Makefile.am snippet that can be put inside Automake # conditionals. # Input: # - local_gnulib_dir 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_dir 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_combine_lines='/\\$/{ :a N s/\\\n/ / s/\\$/\\/ ta }' 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 } \ | sed -e "$sed_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 # Synthesize an EXTRA_DIST augmentation also for the files from top/. func_filter_filelist top_files "$nl" "$all_files" 'top/' '' 'top/' '' if test -n "$top_files"; then sed_prepend_topdir='s,^,$(top_srcdir)/,' echo "EXTRA_DIST += "`echo "$top_files" | sed -e "$sed_prepend_topdir"` echo fi ;; esac } # func_get_automake_snippet module # Input: # - local_gnulib_dir 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_dir 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_dir 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 module # Input: # - local_gnulib_dir from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules func_get_license () { { 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 # The default is GPL. echo "GPL" } | sed -e 's,^ *$,,' | sed -e 1q } # func_get_maintainer module # Input: # - local_gnulib_dir 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_dir 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 \ || { test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules" \ && test -f "$local_gnulib_dir/modules/$1"-tests; }; then echo "$1"-tests fi } # 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 sed_dependencies_without_conditions='s/ *\[.*//' # func_modules_transitive_closure # Input: # - local_gnulib_dir from --local-dir # - modcache true or false, from --cache-modules/--no-cache-modules # - modules list of specified modules # - inctests true if tests should be included, blank 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 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 test -n "$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 '\x1b[1m'` bold_off=`printf '\x1b[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_dir 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, blank 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="" 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 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_dir 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_modules_add_dummy # Input: # - local_gnulib_dir 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= sed_remove_backslash_newline=':a /\\$/{ s/\\$// N s/\n// ba }' for module in $modules; do func_verify_nontests_module if test -n "$module"; then # Extract the value of "lib_SOURCES += ...". for file in `func_get_automake_snippet "$module" | sed -e "$sed_remove_backslash_newline" | 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 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_dir 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_dir 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_dir 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_dir 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. # 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} 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' } # 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_add_file # copies a file from gnulib into the destination directory. The destination # is known to not exist. # Input: # - destdir target directory # - local_gnulib_dir 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 # - symbolic true if files should be symlinked, copied otherwise # - lsymbolic true if files from local_gnulib_dir should be symlinked, # copied otherwise func_add_file () { if $doit; then echo "Copying file $g" if { test -n "$symbolic" \ || { test -n "$lsymbolic" \ && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \ && test -z "$lookedup_tmp" \ && cmp "$lookedup_file" "$tmpfile" > /dev/null; then func_ln_if_changed "$lookedup_file" "$destdir/$g" else mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed" 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_dir 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 # - symbolic true if files should be symlinked, copied otherwise # - lsymbolic true if files from local_gnulib_dir should be symlinked, # copied otherwise # - already_present nonempty if the file should already exist, empty otherwise func_update_file () { if cmp "$destdir/$g" "$tmpfile" > /dev/null; 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" if { test -n "$symbolic" \ || { test -n "$lsymbolic" \ && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; } \ && test -z "$lookedup_tmp" \ && cmp "$lookedup_file" "$tmpfile" > /dev/null; then func_ln_if_changed "$lookedup_file" "$destdir/$g" else mv -f "$tmpfile" "$destdir/${g}" || func_fatal_error "failed" 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_dir 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 # - 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 # - 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} # 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 creating an includable Makefile.am snippet, augment variables with # += instead of assigning them. if 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!" echo "## Process this file with automake to produce Makefile.in." func_emit_copyright_notice if test -n "$actioncmd"; then # The maximum line length (excluding the terminating newline) of any file # that is to be preprocessed by config.status is 3070. 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. len=`echo "$actioncmd" | wc -c` if test -n "$len" && test "$len" -le 3000; then echo "# Reproduce by: $actioncmd" fi 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,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 } > "$tmp"/amsnippet1 { func_get_automake_snippet_unconditional "$module" | LC_ALL=C sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' } > "$tmp"/amsnippet2 # Skip the contents if it's entirely empty. if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then echo "## begin gnulib module $module" echo if test "$cond_dependencies" = true; then if func_cond_module_p "$module"; then func_module_conditional_name "$module" echo "if $conditional" fi fi cat "$tmp"/amsnippet1 if test "$cond_dependencies" = true; then if func_cond_module_p "$module"; then echo "endif" fi fi cat "$tmp"/amsnippet2 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.5 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.9b create an empty pkgdatadir at installation time # if you specify pkgdata_DATA to empty. This is a 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 # 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\" if test -n "$var"; then if test "${dir}Makefile.am" = "$destfile" || test "./${dir}Makefile.am" = "$destfile"; then 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_dir 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_dir 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_dir 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 # - 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 # - 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} # 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 sed_eliminate_LDFLAGS="$sed_noop" else libext=a 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 "$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,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 += @${perhapsLT}ALLOCA@" echo "libtests_a_DEPENDENCIES += @${perhapsLT}ALLOCA@" fi } > "$tmp"/amsnippet # Skip the contents if it's entirely empty. if grep '[^ ]' "$tmp"/amsnippet > /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" echo cat "$tmp"/amsnippet echo "## end gnulib module $module" echo } >&$ofd fi rm -f "$tmp"/amsnippet # 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.5 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 "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.9b create an empty pkgdatadir at installation time # if you specify pkgdata_DATA to empty. This is a 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\" if test -n "$var"; then if test "${dir}Makefile.am" = "$destfile" || test "./${dir}Makefile.am" = "$destfile"; then echo "${var} += ${val}" eval "makefile_am_edit${edit}_var=" fi fi done 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 local_ldadd_before='' local_ldadd_after='' 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 'error' # module whose dependency to 'progname' is voluntarily omitted). # The LIBTESTS_LIBDEPS can be passed to the linker once or twice, it does # not matter. local_ldadd_before=' libtests.a' local_ldadd_after=' libtests.a $(LIBTESTS_LIBDEPS)' fi echo "LDADD =${local_ldadd_before} ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext}${local_ldadd_after}" 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' 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 # emits the first few statements of the gl_INIT macro to standard output. # - macro_prefix prefix of gl_EARLY, gl_INIT macros 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], [])" echo " gl_COMMON" } # 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([${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: # - local_gnulib_dir 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. # - indentation spaces to prepend on each line func_emit_autoconf_snippet () { 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 cat 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 verifier toplevel disable_libtool disable_gettext # collects and emit the autoconf snippets of a set of modules. # Input: # - local_gnulib_dir 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. # - 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 () { verifier="$2" toplevel="$3" disable_libtool="$4" disable_gettext="$5" if test "$cond_dependencies" = true; then for m in $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_import modules # Uses also the variables # - mode import or add-import or remove-import or update # - destdir target directory # - local_gnulib_dir 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, 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 # - 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 # - symbolic true if files should be symlinked, copied otherwise # - lsymbolic true if files from local_gnulib_dir should be symlinked, # copied otherwise # - do_copyrights true if copyright notices in files should be replaced, # blank otherwise 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_dir= 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_dir="\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_dir 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_dir"; then if test -n "$cached_local_gnulib_dir"; then case "$destdir" in /*) local_gnulib_dir="$destdir/$cached_local_gnulib_dir" ;; *) case "$cached_local_gnulib_dir" in /*) local_gnulib_dir="$destdir/$cached_local_gnulib_dir" ;; *) func_relconcat "$destdir" "$cached_local_gnulib_dir" local_gnulib_dir="$relconcat" ;; esac ;; esac fi 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²) 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 test -z "$inctests"; then inctests="$cached_inctests" 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 && test -n "$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 'GPLed build tool') ;; 'public domain' | 'unlimited' | 'unmodifiable license text') ;; *) case "$lgpl" in yes | 3) case $license in LGPL | LGPLv2+ | LGPLv3+) ;; *) 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" if test -n "$do_copyrights"; then if test -n "$lgpl"; then # Update license. case "$lgpl" in yes | 3) sed_transform_main_lib_file=$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 ' ;; 2) sed_transform_main_lib_file=$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 ' ;; *) func_fatal_error "invalid value lgpl=$lgpl" ;; esac else # Update license. sed_transform_main_lib_file=$sed_transform_main_lib_file' 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 ' fi fi # Determine script to apply to auxiliary files that go into $auxdir/. sed_transform_build_aux_file= if test -n "$do_copyrights"; then # Update license. sed_transform_build_aux_file=$sed_transform_build_aux_file' 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 ' fi # Determine script to apply to library files that go into $testsbase/. sed_transform_testsrelated_lib_file="$sed_transform_lib_file" if test -n "$do_copyrights"; then # Update license. sed_transform_testsrelated_lib_file=$sed_transform_testsrelated_lib_file' 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 ' fi # 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,," # 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 test -n "$inctests"; 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. 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" 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 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" func_append actioncmd " --dir=$destdir" if test -n "$local_gnulib_dir"; then func_append actioncmd " --local-dir=$local_gnulib_dir" fi func_append actioncmd " --lib=$libname" func_append actioncmd " --source-base=$sourcebase" func_append actioncmd " --m4-base=$m4base" if test -n "$pobase"; then func_append actioncmd " --po-base=$pobase" fi func_append actioncmd " --doc-base=$docbase" func_append actioncmd " --tests-base=$testsbase" func_append actioncmd " --aux-dir=$auxdir" if test -n "$inctests"; then func_append actioncmd " --with-tests" fi if test -n "$incobsolete"; then func_append actioncmd " --with-obsolete" fi if test -n "$inc_cxx_tests"; then func_append actioncmd " --with-c++-tests" fi if test -n "$inc_longrunning_tests"; then func_append actioncmd " --with-longrunning-tests" fi if test -n "$inc_privileged_tests"; then func_append actioncmd " --with-privileged-tests" fi if test -n "$inc_unportable_tests"; then func_append actioncmd " --with-unportable-tests" fi if test -n "$inc_all_tests"; then func_append actioncmd " --with-all-tests" fi for module in $avoidlist; do func_append actioncmd " --avoid=$module" done if test -n "$lgpl"; then if test "$lgpl" = yes; then func_append actioncmd " --lgpl" else func_append actioncmd " --lgpl=$lgpl" fi fi if test -n "$makefile_name"; then func_append actioncmd " --makefile-name=$makefile_name" fi if test "$cond_dependencies" = true; then func_append actioncmd " --conditional-dependencies" else func_append actioncmd " --no-conditional-dependencies" fi if test "$libtool" = true; then func_append actioncmd " --libtool" else func_append actioncmd " --no-libtool" fi func_append actioncmd " --macro-prefix=$macro_prefix" if test -n "$po_domain"; then func_append actioncmd " --po-domain=$po_domain" fi if test -n "$witness_c_macro"; then func_append actioncmd " --witness-c-macro=$witness_c_macro" fi if test -n "$vc_files"; then if test "$vc_files" = true; then func_append actioncmd " --vc-files" else func_append actioncmd " --no-vc-files" fi fi func_append actioncmd " `echo $specified_modules`" # Determine include_guard_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 # remembers that ${dir}Makefile.am needs to be edited to that ${var} mentions # ${value}. 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\" } 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 test -n "$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" 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" \ || { test -n "$inctests" \ && { 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 "$destdir"/$sourcebase/$makefile_am "$tmpfile" > /dev/null; 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 "$destdir"/$pobase/$file "$tmpfile" > /dev/null; 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 "$destdir"/$pobase/Makevars "$tmpfile" > /dev/null; 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 "$destdir"/$pobase/POTFILES.in "$tmpfile" > /dev/null; 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="http://translationproject.org/latest/" TP_RSYNC_URI="translationproject.org::tp/latest/" if $doit; then echo "Fetching gnulib PO files from $TP_URL" (cd "$destdir"/$pobase \ && { # Prefer rsync over wget if it is available, since it consumes # less network bandwidth, due to compression. if type rsync 2>/dev/null | grep / > /dev/null; then rsync -Lrtz "${TP_RSYNC_URI}gnulib/" . else wget --quiet -r -l1 -nd -np -A.po "${TP_URL}gnulib" fi } ) 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 "$destdir"/$pobase/LINGUAS "$tmpfile" > /dev/null; 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 # 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:" echo "# $actioncmd" echo echo "# Specification in the form of a few gnulib-tool.m4 macro invocations:" # Store the local_gnulib_dir relative to destdir. case "$local_gnulib_dir" in "" | /*) relative_local_gnulib_dir="$local_gnulib_dir" ;; * ) case "$destdir" in /*) relative_local_gnulib_dir="$local_gnulib_dir" ;; *) # destdir, local_gnulib_dir are both relative. func_relativize "$destdir" "$local_gnulib_dir" relative_local_gnulib_dir="$reldir" ;; esac ;; esac echo "gl_LOCAL_DIR([$relative_local_gnulib_dir])" 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])" test -z "$inctests" || echo "gl_WITH_TESTS" 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_DOMAIN([$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 "$destdir"/$m4base/gnulib-cache.m4 "$tmpfile" > /dev/null; 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" echo " AC_REQUIRE([gl_PROG_AR_RANLIB])" if 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 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" 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 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 <http://lists.gnu.org/archive/html/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" 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 "$destdir"/$m4base/gnulib-comp.m4 "$tmpfile" > /dev/null; 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 test -n "$inctests"; 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 "$destdir"/$testsbase/$makefile_am "$tmpfile" > /dev/null; 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 \ | LC_ALL=C join -v 1 - "$tmp"/ignore > "$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 test -n "$inctests"; 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 position_early_after=AC_PROG_CC_STDC else if grep '^ *AC_PROG_CC_C99' "$configure_ac" > /dev/null; then 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_dir 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, blank 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 # - symbolic true if files should be symlinked, copied otherwise # - lsymbolic true if files from local_gnulib_dir should be symlinked, # copied otherwise 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 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 | 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` # 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 becauses tests are implicitly GPL and may depend # on GPL modules - therefore we don't want a warning in this case. inctests="" 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 'GPLed build tool') ;; 'public domain' | 'unlimited' | 'unmodifiable license text') ;; *) case "$requested_license" in GPLv2+) case "$license" in GPLv2+ | LGPLv2+) ;; *) func_warning "module $requested_module depends on a module with an incompatible license: $module" ;; esac ;; LGPL) case "$license" in LGPL | LGPLv2+) ;; *) 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 # 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. 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" else ln "$lookedup_file" "$testdir/$g" 2>/dev/null || if { test -n "$symbolic" \ || { test -n "$lsymbolic" \ && test "$lookedup_file" = "$local_gnulib_dir/$f"; }; }; then func_ln "$lookedup_file" "$testdir/$g" else cp -p "$lookedup_file" "$testdir/$g" fi fi done exec 0<&5 5<&- } # Determine include_guard_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 test -n "$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" echo "gl_PROG_AR_RANLIB" echo 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 # 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" func_verify_nontests_module false false false echo "gl_source_base='.'" func_emit_autoconf_snippets "$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.5 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" echo echo "gl_PROG_AR_RANLIB" echo 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 echo "gl_source_base='$sourcebase'" if $single_configure; then func_emit_autoconf_snippets "$main_modules" func_verify_module true false false else func_emit_autoconf_snippets "$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 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" 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 func_execute_command ${AUTOHEADER} || func_exit 1 func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1 ) || func_exit 1 if test -n "$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 func_execute_command ${AUTOHEADER} || func_exit 1 func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1 ) || 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=`sed -e "$sed_remove_backslash_newline" < "$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=`sed -e "$sed_remove_backslash_newline" < "$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 test -n "$inctests"; then # Likewise for built files in the $testsbase directory. tests_cleaned_files=`sed -e "$sed_remove_backslash_newline" < "$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=`sed -e "$sed_remove_backslash_newline" < "$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 } # func_create_megatestdir megatestdir allmodules # Input: # - local_gnulib_dir 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=`if test -f "$gnulib_dir/CVS/Entries"; then \ vc_witness="$gnulib_dir/CVS/Entries"; \ else \ vc_witness="$gnulib_dir/.git/refs/heads/master"; \ fi; \ 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.5 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 ) || 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" \ || { test -n "$local_gnulib_dir" && test -f "$local_gnulib_dir/$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/,,') if test -n "$local_gnulib_dir" && test -d "$local_gnulib_dir/modules"; then (cd "$local_gnulib_dir" && find modules -type f -print | xargs -n 100 grep -l "$filename_anywhere_regex" /dev/null | sed -e 's,^modules/,,' -e 's,\.diff$,,') fi } \ | 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_dir, 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-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-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" 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 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-20111211-stable/lib/�������������������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0015240�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/.cppi-disable������������������������������������������������������������0000664�0000000�0000000�00000000710�11671051007�0017573�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-20111211-stable/lib/.cvsignore���������������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0017235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.deps Makefile alloca.h charset.alias 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-20111211-stable/lib/Makefile�����������������������������������������������������������������0000664�0000000�0000000�00000000216�11671051007�0016677�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-20111211-stable/lib/README�������������������������������������������������������������������0000664�0000000�0000000�00000000236�11671051007�0016121�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-20111211-stable/lib/_Exit.c������������������������������������������������������������������0000664�0000000�0000000�00000001505�11671051007�0016455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <unistd.h> void _Exit (int status) { _exit (status); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/accept.c�����������������������������������������������������������������0000664�0000000�0000000�00000002540�11671051007�0016644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* accept.c --- wrappers for Windows accept function Copyright (C) 2008-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 <http://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-20111211-stable/lib/accept4.c����������������������������������������������������������������0000664�0000000�0000000�00000007244�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Accept a connection on a socket, with specific opening flags. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include <sys/socket.h> #include <errno.h> #include <fcntl.h> #include "binary-io.h" #include "msvc-nothrow.h" #ifndef SOCK_CLOEXEC # define SOCK_CLOEXEC 0 #endif int accept4 (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags) { int fd; #if HAVE_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 | 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 __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 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 ((long) 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 O_BINARY if (flags & O_BINARY) setmode (fd, O_BINARY); else if (flags & O_TEXT) setmode (fd, O_TEXT); #endif return fd; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/acl-internal.h�����������������������������������������������������������0000664�0000000�0000000�00000017613�11671051007�0017772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal implementation of access control lists. Copyright (C) 2002-2003, 2005-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 <http://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, 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 "error.h" #include "quote.h" #include <errno.h> #ifndef ENOSYS # define ENOSYS (-1) #endif #ifndef ENOTSUP # define ENOTSUP (-1) #endif #ifndef HAVE_FCHMOD # define HAVE_FCHMOD false # define fchmod(fd, mode) (-1) #endif /* Recognize some common errors such as from an NFS mount that does not support ACLs, even when local drives do. */ #if defined __APPLE__ && defined __MACH__ /* MacOS X */ # define ACL_NOT_WELL_SUPPORTED(Err) \ ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == ENOENT) #elif defined EOPNOTSUPP /* Tru64 NFS */ # define ACL_NOT_WELL_SUPPORTED(Err) \ ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == EOPNOTSUPP) #else # define ACL_NOT_WELL_SUPPORTED(Err) \ ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY) #endif #if USE_ACL # if HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, MacOS X, IRIX, Tru64 */ # 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 */ static 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 */ static 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 */ # ifndef HAVE_ACL_EXTENDED_FILE # define HAVE_ACL_EXTENDED_FILE false # define acl_extended_file(name) (-1) # endif /* Linux-specific */ # ifndef HAVE_ACL_FROM_MODE # define HAVE_ACL_FROM_MODE false # define acl_from_mode(mode) (NULL) # endif /* Set to 1 if a file's mode is implicit by the ACL. 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 /* MacOS X, IRIX */ # define MODE_INSIDE_ACL 0 # else # define MODE_INSIDE_ACL 1 # 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 /* MacOS 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); # endif # elif HAVE_FACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ /* Set to 1 if a file's mode is implicit by the ACL. Set to 0 if a file's mode is stored independently from the ACL. */ # if defined __CYGWIN__ /* Cygwin */ # define MODE_INSIDE_ACL 0 # else /* Solaris */ # define MODE_INSIDE_ACL 1 # 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); # 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); /* 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, struct stat *sb); # 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 #endif ���������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/acl.h��������������������������������������������������������������������0000664�0000000�0000000�00000002052�11671051007�0016147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* acl.c - access control lists Copyright (C) 2002, 2008-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 <http://www.gnu.org/licenses/>. Written by Paul Eggert. */ #include <sys/types.h> #include <sys/stat.h> int file_has_acl (char const *, struct stat const *); int copy_acl (char const *, int, char const *, int, mode_t); int set_acl (char const *, int, mode_t); int qset_acl (char const *, int, mode_t); int chmod_or_fchmod (char const *, int, mode_t); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/acl_entries.c������������������������������������������������������������0000664�0000000�0000000�00000004371�11671051007�0017701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the number of entries in an ACL. Copyright (C) 2002-2003, 2005-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 <http://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, MacOS X, IRIX, Tru64). */ /* 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, MacOS X */ # if HAVE_ACL_TYPE_EXTENDED /* MacOS 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 */ /* 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-20111211-stable/lib/acosf.c������������������������������������������������������������������0000664�0000000�0000000�00000001525�11671051007�0016502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inverse cosine function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float acosf (float x) { return (float) acos ((double) x); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/acosl.c������������������������������������������������������������������0000664�0000000�0000000�00000016502�11671051007�0016511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ==================================================== * 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 /* 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-20111211-stable/lib/alignof.h����������������������������������������������������������������0000664�0000000�0000000�00000004212�11671051007�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine alignment of types. Copyright (C) 2003-2004, 2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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: 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__ # define alignof_type __alignof__ #else # define alignof_type alignof_slot #endif #endif /* _ALIGNOF_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/alloca.c�����������������������������������������������������������������0000664�0000000�0000000�00000034464�11671051007�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* alloca.c -- allocate automatically reclaimed memory (Mostly) portable public-domain 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 2, this file's not needed. */ #if !defined (__GNUC__) || __GNUC__ < 2 /* 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 */ /* If your stack is a linked list of frames, you have to provide an "address metric" ADDRESS_FUNCTION macro. */ # if defined (CRAY) && defined (CRAY_STACKSEG_END) long i00afunc (); # define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) # else # define ADDRESS_FUNCTION(arg) &(arg) # endif /* 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 = ADDRESS_FUNCTION (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); } } # if defined (CRAY) && defined (CRAY_STACKSEG_END) # ifdef DEBUG_I00AFUNC # include <stdio.h> # endif # ifndef CRAY_STACK # define CRAY_STACK # ifndef CRAY2 /* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ struct stack_control_header { long shgrow:32; /* Number of times stack has grown. */ long shaseg:32; /* Size of increments to stack. */ long shhwm:32; /* High water mark of stack. */ long shsize:32; /* Current size of stack (all segments). */ }; /* The stack segment linkage control information occurs at the high-address end of a stack segment. (The stack grows from low addresses to high addresses.) The initial part of the stack segment linkage control information is 0200 (octal) words. This provides for register storage for the routine which overflows the stack. */ struct stack_segment_linkage { long ss[0200]; /* 0200 overflow words. */ long sssize:32; /* Number of words in this segment. */ long ssbase:32; /* Offset to stack base. */ long:32; long sspseg:32; /* Offset to linkage control of previous segment of stack. */ long:32; long sstcpt:32; /* Pointer to task common address block. */ long sscsnm; /* Private control structure number for microtasking. */ long ssusr1; /* Reserved for user. */ long ssusr2; /* Reserved for user. */ long sstpid; /* Process ID for pid based multi-tasking. */ long ssgvup; /* Pointer to multitasking thread giveup. */ long sscray[7]; /* Reserved for Cray Research. */ long ssa0; long ssa1; long ssa2; long ssa3; long ssa4; long ssa5; long ssa6; long ssa7; long sss0; long sss1; long sss2; long sss3; long sss4; long sss5; long sss6; long sss7; }; # else /* CRAY2 */ /* The following structure defines the vector of words returned by the STKSTAT library routine. */ struct stk_stat { long now; /* Current total stack size. */ long maxc; /* Amount of contiguous space which would be required to satisfy the maximum stack demand to date. */ long high_water; /* Stack high-water mark. */ long overflows; /* Number of stack overflow ($STKOFEN) calls. */ long hits; /* Number of internal buffer hits. */ long extends; /* Number of block extensions. */ long stko_mallocs; /* Block allocations by $STKOFEN. */ long underflows; /* Number of stack underflow calls ($STKRETN). */ long stko_free; /* Number of deallocations by $STKRETN. */ long stkm_free; /* Number of deallocations by $STKMRET. */ long segments; /* Current number of stack segments. */ long maxs; /* Maximum number of stack segments so far. */ long pad_size; /* Stack pad size. */ long current_address; /* Current stack segment address. */ long current_size; /* Current stack segment size. This number is actually corrupted by STKSTAT to include the fifteen word trailer area. */ long initial_address; /* Address of initial segment. */ long initial_size; /* Size of initial segment. */ }; /* The following structure describes the data structure which trails any stack segment. I think that the description in 'asdef' is out of date. I only describe the parts that I am sure about. */ struct stk_trailer { long this_address; /* Address of this block. */ long this_size; /* Size of this block (does not include this trailer). */ long unknown2; long unknown3; long link; /* Address of trailer block of previous segment. */ long unknown5; long unknown6; long unknown7; long unknown8; long unknown9; long unknown10; long unknown11; long unknown12; long unknown13; long unknown14; }; # endif /* CRAY2 */ # endif /* not CRAY_STACK */ # ifdef CRAY2 /* Determine a "stack measure" for an arbitrary ADDRESS. I doubt that "lint" will like this much. */ static long i00afunc (long *address) { struct stk_stat status; struct stk_trailer *trailer; long *block, size; long result = 0; /* We want to iterate through all of the segments. The first step is to get the stack status structure. We could do this more quickly and more directly, perhaps, by referencing the $LM00 common block, but I know that this works. */ STKSTAT (&status); /* Set up the iteration. */ trailer = (struct stk_trailer *) (status.current_address + status.current_size - 15); /* There must be at least one stack segment. Therefore it is a fatal error if "trailer" is null. */ if (trailer == 0) abort (); /* Discard segments that do not contain our argument address. */ while (trailer != 0) { block = (long *) trailer->this_address; size = trailer->this_size; if (block == 0 || size == 0) abort (); trailer = (struct stk_trailer *) trailer->link; if ((block <= address) && (address < (block + size))) break; } /* Set the result to the offset in this segment and add the sizes of all predecessor segments. */ result = address - block; if (trailer == 0) { return result; } do { if (trailer->this_size <= 0) abort (); result += trailer->this_size; trailer = (struct stk_trailer *) trailer->link; } while (trailer != 0); /* We are done. Note that if you present a bogus address (one not in any segment), you will get a different number back, formed from subtracting the address of the first block. This is probably not what you want. */ return (result); } # else /* not CRAY2 */ /* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. Determine the number of the cell within the stack, given the address of the cell. The purpose of this routine is to linearize, in some sense, stack addresses for alloca. */ static long i00afunc (long address) { long stkl = 0; long size, pseg, this_segment, stack; long result = 0; struct stack_segment_linkage *ssptr; /* Register B67 contains the address of the end of the current stack segment. If you (as a subprogram) store your registers on the stack and find that you are past the contents of B67, you have overflowed the segment. B67 also points to the stack segment linkage control area, which is what we are really interested in. */ stkl = CRAY_STACKSEG_END (); ssptr = (struct stack_segment_linkage *) stkl; /* If one subtracts 'size' from the end of the segment, one has the address of the first word of the segment. If this is not the first segment, 'pseg' will be nonzero. */ pseg = ssptr->sspseg; size = ssptr->sssize; this_segment = stkl - size; /* It is possible that calling this routine itself caused a stack overflow. Discard stack segments which do not contain the target address. */ while (!(this_segment <= address && address <= stkl)) { # ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); # endif if (pseg == 0) break; stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; this_segment = stkl - size; } result = address - this_segment; /* If you subtract pseg from the current end of the stack, you get the address of the previous stack segment's end. This seems a little convoluted to me, but I'll bet you save a cycle somewhere. */ while (pseg != 0) { # ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o\n", pseg, size); # endif stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; result += size; } return (result); } # endif /* not CRAY2 */ # endif /* CRAY */ # endif /* no alloca */ #endif /* not GCC version 2 */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/alloca.in.h��������������������������������������������������������������0000664�0000000�0000000�00000003552�11671051007�0017256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation on the stack. Copyright (C) 1995, 1999, 2001-2004, 2006-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 # ifdef __GNUC__ # 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 # else # include <stddef.h> # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif #endif /* _GL_ALLOCA_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/allocator.c��������������������������������������������������������������0000664�0000000�0000000�00000000251�11671051007�0017362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/allocator.h��������������������������������������������������������������0000664�0000000�0000000�00000004227�11671051007�0017376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocators such as malloc+free. 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 <http://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 <http://lists.gnu.org/archive/html/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-20111211-stable/lib/alphasort.c��������������������������������������������������������������0000664�0000000�0000000�00000001752�11671051007�0017406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1997-1998, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> #include <dirent.h> #include <string.h> int alphasort (const struct dirent **a, const struct dirent **b) { return strcoll ((*a)->d_name, (*b)->d_name); } ����������������������gnulib-20111211-stable/lib/amemxfrm.c���������������������������������������������������������������0000664�0000000�0000000�00000012040�11671051007�0017215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent memory area transformation for comparison. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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: { int saved_errno = errno; if (result != resultbuf) free (result); s[n] = orig_sentinel; errno = saved_errno; return NULL; } out_of_memory_1: if (result != resultbuf) free (result); s[n] = orig_sentinel; out_of_memory_2: errno = ENOMEM; return NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/amemxfrm.h���������������������������������������������������������������0000664�0000000�0000000�00000003447�11671051007�0017235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent memory area transformation for comparison. Copyright (C) 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 *s, size_t n, char *resultbuf, size_t *lengthp); #ifdef __cplusplus } #endif #endif /* AMEMXFRM_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/anytostr.c���������������������������������������������������������������0000664�0000000�0000000�00000003026�11671051007�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* anytostr.c -- convert integers to printable strings Copyright (C) 2001, 2006, 2008-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 <http://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" #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. */ char * __attribute_warn_unused_result__ 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-20111211-stable/lib/arcfour.c����������������������������������������������������������������0000664�0000000�0000000�00000004026�11671051007�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arcfour.c --- The arcfour stream cipher * Copyright (C) 2000-2003, 2005-2006, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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-20111211-stable/lib/arcfour.h����������������������������������������������������������������0000664�0000000�0000000�00000003154�11671051007�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arcfour.h --- The arcfour stream cipher * Copyright (C) 2000-2005, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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 *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-20111211-stable/lib/arctwo.c�����������������������������������������������������������������0000664�0000000�0000000�00000016260�11671051007�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arctwo.c --- The RC2 cipher as described in RFC 2268. * Copyright (C) 2003-2006, 2008-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ /* 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 inline 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-20111211-stable/lib/arctwo.h�����������������������������������������������������������������0000664�0000000�0000000�00000004243�11671051007�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* arctwo.h --- The arctwo block cipher * Copyright (C) 2000-2003, 2005, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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 *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 *outbuf, size_t length); #endif /* ARCTWO_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/areadlink-with-size.c����������������������������������������������������0000664�0000000�0000000�00000006273�11671051007�0021267�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-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 <http://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 <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); /* The initial buffer size for the link value. */ size_t buf_size = size < initial_limit ? size + 1 : initial_limit; while (1) { ssize_t r; size_t link_length; char *buffer = malloc (buf_size); if (buffer == NULL) return NULL; r = readlink (file, buffer, buf_size); link_length = r; /* On AIX 5L v5.3 and HP-UX 11i v2 04/09, readlink returns -1 with errno == ERANGE if the buffer is too small. */ if (r < 0 && errno != ERANGE) { int saved_errno = errno; free (buffer); errno = saved_errno; return NULL; } if (link_length < buf_size) { buffer[link_length] = 0; 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-20111211-stable/lib/areadlink.c��������������������������������������������������������������0000664�0000000�0000000�00000002702�11671051007�0017337�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-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 <http://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" /* 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-20111211-stable/lib/areadlink.h��������������������������������������������������������������0000664�0000000�0000000�00000002311�11671051007�0017340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read symbolic links without size limitation. Copyright (C) 2001, 2003-2004, 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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering <jim@meyering.net> */ #include <stddef.h> extern char *areadlink (char const *filename); extern char *areadlink_with_size (char const *filename, size_t size_hint); #if GNULIB_AREADLINKAT extern char *areadlinkat (int fd, char const *filename); #endif #if GNULIB_AREADLINKAT_WITH_SIZE extern char *areadlinkat_with_size (int fd, char const *filename, size_t size_hint); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/areadlinkat-with-size.c��������������������������������������������������0000664�0000000�0000000�00000007771�11671051007�0021620�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-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 <http://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 <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); /* The initial buffer size for the link value. */ size_t buf_size = size < initial_limit ? size + 1 : initial_limit; while (1) { ssize_t r; size_t link_length; char *buffer = malloc (buf_size); if (buffer == NULL) return NULL; r = readlinkat (fd, file, buffer, buf_size); link_length = r; /* On AIX 5L v5.3 and HP-UX 11i v2 04/09, readlink returns -1 with errno == ERANGE if the buffer is too small. */ if (r < 0 && errno != ERANGE) { int saved_errno = errno; free (buffer); errno = saved_errno; return NULL; } if (link_length < buf_size) { buffer[link_length] = 0; 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-20111211-stable/lib/areadlinkat.c������������������������������������������������������������0000664�0000000�0000000�00000004253�11671051007�0017667�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-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 <http://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 "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-20111211-stable/lib/argmatch.c���������������������������������������������������������������0000664�0000000�0000000�00000017240�11671051007�0017176�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-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 <http://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> #include "gettext.h" #define _(msgid) gettext (msgid) #include "error.h" #include "quotearg.h" #include "quote.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 char *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 (vallist + valsize * matchind, 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 char *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 */ fprintf (stderr, _("Valid arguments are:")); for (i = 0; arglist[i]; i++) if ((i == 0) || memcmp (last_val, vallist + valsize * i, valsize)) { fprintf (stderr, "\n - `%s'", arglist[i]); last_val = vallist + valsize * i; } else { fprintf (stderr, ", `%s'", 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 char *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 char *value, const char *const *arglist, const char *vallist, size_t valsize) { size_t i; for (i = 0; arglist[i]; i++) if (!memcmp (value, vallist + valsize * i, valsize)) return arglist[i]; return NULL; } #ifdef TEST /* * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu> */ char *program_name; /* 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; program_name = (char *) argv[0]; if (argc > 2) { fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", program_name); exit (1); } if ((cp = getenv ("VERSION_CONTROL"))) backup_type = XARGMATCH ("$VERSION_CONTROL", cp, backup_args, backup_vals); if (argc == 2) backup_type = XARGMATCH (program_name, 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-20111211-stable/lib/argmatch.h���������������������������������������������������������������0000664�0000000�0000000�00000007600�11671051007�0017202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* argmatch.h -- definitions and prototypes for argmatch.c Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 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 <http://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 <stddef.h> # include "verify.h" # 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, char const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE; # define ARGMATCH(Arg, Arglist, Vallist) \ argmatch (Arg, Arglist, (char 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, char const *vallist, size_t valsize); # define ARGMATCH_VALID(Arglist, Vallist) \ argmatch_valid (Arglist, (char 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, char 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, \ (char const *) (Vallist), \ sizeof *(Vallist), \ argmatch_die)]) /* Convert a value into a corresponding argument. */ char const *argmatch_to_argument (char const *value, char const *const *arglist, char const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE; # define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \ argmatch_to_argument (Value, Arglist, \ (char const *) (Vallist), sizeof *(Vallist)) #endif /* ARGMATCH_H_ */ ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/argp-ba.c����������������������������������������������������������������0000664�0000000�0000000�00000003123�11671051007�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_BUG_ADDRESS. Copyright (C) 1996-1997, 1999, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 MacOS X 10.3 and 10.4, see <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html> <http://lists.gnu.org/archive/html/bug-gnulib/2009-08/msg00096.html>. */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else = (const char *) 0 #endif ; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/argp-eexst.c�������������������������������������������������������������0000664�0000000�0000000�00000002206�11671051007�0017463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_ERR_EXIT_STATUS Copyright (C) 1997, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/argp-fmtstream.c���������������������������������������������������������0000664�0000000�0000000�00000032004�11671051007�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word-wrapping and line-truncating streams Copyright (C) 1997-1999, 2001-2003, 2005, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 #if defined _LIBC && defined USE_IN_LIBIO # 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 USE_IN_LIBIO __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 USE_IN_LIBIO 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 USE_IN_LIBIO 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-20111211-stable/lib/argp-fmtstream.h���������������������������������������������������������0000664�0000000�0000000�00000033317�11671051007�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word-wrapping and line-truncating streams. Copyright (C) 1997, 2006-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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> /* 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. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #if (_LIBC - 0 && !defined (USE_IN_LIBIO)) \ || (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; /* 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); extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream, size_t __lmargin, size_t __rmargin, ssize_t __wmargin); /* 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); 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 || !defined __OPTIMIZE__ 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 || !defined __OPTIMIZE__ /* 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); #ifdef __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 #endif #ifndef ARGP_FS_EI # ifdef __GNUC__ /* 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. Whereas Apple GCC 4.0.1 build 5479 without -std=c99 or -std=gnu99 implements the GNU C inline semantics and defines the macro __GNUC_GNU_INLINE__, but it does not warn and does not support __attribute__ ((__gnu_inline__)). All in all, these are the possible combinations. For every compiler, we need to choose ARGP_FS_EI so that the corresponding table cell contains an "ok". \ ARGP_FS_EI inline extern extern \ inline inline CC \ __attribute__ ((gnu_inline)) gcc 4.3.0 error ok ok gcc 4.3.0 -std=gnu99 -fgnu89-inline error ok ok gcc 4.3.0 -std=gnu99 ok error ok gcc 4.2.2 error ok ok gcc 4.2.2 -std=gnu99 -fgnu89-inline error ok ok gcc 4.2.2 -std=gnu99 error warning ok gcc 4.1.2 error ok warning gcc 4.1.2 -std=gnu99 error ok warning Apple gcc 4.0.1 error ok warning Apple gcc 4.0.1 -std=gnu99 ok error warning */ # if defined __GNUC_STDC_INLINE__ # define ARGP_FS_EI inline # elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2) # define ARGP_FS_EI extern inline __attribute__ ((__gnu_inline__)) # else # define ARGP_FS_EI extern inline # endif # else /* With other compilers, assume the ISO C99 meaning of 'inline', if the compiler supports 'inline' at all. */ # define ARGP_FS_EI inline # endif #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 #endif #endif /* __OPTIMIZE__ */ #endif /* ARGP_FMTSTREAM_USE_LINEWRAP */ #endif /* argp-fmtstream.h */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/argp-fs-xinl.c�����������������������������������������������������������0000664�0000000�0000000�00000003113�11671051007�0017711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Real definitions for extern inline functions in argp-fmtstream.h Copyright (C) 1997, 2003-2004, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #define ARGP_FS_EI #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-20111211-stable/lib/argp-help.c��������������������������������������������������������������0000664�0000000�0000000�00000174346�11671051007�0017302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchial argument parsing help output Copyright (C) 1995-2005, 2007, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 <stddef.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <stdarg.h> #include <ctype.h> #include <limits.h> #ifdef USE_IN_LIBIO # include <wchar.h> #endif #ifdef _LIBC # include <libintl.h> # undef dgettext # define dgettext(domain, msgid) \ INTUSE(__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, 0 }; /* A particular uparam, and what the user name is. */ struct uparam_name { const char *name; /* User name. */ int is_bool; /* Whether it's `boolean'. */ size_t 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", 1, offsetof (struct uparams, dup_args) }, { "dup-args-note", 1, offsetof (struct uparams, dup_args_note) }, { "short-opt-col", 0, offsetof (struct uparams, short_opt_col) }, { "long-opt-col", 0, offsetof (struct uparams, long_opt_col) }, { "doc-opt-col", 0, offsetof (struct uparams, doc_opt_col) }, { "opt-doc-col", 0, offsetof (struct uparams, opt_doc_col) }, { "header-col", 0, offsetof (struct uparams, header_col) }, { "usage-indent", 0, offsetof (struct uparams, usage_indent) }, { "rmargin", 0, offsetof (struct uparams, rmargin) }, { 0 } }; static void validate_uparams (const struct argp_state *state, struct uparams *upptr) { const struct uparam_name *up; for (up = uparam_names; up->name; 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->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 appropiately. */ 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->name; 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->root_argp->argp_domain, "\ %.*s: ARGP_HELP_FMT parameter requires a value"), (int) var_len, var); else if (val < 0) __argp_failure (state, 0, 0, dgettext (state->root_argp->argp_domain, "\ %.*s: ARGP_HELP_FMT parameter must be positive"), (int) var_len, var); else *(int *)((char *)&new_params + un->uparams_offs) = val; break; } if (! un->name) __argp_failure (state, 0, 0, dgettext (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->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 "]" appropiately if the argument is optional. The documentation string is word-wrapped appropiately, 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 slighly 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; } 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: 1, 2, ..., n, 0, -m, ..., -2, -1 and then alphabetically within each group. The default is 0. */ int group; /* The cluster of options this entry belongs to, or 0 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 0 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 0, 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); } 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; } static inline int #if __GNUC__ >= 3 __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; } /* Iterator that returns true for the first short option. */ 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 0 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 0 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 it's 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; } /* Order by group: 0, 1, 2, ..., n, -m, ..., -2, -1. EQ is what to return if GROUP1 and GROUP2 are the same. */ static int group_cmp (int group1, int group2, int eq) { if (group1 == group2) return eq; else if ((group1 < 0 && group2 < 0) || (group1 >= 0 && group2 >= 0)) return group1 - group2; else return group2 - group1; } /* Compare clusters CL1 & 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, so that finding the common ancestor is straightforward. clN->depth > 0 means that clN->parent != NULL (see hol_add_cluster) */ while (cl1->depth > cl2->depth) cl1 = cl1->parent; while (cl2->depth > cl1->depth) cl2 = cl2->parent; /* Now reduce both clusters to their ancestors at the point where both have a common parent; these can be directly compared. */ while (cl1->parent != cl2->parent) cl1 = cl1->parent, cl2 = cl2->parent; return group_cmp (cl1->group, cl2->group, cl2->index - cl1->index); } /* 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; } /* 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; } /* 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; if (!*name) non_opt = 1; else { /* 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; } #define HOL_ENTRY_PTRCMP(a,b) ((a)->ord < (b)->ord ? -1 : 1) /* Order ENTRY1 & ENTRY2 by the order which they should appear in a help listing. */ static int hol_entry_cmp (const struct hol_entry *entry1, const struct hol_entry *entry2) { /* The group numbers by which the entries should be ordered; if either is in a cluster, then this is just the group within the cluster. */ int group1 = entry1->group, group2 = entry2->group; int rc; if (entry1->cluster != entry2->cluster) { /* The entries are not within the same cluster, so we can't compare them directly, we have to use the appropiate clustering level too. */ if (! entry1->cluster) /* ENTRY1 is at the `base level', not in a cluster, so we have to compare it's group number with that of the base cluster in which ENTRY2 resides. Note that if they're in the same group, the clustered option always comes laster. */ return group_cmp (group1, hol_cluster_base (entry2->cluster)->group, -1); else if (! entry2->cluster) /* Likewise, but ENTRY2's not in a cluster. */ return group_cmp (hol_cluster_base (entry1->cluster)->group, group2, 1); else /* Both entries are in clusters, we can just compare the clusters. */ return (rc = hol_cluster_cmp (entry1->cluster, entry2->cluster)) ? rc : HOL_ENTRY_PTRCMP (entry1, entry2); } else if (group1 == group2) /* The entries are both in the same cluster and group, so compare them alphabetically. */ { int short1 = hol_entry_first_short (entry1); int short2 = hol_entry_first_short (entry2); int doc1 = odoc (entry1->opt); int doc2 = odoc (entry2->opt); const char *long1 = hol_entry_first_long (entry1); const char *long2 = hol_entry_first_long (entry2); if (doc1) doc1 = canon_doc_option (&long1); if (doc2) doc2 = canon_doc_option (&long2); if (doc1 != doc2) /* `documentation' options always follow normal options (or documentation options that *look* like normal options). */ return doc1 - doc2; else if (!short1 && !short2 && long1 && long2) /* Only long options. */ return (rc = __strcasecmp (long1, long2)) ? rc : HOL_ENTRY_PTRCMP (entry1, entry2); else /* Compare short/short, long/short, short/long, using the first character of long options. Entries without *any* valid options (such as options with OPTION_HIDDEN set) will be put first, but as they're not displayed, it doesn't matter where they are. */ { unsigned char first1 = short1 ? short1 : long1 ? *long1 : 0; unsigned char first2 = short2 ? short2 : long2 ? *long2 : 0; /* Use tolower, not _tolower, since only the former is guaranteed to work on something already lower case. */ int lower_cmp = tolower (first1) - tolower (first2); /* Compare ignoring case, except when the options are both the same letter, in which case lower-case always comes first. */ return lower_cmp ? lower_cmp : (rc = first2 - first1) ? rc : HOL_ENTRY_PTRCMP (entry1, entry2); } } else /* Within the same cluster, but not the same group, so just compare groups. */ return group_cmp (group1, group2, HOL_ENTRY_PTRCMP (entry1, entry2)); } /* Version 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); } } /* 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); } /* 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 0. */ 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->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 appropiately, 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 = dgettext (argp->argp_domain, str); 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); } /* 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; pest.entry = entry; pest.stream = stream; pest.hhstate = hhstate; pest.first = 1; pest.state = 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->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 && *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, onotrans (opt) ? opt->name : dgettext (state->root_argp->argp_domain, opt->name)); } } else /* A real long option. */ { int first_long_opt = 1; __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); if (first_long_opt || uparams.dup_args) arg (real, "=%s", "[=%s]", state->root_argp->argp_domain, stream); else if (real->arg) hhstate->suppressed_dup_arg = 1; } } /* 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->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->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) && !odoc (opt)) { 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); } } /* Make a HOL containing all levels of options in ARGP. CLUSTER is the cluster in which ARGP's entries should be clustered, or 0. */ 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; } /* 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 = dgettext (argp->argp_domain, argp->args_doc), *nl = 0; const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state); 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 preceeding 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; size_t inp_text_len = 0; const char *trans_text; void *input = 0; int anything = 0; const struct argp_child *child = argp->children; if (argp->doc) { char *vt = strchr (argp->doc, '\v'); if (vt) { if (post) inp_text = vt + 1; else { inp_text_len = vt - argp->doc; inp_text = __strndup (argp->doc, inp_text_len); } } else inp_text = post ? 0 : argp->doc; trans_text = inp_text ? dgettext (argp->argp_domain, inp_text) : NULL; } else trans_text = inp_text = 0; if (argp->help_filter) /* We have to filter the doc strings. */ { input = __argp_input (argp, state); text = (*argp->help_filter) (post ? ARGP_KEY_HELP_POST_DOC : ARGP_KEY_HELP_PRE_DOC, trans_text, input); } else text = (const char *) trans_text; if (text) { if (pre_blank) __argp_fmtstream_putc (stream, '\n'); __argp_fmtstream_puts (stream, text); if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) __argp_fmtstream_putc (stream, '\n'); anything = 1; } if (text && text != trans_text) free ((char *) text); /* Free TEXT returned from the help filter. */ if (inp_text && inp_text_len) free ((char *) inp_text); /* We copied INP_TEXT, so free it now. */ if (post && argp->help_filter) /* Now see if we have to output an 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 relevent 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) { struct argp_state state; memset (&state, 0, sizeof state); state.root_argp = argp; _help (argp, &state, 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 return __argp_base_name (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__ # 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 USE_IN_LIBIO if (_IO_fwide (stream, 0) > 0) { char *buf; if (__asprintf (&buf, fmt, ap) < 0) buf = NULL; __fwprintf (stream, L"%s: %s\n", state ? state->name : __argp_short_program_name (), buf); free (buf); } else #endif { fputs_unlocked (state ? state->name : __argp_short_program_name (), stream); putc_unlocked (':', stream); putc_unlocked (' ', stream); vfprintf (stream, fmt, ap); putc_unlocked ('\n', stream); } __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 USE_IN_LIBIO if (_IO_fwide (stream, 0) > 0) __fwprintf (stream, L"%s", state ? state->name : __argp_short_program_name ()); else #endif fputs_unlocked (state ? state->name : __argp_short_program_name (), stream); if (fmt) { va_list ap; va_start (ap, fmt); #ifdef USE_IN_LIBIO if (_IO_fwide (stream, 0) > 0) { char *buf; if (__asprintf (&buf, fmt, ap) < 0) buf = NULL; __fwprintf (stream, L": %s", buf); free (buf); } else #endif { putc_unlocked (':', stream); putc_unlocked (' ', stream); vfprintf (stream, fmt, ap); } va_end (ap); } if (errnum) { char buf[200]; #ifdef USE_IN_LIBIO if (_IO_fwide (stream, 0) > 0) __fwprintf (stream, L": %s", __strerror_r (errnum, buf, sizeof (buf))); else #endif { char const *s = NULL; putc_unlocked (':', stream); putc_unlocked (' ', stream); #if _LIBC || (HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P && !defined strerror_r) s = __strerror_r (errnum, buf, sizeof buf); #elif HAVE_DECL_STRERROR_R if (__strerror_r (errnum, buf, sizeof buf) == 0) s = buf; #endif #if !_LIBC if (! s && ! (s = strerror (errnum))) s = dgettext (state->root_argp->argp_domain, "Unknown system error"); #endif fputs (s, stream); } } #ifdef USE_IN_LIBIO 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-20111211-stable/lib/argp-namefrob.h����������������������������������������������������������0000664�0000000�0000000�00000012556�11671051007�0020142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Name frobnication for compiling argp outside of glibc Copyright (C) 1997, 2003, 2007, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 # define clearerr_unlocked(x) clearerr (x) #endif #if defined(HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED # define feof_unlocked(x) feof (x) #endif #if defined(HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED # define ferror_unlocked(x) ferror (x) #endif #if defined(HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED # define fflush_unlocked(x) fflush (x) #endif #if defined(HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED # define fgets_unlocked(x,y,z) fgets (x,y,z) #endif #if defined(HAVE_DECL_FPUTC_UNLOCKED) && !HAVE_DECL_FPUTC_UNLOCKED # define fputc_unlocked(x,y) fputc (x,y) #endif #if defined(HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED # define fputs_unlocked(x,y) fputs (x,y) #endif #if defined(HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_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 # define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) #endif #if defined(HAVE_DECL_GETC_UNLOCKED) && !HAVE_DECL_GETC_UNLOCKED # define getc_unlocked(x) getc (x) #endif #if defined(HAVE_DECL_GETCHAR_UNLOCKED) && !HAVE_DECL_GETCHAR_UNLOCKED # define getchar_unlocked() getchar () #endif #if defined(HAVE_DECL_PUTC_UNLOCKED) && !HAVE_DECL_PUTC_UNLOCKED # define putc_unlocked(x,y) putc (x,y) #endif #if defined(HAVE_DECL_PUTCHAR_UNLOCKED) && !HAVE_DECL_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 "dirname.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-20111211-stable/lib/argp-parse.c�������������������������������������������������������������0000664�0000000�0000000�00000075666�11671051007�0017471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchial argument parsing, layered over getopt Copyright (C) 1995-2000, 2002-2004, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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) \ INTUSE(__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, 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 sucessfully 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 appropiately 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. We use shifts instead of masking for extracting the user value in order to preserve the sign. */ err = group_parse (&parser->groups[group_key - 1], &parser->state, (opt << GROUP_BITS) >> GROUP_BITS, 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)) { #ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME if (!program_invocation_name) program_invocation_name = argv[0]; #endif #ifdef 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-20111211-stable/lib/argp-pin.c���������������������������������������������������������������0000664�0000000�0000000�00000001725�11671051007�0017126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Full and short program names for argp module Copyright (C) 2005, 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 <http://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 �������������������������������������������gnulib-20111211-stable/lib/argp-pv.c����������������������������������������������������������������0000664�0000000�0000000�00000003072�11671051007�0016762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_VERSION. Copyright (C) 1996-1997, 1999, 2006, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 MacOS X 10.3 and 10.4, see <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html> <http://lists.gnu.org/archive/html/bug-gnulib/2009-08/msg00096.html>. */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else = (const char *) 0 #endif ; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/argp-pvh.c���������������������������������������������������������������0000664�0000000�0000000�00000002567�11671051007�0017142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_VERSION_HOOK. Copyright (C) 1996-1997, 1999, 2004, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/argp-version-etc.c�������������������������������������������������������0000664�0000000�0000000�00000002404�11671051007�0020571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Version hook for Argp. Copyright (C) 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 <http://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-20111211-stable/lib/argp-version-etc.h�������������������������������������������������������0000664�0000000�0000000�00000002541�11671051007�0020600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Version hook for Argp. Copyright (C) 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 <http://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 asumed 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-20111211-stable/lib/argp-xinl.c��������������������������������������������������������������0000664�0000000�0000000�00000002510�11671051007�0017303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Real definitions for extern inline functions in argp.h Copyright (C) 1997-1998, 2004, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 #define ARGP_EI #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-20111211-stable/lib/argp.h�������������������������������������������������������������������0000664�0000000�0000000�00000071332�11671051007�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchial argument parsing, layered over getopt. Copyright (C) 1995-1999, 2003-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 /* 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. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #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__)) # 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 /* 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; /* 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 preceeding 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 appropiate 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 || !defined __USE_EXTERN_INLINES /* 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, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); extern void __argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); /* 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, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); extern void __argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); #if _LIBC || !defined __USE_EXTERN_INLINES /* 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; #ifdef __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 # endif # ifndef ARGP_EI # ifdef __GNUC__ /* 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 __GNUC_STDC_INLINE__ # define ARGP_EI __inline__ # elif defined __GNUC_GNU_INLINE__ # define ARGP_EI extern __inline__ __attribute__ ((__gnu_inline__)) # else # define ARGP_EI extern __inline__ # endif # else /* With other compilers, assume the ISO C99 meaning of 'inline', if the compiler supports 'inline' at all. */ # define ARGP_EI inline # endif # 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 # endif #endif /* Use extern inlines. */ #ifdef __cplusplus } #endif #endif /* argp.h */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/argv-iter.c��������������������������������������������������������������0000664�0000000�0000000�00000004723�11671051007�0017312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over arguments from argv or --files0-from=FILE Copyright (C) 2008-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 <http://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-20111211-stable/lib/argv-iter.h��������������������������������������������������������������0000664�0000000�0000000�00000002565�11671051007�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over arguments from argv or --files0-from=FILE Copyright (C) 2008-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 <http://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 }; struct argv_iterator *argv_iter_init_argv (char **argv) _GL_ARG_NONNULL ((1)); struct argv_iterator *argv_iter_init_stream (FILE *fp) _GL_ARG_NONNULL ((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)); void argv_iter_free (struct argv_iterator *) _GL_ARG_NONNULL ((1)); �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/argz.c�������������������������������������������������������������������0000664�0000000�0000000�00000023621�11671051007�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions for dealing with '\0' separated arg vectors. Copyright (C) 1995-1998, 2000-2002, 2006, 2008-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/argz.in.h����������������������������������������������������������������0000664�0000000�0000000�00000013105�11671051007�0016761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Routines for dealing with '\0' separated arg vectors. Copyright (C) 1995-2000, 2004, 2007, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _ARGZ_H #define _ARGZ_H 1 #define __need_error_t #include <errno.h> #include <string.h> /* Need size_t, and strchr is called below. */ #ifndef const # define const const #endif #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); #ifdef __USE_EXTERN_INLINES __extern_inline char * __NTH (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 ? (char *) NULL : (char *) __entry; } else return __argz_len > 0 ? (char *) __argz : 0; } __extern_inline char * __NTH (argz_next (const char *__argz, size_t __argz_len, const char *__entry)) { return argz_next (__argz, __argz_len, __entry); } #endif /* Use extern inlines. */ #endif /* argz.h */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/arpa_inet.in.h�����������������������������������������������������������0000664�0000000�0000000�00000011544�11671051007�0017765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <arpa/inet.h>. Copyright (C) 2005-2006, 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 /* 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:2001 specification <http://www.opengroup.org/susv3xsh/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 _GL_CXXALIASWARN (inet_ntop); #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 _GL_CXXALIASWARN (inet_pton); #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-20111211-stable/lib/array-mergesort.h��������������������������������������������������������0000664�0000000�0000000�00000017151�11671051007�0020541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stable-sorting of an array using mergesort. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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. 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. */ STATIC 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-20111211-stable/lib/asinf.c������������������������������������������������������������������0000664�0000000�0000000�00000001523�11671051007�0016505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inverse sine function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float asinf (float x) { return (float) asin ((double) x); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/asinl.c������������������������������������������������������������������0000664�0000000�0000000�00000015524�11671051007�0016521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ==================================================== * 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 /* 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-20111211-stable/lib/asnprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000002157�11671051007�0017415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/asprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000002212�11671051007�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/assert.in.h��������������������������������������������������������������0000664�0000000�0000000�00000002067�11671051007�0017324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <assert.h> 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ /* 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-20111211-stable/lib/astrxfrm.c���������������������������������������������������������������0000664�0000000�0000000�00000011306�11671051007�0017253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent string transformation for comparison. Copyright (C) 2010-2011 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 <http://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: { int saved_errno = errno; if (result != resultbuf && result != tmpbuf) free (result); errno = saved_errno; return NULL; } out_of_memory: errno = ENOMEM; return NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/astrxfrm.h���������������������������������������������������������������0000664�0000000�0000000�00000003252�11671051007�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent string transformation for comparison. Copyright (C) 2010-2011 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 <http://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 *resultbuf, size_t *lengthp); #ifdef __cplusplus } #endif #endif /* ASTRXFRM_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/at-func.c����������������������������������������������������������������0000664�0000000�0000000�00000010132�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define at-style functions like fstatat, unlinkat, fchownat, etc. Copyright (C) 2006, 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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include "dosname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ #include "openat.h" #include "openat-priv.h" #include "save-cwd.h" #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 inlude 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) { /* 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; VALIDATE_FLAG (flag); if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) return CALL_FUNC (file); { 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; } #undef CALL_FUNC #undef FUNC_RESULT #undef FUNC_FAIL ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/at-func2.c���������������������������������������������������������������0000664�0000000�0000000�00000021437�11671051007�0017032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define 2-FD at-style functions like linkat or renameat. Copyright (C) 2006, 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 <http://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 "dosname.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. */ } /* 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-20111211-stable/lib/atan2f.c�����������������������������������������������������������������0000664�0000000�0000000�00000001562�11671051007�0016563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Angle of a point in the plane. 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 <http://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-20111211-stable/lib/atanf.c������������������������������������������������������������������0000664�0000000�0000000�00000001526�11671051007�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inverse tangent function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float atanf (float x) { return (float) atan ((double) x); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/atanl.c������������������������������������������������������������������0000664�0000000�0000000�00000017352�11671051007�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright 2001 by Stephen L. Moshier <moshier@na-net.ornl.gov> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 /* 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-20111211-stable/lib/atexit.c�����������������������������������������������������������������0000664�0000000�0000000�00000000502�11671051007�0016677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */ /* This function is in the public domain. --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-20111211-stable/lib/atoll.c������������������������������������������������������������������0000664�0000000�0000000�00000001766�11671051007�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1997-1998, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/backupfile.c�������������������������������������������������������������0000664�0000000�0000000�00000024607�11671051007�0017522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* backupfile.c -- make Emacs style backup file names Copyright (C) 1990-2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and David MacKenzie. Some algorithms adapted from GNU Emacs. */ #include <config.h> #include "backupfile.h" #include "argmatch.h" #include "dirname.h" #include "xalloc.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <limits.h> #include <unistd.h> #include "dirent--.h" #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name) #endif #if D_INO_IN_DIRENT # define REAL_DIR_ENTRY(dp) ((dp)->d_ino != 0) #else # define REAL_DIR_ENTRY(dp) 1 #endif #if ! (HAVE_PATHCONF && defined _PC_NAME_MAX) # define pathconf(file, option) (errno = -1) #endif #ifndef _POSIX_NAME_MAX # define _POSIX_NAME_MAX 14 #endif #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #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 = "~"; /* 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. */ static void check_extension (char *file, size_t filelen, char e) { 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. */ long name_max; /* 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); if (0 <= name_max || errno == 0) { long size = baselen_max = name_max; if (name_max != size) baselen_max = SIZE_MAX; } memcpy (base, tmp, sizeof "."); } 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 }; /* *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. 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. */ static enum numbered_backup_result numbered_backup (char **buffer, size_t buffer_size, size_t filelen) { enum numbered_backup_result result = BACKUP_IS_NEW; DIR *dirp; struct dirent *dp; char *buf = *buffer; size_t versionlenmax = 1; char *base = last_component (buf); size_t base_offset = base - buf; size_t baselen = base_len (base); /* 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 = opendir (buf); memcpy (base, tmp, sizeof "."); strcpy (base + baselen, ".~1~"); if (!dirp) return result; while ((dp = readdir (dirp)) != NULL) { char const *p; char *q; bool all_9s; size_t versionlen; size_t new_buflen; if (! REAL_DIR_ENTRY (dp) || _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 directory 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); new_buflen = filelen + 2 + versionlenmax + 1; if (buffer_size <= new_buflen) { buf = xnrealloc (buf, 2, new_buflen); buffer_size = new_buflen * 2; } 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; } closedir (dirp); *buffer = buf; return result; } /* Return the name of the new backup file for the existing file FILE, allocated with malloc. Report an error and fail if out of memory. Do not call this function if backup_type == no_backups. */ char * find_backup_file_name (char const *file, enum backup_type backup_type) { size_t filelen = strlen (file); char *s; size_t ssize; bool simple = true; /* 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 = filelen + backup_suffix_size_guess + 1; s = xmalloc (ssize); memcpy (s, file, filelen + 1); if (backup_type != simple_backups) switch (numbered_backup (&s, ssize, filelen)) { case BACKUP_IS_SAME_LENGTH: return s; case BACKUP_IS_LONGER: simple = false; break; case BACKUP_IS_NEW: simple = (backup_type == numbered_existing_backups); break; } if (simple) memcpy (s + filelen, simple_backup_suffix, simple_backup_suffix_size); check_extension (s, filelen, '~'); return s; } 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-20111211-stable/lib/backupfile.h�������������������������������������������������������������0000664�0000000�0000000�00000003255�11671051007�0017523�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-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 <http://www.gnu.org/licenses/>. */ #ifndef BACKUPFILE_H_ # define BACKUPFILE_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; char *find_backup_file_name (char const *, enum backup_type); enum backup_type get_version (char const *context, char const *arg); enum backup_type xget_version (char const *context, char const *arg); void addext (char *, char const *, int); # ifdef __cplusplus } # endif #endif /* ! BACKUPFILE_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/base32.c�����������������������������������������������������������������0000664�0000000�0000000�00000044777�11671051007�0016506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base32.c -- Encode binary data using printable characters. Copyright (C) 1999-2001, 2004-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Adapted from Simon Josefsson's base64 code by Gijs van Tulder. * * See also RFC 4648 <http://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 inline 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 inline 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 inline 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-20111211-stable/lib/base32.h�����������������������������������������������������������������0000664�0000000�0000000�00000004263�11671051007�0016475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base32.h -- Encode binary data using printable characters. Copyright (C) 2004-2006, 2009-2011 Free Software Foundation, Inc. Adapted from Simon Josefsson's base64 code 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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); 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-20111211-stable/lib/base64.c�����������������������������������������������������������������0000664�0000000�0000000�00000045636�11671051007�0016506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base64.c -- Encode binary data using printable characters. Copyright (C) 1999-2001, 2004-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 <http://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 inline unsigned char to_uchar (char ch) { return ch; } /* 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) { static const char b64str[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; while (inlen && outlen) { *out++ = b64str[(to_uchar (in[0]) >> 2) & 0x3f]; if (!--outlen) break; *out++ = b64str[((to_uchar (in[0]) << 4) + (--inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f]; if (!--outlen) break; *out++ = (inlen ? b64str[((to_uchar (in[1]) << 2) + (--inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '='); if (!--outlen) break; *out++ = inlen ? b64str[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 inline 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 inline 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-20111211-stable/lib/base64.h�����������������������������������������������������������������0000664�0000000�0000000�00000004244�11671051007�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base64.h -- Encode binary data using printable characters. Copyright (C) 2004-2006, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef BASE64_H # define BASE64_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 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) #endif /* BASE64_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/basename-lgpl.c����������������������������������������������������������0000664�0000000�0000000�00000004061�11671051007�0020114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "dirname.h" #include <string.h> /* Return the address of the last file name component of NAME. If NAME has no relative file name components because it is a file system root, return the empty string. */ char * last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); char const *p; bool saw_slash = false; while (ISSLASH (*base)) base++; for (p = base; *p; p++) { if (ISSLASH (*p)) saw_slash = true; else if (saw_slash) { base = p; saw_slash = false; } } return (char *) base; } /* Return the length of the basename NAME. Typically NAME is the value returned by base_name or last_component. Act like strlen (NAME), except omit all trailing slashes. */ 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-20111211-stable/lib/basename.c���������������������������������������������������������������0000664�0000000�0000000�00000003345�11671051007�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "dirname.h" #include <string.h> #include "xalloc.h" #include "xstrndup.h" char * base_name (char const *name) { char const *base = last_component (name); size_t length; /* If there is no last component, then name is a file system root or the empty string. */ if (! *base) return xstrndup (name, base_len (name)); /* Collapse a sequence of trailing slashes into one. */ length = base_len (base); if (ISSLASH (base[length])) 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. */ if (FILE_SYSTEM_PREFIX_LEN (base)) { char *p = xmalloc (length + 3); p[0] = '.'; p[1] = '/'; memcpy (p + 2, base, length); p[length + 2] = '\0'; return p; } /* Finally, copy the basename. */ return xstrndup (base, length); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/bcopy.c������������������������������������������������������������������0000664�0000000�0000000�00000001200�11671051007�0016511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* bcopy.c -- copy memory. Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate. In the public domain. By David MacKenzie <djm@gnu.ai.mit.edu>. */ #include <config.h> #include <stddef.h> 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-20111211-stable/lib/binary-io.h��������������������������������������������������������������0000664�0000000�0000000�00000003563�11671051007�0017311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O. Copyright (C) 2001, 2003, 2005, 2008-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 <http://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> /* SET_BINARY (fd); changes the file descriptor fd to perform binary I/O. */ #if O_BINARY # if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ # include <io.h> /* declares setmode() */ # else # define setmode _setmode # undef fileno # define fileno _fileno # endif # ifdef __DJGPP__ # include <unistd.h> /* declares isatty() */ /* Avoid putting stdin/stdout in binary mode if it is connected to the console, because that would make it impossible for the user to interrupt the program through Ctrl-C or Ctrl-Break. */ # define SET_BINARY(fd) ((void) (!isatty (fd) ? (setmode (fd, O_BINARY), 0) : 0)) # else # define SET_BINARY(fd) ((void) setmode (fd, O_BINARY)) # endif #else /* On reasonable systems, binary I/O is the default. */ # define SET_BINARY(fd) /* do nothing */ ((void) 0) #endif #endif /* _BINARY_H */ ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/bind.c�������������������������������������������������������������������0000664�0000000�0000000�00000002401�11671051007�0016315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* bind.c --- wrappers for Windows bind function Copyright (C) 2008-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 <http://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-20111211-stable/lib/bitrotate.h��������������������������������������������������������������0000664�0000000�0000000�00000010231�11671051007�0017403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* bitrotate.h - Rotate bits in integers Copyright (C) 2008-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 <http://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> #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. */ static 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.*/ static 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. */ static 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.*/ static 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. */ static 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. */ static 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. */ static inline uint16_t rotl16 (uint16_t x, int n) { return ((x << n) | (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. */ static inline uint16_t rotr16 (uint16_t x, int n) { return ((x >> n) | (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. */ static inline uint8_t rotl8 (uint8_t x, int n) { return ((x << n) | (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. */ static inline uint8_t rotr8 (uint8_t x, int n) { return ((x >> n) | (x << (8 - n))) & UINT8_MAX; } #endif /* _GL_BITROTATE_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/btowc.c������������������������������������������������������������������0000664�0000000�0000000�00000002107�11671051007�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert unibyte character to wide character. Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/byteswap.in.h������������������������������������������������������������0000664�0000000�0000000�00000003723�11671051007�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* byteswap.h - Byte swapping Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. Written by Oskar Liljeblad <oskar@osk.mine.nu>, 2005. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/c-ctype.c����������������������������������������������������������������0000664�0000000�0000000�00000025447�11671051007�0016764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. Copyright 2000-2003, 2006, 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 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. */ #include <config.h> /* Specification. */ #define NO_C_CTYPE_MACROS #include "c-ctype.h" /* The function isascii is not locale dependent. Its use in EBCDIC is questionable. */ bool c_isascii (int c) { return (c >= 0x00 && c <= 0x7f); } bool c_isalnum (int c) { #if C_CTYPE_CONSECUTIVE_DIGITS \ && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE #if C_CTYPE_ASCII return ((c >= '0' && c <= '9') || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')); #else return ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); #endif #else 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': return 1; default: return 0; } #endif } bool c_isalpha (int c) { #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE #if C_CTYPE_ASCII return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'); #else return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); #endif #else 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': return 1; default: return 0; } #endif } bool c_isblank (int c) { return (c == ' ' || c == '\t'); } bool c_iscntrl (int c) { #if C_CTYPE_ASCII return ((c & ~0x1f) == 0 || c == 0x7f); #else switch (c) { case ' ': 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 '@': 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 '`': 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 0; default: return 1; } #endif } bool c_isdigit (int c) { #if C_CTYPE_CONSECUTIVE_DIGITS return (c >= '0' && c <= '9'); #else switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return 1; default: return 0; } #endif } bool c_islower (int c) { #if C_CTYPE_CONSECUTIVE_LOWERCASE return (c >= 'a' && c <= 'z'); #else 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': return 1; default: return 0; } #endif } bool c_isgraph (int c) { #if C_CTYPE_ASCII return (c >= '!' && c <= '~'); #else switch (c) { 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 '@': 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 '`': 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 } bool c_isprint (int c) { #if C_CTYPE_ASCII return (c >= ' ' && c <= '~'); #else switch (c) { case ' ': 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 '@': 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 '`': 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 } bool c_ispunct (int c) { #if C_CTYPE_ASCII return ((c >= '!' && c <= '~') && !((c >= '0' && c <= '9') || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'))); #else 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 '~': return 1; default: return 0; } #endif } bool c_isspace (int c) { return (c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'); } bool c_isupper (int c) { #if C_CTYPE_CONSECUTIVE_UPPERCASE return (c >= 'A' && c <= 'Z'); #else 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': return 1; default: return 0; } #endif } bool c_isxdigit (int c) { #if C_CTYPE_CONSECUTIVE_DIGITS \ && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE #if C_CTYPE_ASCII return ((c >= '0' && c <= '9') || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F')); #else return ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')); #endif #else 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': return 1; default: return 0; } #endif } int c_tolower (int c) { #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c); #else switch (c) { case 'A': return 'a'; case 'B': return 'b'; case 'C': return 'c'; case 'D': return 'd'; case 'E': return 'e'; case 'F': return 'f'; case 'G': return 'g'; case 'H': return 'h'; case 'I': return 'i'; case 'J': return 'j'; case 'K': return 'k'; case 'L': return 'l'; case 'M': return 'm'; case 'N': return 'n'; case 'O': return 'o'; case 'P': return 'p'; case 'Q': return 'q'; case 'R': return 'r'; case 'S': return 's'; case 'T': return 't'; case 'U': return 'u'; case 'V': return 'v'; case 'W': return 'w'; case 'X': return 'x'; case 'Y': return 'y'; case 'Z': return 'z'; default: return c; } #endif } int c_toupper (int c) { #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c); #else switch (c) { case 'a': return 'A'; case 'b': return 'B'; case 'c': return 'C'; case 'd': return 'D'; case 'e': return 'E'; case 'f': return 'F'; case 'g': return 'G'; case 'h': return 'H'; case 'i': return 'I'; case 'j': return 'J'; case 'k': return 'K'; case 'l': return 'L'; case 'm': return 'M'; case 'n': return 'N'; case 'o': return 'O'; case 'p': return 'P'; case 'q': return 'Q'; case 'r': return 'R'; case 's': return 'S'; case 't': return 'T'; case 'u': return 'U'; case 'v': return 'V'; case 'w': return 'W'; case 'x': return 'X'; case 'y': return 'Y'; case 'z': return 'Z'; default: return c; } #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/c-ctype.h����������������������������������������������������������������0000664�0000000�0000000�00000022134�11671051007�0016757�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-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 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. */ #ifndef C_CTYPE_H #define C_CTYPE_H #include <stdbool.h> #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. */ /* Check whether the ASCII optimizations apply. */ /* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that '0', '1', ..., '9' have consecutive integer values. */ #define C_CTYPE_CONSECUTIVE_DIGITS 1 #if ('A' <= 'Z') \ && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \ && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \ && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \ && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \ && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \ && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \ && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \ && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \ && ('Y' + 1 == 'Z') #define C_CTYPE_CONSECUTIVE_UPPERCASE 1 #endif #if ('a' <= 'z') \ && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \ && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \ && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \ && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \ && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \ && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \ && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \ && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \ && ('y' + 1 == 'z') #define C_CTYPE_CONSECUTIVE_LOWERCASE 1 #endif #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 #endif /* Function declarations. */ /* 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)) ... */ extern bool c_isascii (int c) _GL_ATTRIBUTE_CONST; /* not locale dependent */ extern bool c_isalnum (int c) _GL_ATTRIBUTE_CONST; extern bool c_isalpha (int c) _GL_ATTRIBUTE_CONST; extern bool c_isblank (int c) _GL_ATTRIBUTE_CONST; extern bool c_iscntrl (int c) _GL_ATTRIBUTE_CONST; extern bool c_isdigit (int c) _GL_ATTRIBUTE_CONST; extern bool c_islower (int c) _GL_ATTRIBUTE_CONST; extern bool c_isgraph (int c) _GL_ATTRIBUTE_CONST; extern bool c_isprint (int c) _GL_ATTRIBUTE_CONST; extern bool c_ispunct (int c) _GL_ATTRIBUTE_CONST; extern bool c_isspace (int c) _GL_ATTRIBUTE_CONST; extern bool c_isupper (int c) _GL_ATTRIBUTE_CONST; extern bool c_isxdigit (int c) _GL_ATTRIBUTE_CONST; extern int c_tolower (int c) _GL_ATTRIBUTE_CONST; extern int c_toupper (int c) _GL_ATTRIBUTE_CONST; #if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS /* ASCII optimizations. */ #undef c_isascii #define c_isascii(c) \ ({ int __c = (c); \ (__c >= 0x00 && __c <= 0x7f); \ }) #if C_CTYPE_CONSECUTIVE_DIGITS \ && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE #if C_CTYPE_ASCII #undef c_isalnum #define c_isalnum(c) \ ({ int __c = (c); \ ((__c >= '0' && __c <= '9') \ || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \ }) #else #undef c_isalnum #define c_isalnum(c) \ ({ int __c = (c); \ ((__c >= '0' && __c <= '9') \ || (__c >= 'A' && __c <= 'Z') \ || (__c >= 'a' && __c <= 'z')); \ }) #endif #endif #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE #if C_CTYPE_ASCII #undef c_isalpha #define c_isalpha(c) \ ({ int __c = (c); \ ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \ }) #else #undef c_isalpha #define c_isalpha(c) \ ({ int __c = (c); \ ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \ }) #endif #endif #undef c_isblank #define c_isblank(c) \ ({ int __c = (c); \ (__c == ' ' || __c == '\t'); \ }) #if C_CTYPE_ASCII #undef c_iscntrl #define c_iscntrl(c) \ ({ int __c = (c); \ ((__c & ~0x1f) == 0 || __c == 0x7f); \ }) #endif #if C_CTYPE_CONSECUTIVE_DIGITS #undef c_isdigit #define c_isdigit(c) \ ({ int __c = (c); \ (__c >= '0' && __c <= '9'); \ }) #endif #if C_CTYPE_CONSECUTIVE_LOWERCASE #undef c_islower #define c_islower(c) \ ({ int __c = (c); \ (__c >= 'a' && __c <= 'z'); \ }) #endif #if C_CTYPE_ASCII #undef c_isgraph #define c_isgraph(c) \ ({ int __c = (c); \ (__c >= '!' && __c <= '~'); \ }) #endif #if C_CTYPE_ASCII #undef c_isprint #define c_isprint(c) \ ({ int __c = (c); \ (__c >= ' ' && __c <= '~'); \ }) #endif #if C_CTYPE_ASCII #undef c_ispunct #define c_ispunct(c) \ ({ int _c = (c); \ (c_isgraph (_c) && ! c_isalnum (_c)); \ }) #endif #undef c_isspace #define c_isspace(c) \ ({ int __c = (c); \ (__c == ' ' || __c == '\t' \ || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \ }) #if C_CTYPE_CONSECUTIVE_UPPERCASE #undef c_isupper #define c_isupper(c) \ ({ int __c = (c); \ (__c >= 'A' && __c <= 'Z'); \ }) #endif #if C_CTYPE_CONSECUTIVE_DIGITS \ && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE #if C_CTYPE_ASCII #undef c_isxdigit #define c_isxdigit(c) \ ({ int __c = (c); \ ((__c >= '0' && __c <= '9') \ || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \ }) #else #undef c_isxdigit #define c_isxdigit(c) \ ({ int __c = (c); \ ((__c >= '0' && __c <= '9') \ || (__c >= 'A' && __c <= 'F') \ || (__c >= 'a' && __c <= 'f')); \ }) #endif #endif #if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE #undef c_tolower #define c_tolower(c) \ ({ int __c = (c); \ (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \ }) #undef c_toupper #define c_toupper(c) \ ({ int __c = (c); \ (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \ }) #endif #endif /* optimizing for speed */ #ifdef __cplusplus } #endif #endif /* C_CTYPE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/c-stack.c����������������������������������������������������������������0000664�0000000�0000000�00000023345�11671051007�0016740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stack overflow handling. Copyright (C) 2002, 2004, 2006, 2008-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 <http://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> #ifndef __attribute__ # if __GNUC__ < 3 # define __attribute__(x) # endif #endif #include "gettext.h" #define _(msgid) gettext (msgid) #include <errno.h> #include <signal.h> #if ! HAVE_STACK_T && ! defined stack_t typedef struct sigaltstack stack_t; #endif #ifndef SIGSTKSZ # define SIGSTKSZ 16384 #elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384 /* libsigsegv 2.6 through 2.8 have a bug where some architectures use more than the Linux default of an 8k alternate stack when deciding if a fault was caused by stack overflow. */ # undef SIGSTKSZ # define SIGSTKSZ 16384 #endif #include <stdlib.h> #include <string.h> /* Posix 2001 declares ucontext_t in <ucontext.h>, Posix 200x in <signal.h>. */ #if HAVE_UCONTEXT_H # include <ucontext.h> #endif #include <unistd.h> #if HAVE_LIBSIGSEGV # include <sigsegv.h> #endif #include "c-stack.h" #include "exitfail.h" #include "ignore-value.h" #if defined SA_ONSTACK && defined SA_SIGINFO # define SIGINFO_WORKS 1 #else # define SIGINFO_WORKS 0 # ifndef SA_ONSTACK # define SA_ONSTACK 0 # endif #endif extern char *program_name; /* The user-specified action to take when a SEGV-related program error or stack overflow occurs. */ static 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 _Noreturn void die (int signo) { char const *message; #if !SIGINFO_WORKS && !HAVE_LIBSIGSEGV /* We can't easily determine whether it is a stack overflow; so assume that the rest of our program is perfect (!) and that this segmentation violation is a stack overflow. */ signo = 0; #endif /* !SIGINFO_WORKS && !HAVE_LIBSIGSEGV */ segv_action (signo); message = signo ? program_error_message : stack_overflow_message; ignore_value (write (STDERR_FILENO, program_name, strlen (program_name))); ignore_value (write (STDERR_FILENO, ": ", 2)); ignore_value (write (STDERR_FILENO, message, strlen (message))); ignore_value (write (STDERR_FILENO, "\n", 1)); if (! signo) _exit (exit_failure); raise (signo); abort (); } #if (HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK \ && HAVE_STACK_OVERFLOW_HANDLING) || HAVE_LIBSIGSEGV /* Storage for the alternate signal stack. */ static union { char buffer[SIGSTKSZ]; /* These other members are for proper alignment. There's no standard way to guarantee stack alignment, but this seems enough in practice. */ long double ld; long l; void *p; } alternate_signal_stack; static void null_action (int signo __attribute__ ((unused))) { } #endif /* SIGALTSTACK || LIBSIGSEGV */ /* Only use libsigsegv if we need it; platforms like Solaris can detect stack overflow without the overhead of an external library. */ #if HAVE_LIBSIGSEGV && ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC /* 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 int segv_handler (void *address __attribute__ ((unused)), int serious) { # if DEBUG { char buf[1024]; sprintf (buf, "segv_handler serious=%d\n", serious); write (STDERR_FILENO, buf, strlen (buf)); } # 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 _Noreturn void overflow_handler (int emergency, stackoverflow_context_t context __attribute__ ((unused))) { # if DEBUG { char buf[1024]; sprintf (buf, "overflow_handler emergency=%d segv_handler_missing=%d\n", emergency, segv_handler_missing); write (STDERR_FILENO, buf, strlen (buf)); } # endif die ((!emergency || segv_handler_missing) ? 0 : SIGSEGV); } int c_stack_action (void (*action) (int)) { segv_action = action ? action : null_action; program_error_message = _("program error"); stack_overflow_message = _("stack overflow"); /* Always install the overflow handler. */ if (stackoverflow_install_handler (overflow_handler, alternate_signal_stack.buffer, sizeof alternate_signal_stack.buffer)) { 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; } #elif HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK && HAVE_STACK_OVERFLOW_HANDLING # if SIGINFO_WORKS /* Handle a segmentation violation and exit. This function is async-signal-safe. */ static _Noreturn void segv_handler (int signo, siginfo_t *info, void *context __attribute__ ((unused))) { /* Clear SIGNO if it seems to have been a stack overflow. */ # if ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC /* We can't easily determine whether it is a stack overflow; so assume that the rest of our program is perfect (!) and that this segmentation violation is a stack overflow. Note that although both Linux and Solaris provide sigaltstack, SA_ONSTACK, and SA_SIGINFO, currently only Solaris satisfies the XSI heueristic. This is because Solaris populates uc_stack with the details of the interrupted stack, while Linux populates it with the details of the current stack. */ signo = 0; # else if (0 < info->si_code) { /* If the faulting address is within the stack, or within one page of the stack, assume that it is a stack overflow. */ ucontext_t const *user_context = context; char const *stack_base = user_context->uc_stack.ss_sp; size_t stack_size = user_context->uc_stack.ss_size; char const *faulting_address = info->si_addr; size_t page_size = sysconf (_SC_PAGESIZE); size_t s = faulting_address - stack_base + page_size; if (s < stack_size + 2 * page_size) signo = 0; # if DEBUG { char buf[1024]; sprintf (buf, "segv_handler fault=%p base=%p size=%lx page=%lx signo=%d\n", faulting_address, stack_base, (unsigned long) stack_size, (unsigned long) page_size, signo); write (STDERR_FILENO, buf, strlen (buf)); } # endif } # endif die (signo); } # endif int c_stack_action (void (*action) (int)) { int r; stack_t st; struct sigaction act; st.ss_flags = 0; # if SIGALTSTACK_SS_REVERSED /* Irix mistakenly treats ss_sp as the upper bound, rather than lower bound, of the alternate stack. */ st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ - sizeof (void *); st.ss_size = sizeof alternate_signal_stack.buffer - sizeof (void *); # else st.ss_sp = alternate_signal_stack.buffer; st.ss_size = sizeof alternate_signal_stack.buffer; # endif r = sigaltstack (&st, NULL); if (r != 0) return r; segv_action = action ? action : null_action; program_error_message = _("program error"); stack_overflow_message = _("stack overflow"); sigemptyset (&act.sa_mask); # if SIGINFO_WORKS /* POSIX 1003.1-2001 says SA_RESETHAND implies SA_NODEFER, but this is not true on Solaris 8 at least. It doesn't hurt to use SA_NODEFER here, so leave it in. */ act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; act.sa_sigaction = segv_handler; # else act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND; act.sa_handler = die; # endif # if FAULT_YIELDS_SIGBUS if (sigaction (SIGBUS, &act, NULL) < 0) return -1; # endif return sigaction (SIGSEGV, &act, NULL); } #else /* ! ((HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK && HAVE_STACK_OVERFLOW_HANDLING) || HAVE_LIBSIGSEGV) */ int c_stack_action (void (*action) (int) __attribute__ ((unused))) { errno = ENOTSUP; return -1; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/c-stack.h����������������������������������������������������������������0000664�0000000�0000000�00000003773�11671051007�0016750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stack overflow handling. Copyright (C) 2002, 2004, 2008-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 <http://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. ACTION must be async-signal-safe. ACTION together with its callees must not require more than SIGSTKSZ bytes of stack space. Also, 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 (void (* /*action*/) (int)); �����gnulib-20111211-stable/lib/c-strcase.h��������������������������������������������������������������0000664�0000000�0000000�00000004125�11671051007�0017277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison functions in C locale. Copyright (C) 1995-1996, 2001, 2003, 2005, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/c-strcasecmp.c�����������������������������������������������������������0000664�0000000�0000000�00000003155�11671051007�0017774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strcasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/c-strcaseeq.h������������������������������������������������������������0000664�0000000�0000000�00000011021�11671051007�0017616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimized case-insensitive string comparison in C locale. Copyright (C) 2001-2002, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 (__OPTIMIZE__) /* Case insensitive comparison of ASCII characters. */ # if C_CTYPE_ASCII # define CASEEQ(other,upper) \ (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper)) # elif C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE # define CASEEQ(other,upper) \ (c_isupper (upper) ? (other) == (upper) || (other) == (upper) - 'A' + 'a' : (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-20111211-stable/lib/c-strcasestr.c�����������������������������������������������������������0000664�0000000�0000000�00000005663�11671051007�0020033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strcasestr.c -- case insensitive substring search in C locale Copyright (C) 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/c-strcasestr.h�����������������������������������������������������������0000664�0000000�0000000�00000002070�11671051007�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive searching in a string in C locale. Copyright (C) 2005, 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 <http://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-20111211-stable/lib/c-strncasecmp.c����������������������������������������������������������0000664�0000000�0000000�00000003217�11671051007�0020151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strncasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/c-strstr.c���������������������������������������������������������������0000664�0000000�0000000�00000002237�11671051007�0017171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strstr.c -- substring search in C locale Copyright (C) 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005, 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 <http://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-20111211-stable/lib/c-strstr.h���������������������������������������������������������������0000664�0000000�0000000�00000003503�11671051007�0017173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2001-2003, 2006, 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 <http://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 restricion 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-20111211-stable/lib/c-strtod.c���������������������������������������������������������������0000664�0000000�0000000�00000005114�11671051007�0017144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to double, using the C locale. Copyright (C) 2003-2004, 2006, 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 <http://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 #else # define C_STRTOD c_strtod # define DOUBLE double # define STRTOD_L strtod_l #endif /* c_strtold falls back on strtod if strtold doesn't conform to C99. */ #if LONG && HAVE_C99_STRTOLD # define STRTOD strtold #else # define STRTOD strtod #endif #if defined LC_ALL_MASK && (LONG ? HAVE_STRTOLD_L : HAVE_STRTOD_L) /* 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 inline 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_STRTOLD_L : HAVE_STRTOD_L) locale_t locale = c_locale (); if (!locale) { if (endptr) *endptr = (char *) nptr; return 0; /* errno is set here */ } r = STRTOD_L (nptr, endptr, locale); #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-20111211-stable/lib/c-strtod.h���������������������������������������������������������������0000664�0000000�0000000�00000003507�11671051007�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to double, using the C locale. Copyright (C) 2003-2004, 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 <http://www.gnu.org/licenses/>. */ /* 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 parseable 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); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/c-strtold.c��������������������������������������������������������������0000664�0000000�0000000�00000000045�11671051007�0017316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define LONG 1 #include "c-strtod.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/calloc.c�����������������������������������������������������������������0000664�0000000�0000000�00000003633�11671051007�0016646�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-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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> /* Only the AC_FUNC_CALLOC macro defines 'calloc' already in config.h. */ #ifdef calloc # define NEED_CALLOC_GNU 1 # undef calloc /* Whereas the gnulib module 'calloc-gnu' defines HAVE_CALLOC_GNU. */ #elif GNULIB_CALLOC_GNU && !HAVE_CALLOC_GNU # define NEED_CALLOC_GNU 1 #endif /* Specification. */ #include <stdlib.h> #include <errno.h> /* Call the system's calloc below. */ #undef calloc /* Allocate and zero-fill an NxS-byte block of memory from the heap. If N or S is zero, allocate and zero-fill a 1-byte block. */ void * rpl_calloc (size_t n, size_t s) { void *result; #if NEED_CALLOC_GNU if (n == 0 || s == 0) { n = 1; s = 1; } else { /* Defend against buggy calloc implementations that mishandle size_t overflow. */ size_t bytes = n * s; if (bytes / s != n) { errno = ENOMEM; return NULL; } } #endif result = calloc (n, s); #if !HAVE_CALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/canon-host.c�������������������������������������������������������������0000664�0000000�0000000�00000006272�11671051007�0017464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Host name canonicalization Copyright (C) 2005-2011 Free Software Foundation, Inc. Written by Derek Price <derek@ximbiot.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 <http://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 <http://www.opengroup.org/susv3xsh/getaddrinfo.html">, RFC 1034 <http://www.faqs.org/rfcs/rfc1034.html>, & RFC 2181 <http://www.faqs.org/rfcs/rfc2181.html> 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) { /* http://lists.gnu.org/archive/html/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-20111211-stable/lib/canon-host.h�������������������������������������������������������������0000664�0000000�0000000�00000002004�11671051007�0017456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Host name canonicalization Copyright (C) 2005, 2009-2011 Free Software Foundation, Inc. Written by Derek Price <derek@ximbiot.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 <http://www.gnu.org/licenses/>. */ #ifndef CANON_HOST_H # define CANON_HOST_H 1 char *canon_host (char const *host); char *canon_host_r (char const *host, int *cherror); const char *ch_strerror (void); # define ch_strerror_r(cherror) gai_strerror (cherror); #endif /* !CANON_HOST_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/canonicalize-lgpl.c������������������������������������������������������0000664�0000000�0000000�00000024301�11671051007�0020777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _LIBC # define _GL_USE_STDLIB_ALLOC 1 # include <config.h> #endif #if !HAVE_CANONICALIZE_FILE_NAME || !FUNC_REALPATH_WORKS || defined _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ #define _GL_ARG_NONNULL(params) /* Specification. */ #include <stdlib.h> #include <alloca.h> #include <string.h> #include <unistd.h> #include <limits.h> #if HAVE_SYS_PARAM_H || defined _LIBC # include <sys/param.h> #endif #include <sys/stat.h> #include <errno.h> #include <stddef.h> #ifdef _LIBC # include <shlib-compat.h> #else # define SHLIB_COMPAT(lib, introduced, obsoleted) 0 # define versioned_symbol(lib, local, symbol, version) extern int dummy # define compat_symbol(lib, local, symbol, version) # define weak_alias(local, symbol) # define __canonicalize_file_name canonicalize_file_name # define __realpath realpath # include "pathmax.h" # include "malloca.h" # if 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 # ifdef VMS /* We want the directory in Unix syntax, not in VMS syntax. */ # define __getcwd(buf, max) getcwd (buf, max, 0) # else # define __getcwd getcwd # endif # else # define __getcwd(buf, max) getwd (buf) # endif # define __readlink readlink # define __set_errno(e) errno = (e) # ifndef MAXSYMLINKS # ifdef SYMLOOP_MAX # define MAXSYMLINKS SYMLOOP_MAX # else # define MAXSYMLINKS 20 # endif # endif #endif #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 #endif #if !FUNC_REALPATH_WORKS || defined _LIBC /* Return the canonical absolute name of file NAME. A canonical name does not contain any `.', `..' components nor any repeated path separators ('/') or symlinks. All path 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 path of the first component that cannot be resolved. If the path can be resolved, RESOLVED holds the same value as the value returned. */ char * __realpath (const char *name, char *resolved) { char *rpath, *dest, *extra_buf = NULL; const char *start, *end, *rpath_limit; long int path_max; 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; } #ifdef PATH_MAX path_max = PATH_MAX; #else path_max = pathconf (name, _PC_PATH_MAX); if (path_max <= 0) path_max = 8192; #endif if (resolved == NULL) { rpath = malloc (path_max); if (rpath == NULL) { /* It's easier to set errno to ENOMEM than to rely on the 'malloc-posix' gnulib module. */ errno = ENOMEM; return NULL; } } else rpath = resolved; rpath_limit = rpath + path_max; if (name[0] != '/') { if (!__getcwd (rpath, path_max)) { rpath[0] = '\0'; goto error; } dest = strchr (rpath, '\0'); } else { rpath[0] = '/'; dest = rpath + 1; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && name[1] == '/') *dest++ = '/'; } for (start = end = name; *start; start = end) { #ifdef _LIBC struct stat64 st; #else struct stat st; #endif int n; /* Skip sequence of multiple path-separators. */ while (*start == '/') ++start; /* Find end of path component. */ for (end = start; *end && *end != '/'; ++end) /* Nothing. */; if (end - start == 0) break; else if (end - start == 1 && start[0] == '.') /* nothing */; else if (end - start == 2 && start[0] == '.' && start[1] == '.') { /* Back up to previous component, ignore if at root already. */ if (dest > rpath + 1) while ((--dest)[-1] != '/'); if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1 && *dest == '/') dest++; } else { size_t new_size; if (dest[-1] != '/') *dest++ = '/'; if (dest + (end - start) >= rpath_limit) { ptrdiff_t dest_offset = dest - rpath; char *new_rpath; if (resolved) { __set_errno (ENAMETOOLONG); if (dest > rpath + 1) dest--; *dest = '\0'; goto error; } new_size = rpath_limit - rpath; if (end - start + 1 > path_max) new_size += end - start + 1; else new_size += path_max; new_rpath = (char *) realloc (rpath, new_size); if (new_rpath == NULL) { /* It's easier to set errno to ENOMEM than to rely on the 'realloc-posix' gnulib module. */ errno = ENOMEM; goto error; } rpath = new_rpath; rpath_limit = rpath + new_size; dest = rpath + dest_offset; } #ifdef _LIBC dest = __mempcpy (dest, start, end - start); #else memcpy (dest, start, end - start); dest += end - start; #endif *dest = '\0'; #ifdef _LIBC if (__lxstat64 (_STAT_VER, rpath, &st) < 0) #else if (lstat (rpath, &st) < 0) #endif goto error; if (S_ISLNK (st.st_mode)) { char *buf; size_t len; if (++num_links > MAXSYMLINKS) { __set_errno (ELOOP); goto error; } buf = malloca (path_max); if (!buf) { errno = ENOMEM; goto error; } n = __readlink (rpath, buf, path_max - 1); if (n < 0) { int saved_errno = errno; freea (buf); errno = saved_errno; goto error; } buf[n] = '\0'; if (!extra_buf) { extra_buf = malloca (path_max); if (!extra_buf) { freea (buf); errno = ENOMEM; goto error; } } len = strlen (end); if ((long int) (n + len) >= path_max) { freea (buf); __set_errno (ENAMETOOLONG); goto error; } /* Careful here, end may be a pointer into extra_buf... */ memmove (&extra_buf[n], end, len + 1); name = end = memcpy (extra_buf, buf, n); if (buf[0] == '/') { dest = rpath + 1; /* It's an absolute symlink */ if (DOUBLE_SLASH_IS_DISTINCT_ROOT && buf[1] == '/') *dest++ = '/'; } else { /* Back up to previous component, ignore if at root already: */ if (dest > rpath + 1) while ((--dest)[-1] != '/'); if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1 && *dest == '/') dest++; } } else if (!S_ISDIR (st.st_mode) && *end != '\0') { __set_errno (ENOTDIR); goto error; } } } if (dest > rpath + 1 && dest[-1] == '/') --dest; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1 && *dest == '/') dest++; *dest = '\0'; if (extra_buf) freea (extra_buf); return rpath; error: { int saved_errno = errno; if (extra_buf) freea (extra_buf); if (resolved == NULL) free (rpath); errno = saved_errno; } return NULL; } versioned_symbol (libc, __realpath, realpath, GLIBC_2_3); #endif /* !FUNC_REALPATH_WORKS || defined _LIBC */ #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) #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/canonicalize.c�����������������������������������������������������������0000664�0000000�0000000�00000020615�11671051007�0020047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "canonicalize.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include "areadlink.h" #include "file-set.h" #include "hash-triple.h" #include "pathmax.h" #include "xalloc.h" #include "xgetcwd.h" /* In this file, we cannot handle file names longer than PATH_MAX. On systems with no file name length limit, use a fallback. */ #ifndef PATH_MAX # define PATH_MAX 8192 #endif #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 #endif #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 */ /* 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) { size_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; } /* 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 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) { char *rname, *dest, *extra_buf = NULL; char const *start; char const *end; char const *rname_limit; size_t extra_len = 0; Hash_table *ht = NULL; int saved_errno; if (name == NULL) { errno = EINVAL; return NULL; } if (name[0] == '\0') { errno = ENOENT; return NULL; } if (name[0] != '/') { rname = xgetcwd (); if (!rname) return NULL; dest = strchr (rname, '\0'); if (dest - rname < PATH_MAX) { char *p = xrealloc (rname, PATH_MAX); dest = p + (dest - rname); rname = p; rname_limit = rname + PATH_MAX; } else { rname_limit = dest; } } else { rname = xmalloc (PATH_MAX); rname_limit = rname + PATH_MAX; rname[0] = '/'; dest = rname + 1; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && name[1] == '/') *dest++ = '/'; } for (start = name; *start; start = end) { /* Skip sequence of multiple file name separators. */ while (*start == '/') ++start; /* Find end of component. */ for (end = start; *end && *end != '/'; ++end) /* Nothing. */; if (end - start == 0) break; else if (end - start == 1 && start[0] == '.') /* nothing */; else if (end - start == 2 && start[0] == '.' && start[1] == '.') { /* Back up to previous component, ignore if at root already. */ if (dest > rname + 1) while ((--dest)[-1] != '/'); if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && *dest == '/') dest++; } else { struct stat st; if (dest[-1] != '/') *dest++ = '/'; if (dest + (end - start) >= rname_limit) { ptrdiff_t dest_offset = dest - rname; size_t new_size = rname_limit - rname; if (end - start + 1 > PATH_MAX) new_size += end - start + 1; else new_size += PATH_MAX; rname = xrealloc (rname, new_size); rname_limit = rname + new_size; dest = rname + dest_offset; } dest = memcpy (dest, start, end - start); dest += end - start; *dest = '\0'; if (lstat (rname, &st) != 0) { saved_errno = errno; if (can_mode == CAN_EXISTING) goto error; if (can_mode == CAN_ALL_BUT_LAST) { if (end[strspn (end, "/")] || saved_errno != ENOENT) goto error; continue; } st.st_mode = 0; } if (S_ISLNK (st.st_mode)) { char *buf; size_t n, len; /* Detect loops. We cannot use the cycle-check module here, since it's actually possible to encounter the same symlink more than once in a given traversal. However, encountering the same symlink,NAME pair twice does indicate a loop. */ if (seen_triple (&ht, name, &st)) { if (can_mode == CAN_MISSING) continue; saved_errno = ELOOP; goto error; } buf = areadlink_with_size (rname, st.st_size); if (!buf) { if (can_mode == CAN_MISSING && errno != ENOMEM) continue; saved_errno = errno; goto error; } n = strlen (buf); len = strlen (end); if (!extra_len) { extra_len = ((n + len + 1) > PATH_MAX) ? (n + len + 1) : PATH_MAX; extra_buf = xmalloc (extra_len); } else if ((n + len + 1) > extra_len) { extra_len = n + len + 1; extra_buf = xrealloc (extra_buf, extra_len); } /* Careful here, end may be a pointer into extra_buf... */ memmove (&extra_buf[n], end, len + 1); name = end = memcpy (extra_buf, buf, n); if (buf[0] == '/') { dest = rname + 1; /* It's an absolute symlink */ if (DOUBLE_SLASH_IS_DISTINCT_ROOT && buf[1] == '/') *dest++ = '/'; } else { /* Back up to previous component, ignore if at root already: */ if (dest > rname + 1) while ((--dest)[-1] != '/'); if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && *dest == '/') dest++; } free (buf); } else { if (!S_ISDIR (st.st_mode) && *end && (can_mode != CAN_MISSING)) { saved_errno = ENOTDIR; goto error; } } } } if (dest > rname + 1 && dest[-1] == '/') --dest; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && *dest == '/') dest++; *dest = '\0'; if (rname_limit != dest + 1) rname = xrealloc (rname, dest - rname + 1); free (extra_buf); if (ht) hash_free (ht); return rname; error: free (extra_buf); free (rname); if (ht) hash_free (ht); errno = saved_errno; return NULL; } �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/canonicalize.h�����������������������������������������������������������0000664�0000000�0000000�00000002745�11671051007�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-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 <http://www.gnu.org/licenses/>. */ #ifndef CANONICALIZE_H_ # define CANONICALIZE_H_ #include <stdlib.h> /* for canonicalize_file_name */ 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 }; typedef enum canonicalize_mode_t canonicalize_mode_t; /* Return a malloc'd string containing the canonical absolute name of the named file. This acts like canonicalize_file_name, except that whether components must exist depends on the canonicalize_mode_t argument. */ char *canonicalize_filename_mode (const char *, canonicalize_mode_t); #endif /* !CANONICALIZE_H_ */ ���������������������������gnulib-20111211-stable/lib/careadlinkat.c�����������������������������������������������������������0000664�0000000�0000000�00000012300�11671051007�0020022�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-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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #include <config.h> #include "careadlinkat.h" #include <errno.h> #include <limits.h> #include <stdlib.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" /* 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. */ 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 for which it was not meant for. */ if (fd != AT_FDCWD) abort (); return readlink (filename, buffer, buffer_size); } /* 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() <http://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)) { char *buf; size_t buf_size; size_t buf_size_max = SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; char stack_buf[1024]; if (! alloc) alloc = &stdlib_allocator; if (! buffer_size) { /* 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(). */ buffer = stack_buf; buffer_size = sizeof stack_buf; } buf = buffer; buf_size = buffer_size; do { /* Attempt to read the link into the current buffer. */ ssize_t link_length = preadlinkat (fd, filename, buf, buf_size); size_t link_size; if (link_length < 0) { /* On AIX 5L v5.3 and HP-UX 11i v2 04/09, readlink returns -1 with errno == ERANGE if the buffer is too small. */ int readlinkat_errno = errno; if (readlinkat_errno != ERANGE) { if (buf != buffer) { alloc->free (buf); errno = readlinkat_errno; } return NULL; } } link_size = link_length; if (link_size < buf_size) { buf[link_size++] = '\0'; if (buf == stack_buf) { char *b = (char *) alloc->allocate (link_size); buf_size = link_size; if (! b) break; memcpy (b, buf, link_size); buf = b; } else if (link_size < buf_size && buf != buffer && alloc->reallocate) { /* Shrink BUF before returning it. */ char *b = (char *) alloc->reallocate (buf, link_size); if (b) buf = b; } return buf; } if (buf != buffer) alloc->free (buf); if (buf_size <= buf_size_max / 2) buf_size *= 2; else if (buf_size < buf_size_max) buf_size = buf_size_max; else if (buf_size_max < SIZE_MAX) { errno = ENAMETOOLONG; return NULL; } else break; buf = (char *) alloc->allocate (buf_size); } while (buf); if (alloc->die) alloc->die (buf_size); errno = ENOMEM; return NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/careadlinkat.h�����������������������������������������������������������0000664�0000000�0000000�00000005411�11671051007�0020034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read symbolic links into a buffer without size limitation, relative to fd. 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 <http://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() <http://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)); /* Suitable values for careadlinkat's FD and PREADLINKAT arguments, when doing a plain readlink: Pass FD = AT_FDCWD and PREADLINKAT = careadlinkatcwd. */ #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. The value does not matter, since careadlinkatcwd ignores it, but we might as well use the same value as fcntl-h. */ # ifndef AT_FDCWD # define AT_FDCWD (-3041965) # endif #endif ssize_t careadlinkatcwd (int fd, char const *filename, char *buffer, size_t buffer_size); #endif /* _GL_CAREADLINKAT_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/ceil.c�������������������������������������������������������������������0000664�0000000�0000000�00000006510�11671051007�0016322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards positive infinity. Copyright (C) 2007, 2010-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 <http://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 /* 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-20111211-stable/lib/ceilf.c������������������������������������������������������������������0000664�0000000�0000000�00000001511�11671051007�0016464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards positive infinity. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_FLOAT #include "ceil.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/ceill.c������������������������������������������������������������������0000664�0000000�0000000�00000001776�11671051007�0016507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards positive infinity. 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 <http://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-20111211-stable/lib/chdir-long.c�������������������������������������������������������������0000664�0000000�0000000�00000015377�11671051007�0017447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a chdir function that tries not to fail due to ENAMETOOLONG Copyright (C) 2004-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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include "chdir-long.h" #include <assert.h> #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <stdio.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 inline void cdb_init (struct cd_buf *cdb) { cdb->fd = AT_FDCWD; } static inline int cdb_fchdir (struct cd_buf const *cdb) { return fchdir (cdb->fd); } static inline void cdb_free (struct cd_buf const *cdb) { if (0 <= cdb->fd) { bool close_fail = close (cdb->fd); assert (! 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 inline 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. */ assert (0 < len); assert (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; } assert (*dir != '/'); assert (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'; assert (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" char *program_name; int main (int argc, char *argv[]) { char *line = NULL; size_t n = 0; int len; program_name = argv[0]; 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-20111211-stable/lib/chdir-long.h�������������������������������������������������������������0000664�0000000�0000000�00000002067�11671051007�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a chdir function that tries not to fail due to ENAMETOOLONG Copyright (C) 2004-2005, 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 <http://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-20111211-stable/lib/chdir-safer.c������������������������������������������������������������0000664�0000000�0000000�00000004612�11671051007�0017576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* much like chdir(2), but safer Copyright (C) 2005-2006, 2008-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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include "chdir-safer.h" #include <stdbool.h> #include <fcntl.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include "same-inode.h" #ifndef HAVE_READLINK # define HAVE_READLINK 0 #endif /* Like chdir, but fail if DIR is a symbolic link to a directory (or similar funny business). This avoids a minor race condition between when a directory is created or statted and when the process chdirs into it. On older systems lacking full support for O_SEARCH, this function can also fail if DIR is not readable. */ int chdir_no_follow (char const *dir) { int result = 0; int saved_errno; int fd = open (dir, O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NOFOLLOW | O_NONBLOCK); if (fd < 0) return -1; /* If open follows symlinks, lstat DIR and fstat FD to ensure that they are the same file; if they are different files, set errno to ELOOP (the same value that open uses for symlinks with O_NOFOLLOW) so the caller can report a failure. Skip this check if HAVE_READLINK == 0, which should be the case on any system that lacks symlink support. */ if (HAVE_READLINK && ! HAVE_WORKING_O_NOFOLLOW) { struct stat sb1; result = lstat (dir, &sb1); if (result == 0) { struct stat sb2; result = fstat (fd, &sb2); if (result == 0 && ! SAME_INODE (sb1, sb2)) { errno = ELOOP; result = -1; } } } if (result == 0) result = fchdir (fd); saved_errno = errno; close (fd); errno = saved_errno; return result; } ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/chdir-safer.h������������������������������������������������������������0000664�0000000�0000000�00000001463�11671051007�0017604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* much like chdir(2), but safer Copyright (C) 2005, 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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ int chdir_no_follow (char const *file); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/check-version.c����������������������������������������������������������0000664�0000000�0000000�00000003160�11671051007�0020144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* check-version.h --- Check version string compatibility. Copyright (C) 1998-2006, 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/check-version.h����������������������������������������������������������0000664�0000000�0000000�00000001754�11671051007�0020160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* check-version.h --- Check version string compatibility. Copyright (C) 2005, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/chown.c������������������������������������������������������������������0000664�0000000�0000000�00000010646�11671051007�0016531�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-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 <http://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 (const char *file _GL_UNUSED, uid_t uid _GL_UNUSED, gid_t gid _GL_UNUSED) { errno = ENOSYS; return -1; } #else /* HAVE_CHOWN */ /* Below we refer to the system's chown(). */ # undef chown /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ # undef open # undef close /* 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; 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-20111211-stable/lib/classpath.c��������������������������������������������������������������0000664�0000000�0000000�00000006460�11671051007�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Java CLASSPATH handling. Copyright (C) 2001-2003, 2006, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* 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 __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Win32, 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-20111211-stable/lib/classpath.h��������������������������������������������������������������0000664�0000000�0000000�00000002773�11671051007�0017404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Java CLASSPATH handling. Copyright (C) 2003, 2009-2011 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 <http://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-20111211-stable/lib/clean-temp.c�������������������������������������������������������������0000664�0000000�0000000�00000056612�11671051007�0017443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Temporary directories and temporary files with automatic cleanup. Copyright (C) 2001, 2003, 2006-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "clean-temp.h" #include <errno.h> #include <fcntl.h> #include <limits.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #endif #include "error.h" #include "fatal-signal.h" #include "pathmax.h" #include "tmpdir.h" #include "xalloc.h" #include "xmalloca.h" #include "gl_xlist.h" #include "gl_linkedhash_list.h" #include "gettext.h" #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 #ifndef uintptr_t # define uintptr_t unsigned long #endif #if !GNULIB_FCNTL_SAFER /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ # undef open # undef close #endif /* 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. */ static struct { struct tempdir * volatile * volatile tempdir_list; size_t volatile tempdir_count; size_t tempdir_allocated; } cleanup_list /* = { NULL, 0, 0 } */; /* List of all open file descriptors to temporary files. */ static gl_list_t /* <int> */ 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. */ static bool 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 http://www.haible.de/bruno/hashfunc.html. */ static size_t 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 signal handler. It gets called asynchronously. */ static void cleanup () { 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)) { int fd = (int) (uintptr_t) element; close (fd); } gl_list_iterator_free (&iter); } } for (i = 0; i < cleanup_list.tempdir_count; i++) { struct tempdir *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); } } } /* 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) { 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 < cleanup_list.tempdir_count; i++) if (cleanup_list.tempdir_list[i] == NULL) { tmpdirp = &cleanup_list.tempdir_list[i]; break; } if (tmpdirp == NULL) { /* See whether the array needs to be extended. */ if (cleanup_list.tempdir_count == 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 = cleanup_list.tempdir_list; size_t old_allocated = cleanup_list.tempdir_allocated; size_t new_allocated = 2 * 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. Register the cleanup handler. */ at_fatal_signal (&cleanup); 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]; } cleanup_list.tempdir_list = new_array; cleanup_list.tempdir_allocated = new_allocated; /* Now we can free the old array. */ if (old_array != NULL) free ((struct tempdir **) old_array); } tmpdirp = &cleanup_list.tempdir_list[cleanup_list.tempdir_count]; /* Initialize *tmpdirp before incrementing tempdir_count, so that cleanup() will skip this entry before it is fully initialized. */ *tmpdirp = NULL; 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, string_equals, string_hash, NULL, false); tmpdir->files = gl_list_create_empty (GL_LINKEDHASH_LIST, string_equals, 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); if (tmpdirname != NULL) { tmpdir->dirname = tmpdirname; *tmpdirp = tmpdir; } unblock_fatal_signals (); if (tmpdirname == NULL) { error (0, 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); freea (xtemplate); return (struct temp_dir *) tmpdir; quit: 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; /* 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)); } /* 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; 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); } } /* 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; /* 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)); } /* 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; 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); } } /* Remove a file, with optional error message. Return 0 upon success, or -1 if there was some problem. */ static int do_unlink (struct temp_dir *dir, const char *absolute_file_name) { if (unlink (absolute_file_name) < 0 && dir->cleanup_verbose && errno != ENOENT) { error (0, errno, _("cannot remove temporary file %s"), absolute_file_name); return -1; } return 0; } /* Remove a directory, with optional error message. Return 0 upon success, or -1 if there was some problem. */ static int do_rmdir (struct temp_dir *dir, const char *absolute_dir_name) { if (rmdir (absolute_dir_name) < 0 && dir->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 = do_unlink (dir, absolute_file_name); 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 (dir, absolute_dir_name); unregister_temp_subdir (dir, absolute_dir_name); return err; } /* Remove all registered files and subdirectories inside DIR. 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 |= do_unlink (dir, file); 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 (dir, subdir); 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) { struct tempdir *tmpdir = (struct tempdir *)dir; int err = 0; size_t i; err |= cleanup_temp_dir_contents (dir); err |= do_rmdir (dir, tmpdir->dirname); for (i = 0; i < cleanup_list.tempdir_count; i++) if (cleanup_list.tempdir_list[i] == tmpdir) { /* Remove cleanup_list.tempdir_list[i]. */ if (i + 1 == cleanup_list.tempdir_count) { while (i > 0 && cleanup_list.tempdir_list[i - 1] == NULL) i--; cleanup_list.tempdir_count = i; } else cleanup_list.tempdir_list[i] = NULL; /* Now only we can free the tmpdir->dirname and tmpdir itself. */ free (tmpdir->dirname); free (tmpdir); return err; } /* The user passed an invalid DIR argument. */ abort (); } #if (defined _WIN32 || 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; 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) { if (descriptors == NULL) descriptors = gl_list_create_empty (GL_LINKEDHASH_LIST, NULL, NULL, NULL, false); gl_list_add_first (descriptors, (void *) (uintptr_t) fd); } /* Unregister a file descriptor to be closed. */ static void unregister_fd (int fd) { gl_list_t fds = descriptors; gl_list_node_t node; if (fds == NULL) /* descriptors should already contain fd. */ abort (); node = gl_list_search (fds, (void *) (uintptr_t) fd); if (node == NULL) /* descriptors should already contain fd. */ abort (); gl_list_remove_node (fds, node); } /* Open a temporary file in a temporary directory. Registers the resulting file descriptor to be closed. */ int open_temp (const char *file_name, int flags, mode_t mode) { int fd; int saved_errno; block_fatal_signals (); /* Note: 'open' here is actually open() or open_safer(). */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Use _O_TEMPORARY when possible, to increase the chances that the temporary file is removed when the process crashes. */ if (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. Registers the resulting file descriptor to be closed. */ FILE * fopen_temp (const char *file_name, const char *mode) { FILE *fp; int saved_errno; block_fatal_signals (); /* Note: 'fopen' here is actually fopen() or fopen_safer(). */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Use _O_TEMPORARY when possible, to increase the chances that the temporary file is removed when the process crashes. */ if (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; } /* Close a temporary file in a temporary directory. Unregisters the previously registered file descriptor. */ int close_temp (int fd) { if (fd >= 0) { /* No blocking of signals is needed here, since a double close of a file descriptor is harmless. */ int result = close (fd); int saved_errno = errno; /* No race condition here: we assume a single-threaded program, hence fd cannot be re-opened here. */ unregister_fd (fd); errno = saved_errno; return result; } else return close (fd); } /* Close a temporary file in a temporary directory. Unregisters the previously registered file descriptor. */ int fclose_temp (FILE *fp) { int fd = fileno (fp); /* No blocking of signals is needed here, since a double close of a file descriptor is harmless. */ int result = fclose (fp); int saved_errno = errno; /* No race condition here: we assume a single-threaded program, hence fd cannot be re-opened here. */ unregister_fd (fd); errno = saved_errno; return result; } #if GNULIB_FWRITEERROR /* Like fwriteerror. Unregisters the previously registered file descriptor. */ int fwriteerror_temp (FILE *fp) { int fd = fileno (fp); /* No blocking of signals is needed here, since a double close of a file descriptor is harmless. */ int result = fwriteerror (fp); int saved_errno = errno; /* No race condition here: we assume a single-threaded program, hence fd cannot be re-opened here. */ unregister_fd (fd); errno = saved_errno; return result; } #endif #if GNULIB_CLOSE_STREAM /* Like close_stream. Unregisters the previously registered file descriptor. */ int close_stream_temp (FILE *fp) { int fd = fileno (fp); /* No blocking of signals is needed here, since a double close of a file descriptor is harmless. */ int result = close_stream (fp); int saved_errno = errno; /* No race condition here: we assume a single-threaded program, hence fd cannot be re-opened here. */ unregister_fd (fd); errno = saved_errno; return result; } #endif ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/clean-temp.h�������������������������������������������������������������0000664�0000000�0000000�00000014234�11671051007�0017442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Temporary directories and temporary files with automatic cleanup. Copyright (C) 2006, 2011 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 <http://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. This module provides support for temporary directories and temporary files inside these temporary directories. Temporary files without temporary directories are not supported here. 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. */ 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. */ }; /* 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); /* 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); /* 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); /* Open a temporary file in a temporary directory. Registers the resulting file descriptor to be closed. */ extern int open_temp (const char *file_name, int flags, mode_t mode); extern FILE * fopen_temp (const char *file_name, const char *mode); /* Close a temporary file in a temporary directory. Unregisters the previously registered file descriptor. */ extern int close_temp (int fd); extern int fclose_temp (FILE *fp); /* Like fwriteerror. Unregisters the previously registered file descriptor. */ extern int fwriteerror_temp (FILE *fp); /* Like close_stream. Unregisters the previously registered file descriptor. */ extern int close_stream_temp (FILE *fp); #ifdef __cplusplus } #endif #endif /* _CLEAN_TEMP_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/cloexec.c����������������������������������������������������������������0000664�0000000�0000000�00000004427�11671051007�0017035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* closexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 1991, 2004-2006, 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 <http://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-20111211-stable/lib/cloexec.h����������������������������������������������������������������0000664�0000000�0000000�00000002734�11671051007�0017041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* closexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 2004, 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 <http://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-20111211-stable/lib/close-stream.c�����������������������������������������������������������0000664�0000000�0000000�00000005746�11671051007�0020016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close a stream, with nicer error checking than fclose's. Copyright (C) 1998-2002, 2004, 2006-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 <http://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-20111211-stable/lib/close-stream.h�����������������������������������������������������������0000664�0000000�0000000�00000000064�11671051007�0020007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> int close_stream (FILE *stream); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/close.c������������������������������������������������������������������0000664�0000000�0000000�00000002707�11671051007�0016517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* close replacement. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include "fd-hook.h" #include "msvc-inval.h" #undef close #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 /* 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-20111211-stable/lib/closedir.c���������������������������������������������������������������0000664�0000000�0000000�00000002642�11671051007�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stop reading the entries of a directory. Copyright (C) 2006-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 <http://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 int fd = dirfd (dirp); # endif int retval; #if HAVE_CLOSEDIR # undef closedir retval = closedir (dirp); #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-20111211-stable/lib/closein.c����������������������������������������������������������������0000664�0000000�0000000�00000007500�11671051007�0017042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard input, rewinding seekable stdin if necessary. 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 <http://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-20111211-stable/lib/closein.h����������������������������������������������������������������0000664�0000000�0000000�00000001726�11671051007�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard input, rewinding seekable stdin if necessary. 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 <http://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-20111211-stable/lib/closeout.c���������������������������������������������������������������0000664�0000000�0000000�00000010661�11671051007�0017245�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-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 <http://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" 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); } if (close_stream (stderr) != 0) _exit (exit_failure); } �������������������������������������������������������������������������������gnulib-20111211-stable/lib/closeout.h���������������������������������������������������������������0000664�0000000�0000000�00000002042�11671051007�0017244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard output and standard error. Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-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 <http://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-20111211-stable/lib/concat-filename.c��������������������������������������������������������0000664�0000000�0000000�00000004731�11671051007�0020436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2006-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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/concat-filename.h��������������������������������������������������������0000664�0000000�0000000�00000003004�11671051007�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 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 <http://www.gnu.org/licenses/>. */ #ifndef _CONCAT_FILENAME_H #define _CONCAT_FILENAME_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); /* 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); #ifdef __cplusplus } #endif #endif /* _CONCAT_FILENAME_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/config.charset�����������������������������������������������������������0000664�0000000�0000000�00000055112�11671051007�0020064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Output a system dependent table of character encoding aliases. # # Copyright (C) 2000-2004, 2006-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 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, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # The table consists of lines of the form # ALIAS CANONICAL # # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". # ALIAS is compared in a case sensitive way. # # CANONICAL is the GNU canonical name for this character encoding. # It must be an encoding supported by libiconv. Support by GNU libc is # also desirable. CANONICAL is case insensitive. Usually an upper case # MIME charset name is preferred. # The current list of GNU canonical charset names is as follows. # # name MIME? used by which systems # ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin cygwin # ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-3 Y glibc solaris cygwin # ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin # ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-6 Y glibc aix hpux solaris cygwin # ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin # ISO-8859-8 Y glibc aix hpux osf solaris cygwin # ISO-8859-9 Y glibc aix hpux irix osf solaris darwin cygwin # ISO-8859-13 glibc netbsd openbsd darwin cygwin # ISO-8859-14 glibc cygwin # ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin # KOI8-R Y glibc 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 woe32 dos # CP922 aix # CP932 aix cygwin woe32 dos # CP943 aix # CP949 osf darwin woe32 dos # CP950 woe32 dos # CP1046 aix # CP1124 aix # CP1125 dos # CP1129 aix # CP1131 darwin # CP1250 woe32 # CP1251 glibc solaris netbsd openbsd darwin cygwin woe32 # CP1252 aix woe32 # CP1253 woe32 # CP1254 woe32 # CP1255 glibc woe32 # CP1256 woe32 # CP1257 woe32 # GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin # EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin # EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin # EUC-TW glibc aix hpux irix osf solaris netbsd # BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin # BIG5-HKSCS glibc solaris darwin # GBK glibc aix osf solaris darwin cygwin woe32 dos # GB18030 glibc solaris netbsd darwin # SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin # JOHAB glibc solaris woe32 # TIS-620 glibc aix hpux osf solaris cygwin # VISCII Y glibc # TCVN5712-1 glibc # ARMSCII-8 glibc darwin # GEORGIAN-PS glibc cygwin # PT154 glibc # 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 # # 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. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM host="$1" os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` echo "# This file contains a table of character encoding aliases," echo "# suitable for operating system '${os}'." echo "# It was automatically generated from config.charset." # List of references, updated during installation: echo "# Packages using this file: " case "$os" in linux-gnulibc1*) # Linux libc5 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" echo "POSIX ASCII" for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ sv_FI sv_SE; do echo "$l ISO-8859-1" echo "$l.iso-8859-1 ISO-8859-1" echo "$l.iso-8859-15 ISO-8859-15" echo "$l.iso-8859-15@euro ISO-8859-15" echo "$l@euro ISO-8859-15" echo "$l.cp-437 CP437" echo "$l.cp-850 CP850" echo "$l.cp-1252 CP1252" echo "$l.cp-1252@euro CP1252" #echo "$l.atari-st ATARI-ST" # not a commonly used encoding echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ sl_SI sr sr_CS sr_YU; do echo "$l ISO-8859-2" echo "$l.iso-8859-2 ISO-8859-2" echo "$l.cp-852 CP852" echo "$l.cp-1250 CP1250" echo "$l.utf-8 UTF-8" done for l in mk mk_MK ru ru_RU; do echo "$l ISO-8859-5" echo "$l.iso-8859-5 ISO-8859-5" echo "$l.koi8-r KOI8-R" echo "$l.cp-866 CP866" echo "$l.cp-1251 CP1251" echo "$l.utf-8 UTF-8" done for l in ar ar_SA; do echo "$l ISO-8859-6" echo "$l.iso-8859-6 ISO-8859-6" echo "$l.cp-864 CP864" #echo "$l.cp-868 CP868" # not a commonly used encoding echo "$l.cp-1256 CP1256" echo "$l.utf-8 UTF-8" done for l in el el_GR gr gr_GR; do echo "$l ISO-8859-7" echo "$l.iso-8859-7 ISO-8859-7" echo "$l.cp-869 CP869" echo "$l.cp-1253 CP1253" echo "$l.cp-1253@euro CP1253" echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in he he_IL iw iw_IL; do echo "$l ISO-8859-8" echo "$l.iso-8859-8 ISO-8859-8" echo "$l.cp-862 CP862" echo "$l.cp-1255 CP1255" echo "$l.utf-8 UTF-8" done for l in tr tr_TR; do echo "$l ISO-8859-9" echo "$l.iso-8859-9 ISO-8859-9" echo "$l.cp-857 CP857" echo "$l.cp-1254 CP1254" echo "$l.utf-8 UTF-8" done for l in lt lt_LT lv lv_LV; do #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name echo "$l ISO-8859-13" done for l in ru_UA uk uk_UA; do echo "$l KOI8-U" done for l in zh zh_CN; do #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name echo "$l GB2312" done for l in ja ja_JP ja_JP.EUC; do echo "$l EUC-JP" done for l in ko ko_KR; do echo "$l EUC-KR" done for l in th th_TH; do echo "$l TIS-620" done for l in fa fa_IR; do #echo "$l ISIRI-3342" # a broken encoding echo "$l.utf-8 UTF-8" done ;; linux* | *-gnu*) # 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. Therefore, the Makefile does not # need to install the alias file at all. # The following applies only to glibc-2.0.x and older libcs. echo "ISO_646.IRV:1983 ASCII" ;; aix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "IBM-850 CP850" echo "IBM-856 CP856" echo "IBM-921 ISO-8859-13" echo "IBM-922 CP922" echo "IBM-932 CP932" echo "IBM-943 CP943" echo "IBM-1046 CP1046" echo "IBM-1124 CP1124" echo "IBM-1129 CP1129" echo "IBM-1252 CP1252" echo "IBM-eucCN GB2312" echo "IBM-eucJP EUC-JP" echo "IBM-eucKR EUC-KR" echo "IBM-eucTW EUC-TW" echo "big5 BIG5" echo "GBK GBK" echo "TIS-620 TIS-620" echo "UTF-8 UTF-8" ;; hpux*) echo "iso88591 ISO-8859-1" echo "iso88592 ISO-8859-2" echo "iso88595 ISO-8859-5" echo "iso88596 ISO-8859-6" echo "iso88597 ISO-8859-7" echo "iso88598 ISO-8859-8" echo "iso88599 ISO-8859-9" echo "iso885915 ISO-8859-15" echo "roman8 HP-ROMAN8" echo "arabic8 HP-ARABIC8" echo "greek8 HP-GREEK8" echo "hebrew8 HP-HEBREW8" echo "turkish8 HP-TURKISH8" echo "kana8 HP-KANA8" echo "tis620 TIS-620" echo "big5 BIG5" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "hp15CN GB2312" #echo "ccdc ?" # what is this? echo "SJIS SHIFT_JIS" echo "utf8 UTF-8" ;; irix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" ;; osf*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "cp850 CP850" echo "big5 BIG5" echo "dechanyu DEC-HANYU" echo "dechanzi GB2312" echo "deckanji DEC-KANJI" echo "deckorean EUC-KR" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "GBK GBK" echo "KSC5601 CP949" echo "sdeckanji EUC-JP" echo "SJIS SHIFT_JIS" echo "TACTIS TIS-620" echo "UTF-8 UTF-8" ;; solaris*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-3 ISO-8859-3" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "koi8-r KOI8-R" echo "ansi-1251 CP1251" echo "BIG5 BIG5" echo "Big5-HKSCS BIG5-HKSCS" echo "gb2312 GB2312" echo "GBK GBK" echo "GB18030 GB18030" echo "cns11643 EUC-TW" echo "5601 EUC-KR" echo "ko_KR.johap92 JOHAB" echo "eucJP EUC-JP" echo "PCK SHIFT_JIS" echo "TIS620.2533 TIS-620" #echo "sun_eu_greek ?" # what is this? echo "UTF-8 UTF-8" ;; freebsd* | os2*) # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just # reuse FreeBSD's locale data for OS/2. echo "C ASCII" echo "US-ASCII ASCII" for l in la_LN lt_LN; do echo "$l.ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do echo "$l.ISO_8859-1 ISO-8859-1" echo "$l.DIS_8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do echo "$l.ISO_8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO_8859-4 ISO-8859-4" done for l in ru_RU ru_SU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO_8859-5 ISO-8859-5" echo "$l.CP866 CP866" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ja_JP.Shift_JIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; netbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "BIG5 BIG5" echo "SJIS SHIFT_JIS" ;; openbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" ;; darwin[56]*) # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" for l in en_AU en_CA en_GB en_US la_LN; do echo "$l.US-ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ nl_NL no_NO pt_PT sv_SE; do echo "$l ISO-8859-1" echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in la_LN; do echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do echo "$l.ISO8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO8859-4 ISO-8859-4" done for l in ru_RU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO8859-5 ISO-8859-5" echo "$l.CP866 CP866" done for l in bg_BG; do echo "$l.CP1251 CP1251" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; darwin*) # 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. echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" echo "KOI8-R KOI8-R" echo "KOI8-U KOI8-U" echo "CP866 CP866" echo "CP949 CP949" echo "CP1131 CP1131" echo "CP1251 CP1251" echo "eucCN GB2312" echo "GB2312 GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "Big5 BIG5" echo "Big5HKSCS BIG5-HKSCS" echo "GBK GBK" echo "GB18030 GB18030" echo "SJIS SHIFT_JIS" echo "ARMSCII-8 ARMSCII-8" echo "PT154 PT154" #echo "ISCII-DEV ?" echo "* UTF-8" ;; beos* | haiku*) # BeOS and Haiku have a single locale, and it has UTF-8 encoding. echo "* UTF-8" ;; msdosdjgpp*) # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "#" echo "# The encodings given here may not all be correct." echo "# If you find that the encoding given for your language and" echo "# country is not the one your DOS machine actually uses, just" echo "# correct it in this file, and send a mail to" echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>" echo "# and Bruno Haible <bruno@clisp.org>." echo "#" echo "C ASCII" # ISO-8859-1 languages echo "ca CP850" echo "ca_ES CP850" echo "da CP865" # not CP850 ?? echo "da_DK CP865" # not CP850 ?? echo "de CP850" echo "de_AT CP850" echo "de_CH CP850" echo "de_DE CP850" echo "en CP850" echo "en_AU CP850" # not CP437 ?? echo "en_CA CP850" echo "en_GB CP850" echo "en_NZ CP437" echo "en_US CP437" echo "en_ZA CP850" # not CP437 ?? echo "es CP850" echo "es_AR CP850" echo "es_BO CP850" echo "es_CL CP850" echo "es_CO CP850" echo "es_CR CP850" echo "es_CU CP850" echo "es_DO CP850" echo "es_EC CP850" echo "es_ES CP850" echo "es_GT CP850" echo "es_HN CP850" echo "es_MX CP850" echo "es_NI CP850" echo "es_PA CP850" echo "es_PY CP850" echo "es_PE CP850" echo "es_SV CP850" echo "es_UY CP850" echo "es_VE CP850" echo "et CP850" echo "et_EE CP850" echo "eu CP850" echo "eu_ES CP850" echo "fi CP850" echo "fi_FI CP850" echo "fr CP850" echo "fr_BE CP850" echo "fr_CA CP850" echo "fr_CH CP850" echo "fr_FR CP850" echo "ga CP850" echo "ga_IE CP850" echo "gd CP850" echo "gd_GB CP850" echo "gl CP850" echo "gl_ES CP850" echo "id CP850" # not CP437 ?? echo "id_ID CP850" # not CP437 ?? echo "is CP861" # not CP850 ?? echo "is_IS CP861" # not CP850 ?? echo "it CP850" echo "it_CH CP850" echo "it_IT CP850" echo "lt CP775" echo "lt_LT CP775" echo "lv CP775" echo "lv_LV CP775" echo "nb CP865" # not CP850 ?? echo "nb_NO CP865" # not CP850 ?? echo "nl CP850" echo "nl_BE CP850" echo "nl_NL CP850" echo "nn CP865" # not CP850 ?? echo "nn_NO CP865" # not CP850 ?? echo "no CP865" # not CP850 ?? echo "no_NO CP865" # not CP850 ?? echo "pt CP850" echo "pt_BR CP850" echo "pt_PT CP850" echo "sv CP850" echo "sv_SE CP850" # ISO-8859-2 languages echo "cs CP852" echo "cs_CZ CP852" echo "hr CP852" echo "hr_HR CP852" echo "hu CP852" echo "hu_HU CP852" echo "pl CP852" echo "pl_PL CP852" echo "ro CP852" echo "ro_RO CP852" echo "sk CP852" echo "sk_SK CP852" echo "sl CP852" echo "sl_SI CP852" echo "sq CP852" echo "sq_AL CP852" echo "sr CP852" # CP852 or CP866 or CP855 ?? echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? # ISO-8859-3 languages echo "mt CP850" echo "mt_MT CP850" # ISO-8859-5 languages echo "be CP866" echo "be_BE CP866" echo "bg CP866" # not CP855 ?? echo "bg_BG CP866" # not CP855 ?? echo "mk CP866" # not CP855 ?? echo "mk_MK CP866" # not CP855 ?? echo "ru CP866" echo "ru_RU CP866" echo "uk CP1125" echo "uk_UA CP1125" # ISO-8859-6 languages echo "ar CP864" echo "ar_AE CP864" echo "ar_DZ CP864" echo "ar_EG CP864" echo "ar_IQ CP864" echo "ar_IR CP864" echo "ar_JO CP864" echo "ar_KW CP864" echo "ar_MA CP864" echo "ar_OM CP864" echo "ar_QA CP864" echo "ar_SA CP864" echo "ar_SY CP864" # ISO-8859-7 languages echo "el CP869" echo "el_GR CP869" # ISO-8859-8 languages echo "he CP862" echo "he_IL CP862" # ISO-8859-9 languages echo "tr CP857" echo "tr_TR CP857" # Japanese echo "ja CP932" echo "ja_JP CP932" # Chinese echo "zh_CN GBK" echo "zh_TW CP950" # not CP938 ?? # Korean echo "kr CP949" # not CP934 ?? echo "kr_KR CP949" # not CP934 ?? # Thai echo "th CP874" echo "th_TH CP874" # Other echo "eo CP850" echo "eo_EO CP850" ;; esac ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/connect.c����������������������������������������������������������������0000664�0000000�0000000�00000003015�11671051007�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* connect.c --- wrappers for Windows connect function Copyright (C) 2008-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 <http://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-20111211-stable/lib/copy-acl.c���������������������������������������������������������������0000664�0000000�0000000�00000042016�11671051007�0017116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* copy-acl.c - copy access control list from one file to another file Copyright (C) 2002-2003, 2005-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 <http://www.gnu.org/licenses/>. Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include "acl-internal.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. 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. */ static int qcopy_acl (const char *src_name, int source_desc, const char *dst_name, int dest_desc, mode_t mode) { #if USE_ACL && HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, MacOS X, IRIX, Tru64 */ # if !HAVE_ACL_TYPE_EXTENDED /* Linux, FreeBSD, IRIX, Tru64 */ acl_t acl; int ret; if (HAVE_ACL_GET_FD && source_desc != -1) acl = acl_get_fd (source_desc); else acl = acl_get_file (src_name, ACL_TYPE_ACCESS); if (acl == NULL) { if (ACL_NOT_WELL_SUPPORTED (errno)) return qset_acl (dst_name, dest_desc, mode); else return -2; } if (HAVE_ACL_SET_FD && dest_desc != -1) ret = acl_set_fd (dest_desc, acl); else ret = acl_set_file (dst_name, ACL_TYPE_ACCESS, acl); if (ret != 0) { int saved_errno = errno; if (ACL_NOT_WELL_SUPPORTED (errno) && !acl_access_nontrivial (acl)) { acl_free (acl); return chmod_or_fchmod (dst_name, dest_desc, mode); } else { acl_free (acl); chmod_or_fchmod (dst_name, dest_desc, mode); errno = saved_errno; return -1; } } else acl_free (acl); if (!MODE_INSIDE_ACL || (mode & (S_ISUID | S_ISGID | S_ISVTX))) { /* We did not call chmod so far, and either the mode and the ACL are separate or special bits are to be set which don't fit into ACLs. */ if (chmod_or_fchmod (dst_name, dest_desc, mode) != 0) return -1; } if (S_ISDIR (mode)) { acl = acl_get_file (src_name, ACL_TYPE_DEFAULT); if (acl == NULL) return -2; if (acl_set_file (dst_name, ACL_TYPE_DEFAULT, acl)) { int saved_errno = errno; acl_free (acl); errno = saved_errno; return -1; } else acl_free (acl); } return 0; # else /* HAVE_ACL_TYPE_EXTENDED */ /* MacOS X */ /* On MacOS 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. */ acl_t acl; int ret; if (HAVE_ACL_GET_FD && source_desc != -1) acl = acl_get_fd (source_desc); else acl = acl_get_file (src_name, ACL_TYPE_EXTENDED); if (acl == NULL) { if (ACL_NOT_WELL_SUPPORTED (errno)) return qset_acl (dst_name, dest_desc, mode); else return -2; } if (HAVE_ACL_SET_FD && dest_desc != -1) ret = acl_set_fd (dest_desc, acl); else ret = acl_set_file (dst_name, ACL_TYPE_EXTENDED, acl); if (ret != 0) { int saved_errno = errno; if (ACL_NOT_WELL_SUPPORTED (errno) && !acl_extended_nontrivial (acl)) { acl_free (acl); return chmod_or_fchmod (dst_name, dest_desc, mode); } else { acl_free (acl); chmod_or_fchmod (dst_name, dest_desc, mode); errno = saved_errno; return -1; } } else acl_free (acl); /* Since !MODE_INSIDE_ACL, we have to call chmod explicitly. */ return chmod_or_fchmod (dst_name, dest_desc, mode); # 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 int ace_count; ace_t *ace_entries; # endif int count; aclent_t *entries; int did_chmod; int saved_errno; int ret; # 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 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 <http://docs.sun.com/app/docs/doc/819-2241/6n4huc7ia?l=en&a=view> the description of ENOTSUP.) */ for (;;) { ace_count = (source_desc != -1 ? facl (source_desc, ACE_GETACLCNT, 0, NULL) : acl (src_name, ACE_GETACLCNT, 0, NULL)); if (ace_count < 0) { if (errno == ENOSYS || errno == EINVAL) { ace_count = 0; ace_entries = NULL; break; } else return -2; } if (ace_count == 0) { ace_entries = NULL; break; } ace_entries = (ace_t *) malloc (ace_count * sizeof (ace_t)); if (ace_entries == NULL) { errno = ENOMEM; return -2; } if ((source_desc != -1 ? facl (source_desc, ACE_GETACL, ace_count, ace_entries) : acl (src_name, ACE_GETACL, ace_count, ace_entries)) == ace_count) break; /* Huh? The number of ACL entries changed since the last call. Repeat. */ } # endif for (;;) { count = (source_desc != -1 ? facl (source_desc, GETACLCNT, 0, NULL) : acl (src_name, GETACLCNT, 0, NULL)); if (count < 0) { if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP) { count = 0; entries = NULL; break; } else return -2; } if (count == 0) { entries = NULL; break; } entries = (aclent_t *) malloc (count * sizeof (aclent_t)); if (entries == NULL) { errno = ENOMEM; return -2; } if ((source_desc != -1 ? facl (source_desc, GETACL, count, entries) : acl (src_name, GETACL, count, entries)) == count) break; /* Huh? The number of ACL entries changed since the last call. Repeat. */ } /* Is there an ACL of either kind? */ # ifdef ACE_GETACL if (ace_count == 0) # endif if (count == 0) return qset_acl (dst_name, dest_desc, mode); did_chmod = 0; /* set to 1 once the mode bits in 0777 have been set */ saved_errno = 0; /* the first non-ignorable error code */ if (!MODE_INSIDE_ACL) { /* 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). */ if (chmod_or_fchmod (dst_name, dest_desc, mode) != 0) saved_errno = errno; did_chmod = 1; } /* If both ace_entries and entries are available, try SETACL before ACE_SETACL, because SETACL cannot fail with ENOTSUP whereas ACE_SETACL can. */ if (count > 0) { ret = (dest_desc != -1 ? facl (dest_desc, SETACL, count, entries) : acl (dst_name, SETACL, count, entries)); if (ret < 0 && saved_errno == 0) { saved_errno = errno; if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) && !acl_nontrivial (count, entries)) saved_errno = 0; } else did_chmod = 1; } free (entries); # ifdef ACE_GETACL if (ace_count > 0) { ret = (dest_desc != -1 ? facl (dest_desc, ACE_SETACL, ace_count, ace_entries) : acl (dst_name, ACE_SETACL, ace_count, ace_entries)); if (ret < 0 && saved_errno == 0) { saved_errno = errno; if ((errno == ENOSYS || errno == EINVAL || errno == ENOTSUP) && !acl_ace_nontrivial (ace_count, ace_entries)) saved_errno = 0; } } free (ace_entries); # endif if (MODE_INSIDE_ACL && did_chmod <= ((mode & (S_ISUID | S_ISGID | S_ISVTX)) ? 1 : 0)) { /* We did not call chmod so far, and either the mode and the ACL are separate or special bits are to be set which don't fit into ACLs. */ if (chmod_or_fchmod (dst_name, dest_desc, mode) != 0) { if (saved_errno == 0) saved_errno = errno; } } if (saved_errno) { errno = saved_errno; return -1; } return 0; #elif USE_ACL && HAVE_GETACL /* HP-UX */ int count; struct acl_entry entries[NACLENTRIES]; # if HAVE_ACLV_H int aclv_count; struct acl aclv_entries[NACLVENTRIES]; # endif int did_chmod; int saved_errno; int ret; for (;;) { count = (source_desc != -1 ? fgetacl (source_desc, 0, NULL) : getacl (src_name, 0, NULL)); if (count < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) { count = 0; break; } else return -2; } if (count == 0) break; if (count > NACLENTRIES) /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); if ((source_desc != -1 ? fgetacl (source_desc, count, entries) : getacl (src_name, count, entries)) == count) break; /* Huh? The number of ACL entries changed since the last call. Repeat. */ } # if HAVE_ACLV_H for (;;) { aclv_count = acl ((char *) src_name, ACL_CNT, NACLVENTRIES, aclv_entries); if (aclv_count < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) { count = 0; break; } else return -2; } if (aclv_count == 0) break; if (aclv_count > NACLVENTRIES) /* If NACLVENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); if (acl ((char *) src_name, ACL_GET, aclv_count, aclv_entries) == aclv_count) break; /* Huh? The number of ACL entries changed since the last call. Repeat. */ } # endif if (count == 0) # if HAVE_ACLV_H if (aclv_count == 0) # endif return qset_acl (dst_name, dest_desc, mode); did_chmod = 0; /* set to 1 once the mode bits in 0777 have been set */ saved_errno = 0; /* the first non-ignorable error code */ if (count > 0) { ret = (dest_desc != -1 ? fsetacl (dest_desc, count, entries) : setacl (dst_name, count, entries)); if (ret < 0 && saved_errno == 0) { saved_errno = errno; if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) { struct stat source_statbuf; if ((source_desc != -1 ? fstat (source_desc, &source_statbuf) : stat (src_name, &source_statbuf)) == 0) { if (!acl_nontrivial (count, entries, &source_statbuf)) saved_errno = 0; } else saved_errno = errno; } } else did_chmod = 1; } # if HAVE_ACLV_H if (aclv_count > 0) { ret = acl ((char *) dst_name, ACL_SET, aclv_count, aclv_entries); if (ret < 0 && saved_errno == 0) { saved_errno = errno; if (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) { if (!aclv_nontrivial (aclv_count, aclv_entries)) saved_errno = 0; } } else did_chmod = 1; } # endif if (did_chmod <= ((mode & (S_ISUID | S_ISGID | S_ISVTX)) ? 1 : 0)) { /* We did not call chmod so far, and special bits are to be set which don't fit into ACLs. */ if (chmod_or_fchmod (dst_name, dest_desc, mode) != 0) { if (saved_errno == 0) saved_errno = errno; } } if (saved_errno) { errno = saved_errno; return -1; } return 0; #elif USE_ACL && HAVE_ACLX_GET && 0 /* AIX */ /* TODO */ #elif USE_ACL && HAVE_STATACL /* older AIX */ union { struct acl a; char room[4096]; } u; int ret; if ((source_desc != -1 ? fstatacl (source_desc, STX_NORMAL, &u.a, sizeof (u)) : statacl (src_name, STX_NORMAL, &u.a, sizeof (u))) < 0) return -2; ret = (dest_desc != -1 ? fchacl (dest_desc, &u.a, u.a.acl_len) : chacl (dst_name, &u.a, u.a.acl_len)); if (ret < 0) { int saved_errno = errno; chmod_or_fchmod (dst_name, dest_desc, mode); errno = saved_errno; return -1; } /* No need to call chmod_or_fchmod at this point, since the mode bits S_ISUID, S_ISGID, S_ISVTX are also stored in the ACL. */ return 0; #elif USE_ACL && HAVE_ACLSORT /* NonStop Kernel */ int count; struct acl entries[NACLENTRIES]; int ret; for (;;) { count = acl ((char *) src_name, ACL_CNT, NACLENTRIES, NULL); if (count < 0) { if (0) { count = 0; break; } else return -2; } if (count == 0) break; if (count > NACLENTRIES) /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); if (acl ((char *) src_name, ACL_GET, count, entries) == count) break; /* Huh? The number of ACL entries changed since the last call. Repeat. */ } if (count == 0) return qset_acl (dst_name, dest_desc, mode); ret = acl ((char *) dst_name, ACL_SET, count, entries); if (ret < 0) { int saved_errno = errno; if (0) { if (!acl_nontrivial (count, entries)) return chmod_or_fchmod (dst_name, dest_desc, mode); } chmod_or_fchmod (dst_name, dest_desc, mode); errno = saved_errno; return -1; } if (mode & (S_ISUID | S_ISGID | S_ISVTX)) { /* We did not call chmod so far, and either the mode and the ACL are separate or special bits are to be set which don't fit into ACLs. */ return chmod_or_fchmod (dst_name, dest_desc, mode); } return 0; #else return qset_acl (dst_name, dest_desc, mode); #endif } /* 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 -1. */ 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)); return -1; case -1: error (0, errno, _("preserving permissions for %s"), quote (dst_name)); return -1; default: return 0; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/copy-file.c��������������������������������������������������������������0000664�0000000�0000000�00000007154�11671051007�0017302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copying of files. Copyright (C) 2001-2003, 2006-2007, 2009-2011 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 <http://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> #if HAVE_UTIME || HAVE_UTIMES # if HAVE_UTIME_H # include <utime.h> # else # include <sys/utime.h> # endif #endif #include "error.h" #include "safe-read.h" #include "full-write.h" #include "acl.h" #include "binary-io.h" #include "gettext.h" #include "xalloc.h" #define _(str) gettext (str) /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close enum { IO_SIZE = 32 * 1024 }; void copy_file_preserving (const char *src_filename, const char *dest_filename) { int src_fd; struct stat statbuf; int mode; int dest_fd; char *buf = xmalloc (IO_SIZE); src_fd = open (src_filename, O_RDONLY | O_BINARY); if (src_fd < 0 || fstat (src_fd, &statbuf) < 0) error (EXIT_FAILURE, errno, _("error while opening \"%s\" for reading"), src_filename); mode = statbuf.st_mode & 07777; dest_fd = open (dest_filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0600); if (dest_fd < 0) error (EXIT_FAILURE, errno, _("cannot open backup file \"%s\" for writing"), dest_filename); /* Copy the file contents. */ for (;;) { size_t n_read = safe_read (src_fd, buf, IO_SIZE); if (n_read == SAFE_READ_ERROR) error (EXIT_FAILURE, errno, _("error reading \"%s\""), src_filename); if (n_read == 0) break; if (full_write (dest_fd, buf, n_read) < n_read) error (EXIT_FAILURE, errno, _("error writing \"%s\""), dest_filename); } free (buf); #if !USE_ACL if (close (dest_fd) < 0) error (EXIT_FAILURE, errno, _("error writing \"%s\""), dest_filename); if (close (src_fd) < 0) error (EXIT_FAILURE, errno, _("error after reading \"%s\""), src_filename); #endif /* Preserve the access and modification times. */ #if HAVE_UTIME { struct utimbuf ut; ut.actime = statbuf.st_atime; ut.modtime = statbuf.st_mtime; utime (dest_filename, &ut); } #elif HAVE_UTIMES { struct timeval ut[2]; ut[0].tv_sec = statbuf.st_atime; ut[0].tv_usec = 0; ut[1].tv_sec = statbuf.st_mtime; ut[1].tv_usec = 0; utimes (dest_filename, &ut); } #endif #if HAVE_CHOWN /* Preserve the owner and group. */ chown (dest_filename, statbuf.st_uid, statbuf.st_gid); #endif /* Preserve the access permissions. */ #if USE_ACL if (copy_acl (src_filename, src_fd, dest_filename, dest_fd, mode)) exit (EXIT_FAILURE); #else chmod (dest_filename, mode); #endif #if USE_ACL if (close (dest_fd) < 0) error (EXIT_FAILURE, errno, _("error writing \"%s\""), dest_filename); if (close (src_fd) < 0) error (EXIT_FAILURE, errno, _("error after reading \"%s\""), src_filename); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/copy-file.h��������������������������������������������������������������0000664�0000000�0000000�00000002252�11671051007�0017301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copying of files. Copyright (C) 2001-2003, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifdef __cplusplus extern "C" { #endif /* 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-20111211-stable/lib/copysign.c���������������������������������������������������������������0000664�0000000�0000000�00000001600�11671051007�0017234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy sign into another 'double' number. 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 <http://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-20111211-stable/lib/copysignf.c��������������������������������������������������������������0000664�0000000�0000000�00000001575�11671051007�0017415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy sign into another 'float' number. 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 <http://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-20111211-stable/lib/copysignl.c��������������������������������������������������������������0000664�0000000�0000000�00000003361�11671051007�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy sign into another 'long double' number. 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 <http://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-20111211-stable/lib/cosf.c�������������������������������������������������������������������0000664�0000000�0000000�00000001513�11671051007�0016336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Cosine function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float cosf (float x) { return (float) cos ((double) x); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/coshf.c������������������������������������������������������������������0000664�0000000�0000000�00000001530�11671051007�0016505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hyperbolic cosine function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float coshf (float x) { return (float) cosh ((double) x); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/cosl.c�������������������������������������������������������������������0000664�0000000�0000000�00000006210�11671051007�0016343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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 /* sinl(x) * Return sine function of x. * * kernel function: * __kernel_sinl ... sine function on [-pi/4,pi/4] * __kernel_cosl ... cose 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-20111211-stable/lib/count-one-bits.h���������������������������������������������������������0000664�0000000�0000000�00000005304�11671051007�0020261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* count-one-bits.h -- counts the number of 1-bits in a word. 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 <http://www.gnu.org/licenses/>. */ /* Written by Ben Pfaff. */ #ifndef COUNT_ONE_BITS_H # define COUNT_ONE_BITS_H 1 #include <stdlib.h> #include "verify.h" /* Expand the code which computes the number of 1-bits of the local variable 'x' of type TYPE (an unsigned integer type) and returns it from the current function. */ #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) #define COUNT_ONE_BITS(BUILTIN, TYPE) \ return BUILTIN (x); #else #define COUNT_ONE_BITS(BUILTIN, TYPE) \ /* This condition is written so as to avoid shifting by more than \ 31 bits at once, and also avoids a random HP-UX cc bug. */ \ verify (((TYPE) -1 >> 31 >> 31 >> 2) == 0); /* TYPE has at most 64 bits */ \ int count = count_one_bits_32 (x); \ if (1 < (TYPE) -1 >> 31) /* TYPE has more than 32 bits? */ \ count += count_one_bits_32 (x >> 31 >> 1); \ return count; /* Compute and return the number of 1-bits set in the least significant 32 bits of X. */ static 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); } #endif /* Compute and return the number of 1-bits set in X. */ static inline int count_one_bits (unsigned int x) { COUNT_ONE_BITS (__builtin_popcount, unsigned int); } /* Compute and return the number of 1-bits set in X. */ static inline int count_one_bits_l (unsigned long int x) { COUNT_ONE_BITS (__builtin_popcountl, unsigned long int); } #if HAVE_UNSIGNED_LONG_LONG_INT /* Compute and return the number of 1-bits set in X. */ static inline int count_one_bits_ll (unsigned long long int x) { COUNT_ONE_BITS (__builtin_popcountll, unsigned long long int); } #endif #endif /* COUNT_ONE_BITS_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/crc.c��������������������������������������������������������������������0000664�0000000�0000000�00000011402�11671051007�0016151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* crc.c -- cyclic redundancy checks Copyright (C) 2005-2006, 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/crc.h��������������������������������������������������������������������0000664�0000000�0000000�00000003647�11671051007�0016172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* crc.h -- cyclic redundancy checks Copyright (C) 2005, 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 <http://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-20111211-stable/lib/creat-safer.c������������������������������������������������������������0000664�0000000�0000000�00000001722�11671051007�0017602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke creat, but avoid some glitches. Copyright (C) 2005-2006, 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 <http://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-20111211-stable/lib/csharpcomp.c�������������������������������������������������������������0000664�0000000�0000000�00000043640�11671051007�0017552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile a C# program. Copyright (C) 2003-2011 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 <http://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 cscc pnet mcs mono csc sscli We try the CIL interpreters in the following order: 1. "cscc", because it is a completely free system. 2. "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:".) 3. "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_pnet (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 cscc_tested; static bool cscc_present; if (!cscc_tested) { /* Test for presence of cscc: "cscc --version >/dev/null 2>/dev/null" */ char *argv[3]; int exitstatus; argv[0] = "cscc"; argv[1] = "--version"; argv[2] = NULL; exitstatus = execute ("cscc", "cscc", argv, false, false, true, true, true, false, NULL); cscc_present = (exitstatus == 0); cscc_tested = true; } if (cscc_present) { unsigned int argc; char **argv; char **argp; int exitstatus; unsigned int i; argc = 1 + (output_is_library ? 1 : 0) + 2 + 2 * libdirs_count + 2 * libraries_count + (optimize ? 1 : 0) + (debug ? 1 : 0) + sources_count; argv = (char **) xmalloca ((argc + 1) * sizeof (char *)); argp = argv; *argp++ = "cscc"; if (output_is_library) *argp++ = "-shared"; *argp++ = "-o"; *argp++ = (char *) output_file; for (i = 0; i < libdirs_count; i++) { *argp++ = "-L"; *argp++ = (char *) libdirs[i]; } for (i = 0; i < libraries_count; i++) { *argp++ = "-l"; *argp++ = (char *) libraries[i]; } if (optimize) *argp++ = "-O"; if (debug) *argp++ = "-g"; 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 (12 + strlen (source_file) + 1); memcpy (option, "-fresources=", 12); strcpy (option + 12, source_file); *argp++ = option; } else *argp++ = (char *) 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 ("cscc", "cscc", argv, false, false, false, false, true, true, NULL); for (i = 0; i < sources_count; i++) if (argv[argc - sources_count + i] != sources[i]) freea (argv[argc - sources_count + i]); freea (argv); return (exitstatus != 0); } else return -1; } 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" */ 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, 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; char **argv; 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 = (char **) xmalloca ((argc + 1) * sizeof (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++ = (char *) 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, 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 (argv[i]); for (i = 0; i < sources_count; i++) if (argv[argc - sources_count + i] != sources[i]) freea (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; }" */ 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, 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; char **argv; char **argp; int exitstatus; unsigned int i; argc = 1 + 1 + 1 + libdirs_count + libraries_count + (optimize ? 1 : 0) + (debug ? 1 : 0) + sources_count; argv = (char **) xmalloca ((argc + 1) * sizeof (char *)); argp = argv; *argp++ = "csc"; *argp++ = (char *) (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++ = (char *) 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, false, false, false, false, true, true, NULL); for (i = 2; i < 3 + libdirs_count + libraries_count; i++) freea (argv[i]); for (i = 0; i < sources_count; i++) if (argv[argc - sources_count + i] != sources[i]) freea (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_PNET result = compile_csharp_using_pnet (sources, sources_count, libdirs, libdirs_count, libraries, libraries_count, output_file, output_is_library, optimize, debug, verbose); if (result >= 0) return (bool) result; #endif #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_PNET result = compile_csharp_using_pnet (sources, sources_count, libdirs, libdirs_count, libraries, libraries_count, output_file, output_is_library, optimize, debug, verbose); if (result >= 0) return (bool) result; #endif #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 pnet")); return true; } ������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/csharpcomp.h�������������������������������������������������������������0000664�0000000�0000000�00000003507�11671051007�0017555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile a C# program. Copyright (C) 2003, 2009-2011 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 <http://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-20111211-stable/lib/csharpexec.c�������������������������������������������������������������0000664�0000000�0000000�00000023157�11671051007�0017541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Execute a C# program. Copyright (C) 2003-2011 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 <http://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 __WIN32__ || defined __CYGWIN__ /* Win32, Cygwin */ #define CLASSPATHVAR "PATH" #elif defined __APPLE__ && defined __MACH__ /* MacOS 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 ilrun pnet 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. "ilrun", because it is a completely free system. 2. "mono", because it is a partially free system but doesn't integrate well with Unix. 3. "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_pnet (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 ilrun_tested; static bool ilrun_present; if (!ilrun_tested) { /* Test for presence of ilrun: "ilrun --version >/dev/null 2>/dev/null" */ char *argv[3]; int exitstatus; argv[0] = "ilrun"; argv[1] = "--version"; argv[2] = NULL; exitstatus = execute ("ilrun", "ilrun", argv, false, false, true, true, true, false, NULL); ilrun_present = (exitstatus == 0); ilrun_tested = true; } if (ilrun_present) { unsigned int argc; char **argv; char **argp; unsigned int i; bool err; argc = 1 + 2 * libdirs_count + 1 + nargs; argv = (char **) xmalloca ((argc + 1) * sizeof (char *)); argp = argv; *argp++ = "ilrun"; for (i = 0; i < libdirs_count; i++) { *argp++ = "-L"; *argp++ = (char *) libdirs[i]; } *argp++ = (char *) assembly_path; for (i = 0; i < nargs; i++) *argp++ = (char *) args[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); } err = executer ("ilrun", "ilrun", argv, private_data); freea (argv); return err; } else return -1; } 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" */ char *argv[3]; int exitstatus; argv[0] = "mono"; argv[1] = "--version"; argv[2] = NULL; exitstatus = execute ("mono", "mono", argv, false, false, true, true, true, false, NULL); mono_present = (exitstatus == 0); mono_tested = true; } if (mono_present) { char *old_monopath; char **argv = (char **) xmalloca ((2 + nargs + 1) * sizeof (char *)); unsigned int i; bool err; /* Set MONO_PATH. */ old_monopath = set_monopath (libdirs, libdirs_count, false, verbose); argv[0] = "mono"; argv[1] = (char *) assembly_path; for (i = 0; i <= nargs; i++) argv[2 + i] = (char *) 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" */ char *argv[2]; int exitstatus; argv[0] = "clix"; argv[1] = NULL; exitstatus = execute ("clix", "clix", argv, false, false, true, true, true, false, NULL); clix_present = (exitstatus == 0 || exitstatus == 1); clix_tested = true; } if (clix_present) { char *old_clixpath; char **argv = (char **) xmalloca ((2 + nargs + 1) * sizeof (char *)); unsigned int i; bool err; /* Set clix' PATH variable. */ old_clixpath = set_clixpath (libdirs, libdirs_count, false, verbose); argv[0] = "clix"; argv[1] = (char *) assembly_path; for (i = 0; i <= nargs; i++) argv[2 + i] = (char *) 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_PNET result = execute_csharp_using_pnet (assembly_path, libdirs, libdirs_count, args, nargs, verbose, quiet, executer, private_data); if (result >= 0) return (bool) result; #endif #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_PNET result = execute_csharp_using_pnet (assembly_path, libdirs, libdirs_count, args, nargs, verbose, quiet, executer, private_data); if (result >= 0) return (bool) result; #endif #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 pnet")); return true; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/csharpexec.h�������������������������������������������������������������0000664�0000000�0000000�00000003671�11671051007�0017545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Execute a C# program. Copyright (C) 2003, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _CSHARPEXEC_H #define _CSHARPEXEC_H #include <stdbool.h> typedef bool execute_fn (const char *progname, const char *prog_path, char **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-20111211-stable/lib/ctype.in.h���������������������������������������������������������������0000664�0000000�0000000�00000003532�11671051007�0017145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <ctype.h>, for platforms on which it is incomplete. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible. */ /* * ISO C 99 <ctype.h> for platforms on which it is incomplete. * <http://www.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-20111211-stable/lib/cycle-check.c������������������������������������������������������������0000664�0000000�0000000�00000005207�11671051007�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* help detect directory cycles efficiently Copyright (C) 2003-2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering */ #include <config.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <stdbool.h> #include "cycle-check.h" #define CC_MAGIC 9827862 /* Return true if I is a power of 2, or is zero. */ static inline 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) { assert (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-20111211-stable/lib/cycle-check.h������������������������������������������������������������0000664�0000000�0000000�00000003712�11671051007�0017566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* help detect directory cycles efficiently Copyright (C) 2003-2004, 2006, 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 <http://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-20111211-stable/lib/des.c��������������������������������������������������������������������0000664�0000000�0000000�00000067301�11671051007�0016166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* des.c --- DES and Triple-DES encryption/decryption Algorithm * Copyright (C) 1998-1999, 2001-2007, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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 orginal 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 = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \ right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | 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-20111211-stable/lib/des.h��������������������������������������������������������������������0000664�0000000�0000000�00000007332�11671051007�0016171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* des.h --- DES cipher implementation. * Copyright (C) 2005, 2007, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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-20111211-stable/lib/dev-ino.h����������������������������������������������������������������0000664�0000000�0000000�00000000224�11671051007�0016750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/di-set.c�����������������������������������������������������������������0000664�0000000�0000000�00000016301�11671051007�0016572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set operations for device-inode pairs stored in a space-efficient manner. Copyright 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 <http://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); 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-20111211-stable/lib/di-set.h�����������������������������������������������������������������0000664�0000000�0000000�00000001046�11671051007�0016577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _GL_DI_SET_H # define _GL_DI_SET_H # include <sys/types.h> # undef _GL_ATTRIBUTE_NONNULL # if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || 3 < __GNUC__ # define _GL_ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m))) # else # define _GL_ATTRIBUTE_NONNULL(m) # endif struct di_set *di_set_alloc (void); int di_set_insert (struct di_set *, dev_t, ino_t) _GL_ATTRIBUTE_NONNULL (1); void di_set_free (struct di_set *) _GL_ATTRIBUTE_NONNULL (1); int di_set_lookup (struct di_set *dis, dev_t dev, ino_t ino) _GL_ATTRIBUTE_NONNULL (1); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/diacrit.c����������������������������������������������������������������0000664�0000000�0000000�00000017405�11671051007�0017032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Diacritics processing for a few character codes. Copyright (C) 1990-1993, 2000, 2006, 2009-2011 Free Software Foundation, Inc. François Pinard <pinard@iro.umontreal.ca>, 1988. All this file is a temporary hack, waiting for locales in GNU. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include "diacrit.h" /* ISO 8859-1 Latin-1 code is used as the underlying character set. If MSDOS is defined, IBM-PC's character set code is used instead. */ /*--------------------------------------------------------------------. | For each alphabetic character, returns what it would be without its | | possible diacritic symbol. | `--------------------------------------------------------------------*/ const char diacrit_base[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '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', 0, 0, 0, 0, 0, 0, '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', 0, 0, 0, 0, 0, #ifdef __MSDOS__ 'C', 'u', 'e', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'i', 'i', 'i', 'A', 'A', 'E', 'e', 'E', 'o', 'o', 'o', 'u', 'u', 'y', 'O', 'U', 0, 0, 0, 0, 0, 'a', 'i', 'o', 'u', 'n', 'N', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #else 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 0, 'N', 'O', 'O', 'O', 'O', 'O', 0, 'O', 'U', 'U', 'U', 'U', 'Y', 0, 0, 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 0, 'n', 'o', 'o', 'o', 'o', 'o', 0, 'o', 'u', 'u', 'u', 'u', 'y', 0, 'y', #endif }; /*------------------------------------------------------------------------. | For each alphabetic character, returns a code of what its diacritic is, | | according to the following codes: 1 (eE) over aA for latin diphtongs; 2 | | (') acute accent; 3 (`) grave accent; 4 (^) circumflex accent; 5 (") | | umlaut or diaraesis; 6 (~) tilda; 7 (,) cedilla; 8 (o) covering degree | | symbol; 9 (|) slashed character. | `------------------------------------------------------------------------*/ const char diacrit_diac[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 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, 6, 0, #ifdef __MSDOS__ 7, 5, 2, 4, 5, 3, 8, 7, 4, 5, 3, 5, 4, 3, 5, 8, 2, 1, 1, 4, 5, 3, 4, 3, 5, 5, 5, 0, 0, 0, 0, 0, 2, 2, 2, 2, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #else 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 4, 6, 5, 8, 1, 7, 3, 2, 4, 5, 3, 2, 4, 5, 0, 6, 3, 2, 4, 6, 5, 0, 9, 3, 2, 4, 5, 2, 0, 0, 3, 2, 4, 6, 5, 8, 1, 7, 3, 2, 4, 5, 3, 2, 4, 5, 0, 6, 3, 2, 4, 6, 5, 0, 9, 3, 2, 4, 5, 2, 0, 0, #endif }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/diacrit.h����������������������������������������������������������������0000664�0000000�0000000�00000002432�11671051007�0017031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Diacritics processing for a few character codes. Copyright (C) 1990-1993, 2009-2011 Free Software Foundation, Inc. François Pinard <pinard@iro.umontreal.ca>, 1988. All this file is a temporary hack, waiting for locales in GNU. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ extern const char diacrit_base[]; /* characters without diacritics */ extern const char diacrit_diac[]; /* diacritic code for each character */ /* Returns CHAR without its diacritic. CHAR is known to be alphabetic. */ #define tobase(Char) (diacrit_base[(unsigned char) (Char)]) /* Returns a diacritic code for CHAR. CHAR is known to be alphabetic. */ #define todiac(Char) (diacrit_diac[(unsigned char) (Char)]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/diffseq.h����������������������������������������������������������������0000664�0000000�0000000�00000041465�11671051007�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Analyze differences between two vectors. Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-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 <http://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 Myers, Algorithmica Vol. 1 No. 2, 1986, pp. 251-266; 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", E. Ukkonen, Information and Control Vol. 64, 1985, pp. 100-118. 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 ssize_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]. 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 /* Use this to suppress gcc's `...may be used before initialized' warnings. Beware: The Code argument must not contain commas. */ #ifndef IF_LINT # ifdef lint # define IF_LINT(Code) Code # else # define IF_LINT(Code) /* empty */ # endif #endif /* As above, but when Code must contain one comma. */ #ifndef IF_LINT2 # ifdef lint # define IF_LINT2(Code1, Code2) Code1, Code2 # else # define IF_LINT2(Code1, Code2) /* 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 -H flag. With this heuristic, for vectors with a constant small density of changes, the algorithm is linear in the vectors 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 /* 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 && ctxt->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; } } } #endif /* USE_HEURISTIC */ /* 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 /* 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++; } else if (yoff == ylim) while (xoff < xlim) { NOTE_DELETE (ctxt, xoff); if (EARLY_ABORT (ctxt)) return true; xoff++; } else { struct partition part IF_LINT2 (= { .xmid = 0, .ymid = 0 }); /* 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. */ if (compareseq (xoff, part.xmid, yoff, part.ymid, part.lo_minimal, ctxt)) return true; if (compareseq (part.xmid, xlim, part.ymid, ylim, part.hi_minimal, ctxt)) return true; } 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-20111211-stable/lib/dirchownmod.c������������������������������������������������������������0000664�0000000�0000000�00000011463�11671051007�0017726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Change the ownership and mode bits of a directory. Copyright (C) 2006-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 <http://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-20111211-stable/lib/dirchownmod.h������������������������������������������������������������0000664�0000000�0000000�00000000142�11671051007�0017723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <sys/types.h> int dirchownmod (int, char const *, mode_t, uid_t, gid_t, mode_t, mode_t); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/dirent--.h���������������������������������������������������������������0000664�0000000�0000000�00000001547�11671051007�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like dirent.h, but redefine some names to avoid glitches. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include "dirent-safer.h" #undef opendir #define opendir opendir_safer ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/dirent-private.h���������������������������������������������������������0000664�0000000�0000000�00000002750�11671051007�0020352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Private details of the DIR type. 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 <http://www.gnu.org/licenses/>. */ #ifndef _DIRENT_PRIVATE_H #define _DIRENT_PRIVATE_H 1 #define WIN32_LEAN_AND_MEAN #include <windows.h> 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-20111211-stable/lib/dirent-safer.h�����������������������������������������������������������0000664�0000000�0000000�00000001530�11671051007�0017773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke dirent-like functions, but avoid some glitches. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include <dirent.h> DIR *opendir_safer (const char *name); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/dirent.in.h��������������������������������������������������������������0000664�0000000�0000000�00000020170�11671051007�0017303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <dirent.h>. Copyright (C) 2006-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 <http://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 /* 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_OPENDIR@ # if @REPLACE_OPENDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef opendir # define opendir rpl_opendir # endif _GL_FUNCDECL_RPL (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (opendir, DIR *, (const char *dir_name)); # else # if !@HAVE_OPENDIR@ _GL_FUNCDECL_SYS (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (opendir, DIR *, (const char *dir_name)); # endif _GL_CXXALIASWARN (opendir); #elif 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 #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_CLOSEDIR@ # if @REPLACE_CLOSEDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef closedir # define closedir rpl_closedir # 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_DIRFD@ /* Return the file descriptor associated with the given directory stream, or -1 if none exists. */ # if @REPLACE_DIRFD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dirfd # define dirfd rpl_dirfd # endif _GL_FUNCDECL_RPL (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (dirfd, int, (DIR *)); # 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_CXXALIAS_RPL (fdopendir, DIR *, (int fd)); # else # if !@HAVE_FDOPENDIR@ || !@HAVE_DECL_FDOPENDIR@ _GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd)); # endif _GL_CXXALIAS_SYS (fdopendir, DIR *, (int fd)); # endif _GL_CXXALIASWARN (fdopendir); #elif 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 #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_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-20111211-stable/lib/dirfd.c������������������������������������������������������������������0000664�0000000�0000000�00000001735�11671051007�0016502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirfd.c -- return the file descriptor associated with an open DIR* Copyright (C) 2001, 2006, 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include <dirent.h> #include <errno.h> int dirfd (DIR *dir_p) { int fd = DIR_TO_FD (dir_p); if (fd == -1) errno = ENOTSUP; return fd; } �����������������������������������gnulib-20111211-stable/lib/dirname-lgpl.c�����������������������������������������������������������0000664�0000000�0000000�00000006120�11671051007�0017756�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-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 <http://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-20111211-stable/lib/dirname.c����������������������������������������������������������������0000664�0000000�0000000�00000002263�11671051007�0017026�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-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 <http://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-20111211-stable/lib/dirname.h����������������������������������������������������������������0000664�0000000�0000000�00000002651�11671051007�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Take file names apart into directory and base names. Copyright (C) 1998, 2001, 2003-2006, 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 <http://www.gnu.org/licenses/>. */ #ifndef DIRNAME_H_ # define DIRNAME_H_ 1 # include <stdbool.h> # include <stddef.h> # include "dosname.h" # ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' # endif # ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 # endif # if GNULIB_DIRNAME char *base_name (char const *file); char *dir_name (char const *file); # endif char *mdir_name (char const *file); size_t base_len (char const *file) _GL_ATTRIBUTE_PURE; size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; char *last_component (char const *file) _GL_ATTRIBUTE_PURE; bool strip_trailing_slashes (char *file); #endif /* not DIRNAME_H_ */ ���������������������������������������������������������������������������������������gnulib-20111211-stable/lib/dosname.h����������������������������������������������������������������0000664�0000000�0000000�00000003733�11671051007�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* File names on MS-DOS/Windows systems. Copyright (C) 2000-2001, 2004-2006, 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 <http://www.gnu.org/licenses/>. From Paul Eggert and Jim Meyering. */ #ifndef _DOSNAME_H #define _DOSNAME_H #if (defined _WIN32 || defined __WIN32__ || \ defined __MSDOS__ || defined __CYGWIN__ || \ defined __EMX__ || defined __DJGPP__) /* This internal macro assumes ASCII, but all hosts that support drive letters use ASCII. */ # define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ <= 'z' - 'a') # define FILE_SYSTEM_PREFIX_LEN(Filename) \ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) # ifndef __CYGWIN__ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 # endif # define ISSLASH(C) ((C) == '/' || (C) == '\\') #else # define FILE_SYSTEM_PREFIX_LEN(Filename) 0 # define ISSLASH(C) ((C) == '/') #endif #ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 #endif #if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) # else # define IS_ABSOLUTE_FILE_NAME(F) \ (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) #endif #define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) #endif /* DOSNAME_H_ */ �������������������������������������gnulib-20111211-stable/lib/dprintf.c����������������������������������������������������������������0000664�0000000�0000000�00000003077�11671051007�0017061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a file descriptor. Copyright (C) 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 <http://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) { int saved_errno = errno; free (output); errno = saved_errno; } return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/dtoastr.c����������������������������������������������������������������0000664�0000000�0000000�00000000046�11671051007�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define LENGTH 2 #include "ftoastr.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/dtotimespec.c������������������������������������������������������������0000664�0000000�0000000�00000003356�11671051007�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert double to timespec. 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 <http://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) { enum { BILLION = 1000 * 1000 * 1000 }; double min_representable = TYPE_MINIMUM (time_t); double max_representable = ((TYPE_MAXIMUM (time_t) * (double) BILLION + (BILLION - 1)) / BILLION); struct timespec r; if (! (min_representable < sec)) { r.tv_sec = TYPE_MINIMUM (time_t); r.tv_nsec = 0; } else if (! (sec < max_representable)) { r.tv_sec = TYPE_MAXIMUM (time_t); r.tv_nsec = BILLION - 1; } else { time_t s = sec; double frac = BILLION * (sec - s); long ns = frac; ns += ns < frac; s += ns / BILLION; ns %= BILLION; if (ns < 0) { s--; ns += BILLION; } r.tv_sec = s; r.tv_nsec = ns; } return r; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/dummy.c������������������������������������������������������������������0000664�0000000�0000000�00000003254�11671051007�0016543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A dummy file, to prevent empty libraries from breaking builds. Copyright (C) 2004, 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 <http://www.gnu.org/licenses/>. */ /* 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-20111211-stable/lib/dup-safer-flag.c���������������������������������������������������������0000664�0000000�0000000�00000002471�11671051007�0020205�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-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 <http://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> #include "cloexec.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-20111211-stable/lib/dup-safer.c��������������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0017272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke dup, but avoid some glitches. Copyright (C) 2001, 2004-2006, 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 <http://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-20111211-stable/lib/dup.c��������������������������������������������������������������������0000664�0000000�0000000�00000002454�11671051007�0016201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include "msvc-inval.h" #undef dup #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static inline 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 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-20111211-stable/lib/dup2.c�������������������������������������������������������������������0000664�0000000�0000000�00000007021�11671051007�0016256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor to a specified file descriptor. Copyright (C) 1999, 2004-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 <http://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #if HAVE_DUP2 # undef dup2 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "msvc-inval.h" /* Get _get_osfhandle. */ # include "msvc-nothrow.h" 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: http://bugs.winehq.org/show_bug.cgi?id=21289 */ if (desired_fd < 0) { errno = EBADF; return -1; } TRY_MSVC_INVAL { result = dup2 (fd, desired_fd); } CATCH_MSVC_INVAL { errno = EBADF; result = -1; } DONE_MSVC_INVAL; if (result == 0) result = desired_fd; return result; } # define dup2 ms_windows_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 Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ 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; } #else /* !HAVE_DUP2 */ /* On older platforms, dup2 did not exist. */ # ifndef F_DUPFD static int dupfd (int fd, int desired_fd) { int duplicated_fd = dup (fd); if (duplicated_fd < 0 || duplicated_fd == desired_fd) return duplicated_fd; else { int r = dupfd (fd, desired_fd); int e = errno; close (duplicated_fd); errno = e; return r; } } # endif int dup2 (int fd, int desired_fd) { int result = fcntl (fd, F_GETFL) < 0 ? -1 : fd; if (result == -1 || fd == desired_fd) return result; close (desired_fd); # ifdef F_DUPFD result = fcntl (fd, F_DUPFD, desired_fd); # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif # else result = dupfd (fd, desired_fd); # endif if (result == -1 && (errno == EMFILE || errno == EINVAL)) errno = EBADF; return result; } #endif /* !HAVE_DUP2 */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/dup3.c�������������������������������������������������������������������0000664�0000000�0000000�00000005152�11671051007�0016262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a file descriptor, applying specific flags. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 /* 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) setmode (newfd, O_BINARY); else if (flags & O_TEXT) setmode (newfd, O_TEXT); #endif return newfd; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/duplocale.c��������������������������������������������������������������0000664�0000000�0000000�00000006331�11671051007�0017357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a locale object. Copyright (C) 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 <http://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 <http://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. */ 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 }; const char *base_name; locale_t base_copy; unsigned int i; base_name = setlocale (LC_CTYPE, 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; const char *name = setlocale (category, 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-20111211-stable/lib/eealloc.h����������������������������������������������������������������0000664�0000000�0000000�00000005324�11671051007�0017021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation with expensive empty allocations. Copyright (C) 2003, 2008, 2010-2011 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 <http://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> #if MALLOC_0_IS_NONNULL # define eemalloc malloc #else # if __GNUC__ >= 3 static inline void *eemalloc (size_t n) __attribute__ ((__malloc__)) # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) __attribute__ ((__alloc_size__ (1))) # endif ; # endif static 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 # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) static inline void *eerealloc (void *p, size_t n) __attribute__ ((__alloc_size__ (2))); # endif static 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. */ #endif /* _EEALLOC_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/errno.in.h���������������������������������������������������������������0000664�0000000�0000000�00000014177�11671051007�0017155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <errno.h>. Copyright (C) 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 __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 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 ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ENOTRECOVERABLE 127 /* not required by POSIX */ # define EOWNERDEAD 133 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESOCK 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 #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/error.c������������������������������������������������������������������0000664�0000000�0000000�00000024060�11671051007�0016537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 #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) INTUSE(_IO_fflush) (s) # undef putc # define putc(c, fp) INTUSE(_IO_putc) (c, fp) # include <bits/libc-lock.h> #else /* not _LIBC */ # include <fcntl.h> # include <unistd.h> # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !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 (); # else int strerror_r (); # endif # endif /* The calling program should define program_name and set it to the name of the executing program. */ extern char *program_name; # if HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static inline int is_open (int fd) { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On Win32: 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 inline 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 defined HAVE_STRERROR_R || _LIBC char errbuf[1024]; # if STRERROR_R_CHAR_P || _LIBC 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 error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { # define ALLOCA_LIMIT 2000 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 / 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); va_end (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); #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 || 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:%d: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%d: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, 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-20111211-stable/lib/error.h������������������������������������������������������������������0000664�0000000�0000000�00000004746�11671051007�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declaration for error-reporting function Copyright (C) 1995-1997, 2003, 2006, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _ERROR_H #define _ERROR_H 1 /* 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. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #ifdef __cplusplus extern "C" { #endif /* Print a message with `fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ extern void error (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); extern void error_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 5, 6)); /* 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-20111211-stable/lib/euidaccess.c�������������������������������������������������������������0000664�0000000�0000000�00000013524�11671051007�0017521�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-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 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); #else /* MacOS X, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, mingw, 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) return stat (file, &stats); 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) != 0) return -1; /* The super-user can read and write any file, and execute any file that anyone can execute. */ if (euid == 0 && ((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> char *program_name; int main (int argc, char **argv) { char *file; int mode; int err; program_name = argv[0]; 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-20111211-stable/lib/exclude.c����������������������������������������������������������������0000664�0000000�0000000�00000033756�11671051007�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* exclude.c -- exclude file names Copyright (C) 1992-1994, 1997, 1999-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 <http://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 "exclude.h" #include "hash.h" #include "mbuiter.h" #include "fnmatch.h" #include "xalloc.h" #include "verify.h" #if USE_UNLOCKED_IO # 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 { char const *pattern; int options; }; /* An array of pattern-options pairs. */ struct exclude_pattern { struct patopts *exclude; size_t exclude_alloc; size_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; }; /* The exclude structure keeps a singly-linked list of exclude segments */ struct exclude { struct exclude_segment *head, *tail; }; /* Return true if str has wildcard characters */ bool fnmatch_pattern_has_wildcards (const char *str, int options) { const char *cset = "\\?*[]"; if (options & FNM_NOESCAPE) cset++; while (*str) { size_t n = strcspn (str, cset); if (str[n] == 0) break; else if (str[n] == '\\') { str += n + 1; if (*str) str++; } else return true; } return false; } static void unescape_pattern (char *str) { int inset = 0; char *q = str; do { if (inset) { if (*q == ']') inset = 0; } else if (*q == '[') inset = 1; else if (*q == '\\') q++; } 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) % n_buckets; } return value; } /* 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 tail of list in EX */ static struct exclude_segment * 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; } if (ex->tail) ex->tail->next = sp; else ex->head = sp; ex->tail = sp; return sp; } /* Free a single exclude segment */ static void free_exclude_segment (struct exclude_segment *seg) { switch (seg->type) { case exclude_pattern: 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; for (seg = ex->head; seg; ) { struct exclude_segment *next = seg->next; free_exclude_segment (seg); seg = 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; } /* Return true if the exclude_pattern segment SEG excludes F. */ static bool excluded_file_pattern_p (struct exclude_segment const *seg, char const *f) { size_t exclude_count = seg->v.pat.exclude_count; struct patopts const *exclude = seg->v.pat.exclude; size_t i; bool excluded = !! (exclude[0].options & EXCLUDE_INCLUDE); /* Scan through the options, until they change excluded */ for (i = 0; i < exclude_count; i++) { char const *pattern = exclude[i].pattern; int options = exclude[i].options; if (exclude_fnmatch (pattern, f, options)) return !excluded; } return excluded; } /* Return true if the exclude_hash segment SEG excludes F. BUFFER is an auxiliary storage of the same length as F (with nul terminator included) */ static bool excluded_file_name_p (struct exclude_segment const *seg, char const *f, char *buffer) { int options = seg->options; bool excluded = !! (options & EXCLUDE_INCLUDE); Hash_table *table = seg->v.table; do { /* initialize the pattern */ strcpy (buffer, f); while (1) { if (hash_lookup (table, buffer)) return !excluded; 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 excluded; } /* Return true if EX excludes F. */ bool excluded_file_name (struct exclude const *ex, char const *f) { struct exclude_segment *seg; bool excluded; char *filename = NULL; /* If no patterns are given, the default is to include. */ if (!ex->head) return false; /* Otherwise, the default is the opposite of the first option. */ excluded = !! (ex->head->options & EXCLUDE_INCLUDE); /* Scan through the segments, seeing whether they change status from excluded to included or vice versa. */ for (seg = ex->head; seg; seg = seg->next) { bool rc; switch (seg->type) { case exclude_pattern: rc = excluded_file_pattern_p (seg, f); break; case exclude_hash: if (!filename) filename = xmalloc (strlen (f) + 1); rc = excluded_file_name_p (seg, f, filename); break; default: abort (); } if (rc != excluded) { excluded = rc; break; } } free (filename); return excluded; } /* Append to EX the exclusion PATTERN with OPTIONS. */ void add_exclude (struct exclude *ex, char const *pattern, int options) { struct exclude_segment *seg; if ((options & EXCLUDE_WILDCARDS) && fnmatch_pattern_has_wildcards (pattern, options)) { struct exclude_pattern *pat; struct patopts *patopts; if (ex->tail && ex->tail->type == exclude_pattern && ((ex->tail->options & EXCLUDE_INCLUDE) == (options & EXCLUDE_INCLUDE))) seg = ex->tail; else seg = new_exclude_segment (ex, exclude_pattern, options); pat = &seg->v.pat; if (pat->exclude_count == pat->exclude_alloc) pat->exclude = x2nrealloc (pat->exclude, &pat->exclude_alloc, sizeof *pat->exclude); patopts = &pat->exclude[pat->exclude_count++]; patopts->pattern = pattern; patopts->options = options; } else { char *str, *p; #define EXCLUDE_HASH_FLAGS (EXCLUDE_INCLUDE|EXCLUDE_ANCHORED|\ FNM_LEADING_DIR|FNM_CASEFOLD) if (ex->tail && ex->tail->type == exclude_hash && ((ex->tail->options & EXCLUDE_HASH_FLAGS) == (options & EXCLUDE_HASH_FLAGS))) seg = ex->tail; else seg = new_exclude_segment (ex, exclude_hash, options); str = xstrdup (pattern); if (options & 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 FILE. Return -1 on failure, 0 on success. */ 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; char *buf = NULL; char *p; char const *pattern; char const *lim; size_t buf_alloc = 0; size_t buf_count = 0; int c; int e = 0; if (use_stdin) in = stdin; else if (! (in = fopen (file_name, "r"))) return -1; while ((c = getc (in)) != EOF) { if (buf_count == buf_alloc) buf = x2realloc (buf, &buf_alloc); buf[buf_count++] = c; } if (ferror (in)) e = errno; if (!use_stdin && fclose (in) != 0) e = errno; buf = xrealloc (buf, buf_count + 1); buf[buf_count] = line_end; lim = buf + buf_count + ! (buf_count == 0 || buf[buf_count - 1] == line_end); 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); next_pattern: pattern = p + 1; } errno = e; return e ? -1 : 0; } ������������������gnulib-20111211-stable/lib/exclude.h����������������������������������������������������������������0000664�0000000�0000000�00000003615�11671051007�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* exclude.h -- declarations for excluding file names Copyright (C) 1992-1994, 1997, 1999, 2001-2003, 2005-2006, 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 <http://www.gnu.org/licenses/>. */ #ifndef _GL_EXCLUDE_H #define _GL_EXCLUDE_H 1 #include <stdbool.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) struct exclude; bool fnmatch_pattern_has_wildcards (const char *, int) _GL_ATTRIBUTE_PURE; struct exclude *new_exclude (void); void free_exclude (struct exclude *); void add_exclude (struct exclude *, char const *, int); int add_exclude_file (void (*) (struct exclude *, char const *, int), struct exclude *, char const *, int, char); bool excluded_file_name (struct exclude const *, char const *); bool exclude_fnmatch (char const *pattern, char const *f, int options); #endif /* _GL_EXCLUDE_H */ �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/execute.c����������������������������������������������������������������0000664�0000000�0000000�00000021735�11671051007�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of autonomous subprocesses. Copyright (C) 2001-2004, 2006-2011 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 <http://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 "error.h" #include "fatal-signal.h" #include "wait-process.h" #include "gettext.h" #define _(str) gettext (str) #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 API. */ # include <process.h> # include "w32spawn.h" #else /* Unix API. */ # include <spawn.h> #endif /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close #ifdef EINTR /* 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 inline int nonintr_close (int fd) { int retval; do retval = close (fd); while (retval < 0 && errno == EINTR); return retval; } #define close nonintr_close static inline 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 /* 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. If slave_process is true, the child process will be terminated when its creator receives a catchable fatal signal. */ int execute (const char *progname, const char *prog_path, char **prog_argv, bool ignore_sigpipe, bool null_stdin, bool null_stdout, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 API. */ int orig_stdin; int orig_stdout; int orig_stderr; int exitcode; int nullinfd; int nulloutfd; /* FIXME: Need to free memory allocated by prepare_spawn. */ prog_argv = prepare_spawn (prog_argv); /* Save standard file handles of parent process. */ if (null_stdin) orig_stdin = dup_safer_noinherit (STDIN_FILENO); if (null_stdout) orig_stdout = dup_safer_noinherit (STDOUT_FILENO); if (null_stderr) orig_stderr = dup_safer_noinherit (STDERR_FILENO); exitcode = -1; /* Create standard file handles of child process. */ nullinfd = -1; nulloutfd = -1; if ((!null_stdin || ((nullinfd = open ("NUL", O_RDONLY, 0)) >= 0 && (nullinfd == STDIN_FILENO || (dup2 (nullinfd, STDIN_FILENO) >= 0 && close (nullinfd) >= 0)))) && (!(null_stdout || null_stderr) || ((nulloutfd = open ("NUL", O_RDWR, 0)) >= 0 && (!null_stdout || nulloutfd == STDOUT_FILENO || dup2 (nulloutfd, STDOUT_FILENO) >= 0) && (!null_stderr || nulloutfd == STDERR_FILENO || dup2 (nulloutfd, STDERR_FILENO) >= 0) && ((null_stdout && nulloutfd == STDOUT_FILENO) || (null_stderr && nulloutfd == STDERR_FILENO) || close (nulloutfd) >= 0)))) /* Use spawnvpe and pass the environment explicitly. This is needed if the program has modified the environment using putenv() or [un]setenv(). On Windows, programs 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. When using spawnvp() without 'e', the child process inherits a copy of the environment block - ignoring the effects of putenv() and [un]setenv(). */ { exitcode = spawnvpe (P_WAIT, prog_path, (const char **) prog_argv, (const char **) environ); if (exitcode < 0 && 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 prog_argv. */ --prog_argv; exitcode = spawnvpe (P_WAIT, prog_argv[0], (const char **) prog_argv, (const char **) environ); } } if (nulloutfd >= 0) close (nulloutfd); if (nullinfd >= 0) close (nullinfd); /* Restore standard file handles of parent process. */ if (null_stderr) undup_safer_noinherit (orig_stderr, STDERR_FILENO); if (null_stdout) undup_safer_noinherit (orig_stdout, STDOUT_FILENO); if (null_stdin) undup_safer_noinherit (orig_stdin, STDIN_FILENO); if (termsigp != NULL) *termsigp = 0; if (exitcode == -1) { if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, errno, _("%s subprocess failed"), progname); return 127; } 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) || (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))) || (err = posix_spawnp (&child, prog_path, &actions, attrs_allocated ? &attrs : NULL, 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 (termsigp != NULL) *termsigp = 0; if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, err, _("%s subprocess failed"), progname); return 127; } posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); if (slave_process) { register_slave_subprocess (child); unblock_fatal_signals (); } return wait_subprocess (child, progname, ignore_sigpipe, null_stderr, slave_process, exit_on_error, termsigp); #endif } �����������������������������������gnulib-20111211-stable/lib/execute.h����������������������������������������������������������������0000664�0000000�0000000�00000004002�11671051007�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of autonomous subprocesses. Copyright (C) 2001-2003, 2008-2011 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 <http://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. 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 pipe.h for the reason. */ extern int execute (const char *progname, const char *prog_path, char **prog_argv, 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-20111211-stable/lib/exitfail.c���������������������������������������������������������������0000664�0000000�0000000�00000001533�11671051007�0017213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Failure exit status Copyright (C) 2002-2003, 2005-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "exitfail.h" #include <stdlib.h> int volatile exit_failure = EXIT_FAILURE; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/exitfail.h���������������������������������������������������������������0000664�0000000�0000000�00000001402�11671051007�0017213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Failure exit status Copyright (C) 2002, 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 <http://www.gnu.org/licenses/>. */ extern int volatile exit_failure; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/expf.c�������������������������������������������������������������������0000664�0000000�0000000�00000001520�11671051007�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Exponential function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float expf (float x) { return (float) exp ((double) x); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/expl.c�������������������������������������������������������������������0000664�0000000�0000000�00000006772�11671051007�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for expl. Contributed by Paolo Bonzini Copyright 2002-2003, 2007, 2009-2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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> static const long double C[] = { /* Chebyshev polynom coeficients for (exp(x)-1)/x */ # define P1 C[0] # define P2 C[1] # define P3 C[2] # define P4 C[3] # define P5 C[4] # define P6 C[5] 0.5L, 1.66666666666666666666666666666666683E-01L, 4.16666666666666666666654902320001674E-02L, 8.33333333333333333333314659767198461E-03L, 1.38888888889899438565058018857254025E-03L, 1.98412698413981650382436541785404286E-04L, /* Smallest integer x for which e^x overflows. */ # define himark C[6] 11356.523406294143949491931077970765L, /* Largest integer x for which e^x underflows. */ # define lomark C[7] -11433.4627433362978788372438434526231L, /* very small number */ # define TINY C[8] 1.0e-4900L, /* 2^16383 */ # define TWO16383 C[9] 5.94865747678615882542879663314003565E+4931L}; long double expl (long double x) { /* Check for usual case. */ if (x < himark && x > lomark) { int exponent; long double t, x22; int k = 1; long double result = 1.0; /* Compute an integer power of e with a granularity of 0.125. */ exponent = (int) floorl (x * 8.0L); x -= exponent / 8.0L; if (x > 0.0625) { exponent++; x -= 0.125L; } if (exponent < 0) { t = 0.8824969025845954028648921432290507362220L; /* e^-0.25 */ exponent = -exponent; } else t = 1.1331484530668263168290072278117938725655L; /* e^0.25 */ while (exponent) { if (exponent & k) { result *= t; exponent ^= k; } t *= t; k <<= 1; } /* Approximate (e^x - 1)/x, using a seventh-degree polynomial, with maximum error in [-2^-16-2^-53,2^-16+2^-53] less than 4.8e-39. */ x22 = x + x*x*(P1+x*(P2+x*(P3+x*(P4+x*(P5+x*P6))))); return result + result * x22; } /* Exceptional cases: */ else if (x < himark) { if (x + x == x) /* e^-inf == 0, with no error. */ return 0; else /* Underflow */ return TINY * TINY; } else /* Return x, if x is a NaN or Inf; or overflow, otherwise. */ return TWO16383*x; } #endif #if 0 int main (void) { printf ("%.16Lg\n", expl (1.0L)); printf ("%.16Lg\n", expl (-1.0L)); printf ("%.16Lg\n", expl (2.0L)); printf ("%.16Lg\n", expl (4.0L)); printf ("%.16Lg\n", expl (-2.0L)); printf ("%.16Lg\n", expl (-4.0L)); printf ("%.16Lg\n", expl (0.0625L)); printf ("%.16Lg\n", expl (0.3L)); printf ("%.16Lg\n", expl (0.6L)); } #endif ������gnulib-20111211-stable/lib/fabsf.c������������������������������������������������������������������0000664�0000000�0000000�00000001514�11671051007�0016466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Absolute value. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float fabsf (float x) { return (float) fabs ((double) x); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/faccessat.c��������������������������������������������������������������0000664�0000000�0000000�00000003346�11671051007�0017346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check the access rights of a file relative to an open directory. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #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 /* 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" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fatal-signal.c�����������������������������������������������������������0000664�0000000�0000000�00000017205�11671051007�0017753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emergency actions in case of a fatal signal. Copyright (C) 2003-2004, 2006-2011 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 <http://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 "sig-handler.h" #include "xalloc.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 /* Woe32 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) { 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 void (*action_t) (void); /* 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 inline void uninstall_handlers () { 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 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 (); } /* 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 inline void install_handlers () { 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]); } } /* Register a cleanup function to be executed when a catchable fatal signal occurs. */ void at_fatal_signal (action_t action) { static bool cleanup_initialized = false; if (!cleanup_initialized) { init_fatal_signals (); install_handlers (); cleanup_initialized = true; } 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 = XNMALLOC (new_actions_allocated, actions_entry_t); 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. */ if (old_actions != static_actions) free (old_actions); } /* 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++; } /* ========================================================================= */ static sigset_t fatal_signal_set; static void init_fatal_signal_set () { static bool fatal_signal_set_initialized = false; if (!fatal_signal_set_initialized) { 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]); fatal_signal_set_initialized = true; } } /* Temporarily delay the catchable fatal signals. */ void block_fatal_signals () { init_fatal_signal_set (); sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); } /* Stop delaying the catchable fatal signals. */ void unblock_fatal_signals () { init_fatal_signal_set (); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fatal-signal.h�����������������������������������������������������������0000664�0000000�0000000�00000006403�11671051007�0017756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emergency actions in case of a fatal signal. Copyright (C) 2003-2004, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #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 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. */ extern void at_fatal_signal (void (*function) (void)); /* 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); #ifdef __cplusplus } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fbufmode.c���������������������������������������������������������������0000664�0000000�0000000�00000005306�11671051007�0017177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fbufmode.h" #if HAVE___FLBF # include <stdio_ext.h> #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_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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ # 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; #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); #else # error "Please port gnulib fbufmode.c to your platform! Look at the setvbuf implementation." #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fbufmode.h���������������������������������������������������������������0000664�0000000�0000000�00000002112�11671051007�0017174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://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-20111211-stable/lib/fchdir.c�����������������������������������������������������������������0000664�0000000�0000000�00000013376�11671051007�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fchdir replacement. Copyright (C) 2006-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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <assert.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 "dosname.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. */ static char * get_name (char const *dir) { char *cwd; char *result; int saved_errno; 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); saved_errno = errno; free (cwd); errno = saved_errno; 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 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; assert (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) { assert (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-20111211-stable/lib/fchmodat.c���������������������������������������������������������������0000664�0000000�0000000�00000003567�11671051007�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Change the protections of file relative to an open directory. Copyright (C) 2006, 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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include <sys/stat.h> #include <errno.h> #ifndef HAVE_LCHMOD /* Use a different name, to avoid conflicting with any system-supplied declaration. */ # undef lchmod # define lchmod lchmod_rpl static int lchmod (char const *f _GL_UNUSED, mode_t m _GL_UNUSED) { errno = ENOSYS; return -1; } #endif /* Solaris 10 has no function like this. Invoke chmod or lchmod 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 (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. */ #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" �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fchown-stub.c������������������������������������������������������������0000664�0000000�0000000�00000000465�11671051007�0017650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/fchownat.c���������������������������������������������������������������0000664�0000000�0000000�00000007044�11671051007�0017222�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: <http://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-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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include <unistd.h> #include <errno.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-20111211-stable/lib/fclose.c�����������������������������������������������������������������0000664�0000000�0000000�00000005512�11671051007�0016662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fclose replacement. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <unistd.h> #include "freading.h" #include "msvc-inval.h" #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-20111211-stable/lib/fcntl--.h����������������������������������������������������������������0000664�0000000�0000000�00000001752�11671051007�0016656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like fcntl.h, but redefine some names to avoid glitches. Copyright (C) 2005, 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 <http://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-20111211-stable/lib/fcntl-safer.h������������������������������������������������������������0000664�0000000�0000000�00000001733�11671051007�0017621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke fcntl-like functions, but avoid some glitches. Copyright (C) 2005, 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 <http://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-20111211-stable/lib/fcntl.c������������������������������������������������������������������0000664�0000000�0000000�00000022764�11671051007�0016525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide file descriptor control. Copyright (C) 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 <http://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 <unistd.h> #if !HAVE_FCNTL # define rpl_fcntl fcntl #endif #undef fcntl #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" /* 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 */ { /* TODO: Translate GetLastError () into errno. */ errno = EMFILE; result = -1; break; } duplicated_fd = _open_osfhandle ((long) new_handle, flags); if (duplicated_fd < 0) { CloseHandle (new_handle); errno = EMFILE; 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 */ /* 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 rpl_fcntl (int fd, int action, /* arg */...) { va_list arg; int result = -1; va_start (arg, action); switch (action) { #if !HAVE_FCNTL case F_DUPFD: { int target = va_arg (arg, int); result = dupfd (fd, target, 0); break; } #elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR case F_DUPFD: { int target = va_arg (arg, int); /* Detect invalid target; needed for cygwin 1.5.x. */ if (target < 0 || getdtablesize () <= target) errno = EINVAL; else { /* Haiku alpha 2 loses fd flags on original. */ int flags = fcntl (fd, F_GETFD); if (flags < 0) { result = -1; break; } result = fcntl (fd, action, 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 } break; } /* F_DUPFD */ #endif /* FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR */ case F_DUPFD_CLOEXEC: { int target = va_arg (arg, int); #if !HAVE_FCNTL result = dupfd (fd, target, O_CLOEXEC); break; #else /* HAVE_FCNTL */ /* 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, action, 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 (fd, F_DUPFD, target); if (result < 0) break; have_dupfd_cloexec = -1; } } else result = rpl_fcntl (fd, F_DUPFD, 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; } } break; #endif /* HAVE_FCNTL */ } /* F_DUPFD_CLOEXEC */ #if !HAVE_FCNTL case F_GETFD: { # if (defined _WIN32 || 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 void *p = va_arg (arg, void *); result = fcntl (fd, action, p); #else errno = EINVAL; #endif break; } } va_end (arg); return result; } ������������gnulib-20111211-stable/lib/fcntl.in.h���������������������������������������������������������������0000664�0000000�0000000�00000021372�11671051007�0017131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like <fcntl.h>, but with non-working flags defined to 0. Copyright (C) 2006-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 <http://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. */ #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 && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) # include <sys/stat.h> #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_FCNTL_H #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 && !(__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@ #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_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, ...)); # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); # 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, ...)); # 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"); #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. */ #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 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_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_NOLINKS # define O_NOLINKS 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-20111211-stable/lib/fd-hook.c����������������������������������������������������������������0000664�0000000�0000000�00000007037�11671051007�0016742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/fd-hook.h����������������������������������������������������������������0000664�0000000�0000000�00000011376�11671051007�0016750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making making file descriptor functions close(), ioctl() extensible. Copyright (C) 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/fd-safer-flag.c����������������������������������������������������������0000664�0000000�0000000�00000003351�11671051007�0020004�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-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 <http://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-20111211-stable/lib/fd-safer.c���������������������������������������������������������������0000664�0000000�0000000�00000003002�11671051007�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a safer copy of a file descriptor. Copyright (C) 2005-2006, 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 <http://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-20111211-stable/lib/fdatasync.c��������������������������������������������������������������0000664�0000000�0000000�00000001666�11671051007�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulate fdatasync on platforms that lack it. Copyright (C) 2011 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 General Public License along with this program. If not, see <http://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-20111211-stable/lib/fdopen.c�����������������������������������������������������������������0000664�0000000�0000000�00000002722�11671051007�0016662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream with a given file descriptor. 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 <http://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 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 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-20111211-stable/lib/fdopendir.c��������������������������������������������������������������0000664�0000000�0000000�00000013135�11671051007�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement fdopendir function Copyright (C) 2004-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 <http://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. */ 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; } /* 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_CHDIR 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); return (name ? opendir (name) : NULL); } # 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-20111211-stable/lib/fdutimensat.c������������������������������������������������������������0000664�0000000�0000000�00000003710�11671051007�0017730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set file access and modification times. Copyright (C) 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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 time stamps 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 time stamps 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-20111211-stable/lib/fflush.c�����������������������������������������������������������������0000664�0000000�0000000�00000016201�11671051007�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fflush.c -- allow flushing input streams 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 <http://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_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ static inline 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 inline void clear_ungetc_buffer (FILE *fp) { # if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ /* Nothing to do. */ # else /* other implementations */ fseeko (fp, 0, SEEK_CUR); # endif } #endif #if (defined __sferror || defined __DragonFly__) && defined __SNPT /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ static inline int disable_seek_optimization (FILE *fp) { int saved_flags = fp_->_flags & (__SOPT | __SNPT); fp_->_flags = (fp_->_flags & ~__SOPT) | __SNPT; return saved_flags; } static inline void restore_seek_optimization (FILE *fp, int saved_flags) { fp_->_flags = (fp_->_flags & ~(__SOPT | __SNPT)) | saved_flags; } #endif static inline void update_fpos_cache (FILE *fp, off_t pos) { #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ # 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 } /* 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_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ clear_ungetc_buffer_preserving_position (stream); return fflush (stream); #else { /* Notes about the file-position indicator: 1) The file position indicator is incremented by fgetc() and decremented by ungetc(): <http://www.opengroup.org/susv3/functions/fgetc.html> "... the fgetc() function shall ... advance the associated file position indicator for the stream ..." <http://www.opengroup.org/susv3/functions/ungetc.html> "The file-position indicator is decremented by each successful call to ungetc()..." 2) <http://www.opengroup.org/susv3/functions/ungetc.html> says: "The value of the file-position indicator for the stream after reading or discarding all pushed-back bytes shall be the same as it was before the bytes were pushed back." Here we are discarding all pushed-back bytes. But more specifically, 3) <http://www.opengroup.org/austin/aardvark/latest/xshbug3.txt> says: "[After fflush(),] the file offset of the underlying open file description shall be set to the file position of the stream, and any characters pushed back onto the stream by ungetc() ... shall be discarded." */ /* 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 __SNPT /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ { /* 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-20111211-stable/lib/ffs.c��������������������������������������������������������������������0000664�0000000�0000000�00000003444�11671051007�0016167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ffs.c -- find the first set bit in a word. 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include <config.h> /* Specification. */ #include <strings.h> #include <limits.h> int ffs (int i) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) return __builtin_ffs (i); #else /* http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightMultLookup 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-20111211-stable/lib/ffsl.c�������������������������������������������������������������������0000664�0000000�0000000�00000000135�11671051007�0016335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define FUNC ffsl #define TYPE long int #define GCC_BUILTIN __builtin_ffsl #include "ffsl.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/ffsl.h�������������������������������������������������������������������0000664�0000000�0000000�00000004302�11671051007�0016342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ffsl.h -- find the first set bit in a word. 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 <http://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 FUNC || !defined TYPE # error #endif int FUNC (TYPE i) { #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && defined GCC_BUILTIN return GCC_BUILTIN (i); #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-20111211-stable/lib/ffsll.c������������������������������������������������������������������0000664�0000000�0000000�00000000144�11671051007�0016511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define FUNC ffsll #define TYPE long long int #define GCC_BUILTIN __builtin_ffsll #include "ffsl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/file-has-acl.c�����������������������������������������������������������0000664�0000000�0000000�00000061512�11671051007�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a file has a nontrivial access control list. Copyright (C) 2002-2003, 2005-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 <http://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 # if HAVE_ACL_TYPE_EXTENDED /* MacOS 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 */ /* 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 */ 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; # else /* IRIX, Tru64 */ # if 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; # endif # if 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; # endif # endif } # endif #elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin, 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 /* 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_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER) & ~ access_masks[4]) return 1; access_masks[4] &= ~(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. */ if ((access_masks[0] | access_masks[1]) != (NEW_ACE_READ_DATA | NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA | NEW_ACE_EXECUTE)) return 1; if ((access_masks[2] | access_masks[3]) != (NEW_ACE_READ_DATA | NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA | NEW_ACE_EXECUTE)) return 1; if ((access_masks[4] | access_masks[5]) != (NEW_ACE_READ_DATA | NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA | NEW_ACE_EXECUTE)) 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, struct stat *sb) { int i; for (i = 0; i < count; i++) { struct acl_entry *ace = &entries[i]; if (!((ace->uid == sb->st_uid && ace->gid == ACL_NSGROUP) || (ace->uid == ACL_NSUSER && ace->gid == sb->st_gid) || (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 /* Return 1 if NAME has a nontrivial access control list, 0 if NAME only has no or a base access control list, and -1 (setting errno) on error. 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 HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, MacOS X, IRIX, Tru64 */ 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, MacOS X, IRIX, Tru64 */ { # if HAVE_ACL_TYPE_EXTENDED /* MacOS X */ /* On MacOS 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 */ 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 */ /* 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) { ret = (0 < acl_entries (acl)); acl_free (acl); } else ret = -1; } # endif } else ret = -1; # endif } if (ret < 0) return ACL_NOT_WELL_SUPPORTED (errno) ? 0 : -1; return ret; # elif HAVE_FACL && defined GETACLCNT /* Solaris, Cygwin, 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. */ int count; { aclent_t *entries; for (;;) { count = acl (name, GETACLCNT, 0, NULL); if (count < 0) { if (errno == ENOSYS || errno == ENOTSUP) break; else return -1; } if (count == 0) break; /* 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) return 1; entries = (aclent_t *) malloc (count * sizeof (aclent_t)); if (entries == NULL) { errno = ENOMEM; return -1; } if (acl (name, GETACL, count, entries) == count) { if (acl_nontrivial (count, entries)) { free (entries); return 1; } free (entries); break; } /* Huh? The number of ACL entries changed since the last call. Repeat. */ free (entries); } } # 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). */ { ace_t *entries; for (;;) { count = acl (name, ACE_GETACLCNT, 0, NULL); if (count < 0) { if (errno == ENOSYS || errno == EINVAL) break; else return -1; } if (count == 0) break; /* 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) return 1; entries = (ace_t *) malloc (count * sizeof (ace_t)); if (entries == NULL) { errno = ENOMEM; return -1; } if (acl (name, ACE_GETACL, count, entries) == count) { if (acl_ace_nontrivial (count, entries)) { free (entries); return 1; } free (entries); break; } /* Huh? The number of ACL entries changed since the last call. Repeat. */ free (entries); } } # endif return 0; # endif # elif HAVE_GETACL /* HP-UX */ for (;;) { int count; struct acl_entry entries[NACLENTRIES]; count = getacl (name, 0, NULL); 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) break; else return -1; } if (count == 0) return 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; if (getacl (name, count, entries) == count) { struct stat statbuf; if (stat (name, &statbuf) < 0) return -1; return acl_nontrivial (count, entries, &statbuf); } /* Huh? The number of ACL entries changed since the last call. Repeat. */ } # if HAVE_ACLV_H /* HP-UX >= 11.11 */ for (;;) { int count; struct acl entries[NACLVENTRIES]; count = acl ((char *) name, ACL_CNT, 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) break; else return -1; } if (count == 0) return 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; if (acl ((char *) name, ACL_GET, count, entries) == count) return aclv_nontrivial (count, entries); /* Huh? The number of ACL entries changed since the last call. Repeat. */ } # 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) { int saved_errno = errno; free (acl); errno = saved_errno; } 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 (name, STX_NORMAL, &u.a, sizeof (u)) < 0) return -1; return acl_nontrivial (&u.a); # elif HAVE_ACLSORT /* NonStop Kernel */ int count; struct acl entries[NACLENTRIES]; for (;;) { count = acl ((char *) name, ACL_CNT, NACLENTRIES, NULL); if (count < 0) { if (errno == ENOSYS || errno == ENOTSUP) break; else return -1; } if (count == 0) return 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; if (acl ((char *) name, ACL_GET, count, entries) == count) return acl_nontrivial (count, entries); /* Huh? The number of ACL entries changed since the last call. Repeat. */ } # endif } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/file-set.c���������������������������������������������������������������0000664�0000000�0000000�00000004060�11671051007�0017114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Specialized functions to manipulate a set of files. 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 <http://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 alread 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-20111211-stable/lib/file-set.h���������������������������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0017126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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 defined __GNUC__ && ((__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3) __attribute__ ((nonnull (2, 3))) #endif ; extern bool seen_file (Hash_table const *ht, char const *file, struct stat const *stats); �����������������������������������������������������������������������������gnulib-20111211-stable/lib/file-type.c��������������������������������������������������������������0000664�0000000�0000000�00000003553�11671051007�0017310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a string describing the type of a file. Copyright (C) 1993-1994, 2001-2002, 2004-2006, 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 <http://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. */ 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_ISBLK (st->st_mode)) return _("block special file"); if (S_ISCHR (st->st_mode)) return _("character special file"); if (S_ISFIFO (st->st_mode)) return _("fifo"); if (S_ISLNK (st->st_mode)) return _("symbolic link"); if (S_ISSOCK (st->st_mode)) return _("socket"); 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"); return _("weird file"); } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/file-type.h��������������������������������������������������������������0000664�0000000�0000000�00000002000�11671051007�0017277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a string describing the type of a file. Copyright (C) 1993-1994, 2001-2002, 2004-2005, 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 <http://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-20111211-stable/lib/fileblocks.c�������������������������������������������������������������0000664�0000000�0000000�00000004034�11671051007�0017522�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-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 <http://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-20111211-stable/lib/filemode.c���������������������������������������������������������������0000664�0000000�0000000�00000012013�11671051007�0017165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* filemode.c -- make a string describing file modes Copyright (C) 1985, 1990, 1993, 1998-2000, 2004, 2006, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "filemode.h" /* The following is for Cray DMF (Data Migration Facility), which is a HSM file system. A migrated file has a `st_dm_mode' that is different from the normal `st_mode', so any tests for migrated files should use the former. */ #if HAVE_ST_DM_MODE # define IS_MIGRATED_FILE(statp) \ (S_ISOFD (statp->st_dm_mode) || S_ISOFL (statp->st_dm_mode)) #else # define IS_MIGRATED_FILE(statp) 0 #endif #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)) 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 'M' migrated file (Cray DMF) '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 (IS_MIGRATED_FILE (statp)) str[0] = 'M'; 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-20111211-stable/lib/filemode.h���������������������������������������������������������������0000664�0000000�0000000�00000002314�11671051007�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Make a string describing file modes. Copyright (C) 1998-1999, 2003, 2006, 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 <http://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> /* MacOS 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-20111211-stable/lib/filename.h���������������������������������������������������������������0000664�0000000�0000000�00000003641�11671051007�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Basic filename support macros. Copyright (C) 2001-2004, 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 <http://www.gnu.org/licenses/>. */ #ifndef _FILENAME_H #define _FILENAME_H #ifdef __cplusplus extern "C" { #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, 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_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) # define IS_PATH_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_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILE_SYSTEM_PREFIX_LEN(P) 0 #endif #ifdef __cplusplus } #endif #endif /* _FILENAME_H */ �����������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/filenamecat-lgpl.c�������������������������������������������������������0000664�0000000�0000000�00000005442�11671051007�0020615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> /* Specification. */ #include "filenamecat.h" #include <stdlib.h> #include <string.h> #include "dirname.h" #if ! HAVE_MEMPCPY && ! defined mempcpy # define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) #endif /* Return the longest suffix of F that is a relative file name. If it has no such suffix, return the empty string. */ static char const * _GL_ATTRIBUTE_PURE longest_relative_suffix (char const *f) { for (f += FILE_SYSTEM_PREFIX_LEN (f); ISSLASH (*f); f++) continue; return f; } /* Concatenate two file name components, DIR and ABASE, 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, where BASE is ABASE with any file system prefixes and leading separators removed. Arrange for a directory separator if necessary between DIR and BASE in the result, removing any redundant separators. In any case, if BASE_IN_RESULT is non-NULL, set *BASE_IN_RESULT to point to the copy of ABASE in the returned concatenation. However, if ABASE begins with more than one slash, set *BASE_IN_RESULT to point to the sole corresponding slash that is copied into the result buffer. Return NULL if malloc fails. */ char * mfile_name_concat (char const *dir, char const *abase, char **base_in_result) { char const *dirbase = last_component (dir); size_t dirbaselen = base_len (dirbase); size_t dirlen = dirbase - dir + dirbaselen; size_t needs_separator = (dirbaselen && ! ISSLASH (dirbase[dirbaselen - 1])); char const *base = longest_relative_suffix (abase); size_t baselen = strlen (base); char *p_concat = malloc (dirlen + needs_separator + baselen + 1); char *p; if (p_concat == NULL) return NULL; p = mempcpy (p_concat, dir, dirlen); *p = DIRECTORY_SEPARATOR; p += needs_separator; if (base_in_result) *base_in_result = p - IS_ABSOLUTE_FILE_NAME (abase); p = mempcpy (p, base, baselen); *p = '\0'; return p_concat; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/filenamecat.c������������������������������������������������������������0000664�0000000�0000000�00000002422�11671051007�0017654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-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 <http://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 *abase, char **base_in_result) { char *p = mfile_name_concat (dir, abase, base_in_result); if (p == NULL) xalloc_die (); return p; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/filenamecat.h������������������������������������������������������������0000664�0000000�0000000�00000002044�11671051007�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-1997, 2003, 2005, 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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #if GNULIB_FILENAMECAT char *file_name_concat (char const *dir, char const *base, char **base_in_result); #endif char *mfile_name_concat (char const *dir, char const *base, char **base_in_result); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/filevercmp.c�������������������������������������������������������������0000664�0000000�0000000�00000011627�11671051007�0017547�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-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 <http://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 inline 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 http://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-20111211-stable/lib/filevercmp.h�������������������������������������������������������������0000664�0000000�0000000�00000003361�11671051007�0017550�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-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 <http://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); #endif /* FILEVERCMP_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/findprog-lgpl.c����������������������������������������������������������0000664�0000000�0000000�00000001530�11671051007�0020147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in PATH. Copyright (C) 2001-2004, 2006-2011 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #define IN_FINDPROG_LGPL 1 #include "findprog.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/findprog.c���������������������������������������������������������������0000664�0000000�0000000�00000007636�11671051007�0017230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in PATH. Copyright (C) 2001-2004, 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "findprog.h" #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* 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 __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, 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) { /* 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. */ progpathname = XNMALLOC (2 + strlen (progname) + 1, char); 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-20111211-stable/lib/findprog.h���������������������������������������������������������������0000664�0000000�0000000�00000002563�11671051007�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in PATH. Copyright (C) 2001-2003, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifdef __cplusplus extern "C" { #endif /* Look up a program in the PATH. Attempt to determine the pathname that would be called by execlp/execvp of PROGNAME. If successful, return a pathname containing a slash (either absolute or relative to the current directory). Otherwise, return 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); #ifdef __cplusplus } #endif ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/float+.h�����������������������������������������������������������������0000664�0000000�0000000�00000013056�11671051007�0016576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Supplemental information about the floating-point formats. Copyright (C) 2007, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/float.c������������������������������������������������������������������0000664�0000000�0000000�00000002477�11671051007�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary definitions for <float.h>. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/float.in.h���������������������������������������������������������������0000664�0000000�0000000�00000016734�11671051007�0017136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A correct <float.h>. 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 <http://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 <http://lists.gnu.org/archive/html/bug-gnulib/2008-07/msg00063.html>. */ #if defined __i386__ && defined __FreeBSD__ /* 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.3621031431120935E-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. */ union gl_long_double_union { struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; long double ld; }; 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.. */ union gl_long_double_union { struct { double hi; double lo; } dd; long double ld; }; 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-20111211-stable/lib/flock.c������������������������������������������������������������������0000664�0000000�0000000�00000011546�11671051007�0016511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulate flock on platforms that lack it, primarily Windows and MinGW. This is derived from sqlite3 sources. http://www.sqlite.org/cvstrac/rlog?f=sqlite/src/os_win.c http://www.sqlite.org/copyright.html Written by Richard W.M. Jones <rjones.at.redhat.com> Copyright (C) 2008-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/file.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* LockFileEx */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <errno.h> /* _get_osfhandle */ # include "msvc-nothrow.h" /* 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-20111211-stable/lib/floor.c������������������������������������������������������������������0000664�0000000�0000000�00000006146�11671051007�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards negative infinity. Copyright (C) 2007, 2010-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 <http://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 /* 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-20111211-stable/lib/floorf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001512�11671051007�0016672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards negative infinity. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_FLOAT #include "floor.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/floorl.c�����������������������������������������������������������������0000664�0000000�0000000�00000002001�11671051007�0016672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards negative infinity. 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 <http://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-20111211-stable/lib/fma.c��������������������������������������������������������������������0000664�0000000�0000000�00000102033�11671051007�0016146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fused multiply-add. 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 <http://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 <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)) /* 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. <http://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. <http://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. <http://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. */ fsum = (DOUBLE) ((sum[sum_len - k - 1] << (GMP_LIMB_BITS - shift)) | (sum_len >= k + 2 ? sum[sum_len - k - 2] >> shift : 0)); /* General loop. */ while (--k >= 0) { fsum *= chunk_multiplier; fsum += (DOUBLE) ((sum[sum_len - k - 1] << (GMP_LIMB_BITS - shift)) | (sum[sum_len - k - 2] >> shift)); } } } fsum = LDEXP (fsum, e + (int) sum_bits - GMP_LIMB_BITS); return (sign ? - fsum : fsum); } } } } else return z; } else return (x * y) + z; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fmaf.c�������������������������������������������������������������������0000664�0000000�0000000�00000001460�11671051007�0016316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fused multiply-add. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #define USE_FLOAT #include "fma.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fmal.c�������������������������������������������������������������������0000664�0000000�0000000�00000002007�11671051007�0016322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fused multiply-add. 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 <http://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-20111211-stable/lib/fmodf.c������������������������������������������������������������������0000664�0000000�0000000�00000001534�11671051007�0016502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remainder. 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 <http://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-20111211-stable/lib/fnmatch.c����������������������������������������������������������������0000664�0000000�0000000�00000026341�11671051007�0017032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1993, 1996-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBC # include <config.h> #endif /* Enable GNU extensions in fnmatch.h. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #if ! defined __builtin_expect && __GNUC__ < 3 # define __builtin_expect(expr, expected) (expr) #endif #include <fnmatch.h> #include <alloca.h> #include <assert.h> #include <ctype.h> #include <errno.h> #include <stddef.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #define WIDE_CHAR_SUPPORT \ (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \ && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY)) /* For platform which support the ISO C amendement 1 functionality we support user defined character classes. */ #if defined _LIBC || WIDE_CHAR_SUPPORT # include <wctype.h> # include <wchar.h> #endif /* 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/elem-hash.h" # include "../locale/coll-lookup.h" # include <shlib-compat.h> # define CONCAT(a,b) __CONCAT(a,b) # define mbsrtowcs __mbsrtowcs # define fnmatch __fnmatch extern int fnmatch (const char *pattern, const char *string, int flags); #endif #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #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)) /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself, and have not detected a bug in the library. 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__ || !HAVE_FNMATCH_GNU # if ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) # define isblank(c) ((c) == ' ' || (c) == '\t') # endif # define STREQ(s1, s2) (strcmp (s1, s2) == 0) # if defined _LIBC || WIDE_CHAR_SUPPORT /* The GNU C library provides support for user-defined character classes and the functions from ISO C amendement 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 # ifdef _LIBC # define IS_CHAR_CLASS(string) __wctype (string) # else # define IS_CHAR_CLASS(string) wctype (string) # endif # ifdef _LIBC # define ISWCTYPE(WC, WT) __iswctype (WC, WT) # else # define ISWCTYPE(WC, WT) iswctype (WC, WT) # endif # if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC /* In this case we are implementing the multibyte character handling. */ # define HANDLE_MULTIBYTE 1 # endif # else # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ # define IS_CHAR_CLASS(string) \ (STREQ (string, "alpha") || STREQ (string, "upper") \ || STREQ (string, "lower") || STREQ (string, "digit") \ || STREQ (string, "alnum") || STREQ (string, "xdigit") \ || STREQ (string, "space") || STREQ (string, "print") \ || STREQ (string, "punct") || STREQ (string, "graph") \ || STREQ (string, "cntrl") || STREQ (string, "blank")) # endif /* Avoid depending on library functions or files whose names are inconsistent. */ /* Global variable. */ static int posixly_correct; # 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 /* 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 L_(CS) CS # ifdef _LIBC # define BTOWC(C) __btowc (C) # else # define BTOWC(C) btowc (C) # endif # define STRLEN(S) strlen (S) # define STRCAT(D, S) strcat (D, S) # ifdef _LIBC # define MEMPCPY(D, S, N) __mempcpy (D, S, N) # else # if HAVE_MEMPCPY # define MEMPCPY(D, S, N) mempcpy (D, S, N) # else # define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) # endif # endif # define MEMCHR(S, C, N) memchr (S, C, N) # include "fnmatch_loop.c" # if HANDLE_MULTIBYTE # 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) # ifdef _LIBC # define STRLEN(S) __wcslen (S) # define STRCAT(D, S) __wcscat (D, S) # define MEMPCPY(D, S, N) __wmempcpy (D, S, N) # else # define STRLEN(S) wcslen (S) # define STRCAT(D, S) wcscat (D, S) # if HAVE_WMEMPCPY # define MEMPCPY(D, S, N) wmempcpy (D, S, N) # else # define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N)) # endif # endif # define MEMCHR(S, C, N) wmemchr (S, C, N) # define WIDE_CHAR_VERSION 1 # 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'; # ifdef _LIBC return __wctype (s); # else return wctype (s); # endif } # define IS_CHAR_CLASS(string) is_char_class (string) # include "fnmatch_loop.c" # endif int fnmatch (const char *pattern, const char *string, int flags) { # if HANDLE_MULTIBYTE # define ALLOCA_LIMIT 2000 if (__builtin_expect (MB_CUR_MAX, 1) != 1) { mbstate_t ps; size_t patsize; size_t strsize; size_t totsize; wchar_t *wpattern; wchar_t *wstring; int res; /* Calculate the size needed to convert the strings to wide characters. */ memset (&ps, '\0', sizeof (ps)); patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1; if (__builtin_expect (patsize != 0, 1)) { assert (mbsinit (&ps)); strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1; if (__builtin_expect (strsize != 0, 1)) { assert (mbsinit (&ps)); totsize = patsize + strsize; if (__builtin_expect (! (patsize <= totsize && totsize <= SIZE_MAX / sizeof (wchar_t)), 0)) { errno = ENOMEM; return -1; } /* Allocate room for the wide characters. */ if (__builtin_expect (totsize < ALLOCA_LIMIT, 1)) wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t)); else { wpattern = malloc (totsize * sizeof (wchar_t)); if (__builtin_expect (! wpattern, 0)) { errno = ENOMEM; return -1; } } wstring = wpattern + patsize; /* Convert the strings into wide characters. */ mbsrtowcs (wpattern, &pattern, patsize, &ps); assert (mbsinit (&ps)); mbsrtowcs (wstring, &string, strsize, &ps); res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1, flags & FNM_PERIOD, flags); if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0)) free (wpattern); return res; } } } # endif /* HANDLE_MULTIBYTE */ return internal_fnmatch (pattern, string, string + strlen (string), flags & FNM_PERIOD, flags); } # ifdef _LIBC # 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) # endif #endif /* _LIBC or not __GNU_LIBRARY__. */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fnmatch.in.h�������������������������������������������������������������0000664�0000000�0000000�00000004733�11671051007�0017445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1993, 1996-1999, 2001-2003, 2005, 2007, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _FNMATCH_H #define _FNMATCH_H 1 /* The definition of _GL_ARG_NONNULL is copied here. */ #ifdef __cplusplus extern "C" { #endif /* 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 /* Match NAME against the file name pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ extern int fnmatch (const char *__pattern, const char *__name, int __flags) _GL_ARG_NONNULL ((1, 2)); #ifdef __cplusplus } #endif #endif /* fnmatch.h */ �������������������������������������gnulib-20111211-stable/lib/fnmatch_loop.c�����������������������������������������������������������0000664�0000000�0000000�00000131751�11671051007�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1993, 1996-2006, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Match STRING against the file name pattern PATTERN, returning zero if it matches, nonzero if not. */ static int EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, bool no_leading_period, int flags) internal_function; static const CHAR *END (const CHAR *patternp) internal_function; static int internal_function FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, bool no_leading_period, int flags) { register const CHAR *p = pattern, *n = string; register 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 (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') { int res; res = EXT (c, p, n, string_end, no_leading_period, flags); 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 (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') { int res; res = EXT (c, p, n, string_end, no_leading_period, flags); if (res != -1) return res; } 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_('/') && __builtin_expect (flags & FNM_FILE_NAME, 0)) /* 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; endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'), string_end - n); if (endp == NULL) endp = string_end; if (c == L_('[') || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0 && (c == L_('@') || c == L_('+') || c == L_('!')) && *p == L_('('))) { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); bool no_leading_period2 = no_leading_period; for (--p; n < endp; ++n, no_leading_period2 = false) if (FCT (p, n, string_end, no_leading_period2, flags2) == 0) return 0; } 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) == 0)) return 0; } else { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); int no_leading_period2 = no_leading_period; if (c == L_('\\') && !(flags & FNM_NOESCAPE)) c = *p; c = FOLD (c); for (--p; n < endp; ++n, no_leading_period2 = false) if (FOLD ((UCHAR) *n) == c && (FCT (p, n, string_end, no_leading_period2, flags2) == 0)) return 0; } } /* 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; register 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; #if defined _LIBC || WIDE_CHAR_SUPPORT wctype_t wt; #endif 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'); #if defined _LIBC || WIDE_CHAR_SUPPORT 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 #else if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n)) || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n)) || (STREQ (str, L_("blank")) && isblank ((UCHAR) *n)) || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n)) || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n)) || (STREQ (str, L_("graph")) && isgraph ((UCHAR) *n)) || (STREQ (str, L_("lower")) && islower ((UCHAR) *n)) || (STREQ (str, L_("print")) && isprint ((UCHAR) *n)) || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n)) || (STREQ (str, L_("space")) && isspace ((UCHAR) *n)) || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n)) || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n))) goto matched; #endif c = *p++; } #ifdef _LIBC else if (c == L_('[') && *p == L_('=')) { UCHAR str[1]; 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[0] = 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[0]) goto matched; } else { const int32_t *table; # if WIDE_CHAR_VERSION const int32_t *weights; const int32_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; /* This #include defines a local function! */ # if WIDE_CHAR_VERSION # include <locale/weightwc.h> # else # include <locale/weight.h> # endif # 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 int32_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 (&cp); if (idx != 0) { /* We found a table entry. Now see whether the character we are currently at has the same equivalance class value. */ int len = weights[idx & 0xffffff]; int32_t idx2; const UCHAR *np = (const UCHAR *) n; idx2 = findidx (&np); 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; # ifdef WIDE_CHAR_VERSION char str[c1]; size_t strcnt; # else # define str (startp + 1) # endif const unsigned char *extra; int32_t idx; int32_t elem; int32_t second; int32_t hash; # ifdef WIDE_CHAR_VERSION /* We have to convert the name to a single-byte string. This is possible since the names consist of ASCII characters and the internal representation is UCS4. */ for (strcnt = 0; strcnt < c1; ++strcnt) str[strcnt] = startp[1 + strcnt]; # 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); /* Locate the character in the hashing table. */ hash = elem_hash (str, c1); idx = 0; elem = hash % table_size; if (symb_table[2 * elem] != 0) { second = hash % (table_size - 2) + 1; do { /* First compare the hashing value. */ if (symb_table[2 * elem] == hash && (c1 == extra[symb_table[2 * elem + 1]]) && memcmp (str, &extra[symb_table[2 * elem + 1] + 1], c1) == 0) { /* Yep, this is the entry. */ idx = symb_table[2 * elem + 1]; idx += 1 + extra[idx]; break; } /* Next entry. */ elem += second; } while (symb_table[2 * elem] != 0); } if (symb_table[2 * elem] != 0) { /* Compare the byte sequence but only if this is not part of a range. */ # ifdef WIDE_CHAR_VERSION int32_t *wextra; idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; wextra = (int32_t *) &extra[idx + 4]; # endif if (! is_range) { # ifdef WIDE_CHAR_VERSION for (c1 = 0; (int32_t) c1 < wextra[idx]; ++c1) if (n[c1] != wextra[1 + c1]) break; if ((int32_t) c1 == wextra[idx]) goto matched; # else for (c1 = 0; c1 < extra[idx]; ++c1) if (n[c1] != extra[1 + c1]) break; if (c1 == extra[idx]) goto matched; # endif } /* Get the collation sequence value. */ is_seqval = true; # ifdef WIDE_CHAR_VERSION cold = wextra[1 + wextra[idx]]; # else /* Adjust for the alignment. */ idx += 1 + extra[idx]; idx = (idx + 3) & ~4; 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 == str[0]) goto matched; cold = str[0]; c = *p++; } else return FNM_NOMATCH; } } else # undef str #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++; # ifdef 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; # ifdef WIDE_CHAR_VERSION char str[c1]; size_t strcnt; # else # define str (startp + 1) # endif const unsigned char *extra; int32_t idx; int32_t elem; int32_t second; int32_t hash; # ifdef WIDE_CHAR_VERSION /* We have to convert the name to a single-byte string. This is possible since the names consist of ASCII characters and the internal representation is UCS4. */ for (strcnt = 0; strcnt < c1; ++strcnt) str[strcnt] = startp[1 + strcnt]; # 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); /* Locate the character in the hashing table. */ hash = elem_hash (str, c1); idx = 0; elem = hash % table_size; if (symb_table[2 * elem] != 0) { second = hash % (table_size - 2) + 1; do { /* First compare the hashing value. */ if (symb_table[2 * elem] == hash && (c1 == extra[symb_table[2 * elem + 1]]) && memcmp (str, &extra[symb_table[2 * elem + 1] + 1], c1) == 0) { /* Yep, this is the entry. */ idx = symb_table[2 * elem + 1]; idx += 1 + extra[idx]; break; } /* Next entry. */ elem += second; } while (symb_table[2 * elem] != 0); } if (symb_table[2 * elem] != 0) { /* Compare the byte sequence but only if this is not part of a range. */ # ifdef WIDE_CHAR_VERSION int32_t *wextra; idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~4; wextra = (int32_t *) &extra[idx + 4]; # endif /* Get the collation sequence value. */ is_seqval = true; # ifdef WIDE_CHAR_VERSION cend = wextra[1 + wextra[idx]]; # else /* Adjust for the alignment. */ idx += 1 + extra[idx]; idx = (idx + 3) & ~4; cend = *((int32_t *) &extra[idx]); # endif } else if (symb_table[2 * elem] != 0 && c1 == 1) { cend = str[0]; c = *p++; } else return FNM_NOMATCH; } # undef str } 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 ( # ifdef 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 { # ifdef 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; } # ifdef 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 (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. */ do { ignore_next: c = *p++; 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; goto ignore_next; } } p += 2; c = *p++; } 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; c = *p++; } else if (c == L_('[') && *p == L_('.')) { ++p; while (1) { c = *++p; if (c == '\0') return FNM_NOMATCH; if (*p == L_('.') && p[1] == L_(']')) break; } p += 2; c = *p++; } } while (c != L_(']')); if (not) return FNM_NOMATCH; } break; case L_('+'): case L_('@'): case L_('!'): if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') { int res; res = EXT (c, p, n, string_end, no_leading_period, flags); 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 * internal_function 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); else if (*p == L_(')')) break; return p + 1; } static int internal_function EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, bool no_leading_period, int flags) { const CHAR *startp; size_t level; struct patternlist { struct patternlist *next; CHAR str[1]; } *list = NULL; struct patternlist **lastp = &list; size_t pattern_len = STRLEN (pattern); const CHAR *p; const CHAR *rs; enum { ALLOCA_LIMIT = 8000 }; /* Parse the pattern. Store the individual parts in the list. */ level = 0; for (startp = p = pattern + 1; ; ++p) if (*p == L_('\0')) /* This is an invalid pattern. */ return -1; 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 -1; } 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; \ size_t plensize; \ size_t newpsize; \ \ plen = (opt == L_('?') || opt == L_('@') \ ? pattern_len \ : p - startp + 1UL); \ plensize = plen * sizeof (CHAR); \ newpsize = offsetof (struct patternlist, str) + plensize; \ if ((size_t) -1 / sizeof (CHAR) < plen \ || newpsize < offsetof (struct patternlist, str) \ || ALLOCA_LIMIT <= newpsize) \ return -1; \ newp = (struct patternlist *) alloca (newpsize); \ *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0'); \ newp->next = NULL; \ *lastp = newp; \ lastp = &newp->next NEW_PATTERN; break; } } 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) == 0) return 0; /* 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) == 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) == 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) == 0))) /* It worked. Signal success. */ return 0; } while ((list = list->next) != NULL); /* None of the patterns lead to a match. */ return FNM_NOMATCH; case L_('?'): if (FCT (p, string, string_end, no_leading_period, flags) == 0) return 0; /* 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) == 0) /* It worked. Signal success. */ return 0; while ((list = list->next) != NULL); /* None of the patterns lead to a match. */ return FNM_NOMATCH; 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) == 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) == 0)) /* This is successful. */ return 0; } /* None of the patterns together with the rest of the pattern lead to a match. */ return FNM_NOMATCH; default: assert (! "Invalid extended matching operator"); break; } return -1; } #undef FOLD #undef CHAR #undef UCHAR #undef INT #undef FCT #undef EXT #undef END #undef MEMPCPY #undef MEMCHR #undef STRLEN #undef STRCAT #undef L_ #undef BTOWC �����������������������gnulib-20111211-stable/lib/fopen-safer.c������������������������������������������������������������0000664�0000000�0000000�00000003076�11671051007�0017617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke fopen, but avoid some glitches. Copyright (C) 2001, 2004-2006, 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 <http://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-20111211-stable/lib/fopen.c������������������������������������������������������������������0000664�0000000�0000000�00000006654�11671051007�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream to a file. 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 <http://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 __need_FILE #include <config.h> /* Get the original definition of fopen. It might be defined as a macro. */ #include <stdio.h> #undef __need_FILE static inline 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 <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> FILE * rpl_fopen (const char *filename, const char *mode) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif #if FOPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and a mode that requires write access is specified, then fail. Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> says that "A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname." and "The special filename dot shall refer to the directory specified by its predecessor." If the named file already exists as a directory, then if a mode that requires write access is specified, fopen() must fail because POSIX <http://www.opengroup.org/susv3/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 (mode[0] == 'w' || mode[0] == 'a') { errno = EISDIR; return NULL; } fd = open (filename, O_RDONLY); if (fd < 0) return NULL; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return NULL; } fp = fdopen (fd, mode); if (fp == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; } return fp; } } # endif return orig_fopen (filename, mode); } ������������������������������������������������������������������������������������gnulib-20111211-stable/lib/forkpty.c����������������������������������������������������������������0000664�0000000�0000000�00000003564�11671051007�0017112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fork a child process attached to the slave of a pseudo-terminal. Copyright (C) 2010-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 <http://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-20111211-stable/lib/fpending.c���������������������������������������������������������������0000664�0000000�0000000�00000002045�11671051007�0017177�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-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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include "fpending.h" /* Return the number of pending (aka buffered, unflushed) bytes on the stream, FP, that is open for writing. */ size_t __fpending (FILE *fp) { return PENDING_OUTPUT_N_BYTES; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fpending.h���������������������������������������������������������������0000664�0000000�0000000�00000002012�11671051007�0017176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declare __fpending. Copyright (C) 2000, 2003, 2005-2006, 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 <http://www.gnu.org/licenses/>. Written by Jim Meyering. */ #include <stddef.h> #include <stdio.h> #ifndef HAVE_DECL___FPENDING "this configure-time declaration test was not run" #endif #if HAVE_DECL___FPENDING # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif #else size_t __fpending (FILE *); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fprintf.c����������������������������������������������������������������0000664�0000000�0000000�00000003364�11671051007�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-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 <http://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) { int saved_errno = errno; free (output); errno = saved_errno; } return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; fseterr (fp); return -1; } return len; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fprintftime.c������������������������������������������������������������0000664�0000000�0000000�00000000054�11671051007�0017732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define FPRINTFTIME 1 #include "strftime.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fprintftime.h������������������������������������������������������������0000664�0000000�0000000�00000002345�11671051007�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Generate time strings directly to the output. */ /* Copyright (C) 2005, 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 <http://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 UTC and NANOSECONDS values. */ size_t fprintftime (FILE *fp, char const *fmt, struct tm const *tm, int utc, int nanoseconds); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fpucw.h������������������������������������������������������������������0000664�0000000�0000000�00000011006�11671051007�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Manipulating the FPU control word. Copyright (C) 2007-2011 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 <http://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 wrong results. 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 http://refspecs.freestandards.org/elf/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 http://www.vinc17.org/research/extended.en.html for a good explanation. See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for 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. */ #if (defined __i386__ || defined __x86_64__) && defined __GNUC__ 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() \ ({ fpucw_t _cw; \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ _cw; \ }) # define SET_FPUCW(word) \ (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-20111211-stable/lib/fpurge.c�����������������������������������������������������������������0000664�0000000�0000000�00000011244�11671051007�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Flushing buffers of a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7 */ # include <stdio_ext.h> #endif #include <stdlib.h> #include "stdio-impl.h" int fpurge (FILE *fp) { #if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7 */ __fpurge (fp); /* The __fpurge function does not have a return value. */ return 0; #elif HAVE_FPURGE /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS 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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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_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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ 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; # 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-20111211-stable/lib/freadable.c��������������������������������������������������������������0000664�0000000�0000000�00000003735�11671051007�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "freadable.h" #include "stdio-impl.h" 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_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return (fp->_flags & _IO_NO_READS) == 0; #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ 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; #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-20111211-stable/lib/freadable.h��������������������������������������������������������������0000664�0000000�0000000�00000002452�11671051007�0017321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://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 */ # include <stdio_ext.h> # define freadable(stream) (__freadable (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool freadable (FILE *stream); # ifdef __cplusplus } # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/freadahead.c�������������������������������������������������������������0000664�0000000�0000000�00000006345�11671051007�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "freadahead.h" #include <stdlib.h> #include "stdio-impl.h" size_t freadahead (FILE *fp) { #if 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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ 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 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-20111211-stable/lib/freadahead.h�������������������������������������������������������������0000664�0000000�0000000�00000002504�11671051007�0017456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <stddef.h> #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* 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. */ extern size_t freadahead (FILE *stream) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/freading.c���������������������������������������������������������������0000664�0000000�0000000�00000005456�11671051007�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://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 <http://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_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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ # 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 # else # error "Please port gnulib freading.c to your platform!" # endif } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/freading.h���������������������������������������������������������������0000664�0000000�0000000�00000003600�11671051007�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://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, not glibc >= 2.2, but glibc >= 2.7 */ # include <stdio_ext.h> # define freading(stream) (__freading (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool freading (FILE *stream); # ifdef __cplusplus } # endif #endif ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/freadptr.c���������������������������������������������������������������0000664�0000000�0000000�00000006665�11671051007�0017230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "freadptr.h" #include <stdlib.h> #include "stdio-impl.h" const char * freadptr (FILE *fp, size_t *sizep) { size_t size; /* Keep this code in sync with freadahead! */ #if 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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ 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; 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 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-20111211-stable/lib/freadptr.h���������������������������������������������������������������0000664�0000000�0000000�00000002566�11671051007�0017231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <stddef.h> #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* 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. */ extern const char * freadptr (FILE *stream, size_t *sizep); #ifdef __cplusplus } #endif ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/freadseek.c��������������������������������������������������������������0000664�0000000�0000000�00000010245�11671051007�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Skipping input from a FILE stream. 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 <http://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 inline void freadptrinc (FILE *fp, size_t increment) { /* Keep this code in sync with freadptr! */ #if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_IO_read_ptr += increment; #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ 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 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-20111211-stable/lib/freadseek.h��������������������������������������������������������������0000664�0000000�0000000�00000002550�11671051007�0017344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Skipping input from a FILE stream. 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 <http://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-20111211-stable/lib/free.c�������������������������������������������������������������������0000664�0000000�0000000�00000001637�11671051007�0016334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around incompatibility on older systems where free (NULL) fails. Copyright (C) 2003, 2006, 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 <http://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> #undef free #include <stdlib.h> void rpl_free (void *p) { if (p) free (p); } �������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/freopen-safer.c����������������������������������������������������������0000664�0000000�0000000�00000006225�11671051007�0020145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke freopen, but avoid some glitches. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include <config.h> #include "stdio-safer.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; /* fall through */ case STDERR_FILENO: if (dup2 (STDOUT_FILENO, STDOUT_FILENO) != STDOUT_FILENO) protect_out = true; /* fall through */ case STDOUT_FILENO: if (dup2 (STDIN_FILENO, STDIN_FILENO) != STDIN_FILENO) protect_in = true; /* fall through */ 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-20111211-stable/lib/freopen.c����������������������������������������������������������������0000664�0000000�0000000�00000003333�11671051007�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream to a file. 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 <http://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 __need_FILE #include <config.h> /* Get the original definition of freopen. It might be defined as a macro. */ #include <stdio.h> #undef __need_FILE static inline 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 <string.h> FILE * rpl_freopen (const char *filename, const char *mode, FILE *stream) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (filename != NULL && strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif return orig_freopen (filename, mode, stream); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/frexp.c������������������������������������������������������������������0000664�0000000�0000000�00000010361�11671051007�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa. 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 <http://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-20111211-stable/lib/frexpf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001575�11671051007�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a float into fraction and mantissa. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float frexpf (float x, int *expptr) { return (float) frexp ((double) x, expptr); } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/frexpl.c�����������������������������������������������������������������0000664�0000000�0000000�00000001756�11671051007�0016715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa. 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 <http://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-20111211-stable/lib/fseek.c������������������������������������������������������������������0000664�0000000�0000000�00000002035�11671051007�0016501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An fseek() function that, together with fflush(), is POSIX compliant. 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 <http://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-20111211-stable/lib/fseeko.c�����������������������������������������������������������������0000664�0000000�0000000�00000012217�11671051007�0016663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An fseeko() function that, together with fflush(), is POSIX compliant. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Get off_t and lseek. */ #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 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_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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ # 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, mingw, NonStop Kernel */ 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) #else #error "Please port gnulib fseeko.c to your platform! Look at the code in fpurge.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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ fp_->_flags &= ~__SOFF; #endif return -1; } #if 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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ # 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; fp_->_flags &= ~__SEOF; #elif defined __EMX__ /* emx+gcc */ fp->_flags &= ~_IOEOF; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ fp->_flag &= ~_IOEOF; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__offset = pos; fp->__eof = 0; #endif return 0; } return fseeko (fp, offset, whence); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fseterr.c����������������������������������������������������������������0000664�0000000�0000000�00000005325�11671051007�0017063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the error indicator of a stream. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fseterr.h" #include <errno.h> #include "stdio-impl.h" 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_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_flags |= _IO_ERR_SEEN; #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ 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 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-20111211-stable/lib/fseterr.h����������������������������������������������������������������0000664�0000000�0000000�00000002167�11671051007�0017071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the error indicator of a stream. 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 <http://www.gnu.org/licenses/>. */ #ifndef _FSETERR_H #define _FSETERR_H #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* 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). */ extern void fseterr (FILE *fp); #ifdef __cplusplus } #endif #endif /* _FSETERR_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fstat.c������������������������������������������������������������������0000664�0000000�0000000�00000004253�11671051007�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fstat() replacement. 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 <http://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 static inline int orig_fstat (int fd, struct stat *buf) { return fstat (fd, buf); } /* Specification. */ /* 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" #include <errno.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static inline int fstat_nothrow (int fd, struct stat *buf) { int result; TRY_MSVC_INVAL { result = orig_fstat (fd, buf); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } #else # define fstat_nothrow orig_fstat #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 return fstat_nothrow (fd, buf); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fstatat.c����������������������������������������������������������������0000664�0000000�0000000�00000010565�11671051007�0017061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around an fstatat bug on Solaris 9. Copyright (C) 2006, 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 <http://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 static inline int orig_fstatat (int fd, char const *filename, struct stat *buf, int flags) { return fstatat (fd, filename, buf, flags); } #endif /* 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" #include <errno.h> #include <fcntl.h> #include <string.h> #if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG # ifndef LSTAT_FOLLOWS_SLASHED_SYMLINK # define LSTAT_FOLLOWS_SLASHED_SYMLINK 0 # endif /* 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 = orig_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 = orig_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 inline 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. <http://www.google.com/search?q=fstatat+site:docs.sun.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-20111211-stable/lib/fstrcmp.c����������������������������������������������������������������0000664�0000000�0000000�00000024013�11671051007�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Functions to make fuzzy comparisons between strings Copyright (C) 1988-1989, 1992-1993, 1995, 2001-2003, 2006, 2008-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 <http://www.gnu.org/licenses/>. Derived from GNU diff 2.7, analyze.c et al. 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 Myers, Algorithmica Vol. 1 No. 2, 1986, pp. 251-266; 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", E. Ukkonen, Information and Control Vol. 64, 1985, pp. 100-118. 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. */ #include <config.h> /* Specification. */ #include "fstrcmp.h" #include <string.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <limits.h> #include "glthread/lock.h" #include "glthread/tls.h" #include "minmax.h" #include "xalloc.h" #ifndef uintptr_t # define uintptr_t unsigned long #endif #define ELEMENT char #define EQUAL(x,y) ((x) == (y)) #define OFFSET int #define EXTRA_CONTEXT_FIELDS \ /* The number of edits beyond which the computation can be aborted. */ \ int edit_count_limit; \ /* The number of edits (= number of elements inserted, plus the number of \ elements deleted), temporarily minus edit_count_limit. */ \ int edit_count; #define NOTE_DELETE(ctxt, xoff) ctxt->edit_count++ #define NOTE_INSERT(ctxt, yoff) ctxt->edit_count++ #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 'int *' */ static gl_tls_key_t bufmax_key; /* TLS key for a 'size_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) /* 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; int xvec_length = strlen (string1); int yvec_length = strlen (string2); int i; size_t fdiag_len; int *buffer; size_t bufmax; /* short-circuit obvious comparisons */ if (xvec_length == 0 || yvec_length == 0) /* Prob: 1% */ return (xvec_length == 0 && yvec_length == 0 ? 1.0 : 0.0); 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). */ volatile double upper_bound = (double) (2 * MIN (xvec_length, yvec_length)) / (xvec_length + yvec_length); 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 (xvec_length + yvec_length >= 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). */ int occ_diff[UCHAR_MAX + 1]; /* array C -> OCC(X,C) - OCC(Y,C) */ int sum; /* 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++) { int d = occ_diff[i]; sum += (d >= 0 ? d : -d); } upper_bound = 1.0 - (double) sum / (xvec_length + yvec_length); 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 256. */ ctxt.too_expensive = 1; for (i = xvec_length + yvec_length; i != 0; i >>= 2) ctxt.too_expensive <<= 1; if (ctxt.too_expensive < 256) ctxt.too_expensive = 256; /* Allocate memory for fdiag and bdiag from a thread-local pool. */ fdiag_len = xvec_length + yvec_length + 3; gl_once (keys_init_once, keys_init); buffer = (int *) gl_tls_get (buffer_key); bufmax = (size_t) (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. */ if (buffer != NULL) free (buffer); buffer = (int *) xnmalloc (bufmax, 2 * sizeof (int)); 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 ? (int) ((xvec_length + yvec_length) * (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-20111211-stable/lib/fstrcmp.h����������������������������������������������������������������0000664�0000000�0000000�00000003061�11671051007�0017067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fuzzy string comparison. Copyright (C) 1995, 2000, 2002-2003, 2006, 2008-2011 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 <http://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) #ifdef __cplusplus } #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fsusage.c����������������������������������������������������������������0000664�0000000�0000000�00000021126�11671051007�0017043�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-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 <http://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 defined HAVE_SYS_FILSYS_H && !defined _CRAY # include <sys/filsys.h> /* SVR2 */ # endif # if HAVE_SYS_STATFS_H # include <sys/statfs.h> # endif # if HAVE_DUSTAT_H /* AIX PS/2 */ # include <sys/dustat.h> # endif # include "full-read.h" #endif /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close /* 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)) /* 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) { #if defined STAT_STATVFS /* POSIX, except glibc/Linux */ struct statvfs fsd; if (statvfs (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_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_STATFS2_FS_DATA /* Ultrix */ struct fs_data fsd; if (statfs (file, &fsd) != 1) return -1; fsp->fsu_blocksize = 1024; fsp->fsu_blocks = PROPAGATE_ALL_ONES (fsd.fd_req.btot); fsp->fsu_bfree = PROPAGATE_ALL_ONES (fsd.fd_req.bfree); fsp->fsu_bavail = PROPAGATE_TOP_BIT (fsd.fd_req.bfreen); fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (fsd.fd_req.bfreen) != 0; fsp->fsu_files = PROPAGATE_ALL_ONES (fsd.fd_req.gtot); fsp->fsu_ffree = PROPAGATE_ALL_ONES (fsd.fd_req.gfree); #elif defined STAT_READ_FILSYS /* SVR2 */ # ifndef SUPERBOFF # define SUPERBOFF (SUPERB * 512) # endif struct filsys fsd; int fd; if (! disk) { errno = 0; return -1; } fd = open (disk, O_RDONLY); if (fd < 0) return -1; lseek (fd, (off_t) SUPERBOFF, 0); if (full_read (fd, (char *) &fsd, sizeof fsd) != sizeof fsd) { close (fd); return -1; } close (fd); fsp->fsu_blocksize = (fsd.s_type == Fs2b ? 1024 : 512); fsp->fsu_blocks = PROPAGATE_ALL_ONES (fsd.s_fsize); fsp->fsu_bfree = PROPAGATE_ALL_ONES (fsd.s_tfree); fsp->fsu_bavail = PROPAGATE_TOP_BIT (fsd.s_tfree); fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (fsd.s_tfree) != 0; fsp->fsu_files = (fsd.s_isize == -1 ? UINTMAX_MAX : (fsd.s_isize - 2) * INOPB * (fsd.s_type == Fs2b ? 2 : 1)); fsp->fsu_ffree = PROPAGATE_ALL_ONES (fsd.s_tinode); #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_BSIZE /* glibc/Linux, 4.3BSD, SunOS 4, \ MacOS 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, Dynix, old Irix, old AIX, \ Dolphin */ # if !_AIX && !defined _SEQUENT_ && !defined DOLPHIN # define f_bavail f_bfree # endif 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. */ # if _AIX || defined _CRAY fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_bsize); # else fsp->fsu_blocksize = 512; # endif #endif #if (defined STAT_STATVFS || defined STAT_STATVFS64 \ || (!defined STAT_STATFS2_FS_DATA && !defined STAT_READ_FILSYS)) 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; } #if defined _AIX && defined _I386 /* AIX PS/2 does not supply statfs. */ int statfs (char *file, struct statfs *fsb) { struct stat stats; struct dustat fsd; if (stat (file, &stats) != 0) return -1; if (dustat (stats.st_dev, 0, &fsd, sizeof (fsd))) return -1; fsb->f_type = 0; fsb->f_bsize = fsd.du_bsize; fsb->f_blocks = fsd.du_fsize - fsd.du_isize; fsb->f_bfree = fsd.du_tfree; fsb->f_bavail = fsd.du_tfree; fsb->f_files = (fsd.du_isize - 2) * fsd.du_inopb; fsb->f_ffree = fsd.du_tinode; fsb->f_fsid.val[0] = fsd.du_site; fsb->f_fsid.val[1] = fsd.du_pckno; return 0; } #endif /* _AIX && _I386 */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fsusage.h����������������������������������������������������������������0000664�0000000�0000000�00000002755�11671051007�0017057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fsusage.h -- declarations for file system space usage info Copyright (C) 1991-1992, 1997, 2003-2006, 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 <http://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-20111211-stable/lib/fsync.c������������������������������������������������������������������0000664�0000000�0000000�00000004062�11671051007�0016530�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. http://www.sqlite.org/cvstrac/rlog?f=sqlite/src/os_win.c http://www.sqlite.org/copyright.html Written by Richard W.M. Jones <rjones.at.redhat.com> Copyright (C) 2008-2011 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 General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* FlushFileBuffers */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <errno.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" 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) { /* 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-20111211-stable/lib/ftell.c������������������������������������������������������������������0000664�0000000�0000000�00000002155�11671051007�0016515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An ftell() function that works around platform bugs. 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 <http://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-20111211-stable/lib/ftello.c�����������������������������������������������������������������0000664�0000000�0000000�00000004335�11671051007�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An ftello() function that works around platform bugs. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.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 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); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/ftoastr.c����������������������������������������������������������������0000664�0000000�0000000�00000010152�11671051007�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* floating point to accurate string Copyright (C) 2010-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 <http://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 "intprops.h" #include <float.h> #include <stdio.h> #include <stdlib.h> #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 ldtoastr # if HAVE_C99_STRTOLD # define STRTOF strtold # endif #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 dtoastr #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 ftoastr # if HAVE_STRTOF # define STRTOF strtof # endif #endif /* On pre-C99 hosts, approximate strtof and strtold with strtod. This may generate one or two extra digits, but that's better than not working at all. */ #ifndef STRTOF # define STRTOF 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. */ #if ! 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) { 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, x); if (n < 0) return n; if (n < width) n = width; } if (n < bufsize) n = sprintf (buf, format, width, prec, 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: Florian Loitsch, Printing floating-point numbers quickly and accurately with integers. ACM SIGPLAN notices 46, 6 (June 2010), 233-243 <http://dx.doi.org/10.1145/1809028.1806623>; also see the 2010-03-21 draft <http://florian.loitsch.com/tmp/article.pdf>. */ 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, x); if (n < 0 || FLOAT_PREC_BOUND <= prec || (n < bufsize && STRTOF (buf, NULL) == x)) return n; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/ftoastr.h����������������������������������������������������������������0000664�0000000�0000000�00000014070�11671051007�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* floating point to accurate string Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef _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); /* 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 FTOASTER_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. */ #if FLT_RADIX == 10 /* decimal floating point */ enum { _GL_FLT_PREC_BOUND = FLT_MANT_DIG }; enum { _GL_DBL_PREC_BOUND = DBL_MANT_DIG }; enum { _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 (CHAR_BIT * (int) sizeof (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" <http://docs.sun.com/source/806-3568/ncg_goldberg.html>. */ # define _GL_FLOAT_PREC_BOUND(dig) \ (INT_BITS_STRLEN_BOUND ((dig) * _GL_FLOAT_DIG_BITS_BOUND) + 1) enum { _GL_FLT_PREC_BOUND = _GL_FLOAT_PREC_BOUND ( FLT_MANT_DIG) }; enum { _GL_DBL_PREC_BOUND = _GL_FLOAT_PREC_BOUND ( DBL_MANT_DIG) }; enum { _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-20111211-stable/lib/ftruncate.c��������������������������������������������������������������0000664�0000000�0000000�00000001200�11671051007�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ftruncate emulations for native Windows. This file is in the public domain. */ #include <config.h> /* Specification. */ #include <unistd.h> #if HAVE_CHSIZE # include <errno.h> # include <io.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" static inline 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; } # define chsize chsize_nothrow # endif int ftruncate (int fd, off_t length) { return chsize (fd, length); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fts-cycle.c��������������������������������������������������������������0000664�0000000�0000000�00000010265�11671051007�0017301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect cycles in file tree walks. Copyright (C) 2003-2006, 2009-2011 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 <http://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_delete (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-20111211-stable/lib/fts.c��������������������������������������������������������������������0000664�0000000�0000000�00000220146�11671051007�0016205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Traverse a file hierarchy. Copyright (C) 2004-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 <http://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(lint) static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94"; #endif /* LIBC_SCCS and not lint */ #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 <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if ! _LIBC # include "fcntl--.h" # include "dirent--.h" # include "unistd--.h" /* FIXME - use fcntl(F_DUPFD_CLOEXEC)/openat(O_CLOEXEC) once they are supported. */ # include "cloexec.h" # include "openat.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) #else # define fts_assert(expr) \ do \ { \ if (!(expr)) \ abort (); \ } \ while (false) #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); } /* file-descriptor-relative opendir. */ /* FIXME: if others need this function, move it into lib/openat.c */ static inline DIR * internal_function opendirat (int fd, char const *dir, int extra_flags, int *pdir_fd) { int new_fd = openat (fd, dir, (O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | extra_flags)); DIR *dirp; if (new_fd < 0) return NULL; set_cloexec_flag (new_fd, true); dirp = fdopendir (new_fd); if (dirp) *pdir_fd = new_fd; else { int saved_errno = errno; close (new_fd); errno = saved_errno; } return dirp; } /* 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 inline int internal_function diropen (FTS const *sp, char const *dir) { int open_flags = (O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | (ISSET (FTS_PHYSICAL) ? O_NOFOLLOW : 0) | (ISSET (FTS_NOATIME) ? O_NOATIME : 0)); int fd = (ISSET (FTS_CWDFD) ? openat (sp->fts_cwd_fd, dir, open_flags) : open (dir, open_flags)); if (0 <= fd) set_cloexec_flag (fd, true); 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 */ if ((sp = malloc(sizeof(FTS))) == NULL) return (NULL); memset(sp, 0, sizeof(FTS)); 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 | (ISSET (FTS_NOATIME) ? O_NOATIME : 0)); 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 ((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; 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); } #if defined __linux__ \ && 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_TMPFS 0x1021994 # define S_MAGIC_NFS 0x6969 # define S_MAGIC_REISERFS 0x52654973 # define S_MAGIC_PROC 0x9FA0 /* Return false if it is easy to determine the file system type of the directory on which DIR_FD is open, and sorting dirents on inode numbers is known not to improve traversal performance with that type of file system. Otherwise, return true. */ static bool dirent_inode_sort_may_be_useful (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. */ struct statfs fs_buf; /* If fstatfs fails, assume sorting would be useful. */ if (fstatfs (dir_fd, &fs_buf) != 0) return true; /* FIXME: what about when f_type is not an integral type? deal with that if/when it's encountered. */ switch (fs_buf.f_type) { case S_MAGIC_TMPFS: case S_MAGIC_NFS: /* On a file system of any of these types, sorting is unnecessary, and hence wasteful. */ return false; default: return true; } } /* Given a file descriptor DIR_FD open on a directory D, return true if it is valid to apply the leaf-optimization technique of counting directories in D via stat.st_nlink. */ static bool leaf_optimization_applies (int dir_fd) { struct statfs fs_buf; /* If fstatfs fails, assume we can't use the optimization. */ if (fstatfs (dir_fd, &fs_buf) != 0) return false; /* FIXME: do we need to detect AFS mount points? I doubt it, unless fstatfs can report S_MAGIC_REISERFS for such a directory. */ switch (fs_buf.f_type) { /* List here the file system types that lack useable dirent.d_type info, yet for which the optimization does apply. */ case S_MAGIC_REISERFS: return true; case S_MAGIC_PROC: /* Explicitly listing this or any other file system type for which the optimization is not applicable is not necessary, but we leave it here to document the risk. Per http://bugs.debian.org/143111, /proc may have bogus stat.st_nlink values. */ /* fall through */ default: return false; } } #else static bool dirent_inode_sort_may_be_useful (int dir_fd _GL_UNUSED) { return true; } static bool leaf_optimization_applies (int dir_fd _GL_UNUSED) { return false; } #endif /* link-count-optimization entry: map a stat.st_dev number to a boolean: leaf_optimization_works */ struct LCO_ent { dev_t st_dev; bool opt_ok; }; /* 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 { LCO_HT_INITIAL_SIZE = 13 }; static size_t LCO_hash (void const *x, size_t table_size) { struct LCO_ent const *ax = x; return (uintmax_t) ax->st_dev % table_size; } static bool LCO_compare (void const *x, void const *y) { struct LCO_ent const *ax = x; struct LCO_ent const *ay = y; return ax->st_dev == ay->st_dev; } /* Ask the same question as leaf_optimization_applies, but query the cache first (FTS.fts_leaf_optimization_works_ht), and if necessary, update that cache. */ static bool link_count_optimize_ok (FTSENT const *p) { FTS *sp = p->fts_fts; Hash_table *h = sp->fts_leaf_optimization_works_ht; struct LCO_ent tmp; struct LCO_ent *ent; bool opt_ok; struct LCO_ent *t2; /* 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 false; /* map st_dev to the boolean, leaf_optimization_works */ if (h == NULL) { h = sp->fts_leaf_optimization_works_ht = hash_initialize (LCO_HT_INITIAL_SIZE, NULL, LCO_hash, LCO_compare, free); if (h == NULL) return false; } tmp.st_dev = p->fts_statp->st_dev; ent = hash_lookup (h, &tmp); if (ent) return ent->opt_ok; /* Look-up failed. Query directly and cache the result. */ t2 = malloc (sizeof *t2); if (t2 == NULL) return false; /* Is it ok to perform the optimization in the dir, FTS_CWD_FD? */ opt_ok = leaf_optimization_applies (sp->fts_cwd_fd); t2->opt_ok = opt_ok; t2->st_dev = p->fts_statp->st_dev; ent = hash_insert (h, t2); if (ent == NULL) { /* insertion failed */ free (t2); return false; } fts_assert (ent == t2); return opt_ok; } /* * 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) { FTSENT *parent = p->fts_parent; if (FTS_ROOTLEVEL < p->fts_level /* ->fts_n_dirs_remaining is not valid for command-line-specified names. */ && parent->fts_n_dirs_remaining == 0 && ISSET(FTS_NOSTAT) && ISSET(FTS_PHYSICAL) && link_count_optimize_ok (parent)) { /* nothing more needed */ } else { p->fts_info = fts_stat(sp, p, false); if (S_ISDIR(p->fts_statp->st_mode) && p->fts_level != FTS_ROOTLEVEL && parent->fts_n_dirs_remaining) parent->fts_n_dirs_remaining--; } } 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)) { int saved_errno = errno; (void)close(p->fts_symfd); __set_errno (saved_errno); 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); } 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(FTS *sp _GL_UNUSED, 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 (a[0]->fts_statp->st_ino < b[0]->fts_statp->st_ino ? -1 : b[0]->fts_statp->st_ino < a[0]->fts_statp->st_ino ? 1 : 0); } /* 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) \ | (ISSET (FTS_NOATIME) ? O_NOATIME : 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; nlink_t nlinks; bool nostat; size_t len, maxlen, new_len; char *cp; int dir_fd; FTSENT *cur = sp->fts_cur; bool continue_readdir = !!cur->fts_dirp; /* 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. */ size_t max_entries = (sp->fts_compar == NULL ? FTS_MAX_READDIR_ENTRIES : SIZE_MAX); /* * Nlinks is the number of possible entries of type directory in the * directory if we're cheating on stat calls, 0 if we're not doing * any stat calls at all, (nlink_t) -1 if we're statting everything. */ if (type == BNAMES) { nlinks = 0; /* Be quiet about nostat, GCC. */ nostat = false; } else if (ISSET(FTS_NOSTAT) && ISSET(FTS_PHYSICAL)) { nlinks = (cur->fts_statp->st_nlink - (ISSET(FTS_SEEDOT) ? 0 : 2)); nostat = true; } else { nlinks = -1; nostat = false; } /* * 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 if (nlinks || type == BREAD) { if (ISSET(FTS_CWDFD)) { dir_fd = dup (dir_fd); if (0 <= dir_fd) set_cloexec_flag (dir_fd, true); } if (dir_fd < 0 || fts_safe_changedir(sp, cur, dir_fd, NULL)) { if (nlinks && 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; } else descend = false; /* * 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) { bool is_dir; struct dirent *dp = readdir(cur->fts_dirp); if (dp == NULL) break; if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name)) continue; if ((p = fts_alloc (sp, dp->d_name, _D_EXACT_NAMLEN (dp))) == NULL) goto mem1; if (_D_EXACT_NAMLEN (dp) >= maxlen) { /* include space for NUL */ oldaddr = sp->fts_path; if (! fts_palloc(sp, _D_EXACT_NAMLEN (dp) + 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_EXACT_NAMLEN (dp); 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_PHYSICAL) && ISSET(FTS_NOSTAT) && DT_IS_KNOWN(dp) && ! DT_MUST_BE(dp, DT_DIR)); 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); is_dir = (ISSET(FTS_PHYSICAL) && DT_MUST_BE(dp, DT_DIR)); } else { p->fts_info = fts_stat(sp, p, false); is_dir = (p->fts_info == FTS_D || p->fts_info == FTS_DC || p->fts_info == FTS_DOT); } /* Decrement link count if applicable. */ if (nlinks > 0 && is_dir) nlinks -= nostat; /* 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; } ++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_DP; fts_lfree(head); return (NULL); } /* 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, then sort the directory entries on increasing inode numbers. */ if (nitems > _FTS_INODE_SORT_DIR_ENTRIES_THRESHOLD && !sp->fts_compar && ISSET (FTS_CWDFD) && dirent_inode_sort_may_be_useful (sp->fts_cwd_fd)) { 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 = dup (cwd_fd); 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 parent_fd = openat (cwd_fd, "..", O_SEARCH | O_NOATIME); 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; int saved_errno; 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)) { saved_errno = errno; if (errno == ENOENT && lstat(p->fts_accpath, sbp) == 0) { __set_errno (0); return (FTS_SLNONE); } p->fts_errno = saved_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)) { p->fts_n_dirs_remaining = (sbp->st_nlink - (ISSET(FTS_SEEDOT) ? 0 : 2)); 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 = sizeof(FTSENT) + namelen; if ((p = malloc(len)) == NULL) return (NULL); /* Copy the name and guarantee NUL termination. */ memmove(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); is_dotdot = true; 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-20111211-stable/lib/fts_.h�������������������������������������������������������������������0000664�0000000�0000000�00000031373�11671051007�0016353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Traverse a file hierarchy. Copyright (C) 2004-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 <http://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> # else # 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 # define FTS_NOATIME 0x0800 /* use O_NOATIME during traversal */ # 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) */ nlink_t fts_n_dirs_remaining; /* count down from st_nlink */ # 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[1]; /* file name */ } FTSENT; #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 #if __GNUC_PREREQ (3,4) # undef __attribute_warn_unused_result__ # define __attribute_warn_unused_result__ \ __attribute__ ((__warn_unused_result__)) #else # define __attribute_warn_unused_result__ /* empty */ #endif __BEGIN_DECLS FTSENT *fts_children (FTS *, int) __THROW __attribute_warn_unused_result__; int fts_close (FTS *) __THROW __attribute_warn_unused_result__; FTS *fts_open (char * const *, int, int (*)(const FTSENT **, const FTSENT **)) __THROW __attribute_warn_unused_result__; FTSENT *fts_read (FTS *) __THROW __attribute_warn_unused_result__; int fts_set (FTS *, FTSENT *, int) __THROW; __END_DECLS #endif /* fts.h */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/full-read.c��������������������������������������������������������������0000664�0000000�0000000�00000001500�11671051007�0017253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read that retries after partial reads and interrupts. Copyright (C) 2002-2003, 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 <http://www.gnu.org/licenses/>. */ #define FULL_READ #include "full-write.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/full-read.h��������������������������������������������������������������0000664�0000000�0000000�00000002172�11671051007�0017266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read() that reads all it is asked to read. Copyright (C) 2002, 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, read to the Free Software Foundation, along with this program. If not, see <http://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-20111211-stable/lib/full-write.c�������������������������������������������������������������0000664�0000000�0000000�00000004361�11671051007�0017502�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-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 <http://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-20111211-stable/lib/full-write.h�������������������������������������������������������������0000664�0000000�0000000�00000002166�11671051007�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write() that writes all it is asked to write. Copyright (C) 2002-2003, 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 <http://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-20111211-stable/lib/futimens.c���������������������������������������������������������������0000664�0000000�0000000�00000002605�11671051007�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the access and modification time of an open fd. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #include <sys/stat.h> #include "utimens.h" /* Set the access and modification time stamps 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 time stamps 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-20111211-stable/lib/fwritable.c��������������������������������������������������������������0000664�0000000�0000000�00000003736�11671051007�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fwritable.h" #include "stdio-impl.h" 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_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return (fp->_flags & _IO_NO_WRITES) == 0; #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ 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; #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-20111211-stable/lib/fwritable.h��������������������������������������������������������������0000664�0000000�0000000�00000002371�11671051007�0017373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://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 */ # include <stdio_ext.h> # define fwritable(stream) (__fwritable (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool fwritable (FILE *stream); # ifdef __cplusplus } # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fwriteerror.c������������������������������������������������������������0000664�0000000�0000000�00000012164�11671051007�0017762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect write error on a stream. Copyright (C) 2003-2006, 2008-2011 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 <http://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-20111211-stable/lib/fwriteerror.h������������������������������������������������������������0000664�0000000�0000000�00000005062�11671051007�0017766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect write error on a stream. Copyright (C) 2003, 2005-2006, 2009-2011 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 <http://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-20111211-stable/lib/fwriting.c���������������������������������������������������������������0000664�0000000�0000000�00000004442�11671051007�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fwriting.h" #include "stdio-impl.h" 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_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__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ 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, mingw, NonStop Kernel */ 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 #else # error "Please port gnulib fwriting.c to your platform!" #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/fwriting.h���������������������������������������������������������������0000664�0000000�0000000�00000003411�11671051007�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. 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 <http://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 */ # include <stdio_ext.h> # define fwriting(stream) (__fwriting (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool fwriting (FILE *stream); # ifdef __cplusplus } # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gai_strerror.c�����������������������������������������������������������0000664�0000000�0000000�00000005354�11671051007�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1997, 2001-2002, 2004-2006, 2008-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Philip Blundell <pjb27@cam.ac.uk>, 1997. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/gc-gnulib.c��������������������������������������������������������������0000664�0000000�0000000�00000042373�11671051007�0017264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc-gnulib.c --- Common gnulib internal crypto interface functions * Copyright (C) 2002-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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. */ #ifdef GNULIB_GC_RANDOM # include <unistd.h> # include <sys/types.h> # include <sys/stat.h> # include <fcntl.h> # include <errno.h> #endif /* Hashes. */ #ifdef GNULIB_GC_MD2 # include "md2.h" #endif #ifdef GNULIB_GC_MD4 # include "md4.h" #endif #ifdef GNULIB_GC_MD5 # include "md5.h" #endif #ifdef GNULIB_GC_SHA1 # include "sha1.h" #endif #if defined(GNULIB_GC_HMAC_MD5) || defined(GNULIB_GC_HMAC_SHA1) # include "hmac.h" #endif /* Ciphers. */ #ifdef GNULIB_GC_ARCFOUR # include "arcfour.h" #endif #ifdef GNULIB_GC_ARCTWO # include "arctwo.h" #endif #ifdef GNULIB_GC_DES # include "des.h" #endif #ifdef GNULIB_GC_RIJNDAEL # include "rijndael-api-fst.h" #endif /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close #ifdef GNULIB_GC_RANDOM # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include <windows.h> # include <wincrypt.h> HCRYPTPROV g_hProv = 0; # ifndef PROV_INTEL_SEC # define PROV_INTEL_SEC 22 # endif # ifndef CRYPT_VERIFY_CONTEXT # define CRYPT_VERIFY_CONTEXT 0xF0000000 # endif # endif #endif Gc_rc gc_init (void) { #ifdef GNULIB_GC_RANDOM # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (g_hProv) CryptReleaseContext (g_hProv, 0); /* There is no need to create a container for just random data, so we can use CRYPT_VERIFY_CONTEXT (one call) see: http://blogs.msdn.com/dangriff/archive/2003/11/19/51709.aspx */ /* We first try to use the Intel PIII RNG if drivers are present */ if (!CryptAcquireContext (&g_hProv, NULL, NULL, PROV_INTEL_SEC, CRYPT_VERIFY_CONTEXT)) { /* not a PIII or no drivers available, use default RSA CSP */ if (!CryptAcquireContext (&g_hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFY_CONTEXT)) return GC_RANDOM_ERROR; } # endif #endif return GC_OK; } void gc_done (void) { #ifdef GNULIB_GC_RANDOM # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (g_hProv) { CryptReleaseContext (g_hProv, 0); g_hProv = 0; } # endif #endif return; } #ifdef GNULIB_GC_RANDOM /* Randomness. */ static Gc_rc randomize (int level, char *data, size_t datalen) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (!g_hProv) return GC_RANDOM_ERROR; CryptGenRandom (g_hProv, (DWORD) datalen, data); #else int fd; const char *device; size_t len = 0; int rc; switch (level) { case 0: device = NAME_OF_NONCE_DEVICE; break; case 1: device = NAME_OF_PSEUDO_RANDOM_DEVICE; break; default: device = NAME_OF_RANDOM_DEVICE; break; } if (strcmp (device, "no") == 0) return GC_RANDOM_ERROR; fd = open (device, O_RDONLY); if (fd < 0) return GC_RANDOM_ERROR; do { ssize_t tmp; tmp = read (fd, data, datalen); if (tmp < 0) { int save_errno = errno; close (fd); errno = save_errno; return GC_RANDOM_ERROR; } len += tmp; } while (len < datalen); rc = close (fd); if (rc < 0) return GC_RANDOM_ERROR; #endif return GC_OK; } Gc_rc gc_nonce (char *data, size_t datalen) { return randomize (0, data, datalen); } Gc_rc gc_pseudo_random (char *data, size_t datalen) { return randomize (1, data, datalen); } Gc_rc gc_random (char *data, size_t datalen) { return randomize (2, data, datalen); } #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; #ifdef GNULIB_GC_ARCTWO arctwo_context arctwoContext; char arctwoIV[ARCTWO_BLOCK_SIZE]; #endif #ifdef GNULIB_GC_ARCFOUR arcfour_context arcfourContext; #endif #ifdef GNULIB_GC_DES gl_des_ctx desContext; #endif #ifdef 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) { #ifdef GNULIB_GC_ARCTWO case GC_ARCTWO40: switch (mode) { case GC_ECB: case GC_CBC: break; default: rc = GC_INVALID_CIPHER; } break; #endif #ifdef GNULIB_GC_ARCFOUR case GC_ARCFOUR128: case GC_ARCFOUR40: switch (mode) { case GC_STREAM: break; default: rc = GC_INVALID_CIPHER; } break; #endif #ifdef GNULIB_GC_DES case GC_DES: switch (mode) { case GC_ECB: break; default: rc = GC_INVALID_CIPHER; } break; #endif #ifdef 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) { #ifdef GNULIB_GC_ARCTWO case GC_ARCTWO40: arctwo_setkey (&ctx->arctwoContext, keylen, key); break; #endif #ifdef GNULIB_GC_ARCFOUR case GC_ARCFOUR128: case GC_ARCFOUR40: arcfour_setkey (&ctx->arcfourContext, key, keylen); break; #endif #ifdef GNULIB_GC_DES case GC_DES: if (keylen != 8) return GC_INVALID_CIPHER; gl_des_setkey (&ctx->desContext, key); break; #endif #ifdef 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) { #ifdef GNULIB_GC_ARCTWO case GC_ARCTWO40: if (ivlen != ARCTWO_BLOCK_SIZE) return GC_INVALID_CIPHER; memcpy (ctx->arctwoIV, iv, ivlen); break; #endif #ifdef 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) { #ifdef 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 #ifdef GNULIB_GC_ARCFOUR case GC_ARCFOUR128: case GC_ARCFOUR40: arcfour_stream (&ctx->arcfourContext, data, data, len); break; #endif #ifdef GNULIB_GC_DES case GC_DES: for (; len >= 8; len -= 8, data += 8) gl_des_ecb_encrypt (&ctx->desContext, data, data); break; #endif #ifdef 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) { #ifdef 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 #ifdef GNULIB_GC_ARCFOUR case GC_ARCFOUR128: case GC_ARCFOUR40: arcfour_stream (&ctx->arcfourContext, data, data, len); break; #endif #ifdef GNULIB_GC_DES case GC_DES: for (; len >= 8; len -= 8, data += 8) gl_des_ecb_decrypt (&ctx->desContext, data, data); break; #endif #ifdef 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 20 typedef struct _gc_hash_ctx { Gc_hash alg; Gc_hash_mode mode; char hash[MAX_DIGEST_SIZE]; #ifdef GNULIB_GC_MD2 struct md2_ctx md2Context; #endif #ifdef GNULIB_GC_MD4 struct md4_ctx md4Context; #endif #ifdef GNULIB_GC_MD5 struct md5_ctx md5Context; #endif #ifdef GNULIB_GC_SHA1 struct sha1_ctx sha1Context; #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; ctx = calloc (sizeof (*ctx), 1); if (!ctx) return GC_MALLOC_ERROR; ctx->alg = hash; ctx->mode = mode; switch (hash) { #ifdef GNULIB_GC_MD2 case GC_MD2: md2_init_ctx (&ctx->md2Context); break; #endif #ifdef GNULIB_GC_MD4 case GC_MD4: md4_init_ctx (&ctx->md4Context); break; #endif #ifdef GNULIB_GC_MD5 case GC_MD5: md5_init_ctx (&ctx->md5Context); break; #endif #ifdef GNULIB_GC_SHA1 case GC_SHA1: sha1_init_ctx (&ctx->sha1Context); break; #endif default: rc = GC_INVALID_HASH; break; } switch (mode) { case 0: break; 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; 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) { #ifdef GNULIB_GC_MD2 case GC_MD2: md2_process_bytes (data, len, &ctx->md2Context); break; #endif #ifdef GNULIB_GC_MD4 case GC_MD4: md4_process_bytes (data, len, &ctx->md4Context); break; #endif #ifdef GNULIB_GC_MD5 case GC_MD5: md5_process_bytes (data, len, &ctx->md5Context); break; #endif #ifdef GNULIB_GC_SHA1 case GC_SHA1: sha1_process_bytes (data, len, &ctx->sha1Context); 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) { #ifdef GNULIB_GC_MD2 case GC_MD2: md2_finish_ctx (&ctx->md2Context, ctx->hash); ret = ctx->hash; break; #endif #ifdef GNULIB_GC_MD4 case GC_MD4: md4_finish_ctx (&ctx->md4Context, ctx->hash); ret = ctx->hash; break; #endif #ifdef GNULIB_GC_MD5 case GC_MD5: md5_finish_ctx (&ctx->md5Context, ctx->hash); ret = ctx->hash; break; #endif #ifdef GNULIB_GC_SHA1 case GC_SHA1: sha1_finish_ctx (&ctx->sha1Context, 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) { #ifdef GNULIB_GC_MD2 case GC_MD2: md2_buffer (in, inlen, resbuf); break; #endif #ifdef GNULIB_GC_MD4 case GC_MD4: md4_buffer (in, inlen, resbuf); break; #endif #ifdef GNULIB_GC_MD5 case GC_MD5: md5_buffer (in, inlen, resbuf); break; #endif #ifdef GNULIB_GC_SHA1 case GC_SHA1: sha1_buffer (in, inlen, resbuf); break; #endif default: return GC_INVALID_HASH; } return GC_OK; } #ifdef GNULIB_GC_MD2 Gc_rc gc_md2 (const void *in, size_t inlen, void *resbuf) { md2_buffer (in, inlen, resbuf); return GC_OK; } #endif #ifdef GNULIB_GC_MD4 Gc_rc gc_md4 (const void *in, size_t inlen, void *resbuf) { md4_buffer (in, inlen, resbuf); return GC_OK; } #endif #ifdef GNULIB_GC_MD5 Gc_rc gc_md5 (const void *in, size_t inlen, void *resbuf) { md5_buffer (in, inlen, resbuf); return GC_OK; } #endif #ifdef GNULIB_GC_SHA1 Gc_rc gc_sha1 (const void *in, size_t inlen, void *resbuf) { sha1_buffer (in, inlen, resbuf); return GC_OK; } #endif #ifdef 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 #ifdef 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 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gc-libgcrypt.c�����������������������������������������������������������0000664�0000000�0000000�00000032124�11671051007�0017774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC. * Copyright (C) 2002-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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> #ifdef GNULIB_GC_MD2 # include "md2.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; } #ifdef 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. */ typedef struct _gc_hash_ctx { Gc_hash alg; Gc_hash_mode mode; gcry_md_hd_t gch; #ifdef GNULIB_GC_MD2 char hash[GC_MD2_DIGEST_SIZE]; struct md2_ctx md2Context; #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) { case GC_MD2: gcryalg = GCRY_MD_NONE; break; 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; default: rc = GC_INVALID_HASH; } switch (mode) { case 0: 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; 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; #ifdef GNULIB_GC_MD2 if (ctx->alg != GC_MD2) #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; #ifdef GNULIB_GC_MD2 if (ctx->alg == GC_MD2) md2_process_bytes (data, len, &ctx->md2Context); 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; #ifdef GNULIB_GC_MD2 if (ctx->alg == GC_MD2) { md2_finish_ctx (&ctx->md2Context, ctx->hash); digest = ctx->hash; } else #endif { gcry_md_final (ctx->gch); digest = gcry_md_read (ctx->gch, 0); } return digest; } void gc_hash_close (gc_hash_handle handle) { _gc_hash_ctx *ctx = handle; #ifdef GNULIB_GC_MD2 if (ctx->alg != GC_MD2) #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) { #ifdef GNULIB_GC_MD2 case GC_MD2: md2_buffer (in, inlen, resbuf); return GC_OK; break; #endif #ifdef GNULIB_GC_MD4 case GC_MD4: gcryalg = GCRY_MD_MD4; break; #endif #ifdef GNULIB_GC_MD5 case GC_MD5: gcryalg = GCRY_MD_MD5; break; #endif #ifdef GNULIB_GC_SHA1 case GC_SHA1: gcryalg = GCRY_MD_SHA1; break; #endif #ifdef GNULIB_GC_SHA256 case GC_SHA256: gcryalg = GCRY_MD_SHA256; break; #endif #ifdef GNULIB_GC_SHA384 case GC_SHA384: gcryalg = GCRY_MD_SHA384; break; #endif #ifdef GNULIB_GC_SHA512 case GC_SHA512: gcryalg = GCRY_MD_SHA512; break; #endif #ifdef GNULIB_GC_SHA224 case GC_SHA224: gcryalg = GCRY_MD_SHA224; break; #endif #ifdef GNULIB_GC_RMD160 case GC_RMD160: gcryalg = GCRY_MD_RMD160; break; #endif default: return GC_INVALID_HASH; } gcry_md_hash_buffer (gcryalg, resbuf, in, inlen); return GC_OK; } /* One-call interface. */ #ifdef GNULIB_GC_MD2 Gc_rc gc_md2 (const void *in, size_t inlen, void *resbuf) { md2_buffer (in, inlen, resbuf); return GC_OK; } #endif #ifdef 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 #ifdef 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 #ifdef 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 #ifdef 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 == 16); 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 #ifdef 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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gc-pbkdf2-sha1.c���������������������������������������������������������0000664�0000000�0000000�00000005432�11671051007�0020001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc-pbkdf2-sha1.c --- Password-Based Key Derivation Function a'la PKCS#5 Copyright (C) 2002-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Simon Josefsson. */ #include <config.h> #include "gc.h" #include <stdlib.h> #include <string.h> /* Implement PKCS#5 PBKDF2 as per RFC 2898. The PRF to use is hard coded to be HMAC-SHA1. Inputs are the password P of length PLEN, the salt S of length SLEN, the iteration counter C (> 0), and the desired derived output length DKLEN. Output buffer is DK which must have room for at least DKLEN octets. The output buffer will be filled with the derived data. */ 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) { unsigned int hLen = 20; char U[20]; char T[20]; 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 = gc_hmac_sha1 (P, Plen, tmp, tmplen, U); } else rc = gc_hmac_sha1 (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; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gc.h���������������������������������������������������������������������0000664�0000000�0000000�00000027533�11671051007�0016014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gc.h --- Header file for implementation agnostic crypto wrapper API. * Copyright (C) 2002-2005, 2007-2008, 2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ #ifndef GC_H # define 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 }; typedef enum Gc_hash Gc_hash; enum Gc_hash_mode { GC_HMAC = 1 }; 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 /* 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); 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_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); /* Derive cryptographic keys from a password P of length PLEN, with salt S of length SLEN, placing the result in pre-allocated buffer DK of length DKLEN. An iteration count is specified in C, 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_sha1 (const char *P, size_t Plen, const char *S, size_t Slen, unsigned int c, char *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 /* GC_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gcd.c��������������������������������������������������������������������0000664�0000000�0000000�00000004464�11671051007�0016151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arithmetic. Copyright (C) 2001-2002, 2006, 2009-2011 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 <http://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-20111211-stable/lib/gcd.h��������������������������������������������������������������������0000664�0000000�0000000�00000002014�11671051007�0016143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arithmetic. Copyright (C) 2001-2002, 2006, 2009-2011 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 <http://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-20111211-stable/lib/gen-uni-tables.c���������������������������������������������������������0000664�0000000�0000000�00001147230�11671051007�0020226�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-2011 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 <http://www.gnu.org/licenses/>. */ /* Usage example: $ gen-uni-tables /usr/local/share/Unidata/UnicodeData.txt \ /usr/local/share/Unidata/PropList.txt \ /usr/local/share/Unidata/DerivedCoreProperties.txt \ /usr/local/share/Unidata/ArabicShaping.txt \ /usr/local/share/Unidata/Scripts.txt \ /usr/local/share/Unidata/Blocks.txt \ /usr/local/share/Unidata/PropList-3.0.1.txt \ /usr/local/share/Unidata/EastAsianWidth.txt \ /usr/local/share/Unidata/LineBreak.txt \ /usr/local/share/Unidata/WordBreakProperty.txt \ /usr/local/share/Unidata/GraphemeBreakProperty.txt \ /usr/local/share/Unidata/CompositionExclusions.txt \ /usr/local/share/Unidata/SpecialCasing.txt \ /usr/local/share/Unidata/CaseFolding.txt \ 6.0.0 */ #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> /* ========================================================================= */ /* 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 artefacts, 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 120 /* 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); } } /* ========================================================================= */ /* 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"); 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 <http://www.gnu.org/licenses/>. */\n"); 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); 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%08X", ((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); 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. */ if (value == 0 || ((value & (value - 1)) != 0)) abort (); for (log2_value = 0; value > 1; value >>= 1, log2_value++); 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); 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); if (!(value >= 0 && value <= 255)) abort (); 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 */ }; 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 '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; } 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; } 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; } 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); t.p = 7; t.q = 9; bidi_category_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value = get_bidi_category (ch); 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); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { int value = get_decdigit_value (ch); if (!(value >= -1 && value < 10)) abort (); 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); t.p = 7; t.q = 9; decdigit_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value = 1 + get_decdigit_value (ch); if (!(value >= 0 && value <= 10)) abort (); 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); need_comma = false; for (ch = 0; ch < 0x110000; ch++) { int value = get_digit_value (ch); if (!(value >= -1 && value < 10)) abort (); 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); t.p = 7; t.q = 9; decdigit_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int value = 1 + get_digit_value (ch); if (!(value >= 0 && value <= 10)) abort (); 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); 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[128]; 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); /* 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) { if (nfractions == 128) abort (); 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; if (i == nfractions) abort (); 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) * 7 / 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 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); } } /* ========================================================================= */ /* 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 { if (mirror_char != 0xfffd) abort (); 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); 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 == 0x0027 || 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); } /* ========================================================================= */ /* 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, /* 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 ("STerm", PROP_STERM) PROP ("Variation_Selector", PROP_VARIATION_SELECTOR) PROP ("Pattern_White_Space", PROP_PATTERN_WHITE_SPACE) PROP ("Pattern_Syntax", PROP_PATTERN_SYNTAX) /* 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); } if (!(i1 <= i2 && i2 < 0x110000)) abort (); 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); } if (!(i1 <= i2 && i2 < 0x110000)) abort (); 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 <= 0x12462); /* CUNEIFORM NUMERIC SIGNS */ bool result2 = ((unicode_properties[ch] & (1ULL << PROP_ALPHABETIC)) != 0); if (result1 != result2) abort (); 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 <= 0x0603) || ch == 0x06DD || ch == 0x070F) /* For some reason, the following are not listed as having property Default_Ignorable_Code_Point. */ && !(ch == 0x110BD)) || ((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); if (result1 != result2) abort (); 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); if (result1 != result2) abort (); 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); if (result1 != result2) abort (); 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); if (result1 != result2) abort (); return result1; } /* See DerivedCoreProperties.txt. */ static bool is_property_case_ignorable (unsigned int ch) { bool result1 = (is_WBP_MIDLETTER (ch) || is_WBP_MIDNUMLET (ch) || 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); if (result1 != result2) abort (); 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); if (result1 != result2) abort (); 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); if (result1 != result2) abort (); 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); if (result1 != result2) abort (); 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 */ }; 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[100+1]; char separator1[100+1]; char padding1[100+1]; char schematic_name[100+1]; char separator2[100+1]; char padding2[100+1]; char joining_type_name[100+1]; char separator3[100+1]; char padding3[100+1]; char joining_group_name[100+1]; int joining_type; int joining_group; lineno++; if (fscanf (stream, "%100[^\n]\n", buf) < 1) break; if (buf[0] == '\0' || buf[0] == '#') continue; if (sscanf (buf, "%X%[;]%[ ]%[^;]%[;]%[ ]%[^;]%[;]%[ ]%100[^\n]", &i, separator1, padding1, schematic_name, separator2, padding2, joining_type_name, separator3, padding3, joining_group_name) != 10) { fprintf (stderr, "parse error in '%s':%d\n", arabicshaping_filename, lineno); exit (1); } if (i >= 0x110000) abort (); #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") #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); 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); t.p = 7; t.q = 9; joining_type_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { uint8_t value = unicode_joining_type[ch]; 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) #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); 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); } } static void output_joining_group (const char *filename, const char *version) { FILE *stream; unsigned int ch_min, ch_max, ch, i; 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); ch_min = 0x10FFFF; for (ch = 0; ch < 0x110000; ch++) if (unicode_joining_group[ch] != UC_JOINING_GROUP_NONE) { ch_min = ch; break; } ch_max = 0; for (ch = 0x10FFFF; ch > 0; ch--) if (unicode_joining_group[ch] != UC_JOINING_GROUP_NONE) { ch_max = ch; break; } if (!(ch_min <= ch_max)) abort (); /* If the interval [ch_min, ch_max] is too large, we should better use a 3-level table. */ if (!(ch_max - ch_min < 0x200)) abort (); fprintf (stream, "#define joining_group_header_0 0x%x\n", ch_min); fprintf (stream, "static const unsigned char u_joining_group[0x%x - 0x%x] =\n", ch_max + 1, ch_min); fprintf (stream, "{"); for (i = 0; i <= ch_max - ch_min; i++) { const char *s; ch = ch_min + i; if ((i % 2) == 0) fprintf (stream, "\n "); s = joining_group_as_c_identifier (unicode_joining_group[ch]); fprintf (stream, " %s", s); if (i+1 <= ch_max - ch_min) { fprintf (stream, ","); if (((i+1) % 2) != 0) fprintf (stream, "%*s", 38 - (int) strlen (s), ""); } } fprintf (stream, "\n"); 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; } if (i2 < i1) abort (); if (i2 >= 0x110000) abort (); for (script = numscripts - 1; script >= 0; script--) if (strcmp (scripts[script], scriptname) == 0) break; if (script < 0) { scripts[numscripts] = strdup (scriptname); script = numscripts; numscripts++; if (numscripts == 256) abort (); } 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); 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, "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[256]; 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. */ if (numblocks > 0 && !(blocks[numblocks-1].end < blocks[numblocks].start)) abort (); numblocks++; if (numblocks == 256) abort (); } 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 = 0x30000; /* 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, "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 uint8_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. http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#95710 */ 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. http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#40625 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); t.p = 7; /* or 8 */ t.q = 5; /* or 4 */ identsyntax_table_init (&t); for (ch = 0; ch < 0x110000; ch++) { int syntaxcode = predicate (ch); 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_outdigit (unsigned int ch) { return (ch >= 0x0030 && ch <= 0x0039); } 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"); /* Verifications. */ 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 >= 25 are resolved at run time. */ LBP_BK = 25, /* 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 = 26, /* 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 = 27, /* zero width space */ LBP_GL = 1, /* non-breaking (glue) */ LBP_SP = 28, /* 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 = 29, /* 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 = 30, /* ambiguous (alphabetic or ideograph) */ LBP_AL = 18, /* ordinary alphabetic and symbol characters */ LBP_H2 = 19, /* Hangul LV syllable */ LBP_H3 = 20, /* Hangul LVT syllable */ LBP_ID = 21, /* ideographic */ LBP_JL = 22, /* Hangul L Jamo */ LBP_JV = 23, /* Hangul V Jamo */ LBP_JT = 24, /* Hangul T Jamo */ LBP_SA = 31, /* complex context (South East Asian) */ LBP_XX = 32 /* unknown */ }; /* Returns the line breaking classification for ch, as a bit mask. */ static int64_t get_lbp (unsigned int ch) { int64_t attr = 0; 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; /* 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 */) 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 */ /* 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 == 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 == 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 == 0xABEB /* MEETEI MAYEK CHEIKHEI */ || ch == 0x10857 /* IMPERIAL ARAMAIC SECTION SIGN */ || 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 == 0x12471 /* CUNEIFORM PUNCTUATION SIGN VERTICAL COLON */ || ch == 0x12472 /* CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON */ || ch == 0x12473 /* CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON */) 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 == 0x1806 /* MONGOLIAN TODO SOFT HYPHEN */) 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 */) 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 */) attr |= (int64_t) 1 << LBP_EX; /* inseparable */ if (ch == 0x2024 /* ONE DOT LEADER */ || ch == 0x2025 /* TWO DOT LEADER */ || ch == 0x2026 /* HORIZONTAL ELLIPSIS */ || ch == 0xFE19 /* PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS */) 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 */ || 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 */) 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 == 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 */) 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 == 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 == 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 >= 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; /* 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 >= 0xAA77 && ch <= 0xAA79) /* MYANMAR SYMBOL AITON */ || (ch >= 0xAADE && ch <= 0xAADF) /* TAI VIET SYMBOL */) && ((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 >= 0xAA60 && ch <= 0xAADF) /* Myanmar Extended-A, Tai Viet */)) 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 */)) 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)))) attr |= (int64_t) 1 << LBP_CM; /* ideographic */ if ((ch >= 0x2E80 && ch <= 0x2FFF) /* CJK RADICAL, KANGXI RADICAL, IDEOGRAPHIC DESCRIPTION */ || ch == 0x3000 /* IDEOGRAPHIC SPACE */ || (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_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 >= 0x1B000 && ch <= 0x1B001) /* Kana Supplement */ || (ch >= 0x1F200 && ch <= 0x1F248) /* Enclosed Ideographic Supplement */ || (ch >= 0x1F250 && ch <= 0x1F251) /* Enclosed Ideographic Supplement */ || (ch >= 0x2A700 && ch <= 0x2B734) /* CJK Ideograph Extension C */ || (ch >= 0x2B740 && ch <= 0x2B81D) /* CJK Ideograph Extension D */) if (!(attr & (((int64_t) 1 << LBP_NS) | ((int64_t) 1 << LBP_CM)))) { /* ambiguous (ideograph) ? */ if ((unicode_width[ch] != NULL && unicode_width[ch][0] == 'A' && ch >= 0x2000) || 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 == 0x06DD /* ARABIC END OF AYAH */ || ch == 0x070F /* SYRIAC ABBREVIATION MARK */ || 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_JL) | ((int64_t) 1 << LBP_JV) | ((int64_t) 1 << LBP_JT) | ((int64_t) 1 << LBP_SA) | ((int64_t) 1 << LBP_ID)))) { /* 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 */) 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 >= 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_ID); PRINT_BIT(attr,LBP_JL); PRINT_BIT(attr,LBP_JV); PRINT_BIT(attr,LBP_JT); PRINT_BIT(attr,LBP_SA); 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_ID) TRY(LBP_JL) TRY(LBP_JV) TRY(LBP_JT) TRY(LBP_SA) 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 { 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_ID); PRINT_BIT(attr,LBP_JL); PRINT_BIT(attr,LBP_JV); PRINT_BIT(attr,LBP_JT); PRINT_BIT(attr,LBP_SA); 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. */ if (attr == 0 || ((attr & (attr - 1)) != 0)) abort (); 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_ID); CASE(LBP_JL); CASE(LBP_JV); CASE(LBP_JT); CASE(LBP_SA); 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"); /* Put a GPL header on it. The gnulib module is under LGPL (although it still carries the GPL header), and it's gnulib-tool which replaces the GPL header with an LGPL header. */ fprintf (stream, "/* Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); 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 <http://www.gnu.org/licenses/>. */\n"); 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 }; /* 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_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) 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_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_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) attr |= 1 << WBP_EXTENDNUMLET; } 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"); 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) #undef PROP { fprintf (stderr, "unknown property value '%s' in '%s'\n", propname, wordbreakproperty_filename); exit (1); } if (!(i1 <= i2 && i2 < 0x110000)) abort (); 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) #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. */ if (attr == 0 || ((attr & (attr - 1)) != 0)) abort (); 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); #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, "/* Line breaking properties of Unicode characters. */\n"); fprintf (stream, "/* Generated automatically by gen-uni-tables.c for Unicode %s. */\n", version); fprintf (stream, "\n"); /* Put a GPL header on it. The gnulib module is under LGPL (although it still carries the GPL header), and it's gnulib-tool which replaces the GPL header with an LGPL header. */ fprintf (stream, "/* Copyright (C) 2000-2002, 2004, 2007-2009 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); 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 <http://www.gnu.org/licenses/>. */\n"); 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 17. */ /* 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 }; /* 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"); 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 <http://www.gnu.org/licenses/>. */\n"); 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) #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); 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) / 2];\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) / 2); 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) / 2; i++) { unsigned char *p = (unsigned char *) (t.result + level3_offset); unsigned char value0 = p[i * 2]; unsigned char value1 = p[i * 2 + 1]; if (i > 0 && (i % 8) == 0) fprintf (stream, "\n "); fprintf (stream, " 0x%02x%s", (value1 << 4) + value0, (i+1 < (t.level3_size << t.p) / 2 ? "," : "")); } 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); } } /* 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) #undef PROP { fprintf (stderr, "unknown property value '%s' in %s:%d\n", propname, graphemebreakproperty_filename, lineno); exit (1); } if (!(i1 <= i2 && i2 < 0x110000)) abort (); 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, '>'); if (rangle == NULL) abort (); 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++; } if (*decomposition != '\0') /* MAX_DECOMP_LENGTH is too small. */ abort (); *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) { if (!(offset < (1 << 15))) abort (); decomp_table_add (&t, ch, ((type == UC_DECOMP_CANONICAL ? 0 : 1) << 15) | offset); /* Produce length 3-bytes entries. */ if (length == 0) /* We would need a special representation of zero-length entries. */ abort (); for (i = 0; i < length; i++) { if (offset > 0) fprintf (stream2, ","); if ((offset % 4) == 0) fprintf (stream2, "\n "); if (!(decomposed[i] < (1 << 18))) abort (); 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"); } 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); } if (!(i < 0x110000)) abort (); 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. */ if (strcmp (unicode_attributes[combined].combining, "0") != 0) abort (); 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"); /* Put a GPL header on it. The gnulib module is under LGPL (although it still carries the GPL header), and it's gnulib-tool which replaces the GPL header with an LGPL header. */ fprintf (stream, "/* Copyright (C) 2009 Free Software Foundation, Inc.\n"); fprintf (stream, "\n"); 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 <http://www.gnu.org/licenses/>. */\n"); 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. */ if (strcmp (unicode_attributes[combined].combining, "0") != 0) abort (); 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"); 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 <http://www.gnu.org/licenses/>. */\n"); 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); 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; if (!(ch < 0x110000)) abort (); 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, "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) { if (strlen (rule->language) != 2) abort (); 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 <http://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; } /* * For Emacs M-x compile * Local Variables: * compile-command: " gcc -O -Wall gen-uni-tables.c -Iunictype -o gen-uni-tables && \ ./gen-uni-tables \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/UnicodeData.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/PropList.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/DerivedCoreProperties.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/ArabicShaping.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/Scripts.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/Blocks.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/3.0.1/PropList-3.0.1.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/EastAsianWidth.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/LineBreak.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/auxiliary/WordBreakProperty.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/auxiliary/GraphemeBreakProperty.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/CompositionExclusions.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/SpecialCasing.txt \ /gfs/petix/Volumes/ExtData/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/6.0.0/ucd/CaseFolding.txt \ 6.0.0 \ && diff unilbrk/lbrkprop_org.txt unilbrk/lbrkprop.txt \ && diff uniwbrk/wbrkprop_org.txt uniwbrk/wbrkprop.txt " * End: */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/get-rusage-as.c����������������������������������������������������������0000664�0000000�0000000�00000027405�11671051007�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getter for RLIMIT_AS. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* 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(). MacOS 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) No VMA iteration API exists. 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) No VMA iteration API exists. 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 Win32 API works. mingw: a) There is no setrlimit function. b) The native Win32 API works. BeOS, Haiku: a) On BeOS, there is no setrlimit function. On Haiku, setrlimit exists. RLIMIT_AS is defined but unsupported. 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 static inline 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, 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 inline 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 inline uintptr_t get_rusage_as_via_iterator (void) { uintptr_t total = 0; vma_iterate (vma_iterate_callback, &total); return total; } #else static inline 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__ /* MacOS X, AIX, Cygwin */ /* 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 /* 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-20111211-stable/lib/get-rusage-data.c��������������������������������������������������������0000664�0000000�0000000�00000032007�11671051007�0020360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getter for RLIMIT_DATA. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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. MacOS 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) No VMA iteration API exists. 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) No VMA iteration API exists. 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 Win32 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 unsupported: getrlimit of RLIMIT_DATA always fails with errno = EINVAL. 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 HAVE_SETRLIMIT && defined RLIMIT_DATA # ifdef _AIX # define errno_expected() (errno == EINVAL || errno == EFAULT) # else # define errno_expected() (errno == EINVAL) # endif static inline uintptr_t get_rusage_data_via_setrlimit (void) { uintptr_t result; struct rlimit orig_limit; # ifdef __hpux /* On HP-UX 11.00, setrlimit() RLIMIT_DATA of does not work: It cannot restore the previous limits. On HP-UX 11.11, setrlimit() RLIMIT_DATA of 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 inline uintptr_t get_rusage_data_via_setrlimit (void) { return 0; } #endif #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 inline uintptr_t get_rusage_data_via_iterator (void) { # if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __BEOS__ || defined __HAIKU__ /* On mingw, 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 inline uintptr_t get_rusage_data_via_iterator (void) { return 0; } #endif uintptr_t get_rusage_data (void) { #if (defined __APPLE__ && defined __MACH__) || defined __CYGWIN__ /* MacOS X, 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 # if defined __linux__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined _AIX || defined __sgi || defined __osf__ || defined __sun /* Linux, FreeBSD, NetBSD, OpenBSD, AIX, 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-20111211-stable/lib/getaddrinfo.c������������������������������������������������������������0000664�0000000�0000000�00000024327�11671051007�0017702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get address information (partial implementation). Copyright (C) 1997, 2001-2002, 2004-2011 Free Software Foundation, Inc. Contributed by Simon Josefsson <simon@josefsson.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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> /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the sa == NULL test below. */ #define _GL_ARG_NONNULL(params) #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 defined _WIN32 || defined __WIN32__ # define WIN32_NATIVE #endif /* gl_sockets_startup */ #include "sockets.h" #ifdef WIN32_NATIVE 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; } #endif static inline 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) { 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 WIN32_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) { #ifdef WIN32_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) { #ifdef WIN32_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; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getcwd-lgpl.c������������������������������������������������������������0000664�0000000�0000000�00000006035�11671051007�0017621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification */ #include <unistd.h> #include <errno.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 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) { int saved_errno = errno; free (buf); errno = saved_errno; } 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) { int saved_errno = errno; free (buf); errno = saved_errno; } else { /* Trim to fit, if possible. */ result = realloc (buf, strlen (buf) + 1); if (!result) result = buf; } return result; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getcwd.c�����������������������������������������������������������������0000664�0000000�0000000�00000030502�11671051007�0016661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1999, 2004-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #if !_LIBC # include <config.h> # include <unistd.h> #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, then enable code below to make getcwd more efficient and robust. */ #if defined HAVE_OPENAT || defined GNULIB_OPENAT # 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 #include "pathmax.h" /* 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 !_LIBC # define __getcwd rpl_getcwd # define __lstat lstat # define __closedir closedir # define __opendir opendir # define __readdir readdir #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. */ #undef opendir #undef closedir /* 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 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. */ char * __getcwd (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 stat st; size_t allocated = size; size_t used; #if HAVE_RAW_DECL_GETCWD && 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 (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 (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 (__lstat (".", &st) < 0) goto lose; thisdev = st.st_dev; thisino = st.st_ino; if (__lstat ("/", &st) < 0) goto lose; rootdev = st.st_dev; rootino = st.st_ino; while (!(thisdev == rootdev && thisino == rootino)) { struct dirent *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 = openat (fd, "..", O_RDONLY); if (fd < 0) goto lose; fd_needs_closing = true; parent_status = fstat (fd, &st); #else dotlist[dotlen++] = '.'; dotlist[dotlen++] = '.'; dotlist[dotlen] = '\0'; parent_status = __lstat (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 = __readdir (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 = __readdir (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 = fstatat (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 = __lstat (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 = realloc (dir, used); 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 (fd); #else if (dotlist != dots) free (dotlist); #endif if (buf == NULL) free (dir); __set_errno (save); } return NULL; } #ifdef weak_alias weak_alias (__getcwd, getcwd) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getdate.h����������������������������������������������������������������0000664�0000000�0000000�00000000211�11671051007�0017020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Obsolete; consider using parse-datetime.h instead. */ #include "parse-datetime.h" #define get_date(a, b, c) parse_datetime (a, b, c) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getdelim.c���������������������������������������������������������������0000664�0000000�0000000�00000007160�11671051007�0017202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdelim.c --- Implementation of replacement getdelim function. Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Ported from glibc by Simon Josefsson. */ #include <config.h> /* 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 <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 /* 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) { 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) { 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-20111211-stable/lib/getdomainname.c����������������������������������������������������������0000664�0000000�0000000�00000005257�11671051007�0020225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdomainname emulation for systems that doesn't have it. Copyright (C) 2003, 2006, 2008, 2010-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 <http://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 /* MacOS 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-20111211-stable/lib/getdtablesize.c����������������������������������������������������������0000664�0000000�0000000�00000004772�11671051007�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdtablesize() function for platforms that don't have it. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ #include <stdio.h> #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static inline int _setmaxstdio_nothrow (int newmax) { int result; TRY_MSVC_INVAL { result = _setmaxstdio (newmax); } CATCH_MSVC_INVAL { result = -1; } DONE_MSVC_INVAL; return result; } # define _setmaxstdio _setmaxstdio_nothrow #endif /* Cache for the previous getdtablesize () result. */ 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 (bound) < 0; bound = bound / 2) ; _setmaxstdio (orig_max_stdio); dtablesize = bound; } return dtablesize; } #endif ������gnulib-20111211-stable/lib/getfilecon.c�������������������������������������������������������������0000664�0000000�0000000�00000004753�11671051007�0017534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wrap getfilecon, lgetfilecon, and fgetfilecon Copyright (C) 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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, security_context_t *con); int lgetfilecon (char const *file, security_context_t *con); int fgetfilecon (int fd, security_context_t *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 inline int map_to_failure (int ret, security_context_t *con) { if (ret == 0) { errno = ENOTSUP; return -1; } if (ret == 10 && strcmp (*con, "unlabeled") == 0) { freecon (*con); errno = ENODATA; return -1; } return ret; } int rpl_getfilecon (char const *file, security_context_t *con) { int ret = getfilecon (file, con); return map_to_failure (ret, con); } int rpl_lgetfilecon (char const *file, security_context_t *con) { int ret = lgetfilecon (file, con); return map_to_failure (ret, con); } int rpl_fgetfilecon (int fd, security_context_t *con) { int ret = fgetfilecon (fd, con); return map_to_failure (ret, con); } ���������������������gnulib-20111211-stable/lib/getgroups.c��������������������������������������������������������������0000664�0000000�0000000�00000005667�11671051007�0017441�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-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 <http://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 (int n _GL_UNUSED, GETGROUPS_T *groups _GL_UNUSED) { errno = ENOSYS; return -1; } #else /* HAVE_GETGROUPS */ # undef getgroups # ifndef GETGROUPS_ZERO_BUG # define GETGROUPS_ZERO_BUG 0 # endif /* On at least Ultrix 4.3 and 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; int saved_errno; 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]; } saved_errno = errno; free (gbuf); errno == saved_errno; 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; } saved_errno = errno; free (gbuf); errno = saved_errno; return n_groups; } #endif /* HAVE_GETGROUPS */ �������������������������������������������������������������������������gnulib-20111211-stable/lib/gethostname.c������������������������������������������������������������0000664�0000000�0000000�00000005371�11671051007�0017730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gethostname emulation for SysV and POSIX.1. Copyright (C) 1992, 2003, 2006, 2008-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 <http://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 __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-20111211-stable/lib/gethrxtime.c�������������������������������������������������������������0000664�0000000�0000000�00000003464�11671051007�0017573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gethrxtime -- get high resolution real time Copyright (C) 2005-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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "gethrxtime.h" #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 } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gethrxtime.h�������������������������������������������������������������0000664�0000000�0000000�00000002355�11671051007�0017576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gethrxtime -- get high resolution real time Copyright (C) 2005, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef GETHRXTIME_H_ # define GETHRXTIME_H_ 1 # include "xtime.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. */ # if HAVE_ARITHMETIC_HRTIME_T && HAVE_DECL_GETHRTIME # include <time.h> static inline xtime_t gethrxtime (void) { return gethrtime (); } # else xtime_t gethrxtime (void); # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getline.c����������������������������������������������������������������0000664�0000000�0000000�00000002002�11671051007�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getline.c --- Implementation of replacement getline function. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/getloadavg.c�������������������������������������������������������������0000664�0000000�0000000�00000070623�11671051007�0017531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get the system load averages. Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2011 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 <http://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.in 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__, __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. convex DGUX eunice UNIX emulator under VMS. hpux __MSDOS__ No-op for MSDOS. NeXT sgi sequent Sequent Dynix 3.x.x (BSD) _SEQUENT_ Sequent DYNIX/ptx 1.x.x (SYSV) sony_news NEWS-OS (works at least for 4.1C) UMAX UMAX4_3 VMS WINDOWS32 No-op for Windows95/NT. __linux__ 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. */ /* "configure" defines CONFIGURING_GETLOADAVG to sidestep problems with partially-configured source directories. */ #ifndef CONFIGURING_GETLOADAVG # include <config.h> # include <stdbool.h> #endif /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdio.h> # include <sys/types.h> /* Both the Emacs and non-Emacs sections want this. Some configuration files' definitions for the LOAD_AVE_CVT macro (like sparc.h's) use macros like FSCALE, defined here. */ # if defined (unix) || defined (__unix) # include <sys/param.h> # endif # include "intprops.h" /* The existing Emacs configuration files define a macro called LOAD_AVE_CVT, which accepts a value of type LOAD_AVE_TYPE, and returns the load average multiplied by 100. What we actually want is a macro called LDAV_CVT, which returns the load average as an unmultiplied double. For backwards compatibility, we'll define LDAV_CVT in terms of LOAD_AVE_CVT, but future machine config files should just define LDAV_CVT directly. */ # if !defined (LDAV_CVT) && defined (LOAD_AVE_CVT) # define LDAV_CVT(n) (LOAD_AVE_CVT (n) / 100.0) # endif # if !defined (BSD) && defined (ultrix) /* Ultrix behaves like BSD on Vaxen. */ # define BSD # 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 (ultrix) && defined (mips) # define decstation # 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 /* UTek's /bin/cc on the 4300 has no architecture specific cpp define by default, but _MACH_IND_SYS_TYPES is defined in <sys/types.h>. Combine that with a couple of other things and we'll have a unique match. */ # if !defined (tek4300) && defined (unix) && defined (m68k) && defined (mc68000) && defined (mc68020) && defined (_MACH_IND_SYS_TYPES) # define tek4300 /* Define by emacs, but not by other users. */ # 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 decstation # define LOAD_AVE_TYPE long # endif # ifdef _SEQUENT_ # define LOAD_AVE_TYPE long # endif # ifdef sgi # define LOAD_AVE_TYPE long # endif # ifdef SVR4 # define LOAD_AVE_TYPE long # endif # ifdef sony_news # define LOAD_AVE_TYPE long # endif # ifdef sequent # define LOAD_AVE_TYPE long # endif # ifdef OSF_ALPHA # define LOAD_AVE_TYPE long # endif # if defined (ardent) && defined (titan) # define LOAD_AVE_TYPE long # endif # ifdef tek4300 # define LOAD_AVE_TYPE long # endif # if defined (alliant) && defined (i860) /* Alliant FX/2800 */ # define LOAD_AVE_TYPE long # endif # if defined _AIX && ! defined HAVE_LIBPERFSTAT # define LOAD_AVE_TYPE long # endif # ifdef convex # define LOAD_AVE_TYPE double # ifndef LDAV_CVT # define LDAV_CVT(n) (n) # endif # 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 # if defined (alliant) && defined (i860) /* Alliant FX/2800 */ /* <sys/param.h> defines an incorrect value for FSCALE on an Alliant FX/2800 Concentrix 2.2, according to ghazi@noc.rutgers.edu. */ # undef FSCALE # define FSCALE 100.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) || defined (decstation) # define FSCALE 256 # endif # if defined (sgi) || defined (sequent) /* 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 (ardent) && defined (titan) # define FSCALE 65536.0 # endif # ifdef tek4300 # define FSCALE 100.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 (sequent) # define KERNEL_FILE "/dynix" # endif # if !defined (KERNEL_FILE) && defined (hpux) # define KERNEL_FILE "/hp-ux" # endif # if !defined (KERNEL_FILE) && (defined (_SEQUENT_) || defined (MIPS) || defined (SVR4) || defined (ISC) || defined (sgi) || (defined (ardent) && defined (titan))) # define KERNEL_FILE "/unix" # endif # if !defined (LDAV_SYMBOL) && defined (alliant) # define LDAV_SYMBOL "_Loadavg" # endif # if !defined (LDAV_SYMBOL) && ((defined (hpux) && !defined (hp9000s300)) || defined (_SEQUENT_) || defined (SVR4) || defined (ISC) || defined (sgi) || (defined (ardent) && defined (titan)) || (defined (_AIX) && !defined(HAVE_LIBPERFSTAT))) # define LDAV_SYMBOL "avenrun" # endif # include <unistd.h> /* 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 # ifndef __linux__ # 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__ */ # 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 __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__ 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 == 0) return -1; ksp = kstat_lookup (kc, "unix", 0, "system_misc"); if (ksp == 0) return -1; if (kstat_read (kc, ksp, 0) == -1) return -1; kn = kstat_data_lookup (ksp, "avenrun_1min"); if (kn == 0) { /* 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 != 0) { loadavg[elem++] = (double) kn->value.ul / FSCALE; if (nelem >= 3) { kn = kstat_data_lookup (ksp, "avenrun_15min"); if (kn != 0) 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 (__CYGWIN__)) /* Linux without glibc, 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); 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__ || __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; FILE *fp; fp = fopen (NETBSD_LDAV_FILE, "r"); if (fp == NULL) return -1; count = fscanf (fp, "%lu %lu %lu %lu\n", &load_ave[0], &load_ave[1], &load_ave[2], &scale); (void) fclose (fp); 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) && !defined (ps2)) 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 /* Set the channel to close on exec, so it does not litter any child's descriptor table. */ # ifndef O_CLOEXEC # define O_CLOEXEC 0 # endif int fd = open ("/dev/kmem", O_RDONLY | O_CLOEXEC); if (0 <= fd) { # if F_DUPFD_CLOEXEC if (fd <= STDERR_FILENO) { int fd1 = fcntl (fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); close (fd); fd = fd1; } # endif 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 != 0) { /* 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-20111211-stable/lib/getlogin.c���������������������������������������������������������������0000664�0000000�0000000�00000002322�11671051007�0017213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a working getlogin for systems which lack it. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible, 2010. */ #include <config.h> /* Specification. */ #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif char * getlogin (void) { #if (defined _WIN32 || 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-20111211-stable/lib/getlogin_r.c�������������������������������������������������������������0000664�0000000�0000000�00000004776�11671051007�0017553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a working getlogin_r for systems which lack it. Copyright (C) 2005-2007, 2010-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert, Derek Price, and Bruno Haible. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <string.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #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 __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 && memchr (name, '\0', size) == NULL) /* name contains a truncated result. */ return ERANGE; 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-20111211-stable/lib/getndelim2.c�������������������������������������������������������������0000664�0000000�0000000�00000014010�11671051007�0017432�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-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 <http://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. */ #ifdef 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-20111211-stable/lib/getndelim2.h�������������������������������������������������������������0000664�0000000�0000000�00000003510�11671051007�0017442�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-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 <http://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-20111211-stable/lib/getnline.c���������������������������������������������������������������0000664�0000000�0000000�00000002300�11671051007�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getnline - Read a line from a stream, with bounded memory allocation. Copyright (C) 2003-2004, 2006, 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 <http://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-20111211-stable/lib/getnline.h���������������������������������������������������������������0000664�0000000�0000000�00000004074�11671051007�0017223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getnline - Read a line from a stream, with bounded memory allocation. Copyright (C) 2003-2004, 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 <http://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-20111211-stable/lib/getopt.c�����������������������������������������������������������������0000664�0000000�0000000�00000117504�11671051007�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getopt for GNU. NOTE: getopt is part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 # include <libintl.h> #else # include "gettext.h" # define _(msgid) gettext (msgid) #endif #if defined _LIBC && defined USE_IN_LIBIO # include <wchar.h> #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt_long' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Using `getopt' or setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #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; #if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV extern char *getenv (); #endif #ifdef _LIBC /* Stored original parameters. XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ extern int __libc_argc; extern char **__libc_argv; /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ # ifdef USE_NONOPTION_FLAGS /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; # endif # ifdef USE_NONOPTION_FLAGS # define SWAP_FLAGS(ch1, ch2) \ if (d->__nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } # else # define SWAP_FLAGS(ch1, ch2) # endif #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* 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. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; else { memset (__mempcpy (new_str, __getopt_nonoption_flags, d->__nonoption_flags_max_len), '\0', top + 1 - d->__nonoption_flags_max_len); d->__nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register 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; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register 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; SWAP_FLAGS (bottom + i, middle + i); } /* 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; } /* Initialize the internal data when the first call is made. */ static const char * _getopt_initialize (int argc _GL_UNUSED, char **argv _GL_UNUSED, 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. */ d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); /* 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 (d->__posixly_correct) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; #if defined _LIBC && defined USE_NONOPTION_FLAGS if (!d->__posixly_correct && argc == __libc_argc && argv == __libc_argv) { if (d->__nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') d->__nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = d->__nonoption_flags_max_len = strlen (orig_str); if (d->__nonoption_flags_max_len < argc) d->__nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (d->__nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) d->__nonoption_flags_max_len = -1; else memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), '\0', d->__nonoption_flags_max_len - len); } } d->__nonoption_flags_len = d->__nonoption_flags_max_len; } else d->__nonoption_flags_len = 0; #endif 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) { if (d->optind == 0) d->optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); d->__initialized = 1; } else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ || (d->optind < d->__nonoption_flags_len \ && __getopt_nonoption_flags[d->optind] == '1')) #else # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') #endif 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 ((char **) 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 ((char **) 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. Skip the initial punctuation. */ d->__nextchar = (argv[d->optind] + 1 + (longopts != NULL && argv[d->optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. 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 (longopts != NULL && (argv[d->optind][1] == '-' || (long_only && (argv[d->optind][2] || !strchr (optstring, argv[d->optind][1]))))) { char *nameend; unsigned int namelen; const struct option *p; const struct option *pfound = NULL; struct option_list { const struct option *p; struct option_list *next; } *ambig_list = NULL; int exact = 0; int indfound = -1; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, namelen)) { if (namelen == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else 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. */ struct option_list *newp = malloc (sizeof (*newp)); newp->p = p; newp->next = ambig_list; ambig_list = newp; } } if (ambig_list != NULL && !exact) { if (print_errors) { struct option_list first; first.p = pfound; first.next = ambig_list; ambig_list = &first; #if defined _LIBC && defined USE_IN_LIBIO char *buf = NULL; size_t buflen = 0; FILE *fp = open_memstream (&buf, &buflen); if (fp != NULL) { fprintf (fp, _("%s: option '%s' is ambiguous; possibilities:"), argv[0], argv[d->optind]); do { fprintf (fp, " '--%s'", ambig_list->p->name); ambig_list = ambig_list->next; } while (ambig_list != NULL); fputc_unlocked ('\n', fp); if (__builtin_expect (fclose (fp) != EOF, 1)) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } } #else fprintf (stderr, _("%s: option '%s' is ambiguous; possibilities:"), argv[0], argv[d->optind]); do { fprintf (stderr, " '--%s'", ambig_list->p->name); ambig_list = ambig_list->next; } while (ambig_list != NULL); fputc ('\n', stderr); #endif } d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } while (ambig_list != NULL) { struct option_list *pn = ambig_list->next; free (ambig_list); ambig_list = pn; } if (pfound != NULL) { option_index = indfound; d->optind++; 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) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif if (argv[d->optind - 1][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("\ %s: option '--%s' doesn't allow an argument\n"), argv[0], pfound->name); #else fprintf (stderr, _("\ %s: option '--%s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("\ %s: option '%c%s' doesn't allow an argument\n"), argv[0], argv[d->optind - 1][0], pfound->name); #else fprintf (stderr, _("\ %s: option '%c%s' doesn't allow an argument\n"), argv[0], argv[d->optind - 1][0], pfound->name); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #endif } d->__nextchar += strlen (d->__nextchar); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option '--%s' requires an argument\n"), argv[0], pfound->name) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("%s: option '--%s' requires an argument\n"), argv[0], pfound->name); #endif } d->__nextchar += strlen (d->__nextchar); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } d->__nextchar += strlen (d->__nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* 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. Otherwise interpret it as a short option. */ if (!long_only || argv[d->optind][1] == '-' || strchr (optstring, *d->__nextchar) == NULL) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif if (argv[d->optind][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"), argv[0], d->__nextchar); #else fprintf (stderr, _("%s: unrecognized option '--%s'\n"), argv[0], d->__nextchar); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"), argv[0], argv[d->optind][0], d->__nextchar); #else fprintf (stderr, _("%s: unrecognized option '%c%s'\n"), argv[0], argv[d->optind][0], d->__nextchar); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #endif } d->__nextchar = (char *) ""; d->optind++; d->optopt = 0; return '?'; } } /* 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) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"), argv[0], c); #else fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); #endif #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #endif } d->optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; if (longopts == NULL) goto no_longs; /* 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) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option requires an argument -- '%c'\n"), argv[0], c) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); #endif } d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `d->optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) { if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else 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. */ ambig = 1; } if (ambig && !exact) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"), argv[0], d->optarg) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"), argv[0], d->optarg); #endif } d->__nextchar += strlen (d->__nextchar); d->optind++; return '?'; } if (pfound != NULL) { option_index = indfound; 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) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option '-W %s' doesn't allow an argument\n"), argv[0], pfound->name) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("\ %s: option '-W %s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } d->__nextchar += strlen (d->__nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option '-W %s' requires an argument\n"), argv[0], pfound->name) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("\ %s: option '-W %s' requires an argument\n"), argv[0], pfound->name); #endif } d->__nextchar += strlen (d->__nextchar); return optstring[0] == ':' ? ':' : '?'; } } else d->optarg = NULL; d->__nextchar += strlen (d->__nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } no_longs: d->__nextchar = NULL; return 'W'; /* Let the application handle it. */ } 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) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option requires an argument -- '%c'\n"), argv[0], c) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); #endif } 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. Standalone applications get a POSIX-compliant getopt. */ #if _LIBC enum { POSIXLY_CORRECT = 0 }; #else enum { POSIXLY_CORRECT = 1 }; #endif int getopt (int argc, char *const *argv, const char *optstring) { return _getopt_internal (argc, (char **) argv, optstring, (const struct option *) 0, (int *) 0, 0, POSIXLY_CORRECT); } #ifdef _LIBC int __posix_getopt (int argc, char *const *argv, const char *optstring) { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0, 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-20111211-stable/lib/getopt.in.h��������������������������������������������������������������0000664�0000000�0000000�00000021520�11671051007�0017320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 #ifndef _@GUARD_PREFIX@_GETOPT_H #ifndef __need_getopt # define _@GUARD_PREFIX@_GETOPT_H 1 #endif /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in this header. 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). Then systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #if defined __GETOPT_PREFIX && !defined __need_getopt # if !@HAVE_GETOPT_H@ # include <stdlib.h> # include <stdio.h> # include <unistd.h> # endif # undef __need_getopt # undef getopt # undef getopt_long # undef getopt_long_only # undef optarg # undef opterr # undef optind # undef optopt # undef option # 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) # define getopt __GETOPT_ID (getopt) # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) # define optarg __GETOPT_ID (optarg) # define opterr __GETOPT_ID (opterr) # define optind __GETOPT_ID (optind) # define optopt __GETOPT_ID (optopt) # define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) #endif /* Standalone applications get correct prototypes for getopt_long and getopt_long_only; they declare "char **argv". libc uses prototypes with "char *const *argv" that are incorrect because getopt_long and getopt_long_only can permute argv; this is required for backward compatibility (e.g., for LSB 2.0.1). This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt', but it caused redefinition warnings if both unistd.h and getopt.h were included, since unistd.h includes getopt.h having previously defined __need_getopt. The only place where __getopt_argv_const is used is in definitions of getopt_long and getopt_long_only below, but these are visible only if __need_getopt is not defined, so it is quite safe to rewrite the conditional as follows: */ #if !defined __need_getopt # if defined __GETOPT_PREFIX # define __getopt_argv_const /* empty */ # else # define __getopt_argv_const const # endif #endif /* If __GNU_LIBRARY__ is not already defined, either we are being used standalone, or this is the first header included in the source file. If we are being used with glibc, we need to include <features.h>, but that does not exist if we are standalone. So: if __GNU_LIBRARY__ is not defined, include <ctype.h>, which will pull in <features.h> for us if it's from glibc. (Why ctype.h? It's guaranteed to exist and it doesn't flood the namespace with stuff the way some other headers do.) */ #if !defined __GNU_LIBRARY__ # include <ctype.h> #endif #ifndef __THROW # ifndef __GNUC_PREREQ # define __GNUC_PREREQ(maj, min) (0) # endif # if defined __cplusplus && __GNUC_PREREQ (2,8) # define __THROW throw () # else # define __THROW # endif #endif /* The definition of _GL_ARG_NONNULL is copied here. */ #ifdef __cplusplus extern "C" { #endif /* 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; #ifndef __need_getopt /* 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. */ # if !GNULIB_defined_struct_option 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; }; # define GNULIB_defined_struct_option 1 # endif /* Names for the values of the `has_arg' field of `struct option'. */ # define no_argument 0 # define required_argument 1 # define optional_argument 2 #endif /* need getopt */ /* 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. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW _GL_ARG_NONNULL ((2, 3)); #ifndef __need_getopt 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)); #endif #ifdef __cplusplus } #endif /* Make sure we later can get all the definitions and declarations. */ #undef __need_getopt #endif /* _@GUARD_PREFIX@_GETOPT_H */ #endif /* _@GUARD_PREFIX@_GETOPT_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getopt1.c����������������������������������������������������������������0000664�0000000�0000000�00000010552�11671051007�0016772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef _LIBC # include <getopt.h> #else # include <config.h> # include "getopt.h" #endif #include "getopt_int.h" #include <stdio.h> /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include <stdlib.h> #endif #ifndef NULL #define NULL 0 #endif 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> 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-20111211-stable/lib/getopt_int.h�������������������������������������������������������������0000664�0000000�0000000�00000011742�11671051007�0017572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters, or by calling getopt. PERMUTE is the default. We 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. Using `-' as the first character of the list of option characters selects this mode of operation. 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; /* If the POSIXLY_CORRECT environment variable is set or getopt was called. */ int __posixly_correct; /* 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; #if defined _LIBC && defined USE_NONOPTION_FLAGS int __nonoption_flags_max_len; int __nonoption_flags_len; #endif }; /* 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-20111211-stable/lib/getpagesize.c������������������������������������������������������������0000664�0000000�0000000�00000002272�11671051007�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getpagesize emulation for systems where it cannot be done in a C macro. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible and Martin Lambers. */ #include <config.h> /* Specification. */ #include <unistd.h> /* This implementation is only for native Win32 systems. */ #if (defined _WIN32 || 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-20111211-stable/lib/getpass.c����������������������������������������������������������������0000664�0000000�0000000�00000012251�11671051007�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-2001, 2003-2007, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBC # include <config.h> #endif #include "getpass.h" #include <stdio.h> #if !((defined _WIN32 || 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; struct termios s, t; 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+"); 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 /* 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-20111211-stable/lib/getpass.h����������������������������������������������������������������0000664�0000000�0000000�00000002257�11671051007�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getpass.h -- Read a password of arbitrary length from /dev/tty or stdin. Copyright (C) 2004, 2009-2011 Free Software Foundation, Inc. Contributed by Simon Josefsson <jas@extundo.com>, 2004. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef GETPASS_H # define GETPASS_H /* Get getpass declaration, if available. */ # include <unistd.h> # if defined HAVE_DECL_GETPASS && !HAVE_DECL_GETPASS /* Read a password of arbitrary length from /dev/tty or stdin. */ char *getpass (const char *prompt); # endif #endif /* GETPASS_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getpeername.c������������������������������������������������������������0000664�0000000�0000000�00000002437�11671051007�0017706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getpeername.c --- wrappers for Windows getpeername function Copyright (C) 2008-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 <http://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-20111211-stable/lib/getsockname.c������������������������������������������������������������0000664�0000000�0000000�00000002437�11671051007�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getsockname.c --- wrappers for Windows getsockname function Copyright (C) 2008-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 <http://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-20111211-stable/lib/getsockopt.c�������������������������������������������������������������0000664�0000000�0000000�00000004046�11671051007�0017572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getsockopt.c --- wrappers for Windows getsockopt function Copyright (C) 2008-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 <http://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-20111211-stable/lib/getsubopt.c��������������������������������������������������������������0000664�0000000�0000000�00000005031�11671051007�0017417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse comma separated list into words. Copyright (C) 1996-1997, 1999, 2004, 2007, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 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 <http://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-20111211-stable/lib/gettext.h����������������������������������������������������������������0000664�0000000�0000000�00000023424�11671051007�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience header for conditional use of GNU <libintl.h>. Copyright (C) 1995-1998, 2000-2002, 2004-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option. */ #if 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> #define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ /* || __STDC_VERSION__ >= 199901L */ ) #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 { 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); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (translation != msg_ctxt_id) 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 { 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); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (!(translation == msg_ctxt_id || translation == msgid_plural)) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gettime.c����������������������������������������������������������������0000664�0000000�0000000�00000002315�11671051007�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gettime -- get the system clock Copyright (C) 2002, 2004-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 <http://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 HAVE_NANOTIME nanotime (ts); #else # if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME if (clock_gettime (CLOCK_REALTIME, ts) == 0) return; # endif { struct timeval tv; gettimeofday (&tv, NULL); ts->tv_sec = tv.tv_sec; ts->tv_nsec = tv.tv_usec * 1000; } #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gettimeofday.c�����������������������������������������������������������0000664�0000000�0000000�00000007436�11671051007�0020077�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-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* written by Jim Meyering */ #include <config.h> /* Specification. */ #include <sys/time.h> #include <time.h> #if HAVE_SYS_TIMEB_H # include <sys/timeb.h> #endif #if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME /* 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. The tzset replacement is necessary for at least Solaris 2.5, 2.5.1, and 2.6. */ static struct tm tm_zero_buffer; static struct tm *localtime_buffer_addr = &tm_zero_buffer; # undef localtime extern struct tm *localtime (time_t const *); # undef gmtime extern struct tm *gmtime (time_t const *); /* This is a wrapper for localtime. It is used only on systems for which gettimeofday clobbers the static buffer used for localtime's result. On the first call, record the address of the static buffer that localtime uses for its result. */ struct tm * rpl_localtime (time_t const *timep) { struct tm *tm = localtime (timep); if (localtime_buffer_addr == &tm_zero_buffer) localtime_buffer_addr = tm; return tm; } /* Same as above, since gmtime and localtime use the same buffer. */ struct tm * rpl_gmtime (time_t const *timep) { struct tm *tm = gmtime (timep); if (localtime_buffer_addr == &tm_zero_buffer) localtime_buffer_addr = tm; return tm; } #endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */ #if TZSET_CLOBBERS_LOCALTIME # undef tzset extern void tzset (void); /* This is a wrapper for tzset, for systems on which tzset may clobber the static buffer used for localtime's result. */ void rpl_tzset (void) { /* Save and restore the contents of the buffer used for localtime's result around the call to tzset. */ struct tm save = *localtime_buffer_addr; tzset (); *localtime_buffer_addr = save; } #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. */ int gettimeofday (struct timeval *restrict tv, void *restrict tz) { #undef gettimeofday #if HAVE_GETTIMEOFDAY # if GETTIMEOFDAY_CLOBBERS_LOCALTIME /* Save and restore the contents of the buffer used for localtime's result around the call to gettimeofday. */ struct tm save = *localtime_buffer_addr; # endif int result = gettimeofday (tv, (struct timezone *) tz); # if GETTIMEOFDAY_CLOBBERS_LOCALTIME *localtime_buffer_addr = save; # endif return result; #else # if HAVE__FTIME struct _timeb timebuf; _ftime (&timebuf); tv->tv_sec = timebuf.time; tv->tv_usec = timebuf.millitm * 1000; # 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; # endif return 0; #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getugroups.c�������������������������������������������������������������0000664�0000000�0000000�00000006175�11671051007�0017621�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-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 <http://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 /* Mingw lacks all things related to group management. The best we can do is fail with ENOSYS. */ int getugroups (int maxcount _GL_UNUSED, gid_t *grouplist _GL_UNUSED, char const *username _GL_UNUSED, gid_t gid _GL_UNUSED) { 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-20111211-stable/lib/getugroups.h�������������������������������������������������������������0000664�0000000�0000000�00000001601�11671051007�0017613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get a list of group IDs associated with a specified user ID. 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 <http://www.gnu.org/licenses/>. */ #include <sys/types.h> int getugroups (int maxcount, gid_t *grouplist, char const *username, gid_t gid); �������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/getusershell.c�����������������������������������������������������������0000664�0000000�0000000�00000010261�11671051007�0020112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getusershell.c -- Return names of valid user shells. Copyright (C) 1991, 1997, 2000-2001, 2003-2006, 2008-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 <http://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 USE_UNLOCKED_IO # include "unlocked-io.h" #endif static size_t readname (char **, size_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 size_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 size_t readname (char **name, size_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 = x2nrealloc (*name, size, 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-20111211-stable/lib/git-merge-changelog.c����������������������������������������������������0000664�0000000�0000000�00000201554�11671051007�0021220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* git-merge-changelog - git "merge" driver for GNU style ChangeLog files. Copyright (C) 2008-2010 Bruno Haible <bruno@clisp.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 <http://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 a couple of lines in a section [merge-tools]. See <http://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 "progname.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" #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 http://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, &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 mesage and exit. */ static void usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, "Try `%s --help' for more information.\n", program_name); else { printf ("Usage: %s [OPTION] O-FILE-NAME A-FILE-NAME B-FILE-NAME\n", program_name); 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-gnu-gettext@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 program name for messages. */ set_program_name (argv[0]); /* 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", program_name); printf ("Copyright (C) %s Free Software Foundation, Inc.\n\ License GPLv2+: GNU GPL version 2 or later <http://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\ ", "2008"); 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-20111211-stable/lib/gl_anyavltree_list1.h����������������������������������������������������0000664�0000000�0000000�00000006025�11671051007�0021364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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) [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 elements, and because even on 64-bit machines, sizeof (gl_list_node_impl) * F_87 > 2^64 this would exceed the address space of the machine. */ #define MAXHEIGHT 83 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_anyavltree_list2.h����������������������������������������������������0000664�0000000�0000000�00000062467�11671051007�0021401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ /* Common code of gl_avltree_list.c and gl_avltreehash_list.c. */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Create a subtree for count >= 1 elements. 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 (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; } /* Ensure 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-20111211-stable/lib/gl_anyhash_list1.h�������������������������������������������������������0000664�0000000�0000000�00000002236�11671051007�0020645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with another list. Copyright (C) 2006, 2009-2011 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 <http://www.gnu.org/licenses/>. */ /* Common code of gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.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 values' common hash code */ }; typedef struct gl_hash_entry * gl_hash_entry_t; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_anyhash_list2.h�������������������������������������������������������0000664�0000000�0000000�00000014115�11671051007�0020645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with another list. Copyright (C) 2006, 2009-2011 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 <http://www.gnu.org/licenses/>. */ /* Common code of gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c. */ /* 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 */ }; /* Return 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 */ } /* Resize the hash table with a new estimated size. */ static void hash_resize (gl_list_t list, size_t estimate) { size_t new_size = next_prime (estimate); if (new_size > list->table_size) { gl_hash_entry_t *old_table = list->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 = list->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; } } list->table = new_table; list->table_size = new_size; free (old_table); } return; fail: /* Just continue without resizing the table. */ return; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_anylinked_list1.h�����������������������������������������������������0000664�0000000�0000000�00000003350�11671051007�0021166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a linked list. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_anylinked_list2.h�����������������������������������������������������0000664�0000000�0000000�00000075165�11671051007�0021204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a linked list. Copyright (C) 2006-2011 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 <http://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) *(volatile type *)& #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_linked_size (gl_list_t list) { return list->count; } static const void * gl_linked_node_value (gl_list_t list, gl_list_node_t node) { return node->value; } static int gl_linked_node_nx_set_value (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_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_linked_previous_node (gl_list_t list, gl_list_node_t node) { return (node->prev != &list->root ? node->prev : NULL); } static const void * 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_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_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_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; #ifdef lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static gl_list_iterator_t 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; } #ifdef 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_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static gl_list_node_t 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_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_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_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-20111211-stable/lib/gl_anyrbtree_list1.h�����������������������������������������������������0000664�0000000�0000000�00000006315�11671051007�0021207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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 alternatingly 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-20111211-stable/lib/gl_anyrbtree_list2.h�����������������������������������������������������0000664�0000000�0000000�00000100255�11671051007�0021206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ /* Common code of gl_rbtree_list.c and gl_rbtreehash_list.c. */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Create 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; } /* Rotate left a subtree. B D / \ / \ A D --> B E / \ / \ C E A C Change the tree structure, update the branch sizes. The caller must update the colors and register D as child of its parent. */ static inline 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; } /* Rotate right a subtree. D B / \ / \ B E --> A D / \ / \ A C C E Change the tree structure, update the branch sizes. The caller must update the colors and register B as child of its parent. */ static inline 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; } /* Ensure 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; } } } /* Ensure 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-20111211-stable/lib/gl_anytree_list1.h�������������������������������������������������������0000664�0000000�0000000�00000002713�11671051007�0020661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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]; /* Free 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-20111211-stable/lib/gl_anytree_list2.h�������������������������������������������������������0000664�0000000�0000000�00000063763�11671051007�0020676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006-2011 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 <http://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_tree_size (gl_list_t list) { return (list->root != NULL ? list->root->branch_size : 0); } static const void * gl_tree_node_value (gl_list_t list, gl_list_node_t node) { return node->value; } static int gl_tree_node_nx_set_value (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_tree_next_node (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_tree_previous_node (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; } /* Return the node at the given position < gl_tree_size (list). */ static inline gl_list_node_t 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_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_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_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_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; #ifdef lint result.i = 0; result.j = 0; result.count = 0; #endif return result; } static gl_list_iterator_t 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); #ifdef 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_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static gl_list_node_t 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_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_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_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-20111211-stable/lib/gl_anytree_oset.h��������������������������������������������������������0000664�0000000�0000000�00000016247�11671051007�0020606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2011 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 <http://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_tree_size (gl_oset_t set) { return set->count; } 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 >= VALUE. 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 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_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; #ifdef lint result.i = 0; result.j = 0; result.count = 0; #endif 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. */ 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_oset_iterator_t *iterator) { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_anytreehash_list1.h���������������������������������������������������0000664�0000000�0000000�00000030132�11671051007�0021521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006-2007, 2009-2011 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 <http://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 /* Resize the hash table if needed, after list->count was incremented. */ static inline void hash_resize_after_add (gl_list_t list) { size_t count = (list->root != 0 ? list->root->branch_size : 0); size_t estimate = xsum (count, count / 2); /* 1.5 * count */ if (estimate > list->table_size) hash_resize (list, estimate); } /* Return the position of the given node in the tree. */ static size_t 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 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 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); } /* Return the first element of a non-empty ordered set of nodes. */ static inline 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; } /* Add 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. */ #if __GNUC__ >= 3 # define add_to_bucket(list,node) \ __builtin_expect ((add_to_bucket) (list, node), 0) #endif /* Remove 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 (); } } } /* Build up the hash table during initialization: Store all the nodes of list->root in the hash table. Return 0 upon success, -1 upon out-of-memory. */ static inline 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 # define add_nodes_to_buckets(list) \ __builtin_expect ((add_nodes_to_buckets) (list), 0) #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_anytreehash_list2.h���������������������������������������������������0000664�0000000�0000000�00000016655�11671051007�0021540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006-2007, 2009-2011 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 <http://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 *elt; if (gl_oset_search_atleast (nodes, compare_position_threshold, (void *)(uintptr_t)start_index, &elt)) { node = (gl_list_node_t) 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-20111211-stable/lib/gl_array_list.c����������������������������������������������������������0000664�0000000�0000000�00000042767�11671051007�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by an array. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_array_list.h" #include <stdlib.h> /* Get memcpy. */ #include <string.h> /* Checked size_t computations. */ #include "xsize.h" #ifndef uintptr_t # define uintptr_t unsigned long #endif /* -------------------------- 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_array_size (gl_list_t list) { return list->count; } static const void * 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_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_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 const void * 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_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_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_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; #ifdef lint result.i = 0; result.j = 0; #endif return result; } static gl_list_iterator_t 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; #ifdef 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_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static size_t 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_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_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_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_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-20111211-stable/lib/gl_array_list.h����������������������������������������������������������0000664�0000000�0000000�00000002134�11671051007�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by an array. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_array_oset.c����������������������������������������������������������0000664�0000000�0000000�00000022621�11671051007�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by an array. Copyright (C) 2006-2007, 2009-2011 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 <http://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_array_size (gl_oset_t set) { return set->count; } static size_t 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_array_search (gl_oset_t set, const void *elt) { return gl_array_indexof (set, elt) != (size_t)(-1); } static bool gl_array_search_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp) { 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 (list->elements[high], value) >= 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; } *eltp = set->elements[low]; return true; } } while (low < high); } return false; } /* 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 inline 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 inline 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 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_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; #ifdef 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_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_free, gl_array_iterator, gl_array_iterator_next, gl_array_iterator_free }; ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_array_oset.h����������������������������������������������������������0000664�0000000�0000000�00000002130�11671051007�0020237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by an array. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_avltree_list.c��������������������������������������������������������0000664�0000000�0000000�00000005712�11671051007�0020570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2008-2011 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 <http://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. */ 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_avltree_list_check_invariants (gl_list_t list) { if (list->root != NULL) 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_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-20111211-stable/lib/gl_avltree_list.h��������������������������������������������������������0000664�0000000�0000000�00000002155�11671051007�0020573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_avltree_oset.c��������������������������������������������������������0000664�0000000�0000000�00000046251�11671051007�0020572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_avltree_oset.h" #include <stdlib.h> /* 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_oset_t Data Type -------------------------- */ /* Tree node implementation, valid for this file only. */ struct gl_oset_node_impl { struct gl_oset_node_impl *left; /* left branch, or NULL */ struct gl_oset_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_oset_node_t can be returned without memory allocation, on which the functions gl_oset_remove_node, gl_oset_add_before, gl_oset_add_after can be implemented. */ struct gl_oset_node_impl *parent; int balance; /* heightof(right) - heightof(left), always = -1 or 0 or 1 */ const void *value; }; typedef struct gl_oset_node_impl * gl_oset_node_t; /* Concrete gl_oset_impl type, valid for this file only. */ struct gl_oset_impl { struct gl_oset_impl_base base; struct gl_oset_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) [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 elements, and because even on 64-bit machines, sizeof (gl_oset_node_impl) * F_87 > 2^64 this would exceed the address space of the machine. */ #define MAXHEIGHT 83 /* Ensure 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_oset_t set, gl_oset_node_t node, int height_diff, gl_oset_node_t parent) { for (;;) { gl_oset_node_t child; int previous_balance; int balance_diff; gl_oset_node_t nodeleft; gl_oset_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_oset_node_t *nodep; if (node->parent == NULL) /* node == set->root */ nodep = &set->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_oset_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 */ gl_oset_node_t L = nodeleft->right = nodeleftright->left; gl_oset_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 */ gl_oset_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 */ gl_oset_node_t L = node->right = noderightleft->left; gl_oset_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 gl_oset_node_t gl_tree_nx_add_first (gl_oset_t set, const void *elt) { /* Create new node. */ gl_oset_node_t new_node = (struct gl_oset_node_impl *) malloc (sizeof (struct gl_oset_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; new_node->value = elt; /* Add it to the tree. */ if (set->root == NULL) { set->root = new_node; new_node->parent = NULL; } else { gl_oset_node_t node; for (node = set->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 (set, node, 1, node->parent); } set->count++; return new_node; } static gl_oset_node_t gl_tree_nx_add_before (gl_oset_t set, gl_oset_node_t node, const void *elt) { /* Create new node. */ gl_oset_node_t new_node = (struct gl_oset_node_impl *) malloc (sizeof (struct gl_oset_node_impl)); bool height_inc; if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; new_node->value = elt; /* 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 (set, node, 1, node->parent); set->count++; return new_node; } static gl_oset_node_t gl_tree_nx_add_after (gl_oset_t set, gl_oset_node_t node, const void *elt) { /* Create new node. */ gl_oset_node_t new_node = (struct gl_oset_node_impl *) malloc (sizeof (struct gl_oset_node_impl)); bool height_inc; if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->balance = 0; new_node->value = elt; /* 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 (set, node, 1, node->parent); set->count++; return new_node; } static bool gl_tree_remove_node (gl_oset_t set, gl_oset_node_t node) { gl_oset_node_t parent = node->parent; if (node->left == NULL) { /* Replace node with node->right. */ gl_oset_node_t child = node->right; if (child != NULL) child->parent = parent; if (parent == NULL) set->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; rebalance (set, 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_oset_node_t child = node->left; child->parent = parent; if (parent == NULL) set->root = child; else { if (parent->left == node) parent->left = child; else /* parent->right == node */ parent->right = child; rebalance (set, child, -1, parent); } } else { /* Replace node with the rightmost element of the node->left subtree. */ gl_oset_node_t subst; gl_oset_node_t subst_parent; gl_oset_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) set->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 (set, child, -1, subst_parent != node ? subst_parent : subst); } set->count--; if (set->base.dispose_fn != NULL) set->base.dispose_fn (node->value); free (node); return true; } /* Generic binary tree code. */ #include "gl_anytree_oset.h" /* For debugging. */ static unsigned int check_invariants (gl_oset_node_t node, gl_oset_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); } 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_oset_free, gl_tree_iterator, gl_tree_iterator_next, gl_tree_iterator_free }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_avltree_oset.h��������������������������������������������������������0000664�0000000�0000000�00000002151�11671051007�0020566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_avltreehash_list.c����������������������������������������������������0000664�0000000�0000000�00000007335�11671051007�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006, 2008-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_avltreehash_list.h" #include <stdint.h> /* for SIZE_MAX */ #include <stdlib.h> #include "gl_avltree_oset.h" #include "xsize.h" #ifndef uintptr_t # define uintptr_t unsigned long #endif #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_anyhash_list1.h" /* Generic AVL tree code: Type definitions. */ #include "gl_anyavltree_list1.h" /* Generic hash-table code: Low-level code. */ #include "gl_anyhash_list2.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_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-20111211-stable/lib/gl_avltreehash_list.h����������������������������������������������������0000664�0000000�0000000�00000002227�11671051007�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_carray_list.c���������������������������������������������������������0000664�0000000�0000000�00000056531�11671051007�0020414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a circular array. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_carray_list.h" #include <stdlib.h> /* Get memcpy. */ #include <string.h> /* Checked size_t computations. */ #include "xsize.h" #ifndef uintptr_t # define uintptr_t unsigned long #endif /* -------------------------- 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_carray_size (gl_list_t list) { return list->count; } static const void * 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_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_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 const void * 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_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_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_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; #ifdef lint result.p = 0; result.q = 0; #endif return result; } static gl_list_iterator_t 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; #ifdef 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_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static size_t 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_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_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_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_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-20111211-stable/lib/gl_carray_list.h���������������������������������������������������������0000664�0000000�0000000�00000002152�11671051007�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a circular array. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_linked_list.c���������������������������������������������������������0000664�0000000�0000000�00000003763�11671051007�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a linked list. Copyright (C) 2006, 2008-2011 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 <http://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_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-20111211-stable/lib/gl_linked_list.h���������������������������������������������������������0000664�0000000�0000000�00000002147�11671051007�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a linked list. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_linkedhash_list.c�����������������������������������������������������0000664�0000000�0000000�00000006751�11671051007�0021244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a linked list. Copyright (C) 2006, 2008-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_linkedhash_list.h" #include <stdint.h> /* for SIZE_MAX */ #include <stdlib.h> #include "xsize.h" #ifndef uintptr_t # define uintptr_t unsigned long #endif #define WITH_HASHTABLE 1 /* -------------------------- gl_list_t Data Type -------------------------- */ /* Generic hash-table code. */ #include "gl_anyhash_list1.h" /* Generic linked list code. */ #include "gl_anylinked_list1.h" /* Generic hash-table code. */ #include "gl_anyhash_list2.h" /* Resize the hash table if needed, after list->count was incremented. */ static inline void hash_resize_after_add (gl_list_t list) { size_t count = list->count; size_t estimate = xsum (count, count / 2); /* 1.5 * count */ if (estimate > list->table_size) hash_resize (list, estimate); } /* Add a node to the hash table structure. */ static inline 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 inline 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_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-20111211-stable/lib/gl_linkedhash_list.h�����������������������������������������������������0000664�0000000�0000000�00000002221�11671051007�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a linked list. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_list.c����������������������������������������������������������������0000664�0000000�0000000�00000020605�11671051007�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_list.h" #if !HAVE_INLINE /* Define all functions of this file as inline accesses to the struct gl_list_implementation. Use #define to avoid a warning because of extern vs. static. */ 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_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); } size_t gl_list_size (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->size (list); } 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); } 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_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_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); } 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_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_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_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_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); } 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); } 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); } 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_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_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_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_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_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); } 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); } 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); } bool gl_list_remove (gl_list_t list, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->remove_elt (list, elt); } void gl_list_free (gl_list_t list) { ((const struct gl_list_impl_base *) list)->vtable->list_free (list); } gl_list_iterator_t gl_list_iterator (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->iterator (list); } 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); } 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); } void gl_list_iterator_free (gl_list_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } 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_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); } 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); } 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_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); } 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); } #endif ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_list.h����������������������������������������������������������������0000664�0000000�0000000�00000107432�11671051007�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _GL_LIST_H #define _GL_LIST_H #include <stdbool.h> #include <stddef.h> #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_get_at O(1) O(n) O(log n) O(n) O(log n) gl_list_set_at O(1) O(n) O(log n) O(n) 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 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; /* Create 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. */ #if 0 /* 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); #endif /* Likewise. Return 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); /* Create 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. */ #if 0 /* 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); #endif /* Likewise. Return 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); /* Return the current number of elements in a list. */ extern size_t gl_list_size (gl_list_t list); /* Return the element value represented by a list node. */ extern const void * gl_list_node_value (gl_list_t list, gl_list_node_t node); /* Replace the element value represented by a list node. */ #if 0 /* declared in gl_xlist.h */ extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt); #endif /* Likewise. Return 0 upon success, -1 upon out-of-memory. */ extern int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Return 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); /* Return 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); /* Return 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); /* Replace the element at a given position in the list. POSITION must be >= 0 and < gl_list_size (list). Return its node. */ #if 0 /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, const void *elt); #endif /* Likewise. Return NULL upon out-of-memory. */ extern gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Search whether an element is already in the list. Return 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); /* Search whether an element is already in the list, at a position >= START_INDEX. Return 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); /* Search whether an element is already in the list, at a position >= START_INDEX and < END_INDEX. Return 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); /* Search whether an element is already in the list. Return 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); /* Search whether an element is already in the list, at a position >= START_INDEX. Return 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); /* Search whether an element is already in the list, at a position >= START_INDEX and < END_INDEX. Return 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); /* Add an element as the first element of the list. Return its node. */ #if 0 /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt); #endif /* Likewise. Return NULL upon out-of-memory. */ extern gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Add an element as the last element of the list. Return its node. */ #if 0 /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt); #endif /* Likewise. Return NULL upon out-of-memory. */ extern gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Add an element before a given element node of the list. Return its node. */ #if 0 /* 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); #endif /* Likewise. Return NULL upon out-of-memory. */ extern gl_list_node_t gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Add an element after a given element node of the list. Return its node. */ #if 0 /* 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); #endif /* Likewise. Return NULL upon out-of-memory. */ extern gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Add an element at a given position in the list. POSITION must be >= 0 and <= gl_list_size (list). */ #if 0 /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, const void *elt); #endif /* Likewise. Return NULL upon out-of-memory. */ extern gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Remove an element from the list. Return true. */ extern bool gl_list_remove_node (gl_list_t list, gl_list_node_t node); /* Remove an element at a given position from the list. POSITION must be >= 0 and < gl_list_size (list). Return true. */ extern bool gl_list_remove_at (gl_list_t list, size_t position); /* Search and remove an element from the list. Return true if it was found and removed. */ extern bool gl_list_remove (gl_list_t list, const void *elt); /* Free an entire list. (But this call does not free the elements of the list.) */ extern void gl_list_free (gl_list_t list); /* --------------------- 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; /* Create 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); /* Create 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, store the next element in *ELTP, store its node in *NODEP if NODEP is non-NULL, advance the iterator and return true. Otherwise, return false. */ extern bool gl_list_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep); /* Free an iterator. */ extern void gl_list_iterator_free (gl_list_iterator_t *iterator); /* ---------------------- 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); /* Search whether an element is already in the list. The list is assumed to be sorted with COMPAR. Return 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); /* Search 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. Return 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); /* Search whether an element is already in the list. The list is assumed to be sorted with COMPAR. Return 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); /* Search 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. Return 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); /* Add an element at the appropriate position in the list. The list is assumed to be sorted with COMPAR. Return its node. */ #if 0 /* 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); #endif /* Likewise. Return NULL upon out-of-memory. */ extern gl_list_node_t gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Search and remove an element from the list. The list is assumed to be sorted with COMPAR. Return 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); /* ------------------------ 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); 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; }; #if HAVE_INLINE /* Define all functions of this file as inline accesses to the struct gl_list_implementation. Use #define to avoid a warning because of extern vs. static. */ # define gl_list_nx_create_empty gl_list_nx_create_empty_inline static inline 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); } # define gl_list_nx_create gl_list_nx_create_inline static inline 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); } # define gl_list_size gl_list_size_inline static inline size_t gl_list_size (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->size (list); } # define gl_list_node_value gl_list_node_value_inline static 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); } # define gl_list_node_nx_set_value gl_list_node_nx_set_value_inline static 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); } # define gl_list_next_node gl_list_next_node_inline static 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); } # define gl_list_previous_node gl_list_previous_node_inline static 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); } # define gl_list_get_at gl_list_get_at_inline static 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); } # define gl_list_nx_set_at gl_list_nx_set_at_inline static 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); } # define gl_list_search gl_list_search_inline static 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); } # define gl_list_search_from gl_list_search_from_inline static 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); } # define gl_list_search_from_to gl_list_search_from_to_inline static 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); } # define gl_list_indexof gl_list_indexof_inline static 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); } # define gl_list_indexof_from gl_list_indexof_from_inline static 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); } # define gl_list_indexof_from_to gl_list_indexof_from_to_inline static 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); } # define gl_list_nx_add_first gl_list_nx_add_first_inline static 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); } # define gl_list_nx_add_last gl_list_nx_add_last_inline static 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); } # define gl_list_nx_add_before gl_list_nx_add_before_inline static 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); } # define gl_list_nx_add_after gl_list_nx_add_after_inline static 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); } # define gl_list_nx_add_at gl_list_nx_add_at_inline static 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); } # define gl_list_remove_node gl_list_remove_node_inline static 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); } # define gl_list_remove_at gl_list_remove_at_inline static 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); } # define gl_list_remove gl_list_remove_inline static 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); } # define gl_list_free gl_list_free_inline static inline void gl_list_free (gl_list_t list) { ((const struct gl_list_impl_base *) list)->vtable->list_free (list); } # define gl_list_iterator gl_list_iterator_inline static inline gl_list_iterator_t gl_list_iterator (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->iterator (list); } # define gl_list_iterator_from_to gl_list_iterator_from_to_inline static 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); } # define gl_list_iterator_next gl_list_iterator_next_inline static 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); } # define gl_list_iterator_free gl_list_iterator_free_inline static inline void gl_list_iterator_free (gl_list_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } # define gl_sortedlist_search gl_sortedlist_search_inline static 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); } # define gl_sortedlist_search_from_to gl_sortedlist_search_from_to_inline static 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); } # define gl_sortedlist_indexof gl_sortedlist_indexof_inline static 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); } # define gl_sortedlist_indexof_from_to gl_sortedlist_indexof_from_to_inline static 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); } # define gl_sortedlist_nx_add gl_sortedlist_nx_add_inline static 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); } # define gl_sortedlist_remove gl_sortedlist_remove_inline static 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); } #endif #ifdef __cplusplus } #endif #endif /* _GL_LIST_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_oset.c����������������������������������������������������������������0000664�0000000�0000000�00000005230�11671051007�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type. Copyright (C) 2006-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_oset.h" #if !HAVE_INLINE /* Define all functions of this file as inline accesses to the struct gl_list_implementation. Use #define to avoid a warning because of extern vs. static. */ 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); } size_t gl_oset_size (gl_oset_t set) { return ((const struct gl_oset_impl_base *) set)->vtable->size (set); } bool gl_oset_search (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable->search (set, elt); } 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); } 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); } bool gl_oset_remove (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable ->remove_elt (set, elt); } void gl_oset_free (gl_oset_t set) { ((const struct gl_oset_impl_base *) set)->vtable->oset_free (set); } gl_oset_iterator_t gl_oset_iterator (gl_oset_t set) { return ((const struct gl_oset_impl_base *) set)->vtable->iterator (set); } bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) { return iterator->vtable->iterator_next (iterator, eltp); } void gl_oset_iterator_free (gl_oset_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_oset.h����������������������������������������������������������������0000664�0000000�0000000�00000024767�11671051007�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type. Copyright (C) 2006-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _GL_OSET_H #define _GL_OSET_H #include <stdbool.h> #include <stddef.h> #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_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_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); /* 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); /* Type of function used to compare an element with a threshold. Return 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; /* Create 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. */ #if 0 /* 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); #endif /* Likewise. Return 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); /* Return the current number of elements in an ordered set. */ extern size_t gl_oset_size (gl_oset_t set); /* Search whether an element is already in the ordered set. Return true if found, or false if not present in the set. */ extern bool gl_oset_search (gl_oset_t set, const void *elt); /* Search 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. Return true and store the found element in *ELTP if found, otherwise return false. */ extern bool gl_oset_search_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp); /* Add an element to an ordered set. Return true if it was not already in the set and added, false otherwise. */ #if 0 /* declared in gl_xoset.h */ extern bool gl_oset_add (gl_oset_t set, const void *elt); #endif /* Likewise. Return -1 upon out-of-memory. */ extern int gl_oset_nx_add (gl_oset_t set, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) __attribute__ ((__warn_unused_result__)) #endif ; /* Remove an element from an ordered set. Return true if it was found and removed. */ extern bool gl_oset_remove (gl_oset_t set, const void *elt); /* Free an entire ordered set. (But this call does not free the elements of the set.) */ extern void gl_oset_free (gl_oset_t set); /* --------------------- 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; /* Create 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); /* If there is a next element, store the next element in *ELTP, advance the iterator and return true. Otherwise, return false. */ extern bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp); /* Free an iterator. */ extern void gl_oset_iterator_free (gl_oset_iterator_t *iterator); /* ------------------------ 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); void (*oset_free) (gl_oset_t set); /* gl_oset_iterator_t functions. */ gl_oset_iterator_t (*iterator) (gl_oset_t set); 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; }; #if HAVE_INLINE /* Define all functions of this file as inline accesses to the struct gl_oset_implementation. Use #define to avoid a warning because of extern vs. static. */ # define gl_oset_nx_create_empty gl_oset_nx_create_empty_inline static inline 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); } # define gl_oset_size gl_oset_size_inline static inline size_t gl_oset_size (gl_oset_t set) { return ((const struct gl_oset_impl_base *) set)->vtable->size (set); } # define gl_oset_search gl_oset_search_inline static inline bool gl_oset_search (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable->search (set, elt); } # define gl_oset_search_atleast gl_oset_search_atleast_inline static 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); } # define gl_oset_nx_add gl_oset_nx_add_inline static 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); } # define gl_oset_remove gl_oset_remove_inline static 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); } # define gl_oset_free gl_oset_free_inline static inline void gl_oset_free (gl_oset_t set) { ((const struct gl_oset_impl_base *) set)->vtable->oset_free (set); } # define gl_oset_iterator gl_oset_iterator_inline static inline gl_oset_iterator_t gl_oset_iterator (gl_oset_t set) { return ((const struct gl_oset_impl_base *) set)->vtable->iterator (set); } # define gl_oset_iterator_next gl_oset_iterator_next_inline static inline bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) { return iterator->vtable->iterator_next (iterator, eltp); } # define gl_oset_iterator_free gl_oset_iterator_free_inline static inline void gl_oset_iterator_free (gl_oset_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } #endif #ifdef __cplusplus } #endif #endif /* _GL_OSET_H */ ���������gnulib-20111211-stable/lib/gl_rbtree_list.c���������������������������������������������������������0000664�0000000�0000000�00000005762�11671051007�0020416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2008-2011 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 <http://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. */ 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) 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_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-20111211-stable/lib/gl_rbtree_list.h���������������������������������������������������������0000664�0000000�0000000�00000002147�11671051007�0020415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_rbtree_oset.c���������������������������������������������������������0000664�0000000�0000000�00000066026�11671051007�0020415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_rbtree_oset.h" #include <stdlib.h> /* 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 alternatingly black-red-black-red-...-black-red.) The height of the tree therefore is >= bh, <= 2*bh. */ /* -------------------------- gl_oset_t Data Type -------------------------- */ /* Color of a node. */ typedef enum color { BLACK, RED } color_t; /* Tree node implementation, valid for this file only. */ struct gl_oset_node_impl { struct gl_oset_node_impl *left; /* left branch, or NULL */ struct gl_oset_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_oset_node_t can be returned without memory allocation, on which the functions gl_oset_remove_node, gl_oset_add_before, gl_oset_add_after can be implemented. */ struct gl_oset_node_impl *parent; color_t color; /* node's color */ const void *value; }; typedef struct gl_oset_node_impl * gl_oset_node_t; /* Concrete gl_oset_impl type, valid for this file only. */ struct gl_oset_impl { struct gl_oset_impl_base base; struct gl_oset_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 (gl_oset_node_impl) * (2^59 - 1) > 2^64 this would exceed the address space of the machine. */ #define MAXHEIGHT 116 /* Rotate left a subtree. B D / \ / \ A D --> B E / \ / \ C E A C Change the tree structure, update the branch sizes. The caller must update the colors and register D as child of its parent. */ static inline gl_oset_node_t rotate_left (gl_oset_node_t b_node, gl_oset_node_t d_node) { gl_oset_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; } /* Rotate right a subtree. D B / \ / \ B E --> A D / \ / \ A C C E Change the tree structure, update the branch sizes. The caller must update the colors and register B as child of its parent. */ static inline gl_oset_node_t rotate_right (gl_oset_node_t b_node, gl_oset_node_t d_node) { gl_oset_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; } /* Ensure 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_oset_t set, gl_oset_node_t node, gl_oset_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_oset_node_t grandparent; gl_oset_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_oset_node_t *grandparentp; if (grandparent->parent == NULL) grandparentp = &set->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; } } } /* Ensure 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_oset_t set, gl_oset_node_t child, gl_oset_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_oset_node_t *parentp; if (parent->parent == NULL) parentp = &set->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_oset_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_oset_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 gl_oset_node_t gl_tree_nx_add_first (gl_oset_t set, const void *elt) { /* Create new node. */ gl_oset_node_t new_node = (struct gl_oset_node_impl *) malloc (sizeof (struct gl_oset_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->value = elt; /* Add it to the tree. */ if (set->root == NULL) { new_node->color = BLACK; set->root = new_node; new_node->parent = NULL; } else { gl_oset_node_t node; for (node = set->root; node->left != NULL; ) node = node->left; node->left = new_node; new_node->parent = node; /* Color and rebalance. */ rebalance_after_add (set, new_node, node); } set->count++; return new_node; } static gl_oset_node_t gl_tree_nx_add_before (gl_oset_t set, gl_oset_node_t node, const void *elt) { /* Create new node. */ gl_oset_node_t new_node = (struct gl_oset_node_impl *) malloc (sizeof (struct gl_oset_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->value = elt; /* 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 (set, new_node, node); set->count++; return new_node; } static gl_oset_node_t gl_tree_nx_add_after (gl_oset_t set, gl_oset_node_t node, const void *elt) { /* Create new node. */ gl_oset_node_t new_node = (struct gl_oset_node_impl *) malloc (sizeof (struct gl_oset_node_impl)); if (new_node == NULL) return NULL; new_node->left = NULL; new_node->right = NULL; new_node->value = elt; /* 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 (set, new_node, node); set->count++; return new_node; } static bool gl_tree_remove_node (gl_oset_t set, gl_oset_node_t node) { gl_oset_node_t parent = node->parent; if (node->left == NULL) { /* Replace node with node->right. */ gl_oset_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) set->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 (set, 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_oset_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) set->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. */ gl_oset_node_t subst; gl_oset_node_t subst_parent; gl_oset_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) set->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 (set, child, subst_parent != node ? subst_parent : subst); } } set->count--; if (set->base.dispose_fn != NULL) set->base.dispose_fn (node->value); free (node); return true; } /* Generic binary tree code. */ #include "gl_anytree_oset.h" /* For debugging. */ static unsigned int check_invariants (gl_oset_node_t node, gl_oset_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); } 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_oset_free, gl_tree_iterator, gl_tree_iterator_next, gl_tree_iterator_free }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_rbtree_oset.h���������������������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0020410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ordered set data type implemented by a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_rbtreehash_list.c�����������������������������������������������������0000664�0000000�0000000�00000007403�11671051007�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006, 2008-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_rbtreehash_list.h" #include <stdint.h> /* for SIZE_MAX */ #include <stdlib.h> #include "gl_rbtree_oset.h" #include "xsize.h" #ifndef uintptr_t # define uintptr_t unsigned long #endif #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_anyhash_list1.h" /* Generic red-black tree code: Type definitions. */ #include "gl_anyrbtree_list1.h" /* Generic hash-table code: Low-level code. */ #include "gl_anyhash_list2.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_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-20111211-stable/lib/gl_rbtreehash_list.h�����������������������������������������������������0000664�0000000�0000000�00000002221�11671051007�0021252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by a hash table with a binary tree. Copyright (C) 2006, 2009-2011 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 <http://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-20111211-stable/lib/gl_sublist.c�������������������������������������������������������������0000664�0000000�0000000�00000033310�11671051007�0017553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type backed by another list. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_sublist.h" #include <stdlib.h> #ifndef uintptr_t # define uintptr_t unsigned long #endif /* -------------------------- 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 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_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-20111211-stable/lib/gl_sublist.h�������������������������������������������������������������0000664�0000000�0000000�00000003425�11671051007�0017564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type backed by another list. Copyright (C) 2006, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _GL_SUBLIST_H #define _GL_SUBLIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif /* Create 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); #endif /* Likewise. Return 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); #ifdef __cplusplus } #endif #endif /* _GL_SUBLIST_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_xlist.c���������������������������������������������������������������0000664�0000000�0000000�00000007066�11671051007�0017242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type, with out-of-memory checking. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_xlist.h" #if !HAVE_INLINE 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_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; } 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_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_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_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_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_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_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_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; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_xlist.h���������������������������������������������������������������0000664�0000000�0000000�00000014373�11671051007�0017246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type, with out-of-memory checking. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _GL_XLIST_H #define _GL_XLIST_H #include "gl_list.h" #include "xalloc.h" #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. */ 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); 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); 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_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); #if HAVE_INLINE # define gl_list_create_empty gl_list_create_empty_inline static inline 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; } # define gl_list_create gl_list_create_inline static inline 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; } # define gl_list_node_set_value gl_list_node_set_value_inline static 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 (); } # define gl_list_set_at gl_list_set_at_inline static 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; } # define gl_list_add_first gl_list_add_first_inline static 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; } # define gl_list_add_last gl_list_add_last_inline static 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; } # define gl_list_add_before gl_list_add_before_inline static 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; } # define gl_list_add_after gl_list_add_after_inline static 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; } # define gl_list_add_at gl_list_add_at_inline static 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; } # define gl_sortedlist_add gl_sortedlist_add_inline static 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; } #endif #ifdef __cplusplus } #endif #endif /* _GL_XLIST_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_xoset.c���������������������������������������������������������������0000664�0000000�0000000�00000002576�11671051007�0017242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type, with out-of-memory checking. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_xoset.h" #if !HAVE_INLINE 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; } 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; } #endif ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_xoset.h���������������������������������������������������������������0000664�0000000�0000000�00000004130�11671051007�0017233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract ordered set data type, with out-of-memory checking. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _GL_XOSET_H #define _GL_XOSET_H #include "gl_oset.h" #include "xalloc.h" #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. */ 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); extern bool gl_oset_add (gl_oset_t set, const void *elt); #if HAVE_INLINE # define gl_oset_create_empty gl_oset_create_empty_inline static inline 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; } # define gl_oset_add gl_oset_add_inline static 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; } #endif #ifdef __cplusplus } #endif #endif /* _GL_XOSET_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_xsublist.c������������������������������������������������������������0000664�0000000�0000000�00000002221�11671051007�0017740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type backed by another list, with out-of-memory checking. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_xsublist.h" #if !HAVE_INLINE 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; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/gl_xsublist.h������������������������������������������������������������0000664�0000000�0000000�00000003237�11671051007�0017755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type backed by another list, with out-of-memory checking. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _GL_XSUBLIST_H #define _GL_XSUBLIST_H #include "gl_sublist.h" #include "xalloc.h" #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. */ extern gl_list_t gl_sublist_create (gl_list_t whole_list, size_t start_index, size_t end_index); #if HAVE_INLINE # define gl_sublist_create gl_sublist_create_inline static inline 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; } #endif #ifdef __cplusplus } #endif #endif /* _GL_XSUBLIST_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glob-libc.h��������������������������������������������������������������0000664�0000000�0000000�00000017533�11671051007�0017254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1992, 1995-1998, 2000-2001, 2004-2007, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _GLOB_H #define _GLOB_H 1 #ifndef __GLOB_GNULIB # include <sys/cdefs.h> #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, so pick a different name. */ #ifndef _Restrict_ # if 199901L <= __STDC_VERSION__ # define _Restrict_ restrict # elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) # define _Restrict_ __restrict # else # define _Restrict_ # endif #endif __BEGIN_DECLS /* We need `size_t' for the following definitions. */ #ifndef __size_t # if defined __GNUC__ && __GNUC__ >= 2 typedef __SIZE_TYPE__ __size_t; # ifdef __USE_XOPEN typedef __SIZE_TYPE__ size_t; # endif # else # include <stddef.h> # ifndef __size_t # define __size_t size_t # endif # endif #else /* The GNU CC stddef.h version defines __size_t as empty. We need a real definition. */ # undef __size_t # define __size_t size_t #endif /* 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_BSD || defined __USE_GNU # 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; #if defined __USE_LARGEFILE64 && !defined __GLOB_GNULIB # 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 #if __USE_FILE_OFFSET64 && __GNUC__ < 2 && !defined __GLOB_GNULIB # define glob glob64 # define globfree globfree64 #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 || __GNUC__ < 2 || defined __GLOB_GNULIB extern int glob (const char *_Restrict_ __pattern, int __flags, int (*__errfunc) (const char *, int), glob_t *_Restrict_ __pglob) __THROW _GL_ARG_NONNULL ((1, 4)); /* Free storage allocated in PGLOB by a previous `glob' call. */ extern void globfree (glob_t *__pglob) __THROW _GL_ARG_NONNULL ((1)); #else extern int __REDIRECT_NTH (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 #if defined __USE_LARGEFILE64 && !defined __GLOB_GNULIB extern int glob64 (const char *_Restrict_ __pattern, int __flags, int (*__errfunc) (const char *, int), glob64_t *_Restrict_ __pglob) __THROW _GL_ARG_NONNULL ((1, 4)); extern void globfree64 (glob64_t *__pglob) __THROW _GL_ARG_NONNULL ((1)); #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 _GL_ARG_NONNULL ((1)); #endif __END_DECLS #endif /* glob.h */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glob.c�������������������������������������������������������������������0000664�0000000�0000000�00000136074�11671051007�0016342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the pattern == NULL || pglob == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include <glob.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <stddef.h> /* Outcomment the following line for production quality code. */ /* #define NDEBUG 1 */ #include <assert.h> #include <stdbool.h> #include <stdio.h> /* Needed on stupid SunOS for assert. */ #if !defined _LIBC || !defined GLOB_ONLY_P #include <unistd.h> #if !defined POSIX && defined _POSIX_VERSION # define POSIX #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WINDOWS32 #endif #ifndef WINDOWS32 # include <pwd.h> #endif #include <errno.h> #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #include <dirent.h> /* In GNU systems, <dirent.h> defines this macro for us. */ #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(dirent) strlen ((dirent)->d_name) #endif /* When used in the GNU libc the symbol _DIRENT_HAVE_D_TYPE is available if the `d_type' member for `struct dirent' is available. HAVE_STRUCT_DIRENT_D_TYPE plays the same role in GNULIB. */ #if defined _DIRENT_HAVE_D_TYPE || defined HAVE_STRUCT_DIRENT_D_TYPE /* True if the directory entry D must be of type T. */ # define DIRENT_MUST_BE(d, t) ((d)->d_type == (t)) /* True if the directory entry D might be a symbolic link. */ # define DIRENT_MIGHT_BE_SYMLINK(d) \ ((d)->d_type == DT_UNKNOWN || (d)->d_type == DT_LNK) /* True if the directory entry D might be a directory. */ # define DIRENT_MIGHT_BE_DIR(d) \ ((d)->d_type == DT_DIR || DIRENT_MIGHT_BE_SYMLINK (d)) #else /* !HAVE_D_TYPE */ # define DIRENT_MUST_BE(d, t) false # define DIRENT_MIGHT_BE_SYMLINK(d) true # define DIRENT_MIGHT_BE_DIR(d) true #endif /* HAVE_D_TYPE */ /* If the system has the `struct dirent64' type we use it internally. */ #if defined _LIBC && !defined COMPILE_GLOB64 # if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ # define CONVERT_D_INO(d64, d32) # else # define CONVERT_D_INO(d64, d32) \ (d64)->d_ino = (d32)->d_ino; # endif # ifdef _DIRENT_HAVE_D_TYPE # define CONVERT_D_TYPE(d64, d32) \ (d64)->d_type = (d32)->d_type; # else # define CONVERT_D_TYPE(d64, d32) # endif # define CONVERT_DIRENT_DIRENT64(d64, d32) \ memcpy ((d64)->d_name, (d32)->d_name, _D_EXACT_NAMLEN (d32) + 1); \ CONVERT_D_INO (d64, d32) \ CONVERT_D_TYPE (d64, d32) #endif #if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ /* Posix does not require that the d_ino field be present, and some systems do not provide it. */ # define REAL_DIR_ENTRY(dp) 1 #else # define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) #endif /* POSIX */ #include <stdlib.h> #include <string.h> /* NAME_MAX is usually defined in <dirent.h> or <limits.h>. */ #include <limits.h> #ifndef NAME_MAX # define NAME_MAX (sizeof (((struct dirent *) 0)->d_name)) #endif #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) # ifndef __stat64 # define __stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf) # endif # define struct_stat64 struct stat64 #else /* !_LIBC */ # define __stat64(fname, buf) stat (fname, buf) # define __fxstatat64(_, d, f, st, flag) fstatat (d, f, st, flag) # define struct_stat64 struct stat # define __alloca alloca # define __readdir readdir # define __glob_pattern_p glob_pattern_p #endif /* _LIBC */ #include <fnmatch.h> #ifdef _SC_GETPW_R_SIZE_MAX # define GETPW_R_SIZE_MAX() sysconf (_SC_GETPW_R_SIZE_MAX) #else # define GETPW_R_SIZE_MAX() (-1) #endif #ifdef _SC_LOGIN_NAME_MAX # define GET_LOGIN_NAME_MAX() sysconf (_SC_LOGIN_NAME_MAX) #else # define GET_LOGIN_NAME_MAX() (-1) #endif static const char *next_brace_sub (const char *begin, int flags) __THROW; #endif /* !defined _LIBC || !defined GLOB_ONLY_P */ #ifndef attribute_hidden # define attribute_hidden #endif #ifndef __attribute_noinline__ # if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1) # define __attribute_noinline__ /* Ignore */ #else # define __attribute_noinline__ __attribute__ ((__noinline__)) # endif #endif #if ! defined __builtin_expect && __GNUC__ < 3 # define __builtin_expect(expr, expected) (expr) #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. */ # undef opendir # undef closedir # 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 /* alloca is implemented with malloc, so just use malloc. */ # define __libc_use_alloca(n) 0 # endif #endif static int glob_in_dir (const char *pattern, const char *directory, int flags, int (*errfunc) (const char *, int), glob_t *pglob); extern int __glob_pattern_type (const char *pattern, int quote) attribute_hidden; #if !defined _LIBC || !defined GLOB_ONLY_P static int prefix_array (const char *prefix, char **array, size_t n) __THROW; static int collated_compare (const void *, const void *) __THROW; /* Find the end of the sub-pattern in a brace expression. */ static const char * next_brace_sub (const char *cp, int flags) { unsigned int 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; } #endif /* !defined _LIBC || !defined GLOB_ONLY_P */ /* 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 #ifdef GLOB_ATTRIBUTE GLOB_ATTRIBUTE #endif glob (pattern, flags, errfunc, pglob) const char * restrict pattern; int flags; int (*errfunc) (const char *, int); glob_t * restrict pglob; { const char *filename; const char *dirname; size_t dirlen; int status; size_t oldcount; int meta; int dirname_modified; glob_t dirs; if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0) { __set_errno (EINVAL); return -1; } 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_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; #ifdef __GNUC__ char onealt[strlen (pattern) - 1]; #else char *onealt = malloc (strlen (pattern) - 1); if (onealt == NULL) { if (!(flags & GLOB_APPEND)) { pglob->gl_pathc = 0; pglob->gl_pathv = NULL; } return GLOB_NOSPACE; } #endif /* 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. */ #ifndef __GNUC__ free (onealt); #endif return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); } /* 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 invalid expression. */ #ifndef __GNUC__ free (onealt); #endif return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); } } /* 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. */ if (!(flags & GLOB_APPEND)) { /* This call is to set a new vector, so clear out the vector so we can append to it. */ pglob->gl_pathc = 0; pglob->gl_pathv = NULL; } 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) { #ifndef __GNUC__ free (onealt); #endif 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); } #ifndef __GNUC__ free (onealt); #endif if (pglob->gl_pathc != firstc) /* We found some entries. */ return 0; else if (!(flags & (GLOB_NOCHECK|GLOB_NOMAGIC))) return GLOB_NOMATCH; } } /* 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 = 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 { filename = pattern; #ifdef _AMIGA dirname = ""; #else dirname = "."; #endif dirlen = 0; } } else if (filename == pattern || (filename == pattern + 1 && pattern[0] == '\\' && (flags & GLOB_NOESCAPE) == 0)) { /* "/pattern" or "\\/pattern". */ dirname = "/"; 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 newp = __alloca (dirlen + 1); *((char *) mempcpy (newp, pattern, dirlen)) = '\0'; dirname = newp; ++filename; if (filename[0] == '\0' #if defined __MSDOS__ || defined WINDOWS32 && dirname[dirlen - 1] != ':' && (dirlen < 3 || dirname[dirlen - 2] != ':' || dirname[dirlen - 1] != '/') #endif && dirlen > 1) /* "pattern/". Expand "pattern", appending slashes. */ { int orig_flags = flags; int val; 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); } } 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; } return val; } } if (!(flags & GLOB_APPEND)) { pglob->gl_pathc = 0; if (!(flags & GLOB_DOOFFS)) pglob->gl_pathv = NULL; else { size_t i; pglob->gl_pathv = 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; } } oldcount = pglob->gl_pathc + pglob->gl_offs; 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. */ const char *home_dir = getenv ("HOME"); # ifdef _AMIGA if (home_dir == NULL || home_dir[0] == '\0') home_dir = "SYS:"; # else # ifdef WINDOWS32 /* Windows NT defines HOMEDRIVE and HOMEPATH. But give preference to HOME, because the user can change HOME. */ if (home_dir == NULL || home_dir[0] == '\0') { 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 if (home_dir == NULL || home_dir[0] == '\0') { int success; char *name; size_t buflen = GET_LOGIN_NAME_MAX () + 1; if (buflen == 0) /* `sysconf' does not support _SC_LOGIN_NAME_MAX. Try a moderate value. */ buflen = 20; name = __alloca (buflen); success = getlogin_r (name, buflen) == 0; if (success) { struct passwd *p; # if defined HAVE_GETPWNAM_R || defined _LIBC long int pwbuflen = GETPW_R_SIZE_MAX (); char *pwtmpbuf; struct passwd pwbuf; int save = errno; # ifndef _LIBC if (pwbuflen == -1) /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. Try a moderate value. */ pwbuflen = 1024; # endif pwtmpbuf = __alloca (pwbuflen); while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p) != 0) { if (errno != ERANGE) { p = NULL; break; } # ifdef _LIBC pwtmpbuf = extend_alloca (pwtmpbuf, pwbuflen, 2 * pwbuflen); # else pwbuflen *= 2; pwtmpbuf = __alloca (pwbuflen); # endif __set_errno (save); } # else p = getpwnam (name); # endif if (p != NULL) home_dir = p->pw_dir; } } if (home_dir == NULL || home_dir[0] == '\0') { if (flags & GLOB_TILDE_CHECK) return GLOB_NOMATCH; else home_dir = "~"; /* No luck. */ } # endif /* WINDOWS32 */ # endif /* Now construct the full directory. */ if (dirname[1] == '\0') { dirname = home_dir; dirlen = strlen (dirname); } else { char *newp; size_t home_len = strlen (home_dir); newp = __alloca (home_len + dirlen); mempcpy (mempcpy (newp, home_dir, home_len), &dirname[1], dirlen); dirname = newp; dirlen += home_len - 1; } dirname_modified = 1; } # if !defined _AMIGA && !defined WINDOWS32 else { char *end_name = strchr (dirname, '/'); const char *user_name; const char *home_dir; 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; newp = __alloca (end_name - dirname); *((char *) mempcpy (newp, dirname + 1, end_name - dirname)) = '\0'; if (unescape != NULL) { char *p = mempcpy (newp, dirname + 1, unescape - dirname - 1); char *q = unescape; while (*q != '\0') { if (*q == '\\') { if (q[1] == '\0') { /* "~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)) = '\0'; user_name = newp; } /* Look up specific user's home directory. */ { struct passwd *p; # if defined HAVE_GETPWNAM_R || defined _LIBC long int buflen = GETPW_R_SIZE_MAX (); char *pwtmpbuf; struct passwd pwbuf; int save = errno; # ifndef _LIBC if (buflen == -1) /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. Try a moderate value. */ buflen = 1024; # endif pwtmpbuf = __alloca (buflen); while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0) { if (errno != ERANGE) { p = NULL; break; } # ifdef _LIBC pwtmpbuf = extend_alloca (pwtmpbuf, buflen, 2 * buflen); # else buflen *= 2; pwtmpbuf = __alloca (buflen); # endif __set_errno (save); } # else p = getpwnam (user_name); # endif if (p != NULL) home_dir = p->pw_dir; else home_dir = NULL; } /* If we found a home directory use this. */ if (home_dir != NULL) { char *newp; size_t home_len = strlen (home_dir); size_t rest_len = end_name == NULL ? 0 : strlen (end_name); newp = __alloca (home_len + rest_len + 1); *((char *) mempcpy (mempcpy (newp, home_dir, home_len), end_name, rest_len)) = '\0'; dirname = newp; 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. */ return GLOB_NOMATCH; } # endif /* Not Amiga && not WINDOWS32. */ } /* Now test whether we looked for "~" or "~NAME". In this case we can give the answer now. */ if (filename == NULL) { struct stat st; struct_stat64 st64; /* Return the directory if we don't check for error or if it exists. */ if ((flags & GLOB_NOCHECK) || (((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)) ? ((*pglob->gl_stat) (dirname, &st) == 0 && S_ISDIR (st.st_mode)) : (__stat64 (dirname, &st64) == 0 && S_ISDIR (st64.st_mode))))) { int newcount = pglob->gl_pathc + pglob->gl_offs; char **new_gl_pathv; new_gl_pathv = realloc (pglob->gl_pathv, (newcount + 1 + 1) * sizeof (char *)); if (new_gl_pathv == NULL) { nospace: free (pglob->gl_pathv); pglob->gl_pathv = NULL; pglob->gl_pathc = 0; return GLOB_NOSPACE; } pglob->gl_pathv = new_gl_pathv; if (flags & GLOB_MARK) { 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'; } 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; } /* Not found. */ return GLOB_NOMATCH; } 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 & 5) { /* 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 (__builtin_expect ((flags & GLOB_ALTDIRFUNC) != 0, 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) return status; 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) { int old_pathc; #ifdef SHELL { /* Make globbing interruptible in the bash shell. */ extern int interrupt_state; if (interrupt_state) { globfree (&dirs); return GLOB_ABORTED; } } #endif /* SHELL. */ old_pathc = pglob->gl_pathc; status = glob_in_dir (filename, dirs.gl_pathv[i], ((flags | GLOB_APPEND) & ~(GLOB_NOCHECK | GLOB_NOMAGIC)), errfunc, pglob); if (status == GLOB_NOMATCH) /* No matches in this directory. Try the next. */ continue; if (status != 0) { globfree (&dirs); globfree (pglob); pglob->gl_pathc = 0; return status; } /* 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; return GLOB_NOSPACE; } } 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) { int newcount = pglob->gl_pathc + pglob->gl_offs; char **new_gl_pathv; new_gl_pathv = realloc (pglob->gl_pathv, (newcount + 2) * sizeof (char *)); if (new_gl_pathv == NULL) { globfree (&dirs); return GLOB_NOSPACE; } 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; return GLOB_NOSPACE; } ++pglob->gl_pathc; ++newcount; pglob->gl_pathv[newcount] = NULL; pglob->gl_flags = flags; } else { globfree (&dirs); return GLOB_NOMATCH; } } globfree (&dirs); } else { int old_pathc = pglob->gl_pathc; int orig_flags = flags; if (meta & 2) { 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); 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; } return status; } 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; return GLOB_NOSPACE; } } } if (flags & GLOB_MARK) { /* Append slashes to directory names. */ size_t i; struct stat st; struct_stat64 st64; for (i = oldcount; i < pglob->gl_pathc + pglob->gl_offs; ++i) if ((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) ? ((*pglob->gl_stat) (pglob->gl_pathv[i], &st) == 0 && S_ISDIR (st.st_mode)) : (__stat64 (pglob->gl_pathv[i], &st64) == 0 && S_ISDIR (st64.st_mode)))) { 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; return GLOB_NOSPACE; } 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); } return 0; } #if defined _LIBC && !defined glob libc_hidden_def (glob) #endif #if !defined _LIBC || !defined GLOB_ONLY_P /* Free storage allocated in PGLOB by a previous `glob' call. */ void globfree (pglob) register glob_t *pglob; { if (pglob->gl_pathv != NULL) { size_t i; for (i = 0; i < pglob->gl_pathc; ++i) if (pglob->gl_pathv[pglob->gl_offs + i] != NULL) free (pglob->gl_pathv[pglob->gl_offs + i]); free (pglob->gl_pathv); pglob->gl_pathv = NULL; } } #if defined _LIBC && !defined globfree libc_hidden_def (globfree) #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) { register size_t i; size_t dirlen = strlen (dirname); #if defined __MSDOS__ || defined WINDOWS32 int sep_char = '/'; # define DIRSEP_CHAR sep_char #else # define DIRSEP_CHAR '/' #endif 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 else 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; sep_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; } /* We must not compile this function twice. */ #if !defined _LIBC || !defined NO_GLOB_PATTERN_P int __glob_pattern_type (pattern, quote) const char *pattern; int quote; { register const char *p; int ret = 0; for (p = pattern; *p != '\0'; ++p) switch (*p) { case '?': case '*': return 1; case '\\': if (quote) { if (p[1] != '\0') ++p; ret |= 2; } break; case '[': ret |= 4; break; case ']': if (ret & 4) return 1; break; } return ret; } /* Return nonzero if PATTERN contains any metacharacters. Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ int __glob_pattern_p (pattern, quote) const char *pattern; int quote; { return __glob_pattern_type (pattern, quote) == 1; } # ifdef _LIBC weak_alias (__glob_pattern_p, glob_pattern_p) # endif #endif #endif /* !GLOB_ONLY_P */ #if !defined _LIBC || !defined GLOB_ONLY_P /* We put this in a separate function mainly to allow the memory allocated with alloca to be recycled. */ static int __attribute_noinline__ link_exists2_p (const char *dir, size_t dirlen, const char *fname, glob_t *pglob # if !defined _LIBC && !HAVE_FSTATAT , int flags # endif ) { size_t fnamelen = strlen (fname); char *fullname = __alloca (dirlen + 1 + fnamelen + 1); struct stat st; mempcpy (mempcpy (mempcpy (fullname, dir, dirlen), "/", 1), fname, fnamelen + 1); # if !defined _LIBC && !HAVE_FSTATAT if (__builtin_expect ((flags & GLOB_ALTDIRFUNC) == 0, 1)) { struct_stat64 st64; return __stat64 (fullname, &st64) == 0; } # endif return (*pglob->gl_stat) (fullname, &st) == 0; } /* Return true if DIR/FNAME exists. */ static int link_exists_p (int dfd, const char *dir, size_t dirlen, const char *fname, glob_t *pglob, int flags) { # if defined _LIBC || HAVE_FSTATAT if (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)) return link_exists2_p (dir, dirlen, fname, pglob); else { /* dfd cannot be -1 here, because dirfd never returns -1 on glibc, or on hosts that have fstatat. */ struct_stat64 st64; return __fxstatat64 (_STAT_VER, dfd, fname, &st64, 0) == 0; } # else return link_exists2_p (dir, dirlen, fname, pglob, flags); # endif } #endif /* 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 dirlen = strlen (directory); void *stream = NULL; struct globnames { struct globnames *next; size_t count; char *name[64]; }; #define INITIAL_COUNT sizeof (init_names.name) / sizeof (init_names.name[0]) struct globnames init_names; struct globnames *names = &init_names; struct globnames *names_alloca = &init_names; size_t nfound = 0; size_t allocasize = sizeof (init_names); size_t cur = 0; int meta; int save; int result; init_names.next = NULL; init_names.count = INITIAL_COUNT; meta = __glob_pattern_type (pattern, !(flags & GLOB_NOESCAPE)); if (meta == 0 && (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 == 0) { /* Since we use the normal file functions we can also use stat() to verify the file is there. */ struct stat st; struct_stat64 st64; size_t patlen = strlen (pattern); char *fullname = __alloca (dirlen + 1 + patlen + 1); mempcpy (mempcpy (mempcpy (fullname, directory, dirlen), "/", 1), pattern, patlen + 1); if ((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) ? (*pglob->gl_stat) (fullname, &st) : __stat64 (fullname, &st64)) == 0) /* We found this file to be existing. Now tell the rest of the function to copy this name into the result. */ flags |= GLOB_NOCHECK; } 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 dfd = (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) ? -1 : dirfd ((DIR *) stream)); int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0) #if defined _AMIGA || defined VMS | FNM_CASEFOLD #endif ); flags |= GLOB_MAGCHAR; while (1) { const char *name; size_t len; #if defined _LIBC && !defined COMPILE_GLOB64 struct dirent64 *d; union { struct dirent64 d64; char room [offsetof (struct dirent64, d_name[0]) + NAME_MAX + 1]; } d64buf; if (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)) { struct dirent *d32 = (*pglob->gl_readdir) (stream); if (d32 != NULL) { CONVERT_DIRENT_DIRENT64 (&d64buf.d64, d32); d = &d64buf.d64; } else d = NULL; } else d = __readdir64 (stream); #else struct dirent *d = (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0) ? ((struct dirent *) (*pglob->gl_readdir) (stream)) : __readdir (stream)); #endif if (d == NULL) break; if (! REAL_DIR_ENTRY (d)) continue; /* If we shall match only directories use the information provided by the dirent call if possible. */ if ((flags & GLOB_ONLYDIR) && !DIRENT_MIGHT_BE_DIR (d)) continue; name = d->d_name; if (fnmatch (pattern, name, fnm_flags) == 0) { /* If the file we found is a symlink we have to make sure the target file exists. */ if (!DIRENT_MIGHT_BE_SYMLINK (d) || link_exists_p (dfd, directory, dirlen, name, pglob, flags)) { if (cur == names->count) { struct globnames *newnames; size_t count = names->count * 2; size_t size = (sizeof (struct globnames) + ((count - INITIAL_COUNT) * sizeof (char *))); allocasize += size; if (__libc_use_alloca (allocasize)) newnames = names_alloca = __alloca (size); else if ((newnames = malloc (size)) == NULL) goto memory_error; newnames->count = count; newnames->next = names; names = newnames; cur = 0; } len = _D_EXACT_NAMLEN (d); names->name[cur] = malloc (len + 1); if (names->name[cur] == NULL) goto memory_error; *((char *) mempcpy (names->name[cur++], name, len)) = '\0'; ++nfound; } } } } } 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 = realloc (pglob->gl_pathv, (pglob->gl_pathc + pglob->gl_offs + nfound + 1) * sizeof (char *)); result = 0; if (new_gl_pathv == NULL) { memory_error: while (1) { struct globnames *old = names; size_t i; for (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; size_t i; for (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 (__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)) (*pglob->gl_closedir) (stream); else closedir (stream); __set_errno (save); } return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glob.in.h����������������������������������������������������������������0000664�0000000�0000000�00000005114�11671051007�0016742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* glob.h -- Find a path matching a pattern. Copyright (C) 2005-2007, 2009-2011 Free Software Foundation, Inc. Written by Derek Price <derek@ximbiot.com> & Paul Eggert <eggert@CS.UCLA.EDU> This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _GL_GLOB_H #define _GL_GLOB_H #if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> #endif #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> #ifndef __BEGIN_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } # else # define __BEGIN_DECLS # define __END_DECLS # endif #endif #ifndef __THROW # define __THROW #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. */ #ifndef __size_t # define __size_t size_t #endif #ifndef __USE_GNU # define __USE_GNU 1 #endif #define glob rpl_glob #define globfree rpl_globfree #define glob_pattern_p rpl_glob_pattern_p #define __GLOB_GNULIB 1 /* Now the standard GNU C Library header should work. */ #include "glob-libc.h" __BEGIN_DECLS typedef int (*_gl_glob_errfunc_fn) (const char *, int); __END_DECLS #if defined __cplusplus && defined GNULIB_NAMESPACE # undef glob # undef globfree # undef glob_pattern_p _GL_CXXALIAS_RPL (glob, int, (const char *_Restrict_ __pattern, int __flags, _gl_glob_errfunc_fn __errfunc, glob_t *_Restrict_ __pglob)); _GL_CXXALIAS_RPL (globfree, void, (glob_t *__pglob)); _GL_CXXALIAS_RPL (glob_pattern_p, int, (const char *__pattern, int __quote)); # if 0 /* The C function name is rpl_glob, not glob. */ _GL_CXXALIASWARN (glob); _GL_CXXALIASWARN (globfree); _GL_CXXALIASWARN (glob_pattern_p); # endif #endif #endif /* _GL_GLOB_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glthread/����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017032�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glthread/cond.c����������������������������������������������������������0000664�0000000�0000000�00000034644�11671051007�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Condition variables for multithreading. Copyright (C) 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Yoann Vandoorselaere <yoann@prelude-ids.org>, 2008, and Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include "glthread/cond.h" /* ========================================================================= */ #if USE_PTH_THREADS /* -------------------------- gl_cond_t datatype -------------------------- */ int glthread_cond_timedwait_multithreaded (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime) { int ret, status; pth_event_t ev; ev = pth_event (PTH_EVENT_TIME, pth_time (abstime->tv_sec, abstime->tv_nsec / 1000)); ret = pth_cond_await (cond, lock, ev); status = pth_event_status (ev); pth_event_free (ev, PTH_FREE_THIS); if (status == PTH_STATUS_OCCURRED) return ETIMEDOUT; return ret; } #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* -------------------------- gl_cond_t datatype -------------------------- */ int glthread_cond_timedwait_multithreaded (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime) { int ret; ret = cond_timedwait (cond, lock, abstime); if (ret == ETIME) return ETIMEDOUT; return ret; } #endif /* ========================================================================= */ #if USE_WIN32_THREADS #include <sys/time.h> /* -------------------------- gl_cond_t datatype -------------------------- */ /* In this file, the waitqueues are implemented as linked lists. */ #define gl_waitqueue_t gl_linked_waitqueue_t /* All links of a circular list, except the anchor, are of this type, carrying a payload. */ struct gl_waitqueue_element { struct gl_waitqueue_link link; /* must be the first field! */ HANDLE event; /* Waiting thread, represented by an event. This field is immutable once initialized. */ }; static inline void gl_waitqueue_init (gl_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 gl_waitqueue_element * gl_waitqueue_add (gl_waitqueue_t *wq) { struct gl_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 gl_waitqueue_element *) malloc (sizeof (struct gl_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 gl_waitqueue_element *', from a wait queue. Returns true if is was found and removed, false if it was not present. */ static inline bool gl_waitqueue_remove (gl_waitqueue_t *wq, struct gl_waitqueue_element *elt) { if (elt->link.wql_next != NULL && elt->link.wql_prev != NULL) { /* Remove elt from the circular list. */ struct gl_waitqueue_link *prev = elt->link.wql_prev; struct gl_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 inline void gl_waitqueue_notify_first (gl_waitqueue_t *wq) { if (wq->wq_list.wql_next != &wq->wq_list) { struct gl_waitqueue_element *elt = (struct gl_waitqueue_element *) wq->wq_list.wql_next; struct gl_waitqueue_link *prev; struct gl_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 inline void gl_waitqueue_notify_all (gl_waitqueue_t *wq) { struct gl_waitqueue_link *l; for (l = wq->wq_list.wql_next; l != &wq->wq_list; ) { struct gl_waitqueue_element *elt = (struct gl_waitqueue_element *) l; struct gl_waitqueue_link *prev; struct gl_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 glthread_cond_init_func (gl_cond_t *cond) { InitializeCriticalSection (&cond->lock); gl_waitqueue_init (&cond->waiters); cond->guard.done = 1; return 0; } int glthread_cond_wait_func (gl_cond_t *cond, gl_lock_t *lock) { if (!cond->guard.done) { if (InterlockedIncrement (&cond->guard.started) == 0) /* This thread is the first one to need this condition variable. Initialize it. */ glthread_cond_init (cond); else /* Yield the CPU while waiting for another thread to finish initializing this condition variable. */ while (!cond->guard.done) Sleep (0); } EnterCriticalSection (&cond->lock); { struct gl_waitqueue_element *elt = gl_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 lock and let any other thread take it. */ err = glthread_lock_unlock (lock); if (err != 0) { EnterCriticalSection (&cond->lock); gl_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 glthread_lock_lock (lock); } } } int glthread_cond_timedwait_func (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime) { 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; if (!cond->guard.done) { if (InterlockedIncrement (&cond->guard.started) == 0) /* This thread is the first one to need this condition variable. Initialize it. */ glthread_cond_init (cond); else /* Yield the CPU while waiting for another thread to finish initializing this condition variable. */ while (!cond->guard.done) Sleep (0); } EnterCriticalSection (&cond->lock); { struct gl_waitqueue_element *elt = gl_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 lock and let any other thread take it. */ err = glthread_lock_unlock (lock); if (err != 0) { EnterCriticalSection (&cond->lock); gl_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 (gl_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 lock again. It does not matter whether this is done before or after the bookkeeping for WAIT_TIMEOUT. */ err = glthread_lock_lock (lock); return (err ? err : result == WAIT_OBJECT_0 ? 0 : result == WAIT_TIMEOUT ? ETIMEDOUT : /* WAIT_FAILED shouldn't happen */ EAGAIN); } } } int glthread_cond_signal_func (gl_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) gl_waitqueue_notify_first (&cond->waiters); LeaveCriticalSection (&cond->lock); return 0; } int glthread_cond_broadcast_func (gl_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." gl_waitqueue_notify_all is a nop in this case. */ gl_waitqueue_notify_all (&cond->waiters); LeaveCriticalSection (&cond->lock); return 0; } int glthread_cond_destroy_func (gl_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; } #endif /* ========================================================================= */ ��������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glthread/cond.h����������������������������������������������������������0000664�0000000�0000000�00000031772�11671051007�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Condition variables for multithreading. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 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_cancel # define pthread_in_use() (pthread_cancel != NULL) # 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_PTH_THREADS /* Use the GNU Pth threads library. */ # include <pth.h> # ifdef __cplusplus extern "C" { # endif # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_cond_init # pragma weak pth_cond_await # pragma weak pth_cond_notify # pragma weak pth_event # pragma weak pth_timeout # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* -------------------------- gl_cond_t datatype -------------------------- */ typedef pth_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 \ PTH_COND_INIT # define glthread_cond_init(COND) \ (pth_in_use () && !pth_cond_init (COND) ? errno : 0) # define glthread_cond_wait(COND, LOCK) \ (pth_in_use () && !pth_cond_await (COND, LOCK, NULL) ? errno : 0) # define glthread_cond_timedwait(COND, LOCK, ABSTIME) \ (pth_in_use () ? glthread_cond_timedwait_multithreaded (COND, LOCK, ABSTIME) : 0) # define glthread_cond_signal(COND) \ (pth_in_use () && !pth_cond_notify (COND, FALSE) ? errno : 0) # define glthread_cond_broadcast(COND) \ (pth_in_use () && !pth_cond_notify (COND, TRUE) ? errno : 0) # define glthread_cond_destroy(COND) 0 extern int glthread_cond_timedwait_multithreaded (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include <thread.h> # include <synch.h> # ifdef __cplusplus extern "C" { # endif # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak cond_init # pragma weak cond_wait # pragma weak cond_timedwait # pragma weak cond_signal # pragma weak cond_broadcast # pragma weak cond_destroy # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* -------------------------- gl_cond_t datatype -------------------------- */ typedef 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 \ DEFAULTCV # define glthread_cond_init(COND) \ (pthread_in_use () ? cond_init (COND, USYNC_THREAD, NULL) : 0) # define glthread_cond_wait(COND, LOCK) \ (pthread_in_use () ? cond_wait (COND, LOCK) : 0) # define glthread_cond_timedwait(COND, LOCK, ABSTIME) \ (pthread_in_use () ? glthread_cond_timedwait_multithreaded (COND, LOCK, ABSTIME) : 0) # define glthread_cond_signal(COND) \ (pthread_in_use () ? cond_signal (COND) : 0) # define glthread_cond_broadcast(COND) \ (pthread_in_use () ? cond_broadcast (COND) : 0) # define glthread_cond_destroy(COND) \ (pthread_in_use () ? cond_destroy (COND) : 0) extern int glthread_cond_timedwait_multithreaded (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WIN32_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_cond_t datatype -------------------------- */ struct gl_waitqueue_link { struct gl_waitqueue_link *wql_next; struct gl_waitqueue_link *wql_prev; }; typedef struct { struct gl_waitqueue_link wq_list; /* circular list of waiting threads */ } gl_linked_waitqueue_t; typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ gl_linked_waitqueue_t waiters; /* waiting threads */ } 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 \ { { 0, -1 } } # define glthread_cond_init(COND) \ glthread_cond_init_func (COND) # define glthread_cond_wait(COND, LOCK) \ glthread_cond_wait_func (COND, LOCK) # define glthread_cond_timedwait(COND, LOCK, ABSTIME) \ glthread_cond_timedwait_func (COND, LOCK, ABSTIME) # define glthread_cond_signal(COND) \ glthread_cond_signal_func (COND) # define glthread_cond_broadcast(COND) \ glthread_cond_broadcast_func (COND) # define glthread_cond_destroy(COND) \ glthread_cond_destroy_func (COND) extern int glthread_cond_init_func (gl_cond_t *cond); extern int glthread_cond_wait_func (gl_cond_t *cond, gl_lock_t *lock); extern int glthread_cond_timedwait_func (gl_cond_t *cond, gl_lock_t *lock, struct timespec *abstime); extern int glthread_cond_signal_func (gl_cond_t *cond); extern int glthread_cond_broadcast_func (gl_cond_t *cond); extern int glthread_cond_destroy_func (gl_cond_t *cond); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_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) static 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 #endif /* _GLTHREAD_COND_H */ ������gnulib-20111211-stable/lib/glthread/lock.c����������������������������������������������������������0000664�0000000�0000000�00000064324�11671051007�0020137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ #include <config.h> #include "glthread/lock.h" /* ========================================================================= */ #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK # if !defined PTHREAD_RWLOCK_INITIALIZER 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. */ /* POSIX says: "It is implementation-defined whether the calling thread acquires the lock when a writer does not hold the lock and there are writers blocked on the lock." Let's say, no: give the writers a higher priority. */ 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; } #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* -------------------------- gl_once_t datatype -------------------------- */ static void glthread_once_call (void *arg) { void (**gl_once_temp_addr) (void) = (void (**) (void)) arg; void (*initfunction) (void) = *gl_once_temp_addr; initfunction (); } int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)) { void (*temp) (void) = initfunction; return (!pth_once (once_control, glthread_once_call, &temp) ? errno : 0); } int glthread_once_singlethreaded (pth_once_t *once_control) { /* We know that pth_once_t is an integer type. */ if (*once_control == PTH_ONCE_INIT) { /* First time use of once_control. Invert the marker. */ *once_control = ~ PTH_ONCE_INIT; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* --------------------- gl_recursive_lock_t datatype --------------------- */ int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = mutex_init (&lock->mutex, USYNC_THREAD, NULL); if (err != 0) return err; lock->owner = (thread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { thread_t self = thr_self (); if (lock->owner != self) { int err; err = 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 != thr_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (thread_t) 0; return mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (thread_t) 0) return EBUSY; return mutex_destroy (&lock->mutex); } /* -------------------------- gl_once_t datatype -------------------------- */ int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)) { if (!once_control->inited) { int err; /* Use the mutex to guarantee that if another thread is already calling the initfunction, this thread waits until it's finished. */ err = mutex_lock (&once_control->mutex); if (err != 0) return err; if (!once_control->inited) { once_control->inited = 1; initfunction (); } return mutex_unlock (&once_control->mutex); } else return 0; } int glthread_once_singlethreaded (gl_once_t *once_control) { /* We know that gl_once_t contains an integer type. */ if (!once_control->inited) { /* First time use of once_control. Invert the marker. */ once_control->inited = ~ 0; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_WIN32_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ void glthread_lock_init_func (gl_lock_t *lock) { InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } int glthread_lock_lock_func (gl_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); return 0; } int glthread_lock_unlock_func (gl_lock_t *lock) { if (!lock->guard.done) return EINVAL; LeaveCriticalSection (&lock->lock); return 0; } int glthread_lock_destroy_func (gl_lock_t *lock) { if (!lock->guard.done) return EINVAL; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* In this file, the waitqueues are implemented as circular arrays. */ #define gl_waitqueue_t gl_carray_waitqueue_t static inline void gl_waitqueue_init (gl_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 gl_waitqueue_add (gl_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 inline void gl_waitqueue_notify_first (gl_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 inline void gl_waitqueue_notify_all (gl_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 glthread_rwlock_init_func (gl_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); gl_waitqueue_init (&lock->waiting_readers); gl_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glthread_rwlock_rdlock_func (gl_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. */ glthread_rwlock_init (lock); else /* 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. */ if (!(lock->runcount + 1 > 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = gl_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 glthread_rwlock_wrlock_func (gl_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. */ glthread_rwlock_init (lock); else /* 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 = gl_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 glthread_rwlock_unlock_func (gl_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--; gl_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; gl_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_destroy_func (gl_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; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock) { lock->owner = 0; lock->depth = 0; InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_recursive_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } { DWORD self = GetCurrentThreadId (); if (lock->owner != self) { EnterCriticalSection (&lock->lock); lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } } return 0; } int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock) { if (lock->owner != GetCurrentThreadId ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = 0; LeaveCriticalSection (&lock->lock); } return 0; } int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock) { if (lock->owner != 0) return EBUSY; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } /* -------------------------- gl_once_t datatype -------------------------- */ void glthread_once_func (gl_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 { /* Undo last operation. */ 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 (); } } } } #endif /* ========================================================================= */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glthread/lock.h����������������������������������������������������������0000664�0000000�0000000�00000106735�11671051007�0020147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.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 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 # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_cancel # define pthread_in_use() (pthread_cancel != NULL) # 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 # ifdef PTHREAD_RWLOCK_INITIALIZER 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; # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) # 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; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ # include <pth.h> # ifdef __cplusplus extern "C" { # endif # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_mutex_init # pragma weak pth_mutex_acquire # pragma weak pth_mutex_release # pragma weak pth_rwlock_init # pragma weak pth_rwlock_acquire # pragma weak pth_rwlock_release # pragma weak pth_once # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pth_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTH_MUTEX_INIT # define glthread_lock_init(LOCK) \ (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) # define glthread_lock_lock(LOCK) \ (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) # define glthread_lock_unlock(LOCK) \ (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) # define glthread_lock_destroy(LOCK) \ ((void)(LOCK), 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef pth_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ PTH_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ (pth_in_use () && !pth_rwlock_init (LOCK) ? errno : 0) # define glthread_rwlock_rdlock(LOCK) \ (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RD, 0, NULL) ? errno : 0) # define glthread_rwlock_wrlock(LOCK) \ (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RW, 0, NULL) ? errno : 0) # define glthread_rwlock_unlock(LOCK) \ (pth_in_use () && !pth_rwlock_release (LOCK) ? errno : 0) # define glthread_rwlock_destroy(LOCK) \ ((void)(LOCK), 0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* In Pth, mutexes are recursive by default. */ typedef pth_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ PTH_MUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) # define glthread_recursive_lock_lock(LOCK) \ (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) # define glthread_recursive_lock_destroy(LOCK) \ ((void)(LOCK), 0) /* -------------------------- gl_once_t datatype -------------------------- */ typedef pth_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pth_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (pth_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include <thread.h> # include <synch.h> # ifdef __cplusplus extern "C" { # endif # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak mutex_init # pragma weak mutex_lock # pragma weak mutex_unlock # pragma weak mutex_destroy # pragma weak rwlock_init # pragma weak rw_rdlock # pragma weak rw_wrlock # pragma weak rw_unlock # pragma weak rwlock_destroy # pragma weak thr_self # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ DEFAULTMUTEX # define glthread_lock_init(LOCK) \ (thread_in_use () ? mutex_init (LOCK, USYNC_THREAD, NULL) : 0) # define glthread_lock_lock(LOCK) \ (thread_in_use () ? mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (thread_in_use () ? mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (thread_in_use () ? mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ DEFAULTRWLOCK # define glthread_rwlock_init(LOCK) \ (thread_in_use () ? rwlock_init (LOCK, USYNC_THREAD, NULL) : 0) # define glthread_rwlock_rdlock(LOCK) \ (thread_in_use () ? rw_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (thread_in_use () ? rw_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (thread_in_use () ? rw_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (thread_in_use () ? rwlock_destroy (LOCK) : 0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* Old Solaris threads did not have recursive locks. We have to implement them ourselves. */ typedef struct { mutex_t mutex; thread_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 \ { DEFAULTMUTEX, (thread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (thread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (thread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (thread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (thread_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); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; mutex_t mutex; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX }; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (thread_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (gl_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WIN32_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the Win32 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. */ typedef struct { volatile int done; volatile long started; } gl_spinlock_t; /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } 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 \ { { 0, -1 } } # define glthread_lock_init(LOCK) \ (glthread_lock_init_func (LOCK), 0) # define glthread_lock_lock(LOCK) \ glthread_lock_lock_func (LOCK) # define glthread_lock_unlock(LOCK) \ glthread_lock_unlock_func (LOCK) # define glthread_lock_destroy(LOCK) \ glthread_lock_destroy_func (LOCK) extern void glthread_lock_init_func (gl_lock_t *lock); extern int glthread_lock_lock_func (gl_lock_t *lock); extern int glthread_lock_unlock_func (gl_lock_t *lock); extern int glthread_lock_destroy_func (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* 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 */ } gl_carray_waitqueue_t; typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ gl_carray_waitqueue_t waiting_readers; /* waiting readers */ gl_carray_waitqueue_t waiting_writers; /* 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 \ { { 0, -1 } } # define glthread_rwlock_init(LOCK) \ (glthread_rwlock_init_func (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ glthread_rwlock_rdlock_func (LOCK) # define glthread_rwlock_wrlock(LOCK) \ glthread_rwlock_wrlock_func (LOCK) # define glthread_rwlock_unlock(LOCK) \ glthread_rwlock_unlock_func (LOCK) # define glthread_rwlock_destroy(LOCK) \ glthread_rwlock_destroy_func (LOCK) extern void glthread_rwlock_init_func (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_func (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* The Win32 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 { gl_spinlock_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } 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 \ { { 0, -1 }, 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (glthread_recursive_lock_init_func (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ glthread_recursive_lock_lock_func (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ glthread_recursive_lock_unlock_func (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ glthread_recursive_lock_destroy_func (LOCK) extern void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; volatile long started; CRITICAL_SECTION lock; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { -1, -1 }; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (glthread_once_func (ONCE_CONTROL, INITFUNCTION), 0) extern void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_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-20111211-stable/lib/glthread/thread.c��������������������������������������������������������0000664�0000000�0000000�00000014276�11671051007�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ #include <config.h> /* Specification. */ #include "glthread/thread.h" #include <stdlib.h> #include "glthread/lock.h" /* ========================================================================= */ #if USE_POSIX_THREADS #include <pthread.h> #ifdef PTW32_VERSION const gl_thread_t gl_null_thread /* = { .p = NULL } */; #endif #endif /* ========================================================================= */ #if USE_WIN32_THREADS #include <process.h> /* -------------------------- gl_thread_t datatype -------------------------- */ /* The Thread-Local Storage (TLS) key that allows to access each thread's 'struct gl_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) { gl_once_define(static, once) gl_once (once, do_init_self_key); } /* This structure contains information about a thread. It is stored in TLS under key self_key. */ struct gl_thread_struct { /* Fields for managing the handle. */ HANDLE volatile handle; CRITICAL_SECTION handle_lock; /* Fields for managing the exit value. */ void * volatile result; /* Fields for managing the thread start. */ void * (*func) (void *); void *arg; }; /* Return a real HANDLE object for the current thread. */ static inline 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; } gl_thread_t gl_thread_self_func (void) { gl_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 gl_thread_struct *) malloc (sizeof (struct gl_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->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 gl_thread_struct *thread = (struct gl_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); return 0; } int glthread_create_func (gl_thread_t *threadp, void * (*func) (void *), void *arg) { struct gl_thread_struct *thread = (struct gl_thread_struct *) malloc (sizeof (struct gl_thread_struct)); if (thread == NULL) return ENOMEM; thread->handle = NULL; InitializeCriticalSection (&thread->handle_lock); 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 glthread_join_func (gl_thread_t thread, void **retvalp) { if (thread == NULL) return EINVAL; if (thread == gl_thread_self ()) return EDEADLK; 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 gl_thread_exit_func (void *retval) { gl_thread_t thread = gl_thread_self (); thread->result = retval; _endthreadex (0); /* calls ExitThread (0) */ abort (); } #endif /* ========================================================================= */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glthread/thread.h��������������������������������������������������������0000664�0000000�0000000�00000030773�11671051007�0020464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.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 <http://lists.gnu.org/archive/html/bug-gnulib/2008-08/msg00062.html> */ #ifndef _GLTHREAD_THREAD_H #define _GLTHREAD_THREAD_H #include <errno.h> #include <stdlib.h> /* ========================================================================= */ #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_create # pragma weak pthread_sigmask # 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_cancel # define pthread_in_use() (pthread_cancel != NULL) # 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; # else # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : (pthread_t) NULL) # define gl_thread_self_pointer() \ (pthread_in_use () ? (void *) pthread_self () : NULL) # endif # define gl_thread_exit(RETVAL) \ (pthread_in_use () ? pthread_exit (RETVAL) : 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_PTH_THREADS /* Use the GNU Pth threads library. */ # include <pth.h> # ifdef __cplusplus extern "C" { # endif # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_spawn # pragma weak pth_sigmask # pragma weak pth_join # pragma weak pth_self # pragma weak pth_exit # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* -------------------------- gl_thread_t datatype -------------------------- */ typedef pth_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ (pth_in_use () ? ((*(THREADP) = pth_spawn (NULL, FUNC, ARG)) ? 0 : errno) : 0) # define glthread_sigmask(HOW, SET, OSET) \ (pth_in_use () && !pth_sigmask (HOW, SET, OSET) ? errno : 0) # define glthread_join(THREAD, RETVALP) \ (pth_in_use () && !pth_join (THREAD, RETVALP) ? errno : 0) # define gl_thread_self() \ (pth_in_use () ? (void *) pth_self () : NULL) # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ (pth_in_use () ? pth_exit (RETVAL) : 0) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include <thread.h> # include <synch.h> # ifdef __cplusplus extern "C" { # endif # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak thr_create # pragma weak thr_join # pragma weak thr_self # pragma weak thr_exit # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* -------------------------- gl_thread_t datatype -------------------------- */ typedef thread_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ (thread_in_use () ? thr_create (NULL, 0, FUNC, ARG, 0, THREADP) : 0) # define glthread_sigmask(HOW, SET, OSET) \ (thread_in_use () ? sigprocmask (HOW, SET, OSET) : 0) # define glthread_join(THREAD, RETVALP) \ (thread_in_use () ? thr_join (THREAD, NULL, RETVALP) : 0) # define gl_thread_self() \ (thread_in_use () ? (void *) thr_self () : NULL) # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ (thread_in_use () ? thr_exit (RETVAL) : 0) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WIN32_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_thread_t datatype -------------------------- */ /* The gl_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 gl_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 gl_thread_struct *gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ glthread_create_func (THREADP, FUNC, ARG) # define glthread_sigmask(HOW, SET, OSET) \ /* unsupported */ 0 # define glthread_join(THREAD, RETVALP) \ glthread_join_func (THREAD, RETVALP) # define gl_thread_self() \ gl_thread_self_func () # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ gl_thread_exit_func (RETVAL) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 extern int glthread_create_func (gl_thread_t *threadp, void * (*func) (void *), void *arg); extern int glthread_join_func (gl_thread_t thread, void **retvalp); extern gl_thread_t gl_thread_self_func (void); extern int gl_thread_exit_func (void *retval); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_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) 0 # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 #endif /* ========================================================================= */ /* Macros with built-in error handling. */ #ifdef __cplusplus extern "C" { #endif static inline 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; } #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-20111211-stable/lib/glthread/threadlib.c�����������������������������������������������������0000664�0000000�0000000�00000003647�11671051007�0021146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithreading primitives. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> # include <stdlib.h> # if PTHREAD_IN_USE_DETECTION_HARD /* 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 /* ========================================================================= */ /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; �����������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glthread/tls.c�����������������������������������������������������������0000664�0000000�0000000�00000003204�11671051007�0017777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Thread-local storage in multithreaded situations. Copyright (C) 2005-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> #include "glthread/tls.h" /* ========================================================================= */ #if USE_POSIX_THREADS #endif /* ========================================================================= */ #if USE_PTH_THREADS #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ /* ------------------------- gl_tls_key_t datatype ------------------------- */ void * glthread_tls_get_multithreaded (thread_key_t key) { void *value; if (thr_getspecific (key, &value) != 0) abort (); return value; } #endif /* ========================================================================= */ #if USE_WIN32_THREADS #endif /* ========================================================================= */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/glthread/tls.h�����������������������������������������������������������0000664�0000000�0000000�00000022033�11671051007�0020005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Thread-local storage in multithreaded situations. Copyright (C) 2005, 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 <http://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 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_cancel # define pthread_in_use() (pthread_cancel != NULL) # 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_PTH_THREADS /* Use the GNU Pth threads library. */ # include <pth.h> # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_key_create # pragma weak pth_key_getdata # pragma weak pth_key_setdata # pragma weak pth_key_delete # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* ------------------------- gl_tls_key_t datatype ------------------------- */ typedef union { void *singlethread_value; pth_key_t key; } gl_tls_key_t; # define glthread_tls_key_init(KEY, DESTRUCTOR) \ (pth_in_use () \ ? (!pth_key_create (&(KEY)->key, DESTRUCTOR) ? errno : 0) \ : ((KEY)->singlethread_value = NULL, 0)) # define gl_tls_get(NAME) \ (pth_in_use () \ ? pth_key_getdata ((NAME).key) \ : (NAME).singlethread_value) # define glthread_tls_set(KEY, POINTER) \ (pth_in_use () \ ? (!pth_key_setdata ((KEY)->key, (POINTER)) ? errno : 0) \ : ((KEY)->singlethread_value = (POINTER), 0)) # define glthread_tls_key_destroy(KEY) \ (pth_in_use () \ ? (!pth_key_delete ((KEY)->key) ? errno : 0) \ : 0) #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include <thread.h> # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak thr_keycreate # pragma weak thr_getspecific # pragma weak thr_setspecific # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* ------------------------- gl_tls_key_t datatype ------------------------- */ typedef union { void *singlethread_value; thread_key_t key; } gl_tls_key_t; # define glthread_tls_key_init(KEY, DESTRUCTOR) \ (thread_in_use () \ ? thr_keycreate (&(KEY)->key, DESTRUCTOR) \ : ((KEY)->singlethread_value = NULL, 0)) # define gl_tls_get(NAME) \ (thread_in_use () \ ? glthread_tls_get_multithreaded ((NAME).key) \ : (NAME).singlethread_value) extern void *glthread_tls_get_multithreaded (thread_key_t key); # define glthread_tls_set(KEY, POINTER) \ (thread_in_use () \ ? thr_setspecific ((KEY)->key, (POINTER)) \ : ((KEY)->singlethread_value = (POINTER), 0)) # define glthread_tls_key_destroy(KEY) \ /* Unsupported. */ \ 0 #endif /* ========================================================================= */ #if USE_WIN32_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> /* ------------------------- gl_tls_key_t datatype ------------------------- */ typedef DWORD gl_tls_key_t; # define glthread_tls_key_init(KEY, DESTRUCTOR) \ /* The destructor is unsupported. */ \ ((*(KEY) = TlsAlloc ()) == (DWORD)-1 ? EAGAIN : ((void) (DESTRUCTOR), 0)) # define gl_tls_get(NAME) \ TlsGetValue (NAME) # define glthread_tls_set(KEY, POINTER) \ (!TlsSetValue (*(KEY), POINTER) ? EINVAL : 0) # define glthread_tls_key_destroy(KEY) \ (!TlsFree (*(KEY)) ? EINVAL : 0) #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_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-20111211-stable/lib/glthread/yield.h���������������������������������������������������������0000664�0000000�0000000�00000005054�11671051007�0020315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Yielding the processor to other threads and processes. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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_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_PTH_THREADS /* Use the GNU Pth threads library. */ # include <pth.h> # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ pth_yield (NULL) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include <thread.h> # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ thr_yield () # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WIN32_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_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_THREADS) /* Provide dummy implementation if threads are not supported. */ # define gl_thread_yield() 0 #endif /* ========================================================================= */ #endif /* _GLTHREAD_YIELD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/grantpt.c����������������������������������������������������������������0000664�0000000�0000000�00000006225�11671051007�0017070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Acquire ownership of the slave side of a pseudo-terminal. Copyright (C) 1998-2002, 2009-2011 Free Software Foundation, Inc. Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <assert.h> #include <errno.h> #include <fcntl.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 __builtin_expect(expr,val) (expr) # 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__ /* On OpenBSD, master and slave of a pseudo-terminal are allocated together, through an ioctl on /dev/ptm. There is no need for grantpt(). */ if (fcntl (fd, F_GETFD) < 0) return -1; 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-20111211-stable/lib/group-member.c�����������������������������������������������������������0000664�0000000�0000000�00000005070�11671051007�0020007�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-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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <stdbool.h> #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include "xalloc.h" struct group_info { int n_groups; gid_t *group; }; static void free_group_info (struct group_info const *g) { free (g->group); } static bool get_group_info (struct group_info *gi) { int n_groups; int n_group_slots = getgroups (0, NULL); gid_t *group; if (n_group_slots < 0) return false; /* Avoid xnmalloc, as it goes awry when SIZE_MAX < n_group_slots. */ if (xalloc_oversized (n_group_slots, sizeof *group)) xalloc_die (); group = xmalloc (n_group_slots * sizeof *group); n_groups = getgroups (n_group_slots, group); /* In case of error, the user loses. */ if (n_groups < 0) { free (group); return false; } gi->n_groups = n_groups; gi->group = group; return true; } /* 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; if (! get_group_info (&gi)) return 0; /* Search through the list looking for GID. */ found = 0; for (i = 0; i < gi.n_groups; i++) { if (gid == gi.group[i]) { found = 1; break; } } free_group_info (&gi); return found; } #ifdef TEST char *program_name; int main (int argc, char **argv) { int i; program_name = argv[0]; 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-20111211-stable/lib/hard-locale.c������������������������������������������������������������0000664�0000000�0000000�00000004145�11671051007�0017563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hard-locale.c -- Determine whether a locale is hard. Copyright (C) 1997-1999, 2002-2004, 2006-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "hard-locale.h" #include <locale.h> #include <stdlib.h> #include <string.h> #ifdef __GLIBC__ # define GLIBC_VERSION __GLIBC__ #elif defined __UCLIBC__ # define GLIBC_VERSION 2 #else # define GLIBC_VERSION 0 #endif /* Return true if the current CATEGORY locale is hard, i.e. if you can't get away with assuming traditional C or POSIX behavior. */ bool hard_locale (int category) { bool hard = true; char const *p = setlocale (category, NULL); if (p) { if (2 <= GLIBC_VERSION) { if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0) hard = false; } else { char *locale = strdup (p); if (locale) { /* Temporarily set the locale to the "C" and "POSIX" locales to find their names, so that we can determine whether one or the other is the caller's locale. */ if (((p = setlocale (category, "C")) && strcmp (p, locale) == 0) || ((p = setlocale (category, "POSIX")) && strcmp (p, locale) == 0)) hard = false; /* Restore the caller's locale. */ setlocale (category, locale); free (locale); } } } return hard; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/hard-locale.h������������������������������������������������������������0000664�0000000�0000000�00000001571�11671051007�0017570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether a locale is hard. Copyright (C) 1999, 2003-2004, 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 <http://www.gnu.org/licenses/>. */ #ifndef HARD_LOCALE_H_ # define HARD_LOCALE_H_ 1 # include <stdbool.h> bool hard_locale (int); #endif /* HARD_LOCALE_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/hash-pjw.c���������������������������������������������������������������0000664�0000000�0000000�00000002335�11671051007�0017130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash-pjw.c -- compute a hash value from a NUL-terminated string. Copyright (C) 2001, 2003, 2006, 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 <http://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 http://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-20111211-stable/lib/hash-pjw.h���������������������������������������������������������������0000664�0000000�0000000�00000002132�11671051007�0017130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash-pjw.h -- declaration for a simple hash function Copyright (C) 2001, 2003, 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 <http://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-20111211-stable/lib/hash-triple.c������������������������������������������������������������0000664�0000000�0000000�00000004063�11671051007�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hash functions for file-related triples: name, device, inode. 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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include "hash-triple.h" #include <stdlib.h> #include <string.h> #include "hash-pjw.h" #include "same.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; } /* 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; } 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-20111211-stable/lib/hash-triple.h������������������������������������������������������������0000664�0000000�0000000�00000001137�11671051007�0017633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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; }; extern size_t triple_hash (void const *x, size_t table_size) _GL_ATTRIBUTE_PURE; 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); extern bool triple_compare_ino_str (void const *x, void const *y) _GL_ATTRIBUTE_PURE; extern void triple_free (void *x); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/hash.c�������������������������������������������������������������������0000664�0000000�0000000�00000115175�11671051007�0016341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash - hashing table processing. Copyright (C) 1998-2004, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Jim Meyering, 1992. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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. */ /* 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. */ size_t hash_get_n_buckets (const Hash_table *table) { return table->n_buckets; } /* Return the number of slots in use (non-empty buckets). */ size_t hash_get_n_buckets_used (const Hash_table *table) { return table->n_buckets_used; } /* Return the number of active entries. */ size_t hash_get_n_entries (const Hash_table *table) { return table->n_entries; } /* Return the length of the longest chain (bucket). */ 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; } /* Do a mild validation of a hash table, by traversing it and checking two statistics. */ 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; } /* If ENTRY matches an entry already in the hash table, return the entry from the table. Otherwise, return NULL. */ 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. */ /* 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. */ 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; } /* 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. */ 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; } /* 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. */ 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; } /* 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. */ 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. */ /* 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. */ #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 (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; } /* 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. */ 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; } /* 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. */ 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; } /* 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. */ 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; } /* 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. */ 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; } /* 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. */ 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 (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; } /* hash_insert0 is the deprecated name for hash_insert_if_absent. . */ int hash_insert0 (Hash_table *table, void const *entry, void const **matched_ent) { return hash_insert_if_absent (table, entry, matched_ent); } /* 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. */ 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)); } /* 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. */ void * hash_delete (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; } /* 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-20111211-stable/lib/hash.h�������������������������������������������������������������������0000664�0000000�0000000�00000010401�11671051007�0016330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash - hashing table processing. Copyright (C) 1998-1999, 2001, 2003, 2009-2011 Free Software Foundation, Inc. Written by Jim Meyering <meyering@ascend.com>, 1998. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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> /* The __attribute__ feature is available in gcc versions 2.5 and later. The warn_unused_result attribute appeared first in gcc-3.4.0. */ # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_WUR __attribute__ ((__warn_unused_result__)) # else # define _GL_ATTRIBUTE_WUR /* empty */ # endif # ifndef _GL_ATTRIBUTE_DEPRECATED /* The __attribute__((__deprecated__)) feature is available in gcc versions 3.1 and newer. */ # if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1) # define _GL_ATTRIBUTE_DEPRECATED /* empty */ # else # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) # endif # endif typedef size_t (*Hash_hasher) (const void *, size_t); typedef bool (*Hash_comparator) (const void *, const void *); typedef void (*Hash_data_freer) (void *); typedef bool (*Hash_processor) (void *, void *); 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. */ size_t hash_get_n_buckets (const Hash_table *) _GL_ATTRIBUTE_PURE; size_t hash_get_n_buckets_used (const Hash_table *) _GL_ATTRIBUTE_PURE; size_t hash_get_n_entries (const Hash_table *) _GL_ATTRIBUTE_PURE; size_t hash_get_max_bucket_length (const Hash_table *) _GL_ATTRIBUTE_PURE; bool hash_table_ok (const Hash_table *) _GL_ATTRIBUTE_PURE; void hash_print_statistics (const Hash_table *, FILE *); void *hash_lookup (const Hash_table *, const void *); /* Walking. */ void *hash_get_first (const Hash_table *) _GL_ATTRIBUTE_PURE; void *hash_get_next (const Hash_table *, const void *); size_t hash_get_entries (const Hash_table *, void **, size_t); size_t hash_do_for_each (const Hash_table *, Hash_processor, void *); /* Allocation and clean-up. */ size_t hash_string (const char *, size_t) _GL_ATTRIBUTE_PURE; void hash_reset_tuning (Hash_tuning *); Hash_table *hash_initialize (size_t, const Hash_tuning *, Hash_hasher, Hash_comparator, Hash_data_freer) _GL_ATTRIBUTE_WUR; void hash_clear (Hash_table *); void hash_free (Hash_table *); /* Insertion and deletion. */ bool hash_rehash (Hash_table *, size_t) _GL_ATTRIBUTE_WUR; void *hash_insert (Hash_table *, const void *) _GL_ATTRIBUTE_WUR; /* Deprecate this interface. It has been renamed to hash_insert_if_absent. */ int hash_insert0 (Hash_table *table, /* FIXME: remove in 2013 */ const void *entry, const void **matched_ent) _GL_ATTRIBUTE_DEPRECATED; int hash_insert_if_absent (Hash_table *table, const void *entry, const void **matched_ent); void *hash_delete (Hash_table *, const void *); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/hmac-md5.c���������������������������������������������������������������0000664�0000000�0000000�00000004016�11671051007�0017000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac-md5.c -- hashed message authentication codes Copyright (C) 2005-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Simon Josefsson. */ #include <config.h> #include "hmac.h" #include "memxor.h" #include "md5.h" #include <string.h> #define IPAD 0x36 #define OPAD 0x5c int hmac_md5 (const void *key, size_t keylen, const void *in, size_t inlen, void *resbuf) { struct md5_ctx inner; struct md5_ctx outer; char optkeybuf[16]; char block[64]; char innerhash[16]; /* Reduce the key's size, so that it becomes <= 64 bytes large. */ if (keylen > 64) { struct md5_ctx keyhash; md5_init_ctx (&keyhash); md5_process_bytes (key, keylen, &keyhash); md5_finish_ctx (&keyhash, optkeybuf); key = optkeybuf; keylen = 16; } /* Compute INNERHASH from KEY and IN. */ md5_init_ctx (&inner); memset (block, IPAD, sizeof (block)); memxor (block, key, keylen); md5_process_block (block, 64, &inner); md5_process_bytes (in, inlen, &inner); md5_finish_ctx (&inner, innerhash); /* Compute result from KEY and INNERHASH. */ md5_init_ctx (&outer); memset (block, OPAD, sizeof (block)); memxor (block, key, keylen); md5_process_block (block, 64, &outer); md5_process_bytes (innerhash, 16, &outer); md5_finish_ctx (&outer, resbuf); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/hmac-sha1.c��������������������������������������������������������������0000664�0000000�0000000�00000004040�11671051007�0017144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac-sha1.c -- hashed message authentication codes Copyright (C) 2005-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Simon Josefsson. */ #include <config.h> #include "hmac.h" #include "memxor.h" #include "sha1.h" #include <string.h> #define IPAD 0x36 #define OPAD 0x5c int hmac_sha1 (const void *key, size_t keylen, const void *in, size_t inlen, void *resbuf) { struct sha1_ctx inner; struct sha1_ctx outer; char optkeybuf[20]; char block[64]; char innerhash[20]; /* Reduce the key's size, so that it becomes <= 64 bytes large. */ if (keylen > 64) { struct sha1_ctx keyhash; sha1_init_ctx (&keyhash); sha1_process_bytes (key, keylen, &keyhash); sha1_finish_ctx (&keyhash, optkeybuf); key = optkeybuf; keylen = 20; } /* Compute INNERHASH from KEY and IN. */ sha1_init_ctx (&inner); memset (block, IPAD, sizeof (block)); memxor (block, key, keylen); sha1_process_block (block, 64, &inner); sha1_process_bytes (in, inlen, &inner); sha1_finish_ctx (&inner, innerhash); /* Compute result from KEY and INNERHASH. */ sha1_init_ctx (&outer); memset (block, OPAD, sizeof (block)); memxor (block, key, keylen); sha1_process_block (block, 64, &outer); sha1_process_bytes (innerhash, 20, &outer); sha1_finish_ctx (&outer, resbuf); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/hmac.h�������������������������������������������������������������������0000664�0000000�0000000�00000003114�11671051007�0016320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hmac.h -- hashed message authentication codes Copyright (C) 2005, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 *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 *resbuf); #endif /* HMAC_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/human.c������������������������������������������������������������������0000664�0000000�0000000�00000032354�11671051007�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* human.c -- print human readable file size Copyright (C) 1996-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 <http://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; psuffix = buf + LONGEST_HUMAN_READABLE - 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-20111211-stable/lib/human.h������������������������������������������������������������������0000664�0000000�0000000�00000005372�11671051007�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* human.h -- print human readable file size Copyright (C) 1996-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 <http://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-20111211-stable/lib/i-ring.c�����������������������������������������������������������������0000664�0000000�0000000�00000003410�11671051007�0016567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* a simple ring buffer Copyright (C) 2006, 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 <http://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-20111211-stable/lib/i-ring.h�����������������������������������������������������������������0000664�0000000�0000000�00000003173�11671051007�0016602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* definitions for a simple ring buffer Copyright (C) 2006, 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 <http://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-20111211-stable/lib/iconv.c������������������������������������������������������������������0000664�0000000�0000000�00000026406�11671051007�0016532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. Copyright (C) 1999-2001, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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" # ifndef uintptr_t # define uintptr_t unsigned long # endif #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-20111211-stable/lib/iconv.in.h���������������������������������������������������������������0000664�0000000�0000000�00000007055�11671051007�0017143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <iconv.h>. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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); #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 **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)); _GL_CXXALIAS_RPL (iconv, size_t, (iconv_t cd, @ICONV_CONST@ char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)); # else _GL_CXXALIAS_SYS (iconv, size_t, (iconv_t cd, @ICONV_CONST@ char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)); # endif _GL_CXXALIASWARN (iconv); # ifndef ICONV_CONST # define ICONV_CONST @ICONV_CONST@ # 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-20111211-stable/lib/iconv_close.c������������������������������������������������������������0000664�0000000�0000000�00000002642�11671051007�0017713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include <iconv.h> #include <stdint.h> #ifndef uintptr_t # define uintptr_t unsigned long #endif 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-20111211-stable/lib/iconv_open-aix.gperf�����������������������������������������������������0000664�0000000�0000000�00000001724�11671051007�0021207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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-20111211-stable/lib/iconv_open-hpux.gperf����������������������������������������������������0000664�0000000�0000000�00000002142�11671051007�0021405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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-20111211-stable/lib/iconv_open-irix.gperf����������������������������������������������������0000664�0000000�0000000�00000001364�11671051007�0021401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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-20111211-stable/lib/iconv_open-osf.gperf�����������������������������������������������������0000664�0000000�0000000�00000002002�11671051007�0021203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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-20111211-stable/lib/iconv_open-solaris.gperf�������������������������������������������������0000664�0000000�0000000�00000001543�11671051007�0022101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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-20111211-stable/lib/iconv_open.c�������������������������������������������������������������0000664�0000000�0000000�00000013010�11671051007�0017536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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" #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 throough 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-20111211-stable/lib/iconveh.h����������������������������������������������������������������0000664�0000000�0000000�00000002310�11671051007�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion handler type. Copyright (C) 2001-2007, 2009-2011 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 <http://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-20111211-stable/lib/idcache.c����������������������������������������������������������������0000664�0000000�0000000�00000013561�11671051007�0016772�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-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 <http://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 "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: #ifdef 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 (offsetof (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 (offsetof (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 (offsetof (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 (offsetof (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-20111211-stable/lib/idcache.h����������������������������������������������������������������0000664�0000000�0000000�00000000355�11671051007�0016774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/idpriv-drop.c������������������������������������������������������������0000664�0000000�0000000�00000010124�11671051007�0017641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dropping uid/gid privileges of the current process permanently. Copyright (C) 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 <http://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 /* MacOS 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 <http://www.usenix.org/events/sec02/full_papers/chen/chen.pdf> says about setreuid(): "The rule by which the saved uid id is modified is complicated." Similarly, <http://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 /* MacOS 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'. <http://www.usenix.org/events/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-20111211-stable/lib/idpriv-droptemp.c��������������������������������������������������������0000664�0000000�0000000�00000013166�11671051007�0020540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dropping uid/gid privileges of the current process temporarily. Copyright (C) 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 <http://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 /* MacOS 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 <http://www.usenix.org/events/sec02/full_papers/chen/chen.pdf> figure 14. */ if (setresuid (-1, uid, saved_uid) < 0) return -1; # else /* MacOS 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 <http://www.usenix.org/events/sec02/full_papers/chen/chen.pdf> figure 14. */ if (setresuid (-1, saved_uid, -1) < 0) return -1; # else /* MacOS 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 /* MacOS 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-20111211-stable/lib/idpriv.h�����������������������������������������������������������������0000664�0000000�0000000�00000011757�11671051007�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dropping uid/gid privileges of the current process. Copyright (C) 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 <http://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 <http://www.usenix.org/events/sec02/full_papers/chen/chen.pdf> * Dan Tsafrir, Dilma da Silva, David Wagner: The Murky Issue of Changing Process Identity: Revising "Setuid Demystified" <http://www.eecs.berkeley.edu/~daw/papers/setuid-login08b.pdf> <http://code.google.com/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-20111211-stable/lib/ignore-value.h�����������������������������������������������������������0000664�0000000�0000000�00000005032�11671051007�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ignore a function return without a compiler warning Copyright (C) 2008-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 <http://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 # ifndef _GL_ATTRIBUTE_DEPRECATED /* The __attribute__((__deprecated__)) feature is available in gcc versions 3.1 and newer. */ # if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1) # define _GL_ATTRIBUTE_DEPRECATED /* empty */ # else # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) # endif # endif /* The __attribute__((__warn_unused_result__)) feature is available in gcc versions 3.4 and newer, while the typeof feature has been available since 2.7 at least. */ # if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) # define ignore_value(x) ((void) (x)) # else # define ignore_value(x) (({ __typeof__ (x) __x = (x); (void) __x; })) # endif /* ignore_value works for scalars, pointers and aggregates; deprecate ignore_ptr. */ static inline void _GL_ATTRIBUTE_DEPRECATED ignore_ptr (void *p) { (void) p; } /* deprecated: use ignore_value */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/imaxabs.c����������������������������������������������������������������0000664�0000000�0000000�00000001576�11671051007�0017041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* imaxabs() function: absolute value of 'intmax_t'. Copyright (C) 2006, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <inttypes.h> intmax_t imaxabs (intmax_t x) { return (x >= 0 ? x : - x); } ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/imaxdiv.c����������������������������������������������������������������0000664�0000000�0000000�00000004371�11671051007�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* imaxdiv() function: division of 'intmax_t'. Copyright (C) 2006, 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 <http://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-20111211-stable/lib/imaxtostr.c��������������������������������������������������������������0000664�0000000�0000000�00000000112�11671051007�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define anytostr imaxtostr #define inttype intmax_t #include "anytostr.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/inet_ntop.c��������������������������������������������������������������0000664�0000000�0000000�00000014752�11671051007�0017414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form Copyright (C) 2005-2006, 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * 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_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; 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-20111211-stable/lib/inet_pton.c��������������������������������������������������������������0000664�0000000�0000000�00000015372�11671051007�0017413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* inet_pton.c -- convert IPv4 and IPv6 addresses from text to binary form Copyright (C) 2006, 2008-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 <http://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-20111211-stable/lib/ino-map.c����������������������������������������������������������������0000664�0000000�0000000�00000010675�11671051007�0016755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map an ino_t inode number to a small integer. Copyright 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 <http://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-20111211-stable/lib/ino-map.h����������������������������������������������������������������0000664�0000000�0000000�00000001001�11671051007�0016741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef _GL_INO_MAP_H # define _GL_INO_MAP_H # include <sys/types.h> # undef _GL_ATTRIBUTE_NONNULL # if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || 3 < __GNUC__ # define _GL_ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m))) # else # define _GL_ATTRIBUTE_NONNULL(m) # endif # define INO_MAP_INSERT_FAILURE ((size_t) -1) struct ino_map *ino_map_alloc (size_t); void ino_map_free (struct ino_map *) _GL_ATTRIBUTE_NONNULL (1); size_t ino_map_insert (struct ino_map *, ino_t) _GL_ATTRIBUTE_NONNULL (1); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/integer_length.c���������������������������������������������������������0000664�0000000�0000000�00000007772�11671051007�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* integer_length - find most significant bit in an 'unsigned int'. 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 <http://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" #define NBITS (sizeof (unsigned int) * CHAR_BIT) int integer_length (unsigned int x) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) if (x == 0) return 0; else return NBITS - __builtin_clz (x); #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-20111211-stable/lib/integer_length.h���������������������������������������������������������0000664�0000000�0000000�00000003250�11671051007�0020407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* integer_length - find most significant bit in an unsigned integer. 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 <http://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); #if HAVE_UNSIGNED_LONG_LONG_INT /* 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); #endif #ifdef __cplusplus } #endif #endif /* _INTEGER_LENGTH_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/integer_length_l.c�������������������������������������������������������0000664�0000000�0000000�00000004515�11671051007�0020722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* integer_length_l - find most significant bit in an 'unsigned long'. 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 <http://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 #else # define FUNC integer_length_l # define TYPE unsigned long # define GCC_BUILTIN __builtin_clzl #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) if (x == 0) return 0; else return NBITS - GCC_BUILTIN (x); #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-20111211-stable/lib/integer_length_ll.c������������������������������������������������������0000664�0000000�0000000�00000001567�11671051007�0021102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* integer_length_ll - find most significant bit in an 'unsigned long long'. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #define USE_LONG_LONG #include "integer_length_l.c" �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/intprops.h���������������������������������������������������������������0000664�0000000�0000000�00000035006�11671051007�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* intprops.h -- properties of integer types Copyright (C) 2001-2005, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include <limits.h> /* Return an integer value, converted to the same type as the integer expression E after integer type promotion. V is the unconverted value. */ #define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>. */ #define _GL_INT_NEGATE_CONVERT(e, v) (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 negative values of the signed integer type T use two's complement, ones' complement, or signed magnitude representation, respectively. Much GNU code assumes two's complement, but some people like to be portable to all possible C hosts. */ #define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) #define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) #define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) /* True if the signed integer expression E uses two's complement. */ #define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1) /* True if the arithmetic type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the integer expression E, after integer promotion, has a signed type. */ #define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. These macros have undefined behavior if T is signed and has padding bits. If this is a problem for you, please let us know how to fix it for your host. */ /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) 0 \ : TYPE_SIGNED_MAGNITUDE (t) \ ? ~ (t) 0 \ : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E should not have side effects. */ #define _GL_INT_MINIMUM(e) \ (_GL_INT_SIGNED (e) \ ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (_GL_INT_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1) /* Return 1 if the __typeof__ keyword works. This could be done by 'configure', but for now it's easier to do it by hand. */ #if 2 <= __GNUC__ || 0x5110 <= __SUNPRO_C # 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. 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. 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 0 when its argument is signed, 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 (sizeof (t) * CHAR_BIT \ - _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. */ #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 a bit harder to use than the 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. 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 <http://lists.gnu.org/archive/html/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)) /* 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. */ #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)) #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) /* Integer overflow checks. The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_OVERFLOW (i, j)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); 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. These macros are tuned for their last 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) #define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #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 (0 * (b) + (a)), \ _GL_INT_MAXIMUM (0 * (b) + (a))) #endif /* _GL_INTPROPS_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/inttostr.c���������������������������������������������������������������0000664�0000000�0000000�00000000104�11671051007�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define anytostr inttostr #define inttype int #include "anytostr.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/inttostr.h���������������������������������������������������������������0000664�0000000�0000000�00000003202�11671051007�0017274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* inttostr.h -- convert integers to printable strings Copyright (C) 2001-2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert */ #include <stdint.h> #include <sys/types.h> #include "intprops.h" #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 #if __GNUC_PREREQ (3,4) # undef __attribute_warn_unused_result__ # define __attribute_warn_unused_result__ \ __attribute__ ((__warn_unused_result__)) #else # define __attribute_warn_unused_result__ /* empty */ #endif char *imaxtostr (intmax_t, char *) __attribute_warn_unused_result__; char *inttostr (int, char *) __attribute_warn_unused_result__; char *offtostr (off_t, char *) __attribute_warn_unused_result__; char *uinttostr (unsigned int, char *) __attribute_warn_unused_result__; char *umaxtostr (uintmax_t, char *) __attribute_warn_unused_result__; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/inttypes.in.h������������������������������������������������������������0000664�0000000�0000000�00000064251�11671051007�0017705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2006-2011 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Derek Price. This file is part of gnulib. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* * ISO C 99 <inttypes.h> for platforms that lack it. * <http://www.opengroup.org/susv3xbd/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@ # @INCLUDE_NEXT@ @NEXT_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. */ #include <limits.h> #if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX) # error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>." #endif /* 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 __cplusplus || defined __STDC_FORMAT_MACROS # 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 || @PRI_MACROS_BROKEN@ # undef PRId8 # ifdef INT8_MAX # define PRId8 "d" # endif # endif # if !defined PRIi8 || @PRI_MACROS_BROKEN@ # undef PRIi8 # ifdef INT8_MAX # define PRIi8 "i" # endif # endif # if !defined PRIo8 || @PRI_MACROS_BROKEN@ # undef PRIo8 # ifdef UINT8_MAX # define PRIo8 "o" # endif # endif # if !defined PRIu8 || @PRI_MACROS_BROKEN@ # undef PRIu8 # ifdef UINT8_MAX # define PRIu8 "u" # endif # endif # if !defined PRIx8 || @PRI_MACROS_BROKEN@ # undef PRIx8 # ifdef UINT8_MAX # define PRIx8 "x" # endif # endif # if !defined PRIX8 || @PRI_MACROS_BROKEN@ # undef PRIX8 # ifdef UINT8_MAX # define PRIX8 "X" # endif # endif # if !defined PRId16 || @PRI_MACROS_BROKEN@ # undef PRId16 # ifdef INT16_MAX # define PRId16 "d" # endif # endif # if !defined PRIi16 || @PRI_MACROS_BROKEN@ # undef PRIi16 # ifdef INT16_MAX # define PRIi16 "i" # endif # endif # if !defined PRIo16 || @PRI_MACROS_BROKEN@ # undef PRIo16 # ifdef UINT16_MAX # define PRIo16 "o" # endif # endif # if !defined PRIu16 || @PRI_MACROS_BROKEN@ # undef PRIu16 # ifdef UINT16_MAX # define PRIu16 "u" # endif # endif # if !defined PRIx16 || @PRI_MACROS_BROKEN@ # undef PRIx16 # ifdef UINT16_MAX # define PRIx16 "x" # endif # endif # if !defined PRIX16 || @PRI_MACROS_BROKEN@ # undef PRIX16 # ifdef UINT16_MAX # define PRIX16 "X" # endif # endif # if !defined PRId32 || @PRI_MACROS_BROKEN@ # undef PRId32 # ifdef INT32_MAX # define PRId32 "d" # endif # endif # if !defined PRIi32 || @PRI_MACROS_BROKEN@ # undef PRIi32 # ifdef INT32_MAX # define PRIi32 "i" # endif # endif # if !defined PRIo32 || @PRI_MACROS_BROKEN@ # undef PRIo32 # ifdef UINT32_MAX # define PRIo32 "o" # endif # endif # if !defined PRIu32 || @PRI_MACROS_BROKEN@ # undef PRIu32 # ifdef UINT32_MAX # define PRIu32 "u" # endif # endif # if !defined PRIx32 || @PRI_MACROS_BROKEN@ # undef PRIx32 # ifdef UINT32_MAX # define PRIx32 "x" # endif # endif # if !defined PRIX32 || @PRI_MACROS_BROKEN@ # undef 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 @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 # define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRId64 || @PRI_MACROS_BROKEN@ # undef PRId64 # define PRId64 _PRI64_PREFIX "d" # endif # if !defined PRIi64 || @PRI_MACROS_BROKEN@ # undef 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 @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 # define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRIo64 || @PRI_MACROS_BROKEN@ # undef PRIo64 # define PRIo64 _PRIu64_PREFIX "o" # endif # if !defined PRIu64 || @PRI_MACROS_BROKEN@ # undef PRIu64 # define PRIu64 _PRIu64_PREFIX "u" # endif # if !defined PRIx64 || @PRI_MACROS_BROKEN@ # undef PRIx64 # define PRIx64 _PRIu64_PREFIX "x" # endif # if !defined PRIX64 || @PRI_MACROS_BROKEN@ # undef PRIX64 # define PRIX64 _PRIu64_PREFIX "X" # endif # endif # if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIdLEAST8 # define PRIdLEAST8 "d" # endif # if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIiLEAST8 # define PRIiLEAST8 "i" # endif # if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIoLEAST8 # define PRIoLEAST8 "o" # endif # if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIuLEAST8 # define PRIuLEAST8 "u" # endif # if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIxLEAST8 # define PRIxLEAST8 "x" # endif # if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@ # undef PRIXLEAST8 # define PRIXLEAST8 "X" # endif # if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIdLEAST16 # define PRIdLEAST16 "d" # endif # if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIiLEAST16 # define PRIiLEAST16 "i" # endif # if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIoLEAST16 # define PRIoLEAST16 "o" # endif # if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIuLEAST16 # define PRIuLEAST16 "u" # endif # if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIxLEAST16 # define PRIxLEAST16 "x" # endif # if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@ # undef PRIXLEAST16 # define PRIXLEAST16 "X" # endif # if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIdLEAST32 # define PRIdLEAST32 "d" # endif # if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIiLEAST32 # define PRIiLEAST32 "i" # endif # if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIoLEAST32 # define PRIoLEAST32 "o" # endif # if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIuLEAST32 # define PRIuLEAST32 "u" # endif # if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIxLEAST32 # define PRIxLEAST32 "x" # endif # if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@ # undef PRIXLEAST32 # define PRIXLEAST32 "X" # endif # ifdef INT64_MAX # if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIdLEAST64 # define PRIdLEAST64 PRId64 # endif # if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIiLEAST64 # define PRIiLEAST64 PRIi64 # endif # endif # ifdef UINT64_MAX # if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIoLEAST64 # define PRIoLEAST64 PRIo64 # endif # if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIuLEAST64 # define PRIuLEAST64 PRIu64 # endif # if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIxLEAST64 # define PRIxLEAST64 PRIx64 # endif # if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@ # undef PRIXLEAST64 # define PRIXLEAST64 PRIX64 # endif # endif # if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@ # undef PRIdFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIdFAST8 PRId64 # else # define PRIdFAST8 "d" # endif # endif # if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@ # undef PRIiFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIiFAST8 PRIi64 # else # define PRIiFAST8 "i" # endif # endif # if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@ # undef PRIoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIoFAST8 PRIo64 # else # define PRIoFAST8 "o" # endif # endif # if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@ # undef PRIuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIuFAST8 PRIu64 # else # define PRIuFAST8 "u" # endif # endif # if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@ # undef PRIxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIxFAST8 PRIx64 # else # define PRIxFAST8 "x" # endif # endif # if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@ # undef PRIXFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIXFAST8 PRIX64 # else # define PRIXFAST8 "X" # endif # endif # if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@ # undef PRIdFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIdFAST16 PRId64 # else # define PRIdFAST16 "d" # endif # endif # if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@ # undef PRIiFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIiFAST16 PRIi64 # else # define PRIiFAST16 "i" # endif # endif # if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@ # undef PRIoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIoFAST16 PRIo64 # else # define PRIoFAST16 "o" # endif # endif # if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@ # undef PRIuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIuFAST16 PRIu64 # else # define PRIuFAST16 "u" # endif # endif # if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@ # undef PRIxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIxFAST16 PRIx64 # else # define PRIxFAST16 "x" # endif # endif # if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@ # undef PRIXFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIXFAST16 PRIX64 # else # define PRIXFAST16 "X" # endif # endif # if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@ # undef PRIdFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIdFAST32 PRId64 # else # define PRIdFAST32 "d" # endif # endif # if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@ # undef PRIiFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIiFAST32 PRIi64 # else # define PRIiFAST32 "i" # endif # endif # if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@ # undef PRIoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIoFAST32 PRIo64 # else # define PRIoFAST32 "o" # endif # endif # if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@ # undef PRIuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIuFAST32 PRIu64 # else # define PRIuFAST32 "u" # endif # endif # if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@ # undef PRIxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIxFAST32 PRIx64 # else # define PRIxFAST32 "x" # endif # endif # if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@ # undef PRIXFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIXFAST32 PRIX64 # else # define PRIXFAST32 "X" # endif # endif # ifdef INT64_MAX # if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@ # undef PRIdFAST64 # define PRIdFAST64 PRId64 # endif # if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@ # undef PRIiFAST64 # define PRIiFAST64 PRIi64 # endif # endif # ifdef UINT64_MAX # if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@ # undef PRIoFAST64 # define PRIoFAST64 PRIo64 # endif # if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@ # undef PRIuFAST64 # define PRIuFAST64 PRIu64 # endif # if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@ # undef PRIxFAST64 # define PRIxFAST64 PRIx64 # endif # if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@ # undef PRIXFAST64 # define PRIXFAST64 PRIX64 # endif # endif # if !defined PRIdMAX || @PRI_MACROS_BROKEN@ # undef PRIdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIdMAX PRId64 # else # define PRIdMAX "ld" # endif # endif # if !defined PRIiMAX || @PRI_MACROS_BROKEN@ # undef PRIiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIiMAX PRIi64 # else # define PRIiMAX "li" # endif # endif # if !defined PRIoMAX || @PRI_MACROS_BROKEN@ # undef PRIoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIoMAX PRIo64 # else # define PRIoMAX "lo" # endif # endif # if !defined PRIuMAX || @PRI_MACROS_BROKEN@ # undef PRIuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIuMAX PRIu64 # else # define PRIuMAX "lu" # endif # endif # if !defined PRIxMAX || @PRI_MACROS_BROKEN@ # undef PRIxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIxMAX PRIx64 # else # define PRIxMAX "lx" # endif # endif # if !defined PRIXMAX || @PRI_MACROS_BROKEN@ # undef PRIXMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIXMAX PRIX64 # else # define PRIXMAX "lX" # endif # endif # if !defined PRIdPTR || @PRI_MACROS_BROKEN@ # undef PRIdPTR # ifdef INTPTR_MAX # define PRIdPTR @PRIPTR_PREFIX@ "d" # endif # endif # if !defined PRIiPTR || @PRI_MACROS_BROKEN@ # undef PRIiPTR # ifdef INTPTR_MAX # define PRIiPTR @PRIPTR_PREFIX@ "i" # endif # endif # if !defined PRIoPTR || @PRI_MACROS_BROKEN@ # undef PRIoPTR # ifdef UINTPTR_MAX # define PRIoPTR @PRIPTR_PREFIX@ "o" # endif # endif # if !defined PRIuPTR || @PRI_MACROS_BROKEN@ # undef PRIuPTR # ifdef UINTPTR_MAX # define PRIuPTR @PRIPTR_PREFIX@ "u" # endif # endif # if !defined PRIxPTR || @PRI_MACROS_BROKEN@ # undef PRIxPTR # ifdef UINTPTR_MAX # define PRIxPTR @PRIPTR_PREFIX@ "x" # endif # endif # if !defined PRIXPTR || @PRI_MACROS_BROKEN@ # undef PRIXPTR # ifdef UINTPTR_MAX # define PRIXPTR @PRIPTR_PREFIX@ "X" # endif # endif # if !defined SCNd8 || @PRI_MACROS_BROKEN@ # undef SCNd8 # ifdef INT8_MAX # define SCNd8 "hhd" # endif # endif # if !defined SCNi8 || @PRI_MACROS_BROKEN@ # undef SCNi8 # ifdef INT8_MAX # define SCNi8 "hhi" # endif # endif # if !defined SCNo8 || @PRI_MACROS_BROKEN@ # undef SCNo8 # ifdef UINT8_MAX # define SCNo8 "hho" # endif # endif # if !defined SCNu8 || @PRI_MACROS_BROKEN@ # undef SCNu8 # ifdef UINT8_MAX # define SCNu8 "hhu" # endif # endif # if !defined SCNx8 || @PRI_MACROS_BROKEN@ # undef SCNx8 # ifdef UINT8_MAX # define SCNx8 "hhx" # endif # endif # if !defined SCNd16 || @PRI_MACROS_BROKEN@ # undef SCNd16 # ifdef INT16_MAX # define SCNd16 "hd" # endif # endif # if !defined SCNi16 || @PRI_MACROS_BROKEN@ # undef SCNi16 # ifdef INT16_MAX # define SCNi16 "hi" # endif # endif # if !defined SCNo16 || @PRI_MACROS_BROKEN@ # undef SCNo16 # ifdef UINT16_MAX # define SCNo16 "ho" # endif # endif # if !defined SCNu16 || @PRI_MACROS_BROKEN@ # undef SCNu16 # ifdef UINT16_MAX # define SCNu16 "hu" # endif # endif # if !defined SCNx16 || @PRI_MACROS_BROKEN@ # undef SCNx16 # ifdef UINT16_MAX # define SCNx16 "hx" # endif # endif # if !defined SCNd32 || @PRI_MACROS_BROKEN@ # undef SCNd32 # ifdef INT32_MAX # define SCNd32 "d" # endif # endif # if !defined SCNi32 || @PRI_MACROS_BROKEN@ # undef SCNi32 # ifdef INT32_MAX # define SCNi32 "i" # endif # endif # if !defined SCNo32 || @PRI_MACROS_BROKEN@ # undef SCNo32 # ifdef UINT32_MAX # define SCNo32 "o" # endif # endif # if !defined SCNu32 || @PRI_MACROS_BROKEN@ # undef SCNu32 # ifdef UINT32_MAX # define SCNu32 "u" # endif # endif # if !defined SCNx32 || @PRI_MACROS_BROKEN@ # undef 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 @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 # define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNd64 || @PRI_MACROS_BROKEN@ # undef SCNd64 # define SCNd64 _SCN64_PREFIX "d" # endif # if !defined SCNi64 || @PRI_MACROS_BROKEN@ # undef 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 @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 # define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNo64 || @PRI_MACROS_BROKEN@ # undef SCNo64 # define SCNo64 _SCNu64_PREFIX "o" # endif # if !defined SCNu64 || @PRI_MACROS_BROKEN@ # undef SCNu64 # define SCNu64 _SCNu64_PREFIX "u" # endif # if !defined SCNx64 || @PRI_MACROS_BROKEN@ # undef SCNx64 # define SCNx64 _SCNu64_PREFIX "x" # endif # endif # if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNdLEAST8 # define SCNdLEAST8 "hhd" # endif # if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNiLEAST8 # define SCNiLEAST8 "hhi" # endif # if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNoLEAST8 # define SCNoLEAST8 "hho" # endif # if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNuLEAST8 # define SCNuLEAST8 "hhu" # endif # if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@ # undef SCNxLEAST8 # define SCNxLEAST8 "hhx" # endif # if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNdLEAST16 # define SCNdLEAST16 "hd" # endif # if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNiLEAST16 # define SCNiLEAST16 "hi" # endif # if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNoLEAST16 # define SCNoLEAST16 "ho" # endif # if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNuLEAST16 # define SCNuLEAST16 "hu" # endif # if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@ # undef SCNxLEAST16 # define SCNxLEAST16 "hx" # endif # if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNdLEAST32 # define SCNdLEAST32 "d" # endif # if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNiLEAST32 # define SCNiLEAST32 "i" # endif # if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNoLEAST32 # define SCNoLEAST32 "o" # endif # if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNuLEAST32 # define SCNuLEAST32 "u" # endif # if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@ # undef SCNxLEAST32 # define SCNxLEAST32 "x" # endif # ifdef INT64_MAX # if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNdLEAST64 # define SCNdLEAST64 SCNd64 # endif # if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNiLEAST64 # define SCNiLEAST64 SCNi64 # endif # endif # ifdef UINT64_MAX # if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNoLEAST64 # define SCNoLEAST64 SCNo64 # endif # if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNuLEAST64 # define SCNuLEAST64 SCNu64 # endif # if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@ # undef SCNxLEAST64 # define SCNxLEAST64 SCNx64 # endif # endif # if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef 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 || @PRI_MACROS_BROKEN@ # undef SCNdFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNdFAST32 SCNd64 # else # define SCNdFAST32 "d" # endif # endif # if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@ # undef SCNiFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNiFAST32 SCNi64 # else # define SCNiFAST32 "i" # endif # endif # if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@ # undef SCNoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNoFAST32 SCNo64 # else # define SCNoFAST32 "o" # endif # endif # if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@ # undef SCNuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNuFAST32 SCNu64 # else # define SCNuFAST32 "u" # endif # endif # if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@ # undef SCNxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNxFAST32 SCNx64 # else # define SCNxFAST32 "x" # endif # endif # ifdef INT64_MAX # if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@ # undef SCNdFAST64 # define SCNdFAST64 SCNd64 # endif # if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@ # undef SCNiFAST64 # define SCNiFAST64 SCNi64 # endif # endif # ifdef UINT64_MAX # if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@ # undef SCNoFAST64 # define SCNoFAST64 SCNo64 # endif # if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@ # undef SCNuFAST64 # define SCNuFAST64 SCNu64 # endif # if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@ # undef SCNxFAST64 # define SCNxFAST64 SCNx64 # endif # endif # if !defined SCNdMAX || @PRI_MACROS_BROKEN@ # undef SCNdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNdMAX SCNd64 # else # define SCNdMAX "ld" # endif # endif # if !defined SCNiMAX || @PRI_MACROS_BROKEN@ # undef SCNiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNiMAX SCNi64 # else # define SCNiMAX "li" # endif # endif # if !defined SCNoMAX || @PRI_MACROS_BROKEN@ # undef SCNoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNoMAX SCNo64 # else # define SCNoMAX "lo" # endif # endif # if !defined SCNuMAX || @PRI_MACROS_BROKEN@ # undef SCNuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNuMAX SCNu64 # else # define SCNuMAX "lu" # endif # endif # if !defined SCNxMAX || @PRI_MACROS_BROKEN@ # undef SCNxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNxMAX SCNx64 # else # define SCNxMAX "lx" # endif # endif # if !defined SCNdPTR || @PRI_MACROS_BROKEN@ # undef SCNdPTR # ifdef INTPTR_MAX # define SCNdPTR @PRIPTR_PREFIX@ "d" # endif # endif # if !defined SCNiPTR || @PRI_MACROS_BROKEN@ # undef SCNiPTR # ifdef INTPTR_MAX # define SCNiPTR @PRIPTR_PREFIX@ "i" # endif # endif # if !defined SCNoPTR || @PRI_MACROS_BROKEN@ # undef SCNoPTR # ifdef UINTPTR_MAX # define SCNoPTR @PRIPTR_PREFIX@ "o" # endif # endif # if !defined SCNuPTR || @PRI_MACROS_BROKEN@ # undef SCNuPTR # ifdef UINTPTR_MAX # define SCNuPTR @PRIPTR_PREFIX@ "u" # endif # endif # if !defined SCNxPTR || @PRI_MACROS_BROKEN@ # undef SCNxPTR # ifdef UINTPTR_MAX # define SCNxPTR @PRIPTR_PREFIX@ "x" # endif # 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_DECL_IMAXDIV@ # if !GNULIB_defined_imaxdiv_t typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; # define GNULIB_defined_imaxdiv_t 1 # endif 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 !@HAVE_DECL_STRTOIMAX@ # undef strtoimax extern intmax_t strtoimax (const char *, char **, int) _GL_ARG_NONNULL ((1)); # endif #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 !@HAVE_DECL_STRTOUMAX@ # undef strtoumax extern uintmax_t strtoumax (const char *, char **, int) _GL_ARG_NONNULL ((1)); # endif #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-20111211-stable/lib/ioctl.c������������������������������������������������������������������0000664�0000000�0000000�00000003732�11671051007�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ioctl.c --- wrappers for Windows ioctl function Copyright (C) 2008-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 <http://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> # include "fd-hook.h" 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. */ errno = ENOSYS; 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-20111211-stable/lib/isapipe.c����������������������������������������������������������������0000664�0000000�0000000�00000006556�11671051007�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a file descriptor is a pipe. Copyright (C) 2006, 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "isapipe.h" #include <errno.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Windows platforms. */ /* Get GetFileType. */ # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" 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-20111211-stable/lib/isapipe.h����������������������������������������������������������������0000664�0000000�0000000�00000000205�11671051007�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Whether pipes are FIFOs; -1 if not known. */ #ifndef HAVE_FIFO_PIPES # define HAVE_FIFO_PIPES (-1) #endif int isapipe (int fd); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/isblank.c����������������������������������������������������������������0000664�0000000�0000000�00000002466�11671051007�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a character is a blank. Copyright (C) 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 <http://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-20111211-stable/lib/isdir.c������������������������������������������������������������������0000664�0000000�0000000�00000002070�11671051007�0016515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* isdir.c -- determine whether a directory exists Copyright (C) 1990, 1998, 2006, 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 <http://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-20111211-stable/lib/isdir.h������������������������������������������������������������������0000664�0000000�0000000�00000000036�11671051007�0016522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������int isdir (const char *path); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/isfinite.c���������������������������������������������������������������0000664�0000000�0000000�00000003071�11671051007�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for finite value (zero, subnormal, or normal, and not infinite or NaN). 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/isinf.c������������������������������������������������������������������0000664�0000000�0000000�00000002121�11671051007�0016510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for positive or negative infinity. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/isnan.c������������������������������������������������������������������0000664�0000000�0000000�00000014364�11671051007�0016524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. 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 <http://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; int FUNC (DOUBLE x) { #ifdef KNOWN_EXPBIT0_LOCATION # 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. 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-20111211-stable/lib/isnand-nolibm.h����������������������������������������������������������0000664�0000000�0000000�00000002216�11671051007�0020144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. 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 <http://www.gnu.org/licenses/>. */ #if HAVE_ISNAND_IN_LIBC /* Get declaration of isnan macro. */ # include <math.h> # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins 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-20111211-stable/lib/isnand.c�����������������������������������������������������������������0000664�0000000�0000000�00000001467�11671051007�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/isnanf-nolibm.h����������������������������������������������������������0000664�0000000�0000000�00000002265�11671051007�0020152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. 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 <http://www.gnu.org/licenses/>. */ #if HAVE_ISNANF_IN_LIBC /* Get declaration of isnan macro or (older) isnanf function. */ # include <math.h> # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanf # define isnanf(x) __builtin_isnanf ((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 extern int isnanf (float x); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/isnanf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001517�11671051007�0016666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_FLOAT #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/isnanl-nolibm.h����������������������������������������������������������0000664�0000000�0000000�00000002307�11671051007�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. 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 <http://www.gnu.org/licenses/>. */ #if HAVE_ISNANL_IN_LIBC /* Get declaration of isnan macro or (older) isnanl function. */ # include <math.h> # if __GNUC__ >= 4 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanl # define isnanl(x) __builtin_isnanl ((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-20111211-stable/lib/isnanl.c�����������������������������������������������������������������0000664�0000000�0000000�00000001525�11671051007�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_LONG_DOUBLE #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/iswblank.c���������������������������������������������������������������0000664�0000000�0000000�00000001642�11671051007�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test wide character for being blank. Copyright (C) 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include <wctype.h> int iswblank (wint_t wc) { return wc == ' ' || wc == '\t'; } ����������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/iswctype-impl.h����������������������������������������������������������0000664�0000000�0000000�00000001575�11671051007�0020227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a wide character has a given property. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ int iswctype (wint_t wc, wctype_t desc) { return ((int (*) (wint_t)) desc) (wc); } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/iswctype.c���������������������������������������������������������������0000664�0000000�0000000�00000001603�11671051007�0017253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a wide character has a given property. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include "iswctype-impl.h" �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/itold.c������������������������������������������������������������������0000664�0000000�0000000�00000002003�11671051007�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement for 'int' to 'long double' conversion routine. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/javacomp.c���������������������������������������������������������������0000664�0000000�0000000�00000234711�11671051007�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile a Java program. Copyright (C) 2001-2003, 2006-2011 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 <http://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) /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close /* 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[0] == '1' && java_version_cache[1] == '.' && (java_version_cache[2] >= '1' && java_version_cache[2] <= '6') && java_version_cache[3] == '\0')) java_version_cache = "1.1"; } return java_version_cache; } /* ======================= Source version dependent ======================= */ /* Convert a source version to an index. */ #define SOURCE_VERSION_BOUND 3 /* exclusive upper bound */ static unsigned int source_version_index (const char *source_version) { if (source_version[0] == '1' && source_version[1] == '.' && (source_version[2] >= '3' && source_version[2] <= '5') && source_version[3] == '\0') return source_version[2] - '3'; 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"; 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 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 6 /* 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] <= '6') && target_version[3] == '\0') return target_version[2] - '1'; 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; error (EXIT_FAILURE, 0, _("invalid target_version argument to compile_java_class")); return 0; } /* ======================== 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; 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] = "/bin/sh"; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; exitstatus = execute (javac, "/bin/sh", argv, 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; char **argv; 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 = (char **) xmalloca ((argc + 1) * sizeof (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++ = (char *) directory; } for (i = 0; i < java_sources_count; i++) *argp++ = (char *) 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, 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; char **argv; 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 = (char **) xmalloca ((argc + 1) * sizeof (char *)); argp = argv; *argp++ = "javac"; if (source_option) { *argp++ = "-source"; *argp++ = (char *) source_version; } if (target_option) { *argp++ = "-target"; *argp++ = (char *) target_version; } if (optimize) *argp++ = "-O"; if (debug) *argp++ = "-g"; if (directory != NULL) { *argp++ = "-d"; *argp++ = (char *) directory; } for (i = 0; i < java_sources_count; i++) *argp++ = (char *) 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, 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; char **argv; char **argp; int exitstatus; unsigned int i; argc = 1 + (optimize ? 1 : 0) + (debug ? 1 : 0) + (directory != NULL ? 2 : 0) + java_sources_count; argv = (char **) xmalloca ((argc + 1) * sizeof (char *)); argp = argv; *argp++ = "jikes"; if (optimize) *argp++ = "-O"; if (debug) *argp++ = "-g"; if (directory != NULL) { *argp++ = "-d"; *argp++ = (char *) directory; } for (i = 0; i < java_sources_count; i++) *argp++ = (char *) 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, 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, "w"); 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, 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) 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; 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] = "/bin/sh"; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; child = create_pipe_in (javac, "/bin/sh", argv, 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; 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] = "/bin/sh"; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; child = create_pipe_in (javac, "/bin/sh", argv, 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 *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); 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" 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); 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" 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); 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" 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" */ 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, 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]'" */ 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, 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" */ char *argv[2]; int exitstatus; argv[0] = "javac"; argv[1] = NULL; exitstatus = execute ("javac", "javac", argv, 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 *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, 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, 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, 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, false, target_version, tmpdir->dir_name, false, false, false, true)) /* javac compiled conftestfail.java successfully, and "javac -source $source_version" 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, 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, 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, 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, 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" 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, 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" 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" */ char *argv[2]; int exitstatus; argv[0] = "jikes"; argv[1] = NULL; exitstatus = execute ("jikes", "jikes", argv, 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; if (target_version == NULL) target_version = default_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, 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 : "", 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; if (target_version == NULL) target_version = default_target_version (); if (is_javac_usable (source_version, 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, 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-20111211-stable/lib/javacomp.h���������������������������������������������������������������0000664�0000000�0000000�00000007036�11671051007�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile a Java program. Copyright (C) 2001-2002, 2006, 2009-2011 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 <http://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 yet supported) 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 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, because even Sun'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 case target_version = 1.4, source_version = 1.3, which allows gcj versions 3.0 to 3.2 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-20111211-stable/lib/javaexec.c���������������������������������������������������������������0000664�0000000�0000000�00000027611�11671051007�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Execute a Java program. Copyright (C) 2001-2003, 2006-2011 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 <http://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; char **argv = (char **) xmalloca ((1 + nargs + 1) * sizeof (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] = (char *) 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; 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] = "/bin/sh"; argv[1] = "-c"; argv[2] = command; argv[3] = NULL; err = executer (java, "/bin/sh", 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" */ char *argv[3]; int exitstatus; argv[0] = "gij"; argv[1] = "--version"; argv[2] = NULL; exitstatus = execute ("gij", "gij", argv, false, false, true, true, true, false, NULL); gij_present = (exitstatus == 0); gij_tested = true; } if (gij_present) { char *old_classpath; char **argv = (char **) xmalloca ((2 + nargs + 1) * sizeof (char *)); unsigned int i; /* Set CLASSPATH. */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); argv[0] = "gij"; argv[1] = (char *) class_name; for (i = 0; i <= nargs; i++) argv[2 + i] = (char *) 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" */ char *argv[3]; int exitstatus; argv[0] = "java"; argv[1] = "-version"; argv[2] = NULL; exitstatus = execute ("java", "java", argv, false, false, true, true, true, false, NULL); java_present = (exitstatus == 0); java_tested = true; } if (java_present) { char *old_classpath; char **argv = (char **) xmalloca ((2 + nargs + 1) * sizeof (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] = (char *) class_name; for (i = 0; i <= nargs; i++) argv[2 + i] = (char *) 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" */ char *argv[2]; int exitstatus; argv[0] = "jre"; argv[1] = NULL; exitstatus = execute ("jre", "jre", argv, false, false, true, true, true, false, NULL); jre_present = (exitstatus == 0 || exitstatus == 1); jre_tested = true; } if (jre_present) { char *old_classpath; char **argv = (char **) xmalloca ((2 + nargs + 1) * sizeof (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] = (char *) class_name; for (i = 0; i <= nargs; i++) argv[2 + i] = (char *) 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 __WIN32__ || defined __CYGWIN__ /* Win32, Cygwin */ { static bool jview_tested; static bool jview_present; if (!jview_tested) { /* Test for presence of jview: "jview -? >nul ; test $? = 1" */ char *argv[3]; int exitstatus; argv[0] = "jview"; argv[1] = "-?"; argv[2] = NULL; exitstatus = execute ("jview", "jview", argv, false, false, true, true, true, false, NULL); jview_present = (exitstatus == 0 || exitstatus == 1); jview_tested = true; } if (jview_present) { char *old_classpath; char **argv = (char **) xmalloca ((2 + nargs + 1) * sizeof (char *)); unsigned int i; /* Set CLASSPATH. */ old_classpath = set_classpath (classpaths, classpaths_count, use_minimal_classpath, verbose); argv[0] = "jview"; argv[1] = (char *) class_name; for (i = 0; i <= nargs; i++) argv[2 + i] = (char *) 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-20111211-stable/lib/javaexec.h���������������������������������������������������������������0000664�0000000�0000000�00000004506�11671051007�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Execute a Java program. Copyright (C) 2001-2002, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _JAVAEXEC_H #define _JAVAEXEC_H #include <stdbool.h> typedef bool execute_fn (const char *progname, const char *prog_path, char **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-20111211-stable/lib/javaversion.c������������������������������������������������������������0000664�0000000�0000000�00000005517�11671051007�0017743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the Java version supported by javaexec. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "javaversion.h" #include <errno.h> #include <stdbool.h> #include <stdio.h> #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (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, char **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, 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"; const char *pkgdatadir = relocate (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); return locals.line; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/javaversion.class��������������������������������������������������������0000664�0000000�0000000�00000000776�11671051007�0020630�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-20111211-stable/lib/javaversion.h������������������������������������������������������������0000664�0000000�0000000�00000002373�11671051007�0017745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the Java version supported by javaexec. Copyright (C) 2006, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _JAVAVERSION_H #define _JAVAVERSION_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. Return NULL if the Java version cannot be determined. */ extern char * javaexec_version (void); #ifdef __cplusplus } #endif #endif /* _JAVAVERSION_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/javaversion.java���������������������������������������������������������0000664�0000000�0000000�00000002154�11671051007�0020434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Show the Java version. * Copyright (C) 2006, 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 <http://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-20111211-stable/lib/langinfo.in.h������������������������������������������������������������0000664�0000000�0000000�00000012206�11671051007�0017614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <langinfo.h>. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * POSIX <langinfo.h> for platforms that lack it or have an incomplete one. * <http://www.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 THOUSEP 10002 /* 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 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 /* 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_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-20111211-stable/lib/lchown.c�����������������������������������������������������������������0000664�0000000�0000000�00000005756�11671051007�0016713�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-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 <http://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-20111211-stable/lib/ldexpf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001756�11671051007�0016677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multiply a 'float' by a power of 2. 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 <http://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-20111211-stable/lib/ldexpl.c�����������������������������������������������������������������0000664�0000000�0000000�00000003635�11671051007�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for ldexpl. Contributed by Paolo Bonzini Copyright 2002-2003, 2007-2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/ldtoastr.c���������������������������������������������������������������0000664�0000000�0000000�00000000046�11671051007�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define LENGTH 3 #include "ftoastr.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/libunistring.valgrind����������������������������������������������������0000664�0000000�0000000�00000000405�11671051007�0021500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress valgrind messages in an installed libunistring. # 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-20111211-stable/lib/linebuffer.c�������������������������������������������������������������0000664�0000000�0000000�00000005635�11671051007�0017536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* linebuffer.c -- read arbitrarily long lines Copyright (C) 1986, 1991, 1998-1999, 2001, 2003-2004, 2006-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 <http://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) { size_t oldsize = linebuffer->size; buffer = x2realloc (buffer, &linebuffer->size); 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-20111211-stable/lib/linebuffer.h�������������������������������������������������������������0000664�0000000�0000000�00000004075�11671051007�0017540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* linebuffer.h -- declarations for reading arbitrarily long lines Copyright (C) 1986, 1991, 1998-1999, 2002-2003, 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 <http://www.gnu.org/licenses/>. */ #if !defined LINEBUFFER_H # define LINEBUFFER_H # include <stdio.h> /* A `struct linebuffer' holds a line of text. */ struct linebuffer { size_t size; /* Allocated. */ size_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-20111211-stable/lib/link.c�������������������������������������������������������������������0000664�0000000�0000000�00000013174�11671051007�0016347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulate link on platforms that lack it, namely native Windows platforms. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* CreateHardLink was introduced only in Windows 2000. */ typedef BOOL (WINAPI * CreateHardLinkFuncType) (LPCTSTR lpFileName, LPCTSTR 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; } int link (const char *file1, const char *file2) { char *dir; size_t len1 = strlen (file1); size_t len2 = strlen (file2); if (!initialized) initialize (); if (CreateHardLinkFunc == NULL) { /* System does not support hard links. */ errno = EPERM; return -1; } /* Reject trailing slashes on non-directories; mingw does not support hard-linking directories. */ if ((len1 && (file1[len1 - 1] == '/' || file1[len1 - 1] == '\\')) || (len2 && (file2[len2 - 1] == '/' || file2[len2 - 1] == '\\'))) { struct stat st; if (stat (file1, &st) == 0 && S_ISDIR (st.st_mode)) errno = EPERM; else errno = ENOTDIR; 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) == -1) { int saved_errno = errno; free (dir); errno = saved_errno; 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)) { 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) == -1) { int saved_errno = errno; free (dir); errno = saved_errno; return -1; } } free (dir); } return link (file1, file2); } #endif /* HAVE_LINK */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/linkat.c�����������������������������������������������������������������0000664�0000000�0000000�00000021172�11671051007�0016671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a hard link relative to open directories. Copyright (C) 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 <http://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 "filenamecat.h" #include "openat-priv.h" #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #ifndef MAXSYMLINKS # ifdef SYMLOOP_MAX # define MAXSYMLINKS SYMLOOP_MAX # else # define MAXSYMLINKS 20 # endif #endif #if !HAVE_LINKAT /* 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); int saved_errno = errno; free (target); free (dir); errno = saved_errno; 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 = MAXSYMLINKS; /* 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) { int saved_errno = errno; free (name); errno = saved_errno; } return -1; } result = link (name, file2); if (name != file1) { int saved_errno = errno; free (name); errno = saved_errno; } 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 /* 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 = MAXSYMLINKS; /* 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) { int saved_errno = errno; free (name); errno = saved_errno; } return -1; } result = linkat (fd1, name, fd2, file2, 0); if (name != file1) { int saved_errno = errno; free (name); errno = saved_errno; } 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) return linkat (fd1, file1, fd2, file2, flag); /* 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-20111211-stable/lib/listen.c�����������������������������������������������������������������0000664�0000000�0000000�00000002342�11671051007�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* listen.c --- wrappers for Windows listen function Copyright (C) 2008-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 <http://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-20111211-stable/lib/localcharset.c�����������������������������������������������������������0000664�0000000�0000000�00000043041�11671051007�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006, 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #include "localcharset.h" #include <fcntl.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. MacOS X 10.3 or newer */ #endif #if defined _WIN32 || defined __WIN32__ # define WIN32_NATIVE #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # ifndef OS2 # define OS2 # endif #endif #if !defined WIN32_NATIVE # include <unistd.h> # if HAVE_LANGINFO_CODESET # include <langinfo.h> # else # if 0 /* see comment below */ # include <locale.h> # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> # endif #elif defined WIN32_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #if defined OS2 # define INCL_DOS # include <os2.h> #endif #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) #endif /* Get LIBDIR. */ #ifndef LIBDIR # include "configmake.h" #endif /* Define O_NOFOLLOW to 0 on platforms where it does not exist. */ #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #endif #ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' #endif #ifndef ISSLASH # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) #endif #if HAVE_DECL_GETC_UNLOCKED # undef getc # define getc getc_unlocked #endif /* The following static variable is declared 'volatile' to avoid a possible multithread problem in the function get_charset_aliases. If we are running in a threaded environment, and if two threads initialize 'charset_aliases' simultaneously, both will produce the same value, and everything will be ok if the two assignments to 'charset_aliases' are atomic. But I don't know what will happen if the two assignments mix. */ #if __STDC__ != 1 # define volatile /* empty */ #endif /* Pointer to the contents of the charset.alias file, if it has already been read, else NULL. Its format is: ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ static const char * volatile charset_aliases; /* Return a pointer to the contents of the charset.alias file. */ static const char * get_charset_aliases (void) { const char *cp; cp = charset_aliases; if (cp == NULL) { #if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) const char *dir; const char *base = "charset.alias"; char *file_name; /* Make it possible to override the charset.alias location. This is necessary for running the testsuite before "make install". */ dir = getenv ("CHARSETALIASDIR"); if (dir == NULL || dir[0] == '\0') dir = relocate (LIBDIR); /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); size_t base_len = strlen (base); int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); file_name = (char *) malloc (dir_len + add_slash + base_len + 1); if (file_name != NULL) { memcpy (file_name, dir, dir_len); if (add_slash) file_name[dir_len] = DIRECTORY_SEPARATOR; memcpy (file_name + dir_len + add_slash, base, base_len + 1); } } if (file_name == NULL) /* Out of memory. Treat the file as empty. */ cp = ""; else { int fd; /* Open the file. Reject symbolic links on platforms that support O_NOFOLLOW. This is a security feature. Without it, an attacker could retrieve parts of the contents (namely, the tail of the first line that starts with "* ") of an arbitrary file by placing a symbolic link to that file under the name "charset.alias" in some writable directory and defining the environment variable CHARSETALIASDIR to point to that directory. */ fd = open (file_name, O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0)); if (fd < 0) /* File not found. Treat it as empty. */ cp = ""; else { FILE *fp; fp = fdopen (fd, "r"); if (fp == NULL) { /* Out of memory. Treat the file as empty. */ close (fd); cp = ""; } else { /* Parse the file's contents. */ char *res_ptr = NULL; size_t res_size = 0; for (;;) { int c; char buf1[50+1]; char buf2[50+1]; size_t l1, l2; char *old_res_ptr; c = getc (fp); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { /* Skip comment, to end of line. */ do c = getc (fp); while (!(c == EOF || c == '\n')); if (c == EOF) break; continue; } ungetc (c, fp); if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) break; l1 = strlen (buf1); l2 = strlen (buf2); old_res_ptr = res_ptr; if (res_size == 0) { res_size = l1 + 1 + l2 + 1; res_ptr = (char *) malloc (res_size + 1); } else { res_size += l1 + 1 + l2 + 1; res_ptr = (char *) realloc (res_ptr, res_size + 1); } if (res_ptr == NULL) { /* Out of memory. */ res_size = 0; free (old_res_ptr); break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); strcpy (res_ptr + res_size - (l2 + 1), buf2); } fclose (fp); if (res_size == 0) cp = ""; else { *(res_ptr + res_size) = '\0'; cp = res_ptr; } } } free (file_name); } #else # if defined DARWIN7 /* To avoid the trouble of installing a file that is shared by many GNU packages -- many packaging systems have problems with this --, simply inline the aliases here. */ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" "ISO8859-2" "\0" "ISO-8859-2" "\0" "ISO8859-4" "\0" "ISO-8859-4" "\0" "ISO8859-5" "\0" "ISO-8859-5" "\0" "ISO8859-7" "\0" "ISO-8859-7" "\0" "ISO8859-9" "\0" "ISO-8859-9" "\0" "ISO8859-13" "\0" "ISO-8859-13" "\0" "ISO8859-15" "\0" "ISO-8859-15" "\0" "KOI8-R" "\0" "KOI8-R" "\0" "KOI8-U" "\0" "KOI8-U" "\0" "CP866" "\0" "CP866" "\0" "CP949" "\0" "CP949" "\0" "CP1131" "\0" "CP1131" "\0" "CP1251" "\0" "CP1251" "\0" "eucCN" "\0" "GB2312" "\0" "GB2312" "\0" "GB2312" "\0" "eucJP" "\0" "EUC-JP" "\0" "eucKR" "\0" "EUC-KR" "\0" "Big5" "\0" "BIG5" "\0" "Big5HKSCS" "\0" "BIG5-HKSCS" "\0" "GBK" "\0" "GBK" "\0" "GB18030" "\0" "GB18030" "\0" "SJIS" "\0" "SHIFT_JIS" "\0" "ARMSCII-8" "\0" "ARMSCII-8" "\0" "PT154" "\0" "PT154" "\0" /*"ISCII-DEV" "\0" "?" "\0"*/ "*" "\0" "UTF-8" "\0"; # endif # if defined VMS /* To avoid the troubles of an extra file charset.alias_vms in the sources of many GNU packages, simply inline the aliases here. */ /* 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". */ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" "ISO8859-2" "\0" "ISO-8859-2" "\0" "ISO8859-5" "\0" "ISO-8859-5" "\0" "ISO8859-7" "\0" "ISO-8859-7" "\0" "ISO8859-8" "\0" "ISO-8859-8" "\0" "ISO8859-9" "\0" "ISO-8859-9" "\0" /* Japanese */ "eucJP" "\0" "EUC-JP" "\0" "SJIS" "\0" "SHIFT_JIS" "\0" "DECKANJI" "\0" "DEC-KANJI" "\0" "SDECKANJI" "\0" "EUC-JP" "\0" /* Chinese */ "eucTW" "\0" "EUC-TW" "\0" "DECHANYU" "\0" "DEC-HANYU" "\0" "DECHANZI" "\0" "GB2312" "\0" /* Korean */ "DECKOREAN" "\0" "EUC-KR" "\0"; # endif # if defined WIN32_NATIVE || defined __CYGWIN__ /* To avoid the troubles of installing a separate file in the same directory as the DLL and of retrieving the DLL's directory at runtime, simply inline the aliases here. */ cp = "CP936" "\0" "GBK" "\0" "CP1361" "\0" "JOHAB" "\0" "CP20127" "\0" "ASCII" "\0" "CP20866" "\0" "KOI8-R" "\0" "CP20936" "\0" "GB2312" "\0" "CP21866" "\0" "KOI8-RU" "\0" "CP28591" "\0" "ISO-8859-1" "\0" "CP28592" "\0" "ISO-8859-2" "\0" "CP28593" "\0" "ISO-8859-3" "\0" "CP28594" "\0" "ISO-8859-4" "\0" "CP28595" "\0" "ISO-8859-5" "\0" "CP28596" "\0" "ISO-8859-6" "\0" "CP28597" "\0" "ISO-8859-7" "\0" "CP28598" "\0" "ISO-8859-8" "\0" "CP28599" "\0" "ISO-8859-9" "\0" "CP28605" "\0" "ISO-8859-15" "\0" "CP38598" "\0" "ISO-8859-8" "\0" "CP51932" "\0" "EUC-JP" "\0" "CP51936" "\0" "GB2312" "\0" "CP51949" "\0" "EUC-KR" "\0" "CP51950" "\0" "EUC-TW" "\0" "CP54936" "\0" "GB18030" "\0" "CP65001" "\0" "UTF-8" "\0"; # endif #endif charset_aliases = cp; } return cp; } /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. 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; const char *aliases; #if !(defined WIN32_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 buf[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 (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } } /* Woe32 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. */ sprintf (buf, "CP%u", GetACP ()); codeset = buf; } # 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 SunOS 4 or 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"); } } /* On some old systems, one used to set locale = "iso8859_1". On others, you set it to "language_COUNTRY.charset". In any case, we resolve it through the charset.alias file. */ codeset = locale; # endif #elif defined WIN32_NATIVE static char buf[2 + 10 + 1]; /* Woe32 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 ()); codeset = buf; #elif defined OS2 const char *locale; static char buf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; /* 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 (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } /* Resolve through the charset.alias file. */ codeset = locale; } else { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { sprintf (buf, "CP%u", cp[0]); codeset = buf; } } #endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; /* Resolve alias. */ for (aliases = get_charset_aliases (); *aliases != '\0'; aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) if (strcmp (codeset, aliases) == 0 || (aliases[0] == '*' && aliases[1] == '\0')) { codeset = aliases + strlen (aliases) + 1; break; } /* 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"; return codeset; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/localcharset.h�����������������������������������������������������������0000664�0000000�0000000�00000002543�11671051007�0020061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU CHARSET 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/locale.in.h��������������������������������������������������������������0000664�0000000�0000000�00000005756�11671051007�0017272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX <locale.h>. 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 <http://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_LOCALE_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #ifndef _@GUARD_PREFIX@_LOCALE_H #define _@GUARD_PREFIX@_LOCALE_H /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MacOS 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 #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 _GL_CXXALIASWARN (setlocale); #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_DUPLOCALE@ # if @REPLACE_DUPLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef duplocale # define duplocale rpl_duplocale # 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 #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 #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* _@GUARD_PREFIX@_LOCALE_H */ ������������������gnulib-20111211-stable/lib/localename.c�������������������������������������������������������������0000664�0000000�0000000�00000250670�11671051007�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the currently selected locale. Copyright (C) 1995-2011 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 <http://www.gnu.org/licenses/>. */ /* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */ /* Win32 code written by Tor Lillqvist <tml@iki.fi>. */ /* MacOS X code written by Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #ifdef IN_LIBINTL # include "gettextP.h" #else # include "localename.h" #endif #include <limits.h> #include <stddef.h> #include <stdlib.h> #include <locale.h> #include <string.h> #if HAVE_USELOCALE /* MacOS X 10.5 defines the locale_t type in <xlocale.h>. */ # if defined __APPLE__ && defined __MACH__ # include <xlocale.h> # endif # include <langinfo.h> # if !defined IN_LIBINTL # include "glthread/lock.h" # endif #endif #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE # include <CoreFoundation/CFString.h> # if HAVE_CFLOCALECOPYCURRENT # include <CoreFoundation/CFLocale.h> # elif HAVE_CFPREFERENCESCOPYAPPVALUE # include <CoreFoundation/CFPreferences.h> # endif #endif #if defined _WIN32 || defined __WIN32__ # define WIN32_NATIVE #endif #if defined WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */ # define WIN32_LEAN_AND_MEAN # include <windows.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 #endif #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ /* Canonicalize a MacOS X locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the MacOS 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, http://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 MacOS X 10.3, there is no API for doing this. Therefore we do it ourselves, using a table based on the results of the MacOS 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[] = { /* MacOS X has "az-Arab", "az-Cyrl", "az-Latn". The default script for az on Unix is Latin. */ { "az-Latn", "az" }, /* MacOS X has "ga-dots". Does not yet exist on Unix. */ { "ga-dots", "ga" }, /* MacOS X has "kk-Cyrl". Does not yet exist on Unix. */ /* MacOS X has "mn-Cyrl", "mn-Mong". The default script for mn on Unix is Cyrillic. */ { "mn-Cyrl", "mn" }, /* MacOS X has "ms-Arab", "ms-Latn". The default script for ms on Unix is Latin. */ { "ms-Latn", "ms" }, /* MacOS X has "tg-Cyrl". The default script for tg on Unix is Cyrillic. */ { "tg-Cyrl", "tg" }, /* MacOS X has "tk-Cyrl". Does not yet exist on Unix. */ /* MacOS X has "tt-Cyrl". The default script for tt on Unix is Cyrillic. */ { "tt-Cyrl", "tt" }, /* MacOS 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 http://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" }, { "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 WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */ /* Canonicalize a Win32 native locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Win32 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 Win32 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 http://www.unicode.org/unicode/onlinedat/languages.html . For details about languages, see http://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: /* <http://www.microsoft.com/globaldev/reference/lcid-all.mspx> calls it "Sepedi"; according to <http://www.ethnologue.com/show_language.asp?code=nso> <http://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); } #endif #if HAVE_USELOCALE /* glibc or MacOS X */ /* 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 http://www.haible.de/bruno/hashfunc.html. */ static size_t 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 hash_node { struct hash_node * volatile next; char contents[100]; /* has variable size */ }; # define HASH_TABLE_SIZE 257 static struct hash_node * volatile struniq_hash_table[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 % HASH_TABLE_SIZE; size_t size; struct hash_node *new_node; struct 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 hash_node *) malloc (offsetof (struct hash_node, contents[0]) + size); if (new_node == NULL) /* Out of memory. Return a statically allocated string. */ return "C"; memcpy (new_node->contents, string, size); /* Lock while inserting new_node. */ 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. */ gl_lock_unlock (struniq_lock); return new_node->contents; } #endif #if defined IN_LIBINTL || HAVE_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, const char *categoryname) { # if HAVE_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 <http://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; # endif # if defined __APPLE__ && defined __MACH__ /* MacOS X */ /* The locale name is found deep in an undocumented data structure. Since it's stored in a buffer of size 32 and newlocale() rejects locale names of length > 31, we can assume that it is NUL terminated in this buffer. But we need to make a copy of the locale name, of indefinite extent. */ struct _xlocale_part1_v0 /* used in MacOS X 10.5 */ { int32_t __refcount; void (*__free_extra)(void *); __darwin_mbstate_t __mbs[10]; int64_t __magic; }; struct _xlocale_part1_v1 /* used in MacOS X >= 10.6.0 */ { int32_t __refcount; void (*__free_extra)(void *); __darwin_mbstate_t __mbs[10]; /*pthread_lock_t*/ int __lock; int64_t __magic; }; struct _xlocale_part2 { int64_t __magic; unsigned char __collate_load_error; unsigned char __collate_substitute_nontrivial; unsigned char _messages_using_locale; unsigned char _monetary_using_locale; unsigned char _numeric_using_locale; unsigned char _time_using_locale; unsigned char __mlocale_changed; unsigned char __nlocale_changed; unsigned char __numeric_fp_cvt; struct __xlocale_st_collate *__lc_collate; struct __xlocale_st_runelocale *__lc_ctype; struct __xlocale_st_messages *__lc_messages; struct __xlocale_st_monetary *__lc_monetary; struct __xlocale_st_numeric *__lc_numeric; struct _xlocale *__lc_numeric_loc; struct __xlocale_st_time *__lc_time; /* more */ }; struct __xlocale_st_collate { int32_t __refcount; void (*__free_extra)(void *); char __encoding[32]; /* more */ }; struct __xlocale_st_runelocale { int32_t __refcount; void (*__free_extra)(void *); char __ctype_encoding[32]; /* more */ }; struct __xlocale_st_messages { int32_t __refcount; void (*__free_extra)(void *); char *_messages_locale_buf; /* more */ }; struct __xlocale_st_monetary { int32_t __refcount; void (*__free_extra)(void *); char *_monetary_locale_buf; /* more */ }; struct __xlocale_st_numeric { int32_t __refcount; void (*__free_extra)(void *); char *_numeric_locale_buf; /* more */ }; struct __xlocale_st_time { int32_t __refcount; void (*__free_extra)(void *); char *_time_locale_buf; /* more */ }; struct _xlocale_part2 *tlp; if (((struct _xlocale_part1_v0 *) thread_locale)->__magic == 0x786C6F63616C6530LL) /* MacOS X 10.5 */ tlp = (struct _xlocale_part2 *) &((struct _xlocale_part1_v0 *) thread_locale)->__magic; else if (((struct _xlocale_part1_v1 *) thread_locale)->__magic == 0x786C6F63616C6530LL) /* MacOS X >= 10.6.0 */ tlp = (struct _xlocale_part2 *) &((struct _xlocale_part1_v1 *) thread_locale)->__magic; else /* Unsupported version of MacOS X: The internals of 'struct _xlocale' have changed again. */ return ""; switch (category) { case LC_CTYPE: return tlp->__lc_ctype->__ctype_encoding; case LC_NUMERIC: return tlp->_numeric_using_locale ? tlp->__lc_numeric->_numeric_locale_buf : "C"; case LC_TIME: return tlp->_time_using_locale ? tlp->__lc_time->_time_locale_buf : "C"; case LC_COLLATE: return !tlp->__collate_load_error ? tlp->__lc_collate->__encoding : "C"; case LC_MONETARY: return tlp->_monetary_using_locale ? tlp->__lc_monetary->_monetary_locale_buf : "C"; case LC_MESSAGES: return tlp->_messages_using_locale ? tlp->__lc_messages->_messages_locale_buf : "C"; default: /* We shouldn't get here. */ return ""; } # endif } } # endif return NULL; } #endif const char * gl_locale_name_thread (int category, const char *categoryname) { #if HAVE_USELOCALE const char *name = gl_locale_name_thread_unsafe (category, categoryname); if (name != NULL) return struniq (name); #endif 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, const char *categoryname) { /* 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_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL return setlocale (category, NULL); #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 (MacOS X, native Windows, Cygwin) and where the system's setlocale() function ignores this default locale (MacOS 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, ""). */ return gl_locale_name_environ (category, categoryname); #endif } const char * gl_locale_name_environ (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_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS 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 MacOS X and Windows: They provide a GUI that allows the user to choose a locale. - On MacOS X, by default, none of LC_* or LANG are set. Starting with MacOS 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_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined WIN32_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_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ { /* Cache the locale name, since CoreFoundation calls are expensive. */ static const char *cached_localename; if (cached_localename == NULL) { char namebuf[256]; # if HAVE_CFLOCALECOPYCURRENT /* MacOS X 10.3 or newer */ CFLocaleRef locale = CFLocaleCopyCurrent (); CFStringRef name = CFLocaleGetIdentifier (locale); if (CFStringGetCString (name, namebuf, sizeof (namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } CFRelease (locale); # elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ CFTypeRef value = CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), kCFPreferencesCurrentApplication); if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)value, namebuf, sizeof (namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } # endif if (cached_localename == NULL) cached_localename = "C"; } return cached_localename; } # endif # if defined WIN32_NATIVE || defined __CYGWIN__ /* WIN32 or Cygwin */ { LCID lcid; /* Use native Win32 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-20111211-stable/lib/localename.h�������������������������������������������������������������0000664�0000000�0000000�00000010610�11671051007�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the currently selected locale. 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 Lesser General 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 <http://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); #ifdef __cplusplus } #endif #endif /* _GL_LOCALENAME_H */ ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/log10f.c�����������������������������������������������������������������0000664�0000000�0000000�00000001534�11671051007�0016477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Base 10 logarithmic function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float log10f (float x) { return (float) log10 ((double) x); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/logf.c�������������������������������������������������������������������0000664�0000000�0000000�00000001530�11671051007�0016332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Natural logarithmic function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float logf (float x) { return (float) log ((double) x); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/login_tty.c��������������������������������������������������������������0000664�0000000�0000000�00000004303�11671051007�0017414�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-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 <http://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); 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-20111211-stable/lib/logl.c�������������������������������������������������������������������0000664�0000000�0000000�00000021517�11671051007�0016347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright 2001 by Stephen L. Moshier <moshier@na-net.ornl.gov> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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); } #else /* 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-20111211-stable/lib/long-options.c�����������������������������������������������������������0000664�0000000�0000000�00000004615�11671051007�0020042�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-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 <http://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" 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); case 'v': { va_list authors; va_start (authors, usage_func); version_etc_va (stdout, command_name, package, version, authors); exit (0); } 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; } �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/long-options.h�����������������������������������������������������������0000664�0000000�0000000�00000002231�11671051007�0020037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* long-options.h -- declaration for --help- and --version-handling function. Copyright (C) 1993-1994, 1998-1999, 2003, 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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ void parse_long_options (int _argc, char **_argv, const char *_command_name, const char *_package, const char *_version, void (*_usage) (int), /* const char *author1, ...*/ ...); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/lseek.c������������������������������������������������������������������0000664�0000000�0000000�00000003421�11671051007�0016507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An lseek() function that detects pipes. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Windows platforms. */ /* Get GetFileType. */ # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" #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 __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 return lseek (fd, offset, whence); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/lstat.c������������������������������������������������������������������0000664�0000000�0000000�00000006703�11671051007�0016541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around a bug of lstat on some systems Copyright (C) 1997-2006, 2008-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 <http://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 inline int orig_lstat (const char *filename, struct stat *buf) { return lstat (filename, buf); } /* Specification. */ /* 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" # 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) { size_t len; int lstat_result = orig_lstat (file, sbuf); if (lstat_result != 0) return lstat_result; /* 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. */ len = strlen (file); if (file[len - 1] != '/' || S_ISDIR (sbuf->st_mode)) return 0; /* At this point, a trailing slash is only permitted 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; } return stat (file, sbuf); } #endif /* HAVE_LSTAT */ �������������������������������������������������������������gnulib-20111211-stable/lib/malloc.c�����������������������������������������������������������������0000664�0000000�0000000�00000003043�11671051007�0016653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc() function that is glibc compatible. Copyright (C) 1997-1998, 2006-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* written by Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ #ifdef malloc # define NEED_MALLOC_GNU 1 # undef malloc /* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ #elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU # define NEED_MALLOC_GNU 1 #endif #include <stdlib.h> #include <errno.h> /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ void * rpl_malloc (size_t n) { void *result; #if NEED_MALLOC_GNU if (n == 0) n = 1; #endif result = malloc (n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/malloca.c����������������������������������������������������������������0000664�0000000�0000000�00000011753�11671051007�0017023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003, 2006-2007, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Specification. */ #include "malloca.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. */ #if HAVE_ALLOCA /* Store the mmalloca() results in a hash table. This is needed to reliably distinguish a mmalloca() result and an alloca() result. Although it is possible that the same pointer is returned by alloca() and by mmalloca() at different times in the same application, it does not lead to a bug in freea(), because: - Before a pointer returned by alloca() can point into malloc()ed memory, the function must return, and once this has happened the programmer must not call freea() on it anyway. - Before a pointer returned by mmalloca() can point into the stack, it must be freed. The only function that can free it is freea(), and when freea() frees it, it also removes it from the hash table. */ #define MAGIC_NUMBER 0x1415fb4a #define MAGIC_SIZE sizeof (int) /* This is how the header info would look like without any alignment considerations. */ struct preliminary_header { void *next; char room[MAGIC_SIZE]; }; /* But the header's size must be a multiple of sa_alignment_max. */ #define HEADER_SIZE \ (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max) struct header { void *next; char room[HEADER_SIZE - sizeof (struct preliminary_header) + MAGIC_SIZE]; }; verify (HEADER_SIZE == sizeof (struct header)); /* We make the hash table quite big, so that during lookups the probability of empty hash buckets is quite high. There is no need to make the hash table resizable, because when the hash table gets filled so much that the lookup becomes slow, it means that the application has memory leaks. */ #define HASH_TABLE_SIZE 257 static void * mmalloca_results[HASH_TABLE_SIZE]; #endif void * mmalloca (size_t n) { #if HAVE_ALLOCA /* Allocate one more word, that serves as an indicator for malloc()ed memory, so that freea() of an alloca() result is fast. */ size_t nplus = n + HEADER_SIZE; if (nplus >= n) { char *p = (char *) malloc (nplus); if (p != NULL) { size_t slot; p += HEADER_SIZE; /* Put a magic number into the indicator word. */ ((int *) p)[-1] = MAGIC_NUMBER; /* Enter p into the hash table. */ slot = (unsigned long) p % HASH_TABLE_SIZE; ((struct header *) (p - HEADER_SIZE))->next = mmalloca_results[slot]; mmalloca_results[slot] = p; 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) { /* mmalloca() may have returned NULL. */ if (p != NULL) { /* Attempt to quickly distinguish the mmalloca() result - which has a magic indicator word - and the alloca() result - which has an uninitialized indicator word. It is for this test that sa_increment additional bytes are allocated in the alloca() case. */ if (((int *) p)[-1] == MAGIC_NUMBER) { /* Looks like a mmalloca() result. To see whether it really is one, perform a lookup in the hash table. */ size_t slot = (unsigned long) p % HASH_TABLE_SIZE; void **chain = &mmalloca_results[slot]; for (; *chain != NULL;) { if (*chain == p) { /* Found it. Remove it from the hash table and free it. */ char *p_begin = (char *) p - HEADER_SIZE; *chain = ((struct header *) p_begin)->next; free (p_begin); return; } chain = &((struct header *) ((char *) *chain - HEADER_SIZE))->next; } } /* At this point, we know it was not a mmalloca() result. */ } } #endif ���������������������gnulib-20111211-stable/lib/malloca.h����������������������������������������������������������������0000664�0000000�0000000�00000011160�11671051007�0017020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003-2007, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _MALLOCA_H #define _MALLOCA_H #include <alloca.h> #include <stddef.h> #include <stdlib.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 an inline function. */ # define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) #else # define safe_alloca(N) ((void) (N), NULL) #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 - sa_increment \ ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ : mmalloca (N)) #else # define malloca(N) \ mmalloca (N) #endif extern void * mmalloca (size_t n); /* Free a block of memory allocated through malloca(). */ #if HAVE_ALLOCA extern void freea (void *p); #else # define freea free #endif /* 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. S must be positive and N must be nonnegative. The array must be freed using freea() before the function returns. */ #if 1 /* Cf. the definition of xalloc_oversized. */ # define nmalloca(n, s) \ ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \ ? NULL \ : malloca ((n) * (s))) #else extern void * nmalloca (size_t n, size_t s); #endif #ifdef __cplusplus } #endif /* ------------------- Auxiliary, non-public definitions ------------------- */ /* Determine the alignment of a type at compile time. */ #if defined __GNUC__ # 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), #if HAVE_LONG_LONG_INT sa_alignment_longlong = sa_alignof (long long), #endif sa_alignment_longdouble = sa_alignof (long double), sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) #if HAVE_LONG_LONG_INT | (sa_alignment_longlong - 1) #endif | (sa_alignment_longdouble - 1) ) + 1, /* The increment that guarantees room for a magic word must be >= sizeof (int) and a multiple of sa_alignment_max. */ sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max }; #endif /* _MALLOCA_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/malloca.valgrind���������������������������������������������������������0000664�0000000�0000000�00000000257�11671051007�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in freea(). # This use is OK because it provides only a speedup. { freea Memcheck:Cond fun:freea } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/math.in.h����������������������������������������������������������������0000664�0000000�0000000�00000117642�11671051007�0016762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <math.h>. Copyright (C) 2002-2003, 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 <http://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_MATH_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ #ifndef _@GUARD_PREFIX@_MATH_H #define _@GUARD_PREFIX@_MATH_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. */ #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) \ inline int \ func (float f) \ { \ return _gl_cxx_ ## func ## f (f); \ } \ inline int \ func (double d) \ { \ return _gl_cxx_ ## func ## d (d); \ } \ inline int \ func (long double l) \ { \ return _gl_cxx_ ## func ## l (l); \ } #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) \ static inline int \ rpl_ ## func ## f (float f) \ { \ return func (f); \ } \ static inline int \ rpl_ ## func ## d (double d) \ { \ return func (d); \ } \ static inline int \ rpl_ ## func ## l (long double l) \ { \ return func (l); \ } \ _GL_WARN_ON_USE (rpl_ ## func ## f, #func " is unportable - " \ "use gnulib module " #func " for portability"); \ _GL_WARN_ON_USE (rpl_ ## func ## d, #func " is unportable - " \ "use gnulib module " #func " for portability"); \ _GL_WARN_ON_USE (rpl_ ## func ## l, #func " is unportable - " \ "use gnulib module " #func " for portability") #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 static 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_VAL # define HUGE_VAL (1.0 / 0.0) #endif #if @GNULIB_ACOSF@ # if !@HAVE_ACOSF@ # undef acosf _GL_FUNCDECL_SYS (acosf, float, (float x)); # endif _GL_CXXALIAS_SYS (acosf, float, (float x)); _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@ _GL_FUNCDECL_SYS (acosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (acosl, long double, (long double x)); _GL_CXXALIASWARN (acosl); #elif defined GNULIB_POSIXCHECK # undef acosl # if HAVE_RAW_DECL_ACOSL _GL_WARN_ON_USE (acosl, "acosl is unportable - " "use gnulib module mathl for portability"); # endif #endif #if @GNULIB_ASINF@ # if !@HAVE_ASINF@ # undef asinf _GL_FUNCDECL_SYS (asinf, float, (float x)); # endif _GL_CXXALIAS_SYS (asinf, float, (float x)); _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@ _GL_FUNCDECL_SYS (asinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (asinl, long double, (long double x)); _GL_CXXALIASWARN (asinl); #elif defined GNULIB_POSIXCHECK # undef asinl # if HAVE_RAW_DECL_ASINL _GL_WARN_ON_USE (asinl, "asinl is unportable - " "use gnulib module mathl for portability"); # endif #endif #if @GNULIB_ATANF@ # if !@HAVE_ATANF@ # undef atanf _GL_FUNCDECL_SYS (atanf, float, (float x)); # endif _GL_CXXALIAS_SYS (atanf, float, (float x)); _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@ _GL_FUNCDECL_SYS (atanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (atanl, long double, (long double x)); _GL_CXXALIASWARN (atanl); #elif defined GNULIB_POSIXCHECK # undef atanl # if HAVE_RAW_DECL_ATANL _GL_WARN_ON_USE (atanl, "atanl is unportable - " "use gnulib module mathl for portability"); # endif #endif #if @GNULIB_ATAN2F@ # if !@HAVE_ATAN2F@ # undef atan2f _GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); _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_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@ _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) # 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 _GL_CXXALIASWARN (ceil); #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@ _GL_FUNCDECL_SYS (ceill, long double, (long double x)); # endif _GL_CXXALIAS_SYS (ceill, long double, (long double x)); # endif _GL_CXXALIASWARN (ceill); #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_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)); _GL_CXXALIASWARN (copysign); #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 !@HAVE_COSF@ # undef cosf _GL_FUNCDECL_SYS (cosf, float, (float x)); # endif _GL_CXXALIAS_SYS (cosf, float, (float x)); _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@ _GL_FUNCDECL_SYS (cosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cosl, long double, (long double x)); _GL_CXXALIASWARN (cosl); #elif defined GNULIB_POSIXCHECK # undef cosl # if HAVE_RAW_DECL_COSL _GL_WARN_ON_USE (cosl, "cosl is unportable - " "use gnulib module mathl for portability"); # endif #endif #if @GNULIB_COSHF@ # if !@HAVE_COSHF@ # undef coshf _GL_FUNCDECL_SYS (coshf, float, (float x)); # endif _GL_CXXALIAS_SYS (coshf, float, (float x)); _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 !@HAVE_EXPF@ # undef expf _GL_FUNCDECL_SYS (expf, float, (float x)); # endif _GL_CXXALIAS_SYS (expf, float, (float x)); _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 !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ _GL_FUNCDECL_SYS (expl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (expl, long double, (long double x)); _GL_CXXALIASWARN (expl); #elif defined GNULIB_POSIXCHECK # undef expl # if HAVE_RAW_DECL_EXPL _GL_WARN_ON_USE (expl, "expl is unportable - " "use gnulib module mathl 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)); _GL_CXXALIASWARN (fabsf); #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_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@ _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) # 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 _GL_CXXALIASWARN (floor); #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@ _GL_FUNCDECL_SYS (floorl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (floorl, long double, (long double x)); # endif _GL_CXXALIASWARN (floorl); #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@ _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@ _GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); # endif _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); # endif _GL_CXXALIASWARN (fma); #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@ _GL_FUNCDECL_SYS (fmal, long double, (long double x, long double y, long double z)); # 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 !@HAVE_FMODF@ # undef fmodf _GL_FUNCDECL_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (fmodf, float, (float x, float y)); _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 /* 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 _GL_CXXALIASWARN (frexpf); #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) # 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 _GL_CXXALIASWARN (frexp); #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@) _GL_CXXALIASWARN (frexpl); #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 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)); _GL_CXXALIASWARN (ldexpf); #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@ _GL_CXXALIASWARN (ldexpl); #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_LOGB@ # if !@HAVE_DECL_LOGB@ _GL_EXTERN_C double logb (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_LOGF@ # if !@HAVE_LOGF@ # undef logf _GL_FUNCDECL_SYS (logf, float, (float x)); # endif _GL_CXXALIAS_SYS (logf, float, (float x)); _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_LOGL@ # if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@ _GL_FUNCDECL_SYS (logl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logl, long double, (long double x)); _GL_CXXALIASWARN (logl); #elif defined GNULIB_POSIXCHECK # undef logl # if HAVE_RAW_DECL_LOGL _GL_WARN_ON_USE (logl, "logl is unportable - " "use gnulib module mathl for portability"); # endif #endif #if @GNULIB_LOG10F@ # if !@HAVE_LOG10F@ # undef log10f _GL_FUNCDECL_SYS (log10f, float, (float x)); # endif _GL_CXXALIAS_SYS (log10f, float, (float x)); _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_MODFF@ # 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)); _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_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_RINTF@ # if !@HAVE_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)); _GL_CXXALIASWARN (rint); #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 !@HAVE_RINTL@ _GL_FUNCDECL_SYS (rintl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (rintl, long double, (long double x)); _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 _GL_CXXALIASWARN (round); #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@ _GL_FUNCDECL_SYS (roundl, long double, (long double x)); # 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 !@HAVE_SINF@ # undef sinf _GL_FUNCDECL_SYS (sinf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinf, float, (float x)); _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@ _GL_FUNCDECL_SYS (sinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sinl, long double, (long double x)); _GL_CXXALIASWARN (sinl); #elif defined GNULIB_POSIXCHECK # undef sinl # if HAVE_RAW_DECL_SINL _GL_WARN_ON_USE (sinl, "sinl is unportable - " "use gnulib module mathl for portability"); # endif #endif #if @GNULIB_SINHF@ # if !@HAVE_SINHF@ # undef sinhf _GL_FUNCDECL_SYS (sinhf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinhf, float, (float x)); _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 !@HAVE_SQRTF@ # undef sqrtf _GL_FUNCDECL_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (sqrtf, float, (float x)); _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 !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@ _GL_FUNCDECL_SYS (sqrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sqrtl, long double, (long double x)); _GL_CXXALIASWARN (sqrtl); #elif defined GNULIB_POSIXCHECK # undef sqrtl # if HAVE_RAW_DECL_SQRTL _GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - " "use gnulib module mathl for portability"); # endif #endif #if @GNULIB_TANF@ # if !@HAVE_TANF@ # undef tanf _GL_FUNCDECL_SYS (tanf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanf, float, (float x)); _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@ _GL_FUNCDECL_SYS (tanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (tanl, long double, (long double x)); _GL_CXXALIASWARN (tanl); #elif defined GNULIB_POSIXCHECK # undef tanl # if HAVE_RAW_DECL_TANL _GL_WARN_ON_USE (tanl, "tanl is unportable - " "use gnulib module mathl for portability"); # endif #endif #if @GNULIB_TANHF@ # if !@HAVE_TANHF@ # undef tanhf _GL_FUNCDECL_SYS (tanhf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanhf, float, (float x)); _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) # 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) # 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 _GL_CXXALIASWARN (trunc); #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 /* 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 # ifdef isfinite _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) # undef isfinite _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite) # 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 # ifdef isinf _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) # undef isinf _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf) # 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 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanf # define isnanf(x) __builtin_isnanf ((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 /* GCC 4.0 and newer provides three built-ins 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 /* GCC 4.0 and newer provides three built-ins for isnan. */ # undef isnanl # define isnanl(x) __builtin_isnanl ((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 # define gl_isnan_f(x) __builtin_isnanf ((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 # 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 # define gl_isnan_l(x) __builtin_isnanl ((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 # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \ sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \ __builtin_isnanf ((float)(x))) # endif # ifdef __cplusplus # ifdef isnan _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) # undef isnan _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan) # 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_GCC@ # undef signbit /* GCC 4.0 and newer provides 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@ # 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 __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)) # endif # ifdef __cplusplus # ifdef signbit _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) # undef signbit _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit) # 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 #endif /* _@GUARD_PREFIX@_MATH_H */ #endif /* _@GUARD_PREFIX@_MATH_H */ ����������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mbchar.c�����������������������������������������������������������������0000664�0000000�0000000�00000002267�11671051007�0016647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001, 2006, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #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-20111211-stable/lib/mbchar.h�����������������������������������������������������������������0000664�0000000�0000000�00000033125�11671051007�0016651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multibyte character data type. Copyright (C) 2001, 2005-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 <http://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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stdio.h> #include <time.h> #include <wchar.h> #include <wctype.h> #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 static 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. */ static 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[]; static inline bool is_basic (char c) { return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31)) & 1; } #else static 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 #endif /* _MBCHAR_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mbfile.h�����������������������������������������������������������������0000664�0000000�0000000�00000016327�11671051007�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multibyte character I/O: macros for multi-byte encodings. Copyright (C) 2001, 2005, 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 <http://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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stdio.h> #include <time.h> #include <wchar.h> #include "mbchar.h" 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; }; static 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; } static 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) #endif /* _MBFILE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mbiter.h�����������������������������������������������������������������0000664�0000000�0000000�00000016452�11671051007�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterating through multibyte strings: macros for multi-byte encodings. Copyright (C) 2001, 2005, 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 <http://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 chracters available before the end of string is reached. In this case, mbi_cur (iter) is initialized to the next multibyte chracter. 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stdio.h> #include <time.h> #include <wchar.h> #include "mbchar.h" 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 */ }; static 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; } static inline void mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff) { iter->cur.ptr += ptrdiff; iter->limit += ptrdiff; } static 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 #endif /* _MBITER_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mbmemcasecmp.c�����������������������������������������������������������0000664�0000000�0000000�00000005511�11671051007�0020037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two memory areas with possibly different lengths, case-insensitive. Copyright (C) 1998-1999, 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009, based on earlier glibc code. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 (n1 < n2 ? -1 : n1 > n2 ? 1 : 0); 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 (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } ++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-20111211-stable/lib/mbmemcasecmp.h�����������������������������������������������������������0000664�0000000�0000000�00000003274�11671051007�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two memory areas with possibly different lengths, case-insensitive. Copyright (C) 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/mbmemcasecoll.c����������������������������������������������������������0000664�0000000�0000000�00000011176�11671051007�0020215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific case-ignoring memory comparison. Copyright (C) 2001, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/mbmemcasecoll.h����������������������������������������������������������0000664�0000000�0000000�00000004116�11671051007�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific case-ignoring memory comparison. Copyright (C) 2001, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/mbrlen.c�����������������������������������������������������������������0000664�0000000�0000000�00000002017�11671051007�0016663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Recognize multibyte character. Copyright (C) 1999-2000, 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/mbrtowc.c����������������������������������������������������������������0000664�0000000�0000000�00000024663�11671051007�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* Implement mbrtowc() on top of mbtowc(). */ # include <errno.h> # include <stdlib.h> # include "localcharset.h" # include "streq.h" # include "verify.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) { 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; 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. */ # if __GLIBC__ || defined __UCLIBC__ /* Work around bug <http://sourceware.org/bugzilla/show_bug.cgi?id=9674> */ mbtowc (NULL, NULL, 0); # endif { int res = mbtowc (pwc, p, m); if (res >= 0) { if (pwc != NULL && ((*pwc == 0) != (res == 0))) abort (); if (nstate >= (res > 0 ? res : 1)) abort (); res -= nstate; pstate[0] = 0; return res; } /* 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. Use specialized code for each. */ if (m >= 4 || m >= MB_CUR_MAX) goto invalid; /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ { const char *encoding = locale_charset (); if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) { /* Cf. unistr/u8-mblen.c. */ unsigned char c = (unsigned char) p[0]; if (c >= 0xc2) { if (c < 0xe0) { if (m == 1) goto incomplete; } else if (c < 0xf0) { if (m == 1) goto incomplete; if (m == 2) { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xe1 || c2 >= 0xa0) && (c != 0xed || c2 < 0xa0)) goto incomplete; } } else if (c <= 0xf4) { if (m == 1) goto incomplete; else /* m == 2 || m == 3 */ { 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 /* m == 3 */ { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) goto incomplete; } } } } } goto invalid; } /* As a reference for this code, you can use the GNU libiconv implementation. Look for uses of the RET_TOOFEW macro. */ if (STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) { 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; } if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) { if (m == 1) { unsigned char c = (unsigned char) p[0]; if (c >= 0xa1 && c < 0xff) goto incomplete; } goto invalid; } if (STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) { 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; } if (STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) { 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; } if (STREQ (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) { 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; } /* An unknown multibyte encoding. */ goto incomplete; } 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 /* Override the system's mbrtowc() function. */ # undef mbrtowc size_t rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { # if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG if (s == NULL) { pwc = NULL; s = ""; n = 1; } # endif # 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--) { wchar_t wc; size_t 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. */ if (pwc != NULL) *pwc = wc; return (wc == 0 ? 0 : count); } } return (size_t)(-2); } } # endif # if MBRTOWC_NUL_RETVAL_BUG { wchar_t wc; size_t ret = mbrtowc (&wc, s, n, ps); if (ret != (size_t)(-1) && ret != (size_t)(-2)) { if (pwc != NULL) *pwc = wc; if (wc == 0) ret = 0; } return ret; } # else { # if MBRTOWC_NULL_ARG1_BUG wchar_t dummy; if (pwc == NULL) pwc = &dummy; # endif return mbrtowc (pwc, s, n, ps); } # endif } #endif �����������������������������������������������������������������������������gnulib-20111211-stable/lib/mbscasecmp.c�������������������������������������������������������������0000664�0000000�0000000�00000005504�11671051007�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005, based on earlier glibc code. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mbscasestr.c�������������������������������������������������������������0000664�0000000�0000000�00000035522�11671051007�0017561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive searching in a string. Copyright (C) 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 "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 http://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-20111211-stable/lib/mbschr.c�����������������������������������������������������������������0000664�0000000�0000000�00000003363�11671051007�0016667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character. Copyright (C) 2007-2011 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 <http://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-20111211-stable/lib/mbscspn.c����������������������������������������������������������������0000664�0000000�0000000�00000004242�11671051007�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character among a given set of characters. Copyright (C) 1999, 2002, 2006-2011 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 <http://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-20111211-stable/lib/mbsinit.c����������������������������������������������������������������0000664�0000000�0000000�00000003703�11671051007�0017054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for initial conversion state. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "verify.h" #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Windows, 'mbstate_t' is defined as 'int'. */ int mbsinit (const mbstate_t *ps) { return ps == NULL || *ps == 0; } #else /* 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. - 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; } #endif �������������������������������������������������������������gnulib-20111211-stable/lib/mbslen.c�����������������������������������������������������������������0000664�0000000�0000000�00000002405�11671051007�0016665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Counting the multibyte characters in a string. Copyright (C) 2007-2011 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 <http://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-20111211-stable/lib/mbsncasecmp.c������������������������������������������������������������0000664�0000000�0000000�00000006113�11671051007�0017700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005, based on earlier glibc code. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mbsnlen.c����������������������������������������������������������������0000664�0000000�0000000�00000002460�11671051007�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Counting the multibyte characters in a string. Copyright (C) 2007-2011 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 <http://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-20111211-stable/lib/mbsnrtowcs-impl.h��������������������������������������������������������0000664�0000000�0000000�00000007552�11671051007�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ size_t mbsnrtowcs (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &_gl_mbsrtowcs_state; { const char *src = *srcp; if (dest != NULL) { wchar_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-20111211-stable/lib/mbsnrtowcs.c�������������������������������������������������������������0000664�0000000�0000000�00000002003�11671051007�0017600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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; #include "mbsnrtowcs-impl.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mbspbrk.c����������������������������������������������������������������0000664�0000000�0000000�00000004002�11671051007�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character among a given set of characters. Copyright (C) 1999, 2002, 2006-2011 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 <http://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-20111211-stable/lib/mbspcasecmp.c������������������������������������������������������������0000664�0000000�0000000�00000005756�11671051007�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2008, 2010-2011 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 <http://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-20111211-stable/lib/mbsrchr.c����������������������������������������������������������������0000664�0000000�0000000�00000003351�11671051007�0017046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for the last occurrence of a character. Copyright (C) 2007-2011 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 <http://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-20111211-stable/lib/mbsrtowcs-impl.h���������������������������������������������������������0000664�0000000�0000000�00000007133�11671051007�0020377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ size_t mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &_gl_mbsrtowcs_state; { const char *src = *srcp; if (dest != NULL) { wchar_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-20111211-stable/lib/mbsrtowcs-state.c��������������������������������������������������������0000664�0000000�0000000�00000003123�11671051007�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 MacOS X 10.3, see <http://lists.gnu.org/archive/html/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-20111211-stable/lib/mbsrtowcs.c��������������������������������������������������������������0000664�0000000�0000000�00000001756�11671051007�0017440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string to wide string. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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; #include "mbsrtowcs-impl.h" ������������������gnulib-20111211-stable/lib/mbssep.c�����������������������������������������������������������������0000664�0000000�0000000�00000003136�11671051007�0016700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenizing a string. Copyright (C) 2007-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.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-20111211-stable/lib/mbsspn.c�����������������������������������������������������������������0000664�0000000�0000000�00000005275�11671051007�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character outside a given set of characters. Copyright (C) 1999, 2002, 2006-2011 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 <http://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-20111211-stable/lib/mbsstr.c�����������������������������������������������������������������0000664�0000000�0000000�00000033622�11671051007�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 "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 http://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)); } /* 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-20111211-stable/lib/mbstok_r.c���������������������������������������������������������������0000664�0000000�0000000�00000003406�11671051007�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenizing a string. Copyright (C) 1999, 2002, 2006-2011 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 <http://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-20111211-stable/lib/mbswidth.c���������������������������������������������������������������0000664�0000000�0000000�00000014250�11671051007�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the number of screen columns needed for a string. Copyright (C) 2000-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 <http://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-20111211-stable/lib/mbswidth.h���������������������������������������������������������������0000664�0000000�0000000�00000004176�11671051007�0017242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the number of screen columns needed for a string. Copyright (C) 2000-2004, 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 <http://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. However, we don't want to #include <wchar.h> on all platforms because - Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. - BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before <wchar.h>. */ #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-20111211-stable/lib/mbtowc-impl.h������������������������������������������������������������0000664�0000000�0000000�00000002621�11671051007�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/mbtowc.c�����������������������������������������������������������������0000664�0000000�0000000�00000001641�11671051007�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <wchar.h> #include "mbtowc-impl.h" �����������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mbuiter.h����������������������������������������������������������������0000664�0000000�0000000�00000017215�11671051007�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterating through multibyte strings: macros for multi-byte encodings. Copyright (C) 2001, 2005, 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 <http://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 chracters available before the end of string is reached. In this case, mbui_cur (iter) is initialized to the next multibyte chracter. 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stdio.h> #include <time.h> #include <wchar.h> #include "mbchar.h" #include "strnlen1.h" 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 */ }; static 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; } static inline void mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff) { iter->cur.ptr += ptrdiff; } static 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 #endif /* _MBUITER_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/md2.c��������������������������������������������������������������������0000664�0000000�0000000�00000017176�11671051007�0016102�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-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/md2.h��������������������������������������������������������������������0000664�0000000�0000000�00000006047�11671051007�0016102�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-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 *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 *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 *resblock); # ifdef __cplusplus } # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/md4.c��������������������������������������������������������������������0000664�0000000�0000000�00000025376�11671051007�0016105�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-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 #ifdef WORDS_BIGENDIAN # define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #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 inline 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 # 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; /* 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] += len; if (ctx->total[0] < len) ++ctx->total[1]; /* 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-20111211-stable/lib/md4.h��������������������������������������������������������������������0000664�0000000�0000000�00000006141�11671051007�0016077�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-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 *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 *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 *resblock); # ifdef __cplusplus } # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/md5.c��������������������������������������������������������������������0000664�0000000�0000000�00000035634�11671051007�0016104�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-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */ #include <config.h> #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 #ifdef WORDS_BIGENDIAN # define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #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 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 inline 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); } /* 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) { struct md5_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ md5_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 */ 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; } /* 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. */ 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 # 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; 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; /* 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] += len; if (ctx->total[0] < len) ++ctx->total[1]; /* 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; } ����������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/md5.h��������������������������������������������������������������������0000664�0000000�0000000�00000010173�11671051007�0016100�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-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _MD5_H #define _MD5_H 1 #include <stdio.h> #include <stdint.h> #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) # 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 /* 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; uint32_t buffer[32]; }; /* * 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 *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 *resbuf) __THROW; /* Compute MD5 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ extern int __md5_stream (FILE *stream, void *resblock) __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 *resblock) __THROW; # ifdef __cplusplus } # endif #endif /* md5.h */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/memcasecmp.c�������������������������������������������������������������0000664�0000000�0000000�00000002675�11671051007�0017530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive buffer comparator. Copyright (C) 1996-1997, 2000, 2003, 2006, 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 <http://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 : U1 < U2 ? -1 : U2 < U1); if (diff) return diff; } return 0; } �������������������������������������������������������������������gnulib-20111211-stable/lib/memcasecmp.h�������������������������������������������������������������0000664�0000000�0000000�00000001602�11671051007�0017522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive buffer comparator. Copyright (C) 1996, 1998, 2003, 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 <http://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-20111211-stable/lib/memchr.c�����������������������������������������������������������������0000664�0000000�0000000�00000013346�11671051007�0016666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2011 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 program is free software: you can redistribute it and/or modify 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 <http://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-20111211-stable/lib/memchr.valgrind����������������������������������������������������������0000664�0000000�0000000�00000000652�11671051007�0020246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in memchr(). # 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-20111211-stable/lib/memchr2.c����������������������������������������������������������������0000664�0000000�0000000�00000014411�11671051007�0016742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2011 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 program is free software: you can redistribute it and/or modify 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 <http://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; 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 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 == c1 || *char_ptr == c2) 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_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. Similary, 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-20111211-stable/lib/memchr2.h����������������������������������������������������������������0000664�0000000�0000000�00000002113�11671051007�0016743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Scan memory for the first of two bytes. Copyright (C) 2008-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 <http://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-20111211-stable/lib/memchr2.valgrind���������������������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0020327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in memchr2(). # 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-20111211-stable/lib/memcmp.c�����������������������������������������������������������������0000664�0000000�0000000�00000021364�11671051007�0016670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1995, 1997-1998, 2003, 2006, 2009-2011 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 program is free software: you can redistribute it and/or modify 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 <http://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include <string.h> #include <stdint.h> #undef memcmp #ifdef _LIBC # 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-20111211-stable/lib/memcmp2.c����������������������������������������������������������������0000664�0000000�0000000�00000002132�11671051007�0016742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two memory areas with possibly different lengths. Copyright (C) 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) { if (n1 < n2) cmp = -1; else if (n1 > n2) cmp = 1; } return cmp; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/memcmp2.h����������������������������������������������������������������0000664�0000000�0000000�00000002445�11671051007�0016756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two memory areas with possibly different lengths. Copyright (C) 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/memcoll.c����������������������������������������������������������������0000664�0000000�0000000�00000006427�11671051007�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific memory comparison. Copyright (C) 1999, 2002-2004, 2006, 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 <http://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 inline 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-20111211-stable/lib/memcoll.h����������������������������������������������������������������0000664�0000000�0000000�00000001760�11671051007�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific memory comparison. Copyright (C) 1999, 2003, 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 <http://www.gnu.org/licenses/>. */ /* Contributed by Paul Eggert <eggert@twinsun.com>. */ #ifndef MEMCOLL_H_ # define MEMCOLL_H_ 1 # include <stddef.h> int memcoll (char *, size_t, char *, size_t); int memcoll0 (char const *, size_t, char const *, size_t); #endif /* MEMCOLL_H_ */ ����������������gnulib-20111211-stable/lib/memcpy.c�����������������������������������������������������������������0000664�0000000�0000000�00000002216�11671051007�0016677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995, 1997, 2000, 2003, 2006, 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 <http://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-20111211-stable/lib/memmem.c�����������������������������������������������������������������0000664�0000000�0000000�00000005455�11671051007�0016672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This particular implementation was written by Eric Blake, 2008. */ #ifndef _LIBC # include <config.h> #endif /* Specification of memmem. */ #include <string.h> #ifndef _LIBC # define __builtin_expect(expr, val) (expr) #endif #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-20111211-stable/lib/memmove.c����������������������������������������������������������������0000664�0000000�0000000�00000001250�11671051007�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memmove.c -- copy memory. Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate. In the public domain. By David MacKenzie <djm@gnu.ai.mit.edu>. */ #include <config.h> #include <stddef.h> 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-20111211-stable/lib/mempcpy.c����������������������������������������������������������������0000664�0000000�0000000�00000002113�11671051007�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy memory area and return pointer after last written byte. Copyright (C) 2003, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include <string.h> /* 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; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/memrchr.c����������������������������������������������������������������0000664�0000000�0000000�00000013101�11671051007�0017035�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-2011 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 program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 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) { 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-20111211-stable/lib/memset.c�����������������������������������������������������������������0000664�0000000�0000000�00000001745�11671051007�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memset.c -- set an area of memory to a given value Copyright (C) 1991, 2003, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/memxor.c�����������������������������������������������������������������0000664�0000000�0000000�00000002217�11671051007�0016715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memxor.c -- perform binary exclusive OR operation of two memory blocks. Copyright (C) 2005-2006, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/memxor.h�����������������������������������������������������������������0000664�0000000�0000000�00000002330�11671051007�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memxor.h -- perform binary exclusive OR operation on memory blocks. Copyright (C) 2005, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mgetgroups.c�������������������������������������������������������������0000664�0000000�0000000�00000013774�11671051007�0017614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mgetgroups.c -- return a list of the groups a user or current process is in 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 <http://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" 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) { int saved_errno = errno; free (g); errno = saved_errno; 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 (!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. */ int saved_errno = errno; free (g); errno = saved_errno; 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-20111211-stable/lib/mgetgroups.h�������������������������������������������������������������0000664�0000000�0000000�00000001705�11671051007�0017610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get a list of all group IDs associated with a specified user ID. 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 <http://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-20111211-stable/lib/minmax.h�����������������������������������������������������������������0000664�0000000�0000000�00000004601�11671051007�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MIN, MAX macros. Copyright (C) 1995, 1998, 2001, 2003, 2005, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/mkancesdirs.c������������������������������������������������������������0000664�0000000�0000000�00000012453�11671051007�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Make a file's ancestor directories. Copyright (C) 2006, 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 <http://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 "dirname.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 and the resulting directory is readable, 1 if successful but the resulting directory might not be readable, -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 switch (make_dir (file, component, make_dir_arg)) { case -1: make_dir_errno = errno; break; case 0: savewd_chdir_options |= SAVEWD_CHDIR_READABLE; /* Fall through. */ case 1: made_dir = true; break; } 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-20111211-stable/lib/mkancesdirs.h������������������������������������������������������������0000664�0000000�0000000�00000000241�11671051007�0017711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stddef.h> struct savewd; ptrdiff_t mkancesdirs (char *, struct savewd *, int (*) (char const *, char const *, void *), void *); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mkdir-p.c����������������������������������������������������������������0000664�0000000�0000000�00000017043�11671051007�0016754�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-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 <http://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 with using mkdir with permissions MODE. 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. MODE should be a subset of MODE_BITS, which in turn should be a subset of CHMOD_MODE_BITS. Changing the mode in this way is necessary if DIR already existed or if MODE and MODE_BITS specify non-permissions bits like S_ISUID. However, if PRESERVE_EXISTING is true and DIR already exists, do not attempt to set DIR's ownership and file mode bits. This implementation assumes the current umask is zero. 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 writeable 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) { announce (dir, options); preserve_existing = keep_owner & keep_special_mode_bits; savewd_chdir_options |= (SAVEWD_CHDIR_NOFOLLOW | (mode & S_IRUSR ? SAVEWD_CHDIR_READABLE : 0)); } else { mkdir_errno = errno; mkdir_mode = -1; } if (preserve_existing) { struct stat st; if (mkdir_errno == 0 || (mkdir_errno != ENOENT && make_ancestor && stat (dir + prefix_len, &st) == 0 && S_ISDIR (st.st_mode))) return true; } 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); int chdir_errno = errno; int fd = open_result[0]; bool chdir_failed_unexpectedly = (mkdir_errno == 0 && ((! chdir_ok && (mode & S_IXUSR)) || (fd < 0 && (mode & S_IRUSR)))); if (chdir_failed_unexpectedly) { /* No need to save errno here; it's irrelevant. */ if (0 <= fd) close (fd); } else { char const *subdir = (chdir_ok ? "." : dir + prefix_len); if (dirchownmod (fd, subdir, mkdir_mode, owner, group, mode, mode_bits) == 0) return true; } if (mkdir_errno == 0 || (mkdir_errno != ENOENT && make_ancestor && errno != ENOTDIR)) { error (0, (! chdir_failed_unexpectedly ? errno : ! chdir_ok && (mode & S_IXUSR) ? chdir_errno : open_result[1]), _(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-20111211-stable/lib/mkdir-p.h����������������������������������������������������������������0000664�0000000�0000000�00000002626�11671051007�0016762�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-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 <http://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-20111211-stable/lib/mkdir.c������������������������������������������������������������������0000664�0000000�0000000�00000005216�11671051007�0016516�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-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 <http://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 __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, mode_t mode maybe_unused) { 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 = 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-20111211-stable/lib/mkdirat.c����������������������������������������������������������������0000664�0000000�0000000�00000002505�11671051007�0017041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fd-relative mkdir Copyright (C) 2005-2006, 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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.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-20111211-stable/lib/mkdtemp.c����������������������������������������������������������������0000664�0000000�0000000�00000002454�11671051007�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1999, 2001-2003, 2006-2007, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/mkfifo.c�����������������������������������������������������������������0000664�0000000�0000000�00000002702�11671051007�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a named fifo. Copyright (C) 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 <http://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 (char const *name _GL_UNUSED, mode_t mode _GL_UNUSED) { 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 = EEXIST; return -1; } # endif return mkfifo (name, mode); } #endif /* HAVE_MKFIFO */ ��������������������������������������������������������������gnulib-20111211-stable/lib/mkfifoat.c���������������������������������������������������������������0000664�0000000�0000000�00000003274�11671051007�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a named fifo relative to an open directory. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #include <sys/stat.h> #if !HAVE_MKFIFO # include <errno.h> /* Mingw lacks mkfifo, so this wrapper is trivial. */ int mkfifoat (int fd _GL_UNUSED, char const *path _GL_UNUSED, mode_t mode _GL_UNUSED) { 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 */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mknod.c������������������������������������������������������������������0000664�0000000�0000000�00000004132�11671051007�0016514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a device inode. Copyright (C) 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 <http://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 (char const *name _GL_UNUSED, mode_t mode _GL_UNUSED, dev_t dev _GL_UNUSED) { 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 = 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-20111211-stable/lib/mknodat.c����������������������������������������������������������������0000664�0000000�0000000�00000003542�11671051007�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create an inode relative to an open directory. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #include <sys/stat.h> #if !HAVE_MKNOD # include <errno.h> /* Mingw lacks mknod, so this wrapper is trivial. */ int mknodat (int fd _GL_UNUSED, char const *path _GL_UNUSED, mode_t mode _GL_UNUSED, dev_t dev _GL_UNUSED) { errno = ENOSYS; return -1; } #else /* HAVE_MKFIFO */ /* 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 /* HAVE_MKFIFO */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mkostemp.c���������������������������������������������������������������0000664�0000000�0000000�00000002552�11671051007�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2011 Free Software Foundation, Inc. This file is derived from the one in 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/mkostemps.c��������������������������������������������������������������0000664�0000000�0000000�00000003056�11671051007�0017432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2011 Free Software Foundation, Inc. This file is derived from the one in 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/mkstemp-safer.c����������������������������������������������������������0000664�0000000�0000000�00000003323�11671051007�0020163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke mkstemp, but avoid some glitches. Copyright (C) 2005-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 <http://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-20111211-stable/lib/mkstemp.c����������������������������������������������������������������0000664�0000000�0000000�00000003005�11671051007�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2011 Free Software Foundation, Inc. This file is derived from the one in 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/mkstemps.c���������������������������������������������������������������0000664�0000000�0000000�00000003036�11671051007�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2011 Free Software Foundation, Inc. This file is derived from the one in 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/mktime-internal.h��������������������������������������������������������0000664�0000000�0000000�00000000241�11671051007�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <time.h> time_t mktime_internal (struct tm *, struct tm * (*) (time_t const *, struct tm *), time_t *); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mktime.c�����������������������������������������������������������������0000664�0000000�0000000�00000060344�11671051007�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a `struct tm' to a time_t value. Copyright (C) 1993-1999, 2002-2007, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@twinsun.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ /* Define this to have a standalone program to test this implementation of mktime. */ /* #define DEBUG 1 */ #ifndef _LIBC # include <config.h> #endif /* Some of the code in this file assumes that signed integer overflow silently wraps around. This assumption can't easily be programmed around, nor can it be checked for portably at compile-time or easily eliminated at run-time. Define WRAPV to 1 if the assumption is valid. Otherwise, define it to 0; this forces the use of slower code that, while not guaranteed by the C Standard, works on all production platforms that we know about. */ #ifndef WRAPV # if (__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC optimize ("wrapv") # define WRAPV 1 # else # define WRAPV 0 # endif #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 <limits.h> #include <string.h> /* For the real memcpy prototype. */ #if DEBUG # include <stdio.h> # include <stdlib.h> /* Make it work even if the system's libc has its own mktime routine. */ # undef mktime # define mktime my_mktime #endif /* DEBUG */ /* Verify a requirement at compile-time (unlike assert, which is runtime). */ #define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; } /* A signed type that is at least one bit wider than int. */ #if INT_MAX <= LONG_MAX / 2 typedef long int long_int; #else typedef long long int long_int; #endif verify (long_int_is_wide_enough, INT_MAX == INT_MAX * (long_int) 2 / 2); /* 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 \ && (long_int) -1 >> 1 == -1 \ && ((time_t) -1 >> 1 == -1 || ! TYPE_SIGNED (time_t))) \ ? (a) >> (b) \ : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) /* 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 negative values of the signed integer type T use two's complement, or if T is an unsigned integer type. */ #define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) /* True if the arithmetic type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* The maximum and minimum values for the integer type T. These macros have undefined behavior if T is signed and has padding bits. If this is a problem for you, please let us know how to fix it for your host. */ #define TYPE_MINIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) 0 \ : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) #ifndef TIME_T_MIN # define TIME_T_MIN TYPE_MINIMUM (time_t) #endif #ifndef TIME_T_MAX # define TIME_T_MAX TYPE_MAXIMUM (time_t) #endif #define TIME_T_MIDPOINT (SHR (TIME_T_MIN + TIME_T_MAX, 1) + 1) verify (time_t_is_integer, TYPE_IS_INTEGER (time_t)); verify (twos_complement_arithmetic, (TYPE_TWOS_COMPLEMENT (int) && TYPE_TWOS_COMPLEMENT (long_int) && TYPE_TWOS_COMPLEMENT (time_t))); #define EPOCH_YEAR 1970 #define TM_YEAR_BASE 1900 verify (base_year_is_a_multiple_of_100, TM_YEAR_BASE % 100 == 0); /* Return 1 if YEAR + TM_YEAR_BASE is a leap year. */ static inline int 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 } }; #ifndef _LIBC /* 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. See the gnulib time_r module for one way to implement this. */ # undef __localtime_r # define __localtime_r localtime_r # define __mktime_internal mktime_internal # include "mktime-internal.h" #endif /* Return 1 if 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 int 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 time stamps. The YEAR values uses the same numbering as TP->tm_year. Values need not be in the usual range. However, YEAR1 must not be less than 2 * INT_MIN or greater than 2 * INT_MAX. The result may overflow. It is the caller's responsibility to detect overflow. */ static inline time_t 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 (C99_integer_division, -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 / 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); /* Compute the desired time in time_t precision. Overflow might occur here. */ time_t tyear1 = year1; time_t years = tyear1 - year0; time_t days = 365 * years + yday1 - yday0 + intervening_leap_days; time_t hours = 24 * days + hour1 - hour0; time_t minutes = 60 * hours + min1 - min0; time_t seconds = 60 * minutes + sec1 - sec0; return seconds; } /* Return the average of A and B, even if A + B would overflow. */ static time_t time_t_avg (time_t a, time_t b) { return SHR (a, 1) + SHR (b, 1) + (a & b & 1); } /* Return 1 if A + B does not overflow. If time_t is unsigned and if B's top bit is set, assume that the sum represents A - -B, and return 1 if the subtraction does not wrap around. */ static int time_t_add_ok (time_t a, time_t b) { if (! TYPE_SIGNED (time_t)) { time_t sum = a + b; return (sum < a) == (TIME_T_MIDPOINT <= b); } else if (WRAPV) { time_t sum = a + b; return (sum < a) == (b < 0); } else { time_t avg = time_t_avg (a, b); return TIME_T_MIN / 2 <= avg && avg <= TIME_T_MAX / 2; } } /* Return 1 if A + B does not overflow. */ static int time_t_int_add_ok (time_t a, int b) { verify (int_no_wider_than_time_t, INT_MAX <= TIME_T_MAX); if (WRAPV) { time_t sum = a + b; return (sum < a) == (b < 0); } else { int a_odd = a & 1; time_t avg = SHR (a, 1) + (SHR (b, 1) + (a_odd & b)); return TIME_T_MIN / 2 <= avg && avg <= TIME_T_MAX / 2; } } /* Return a time_t value corresponding to (YEAR-YDAY HOUR:MIN:SEC), assuming that *T corresponds to *TP and that no clock adjustments occurred between *TP and the desired time. If TP is null, return a value not equal to *T; this avoids false matches. If overflow occurs, yield the minimal or maximal value, except do not yield a value equal to *T. */ static time_t guess_time_tm (long_int year, long_int yday, int hour, int min, int sec, const time_t *t, const struct tm *tp) { if (tp) { time_t d = ydhms_diff (year, yday, hour, min, sec, tp->tm_year, tp->tm_yday, tp->tm_hour, tp->tm_min, tp->tm_sec); if (time_t_add_ok (*t, d)) return *t + d; } /* Overflow occurred one way or another. Return the nearest result that is actually in range, except don't report a zero difference if the actual difference is nonzero, as that would cause a false match; and don't oscillate between two values, as that would confuse the spring-forward gap detector. */ return (*t < TIME_T_MIDPOINT ? (*t <= TIME_T_MIN + 1 ? *t + 1 : TIME_T_MIN) : (TIME_T_MAX - 1 <= *t ? *t - 1 : TIME_T_MAX)); } /* 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. */ static struct tm * ranged_convert (struct tm *(*convert) (const time_t *, struct tm *), time_t *t, struct tm *tp) { struct tm *r = convert (t, tp); if (!r && *t) { time_t bad = *t; time_t ok = 0; /* BAD is a known unconvertible time_t, and OK is a known good one. Use binary search to narrow the range between BAD and OK until they differ by 1. */ while (bad != ok + (bad < 0 ? -1 : 1)) { time_t mid = *t = time_t_avg (ok, bad); r = convert (t, tp); if (r) ok = mid; else bad = mid; } if (!r && ok) { /* The last conversion attempt failed; revert to the most recent successful attempt. */ *t = ok; r = convert (t, tp); } } return r; } /* Convert *TP to a time_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. This function is external because it is used also by timegm.c. */ time_t __mktime_internal (struct tm *tp, struct tm *(*convert) (const time_t *, struct tm *), time_t *offset) { time_t t, gt, t0, t1, t2; 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; /* 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 minor overflows correctly, assuming int and time_t arithmetic wraps around. Major overflows are caught at the end. */ /* 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; time_t guessed_offset = *offset; int sec_requested = sec; if (LEAP_SECONDS_POSSIBLE) { /* Handle out-of-range seconds specially, since ydhms_tm_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. */ t0 = ydhms_diff (year, yday, hour, min, sec, EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, - guessed_offset); if (TIME_T_MAX / INT_MAX / 366 / 24 / 60 / 60 < 3) { /* time_t isn't large enough to rule out overflows, so check for major overflows. A gross check suffices, since if t0 has overflowed, it is off by a multiple of TIME_T_MAX - TIME_T_MIN + 1. So ignore any component of the difference that is bounded by a small value. */ /* Approximate log base 2 of the number of time units per biennium. A biennium is 2 years; use this unit instead of years to avoid integer overflow. For example, 2 average Gregorian years are 2 * 365.2425 * 24 * 60 * 60 seconds, which is 63113904 seconds, and rint (log2 (63113904)) is 26. */ int ALOG2_SECONDS_PER_BIENNIUM = 26; int ALOG2_MINUTES_PER_BIENNIUM = 20; int ALOG2_HOURS_PER_BIENNIUM = 14; int ALOG2_DAYS_PER_BIENNIUM = 10; int LOG2_YEARS_PER_BIENNIUM = 1; int approx_requested_biennia = (SHR (year_requested, LOG2_YEARS_PER_BIENNIUM) - SHR (EPOCH_YEAR - TM_YEAR_BASE, LOG2_YEARS_PER_BIENNIUM) + SHR (mday, ALOG2_DAYS_PER_BIENNIUM) + SHR (hour, ALOG2_HOURS_PER_BIENNIUM) + SHR (min, ALOG2_MINUTES_PER_BIENNIUM) + (LEAP_SECONDS_POSSIBLE ? 0 : SHR (sec, ALOG2_SECONDS_PER_BIENNIUM))); int approx_biennia = SHR (t0, ALOG2_SECONDS_PER_BIENNIUM); int diff = approx_biennia - approx_requested_biennia; int abs_diff = diff < 0 ? -1 - diff : diff; /* IRIX 4.0.5 cc miscalculates TIME_T_MIN / 3: it erroneously gives a positive value of 715827882. Setting a variable first then doing math on it seems to work. (ghazi@caip.rutgers.edu) */ time_t time_t_max = TIME_T_MAX; time_t time_t_min = TIME_T_MIN; time_t overflow_threshold = (time_t_max / 3 - time_t_min / 3) >> ALOG2_SECONDS_PER_BIENNIUM; if (overflow_threshold < abs_diff) { /* Overflow occurred. Try repairing it; this might work if the time zone offset is enough to undo the overflow. */ time_t repaired_t0 = -1 - t0; approx_biennia = SHR (repaired_t0, ALOG2_SECONDS_PER_BIENNIUM); diff = approx_biennia - approx_requested_biennia; abs_diff = diff < 0 ? -1 - diff : diff; if (overflow_threshold < abs_diff) return -1; guessed_offset += repaired_t0 - t0; t0 = repaired_t0; } } /* Repeatedly use the error to improve the guess. */ for (t = t1 = t2 = t0, dst2 = 0; (gt = guess_time_tm (year, yday, hour, min, sec, &t, ranged_convert (convert, &t, &tm)), t != gt); t1 = t2, t2 = t, t = gt, dst2 = tm.tm_isdst != 0) 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 GT - T. Follow the common practice in this case, which is to return a time that is GT - T 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; else if (--remaining_probes == 0) return -1; /* 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) if (time_t_int_add_ok (t, delta * direction)) { time_t ot = t + delta * direction; struct tm otm; ranged_convert (convert, &ot, &otm); if (! isdst_differ (isdst, otm.tm_isdst)) { /* We found the desired tm_isdst. Extrapolate back to the desired time. */ t = guess_time_tm (year, yday, hour, min, sec, &ot, &otm); ranged_convert (convert, &t, &tm); goto offset_found; } } } offset_found: *offset = guessed_offset + t - t0; 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. */ int sec_adjustment = (sec == 0 && tm.tm_sec == 60) - sec; if (! time_t_int_add_ok (t, sec_requested)) return -1; t1 = t + sec_requested; if (! time_t_int_add_ok (t1, sec_adjustment)) return -1; t2 = t1 + sec_adjustment; if (! convert (&t2, &tm)) return -1; t = t2; } *tp = tm; return t; } /* FIXME: This should use a signed type wide enough to hold any UTC offset in seconds. 'int' should be good enough for GNU code. We can't fix this unilaterally though, as other modules invoke __mktime_internal. */ static time_t localtime_offset; /* Convert *TP to a time_t value. */ time_t mktime (struct tm *tp) { #ifdef _LIBC /* 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 (); #endif return __mktime_internal (tp, __localtime_r, &localtime_offset); } #ifdef weak_alias weak_alias (mktime, timelocal) #endif #ifdef _LIBC libc_hidden_def (mktime) libc_hidden_weak (timelocal) #endif #if DEBUG static int not_equal_tm (const struct tm *a, const struct tm *b) { return ((a->tm_sec ^ b->tm_sec) | (a->tm_min ^ b->tm_min) | (a->tm_hour ^ b->tm_hour) | (a->tm_mday ^ b->tm_mday) | (a->tm_mon ^ b->tm_mon) | (a->tm_year ^ b->tm_year) | (a->tm_yday ^ b->tm_yday) | isdst_differ (a->tm_isdst, b->tm_isdst)); } static void print_tm (const struct tm *tp) { if (tp) printf ("%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d", tp->tm_year + TM_YEAR_BASE, tp->tm_mon + 1, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec, tp->tm_yday, tp->tm_wday, tp->tm_isdst); else printf ("0"); } static int check_result (time_t tk, struct tm tmk, time_t tl, const struct tm *lt) { if (tk != tl || !lt || not_equal_tm (&tmk, lt)) { printf ("mktime ("); print_tm (lt); printf (")\nyields ("); print_tm (&tmk); printf (") == %ld, should be %ld\n", (long int) tk, (long int) tl); return 1; } return 0; } int main (int argc, char **argv) { int status = 0; struct tm tm, tmk, tml; struct tm *lt; time_t tk, tl, tl1; char trailer; if ((argc == 3 || argc == 4) && (sscanf (argv[1], "%d-%d-%d%c", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer) == 3) && (sscanf (argv[2], "%d:%d:%d%c", &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &trailer) == 3)) { tm.tm_year -= TM_YEAR_BASE; tm.tm_mon--; tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]); tmk = tm; tl = mktime (&tmk); lt = localtime (&tl); if (lt) { tml = *lt; lt = &tml; } printf ("mktime returns %ld == ", (long int) tl); print_tm (&tmk); printf ("\n"); status = check_result (tl, tmk, tl, lt); } else if (argc == 4 || (argc == 5 && strcmp (argv[4], "-") == 0)) { time_t from = atol (argv[1]); time_t by = atol (argv[2]); time_t to = atol (argv[3]); if (argc == 4) for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1) { lt = localtime (&tl); if (lt) { tmk = tml = *lt; tk = mktime (&tmk); status |= check_result (tk, tmk, tl, &tml); } else { printf ("localtime (%ld) yields 0\n", (long int) tl); status = 1; } tl1 = tl + by; if ((tl1 < tl) != (by < 0)) break; } else for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1) { /* Null benchmark. */ lt = localtime (&tl); if (lt) { tmk = tml = *lt; tk = tl; status |= check_result (tk, tmk, tl, &tml); } else { printf ("localtime (%ld) yields 0\n", (long int) tl); status = 1; } tl1 = tl + by; if ((tl1 < tl) != (by < 0)) break; } } else printf ("Usage:\ \t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n\ \t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n\ \t%s FROM BY TO - # Do not test those values (for benchmark).\n", argv[0], argv[0], argv[0]); return status; } #endif /* DEBUG */ /* Local Variables: compile-command: "gcc -DDEBUG -I. -Wall -W -O2 -g mktime.c -o mktime" End: */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/modechange.c�������������������������������������������������������������0000664�0000000�0000000�00000030043�11671051007�0017476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* modechange.c -- file mode manipulation Copyright (C) 1989-1990, 1997-1999, 2001, 2003-2006, 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 <http://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; if ('0' <= *mode_string && *mode_string < '8') { unsigned int octal_mode = 0; mode_t mode; mode_t mentioned; do { octal_mode = 8 * octal_mode + *mode_string++ - '0'; if (ALLM < octal_mode) return NULL; } while ('0' <= *mode_string && *mode_string < '8'); if (*mode_string) return NULL; mode = octal_to_mode (octal_mode); mentioned = (mode & (S_ISUID | S_ISGID)) | S_ISVTX | S_IRWXUGO; return make_node_op_equals (mode, mentioned); } /* Allocate enough space to hold the result. */ { size_t needed = 1; char const *p; for (p = mode_string; *p; p++) needed += (*p == '=' || *p == '+' || *p == '-'); mc = xnmalloc (needed, sizeof *mc); } /* One loop iteration for each `[ugoa]*([-+=]([rwxXst]*|[ugo]))+'. */ for (;; mode_string++) { /* Which bits in the mode are operated on. */ mode_t affected = 0; /* Turn on all the bits in `affected' for each group given. */ for (;; mode_string++) switch (*mode_string) { 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 = *mode_string++; mode_t value; char flag = MODE_COPY_EXISTING; struct mode_change *change; switch (*mode_string++) { case 'u': /* Set the affected bits to the value of the `u' bits on the same file. */ value = S_IRWXU; break; case 'g': /* Set the affected bits to the value of the `g' bits on the same file. */ value = S_IRWXG; break; case 'o': /* Set the affected bits to the value of the `o' bits on the same file. */ value = S_IRWXO; break; default: value = 0; flag = MODE_ORDINARY_CHANGE; for (mode_string--;; mode_string++) switch (*mode_string) { 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 = (affected ? affected & value : value); } while (*mode_string == '=' || *mode_string == '+' || *mode_string == '-'); if (*mode_string != ',') break; } if (*mode_string == 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-20111211-stable/lib/modechange.h�������������������������������������������������������������0000664�0000000�0000000�00000002126�11671051007�0017504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* modechange.h -- definitions for file mode manipulation Copyright (C) 1989-1990, 1997, 2003-2006, 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 <http://www.gnu.org/licenses/>. */ #if ! defined MODECHANGE_H_ # define MODECHANGE_H_ # include <stdbool.h> # include <sys/types.h> struct mode_change *mode_compile (const char *); struct mode_change *mode_create_from_ref (const char *); mode_t mode_adjust (mode_t, bool, mode_t, struct mode_change const *, mode_t *); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/modff.c������������������������������������������������������������������0000664�0000000�0000000�00000001710�11671051007�0016476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get signed integer and fractional parts of a floating-point number. 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 <http://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-20111211-stable/lib/mountlist.c��������������������������������������������������������������0000664�0000000�0000000�00000062173�11671051007�0017453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mountlist.c -- return a list of mounted file systems Copyright (C) 1991-1992, 1997-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 <http://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 defined MOUNTED_GETFSSTAT /* OSF_1 and Darwin1.3.x */ # 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 /* 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ # include <mntent.h> # if !defined MOUNTED # if defined _PATH_MOUNTED /* GNU libc */ # define MOUNTED _PATH_MOUNTED # endif # if defined MNT_MNTTAB /* HP-UX. */ # define MOUNTED MNT_MNTTAB # endif # if defined MNTTABNAME /* Dynix. */ # define MOUNTED MNTTABNAME # endif # endif #endif #ifdef MOUNTED_GETMNTINFO /* 4.4BSD. */ # include <sys/mount.h> #endif #ifdef MOUNTED_GETMNTINFO2 /* NetBSD 3.0. */ # include <sys/statvfs.h> #endif #ifdef MOUNTED_GETMNT /* Ultrix. */ # include <sys/mount.h> # include <sys/fs_types.h> #endif #ifdef MOUNTED_FS_STAT_DEV /* BeOS. */ # include <fs_info.h> # include <dirent.h> #endif #ifdef MOUNTED_FREAD /* SVR2. */ # include <mnttab.h> #endif #ifdef MOUNTED_FREAD_FSTYP /* SVR3. */ # include <mnttab.h> # include <sys/fstyp.h> # include <sys/statfs.h> #endif #ifdef MOUNTED_LISTMNTENT # include <mntent.h> #endif #ifdef MOUNTED_GETMNTENT2 /* 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 #ifdef DOLPHIN /* So special that it's not worth putting this in autoconf. */ # undef MOUNTED_FREAD_FSTYP # define MOUNTED_GETMNTTBL #endif #if HAVE_SYS_MNTENT_H /* This is to get MNTOPT_IGNORE on e.g. SVR4. */ # include <sys/mntent.h> #endif #undef MNT_IGNORE #if defined MNTOPT_IGNORE && defined HAVE_HASMNTOPT # define MNT_IGNORE(M) hasmntopt (M, MNTOPT_IGNORE) #else # define MNT_IGNORE(M) 0 #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close /* The results of opendir() in this file are not used with dirfd and fchdir, therefore save some unnecessary work in fchdir.c. */ #undef opendir #undef closedir #ifndef ME_DUMMY # define ME_DUMMY(Fs_name, Fs_type) \ (strcmp (Fs_type, "autofs") == 0 \ || strcmp (Fs_type, "none") == 0 \ || strcmp (Fs_type, "proc") == 0 \ || strcmp (Fs_type, "subfs") == 0 \ /* for NetBSD 3.0 */ \ || strcmp (Fs_type, "kernfs") == 0 \ /* for Irix 6.5 */ \ || strcmp (Fs_type, "ignore") == 0) #endif #ifdef __CYGWIN__ # include <windows.h> # 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, char const *fs_type _GL_UNUSED) { 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 `//'). */ # 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, "cifs") == 0))) #endif #if MOUNTED_GETMNTINFO # 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 /* 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_LISTMNTENT { struct tabmntent *mntlist, *p; struct mntent *mnt; struct mount_entry *me; /* the third and fourth arguments could be used to filter mounts, but Crays doesn't seem to have any mounts that we want to remove. Specifically, automount create normal NFS mounts. */ if (listmntent (&mntlist, KMTAB, NULL, NULL) < 0) return NULL; for (p = mntlist; p; p = p->next) { mnt = p->ment; me = xmalloc (sizeof *me); me->me_devname = xstrdup (mnt->mnt_fsname); me->me_mountdir = xstrdup (mnt->mnt_dir); me->me_type = xstrdup (mnt->mnt_type); 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 = -1; *mtail = me; mtail = &me->me_next; } freemntlist (mntlist); } #endif #ifdef MOUNTED_GETMNTENT1 /* GNU/Linux, 4.3BSD, SunOS, HP-UX, Dynix, Irix. */ { struct mntent *mnt; char const *table = MOUNTED; FILE *fp; fp = setmntent (table, "r"); if (fp == NULL) return NULL; while ((mnt = getmntent (fp))) { me = xmalloc (sizeof *me); me->me_devname = xstrdup (mnt->mnt_fsname); me->me_mountdir = xstrdup (mnt->mnt_dir); me->me_type = xstrdup (mnt->mnt_type); 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_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 /* 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_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 3.0. */ { 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_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 */ #ifdef MOUNTED_GETMNT /* Ultrix. */ { int offset = 0; int val; struct fs_data fsd; while (errno = 0, 0 < (val = getmnt (&offset, &fsd, sizeof (fsd), NOSTAT_MANY, (char *) 0))) { me = xmalloc (sizeof *me); me->me_devname = xstrdup (fsd.fd_req.devname); me->me_mountdir = xstrdup (fsd.fd_req.path); me->me_type = gt_names[fsd.fd_req.fstype]; 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 = fsd.fd_req.dev; /* Add to the linked list. */ *mtail = me; mtail = &me->me_next; } if (val < 0) goto free_then_fail; } #endif /* MOUNTED_GETMNT. */ #if defined MOUNTED_FS_STAT_DEV /* 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_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 /* __alpha running OSF_1 */ { 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_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 || defined MOUNTED_FREAD_FSTYP /* SVR[23]. */ { struct mnttab mnt; char *table = "/etc/mnttab"; FILE *fp; fp = fopen (table, "r"); if (fp == NULL) return NULL; while (fread (&mnt, sizeof mnt, 1, fp) > 0) { me = xmalloc (sizeof *me); # ifdef GETFSTYP /* SVR3. */ me->me_devname = xstrdup (mnt.mt_dev); # else me->me_devname = xmalloc (strlen (mnt.mt_dev) + 6); strcpy (me->me_devname, "/dev/"); strcpy (me->me_devname + 5, mnt.mt_dev); # endif me->me_mountdir = xstrdup (mnt.mt_filsys); me->me_dev = (dev_t) -1; /* Magic; means not known yet. */ me->me_type = ""; me->me_type_malloced = 0; # ifdef GETFSTYP /* SVR3. */ 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; } } # endif 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 || MOUNTED_FREAD_FSTYP. */ #ifdef MOUNTED_GETMNTTBL /* DolphinOS goes its own way. */ { struct mntent **mnttbl = getmnttbl (), **ent; for (ent = mnttbl; *ent; ent++) { me = xmalloc (sizeof *me); me->me_devname = xstrdup ((*ent)->mt_resource); me->me_mountdir = xstrdup ((*ent)->mt_directory); me->me_type = xstrdup ((*ent)->mt_fstype); 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; } endmnttbl (); } #endif #ifdef MOUNTED_GETMNTENT2 /* SVR4. */ { struct mnttab mnt; 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); 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, "r"); 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_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; } 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; char *entries, *thisent; struct vmount *vmp; int n_entries; int i; /* Ask how many bytes to allocate for the mounted file system info. */ if (mntctl (MCTL_QUERY, sizeof bufsize, (struct vmount *) &bufsize) != 0) return NULL; entries = xmalloc (bufsize); /* Get the list of mounted file systems. */ n_entries = mntctl (MCTL_QUERY, bufsize, (struct vmount *) entries); if (n_entries < 0) { int saved_errno = errno; free (entries); errno = saved_errno; 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_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 { 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; 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_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; } } } #endif /* MOUNTED_INTERIX_STATVFS */ *mtail = NULL; return mount_list; free_then_fail: { int saved_errno = errno; *mtail = NULL; while (mount_list) { me = mount_list->me_next; free (mount_list->me_devname); free (mount_list->me_mountdir); if (mount_list->me_type_malloced) free (mount_list->me_type); free (mount_list); mount_list = me; } errno = saved_errno; return NULL; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/mountlist.h��������������������������������������������������������������0000664�0000000�0000000�00000002770�11671051007�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mountlist.h -- declarations for list of mounted file systems Copyright (C) 1991-1992, 1998, 2000-2005, 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 <http://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_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 fileystems. */ 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); #endif ��������gnulib-20111211-stable/lib/mpsort.c�����������������������������������������������������������������0000664�0000000�0000000�00000007351�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sort a vector of pointers to data. 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 <http://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-20111211-stable/lib/mpsort.h�����������������������������������������������������������������0000664�0000000�0000000�00000000137�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stddef.h> void mpsort (void const **, size_t, int (*) (void const *, void const *)); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/msvc-inval.c�������������������������������������������������������������0000664�0000000�0000000�00000007576�11671051007�0017502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 Win32 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-20111211-stable/lib/msvc-inval.h�������������������������������������������������������������0000664�0000000�0000000�00000021241�11671051007�0017470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 <http://msdn.microsoft.com/en-us/library/het71c37.aspx>. 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 <http://msdn.microsoft.com/en-us/library/s58ftw19.aspx>. 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-20111211-stable/lib/msvc-nothrow.c�����������������������������������������������������������0000664�0000000�0000000�00000002527�11671051007�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the Win32 API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include "msvc-inval.h" #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-20111211-stable/lib/msvc-nothrow.h�����������������������������������������������������������0000664�0000000�0000000�00000003114�11671051007�0020056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 __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-20111211-stable/lib/nanosleep.c��������������������������������������������������������������0000664�0000000�0000000�00000017657�11671051007�0017410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a replacement for the POSIX nanosleep function. Copyright (C) 1999-2000, 2002, 2004-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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible for the Woe32 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 __WIN32__) && ! defined __CYGWIN__ /* Windows platforms. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* The Win32 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 void sighandler (int sig) { suspended = 1; } /* Suspend execution for at least *TS_DELAY seconds. */ static void 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; } } 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; my_usleep (requested_delay); if (suspended) { /* Calculate time remaining. */ /* FIXME: the code in sleep doesn't use this, so there's no rush to implement it. */ errno = EINTR; } /* FIXME: Restore sig handler? */ return suspended; } #endif ���������������������������������������������������������������������������������gnulib-20111211-stable/lib/netdb.in.h���������������������������������������������������������������0000664�0000000�0000000�00000022717�11671051007�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a netdb.h header file for systems lacking it (read: MinGW). Copyright (C) 2008-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 # if !@HAVE_DECL_GETADDRINFO@ /* Translate name of a service location and/or a service name to set of socket addresses. For more details, see the POSIX:2001 specification <http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */ _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)); _GL_CXXALIASWARN (getaddrinfo); # if !@HAVE_DECL_FREEADDRINFO@ /* Free `addrinfo' structure AI including associated storage. For more details, see the POSIX:2001 specification <http://www.opengroup.org/susv3xsh/getaddrinfo.html>. */ _GL_FUNCDECL_SYS (freeaddrinfo, void, (struct addrinfo *ai) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (freeaddrinfo, void, (struct addrinfo *ai)); _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:2001 specification <http://www.opengroup.org/susv3xsh/gai_strerror.html>. */ _GL_FUNCDECL_SYS (gai_strerror, const char *, (int ecode)); # endif _GL_CXXALIAS_SYS (gai_strerror, const char *, (int ecode)); # endif _GL_CXXALIASWARN (gai_strerror); # if !@HAVE_DECL_GETNAMEINFO@ /* Convert socket address to printable node and service names. For more details, see the POSIX:2001 specification <http://www.opengroup.org/susv3xsh/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-20111211-stable/lib/netinet_in.in.h����������������������������������������������������������0000664�0000000�0000000�00000002605�11671051007�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <netinet/in.h>. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/nl_langinfo.c������������������������������������������������������������0000664�0000000�0000000�00000015012�11671051007�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* nl_langinfo() replacement: query locale dependent information. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <langinfo.h> #if REPLACE_NL_LANGINFO /* Override nl_langinfo with support for added nl_item values. */ # include <locale.h> # include <string.h> # undef nl_langinfo char * rpl_nl_langinfo (nl_item item) { switch (item) { # if GNULIB_defined_CODESET case CODESET: { const char *locale; static char buf[2 + 10 + 1]; locale = setlocale (LC_CTYPE, NULL); 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 (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } } return ""; } # endif # if GNULIB_defined_T_FMT_AMPM case T_FMT_AMPM: return "%I:%M:%S %p"; # 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 ""; 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 "\0\0\0\0\0\0\0\0\0\0"; # endif # if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS case YESEXPR: return "^[yY]"; case NOEXPR: return "^[nN]"; # endif default: break; } return nl_langinfo (item); } #else /* Provide nl_langinfo from scratch. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Windows platforms. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include <stdio.h> # else /* An old Unix platform without locales, such as Linux libc5 or BeOS. */ # endif # include <locale.h> char * nl_langinfo (nl_item item) { switch (item) { /* nl_langinfo items of the LC_CTYPE category */ case CODESET: # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { static char buf[2 + 10 + 1]; /* Woe32 has a function returning the locale's codepage as a number. */ sprintf (buf, "CP%u", GetACP ()); return buf; } # elif defined __BEOS__ return "UTF-8"; # else return "ISO-8859-1"; # endif /* nl_langinfo items of the LC_NUMERIC category */ case RADIXCHAR: return localeconv () ->decimal_point; case THOUSEP: return localeconv () ->thousands_sep; /* nl_langinfo items of the LC_TIME category. TODO: Really use the locale. */ case D_T_FMT: case ERA_D_T_FMT: return "%a %b %e %H:%M:%S %Y"; case D_FMT: case ERA_D_FMT: return "%m/%d/%y"; case T_FMT: case ERA_T_FMT: return "%H:%M:%S"; case T_FMT_AMPM: return "%I:%M:%S %p"; case AM_STR: return "AM"; case PM_STR: return "PM"; case DAY_1: return "Sunday"; case DAY_2: return "Monday"; case DAY_3: return "Tuesday"; case DAY_4: return "Wednesday"; case DAY_5: return "Thursday"; case DAY_6: return "Friday"; case DAY_7: return "Saturday"; case ABDAY_1: return "Sun"; case ABDAY_2: return "Mon"; case ABDAY_3: return "Tue"; case ABDAY_4: return "Wed"; case ABDAY_5: return "Thu"; case ABDAY_6: return "Fri"; case ABDAY_7: return "Sat"; case MON_1: return "January"; case MON_2: return "February"; case MON_3: return "March"; case MON_4: return "April"; case MON_5: return "May"; case MON_6: return "June"; case MON_7: return "July"; case MON_8: return "August"; case MON_9: return "September"; case MON_10: return "October"; case MON_11: return "November"; case MON_12: return "December"; case ABMON_1: return "Jan"; case ABMON_2: return "Feb"; case ABMON_3: return "Mar"; case ABMON_4: return "Apr"; case ABMON_5: return "May"; case ABMON_6: return "Jun"; case ABMON_7: return "Jul"; case ABMON_8: return "Aug"; case ABMON_9: return "Sep"; case ABMON_10: return "Oct"; case ABMON_11: return "Nov"; case ABMON_12: return "Dec"; case ERA: return ""; case ALT_DIGITS: return "\0\0\0\0\0\0\0\0\0\0"; /* nl_langinfo items of the LC_MONETARY category TODO: Really use the locale. */ case CRNCYSTR: return "-"; /* nl_langinfo items of the LC_MESSAGES category TODO: Really use the locale. */ case YESEXPR: return "^[yY]"; case NOEXPR: return "^[nN]"; default: return ""; } } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/nonblocking.c������������������������������������������������������������0000664�0000000�0000000�00000007023�11671051007�0017711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Non-blocking I/O for pipe or socket descriptors. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "nonblocking.h" #include <errno.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 API. */ # include <sys/ioctl.h> # include <sys/socket.h> # include <unistd.h> /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "msvc-nothrow.h" 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 /* Win32 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 { /* Win32 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-20111211-stable/lib/nonblocking.h������������������������������������������������������������0000664�0000000�0000000�00000004453�11671051007�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Non-blocking I/O for pipe or socket descriptors. 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 <http://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-20111211-stable/lib/nproc.c������������������������������������������������������������������0000664�0000000�0000000�00000023464�11671051007�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect the number of processors. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Glen Lenker and Bruno Haible. */ #include <config.h> #include "nproc.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 # include <sys/sysctl.h> #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #include "c-ctype.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 __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; } unsigned long int num_processors (enum nproc_query query) { if (query == NPROC_CURRENT_OVERRIDABLE) { /* Test the environment variable OMP_NUM_THREADS, recognized also by all programs that are based on OpenMP. The OpenMP spec says that the value assigned to the environment variable "may have leading and trailing white space". */ const char *envvalue = getenv ("OMP_NUM_THREADS"); if (envvalue != NULL) { while (*envvalue != '\0' && c_isspace (*envvalue)) envvalue++; /* Convert it from decimal to 'unsigned long'. */ if (c_isdigit (*envvalue)) { char *endptr = NULL; unsigned long int value = strtoul (envvalue, &endptr, 10); if (endptr != NULL) { while (*endptr != '\0' && c_isspace (*endptr)) endptr++; if (*endptr == '\0') return (value > 0 ? value : 1); } } } query = NPROC_CURRENT; } /* Here query is one of NPROC_ALL, NPROC_CURRENT. */ /* 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, 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, MacOS 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, MacOS 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. But we wish to guarantee that num_processors (NPROC_ALL) >= num_processors (NPROC_CURRENT). */ if (nprocs == 1) { unsigned long nprocs_current = num_processors_via_affinity_mask (); if (nprocs_current > 0) 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 && getpid () != 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 HW_NCPU { /* This works on MacOS 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 __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; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/nproc.h������������������������������������������������������������������0000664�0000000�0000000�00000003421�11671051007�0016532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect the number of processors. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 <http://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-20111211-stable/lib/obstack.c����������������������������������������������������������������0000664�0000000�0000000�00000034051�11671051007�0017035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* obstack.c - subroutines used implicitly by object stack macros Copyright (C) 1988-1994, 1996-2006, 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 <http://www.gnu.org/licenses/>. */ #ifdef _LIBC # include <obstack.h> # include <shlib-compat.h> #else # include <config.h> # include "obstack.h" #endif /* NOTE BEFORE MODIFYING THIS FILE: This version number must be incremented whenever callers compiled using an old obstack.h can no longer properly call the functions in this obstack.c. */ #define OBSTACK_INTERFACE_VERSION 1 /* 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. */ #include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */ #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 # include <gnu-versions.h> # if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION # define ELIDE_CODE # endif #endif #include <stddef.h> #ifndef ELIDE_CODE # include <stdint.h> /* Determine default alignment. */ union fooround { uintmax_t i; long double d; void *p; }; struct fooalign { char c; union fooround u; }; /* 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. */ enum { DEFAULT_ALIGNMENT = offsetof (struct fooalign, u), DEFAULT_ROUNDING = sizeof (union fooround) }; /* When we copy a long block of data, this is the unit to do it with. On some machines, copying successive ints does not work; in such a case, redefine COPYING_UNIT to `long' (if that works) or `char' as a last resort. */ # ifndef COPYING_UNIT # define COPYING_UNIT int # endif /* 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'. */ static _Noreturn void print_and_abort (void); void (*obstack_alloc_failed_handler) (void) = print_and_abort; /* Exit value used when `print_and_abort' is used. */ # include <stdlib.h> # ifdef _LIBC int obstack_exit_failure = EXIT_FAILURE; # else # include "exitfail.h" # define obstack_exit_failure exit_failure # endif # ifdef _LIBC # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) /* A looong time ago (before 1994, anyway; we're not sure) this global variable was used by non-GNU-C macros to avoid multiple evaluation. The GNU C library still exports it because somebody might use it. */ struct obstack *_obstack_compat; compat_symbol (libc, _obstack_compat, _obstack, GLIBC_2_0); # endif # endif /* Define a macro that either calls functions with the traditional malloc/free calling interface, or calls functions with the mmalloc/mfree interface (that adds an extra first argument), based on the state of use_extra_arg. For free, do not use ?:, since some compilers, like the MIPS compilers, do not allow (expr) ? void : void. */ # define CALL_CHUNKFUN(h, size) \ (((h) -> use_extra_arg) \ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) # define CALL_FREEFUN(h, old_chunk) \ do { \ if ((h) -> use_extra_arg) \ (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ else \ (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ } while (0) /* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). Objects start on multiples of ALIGNMENT (0 means use default). CHUNKFUN is the function to use to allocate chunks, and FREEFUN the function to free them. Return nonzero if successful, calls obstack_alloc_failed_handler if allocation fails. */ int _obstack_begin (struct obstack *h, int size, int alignment, void *(*chunkfun) (long), void (*freefun) (void *)) { register 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->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; h->chunk_size = size; h->alignment_mask = alignment - 1; h->use_extra_arg = 0; 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_1 (struct obstack *h, int size, int alignment, void *(*chunkfun) (void *, long), void (*freefun) (void *, void *), void *arg) { register 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->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; h->chunk_size = size; h->alignment_mask = alignment - 1; h->extra_arg = arg; h->use_extra_arg = 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; } /* 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, int length) { register struct _obstack_chunk *old_chunk = h->chunk; register struct _obstack_chunk *new_chunk; register long new_size; register long obj_size = h->next_free - h->object_base; register long i; long already; char *object_base; /* Compute size for new chunk. */ new_size = (obj_size + length) + (obj_size >> 3) + h->alignment_mask + 100; if (new_size < h->chunk_size) new_size = h->chunk_size; /* Allocate and initialize the new chunk. */ 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. Word at a time is fast and is safe if the object is sufficiently aligned. */ if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT) { for (i = obj_size / sizeof (COPYING_UNIT) - 1; i >= 0; i--) ((COPYING_UNIT *)object_base)[i] = ((COPYING_UNIT *)h->object_base)[i]; /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT, but that can cross a page boundary on a machine which does not do strict alignment for COPYING_UNITS. */ already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT); } else already = 0; /* Copy remaining bytes one by one. */ for (i = already; i < obj_size; i++) object_base[i] = h->object_base[i]; /* 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; } # ifdef _LIBC libc_hidden_def (_obstack_newchunk) # endif /* 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); int _obstack_allocated_p (struct obstack *h, void *obj) { register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ register 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. */ # undef obstack_free void __obstack_free (struct obstack *h, void *obj) { register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ register 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 (); } # ifdef _LIBC /* Older versions of libc used a function _obstack_free intended to be called by non-GCC compilers. */ strong_alias (obstack_free, _obstack_free) # endif int _obstack_memory_used (struct obstack *h) { register struct _obstack_chunk* lp; register int nbytes = 0; for (lp = h->chunk; lp != 0; lp = lp->prev) { nbytes += lp->limit - (char *) lp; } return nbytes; } /* Define the error handler. */ # ifdef _LIBC # include <libintl.h> # else # include "gettext.h" # endif # ifndef _ # define _(msgid) gettext (msgid) # endif # ifdef _LIBC # include <libio/iolibio.h> # endif static _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); } #endif /* !ELIDE_CODE */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/obstack.h����������������������������������������������������������������0000664�0000000�0000000�00000061350�11671051007�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* obstack.h - object stack macros Copyright (C) 1988-1994, 1996-1999, 2003-2006, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 /* We need the type of a pointer subtraction. If __PTRDIFF_TYPE__ is defined, as with GNU C, use that; that way we don't pollute the namespace with <stddef.h>'s symbols. Otherwise, include <stddef.h> and use ptrdiff_t. */ #ifdef __PTRDIFF_TYPE__ # define PTR_INT_TYPE __PTRDIFF_TYPE__ #else # include <stddef.h> # define PTR_INT_TYPE ptrdiff_t #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))) /* Similiar 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 PTR_INT_TYPE 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 (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \ P, A) #include <string.h> #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[4]; /* objects begin here */ }; struct obstack /* control current object in current chunk */ { long 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 { PTR_INT_TYPE tempint; void *tempptr; } temp; /* Temporary for some macros. */ int alignment_mask; /* Mask of alignment for each object. */ /* These prototypes vary based on `use_extra_arg', and we use casts to the prototypeless function type in all assignments, but having prototypes here quiets -Wstrict-prototypes. */ struct _obstack_chunk *(*chunkfun) (void *, long); void (*freefun) (void *, struct _obstack_chunk *); 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 *, int); extern int _obstack_begin (struct obstack *, int, int, void *(*) (long), void (*) (void *)); extern int _obstack_begin_1 (struct obstack *, int, int, void *(*) (void *, long), void (*) (void *, void *), void *); extern int _obstack_memory_used (struct obstack *); /* The default name of the function for freeing a chunk is 'obstack_free', but gnulib users can override this by defining '__obstack_free'. */ #ifndef __obstack_free # define __obstack_free obstack_free #endif extern void __obstack_free (struct obstack *obstack, void *block); /* 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 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) ((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, \ (void *(*) (long)) obstack_chunk_alloc, \ (void (*) (void *)) obstack_chunk_free) #define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ (void *(*) (long)) obstack_chunk_alloc, \ (void (*) (void *)) obstack_chunk_free) #define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ (void *(*) (long)) (chunkfun), \ (void (*) (void *)) (freefun)) #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ (void *(*) (void *, long)) (chunkfun), \ (void (*) (void *, void *)) (freefun), (arg)) #define obstack_chunkfun(h, newchunkfun) \ ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) #define obstack_freefun(h, newfreefun) \ ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) #define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar)) #define obstack_blank_fast(h,n) ((h)->next_free += (n)) #define obstack_memory_used(h) _obstack_memory_used (h) #if defined __GNUC__ && defined __STDC__ && __STDC__ /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and does not implement __extension__. But that compiler doesn't define __GNUC_MINOR__. */ # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) # 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); \ (unsigned) (__o->next_free - __o->object_base); }) # define obstack_room(OBSTACK) \ __extension__ \ ({ struct obstack const *__o = (OBSTACK); \ (unsigned) (__o->chunk_limit - __o->next_free); }) # define obstack_make_room(OBSTACK,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ if (__o->chunk_limit - __o->next_free < __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); \ int __len = (length); \ if (__o->next_free + __len > __o->chunk_limit) \ _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); \ int __len = (length); \ if (__o->next_free + __len + 1 > __o->chunk_limit) \ _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 (__o->next_free + 1 > __o->chunk_limit) \ _obstack_newchunk (__o, 1); \ obstack_1grow_fast (__o, datum); \ (void) 0; }) /* 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 (__o->next_free + sizeof (void *) > __o->chunk_limit) \ _obstack_newchunk (__o, sizeof (void *)); \ obstack_ptr_grow_fast (__o, datum); }) \ # define obstack_int_grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (__o->next_free + sizeof (int) > __o->chunk_limit) \ _obstack_newchunk (__o, sizeof (int)); \ obstack_int_grow_fast (__o, datum); }) # define obstack_ptr_grow_fast(OBSTACK,aptr) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ *(const void **) __o1->next_free = (aptr); \ __o1->next_free += sizeof (const void *); \ (void) 0; }) # define obstack_int_grow_fast(OBSTACK,aint) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ *(int *) __o1->next_free = (aint); \ __o1->next_free += sizeof (int); \ (void) 0; }) # define obstack_blank(OBSTACK,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ int __len = (length); \ if (__o->chunk_limit - __o->next_free < __len) \ _obstack_newchunk (__o, __len); \ obstack_blank_fast (__o, __len); \ (void) 0; }) # 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 name conflict when obstack_blank is called. */ # 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 (__o1->next_free - (char *)__o1->chunk \ > __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 = (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__ or not __STDC__ */ # define obstack_object_size(h) \ (unsigned) ((h)->next_free - (h)->object_base) # define obstack_room(h) \ (unsigned) ((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.tempint = (length), \ (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0)) # define obstack_grow(h,where,length) \ ( (h)->temp.tempint = (length), \ (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0), \ memcpy ((h)->next_free, where, (h)->temp.tempint), \ (h)->next_free += (h)->temp.tempint) # define obstack_grow0(h,where,length) \ ( (h)->temp.tempint = (length), \ (((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0), \ memcpy ((h)->next_free, where, (h)->temp.tempint), \ (h)->next_free += (h)->temp.tempint, \ *((h)->next_free)++ = 0) # define obstack_1grow(h,datum) \ ( (((h)->next_free + 1 > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), 1), 0) : 0), \ obstack_1grow_fast (h, datum)) # define obstack_ptr_grow(h,datum) \ ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ obstack_ptr_grow_fast (h, datum)) # define obstack_int_grow(h,datum) \ ( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ ? (_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)) # define obstack_int_grow_fast(h,aint) \ (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint)) # define obstack_blank(h,length) \ ( (h)->temp.tempint = (length), \ (((h)->chunk_limit - (h)->next_free < (h)->temp.tempint) \ ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0), \ obstack_blank_fast (h, (h)->temp.tempint)) # 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.tempptr = (h)->object_base, \ (h)->next_free \ = __PTR_ALIGN ((h)->object_base, (h)->next_free, \ (h)->alignment_mask), \ (((h)->next_free - (char *) (h)->chunk \ > (h)->chunk_limit - (char *) (h)->chunk) \ ? ((h)->next_free = (h)->chunk_limit) : 0), \ (h)->object_base = (h)->next_free, \ (h)->temp.tempptr) # define obstack_free(h,obj) \ ( (h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk, \ ((((h)->temp.tempint > 0 \ && (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk)) \ ? (int) ((h)->next_free = (h)->object_base \ = (h)->temp.tempint + (char *) (h)->chunk) \ : (((__obstack_free) ((h), (h)->temp.tempint + (char *) (h)->chunk), 0), 0))) #endif /* not __GNUC__ or not __STDC__ */ #ifdef __cplusplus } /* C++ */ #endif #endif /* obstack.h */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/obstack_printf.c���������������������������������������������������������0000664�0000000�0000000�00000005356�11671051007�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to obstacks. Copyright (C) 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/offtostr.c���������������������������������������������������������������0000664�0000000�0000000�00000000106�11671051007�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define anytostr offtostr #define inttype off_t #include "anytostr.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/open-safer.c�������������������������������������������������������������0000664�0000000�0000000�00000002445�11671051007�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke open, but avoid some glitches. Copyright (C) 2005-2006, 2008-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 <http://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-20111211-stable/lib/open.c�������������������������������������������������������������������0000664�0000000�0000000�00000013764�11671051007�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a descriptor to a file. 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 <http://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 inline int orig_open (const char *filename, int flags, mode_t mode) { return open (filename, flags, mode); } /* 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 <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, ...) { 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 __WIN32__) && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif #if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR is specified, then fail. Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> says that "A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname." and "The special filename dot shall refer to the directory specified by its predecessor." 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 <http://www.opengroup.org/susv3/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 | O_WRONLY | O_RDWR)) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } #endif fd = orig_open (filename, flags, mode); #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 <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> says that "A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname." and "The special filename dot shall refer to the directory specified by its predecessor." 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-20111211-stable/lib/openat-die.c�������������������������������������������������������������0000664�0000000�0000000�00000003461�11671051007�0017435�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-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 <http://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) 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. */ 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-20111211-stable/lib/openat-priv.h������������������������������������������������������������0000664�0000000�0000000�00000005063�11671051007�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internals for openat-like functions. Copyright (C) 2005-2006, 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 <http://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-20111211-stable/lib/openat-proc.c������������������������������������������������������������0000664�0000000�0000000�00000007363�11671051007�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create /proc/self/fd-related names for subfiles of open directories. Copyright (C) 2006, 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 <http://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> #include "intprops.h" /* The results of open() in this file are not used with fchdir, and we do not leak fds to any single-threaded code that could use stdio, therefore save some unnecessary work in fchdir.c. FIXME - if the kernel ever adds support for multi-thread safety for avoiding standard fds, then we should use open_safer. */ #undef open #undef close #define PROC_SELF_FD_FORMAT "/proc/self/fd/%d/%s" #define PROC_SELF_FD_NAME_SIZE_BOUND(len) \ (sizeof PROC_SELF_FD_FORMAT - sizeof "%d%s" \ + INT_STRLEN_BOUND (int) + (len) + 1) /* Set BUF to the expansion of PROC_SELF_FD_FORMAT, using FD and FILE respectively for %d and %s. If successful, return BUF if the result fits in BUF, dynamically allocated memory otherwise. But return NULL if /proc is not reliable, either because the operating system support is lacking or because memory is low. */ char * openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) { static int proc_status = 0; /* Make sure the caller gets ENOENT when appropriate. */ if (!*file) { buf[0] = '\0'; return buf; } 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); 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_NAME_SIZE_BOUND (sizeof "../fd" - 1)]; sprintf (dotdot_buf, PROC_SELF_FD_FORMAT, proc_self_fd, "../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_NAME_SIZE_BOUND (strlen (file)); char *result = buf; if (OPENAT_BUFFER_SIZE < bufsize) { result = malloc (bufsize); if (! result) return NULL; } sprintf (result, PROC_SELF_FD_FORMAT, fd, file); return result; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/openat-safer.c�����������������������������������������������������������0000664�0000000�0000000�00000002541�11671051007�0017772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke openat, but avoid some glitches. Copyright (C) 2005-2006, 2008-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 <http://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-20111211-stable/lib/openat.c�����������������������������������������������������������������0000664�0000000�0000000�00000020734�11671051007�0016700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement openat function Copyright (C) 2004-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 <http://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 inline 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 <stdarg.h> #include <stdbool.h> #include <stddef.h> #include <string.h> #include <sys/stat.h> #include <errno.h> #if HAVE_OPENAT /* Like openat, but work around Solaris 9 bugs with trailing slash. */ int rpl_openat (int dfd, char const *filename, int flags, ...) { 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 /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR is specified, then fail. Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> says that "A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname." and "The special filename dot shall refer to the directory specified by its predecessor." 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 <http://www.opengroup.org/susv3/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 | O_WRONLY | O_RDWR)) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } # endif fd = orig_openat (dfd, filename, flags, mode); # if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> says that "A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname." and "The special filename dot shall refer to the directory specified by its predecessor." 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 "dosname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ # include "openat-priv.h" # include "save-cwd.h" /* Replacement for Solaris' openat function. <http://www.google.com/search?q=openat+site:docs.sun.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); 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-20111211-stable/lib/openat.h�����������������������������������������������������������������0000664�0000000�0000000�00000005233�11671051007�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement openat function Copyright (C) 2004-2006, 2008-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 <http://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> #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_FCHOWNAT static inline int chownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, 0); } static 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_FCHMODAT static inline int chmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, 0); } static inline int lchmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW); } #endif #if GNULIB_FSTATAT static inline int statat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, 0); } static 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. */ #endif /* _GL_HEADER_OPENAT */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/opendir-safer.c����������������������������������������������������������0000664�0000000�0000000�00000004301�11671051007�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke opendir, but avoid some glitches. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include <config.h> #include "dirent-safer.h" #include <errno.h> #include <unistd.h> #include "unistd-safer.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 = dup_safer (fd); 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-20111211-stable/lib/opendir.c����������������������������������������������������������������0000664�0000000�0000000�00000006521�11671051007�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Start reading the entries of a directory. Copyright (C) 2006-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 <http://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 DIR * opendir (const char *dir_name) { #if HAVE_OPENDIR # undef opendir DIR *dirp; dirp = opendir (dir_name); if (dirp == NULL) return NULL; #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-20111211-stable/lib/openpty.c����������������������������������������������������������������0000664�0000000�0000000�00000006650�11671051007�0017111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a pseudo-terminal. Copyright (C) 2010-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 <http://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 __WIN32__) && !defined __CYGWIN__ /* mingw */ # include <errno.h> int openpty (int *amaster _GL_UNUSED, int *aslave _GL_UNUSED, char *name _GL_UNUSED, struct termios const *termp _GL_UNUSED, struct winsize const *winp _GL_UNUSED) { /* 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-20111211-stable/lib/pagealign_alloc.c��������������������������������������������������������0000664�0000000�0000000�00000011730�11671051007�0020507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation aligned to system page boundaries. Copyright (C) 2005-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 <http://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 /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close #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, 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-20111211-stable/lib/pagealign_alloc.h��������������������������������������������������������0000664�0000000�0000000�00000003517�11671051007�0020520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation aligned to system page boundaries. Copyright (C) 2005, 2008, 2010-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 <http://www.gnu.org/licenses/>. */ #ifndef _PAGEALIGN_ALLOC_H # define _PAGEALIGN_ALLOC_H # include <stddef.h> /* 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) # if __GNUC__ >= 3 __attribute__ ((__malloc__)) # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) __attribute__ ((__alloc_size__ (1))) # endif # endif ; /* Like pagealign_alloc, except it exits the program if the allocation fails. */ extern void *pagealign_xalloc (size_t size) # if __GNUC__ >= 3 __attribute__ ((__malloc__)) # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) __attribute__ ((__alloc_size__ (1))) # endif # endif ; /* Free a memory block. PTR must be a non-NULL pointer returned by pagealign_alloc or pagealign_xalloc. */ extern void pagealign_free (void *ptr); #endif /* _PAGEALIGN_ALLOC_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/parse-datetime.h���������������������������������������������������������0000664�0000000�0000000�00000001617�11671051007�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse a string into an internal time stamp. Copyright (C) 1995, 1997-1998, 2003-2004, 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 <http://www.gnu.org/licenses/>. */ #include <stdbool.h> #include <time.h> bool parse_datetime (struct timespec *, char const *, struct timespec const *); �����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/parse-datetime.y���������������������������������������������������������0000664�0000000�0000000�00000133153�11671051007�0020344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* Parse a string into an internal time stamp. Copyright (C) 1999-2000, 2002-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 <http://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 Paul Eggert <eggert@twinsun.com> in August 1999 to do the right thing about local DST. Also modified by Paul Eggert <eggert@cs.ucla.edu> in February 2004 to support nanosecond-resolution time stamps, and in October 2004 to support TZ strings in dates. */ /* FIXME: Check for arithmetic overflow in all cases, not just some of them. */ #include <config.h> #include "parse-datetime.h" #include "intprops.h" #include "timespec.h" #include "verify.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 <c-ctype.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "xalloc.h" /* 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 /* 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) /* 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 EPOCH_YEAR 1970 #define TM_YEAR_BASE 1900 #define HOUR(x) ((x) * 60) /* long_time_t is a signed integer type that contains all time_t values. */ verify (TYPE_IS_INTEGER (time_t)); #if TIME_T_FITS_IN_LONG_INT typedef long int long_time_t; #else typedef time_t long_time_t; #endif /* Lots of this code assumes time_t and time_t-like values fit into long_time_t. */ verify (TYPE_MINIMUM (long_time_t) <= TYPE_MINIMUM (time_t) && TYPE_MAXIMUM (time_t) <= TYPE_MAXIMUM (long_time_t)); /* FIXME: It also assumes that signed integer overflow silently wraps around, but this is not true any more with recent versions of GCC 4. */ /* An integer value, and the number of digits in its textual representation. */ typedef struct { bool negative; long int value; size_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 }; enum { BILLION = 1000000000, LOG10_BILLION = 9 }; /* Relative times. */ typedef struct { /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ long int year; long int month; long int day; long int hour; long int minutes; long_time_t seconds; long 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. */ long int day_ordinal; /* Day of week; Sunday is 0. */ int day_number; /* tm_isdst flag for the local zone. */ int local_isdst; /* Time zone, in minutes east of UTC. */ long int time_zone; /* Style used for time. */ int meridian; /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ textint year; long int month; long int day; long int hour; long int 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; size_t dates_seen; size_t days_seen; size_t local_zones_seen; size_t dsts_seen; size_t times_seen; size_t zones_seen; /* Table of local time zone abbrevations, terminated by a null entry. */ table local_time_zone_table[3]; } parser_control; union YYSTYPE; static int yylex (union YYSTYPE *, parser_control *); static int yyerror (parser_control const *, char const *); static long int time_zone_hhmm (parser_control *, textint, long int); /* 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 = 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). */ static void apply_relative_time (parser_control *pc, relative_time rel, int factor) { pc->rel.ns += factor * rel.ns; pc->rel.seconds += factor * rel.seconds; pc->rel.minutes += factor * rel.minutes; pc->rel.hour += factor * rel.hour; pc->rel.day += factor * rel.day; pc->rel.month += factor * rel.month; pc->rel.year += factor * rel.year; pc->rels_seen = true; } /* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ static void set_hhmmss (parser_control *pc, long int hour, long int minutes, time_t sec, long int nsec) { pc->hour = hour; pc->minutes = minutes; pc->seconds.tv_sec = sec; pc->seconds.tv_nsec = nsec; } %} /* We want a reentrant parser, even if the TZ manipulation and the calls to localtime and gmtime are not reentrant. */ %pure-parser %parse-param { parser_control *pc } %lex-param { parser_control *pc } /* This grammar has 31 shift/reduce conflicts. */ %expect 31 %union { long int 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; } ; items: /* empty */ | items item ; item: datetime { pc->times_seen++; pc->dates_seen++; } | time { pc->times_seen++; } | local_zone { pc->local_zones_seen++; } | zone { pc->zones_seen++; } | date { pc->dates_seen++; } | day { pc->days_seen++; } | rel | number | hybrid ; 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++; pc->time_zone = time_zone_hhmm (pc, $1, $2); } ; local_zone: tLOCAL_ZONE { pc->local_isdst = $1; pc->dsts_seen += (0 < $1); } | tLOCAL_ZONE tDST { pc->local_isdst = 1; pc->dsts_seen += (0 < $1) + 1; } ; /* 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; apply_relative_time (pc, $2, 1); } | 'T' relunit_snumber { pc->time_zone = HOUR(7); apply_relative_time (pc, $2, 1); } | tZONE tSNUMBER o_colon_minutes { pc->time_zone = $1 + time_zone_hhmm (pc, $2, $3); } | tDAYZONE { pc->time_zone = $1 + 60; } | tZONE tDST { pc->time_zone = $1 + 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; } | tUNUMBER tDAY { pc->day_ordinal = $1.value; pc->day_number = $2; } ; 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) { pc->year = $1; pc->month = $3.value; pc->day = $5.value; } else { 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; pc->year.value = -$3.value; pc->year.digits = $3.digits; } | tMONTH tSNUMBER tSNUMBER { /* e.g. JUN-17-1992. */ pc->month = $1; pc->day = -$2.value; pc->year.value = -$3.value; 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; pc->month = -$2.value; pc->day = -$3.value; } ; rel: relunit tAGO { apply_relative_time (pc, $1, $2); } | relunit { apply_relative_time (pc, $1, 1); } | dayshift { apply_relative_time (pc, $1, 1); } ; 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; $$.day = $1 * $2; } | tUNUMBER tDAY_UNIT { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; } | 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; $$.day = $1.value * $2; } | 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 { $$.tv_sec = $1.value; $$.tv_nsec = 0; } ; unsigned_seconds: tUDECIMAL_NUMBER | tUNUMBER { $$.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); apply_relative_time (pc, $2, 1); } ; 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 time stamps that would not otherwise be valid, e.g., GMT time stamps in 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) }, /* Newfoundland Standard */ { "NDT", tDAYZONE,-(HOUR ( 3) + 30) }, /* 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) }, /* 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. 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 minutes. 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 http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow only valid TZ range, and consider first two digits as hours, if no minutes specified. */ static long int time_zone_hhmm (parser_control *pc, textint s, long int mm) { long int n_minutes; /* 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 n_minutes = s.value * 60 + (s.negative ? -mm : mm); /* If the absolute number of minutes is larger than 24 hours, arrange to reject it by incrementing pc->zones_seen. Thus, we allow only values in the range UTC-24:00 to UTC+24:00. */ if (24 * 60 < abs (n_minutes)) pc->zones_seen++; return n_minutes; } static int to_hour (long int 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; } } static long int to_year (textint textyear) { long int year = textyear.value; if (year < 0) year = -year; /* XPG4 suggests that years 00-68 map to 2000-2068, and years 69-99 map to 1969-1999. */ else if (textyear.digits == 2) year += year < 69 ? 2000 : 1900; return year; } 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 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 table const * lookup_word (parser_control const *pc, char *word) { char *p; char *q; size_t wordlen; table const *tp; bool period_found; bool abbrev; /* Make it uppercase. */ for (p = word; *p; p++) { unsigned char ch = *p; *p = c_toupper (ch); } 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 (YYSTYPE *lvalp, parser_control *pc) { unsigned char c; size_t count; for (;;) { while (c = *pc->input, c_isspace (c)) pc->input++; if (ISDIGIT (c) || c == '-' || c == '+') { char const *p; int sign; unsigned long int value; if (c == '-' || c == '+') { sign = c == '-' ? -1 : 1; while (c = *++pc->input, c_isspace (c)) continue; if (! ISDIGIT (c)) /* skip the '-' sign */ continue; } else sign = 0; p = pc->input; for (value = 0; ; value *= 10) { unsigned long int value1 = value + (c - '0'); if (value1 < value) return '?'; value = value1; c = *++p; if (! ISDIGIT (c)) break; if (ULONG_MAX / 10 < value) return '?'; } if ((c == '.' || c == ',') && ISDIGIT (p[1])) { time_t s; int ns; int digits; unsigned long int value1; /* Check for overflow when converting value to time_t. */ if (sign < 0) { s = - value; if (0 < s) return '?'; value1 = -s; } else { s = value; if (s < 0) return '?'; value1 = s; } if (value != value1) return '?'; /* Accumulate fraction, to ns precision. */ p++; ns = *p++ - '0'; for (digits = 2; digits <= LOG10_BILLION; digits++) { ns *= 10; if (ISDIGIT (*p)) ns += *p++ - '0'; } /* Skip excess digits, truncating toward -Infinity. */ if (sign < 0) for (; ISDIGIT (*p); p++) if (*p != '0') { ns++; break; } while (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) { s--; if (! (s < 0)) 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; if (sign < 0) { lvalp->textintval.value = - value; if (0 < lvalp->textintval.value) return '?'; } else { lvalp->textintval.value = value; if (lvalp->textintval.value < 0) return '?'; } 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) return '?'; lvalp->intval = tp->value; return tp->type; } if (c != '(') return *pc->input++; 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 (parser_control const *pc _GL_UNUSED, char const *s _GL_UNUSED) { return 0; } /* If *TM0 is the old and *TM1 is the new value of a struct tm after passing it to mktime, return true if it's OK that mktime returned T. It's not OK if *TM0 has out-of-range members. */ static bool mktime_ok (struct tm const *tm0, struct tm const *tm1, time_t t) { if (t == (time_t) -1) { /* Guard against falsely reporting an error when parsing a time stamp that happens to equal (time_t) -1, on a host that supports such a time stamp. */ tm1 = localtime (&t); if (!tm1) 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)); } /* A reasonable upper bound for the size of ordinary TZ strings. Use heap allocation if TZ's length exceeds this. */ enum { TZBUFSIZE = 100 }; /* Return a copy of TZ, stored in TZBUF if it fits, and heap-allocated otherwise. */ static char * get_tz (char tzbuf[TZBUFSIZE]) { char *tz = getenv ("TZ"); if (tz) { size_t tzsize = strlen (tz) + 1; tz = (tzsize <= TZBUFSIZE ? memcpy (tzbuf, tz, tzsize) : xmemdup (tz, tzsize)); } return tz; } /* 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. */ bool parse_datetime (struct timespec *result, char const *p, struct timespec const *now) { time_t Start; long int Start_ns; struct tm const *tmp; struct tm tm; struct tm tm0; parser_control pc; struct timespec gettime_buffer; unsigned char c; bool tz_was_altered = false; char *tz0 = NULL; char tz0buf[TZBUFSIZE]; bool ok = true; if (! now) { gettime (&gettime_buffer); now = &gettime_buffer; } Start = now->tv_sec; Start_ns = now->tv_nsec; tmp = localtime (&now->tv_sec); if (! tmp) return false; while (c = *p, c_isspace (c)) p++; if (strncmp (p, "TZ=\"", 4) == 0) { char const *tzbase = p + 4; size_t tzsize = 1; char const *s; for (s = tzbase; *s; s++, tzsize++) if (*s == '\\') { s++; if (! (*s == '\\' || *s == '"')) break; } else if (*s == '"') { char *z; char *tz1; char tz1buf[TZBUFSIZE]; bool large_tz = TZBUFSIZE < tzsize; bool setenv_ok; /* Free tz0, in case this is the 2nd or subsequent time through. */ free (tz0); tz0 = get_tz (tz0buf); z = tz1 = large_tz ? xmalloc (tzsize) : tz1buf; for (s = tzbase; *s != '"'; s++) *z++ = *(s += *s == '\\'); *z = '\0'; setenv_ok = setenv ("TZ", tz1, 1) == 0; if (large_tz) free (tz1); if (!setenv_ok) goto fail; tz_was_altered = true; p = s + 1; } } /* 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"; pc.input = p; pc.year.value = tmp->tm_year; pc.year.value += TM_YEAR_BASE; 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 = RELATIVE_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; #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 = Start + quarter * (90 * 24 * 60 * 60); struct tm const *probe_tm = localtime (&probe); if (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 abbrevation 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) goto fail; 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))) goto fail; tm.tm_year = to_year (pc.year) - TM_YEAR_BASE; tm.tm_mon = pc.month - 1; tm.tm_mday = pc.day; 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) goto fail; tm.tm_min = pc.minutes; tm.tm_sec = pc.seconds.tv_sec; } else { tm.tm_hour = tm.tm_min = tm.tm_sec = 0; pc.seconds.tv_nsec = 0; } /* Let mktime deduce tm_isdst if we have an absolute time stamp. */ 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; Start = mktime (&tm); if (! mktime_ok (&tm0, &tm, Start)) { if (! pc.zones_seen) goto fail; else { /* 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. */ long int time_zone = pc.time_zone; long int abs_time_zone = time_zone < 0 ? - time_zone : time_zone; long int abs_time_zone_hour = abs_time_zone / 60; int abs_time_zone_min = abs_time_zone % 60; char tz1buf[sizeof "XXX+0:00" + sizeof pc.time_zone * CHAR_BIT / 3]; if (!tz_was_altered) tz0 = get_tz (tz0buf); sprintf (tz1buf, "XXX%s%ld:%02d", "-" + (time_zone < 0), abs_time_zone_hour, abs_time_zone_min); if (setenv ("TZ", tz1buf, 1) != 0) goto fail; tz_was_altered = true; tm = tm0; Start = mktime (&tm); if (! mktime_ok (&tm0, &tm, Start)) goto fail; } } if (pc.days_seen && ! pc.dates_seen) { tm.tm_mday += ((pc.day_number - tm.tm_wday + 7) % 7 + 7 * (pc.day_ordinal - (0 < pc.day_ordinal && tm.tm_wday != pc.day_number))); tm.tm_isdst = -1; Start = mktime (&tm); if (Start == (time_t) -1) goto fail; } /* Add relative date. */ if (pc.rel.year | pc.rel.month | pc.rel.day) { int year = tm.tm_year + pc.rel.year; int month = tm.tm_mon + pc.rel.month; int day = tm.tm_mday + pc.rel.day; if (((year < tm.tm_year) ^ (pc.rel.year < 0)) | ((month < tm.tm_mon) ^ (pc.rel.month < 0)) | ((day < tm.tm_mday) ^ (pc.rel.day < 0))) 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 (&tm); if (Start == (time_t) -1) goto fail; } /* 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) { long int delta = pc.time_zone * 60; time_t t1; #ifdef HAVE_TM_GMTOFF delta -= tm.tm_gmtoff; #else time_t t = Start; struct tm const *gmt = gmtime (&t); if (! gmt) goto fail; delta -= tm_diff (&tm, gmt); #endif t1 = Start - delta; if ((Start < t1) != (delta < 0)) goto fail; /* time_t overflow */ Start = t1; } /* 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. */ { long int sum_ns = pc.seconds.tv_nsec + pc.rel.ns; long int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; time_t t0 = Start; long int d1 = 60 * 60 * pc.rel.hour; time_t t1 = t0 + d1; long int d2 = 60 * pc.rel.minutes; time_t t2 = t1 + d2; long_time_t d3 = pc.rel.seconds; long_time_t t3 = t2 + d3; long int d4 = (sum_ns - normalized_ns) / BILLION; long_time_t t4 = t3 + d4; time_t t5 = t4; if ((d1 / (60 * 60) ^ pc.rel.hour) | (d2 / 60 ^ pc.rel.minutes) | ((t1 < t0) ^ (d1 < 0)) | ((t2 < t1) ^ (d2 < 0)) | ((t3 < t2) ^ (d3 < 0)) | ((t4 < t3) ^ (d4 < 0)) | (t5 != t4)) goto fail; result->tv_sec = t5; result->tv_nsec = normalized_ns; } } goto done; fail: ok = false; done: if (tz_was_altered) ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0; if (tz0 != tz0buf) free (tz0); 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))) { long int sec = d.tv_sec; printf ("localtime (%ld) failed\n", sec); } else { int ns = d.tv_nsec; printf ("%04ld-%02d-%02d %02d:%02d:%02d.%09d\n", tm->tm_year + 1900L, 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-20111211-stable/lib/parse-duration.c���������������������������������������������������������0000664�0000000�0000000�00000027764�11671051007�0020361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse a time duration and return a seconds count Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruce Korb <bkorb@gnu.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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> #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) #define TIME_MAX 0x7FFFFFFF /* Wrapper around strtoul that does not require a cast. */ static unsigned long inline 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 inline 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 inline 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 > TIME_MAX / scale) { errno = ERANGE; return BAD_TIME; } val *= scale; if (base > TIME_MAX - 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-20111211-stable/lib/parse-duration.h���������������������������������������������������������0000664�0000000�0000000�00000006460�11671051007�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse a time duration and return a seconds count Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruce Korb <bkorb@gnu.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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: http://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 embeded 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-20111211-stable/lib/passfd.c�����������������������������������������������������������������0000664�0000000�0000000�00000011306�11671051007�0016665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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 <http://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, MacOS 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); # 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 (int sock _GL_UNUSED, int fd _GL_UNUSED) { 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 0 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; # 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->cmsg_len; if (recvmsg (sock, &msg, flags_recvmsg) < 0) 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) { /* fake errno: at end the file is not available */ 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 (int sock _GL_UNUSED, int flags _GL_UNUSED) { errno = ENOSYS; return -1; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/passfd.h�����������������������������������������������������������������0000664�0000000�0000000�00000001670�11671051007�0016675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* passfd.h -- definitions and prototypes for passfd.c 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 <http://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-20111211-stable/lib/pathmax.h����������������������������������������������������������������0000664�0000000�0000000�00000005667�11671051007�0017071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define PATH_MAX somehow. Requires sys/types.h. Copyright (C) 1992, 1999, 2001, 2003, 2005, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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. <http://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 __WIN32__) && ! defined __CYGWIN__ /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, section "Maximum Path Length Limitation", <http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath> 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-20111211-stable/lib/pclose.c�����������������������������������������������������������������0000664�0000000�0000000�00000001563�11671051007�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close a stream to a sub-process. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Native Woe32 API. */ int pclose (FILE *stream) { return _pclose (stream); } ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/perror.c�����������������������������������������������������������������0000664�0000000�0000000�00000002763�11671051007�0016725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print a message describing error code. Copyright (C) 2008-2011 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 <http://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-20111211-stable/lib/physmem.c����������������������������������������������������������������0000664�0000000�0000000�00000016664�11671051007�0017103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Calculate the size of physical memory. Copyright (C) 2000-2001, 2003, 2005-2006, 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 <http://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 && HAVE_MACHINE_HAL_SYSINFO_H # include <sys/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 # 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> /* 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 WINBOOL (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_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 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_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 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-20111211-stable/lib/physmem.h����������������������������������������������������������������0000664�0000000�0000000�00000001632�11671051007�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Calculate the size of physical memory. Copyright (C) 2000, 2003, 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 <http://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-20111211-stable/lib/pipe-filter-aux.h��������������������������������������������������������0000664�0000000�0000000�00000006024�11671051007�0020426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary code for filtering of data through a subprocess. Copyright (C) 2001-2003, 2008-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #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 select() works only on sockets, not on normal file descriptors. */ #ifdef __BEOS__ # 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. */ static 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 static 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; } #define read nonintr_read static 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 # if HAVE_SELECT static inline int nonintr_select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { int retval; do retval = select (n, readfds, writefds, exceptfds, timeout); while (retval < 0 && errno == EINTR); return retval; } # undef select /* avoid warning on VMS */ # define select nonintr_select # endif #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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/pipe-filter-gi.c���������������������������������������������������������0000664�0000000�0000000�00000040045�11671051007�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Filtering of data through a subprocess. Copyright (C) 2001-2003, 2008-2011 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 <http://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 __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 "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 __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 inline 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 inline void filter_cleanup (struct pipe_filter_gi *filter, bool finish_reading); #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 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 inline 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 inline 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 inline int filter_init (struct pipe_filter_gi *filter) { #if !((defined _WIN32 || 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; /* 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; } n = select (n, (!filter->reader_terminated ? &filter->readfds : NULL), (!done_writing ? &filter->writefds : NULL), NULL, NULL); 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 inline 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 **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, (char **) prog_argv, 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; int saved_errno; filter_terminate (filter); ret = filter_retcode (filter); saved_errno = errno; free (filter); errno = saved_errno; return ret; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/pipe-filter-ii.c���������������������������������������������������������0000664�0000000�0000000�00000035005�11671051007�0020226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Filtering of data through a subprocess. Copyright (C) 2001-2003, 2008-2011 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 <http://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 __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" #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ 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 **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 __WIN32__) && ! defined __CYGWIN__) struct sigaction orig_sigpipe_action; #endif /* Open a bidirectional pipe to a subprocess. */ child = create_pipe_bidi (progname, prog_path, (char **) prog_argv, null_stderr, true, exit_on_error, fd); if (child == -1) return -1; #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 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; 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; } n = select (n, &readfds, (!done_writing ? &writefds : NULL), NULL, NULL); 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 suffcient space is not available in the pipe. See POSIX:2008 <http://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 __WIN32__) && ! defined __CYGWIN__) 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-20111211-stable/lib/pipe-filter.h������������������������������������������������������������0000664�0000000�0000000�00000024741�11671051007�0017641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Filtering of data through a subprocess. Copyright (C) 2009-2011 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 <http://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 <http://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 <http://en.wikipedia.org/wiki/Generator_(computer_science)> and <http://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 alternatingly 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 **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; /* 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_write. 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 **prog_argv, bool null_stderr, bool exit_on_error, prepare_read_fn prepare_read, done_read_fn done_read, void *private_data); /* 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); /* 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); /* ============================ pipe_filter_gg ============================ */ /* ======================================================================== */ #ifdef __cplusplus } #endif #endif /* _PIPE_FILTER_H */ �������������������������������gnulib-20111211-stable/lib/pipe-safer.c�������������������������������������������������������������0000664�0000000�0000000�00000002656�11671051007�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke pipe, but avoid some glitches. Copyright (C) 2005-2006, 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 <http://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 HAVE_PIPE if (pipe (fd) == 0) { int i; for (i = 0; i < 2; i++) { fd[i] = fd_safer (fd[i]); if (fd[i] < 0) { int e = errno; close (fd[1 - i]); errno = e; return -1; } } return 0; } #else errno = ENOSYS; #endif return -1; } ����������������������������������������������������������������������������������gnulib-20111211-stable/lib/pipe.c�������������������������������������������������������������������0000664�0000000�0000000�00000002632�11671051007�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a pipe. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 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-20111211-stable/lib/pipe.h�������������������������������������������������������������������0000664�0000000�0000000�00000000116�11671051007�0016344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Obsolete; consider using spawn-pipe.h instead. */ #include "spawn-pipe.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/pipe2-safer.c������������������������������������������������������������0000664�0000000�0000000�00000002710�11671051007�0017521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke pipe2, but avoid some glitches. Copyright (C) 2005-2006, 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 <http://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-20111211-stable/lib/pipe2.c������������������������������������������������������������������0000664�0000000�0000000�00000010406�11671051007�0016424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a pipe, with specific opening flags. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 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 __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 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 <http://www.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) { setmode (fd[1], O_BINARY); setmode (fd[0], O_BINARY); } else if (flags & O_TEXT) { setmode (fd[1], O_TEXT); setmode (fd[0], O_TEXT); } # endif return 0; #endif #if GNULIB_defined_O_NONBLOCK || \ !((defined _WIN32 || 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-20111211-stable/lib/poll.c�������������������������������������������������������������������0000664�0000000�0000000�00000040216�11671051007�0016355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for poll(2) Contributed by Paolo Bonzini. Copyright 2001-2003, 2006-2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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> #include <assert.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_NATIVE # include <winsock2.h> # include <windows.h> # include <io.h> # include <stdio.h> # include <conio.h> # include "msvc-nothrow.h" #else # include <sys/time.h> # include <sys/socket.h> # include <sys/select.h> # include <unistd.h> #endif #ifdef HAVE_SYS_IOCTL_H # include <sys/ioctl.h> #endif #ifdef HAVE_SYS_FILIO_H # include <sys/filio.h> #endif #include <time.h> #ifndef INFTIM # define INFTIM (-1) #endif /* BeOS does not have MSG_PEEK. */ #ifndef MSG_PEEK # define MSG_PEEK 0 #endif #ifdef WIN32_NATIVE #define IsConsoleHandle(h) (((long) (h) & 3) == 3) 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 win32_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 Win9x, 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 WinXP 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 win32_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; 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 WIN32_NATIVE fd_set rfds, wfds, efds; struct timeval tv; struct timeval *ptv; int maxfd, rc; nfds_t i; # ifdef _SC_OPEN_MAX static int sc_open_max = -1; if (nfd < 0 || (nfd > sc_open_max && (sc_open_max != -1 || nfd > (sc_open_max = sysconf (_SC_OPEN_MAX))))) { errno = EINVAL; return -1; } # else /* !_SC_OPEN_MAX */ # ifdef OPEN_MAX if (nfd < 0 || nfd > OPEN_MAX) { errno = EINVAL; return -1; } # endif /* OPEN_MAX -- else, no check is needed */ # endif /* !_SC_OPEN_MAX */ /* EFAULT is not necessary to implement, but let's do it in the simplest case. */ if (!pfd) { 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 (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); if (pfd[i].fd >= maxfd && (pfd[i].events & (POLLIN | POLLOUT | POLLPRI | POLLRDNORM | POLLRDBAND | POLLWRNORM | POLLWRBAND))) { maxfd = pfd[i].fd; if (maxfd > FD_SETSIZE) { errno = EOVERFLOW; return -1; } } } /* 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++) if (pfd[i].fd < 0) pfd[i].revents = 0; else { int happened = compute_revents (pfd[i].fd, pfd[i].events, &rfds, &wfds, &efds); if (happened) { pfd[i].revents = happened; rc++; } } 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 < 0 || 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); assert (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. win32_compute_revents eliminates bits for the "wrong" direction. */ pfd[i].revents = win32_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 = win32_compute_revents_socket ((SOCKET) h, pfd[i].events, ev.lNetworkEvents); } else { /* Not a socket. */ int sought = pfd[i].events; happened = win32_compute_revents (h, &sought); nhandles++; } if ((pfd[i].revents |= happened) != 0) rc++; } if (!rc && timeout == INFTIM) { SwitchToThread(); goto restart; } return rc; #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/poll.in.h����������������������������������������������������������������0000664�0000000�0000000�00000006105�11671051007�0016766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Header for poll(2) emulation Contributed by Paolo Bonzini. Copyright 2001-2003, 2007, 2009-2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !@HAVE_POLL_H@ /* 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 writeable */ # 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-20111211-stable/lib/popen-safer.c������������������������������������������������������������0000664�0000000�0000000�00000005245�11671051007�0017631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke popen, but avoid some glitches. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include <config.h> #include "stdio-safer.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> #include "cloexec.h" /* Like open (name, flags | O_CLOEXEC), although not necessarily atomic. FLAGS must not include O_CREAT. */ static int open_noinherit (char const *name, int flags) { int fd; #if O_CLOEXEC /* 0 = unknown, 1 = yes, -1 = no. */ static int have_cloexec; if (have_cloexec >= 0) { fd = open (name, flags | O_CLOEXEC); if (have_cloexec == 0 && (0 <= fd || errno == EINVAL)) have_cloexec = (0 <= fd ? 1 : -1); if (have_cloexec == 1) return fd; } #endif fd = open (name, flags); if (0 <= fd && set_cloexec_flag (fd, true) != 0) { int saved_errno = errno; close (fd); fd = -1; errno = saved_errno; } return fd; } /* 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_noinherit ("/dev/null", O_RDONLY); 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-20111211-stable/lib/popen.c������������������������������������������������������������������0000664�0000000�0000000�00000006572�11671051007�0016537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream to a sub-process. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include <stdio.h> #if HAVE_POPEN # include <errno.h> # include <fcntl.h> # include <stdlib.h> # include <unistd.h> # undef popen FILE * rpl_popen (const char *filename, const char *mode) { /* The mingw popen works fine, and all other platforms have 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 bookkeepping 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; } #else /* Native Woe32 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); } #endif ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/posix_openpt.c�����������������������������������������������������������0000664�0000000�0000000�00000006200�11671051007�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open the master side of a pseudo-terminal. Copyright (C) 2010-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 <http://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), MacOS 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 MacOS 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 __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 /* MacOS 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 MacOS 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-20111211-stable/lib/posixtm.c����������������������������������������������������������������0000664�0000000�0000000�00000012667�11671051007�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse dates for touch and date. Copyright (C) 1989-1991, 1998, 2000-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 <http://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 <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #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) /* POSIX requires: touch -t [[CC]YY]mmddhhmm[.ss] FILE... 8, 10, or 12 digits, followed by optional .ss (PDS_LEADING_YEAR | 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 int year (struct tm *tm, const int *digit_pair, size_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 1; tm->tm_year += 100; } break; case 2: if (! (syntax_bits & PDS_CENTURY)) return 1; tm->tm_year = digit_pair[0] * 100 + digit_pair[1] - 1900; break; case 0: { time_t now; struct tm *tmp; /* Use current year. */ time (&now); tmp = localtime (&now); if (! tmp) return 1; tm->tm_year = tmp->tm_year; } break; default: abort (); } return 0; } static int posix_time_parse (struct tm *tm, const char *s, unsigned int syntax_bits) { const char *dot = NULL; int pair[6]; int *p; size_t i; size_t s_len = strlen (s); size_t len = (((syntax_bits & PDS_SECONDS) && (dot = strchr (s, '.'))) ? (size_t) (dot - s) : s_len); if (len != 8 && len != 10 && len != 12) return 1; if (dot) { if (!(syntax_bits & PDS_SECONDS)) return 1; if (s_len - len != 3) return 1; } for (i = 0; i < len; i++) if (!ISDIGIT (s[i])) return 1; len /= 2; for (i = 0; i < len; i++) pair[i] = 10 * (s[2*i] - '0') + s[2*i + 1] - '0'; p = pair; if (syntax_bits & PDS_LEADING_YEAR) { if (year (tm, p, len - 4, syntax_bits)) return 1; 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 1; } /* Handle seconds. */ if (!dot) { tm->tm_sec = 0; } else { int seconds; ++dot; if (!ISDIGIT (dot[0]) || !ISDIGIT (dot[1])) return 1; seconds = 10 * (dot[0] - '0') + dot[1] - '0'; tm->tm_sec = seconds; } return 0; } /* Parse a POSIX-style date, returning true if successful. */ bool posixtime (time_t *p, const char *s, unsigned int syntax_bits) { struct tm tm0; struct tm tm1; struct tm const *tm; time_t t; if (posix_time_parse (&tm0, s, syntax_bits)) return false; tm1 = tm0; tm1.tm_isdst = -1; t = mktime (&tm1); if (t != (time_t) -1) tm = &tm1; else { /* mktime returns -1 for errors, but -1 is also a valid time_t value. Check whether an error really occurred. */ tm = localtime (&t); if (! tm) return false; } /* Reject dates like "September 31" and times like "25:61". Do not reject times that specify "60" as the number of seconds. */ if ((tm0.tm_year ^ tm->tm_year) | (tm0.tm_mon ^ tm->tm_mon) | (tm0.tm_mday ^ tm->tm_mday) | (tm0.tm_hour ^ tm->tm_hour) | (tm0.tm_min ^ tm->tm_min) | (tm0.tm_sec ^ tm->tm_sec)) { /* 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. */ time_t dummy; char buf[16]; char *b = stpcpy (buf, s); strcpy (b - 2, "59"); if (!posixtime (&dummy, buf, syntax_bits)) return false; } } *p = t; return true; } �������������������������������������������������������������������������gnulib-20111211-stable/lib/posixtm.h����������������������������������������������������������������0000664�0000000�0000000�00000002235�11671051007�0017116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse dates for touch and date. Copyright (C) 1998, 2003, 2005, 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 <http://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_LEADING_YEAR 1 # define PDS_TRAILING_YEAR 2 # define PDS_CENTURY 4 # define PDS_SECONDS 8 # define PDS_PRE_2000 16 bool posixtime (time_t *p, const char *s, unsigned int syntax_bits); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/posixver.c���������������������������������������������������������������0000664�0000000�0000000�00000002647�11671051007�0017274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Which POSIX version to conform to, for utilities. Copyright (C) 2002-2006, 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 <http://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-20111211-stable/lib/posixver.h���������������������������������������������������������������0000664�0000000�0000000�00000000033�11671051007�0017264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������int posix2_version (void); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/powf.c�������������������������������������������������������������������0000664�0000000�0000000�00000001537�11671051007�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Power function. 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 <http://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-20111211-stable/lib/pread.c������������������������������������������������������������������0000664�0000000�0000000�00000004000�11671051007�0016471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* replacement pread function Copyright (C) 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 <http://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-20111211-stable/lib/printf-args.c������������������������������������������������������������0000664�0000000�0000000�00000014743�11671051007�0017651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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; #if HAVE_LONG_LONG_INT 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; #endif 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; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; #endif #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-20111211-stable/lib/printf-args.h������������������������������������������������������������0000664�0000000�0000000�00000007637�11671051007�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2006-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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, #if HAVE_LONG_LONG_INT TYPE_LONGLONGINT, TYPE_ULONGLONGINT, #endif 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 #if HAVE_LONG_LONG_INT , TYPE_COUNT_LONGLONGINT_POINTER #endif #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; #if HAVE_LONG_LONG_INT long long int a_longlongint; unsigned long long int a_ulonglongint; #endif 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; #if HAVE_LONG_LONG_INT long long int * a_count_longlongint_pointer; #endif #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-20111211-stable/lib/printf-frexp.c�����������������������������������������������������������0000664�0000000�0000000�00000012316�11671051007�0020033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa, for hexadecimal printf. 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 <http://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-20111211-stable/lib/printf-frexp.h�����������������������������������������������������������0000664�0000000�0000000�00000002060�11671051007�0020033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa, for hexadecimal printf. 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 <http://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-20111211-stable/lib/printf-frexpl.c����������������������������������������������������������0000664�0000000�0000000�00000002100�11671051007�0020175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. 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 <http://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-20111211-stable/lib/printf-frexpl.h����������������������������������������������������������0000664�0000000�0000000�00000002103�11671051007�0020205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. 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 <http://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-20111211-stable/lib/printf-parse.c�����������������������������������������������������������0000664�0000000�0000000�00000053277�11671051007�0020034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003, 2006-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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. */ #if defined IN_LIBINTL || defined IN_LIBASPRINTF # if HAVE_STDINT_H_WITH_UINTMAX # include <stdint.h> # endif # if HAVE_INTTYPES_H_WITH_UINTMAX # include <inttypes.h> # endif #else # include <stdint.h> #endif /* 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 MacOS 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 __WIN32__) && ! defined __CYGWIN__ /* On native Win32, 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 HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_LONGLONGINT; else #endif /* If 'long long' exists and 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 HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_ULONGLONGINT; else #endif /* If 'unsigned long long' exists and 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 HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_COUNT_LONGLONGINT_POINTER; else #endif /* If 'long long' exists and 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-20111211-stable/lib/printf-parse.h�����������������������������������������������������������0000664�0000000�0000000�00000012274�11671051007�0020031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse printf format string. Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/printf.c�����������������������������������������������������������������0000664�0000000�0000000�00000002222�11671051007�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2007, 2010-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 <http://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-20111211-stable/lib/priv-set.c���������������������������������������������������������������0000664�0000000�0000000�00000006607�11671051007�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query, remove, or restore a Solaris privilege. Copyright (C) 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 <http://www.gnu.org/licenses/>. Written by David Bartley. */ #include <config.h> #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-20111211-stable/lib/priv-set.h���������������������������������������������������������������0000664�0000000�0000000�00000002442�11671051007�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query, remove, or restore a Solaris privilege. Copyright (C) 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 <http://www.gnu.org/licenses/>. Written by David Bartley. */ #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); static inline int priv_set_remove_linkdir (void) { return priv_set_remove (PRIV_SYS_LINKDIR); } static inline int priv_set_restore_linkdir (void) { return priv_set_restore (PRIV_SYS_LINKDIR); } #else static inline int priv_set_remove_linkdir (void) { return -1; } static inline int priv_set_restore_linkdir (void) { return -1; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/progname.c���������������������������������������������������������������0000664�0000000�0000000�00000006150�11671051007�0017216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2001-2003, 2005-2011 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 <http://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-20111211-stable/lib/progname.h���������������������������������������������������������������0000664�0000000�0000000�00000003737�11671051007�0017233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2001-2004, 2006, 2009-2011 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 <http://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-20111211-stable/lib/progreloc.c��������������������������������������������������������������0000664�0000000�0000000�00000027060�11671051007�0017405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide relocatable programs. Copyright (C) 2003-2011 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 <http://www.gnu.org/licenses/>. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Specification. */ #include "progname.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 MacOS X 10.2 or newer. */ #if HAVE_MACH_O_DYLD_H # include <mach-o/dyld.h> #endif #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ # define WIN32_NATIVE #endif #ifdef WIN32_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.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 /* 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); /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Win32, 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_PATH_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_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILE_SYSTEM_PREFIX_LEN(P) 0 #endif /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf #undef set_program_name #if ENABLE_RELOCATABLE #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 /* Tests whether a given pathname may belong to the executable. */ static bool maybe_executable (const char *filename) { /* Woe32 lacks the access() function. */ #if !defined WIN32_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) { if (stat (filename, &statfile) < 0) return false; if (!(statfile.st_dev && statfile.st_dev == statexe.st_dev && statfile.st_ino == statexe.st_ino)) return false; } } #endif return true; } /* Determine the full pathname of the current executable, freshly allocated. Return NULL if unknown. Guaranteed to work on Linux and Woe32. Likely to work on the other Unixes (maybe except BeOS), under most conditions. */ static char * find_executable (const char *argv0) { #if defined WIN32_NATIVE /* Native Win32 only. On Cygwin, it is better to use the Cygwin provided /proc interface, than to use native Win32 API and cygwin_conv_to_posix_path, because it supports longer file names (see <http://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_PATH_WITH_DIR (location)) /* Shouldn't happen. */ return NULL; return xstrdup (location); #else /* Unix */ # ifdef __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, 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, 0); } } # endif # ifdef __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, 0); } # endif # if HAVE_MACH_O_DYLD_H && HAVE__NSGETEXECUTABLEPATH /* On MacOS 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-20111211-stable/lib/propername.c�������������������������������������������������������������0000664�0000000�0000000�00000023441�11671051007�0017560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Localization of proper names. Copyright (C) 2006-2011 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 <http://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-20111211-stable/lib/propername.h�������������������������������������������������������������0000664�0000000�0000000�00000007234�11671051007�0017567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Localization of proper names. Copyright (C) 2006, 2008-2011 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 <http://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 is done in three simple steps: 1) Add it to the list of gnulib modules to import, 2) Change the arguments of version_etc, from 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.) 3) If you are using GNU gettext version 0.16.1 or older, in po/Makevars, in the definition of the XGETTEXT_OPTIONS variable, add: --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."' This specifies automatic comments for the translator. (Requires xgettext >= 0.15. The double-quotes inside the quoted string are on purpose: they are part of the --keyword argument syntax.) */ #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-20111211-stable/lib/pselect.c����������������������������������������������������������������0000664�0000000�0000000�00000004356�11671051007�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* pselect - synchronous I/O multiplexing Copyright 2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software; you can 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, 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 <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. */ 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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/pt_chown.c���������������������������������������������������������������0000664�0000000�0000000�00000011714�11671051007�0017231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* pt_chown - helper program for `grantpt'. Copyright (C) 1998-1999, 2009-2011 Free Software Foundation, Inc. Contributed by C. Scott Ananian <cananian@alumni.princeton.edu>, 1998. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 "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 == 0) { /* 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 != 0) { fprintf (stderr, "pt_chown: needs to be installed setuid 'root'\n"); return FAIL_EXEC; } return EXIT_SUCCESS; } ����������������������������������������������������gnulib-20111211-stable/lib/pthread.in.h�������������������������������������������������������������0000664�0000000�0000000�00000014440�11671051007�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Implement a trivial subset of POSIX 1003.1-2008 pthread.h. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert and Glen Lenker. */ #ifndef _@GUARD_PREFIX@_PTHREAD_H_ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_PTHREAD_H@ # @INCLUDE_NEXT@ @NEXT_PTHREAD_H@ #endif #ifndef _@GUARD_PREFIX@_PTHREAD_H_ #define _@GUARD_PREFIX@_PTHREAD_H_ #include <errno.h> #include <stdlib.h> #include <sched.h> #include <sys/types.h> #include <time.h> #if ! @HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_types typedef int pthread_t; typedef int pthread_attr_t; typedef int pthread_barrier_t; typedef int pthread_barrierattr_t; typedef int pthread_cond_t; typedef int pthread_condattr_t; typedef int pthread_key_t; typedef int pthread_mutex_t; typedef int pthread_mutexattr_t; typedef int pthread_once_t; typedef int pthread_rwlock_t; typedef int pthread_rwlockattr_t; # define GNULIB_defined_pthread_types 1 # endif #endif #ifndef PTHREAD_COND_INITIALIZER #define PTHREAD_COND_INITIALIZER { 0 } #define PTHREAD_MUTEX_INITIALIZER { 0 } #define PTHREAD_ONCE_INIT { 0 } #define PTHREAD_RWLOCK_INITIALIZER { 0 } #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_CREATE_JOINABLE 0 #define PTHREAD_CREATE_DETACHED 1 #define PTHREAD_INHERIT_SCHED 0 #define PTHREAD_EXPLICIT_SCHED 1 #define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL #define PTHREAD_MUTEX_NORMAL 0 #define PTHREAD_MUTEX_ERRORCHECK 1 #define PTHREAD_MUTEX_RECURSIVE 2 #define PTHREAD_MUTEX_STALLED 0 #define PTHREAD_MUTEX_ROBUST 1 #define PTHREAD_PRIO_NONE 0 #define PTHREAD_PRIO_INHERIT 1 #define PTHREAD_PRIO_PROTECT 2 #define PTHREAD_PROCESS_PRIVATE 0 #define PTHREAD_PROCESS_SHARED 1 #define PTHREAD_SCOPE_SYSTEM 0 #define PTHREAD_SCOPE_PROCESS 1 #endif #if ! @HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_functions /* Provide substitutes for the thread functions that should work adequately on a single-threaded implementation, where pthread_create always fails. The goal is to let programs compile on non-pthread hosts with minimal runtime overhead. Omit interfaces that have not been analyzed and for which we do not know what to do, so that they elicit a compile-time error for now. */ static inline int pthread_cond_destroy (pthread_cond_t *cond) { /* COND is never seriously used. */ return 0; } static inline int pthread_cond_init (pthread_cond_t *restrict cond, pthread_condattr_t const *restrict attr) { /* COND is never seriously used. */ return 0; } static inline int pthread_cond_signal (pthread_cond_t *cond) { /* No threads can currently be blocked on COND. */ return 0; } static inline int pthread_cond_wait (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex) { /* Properly-written applications never come here. */ abort (); return 0; } static inline int pthread_create (pthread_t *restrict thread, pthread_attr_t const *restrict attr, void * (*start_routine) (void*), void *restrict arg) { /* Do not create a thread. */ return EAGAIN; } static inline void pthread_exit (void *value) { /* There is just one thread, so the process exits. */ exit (0); } static inline int pthread_join (pthread_t thread, void **pvalue) { /* Properly-written applications never come here. */ abort (); return 0; } static inline int pthread_mutexattr_destroy (pthread_mutexattr_t *attr) { return 0; } static inline int pthread_mutexattr_init (pthread_mutexattr_t *attr) { return 0; } static inline int pthread_mutexattr_settype (pthread_mutexattr_t *attr, int attr_type) { return 0; } static inline int pthread_mutex_destroy (pthread_mutex_t *mutex) { /* MUTEX is never seriously used. */ return 0; } static inline int pthread_mutex_init (pthread_mutex_t *restrict mutex, pthread_mutexattr_t const *restrict attr) { /* MUTEX is never seriously used. */ return 0; } static inline int pthread_mutex_lock (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; } static inline int pthread_mutex_trylock (pthread_mutex_t *mutex) { return pthread_mutex_lock (mutex); } static inline int pthread_mutex_unlock (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; } # define GNULIB_defined_pthread_functions 1 # endif #endif #if ! @HAVE_PTHREAD_SPINLOCK_T@ # if !GNULIB_defined_pthread_spinlock_t /* Approximate spinlocks with mutexes. */ typedef pthread_mutex_t pthread_spinlock_t; static inline int pthread_spin_init (pthread_spinlock_t *lock, int pshared) { return pthread_mutex_init (lock, NULL); } static inline int pthread_spin_destroy (pthread_spinlock_t *lock) { return pthread_mutex_destroy (lock); } static inline int pthread_spin_lock (pthread_spinlock_t *lock) { return pthread_mutex_lock (lock); } static inline int pthread_spin_trylock (pthread_spinlock_t *lock) { return pthread_mutex_trylock (lock); } static inline int pthread_spin_unlock (pthread_spinlock_t *lock) { return pthread_mutex_unlock (lock); } # define GNULIB_defined_pthread_spinlock_t 1 # endif #endif #endif /* _@GUARD_PREFIX@_PTHREAD_H_ */ #endif /* _@GUARD_PREFIX@_PTHREAD_H_ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/pthread_sigmask.c��������������������������������������������������������0000664�0000000�0000000�00000004237�11671051007�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking for threads. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <signal.h> #include <errno.h> #include <stddef.h> #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 = pthread_sigmask (how, new_mask, old_mask); # 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 (pthread_sigmask (1729, NULL, 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); } } # 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-20111211-stable/lib/ptsname.c����������������������������������������������������������������0000664�0000000�0000000�00000002221�11671051007�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the slave side of a pseudo-terminal. Copyright (C) 1998, 2002, 2010-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 <http://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-20111211-stable/lib/ptsname_r.c��������������������������������������������������������������0000664�0000000�0000000�00000003772�11671051007�0017405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the slave side of a pseudo-terminal. Copyright (C) 1998, 2002, 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #ifdef _LIBC # include <paths.h> #else # ifndef _PATH_TTY # define _PATH_TTY "/dev/tty" # endif # ifndef _PATH_DEV # define _PATH_DEV "/dev/" # endif # define __set_errno(e) errno = (e) # define __isatty isatty # define __stat stat # define __ttyname_r ttyname_r # define __ptsname_r ptsname_r #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) { int save_errno = errno; int err; struct stat st; if (buf == NULL) { __set_errno (EINVAL); return EINVAL; } if (!__isatty (fd)) /* We rely on isatty to set errno properly (i.e. EBADF or ENOTTY). */ return errno; if (buflen < strlen (_PATH_TTY) + 3) { __set_errno (ERANGE); return ERANGE; } err = __ttyname_r (fd, buf, buflen); if (err != 0) { __set_errno (err); return errno; } buf[sizeof (_PATH_DEV) - 1] = 't'; if (__stat (buf, &st) < 0) return errno; __set_errno (save_errno); return 0; } ������gnulib-20111211-stable/lib/pty-private.h������������������������������������������������������������0000664�0000000�0000000�00000003075�11671051007�0017702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Interface to the pt_chown program. Copyright (C) 1998-1999, 2009-2011 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #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-20111211-stable/lib/pty.in.h�����������������������������������������������������������������0000664�0000000�0000000�00000010715�11671051007�0016636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <pty.h>. Copyright (C) 2010-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/putenv.c�����������������������������������������������������������������0000664�0000000�0000000�00000006274�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2011 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 program is free software: you can redistribute it and/or modify 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 <http://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 _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 static 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; } /* 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 *const name_end = strchr (string, '='); register size_t size; register char **ep; if (name_end == NULL) { /* Remove the variable from the environment. */ return _unsetenv (string); } size = 0; for (ep = environ; *ep != NULL; ++ep) if (!strncmp (*ep, string, name_end - string) && (*ep)[name_end - string] == '=') break; else ++size; if (*ep == NULL) { static char **last_environ = NULL; char **new_environ = (char **) malloc ((size + 2) * sizeof (char *)); if (new_environ == NULL) return -1; (void) memcpy ((void *) new_environ, (void *) environ, size * sizeof (char *)); new_environ[size] = (char *) string; new_environ[size + 1] = NULL; free (last_environ); last_environ = new_environ; environ = new_environ; } else *ep = string; return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/pwrite.c�����������������������������������������������������������������0000664�0000000�0000000�00000004022�11671051007�0016714�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 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/quote.c������������������������������������������������������������������0000664�0000000�0000000�00000002376�11671051007�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quote.c - quote arguments for output Copyright (C) 1998-2001, 2003, 2005-2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert <eggert@twinsun.com> */ #include <config.h> #include "quotearg.h" #include "quote.h" /* Return an unambiguous printable representation of NAME, allocated in slot N, suitable for diagnostics. */ char const * quote_n (int n, char const *name) { return quotearg_n_style (n, locale_quoting_style, name); } /* Return an unambiguous printable representation of NAME, suitable for diagnostics. */ char const * quote (char const *name) { return quote_n (0, name); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/quote.h������������������������������������������������������������������0000664�0000000�0000000�00000001516�11671051007�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quote.h - prototypes for quote.c Copyright (C) 1998-2001, 2003, 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 <http://www.gnu.org/licenses/>. */ char const *quote_n (int n, char const *name); char const *quote (char const *name); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/quotearg.c���������������������������������������������������������������0000664�0000000�0000000�00000070660�11671051007�0017244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quotearg.c - quote arguments for output Copyright (C) 1998-2002, 2004-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 <http://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 "xalloc.h" #include <ctype.h> #include <errno.h> #include <limits.h> #include <stdbool.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", "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, 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 *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 = { 0 }; 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. */ static char const * gettext_quote (char const *msgid, enum quoting_style s) { char const *translation = _(msgid); if (translation == msgid && s == clocale_quoting_style) translation = "\""; return translation; } /* 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; 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; #define STORE(c) \ do \ { \ if (len < buffersize) \ buffer[len] = (c); \ len++; \ } \ while (0) switch (quoting_style) { case c_maybe_quoting_style: quoting_style = c_quoting_style; elide_outer_quotes = true; /* Fall through. */ 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 "'". If the catalog has no translation, locale_quoting_style quotes `like this', and clocale_quoting_style quotes "like this". For example, an American English Unicode locale should translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and should translate "'" to U+201D (RIGHT DOUBLE QUOTATION MARK). A British English Unicode locale should instead translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. If you don't know what to put here, please see <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs> 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_quoting_style: quoting_style = shell_always_quoting_style; elide_outer_quotes = true; /* Fall through. */ case 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; if (backslash_escapes && quote_string_len && i + quote_string_len <= 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) { if (elide_outer_quotes) goto force_outer_quoting_style; STORE ('\\'); /* 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. */ if (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; /* 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; /* Fall through. */ case '#': case '~': if (i != 0) break; /* Fall through. */ case ' ': 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 '\'': if (quoting_style == shell_always_quoting_style) { if (elide_outer_quotes) goto force_outer_quoting_style; STORE ('\''); STORE ('\\'); STORE ('\''); } 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. */ 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)); } 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) { if (elide_outer_quotes) goto force_outer_quoting_style; STORE ('\\'); 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; STORE (c); c = arg[++i]; } goto store_c; } } } if (! ((backslash_escapes || elide_outer_quotes) && quote_these_too && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))) && !is_right_quote) goto store_c; store_escape: if (elide_outer_quotes) goto force_outer_quoting_style; STORE ('\\'); store_c: STORE (c); } if (len == 0 && quoting_style == shell_always_quoting_style && elide_outer_quotes) goto force_outer_quoting_style; 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. */ 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; } /* Equivalent to quotearg_alloc (ARG, ARGSIZE, NULL, O). */ 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 unsigned int nslots = 1; static struct slotvec slotvec0 = {sizeof slot0, slot0}; static struct slotvec *slotvec = &slotvec0; void quotearg_free (void) { struct slotvec *sv = slotvec; unsigned 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. N is deliberately declared with type "int" 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; unsigned int n0 = n; struct slotvec *sv = slotvec; if (n < 0) abort (); if (nslots <= n0) { /* FIXME: technically, the type of n1 should be `unsigned int', but that evokes an unsuppressible warning from gcc-4.0.1 and older. If gcc ever provides an option to suppress that warning, revert to the original type, so that the test in xalloc_oversized is once again performed only at compile time. */ size_t n1 = n0 + 1; bool preallocated = (sv == &slotvec0); if (xalloc_oversized (n1, sizeof *sv)) xalloc_die (); slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv); if (preallocated) *sv = slotvec0; memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv); nslots = n1; } { 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_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); } ��������������������������������������������������������������������������������gnulib-20111211-stable/lib/quotearg.h���������������������������������������������������������������0000664�0000000�0000000�00000036747�11671051007�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quotearg.h - quote arguments for output Copyright (C) 1998-2002, 2004, 2006, 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert <eggert@twinsun.com> */ #ifndef QUOTEARG_H_ # define QUOTEARG_H_ 1 # include <stddef.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 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 quote `like this' instead of "like this" in the default C locale (ls --quoting-style=locale). 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); /* Get the value of O's quoting style. If O is null, use the default. */ enum quoting_style get_quoting_style (struct quoting_options *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 *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); /* 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); /* 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 (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-20111211-stable/lib/raise.c������������������������������������������������������������������0000664�0000000�0000000�00000003202�11671051007�0016504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a non-threads replacement for the POSIX raise function. Copyright (C) 2002-2003, 2005-2006, 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 <http://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> # include "msvc-inval.h" # undef raise # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static inline 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; } # else # define raise_nothrow raise # endif #else /* An old Unix platform. */ # include <unistd.h> # define rpl_raise raise #endif int rpl_raise (int sig) { #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 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/random_r.c���������������������������������������������������������������0000664�0000000�0000000�00000033072�11671051007�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995, 2005, 2008-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 <http://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 */ #include <config.h> /* 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 <errno.h> #include <limits.h> #include <stddef.h> #include <stdlib.h> #include <inttypes.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 } }; #ifndef _LIBC # define weak_alias(local, symbol) # define __set_errno(e) errno = (e) # define __srandom_r srandom_r # define __initstate_r initstate_r # define __setstate_r setstate_r # define __random_r random_r #endif /* 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; long int 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; 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; *++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 a pointer to the old state. */ int __initstate_r (unsigned int seed, char *arg_state, size_t n, struct random_data *buf) { int32_t *old_state; int32_t *state; int type; int degree; int separation; if (buf == NULL) goto fail; old_state = buf->state; if (old_state != NULL) { int old_type = buf->rand_type; if (old_type == TYPE_0) old_state[-1] = TYPE_0; else old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type; } if (n >= BREAK_3) type = n < BREAK_4 ? TYPE_3 : TYPE_4; else if (n < BREAK_1) { if (n < BREAK_0) { __set_errno (EINVAL); goto fail; } type = TYPE_0; } else type = n < BREAK_2 ? TYPE_1 : TYPE_2; degree = random_poly_info.degrees[type]; separation = random_poly_info.seps[type]; buf->rand_type = type; buf->rand_sep = separation; buf->rand_deg = degree; 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); state[-1] = TYPE_0; if (type != TYPE_0) state[-1] = (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 a pointer to the old state information. */ 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; if (old_type == TYPE_0) old_state[-1] = TYPE_0; else old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type; type = 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 = 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 = state[0]; val = ((state[0] * 1103515245) + 12345) & 0x7fffffff; state[0] = val; *result = val; } else { int32_t *fptr = buf->fptr; int32_t *rptr = buf->rptr; int32_t *end_ptr = buf->end_ptr; int32_t val; val = *fptr += *rptr; /* Chucking least random bit. */ *result = (val >> 1) & 0x7fffffff; ++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-20111211-stable/lib/rawmemchr.c��������������������������������������������������������������0000664�0000000�0000000�00000012201�11671051007�0017365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> /* Find the first occurrence of C in S. */ void * rawmemchr (const void *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; /* 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 == 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 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 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. 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_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 == 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 != c) char_ptr++; return (void *) char_ptr; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/rawmemchr.valgrind�������������������������������������������������������0000664�0000000�0000000�00000000403�11671051007�0020752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). # This use is OK because it provides only a speedup. { rawmemchr-value4 Memcheck:Value4 fun:rawmemchr } { rawmemchr-value8 Memcheck:Value8 fun:rawmemchr } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/read-file.c��������������������������������������������������������������0000664�0000000�0000000�00000011754�11671051007�0017244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* read-file.c -- read file contents into a string Copyright (C) 2006, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> #include "read-file.h" /* Get fstat. */ #include <sys/stat.h> /* Get ftello. */ #include <stdio.h> /* Get SIZE_MAX. */ #include <stdint.h> /* Get malloc, realloc, free. */ #include <stdlib.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. */ char * fread_file (FILE *stream, 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 (SIZE_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) { char *smaller_buf = realloc (buf, size + 1); if (smaller_buf != NULL) buf = smaller_buf; } buf[size] = '\0'; *length = size; return buf; } { char *new_buf; if (alloc == SIZE_MAX) { save_errno = ENOMEM; break; } if (alloc < SIZE_MAX - alloc / 2) alloc = alloc + alloc / 2; else alloc = SIZE_MAX; if (!(new_buf = realloc (buf, alloc))) { save_errno = errno; break; } buf = new_buf; } } free (buf); errno = save_errno; return NULL; } } static char * internal_read_file (const char *filename, size_t *length, const char *mode) { FILE *stream = fopen (filename, mode); char *out; int save_errno; if (!stream) return NULL; out = fread_file (stream, length); save_errno = errno; if (fclose (stream) != 0) { if (out) { save_errno = errno; free (out); } errno = save_errno; return NULL; } return out; } /* 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. */ char * read_file (const char *filename, size_t *length) { return internal_read_file (filename, length, "r"); } /* Open (on non-POSIX systems, in binary mode) 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 the LENGTH variable. On errors, *LENGTH is undefined, errno preserves the values set by system functions (if any), and NULL is returned. */ char * read_binary_file (const char *filename, size_t *length) { return internal_read_file (filename, length, "rb"); } ��������������������gnulib-20111211-stable/lib/read-file.h��������������������������������������������������������������0000664�0000000�0000000�00000002246�11671051007�0017245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* read-file.h -- read file contents into a string Copyright (C) 2006, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef READ_FILE_H #define READ_FILE_H /* Get size_t. */ #include <stddef.h> /* Get FILE. */ #include <stdio.h> extern char *fread_file (FILE * stream, size_t * length); extern char *read_file (const char *filename, size_t * length); extern char *read_binary_file (const char *filename, size_t * length); #endif /* READ_FILE_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/read.c�������������������������������������������������������������������0000664�0000000�0000000�00000004107�11671051007�0016321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible read() function. Copyright (C) 2008-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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include <errno.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "msvc-inval.h" # include "msvc-nothrow.h" # undef read # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static inline 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-20111211-stable/lib/readdir.c����������������������������������������������������������������0000664�0000000�0000000�00000005671�11671051007�0017027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read the next entry of a directory. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #include <errno.h> #include <stddef.h> #include "dirent-private.h" 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" <http://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-20111211-stable/lib/readline.c���������������������������������������������������������������0000664�0000000�0000000�00000003404�11671051007�0017170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readline.c --- Simple implementation of readline. Copyright (C) 2005-2007, 2009-2011 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 <http://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-20111211-stable/lib/readline.h���������������������������������������������������������������0000664�0000000�0000000�00000002535�11671051007�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readline.h --- Simple implementation of readline. Copyright (C) 2005, 2009-2011 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 <http://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 /* 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); #endif #endif /* GL_READLINE_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/readlink.c���������������������������������������������������������������0000664�0000000�0000000�00000004463�11671051007�0017204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stub for readlink(). Copyright (C) 2003-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 <http://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 (const char *name, char *buf _GL_UNUSED, size_t bufsize _GL_UNUSED) { 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 (name, &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 (const char *name, char *buf, size_t bufsize) { # if READLINK_TRAILING_SLASH_BUG size_t len = strlen (name); if (len && name[len - 1] == '/') { /* Even if name 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 (name, &st) == 0) errno = EINVAL; return -1; } # endif /* READLINK_TRAILING_SLASH_BUG */ return readlink (name, buf, bufsize); } #endif /* HAVE_READLINK */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/readlinkat.c�������������������������������������������������������������0000664�0000000�0000000�00000003600�11671051007�0017521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read a symlink relative to an open directory. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #include <unistd.h> /* 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 LEN, 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 len #define AT_FUNC_POST_FILE_ARGS , buf, len #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 ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/readtokens.c�������������������������������������������������������������0000664�0000000�0000000�00000012130�11671051007�0017540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readtokens.c -- Functions for reading tokens from an input stream. Copyright (C) 1990-1991, 1999-2004, 2006, 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 <http://www.gnu.org/licenses/>. Written by Jim Meyering. */ /* This almost supercedes 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 <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; } /* 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 do not end with a delimiter. */ size_t readtoken (FILE *stream, const char *delim, size_t n_delim, token_buffer *tokenbuffer) { char *p; int c; size_t i, n; static const char *saved_delim = NULL; static char isdelim[256]; bool same_delimiters; if (delim == NULL && saved_delim == NULL) abort (); same_delimiters = false; if (delim != saved_delim && saved_delim != NULL) { same_delimiters = true; for (i = 0; i < n_delim; i++) { if (delim[i] != saved_delim[i]) { same_delimiters = false; break; } } } if (!same_delimiters) { size_t j; saved_delim = delim; memset (isdelim, 0, sizeof isdelim); for (j = 0; j < n_delim; j++) { unsigned char ch = delim[j]; isdelim[ch] = 1; } } /* FIXME: don't fool with this caching. Use strchr instead. */ /* skip over any leading delimiters */ for (c = getc (stream); c >= 0 && isdelim[c]; c = getc (stream)) { /* empty */ } p = tokenbuffer->buffer; n = tokenbuffer->size; i = 0; for (;;) { if (c < 0 && i == 0) return -1; if (i == n) p = x2nrealloc (p, &n, sizeof *p); if (c < 0) { p[i] = 0; break; } if (isdelim[c]) { 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; size_t sz; size_t 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 = x2nrealloc (tokens, &sz, sizeof *tokens); lengths = xnrealloc (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-20111211-stable/lib/readtokens.h�������������������������������������������������������������0000664�0000000�0000000�00000002521�11671051007�0017550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readtokens.h -- Functions for reading tokens from an input stream. Copyright (C) 1990-1991, 1999, 2001-2004, 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 <http://www.gnu.org/licenses/>. Written by Jim Meyering. */ #ifndef READTOKENS_H # define READTOKENS_H # include <stdio.h> 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-20111211-stable/lib/readtokens0.c������������������������������������������������������������0000664�0000000�0000000�00000005445�11671051007�0017633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readtokens0.c -- Read NUL-separated tokens from an input stream. Copyright (C) 2004, 2006, 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 <http://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-20111211-stable/lib/readtokens0.h������������������������������������������������������������0000664�0000000�0000000�00000002500�11671051007�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readtokens0.h -- read NUL-separated tokens from an input stream. Copyright (C) 2004, 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 <http://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-20111211-stable/lib/readutmp.c���������������������������������������������������������������0000664�0000000�0000000�00000010105�11671051007�0017222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* GNU's read utmp module. Copyright (C) 1992-2001, 2003-2006, 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 <http://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" #if USE_UNLOCKED_IO # include "unlocked-io.h" #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 inline 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 && (UT_PID (u) <= 0 || (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) { size_t n_read = 0; size_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 (file); SET_UTMP_ENT (); while ((u = GET_UTMP_ENT ()) != NULL) if (desirable_utmp_entry (u, options)) { if (n_read == n_alloc) utmp = x2nrealloc (utmp, &n_alloc, 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) { size_t n_read = 0; size_t n_alloc = 0; STRUCT_UTMP *utmp = NULL; int saved_errno; FILE *f = fopen (file, "r"); if (! f) return -1; for (;;) { if (n_read == n_alloc) utmp = x2nrealloc (utmp, &n_alloc, 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-20111211-stable/lib/readutmp.h���������������������������������������������������������������0000664�0000000�0000000�00000013232�11671051007�0017233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for GNU's read utmp module. Copyright (C) 1992-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 <http://www.gnu.org/licenses/>. */ /* Written by jla; revised by djm */ #ifndef __READUTMP_H__ # define __READUTMP_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 # 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); int read_utmp (char const *file, size_t *n_entries, STRUCT_UTMP **utmp_buf, int options); #endif /* __READUTMP_H__ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/realloc.c����������������������������������������������������������������0000664�0000000�0000000�00000004070�11671051007�0017026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* realloc() function that is glibc compatible. Copyright (C) 1997, 2003-2004, 2006-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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h. */ #ifdef realloc # define NEED_REALLOC_GNU 1 /* Whereas the gnulib module 'realloc-gnu' defines HAVE_REALLOC_GNU. */ #elif GNULIB_REALLOC_GNU && !HAVE_REALLOC_GNU # define NEED_REALLOC_GNU 1 #endif /* Infer the properties of the system's malloc function. The gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ #if GNULIB_MALLOC_GNU && HAVE_MALLOC_GNU # define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1 #endif #include <stdlib.h> #include <errno.h> /* Change the size of an allocated block of memory P to N bytes, with error checking. If N is zero, change it to 1. If P is NULL, use malloc. */ void * rpl_realloc (void *p, size_t n) { void *result; #if NEED_REALLOC_GNU if (n == 0) { n = 1; /* In theory realloc might fail, so don't rely on it to free. */ free (p); p = NULL; } #endif if (p == NULL) { #if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE if (n == 0) n = 1; #endif result = malloc (n); } else result = realloc (p, n); #if !HAVE_REALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/recv.c�������������������������������������������������������������������0000664�0000000�0000000�00000002371�11671051007�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recv.c --- wrappers for Windows recv function Copyright (C) 2008-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 <http://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-20111211-stable/lib/recvfrom.c���������������������������������������������������������������0000664�0000000�0000000�00000003232�11671051007�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recvfrom.c --- wrappers for Windows recvfrom function Copyright (C) 2008-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 <http://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-20111211-stable/lib/ref-add.sin��������������������������������������������������������������0000664�0000000�0000000�00000002064�11671051007�0017257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Add this package to a list of references stored in a text file. # # Copyright (C) 2000, 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 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, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # Written by Bruno Haible <haible@clisp.cons.org>. # /^# Packages using this file: / { s/# Packages using this file:// ta :a s/ @PACKAGE@ / @PACKAGE@ / tb s/ $/ @PACKAGE@ / :b s/^/# Packages using this file:/ } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/ref-del.sin��������������������������������������������������������������0000664�0000000�0000000�00000002007�11671051007�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Remove this package from a list of references stored in a text file. # # Copyright (C) 2000, 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 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, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # Written by Bruno Haible <haible@clisp.cons.org>. # /^# Packages using this file: / { s/# Packages using this file:// s/ @PACKAGE@ / / s/^/# Packages using this file:/ } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/regcomp.c����������������������������������������������������������������0000664�0000000�0000000�00000333102�11671051007�0017042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ 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) internal_function; 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 unsigned 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 unsigned 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 unsigned char *class_name, const unsigned 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. */ #ifdef _LIBC const char * re_compile_pattern (pattern, length, bufp) const char *pattern; size_t length; struct re_pattern_buffer *bufp; #else /* size_t might promote */ const char * re_compile_pattern (const char *pattern, size_t length, struct re_pattern_buffer *bufp) #endif { 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]); } #ifdef _LIBC weak_alias (__re_compile_pattern, re_compile_pattern) #endif /* 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 (syntax) reg_syntax_t syntax; { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; return ret; } #ifdef _LIBC weak_alias (__re_set_syntax, re_set_syntax) #endif int re_compile_fastmap (bufp) struct re_pattern_buffer *bufp; { re_dfa_t *dfa = (re_dfa_t *) 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; } #ifdef _LIBC weak_alias (__re_compile_fastmap, re_compile_fastmap) #endif 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 = (re_dfa_t *) 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 (preg, pattern, cflags) 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 (BE (preg->fastmap == NULL, 0)) 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 (BE (ret == REG_NOERROR, 1)) /* 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; } #ifdef _LIBC weak_alias (__regcomp, regcomp) #endif /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ #ifdef _LIBC size_t regerror (errcode, preg, errbuf, errbuf_size) int errcode; const regex_t *_Restrict_ preg; char *_Restrict_ errbuf; size_t errbuf_size; #else /* size_t might promote */ size_t regerror (int errcode, const regex_t *_Restrict_ preg, char *_Restrict_ errbuf, size_t errbuf_size) #endif { const char *msg; size_t msg_size; if (BE (errcode < 0 || errcode >= (int) (sizeof (__re_error_msgid_idx) / sizeof (__re_error_msgid_idx[0])), 0)) /* 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 (BE (errbuf_size != 0, 1)) { size_t cpy_size = msg_size; if (BE (msg_size > errbuf_size, 0)) { cpy_size = errbuf_size - 1; errbuf[cpy_size] = '\0'; } memcpy (errbuf, msg, cpy_size); } return msg_size; } #ifdef _LIBC weak_alias (__regerror, regerror) #endif #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 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 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 (preg) regex_t *preg; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; if (BE (dfa != NULL, 1)) free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; re_free (preg->fastmap); preg->fastmap = NULL; re_free (preg->translate); preg->translate = NULL; } #ifdef _LIBC weak_alias (__regfree, regfree) #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 /* 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 (s) 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 = (char *) malloc (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 = (re_dfa_t *) preg->buffer; if (BE (preg->allocated < sizeof (re_dfa_t), 0)) { /* 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 = (unsigned char *) dfa; } preg->used = sizeof (re_dfa_t); err = init_dfa (dfa, length); if (BE (err != REG_NOERROR, 0)) { 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 __libc_lock_init (dfa->lock); err = re_string_construct (®exp, pattern, length, preg->translate, (syntax & RE_ICASE) != 0, dfa); if (BE (err != REG_NOERROR, 0)) { re_compile_internal_free_return: free_workarea_compile (preg); re_string_destruct (®exp); 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 (BE (dfa->str_tree == NULL, 0)) goto re_compile_internal_free_return; /* Analyze the tree and create the nfa. */ err = analyze (preg); if (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) { 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 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 (BE (SIZE_MAX / max_object_size / 2 <= pat_len, 0)) 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 (strcasecmp (codeset_name, "UTF-8") == 0 || strcasecmp (codeset_name, "UTF8") == 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 (BE (dfa->sb_char == NULL, 0)) 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 (BE (dfa->nodes == NULL || dfa->state_table == NULL, 0)) 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 internal_function init_word_char (re_dfa_t *dfa) { int i, j, ch; dfa->word_ops_used = 1; for (i = 0, ch = 0; 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 = (re_dfa_t *) 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 (BE (err != REG_NOERROR, 0)) 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 (BE (dfa->init_state == NULL, 0)) 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 (BE (dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL, 0)) 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 = (re_dfa_t *) 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 (BE (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL || dfa->eclosures == NULL, 0)) 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) { free (dfa->subexp_map); dfa->subexp_map = NULL; } } ret = postorder (dfa->str_tree, lower_subexps, preg); if (BE (ret != REG_NOERROR, 0)) return ret; ret = postorder (dfa->str_tree, calc_first, dfa); if (BE (ret != REG_NOERROR, 0)) return ret; preorder (dfa->str_tree, calc_next, dfa); ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); if (BE (ret != REG_NOERROR, 0)) return ret; ret = calc_eclosure (dfa); if (BE (ret != REG_NOERROR, 0)) 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 (BE (dfa->inveclosures == NULL, 0)) 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 (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) 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 = (re_dfa_t *) 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 (BE (tree == NULL || tree1 == NULL || op == NULL || cls == NULL, 0)) { *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 (BE (node->node_idx == REG_MISSING, 0)) 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: 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; assert (REG_VALID_INDEX (left)); assert (REG_VALID_INDEX (right)); 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: 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 internal_function 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 (BE (clone_dest == REG_MISSING, 0)) return REG_ESPACE; dfa->nexts[clone_node] = dfa->nexts[org_node]; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) 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 (BE (! ok, 0)) 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 (BE (clone_dest == REG_MISSING, 0)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) 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 == REG_MISSING) { /* There is no such duplicated node, create a new one. */ reg_errcode_t err; clone_dest = duplicate_node (dfa, org_dest, constraint); if (BE (clone_dest == REG_MISSING, 0)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) return REG_ESPACE; err = duplicate_node_closure (dfa, org_dest, clone_dest, root_node, constraint); if (BE (err != REG_NOERROR, 0)) 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 (BE (! ok, 0)) return REG_ESPACE; } org_dest = dfa->edests[org_node].elems[1]; clone_dest = duplicate_node (dfa, org_dest, constraint); if (BE (clone_dest == REG_MISSING, 0)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (! ok, 0)) 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 REG_MISSING; /* Not found. */ } /* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. Return the index of the new node, or REG_MISSING 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 (BE (dup_idx != REG_MISSING, 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 (BE (! ok, 0)) 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; #ifdef DEBUG assert (dfa->nodes_len > 0); #endif 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; } #ifdef DEBUG assert (dfa->eclosures[node_idx].nelem != REG_MISSING); #endif /* 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 (BE (err != REG_NOERROR, 0)) 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 ok; bool incomplete = false; err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); if (BE (err != REG_NOERROR, 0)) return err; /* This indicates that we are calculating this node now. We reference this value to avoid infinite loop. */ dfa->eclosures[node].nelem = REG_MISSING; /* 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 (BE (err != REG_NOERROR, 0)) 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 == REG_MISSING) { 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 (BE (err != REG_NOERROR, 0)) return err; } else eclosure_elem = dfa->eclosures[edest]; /* Merge the epsilon closure of `edest'. */ err = re_node_set_merge (&eclosure, &eclosure_elem); if (BE (err != REG_NOERROR, 0)) 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); } } /* An epsilon closure includes itself. */ ok = re_node_set_insert (&eclosure, node); if (BE (! ok, 0)) return REG_ESPACE; 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 internal_function 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 internal_function 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 internal_function 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; } /* else fall through. */ 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 is occured, 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 = (re_dfa_t *) 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 (BE (*err != REG_NOERROR && tree == NULL, 0)) 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 (BE (eor == NULL || root == NULL, 0)) { *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 = (re_dfa_t *) preg->buffer; bin_tree_t *tree, *branch = NULL; tree = parse_branch (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) 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)) { branch = parse_branch (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && branch == NULL, 0)) return NULL; } else branch = NULL; tree = create_tree (dfa, tree, branch, OP_ALT); if (BE (tree == NULL, 0)) { *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 = (re_dfa_t *) preg->buffer; tree = parse_expression (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) 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 (BE (*err != REG_NOERROR && expr == NULL, 0)) { return NULL; } if (tree != NULL && expr != NULL) { tree = create_tree (dfa, tree, expr, CONCAT); if (tree == NULL) { *err = REG_ESPACE; return NULL; } } 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 = (re_dfa_t *) preg->buffer; bin_tree_t *tree; switch (token->type) { case CHARACTER: tree = create_token_tree (dfa, NULL, NULL, token); if (BE (tree == NULL, 0)) { *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 (BE (mbc_remain == NULL || tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } } } #endif break; case OP_OPEN_SUBEXP: tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_OPEN_BRACKET: tree = parse_bracket_exp (regexp, dfa, token, syntax, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_BACK_REF: if (!BE (dfa->completed_bkref_map & (1 << token->opr.idx), 1)) { *err = REG_ESUBREG; return NULL; } dfa->used_bkref_map |= 1 << token->opr.idx; tree = create_token_tree (dfa, NULL, NULL, token); if (BE (tree == NULL, 0)) { *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); } /* else fall through */ case OP_CLOSE_SUBEXP: if ((token->type == OP_CLOSE_SUBEXP) && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) { *err = REG_ERPAREN; return NULL; } /* else fall through */ 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 (BE (tree == NULL, 0)) { *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 (BE (tree_first == NULL || tree_last == NULL || tree == NULL, 0)) { *err = REG_ESPACE; return NULL; } } else { tree = create_token_tree (dfa, NULL, NULL, token); if (BE (tree == NULL, 0)) { *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 (BE (tree == NULL, 0)) { *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, (const unsigned char *) "alnum", (const unsigned char *) "_", token->type == OP_NOTWORD, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_SPACE: case OP_NOTSPACE: tree = build_charclass_op (dfa, regexp->trans, (const unsigned char *) "space", (const unsigned char *) "", token->type == OP_NOTSPACE, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_ALT: case END_OF_RE: return NULL; case BACK_SLASH: *err = REG_EESCAPE; return NULL; default: /* Must not happen? */ #ifdef DEBUG assert (0); #endif 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) { tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; /* In BRE consecutive duplications are not allowed. */ if ((syntax & RE_CONTEXT_INVALID_DUP) && (token->type == OP_DUP_ASTERISK || token->type == OP_OPEN_DUP_NUM)) { *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 = (re_dfa_t *) 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 (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0)) *err = REG_EPAREN; if (BE (*err != REG_NOERROR, 0)) return NULL; } if (cur_nsub <= '9' - '1') dfa->completed_bkref_map |= 1 << cur_nsub; tree = create_tree (dfa, tree, NULL, SUBEXP); if (BE (tree == NULL, 0)) { *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 == REG_MISSING) { 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 (BE (start != REG_ERROR, 1)) { /* 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) : REG_ERROR)); } if (BE (start == REG_ERROR || end == REG_ERROR, 0)) { /* Invalid sequence. */ if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0)) { 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 (BE ((end != REG_MISSING && start > end) || token->type != OP_CLOSE_DUP_NUM, 0)) { /* First number greater than second. */ *err = REG_BADBR; return NULL; } } else { start = (token->type == OP_DUP_PLUS) ? 1 : 0; end = (token->type == OP_DUP_QUESTION) ? 1 : REG_MISSING; } fetch_token (token, regexp, syntax); if (BE (elem == NULL, 0)) return NULL; if (BE (start == 0 && end == 0, 0)) { postorder (elem, free_tree, NULL); return NULL; } /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}". */ if (BE (start > 0, 0)) { tree = elem; for (i = 2; i <= start; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (BE (elem == NULL || tree == NULL, 0)) goto parse_dup_op_espace; } if (start == end) return tree; /* Duplicate ELEM before it is marked optional. */ elem = duplicate_tree (elem, dfa); old_tree = tree; } else old_tree = NULL; if (elem->token.type == SUBEXP) postorder (elem, mark_opt_subexp, (void *) (long) elem->token.opr.idx); tree = create_tree (dfa, elem, NULL, (end == REG_MISSING ? OP_DUP_ASTERISK : OP_ALT)); if (BE (tree == NULL, 0)) goto parse_dup_op_espace; /* From gnulib's "intprops.h": True if the arithmetic type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* This loop is actually executed only when end != REG_MISSING, to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have already created the start+1-th copy. */ if (TYPE_SIGNED (Idx) || end != REG_MISSING) for (i = start + 2; i <= end; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (BE (elem == NULL || tree == NULL, 0)) goto parse_dup_op_espace; tree = create_tree (dfa, tree, NULL, OP_ALT); if (BE (tree == NULL, 0)) 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 /* 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 sinse we may update it. */ static reg_errcode_t internal_function # 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 (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, 0)) return REG_ERANGE; /* We can handle no multi character collating elements without libc support. */ if (BE ((start_elem->type == COLL_SYM && strlen ((char *) start_elem->opr.name) > 1) || (end_elem->type == COLL_SYM && strlen ((char *) end_elem->opr.name) > 1), 0)) return REG_ECOLLATE; # ifdef RE_ENABLE_I18N { wchar_t wc; wint_t start_wc; wint_t end_wc; wchar_t cmp_buf[6] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'}; 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) ? __btowc (start_ch) : start_elem->opr.wch); end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) ? __btowc (end_ch) : end_elem->opr.wch); if (start_wc == WEOF || end_wc == WEOF) return REG_ECOLLATE; cmp_buf[0] = start_wc; cmp_buf[4] = end_wc; if (BE ((syntax & RE_NO_EMPTY_RANGES) && wcscoll (cmp_buf, cmp_buf + 4) > 0, 0)) 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 (BE (*range_alloc == mbcset->nranges, 0)) { /* 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 (BE (new_array_start == NULL || new_array_end == NULL, 0)) 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) { cmp_buf[2] = wc; if (wcscoll (cmp_buf, cmp_buf + 2) <= 0 && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0) 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 internal_function build_collating_symbol (bitset_t sbcset, # ifdef RE_ENABLE_I18N re_charset_t *mbcset, Idx *coll_sym_alloc, # endif const unsigned char *name) { size_t name_len = strlen ((const char *) name); if (BE (name_len != 1, 0)) 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 environement. Seek the collating symbol entry correspondings to NAME. Return the index of the symbol in the SYMB_TABLE. */ auto inline int32_t __attribute ((always_inline)) seek_collating_symbol_entry (name, name_len) const unsigned char *name; size_t name_len; { int32_t hash = elem_hash ((const char *) name, name_len); int32_t elem = hash % table_size; if (symb_table[2 * elem] != 0) { int32_t second = hash % (table_size - 2) + 1; do { /* First compare the hashing value. */ if (symb_table[2 * elem] == hash /* Compare the length of the name. */ && name_len == extra[symb_table[2 * elem + 1]] /* Compare the name. */ && memcmp (name, &extra[symb_table[2 * elem + 1] + 1], name_len) == 0) { /* Yep, this is the entry. */ break; } /* Next entry. */ elem += second; } while (symb_table[2 * elem] != 0); } return elem; } /* 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 (br_elem) 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 (symb_table[2 * elem] != 0) { /* 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 (symb_table[2 * elem] == 0 && 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 environement. 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 sinse we may update it. */ auto inline reg_errcode_t __attribute ((always_inline)) build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem) re_charset_t *mbcset; Idx *range_alloc; bitset_t sbcset; bracket_elem_t *start_elem, *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 (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, 0)) return REG_ERANGE; start_collseq = lookup_collation_sequence_value (start_elem); end_collseq = lookup_collation_sequence_value (end_elem); /* Check start/end collation sequence values. */ if (BE (start_collseq == UINT_MAX || end_collseq == UINT_MAX, 0)) return REG_ECOLLATE; if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq, 0)) 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 (BE (*range_alloc == mbcset->nranges, 0)) { /* 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 (BE (new_array_start == NULL || new_array_end == NULL, 0)) 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 environement. 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 sinse we may update it. */ auto inline reg_errcode_t __attribute ((always_inline)) build_collating_symbol (sbcset, mbcset, coll_sym_alloc, name) re_charset_t *mbcset; Idx *coll_sym_alloc; bitset_t sbcset; 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 (symb_table[2 * elem] != 0) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; } else if (symb_table[2 * elem] == 0 && 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 (BE (*coll_sym_alloc == mbcset->ncoll_syms, 0)) { /* 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 (BE (new_coll_syms == NULL, 0)) 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 (BE (name_len != 1, 0)) 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 (BE (sbcset == NULL || mbcset == NULL, 0)) #else if (BE (sbcset == NULL, 0)) #endif /* RE_ENABLE_I18N */ { *err = REG_ESPACE; return NULL; } token_len = peek_token_bracket (token, regexp, syntax); if (BE (token->type == END_OF_RE, 0)) { *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 (BE (token->type == END_OF_RE, 0)) { *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; ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, syntax, first_round); if (BE (ret != REG_NOERROR, 0)) { *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 (BE (token->type == END_OF_RE, 0)) { *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 (BE (token2.type == END_OF_RE, 0)) { *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; ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, dfa, syntax, true); if (BE (ret != REG_NOERROR, 0)) { *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 (BE (*err != REG_NOERROR, 0)) 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 (BE (mbchar_alloc == mbcset->nmbchars, 0)) { 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 (BE (new_mbchars == NULL, 0)) 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 (BE (*err != REG_NOERROR, 0)) 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 (BE (*err != REG_NOERROR, 0)) 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 */ start_elem.opr.name, syntax); if (BE (*err != REG_NOERROR, 0)) goto parse_bracket_exp_free_return; break; default: assert (0); break; } } if (BE (token->type == END_OF_RE, 0)) { *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 (BE (mbc_tree == NULL, 0)) 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 (BE (work_tree == NULL, 0)) goto parse_bracket_exp_espace; /* Then join them by ALT node. */ work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); if (BE (work_tree == NULL, 0)) 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 (BE (work_tree == NULL, 0)) 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 (BE (token->type == OP_CHARSET_RANGE, 0) && !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 sinse 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; /* This #include defines a local function! */ # include <locale/weight.h> /* 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 (&cp); if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0)) /* This isn't a valid character. */ return REG_ECOLLATE; /* Build single byte matcing table for this equivalence class. */ char_buf[1] = (unsigned char) '\0'; len = weights[idx1 & 0xffffff]; for (ch = 0; ch < SBC_MAX; ++ch) { char_buf[0] = ch; cp = char_buf; idx2 = findidx (&cp); /* 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)) { int cnt = 0; while (cnt <= len && weights[(idx1 & 0xffffff) + 1 + cnt] == weights[(idx2 & 0xffffff) + 1 + cnt]) ++cnt; if (cnt > len) bitset_set (sbcset, ch); } } /* Check whether the array has enough space. */ if (BE (*equiv_class_alloc == mbcset->nequiv_classes, 0)) { /* 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 (BE (new_equiv_classes == NULL, 0)) 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 (BE (strlen ((const char *) name) != 1, 0)) 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 sinse 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 unsigned char *class_name, reg_syntax_t syntax) #else /* not RE_ENABLE_I18N */ build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, const unsigned char *class_name, reg_syntax_t syntax) #endif /* not RE_ENABLE_I18N */ { int i; const char *name = (const char *) 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 (BE (*char_class_alloc == mbcset->nchar_classes, 0)) { /* 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 (BE (new_char_classes == NULL, 0)) 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 (BE (trans != NULL, 0)) \ { \ 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 unsigned char *class_name, const unsigned 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; re_token_t br_token; bin_tree_t *tree; 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 (BE (sbcset == NULL || mbcset == NULL, 0)) #else /* not RE_ENABLE_I18N */ if (BE (sbcset == NULL, 0)) #endif /* not RE_ENABLE_I18N */ { *err = REG_ESPACE; return NULL; } if (non_match) { #ifdef RE_ENABLE_I18N mbcset->non_match = 1; #endif /* not 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 (BE (ret != REG_NOERROR, 0)) { 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. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; tree = create_token_tree (dfa, NULL, NULL, &br_token); if (BE (tree == NULL, 0)) 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 (BE (mbc_tree == NULL, 0)) goto build_word_op_espace; /* Then join them by ALT node. */ tree = create_tree (dfa, tree, mbc_tree, OP_ALT); if (BE (mbc_tree != NULL, 1)) 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 REG_MISSING if the number field is empty like "{,1}". Return REG_ERROR if an error occurred. */ static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) { Idx num = REG_MISSING; unsigned char c; while (1) { fetch_token (token, input, syntax); c = token->opr.c; if (BE (token->type == END_OF_RE, 0)) return REG_ERROR; if (token->type == OP_CLOSE_DUP_NUM || c == ',') break; num = ((token->type != CHARACTER || c < '0' || '9' < c || num == REG_ERROR) ? REG_ERROR : ((num == REG_MISSING) ? c - '0' : num * 10 + c - '0')); num = (num > RE_DUP_MAX) ? REG_ERROR : num; } 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); re_free (cset->range_starts); re_free (cset->range_ends); # endif 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; 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 (BE (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE, 0)) { 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 = REG_MISSING; 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 = (Idx) (long) 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-20111211-stable/lib/regex-quote.c������������������������������������������������������������0000664�0000000�0000000�00000013067�11671051007�0017660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a regular expression from a literal string. Copyright (C) 1995, 2010-2011 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 <http://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, bre_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-20111211-stable/lib/regex-quote.h������������������������������������������������������������0000664�0000000�0000000�00000007603�11671051007�0017664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a regular expression from a literal string. Copyright (C) 1995, 2010-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _REGEX_QUOTE_H #define _REGEX_QUOTE_H #include <stddef.h> #include <stdbool.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) <http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03>. If it is REG_EXTENDED, the result is an Extended Regular Expression (ERE) <http://www.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 *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); #endif /* _REGEX_QUOTE_H */ �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/regex.c������������������������������������������������������������������0000664�0000000�0000000�00000005566�11671051007�0016532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2003, 2005-2006, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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> /* Make sure noone 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 <strings.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-20111211-stable/lib/regex.h������������������������������������������������������������������0000664�0000000�0000000�00000062113�11671051007�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Definitions for data structures and routines for the regular expression library. Copyright (C) 1985, 1989-1993, 1995-1998, 2000-2003, 2005-2006, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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_REGEX to declare GNU extensions that violate the POSIX name space rules. */ #undef __USE_GNU_REGEX #if (defined _GNU_SOURCE \ || (!defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE \ && !defined _XOPEN_SOURCE)) # define __USE_GNU_REGEX 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 the offset of a byte within a string. For historical reasons POSIX 1003.1-2004 requires that regoff_t be at least as wide as off_t. However, many common POSIX platforms set regoff_t to the more-sensible ssize_t and the Open Group has signalled its intention to change the requirement to be that regoff_t be at least as wide as ptrdiff_t and ssize_t; see XBD ERN 60 (2005-08-25). We don't know of any hosts where ssize_t or ptrdiff_t is wider than ssize_t, so ssize_t is safe. */ typedef ssize_t regoff_t; /* The type of nonnegative object indexes. Traditionally, GNU regex uses 'int' for these. Code that uses __re_idx_t should work regardless of whether the type is signed. */ typedef size_t __re_idx_t; /* 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 /* Use types that are binary-compatible with the traditional GNU regex implementation, which mishandles strings longer than INT_MAX. */ typedef int regoff_t; typedef int __re_idx_t; 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_REGEX /* 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 /* defined __USE_GNU_REGEX */ /* 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_REGEX /* 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_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) # define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ & ~(RE_DOT_NOT_NULL | RE_INTERVALS | 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) # 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 \ | RE_INVALID_INTERVAL_ORD) /* 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]]] */ #endif /* defined __USE_GNU_REGEX */ #ifdef __USE_GNU_REGEX /* 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 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 - 2) / 10 - 1) 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 /* defined __USE_GNU_REGEX */ /* 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, /* Compiled pattern bigger than 2^16 bytes. */ _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; #ifdef _XOPEN_SOURCE # 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 /* struct re_pattern_buffer normally uses member names like `buffer' that POSIX does not allow. In POSIX mode these members have names with leading `re_' (e.g., `re_buffer'). */ #ifdef __USE_GNU_REGEX # define _REG_RE_NAME(id) id # define _REG_RM_NAME(id) id #else # define _REG_RE_NAME(id) re_##id # define _REG_RM_NAME(id) rm_##id #endif /* The user can specify the type of the re_translate member by defining the macro RE_TRANSLATE_TYPE, which defaults to unsigned char *. This pollutes the POSIX name space, so in POSIX mode just use unsigned char *. */ #ifdef __USE_GNU_REGEX # ifndef RE_TRANSLATE_TYPE # define RE_TRANSLATE_TYPE unsigned char * # endif # define REG_TRANSLATE_TYPE RE_TRANSLATE_TYPE #else # define REG_TRANSLATE_TYPE unsigned char * #endif /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields `buffer', `allocated', `fastmap', `translate', and `no_sub' can be set. After the pattern has been compiled, the `re_nsub' field is available. All other fields are private to the regex routines. */ struct re_pattern_buffer { /* Space that holds the compiled pattern. It is declared as `unsigned char *' because its elements are sometimes used as array indexes. */ unsigned char *_REG_RE_NAME (buffer); /* Number of bytes to which `buffer' points. */ __re_long_size_t _REG_RE_NAME (allocated); /* Number of bytes actually used in `buffer'. */ __re_long_size_t _REG_RE_NAME (used); /* Syntax setting with which the pattern was compiled. */ reg_syntax_t _REG_RE_NAME (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 *_REG_RE_NAME (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. */ REG_TRANSLATE_TYPE _REG_RE_NAME (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 int _REG_RE_NAME (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_REGEX # define REGS_UNALLOCATED 0 # define REGS_REALLOCATE 1 # define REGS_FIXED 2 #endif unsigned int _REG_RE_NAME (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 int _REG_RE_NAME (fastmap_accurate) : 1; /* If set, `re_match_2' does not return information about subexpressions. */ unsigned int _REG_RE_NAME (no_sub) : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned int _REG_RE_NAME (not_bol) : 1; /* Similarly for an end-of-line anchor. */ unsigned int _REG_RE_NAME (not_eol) : 1; /* If true, an anchor at a newline matches. */ unsigned int _REG_RE_NAME (newline_anchor) : 1; /* [[[end pattern_buffer]]] */ }; typedef struct re_pattern_buffer regex_t; /* 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 _REG_RM_NAME (num_regs); regoff_t *_REG_RM_NAME (start); regoff_t *_REG_RM_NAME (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. */ #if !defined RE_NREGS && defined __USE_GNU_REGEX # define RE_NREGS 30 #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. */ /* 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. */ 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, __re_idx_t __length, __re_idx_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, __re_idx_t __length1, const char *__string2, __re_idx_t __length2, __re_idx_t __start, regoff_t __range, struct re_registers *__regs, __re_idx_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, __re_idx_t __length, __re_idx_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, __re_idx_t __length1, const char *__string2, __re_idx_t __length2, __re_idx_t __start, struct re_registers *__regs, __re_idx_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); #if defined _REGEX_RE_COMP || defined _LIBC # ifndef _CRAY /* 4.2 bsd compatibility. */ extern char *re_comp (const char *); extern int re_exec (const char *); # endif #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, so pick a different name. */ #ifndef _Restrict_ # if 199901L <= __STDC_VERSION__ # define _Restrict_ restrict # elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) # define _Restrict_ __restrict # else # define _Restrict_ # endif #endif /* gcc 3.1 and up support the [restrict] syntax. Don't trust sys/cdefs.h's definition of __restrict_arr, though, as it mishandles gcc -ansi -pedantic. */ #ifndef _Restrict_arr_ # if ((199901L <= __STDC_VERSION__ \ || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ && !defined __STRICT_ANSI__)) \ && !defined __GNUG__) # 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-20111211-stable/lib/regex_internal.c���������������������������������������������������������0000664�0000000�0000000�00000136432�11671051007�0020423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ 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) internal_function; static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash) internal_function; static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash) internal_function; /* 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 internal_function __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 (BE (ret != REG_NOERROR, 0)) 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 internal_function __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 (BE (ret != REG_NOERROR, 0)) 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 (BE (ret != REG_NOERROR, 0)) 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 (BE (ret != REG_NOERROR, 0)) 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 internal_function __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. */ size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); if (BE (SIZE_MAX / max_object_size < new_buf_len, 0)) return REG_ESPACE; new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); if (BE (new_wcs == NULL, 0)) return REG_ESPACE; pstr->wcs = new_wcs; if (pstr->offsets != NULL) { Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); if (BE (new_offsets == NULL, 0)) 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 (BE (new_mbs == NULL, 0)) return REG_ESPACE; pstr->mbs = new_mbs; } pstr->bufs_len = new_buf_len; return REG_NOERROR; } static void internal_function 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 internal_function build_wcs_buffer (re_string_t *pstr) { #ifdef _LIBC unsigned char buf[MB_LEN_MAX]; 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 (BE (pstr->trans != NULL, 0)) { 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 (BE (mbclen == (size_t) -2, 0)) { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } else if (BE (mbclen == (size_t) -1 || mbclen == 0, 0)) { /* We treat these cases as a singlebyte character. */ mbclen = 1; wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (BE (pstr->trans != NULL, 0)) wc = pstr->trans[wc]; pstr->cur_state = prev_st; } /* 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 internal_function __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]; assert (MB_LEN_MAX >= pstr->mb_cur_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; if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]) && mbsinit (&pstr->cur_state)) { /* In case of a singlebyte character. */ pstr->mbs[byte_idx] = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]); /* The next step uses the assumption that wchar_t is encoded ASCII-safe: all ASCII values can be converted like this. */ pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx]; ++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 (BE (mbclen < (size_t) -2, 1)) { wchar_t wcu = wc; if (iswlower (wc)) { size_t mbcdlen; wcu = towupper (wc); mbcdlen = wcrtomb (buf, wcu, &prev_st); if (BE (mbclen == mbcdlen, 1)) 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) { /* It is an invalid character or '\0'. Just use the byte. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; pstr->mbs[byte_idx] = ch; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (BE (mbclen == (size_t) -1, 0)) 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 (BE (pstr->trans != NULL, 0)) { 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 (BE (mbclen < (size_t) -2, 1)) { wchar_t wcu = wc; if (iswlower (wc)) { size_t mbcdlen; wcu = towupper (wc); mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st); if (BE (mbclen == mbcdlen, 1)) 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 (BE (pstr->offsets_needed != 0, 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) { /* It is an invalid character or '\0'. Just use the byte. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; if (BE (pstr->trans != NULL, 0)) ch = pstr->trans [ch]; pstr->mbs[byte_idx] = ch; if (BE (pstr->offsets_needed != 0, 0)) pstr->offsets[byte_idx] = src_idx; ++src_idx; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (BE (mbclen == (size_t) -1, 0)) 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 internal_function 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; remain_len = pstr->len - rawbuf_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, remain_len, &pstr->cur_state); if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 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 internal_function 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 (BE (pstr->trans != NULL, 0)) ch = pstr->trans[ch]; if (islower (ch)) pstr->mbs[char_idx] = toupper (ch); else pstr->mbs[char_idx] = ch; } pstr->valid_len = char_idx; pstr->valid_raw_len = char_idx; } /* Apply TRANS to the buffer in PSTR. */ static void internal_function 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 internal_function __attribute_warn_unused_result__ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) { Idx offset; if (BE (pstr->raw_mbs_idx <= idx, 0)) 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 (BE (offset != 0, 1)) { /* Should the already checked characters be kept? */ if (BE (offset < pstr->valid_raw_len, 1)) { /* Yes, move them to the front of the buffer. */ #ifdef RE_ENABLE_I18N if (BE (pstr->offsets_needed, 0)) { 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 (BE (pstr->mbs_allocated, 0)) memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; #if DEBUG assert (pstr->valid_len > 0); #endif } } else { #ifdef RE_ENABLE_I18N /* No, skip all characters until IDX. */ Idx prev_valid_len = pstr->valid_len; if (BE (pstr->offsets_needed, 0)) { 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) && BE (pstr->trans == NULL, 1)) { 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; size_t mbclen; #if 0 /* dead code: buf is set but never used */ unsigned char buf[6]; if (BE (pstr->trans != NULL, 0)) { int i = mlen < 6 ? mlen : 6; while (--i >= 0) buf[i] = pstr->trans[p[i]]; } #endif /* 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 *) p, 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 = ((BE (pstr->word_ops_used != 0, 0) && IS_WIDE_WORD_CHAR (wc)) ? CONTEXT_WORD : ((IS_WIDE_NEWLINE (wc) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); if (BE (pstr->valid_len, 0)) { 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 (!BE (pstr->mbs_allocated, 0)) 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 (BE (ret != REG_NOERROR, 0)) return ret; } else build_wcs_buffer (pstr); } else #endif /* RE_ENABLE_I18N */ if (BE (pstr->mbs_allocated, 0)) { 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 internal_function __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 (BE (!pstr->mbs_allocated, 1)) 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 internal_function __attribute ((pure)) re_string_fetch_byte_case (re_string_t *pstr) { if (BE (!pstr->mbs_allocated, 1)) 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 internal_function 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 internal_function re_string_context_at (const re_string_t *input, Idx idx, int eflags) { int c; if (BE (! REG_VALID_INDEX (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 (BE (idx == input->len, 0)) 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) { #ifdef DEBUG /* It must not happen. */ assert (REG_VALID_INDEX (wc_idx)); #endif --wc_idx; if (! REG_VALID_INDEX (wc_idx)) return input->tip_context; } wc = input->wcs[wc_idx]; if (BE (input->word_ops_used != 0, 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 internal_function __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 (BE (set->elems == NULL, 0)) return REG_ESPACE; return REG_NOERROR; } static reg_errcode_t internal_function __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 (BE (set->elems == NULL, 0)) { set->alloc = set->nelem = 0; return REG_ESPACE; } set->elems[0] = elem; return REG_NOERROR; } static reg_errcode_t internal_function __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 (BE (set->elems == NULL, 0)) 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 internal_function __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 (BE (dest->elems == NULL, 0)) { 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 internal_function __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 (BE (new_elems == NULL, 0)) 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 (REG_VALID_INDEX (id) && dest->elems[id] > src1->elems[i1]) --id; if (! REG_VALID_INDEX (id) || dest->elems[id] != src1->elems[i1]) dest->elems[--sbase] = src1->elems[i1]; if (! REG_VALID_INDEX (--i1) || ! REG_VALID_INDEX (--i2)) break; } /* Lower the highest of the two items. */ else if (src1->elems[i1] < src2->elems[i2]) { if (! REG_VALID_INDEX (--i2)) break; } else { if (! REG_VALID_INDEX (--i1)) 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 && REG_VALID_INDEX (id)) 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 (! REG_VALID_INDEX (--id)) 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 internal_function __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 (BE (dest->elems == NULL, 0)) 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 internal_function __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 (BE (new_buffer == NULL, 0)) return REG_ESPACE; dest->elems = new_buffer; dest->alloc = new_alloc; } if (BE (dest->nelem == 0, 0)) { 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; REG_VALID_INDEX (is) && REG_VALID_INDEX (id); ) { 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 (REG_VALID_INDEX (is)) { /* 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 (! REG_VALID_INDEX (--id)) { /* 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 internal_function __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 BE (re_node_set_init_1 (set, elem) == REG_NOERROR, 1); if (BE (set->nelem, 0) == 0) { /* We already guaranteed above that set->alloc != 0. */ 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 (BE (new_elems == NULL, 0)) 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]) { idx = 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]; } /* 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 internal_function __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 (BE (new_elems == NULL, 0)) 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 internal_function __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 ; REG_VALID_INDEX (--i) ; ) 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 internal_function __attribute ((pure)) re_node_set_contains (const re_node_set *set, Idx elem) { __re_size_t idx, right, mid; if (! REG_VALID_NONZERO_INDEX (set->nelem)) 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 internal_function 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 REG_MISSING if an error occurred. */ static Idx internal_function re_dfa_add_node (re_dfa_t *dfa, re_token_t token) { if (BE (dfa->nodes_len >= dfa->nodes_alloc, 0)) { 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; size_t max_object_size = MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), sizeof (Idx))); /* Avoid overflows. */ if (BE (SIZE_MAX / 2 / max_object_size < dfa->nodes_alloc, 0)) return REG_MISSING; new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); if (BE (new_nodes == NULL, 0)) return REG_MISSING; 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 (BE (new_nexts == NULL || new_indices == NULL || new_edests == NULL || new_eclosures == NULL, 0)) return REG_MISSING; 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 { int type = token.type; dfa->nodes[dfa->nodes_len].accept_mb = (type == OP_PERIOD && dfa->mb_cur_max > 1) || type == COMPLEX_BRACKET; } #endif dfa->nexts[dfa->nodes_len] = REG_MISSING; 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 inline re_hashval_t internal_function 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 * internal_function __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; #ifdef lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (BE (nodes->nelem == 0, 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 (BE (new_state == NULL, 0)) *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 * internal_function __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; #ifdef 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 (BE (new_state == NULL, 0)) *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 (BE (err != REG_NOERROR, 0)) 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 (BE (! re_node_set_insert_last (&newstate->non_eps_nodes, elem), 0)) return REG_ESPACE; } spot = dfa->state_table + (hash & dfa->state_hash_mask); if (BE (spot->alloc <= spot->num, 0)) { Idx new_alloc = 2 * spot->num + 2; re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, new_alloc); if (BE (new_array == NULL, 0)) 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 independ of contexts. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * internal_function __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 (BE (newstate == NULL, 0)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (BE (err != REG_NOERROR, 0)) { 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 (BE (err != REG_NOERROR, 0)) { 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 * internal_function __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 (BE (newstate == NULL, 0)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (BE (err != REG_NOERROR, 0)) { 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) { newstate->entrance_nodes = re_malloc (re_node_set, 1); if (BE (newstate->entrance_nodes == NULL, 0)) { free_state (newstate); return NULL; } if (re_node_set_init_copy (newstate->entrance_nodes, nodes) != REG_NOERROR) 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 (BE (err != REG_NOERROR, 0)) { free_state (newstate); newstate = NULL; } return newstate; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/regex_internal.h���������������������������������������������������������0000664�0000000�0000000�00000056542�11671051007�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ #ifndef _REGEX_INTERNAL_H #define _REGEX_INTERNAL_H 1 #include <assert.h> #include <ctype.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <langinfo.h> #ifndef _LIBC # include "localcharset.h" #endif #include <locale.h> #include <wchar.h> #include <wctype.h> #include <stdint.h> #if defined _LIBC # include <bits/libc-lock.h> #else # define __libc_lock_init(NAME) do { } while (0) # define __libc_lock_lock(NAME) do { } while (0) # define __libc_lock_unlock(NAME) do { } while (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 #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include <locale/localeinfo.h> # include <locale/elem-hash.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) \ INTUSE(__dcgettext) (_libc_intl_domainname, msgid, LC_MESSAGES) # endif #else # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif /* For loser systems without the definition. */ #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC # define RE_ENABLE_I18N #endif #if __GNUC__ >= 3 # define BE(expr, val) __builtin_expect (expr, val) #else # define BE(expr, val) (expr) # ifdef _LIBC # define inline # endif #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 # define __wctype wctype # define __iswctype iswctype # define __btowc btowc # define __wcrtomb wcrtomb # define __mbrtowc mbrtowc # define __regfree regfree # define attribute_hidden #endif /* not _LIBC */ #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) # define __attribute(arg) __attribute__ (arg) #else # define __attribute(arg) #endif typedef __re_idx_t Idx; /* Special return value for failure to match. */ #define REG_MISSING ((Idx) -1) /* Special return value for internal error. */ #define REG_ERROR ((Idx) -2) /* Test whether N is a valid index, and is not one of the above. */ #ifdef _REGEX_LARGE_OFFSETS # define REG_VALID_INDEX(n) ((Idx) (n) < REG_ERROR) #else # define REG_VALID_INDEX(n) (0 <= (n)) #endif /* Test whether N is a valid nonzero index. */ #ifdef _REGEX_LARGE_OFFSETS # define REG_VALID_NONZERO_INDEX(n) ((Idx) ((n) - 1) < (Idx) (REG_ERROR - 1)) #else # define REG_VALID_NONZERO_INDEX(n) (0 < (n)) #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. For portability to hosts with padding bits, do not use '(sizeof (bitset_word_t) * CHAR_BIT)'; instead, deduce it directly from BITSET_WORD_MAX. Avoid greater-than-32-bit integers and unconditional shifts by more than 31 bits, as they're not portable. */ #if BITSET_WORD_MAX == 0xffffffffUL # define BITSET_WORD_BITS 32 #elif BITSET_WORD_MAX >> 31 >> 4 == 1 # define BITSET_WORD_BITS 36 #elif BITSET_WORD_MAX >> 31 >> 16 == 1 # define BITSET_WORD_BITS 48 #elif BITSET_WORD_MAX >> 31 >> 28 == 1 # define BITSET_WORD_BITS 60 #elif BITSET_WORD_MAX >> 31 >> 31 >> 1 == 1 # define BITSET_WORD_BITS 64 #elif BITSET_WORD_MAX >> 31 >> 31 >> 9 == 1 # define BITSET_WORD_BITS 72 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 3 == 1 # define BITSET_WORD_BITS 128 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 == 1 # define BITSET_WORD_BITS 256 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 > 1 # define BITSET_WORD_BITS 257 /* any value > SBC_MAX will do here */ # if BITSET_WORD_BITS <= SBC_MAX # error "Invalid SBC_MAX" # endif #else # error "Add case for new bitset_word_t size" #endif /* 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 __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 internal_function #endif static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) internal_function; #ifdef RE_ENABLE_I18N static void build_wcs_buffer (re_string_t *pstr) internal_function; static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr) internal_function; #endif /* RE_ENABLE_I18N */ static void build_upper_buffer (re_string_t *pstr) internal_function; static void re_string_translate_buffer (re_string_t *pstr) internal_function; static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) internal_function __attribute ((pure)); #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)) #include <alloca.h> #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 /* alloca is implemented with malloc, so just use malloc. */ # define __libc_use_alloca(n) 0 # undef alloca # define alloca(n) malloc (n) # endif #endif #ifndef MAX # define MAX(a,b) ((a) < (b) ? (b) : (a)) #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; char more; char unused; unsigned short int eps_reachable_subexps_map; }; typedef struct { /* The string object corresponding to the input string. */ re_string_t input; #if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) const re_dfa_t *const dfa; #else const re_dfa_t *dfa; #endif /* 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 #ifdef _LIBC __libc_lock_define (, lock) #endif }; #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; /* Inline 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 /* Inline functions for re_string. */ static inline int internal_function __attribute ((pure)) 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 inline wint_t internal_function __attribute ((pure)) 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]; } static int internal_function __attribute ((pure)) re_string_elem_size_at (const re_string_t *pstr, Idx idx) { # ifdef _LIBC const unsigned char *p, *extra; const int32_t *table, *indirect; int32_t tmp; # include <locale/weight.h> 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; tmp = findidx (&p); return p - pstr->mbs - idx; } else # endif /* _LIBC */ return 1; } #endif /* RE_ENABLE_I18N */ #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 #if __GNUC_PREREQ (3,4) # undef __attribute_warn_unused_result__ # define __attribute_warn_unused_result__ \ __attribute__ ((__warn_unused_result__)) #else # define __attribute_warn_unused_result__ /* empty */ #endif #endif /* _REGEX_INTERNAL_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/regexec.c����������������������������������������������������������������0000664�0000000�0000000�00000377736�11671051007�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, Idx n) internal_function; static void match_ctx_clean (re_match_context_t *mctx) internal_function; static void match_ctx_free (re_match_context_t *cache) internal_function; static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, Idx str_idx, Idx from, Idx to) internal_function; static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) internal_function; static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) internal_function; static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) internal_function; 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) internal_function; 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) internal_function; 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) internal_function; 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) internal_function; static unsigned int re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated) internal_function; static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx) internal_function; static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first) internal_function; static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx) internal_function; 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) internal_function; static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes) internal_function; 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) internal_function; static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) internal_function; #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) internal_function; #endif /* RE_ENABLE_I18N */ static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) internal_function; 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) internal_function; 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) internal_function; static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates) internal_function; 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) internal_function; 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) internal_function; 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) internal_function; 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) internal_function; 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) internal_function; static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num) internal_function; static re_dfastate_t *find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) internal_function; static re_dfastate_t *transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) internal_function; static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state) internal_function; static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx) internal_function; #if 0 static re_dfastate_t *transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *pstate) internal_function; #endif #ifdef RE_ENABLE_I18N static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) internal_function; #endif /* RE_ENABLE_I18N */ static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) internal_function; static reg_errcode_t get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) internal_function; 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) internal_function; static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type) internal_function; 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) internal_function; 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) internal_function; static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type) internal_function; 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) internal_function; 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) internal_function; static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) internal_function; #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) internal_function; # ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t name_len) internal_function; # 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) internal_function; static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx) internal_function; static reg_errcode_t extend_buffers (re_match_context_t *mctx) internal_function; /* 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. We return 0 if we find a match and REG_NOMATCH if not. */ int regexec (preg, string, nmatch, pmatch, eflags) const regex_t *_Restrict_ preg; const char *_Restrict_ string; size_t nmatch; regmatch_t pmatch[_Restrict_arr_]; int eflags; { reg_errcode_t err; Idx start, length; #ifdef _LIBC re_dfa_t *dfa = (re_dfa_t *) preg->buffer; #endif 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); } __libc_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); __libc_lock_unlock (dfa->lock); return err != REG_NOERROR; } #ifdef _LIBC # 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. Return value -1 means no match was found and -2 indicates an internal error. */ regoff_t re_match (bufp, string, length, start, regs) struct re_pattern_buffer *bufp; const char *string; Idx length, 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 (bufp, string, length, start, range, regs) struct re_pattern_buffer *bufp; const char *string; Idx length, 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 (bufp, string1, length1, string2, length2, start, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; Idx length1, length2, start, stop; struct re_registers *regs; { 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 (bufp, string1, length1, string2, length2, start, range, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; Idx length1, length2, start, stop; regoff_t range; struct re_registers *regs; { 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 internal_function 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 = length1 + length2; char *s = NULL; if (BE (length1 < 0 || length2 < 0 || stop < 0 || len < length1, 0)) return -2; /* Concatenate the strings. */ if (length2 > 0) if (length1 > 0) { s = re_malloc (char, len); if (BE (s == NULL, 0)) 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 internal_function 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; #ifdef _LIBC re_dfa_t *dfa = (re_dfa_t *) bufp->buffer; #endif Idx last_start = start + range; /* Check for out-of-range. */ if (BE (start < 0 || start > length, 0)) return -1; if (BE (length < last_start || (0 <= range && last_start < start), 0)) last_start = length; else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0)) last_start = 0; __libc_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 (BE (bufp->no_sub, 0)) regs = NULL; /* We need at least 1 register. */ if (regs == NULL) nregs = 1; else if (BE (bufp->regs_allocated == REGS_FIXED && regs->num_regs <= bufp->re_nsub, 0)) { nregs = regs->num_regs; if (BE (nregs < 1, 0)) { /* Nothing can be copied to regs. */ regs = NULL; nregs = 1; } } else nregs = bufp->re_nsub + 1; pmatch = re_malloc (regmatch_t, nregs); if (BE (pmatch == NULL, 0)) { 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 ther regs with -1's when no match was found. */ if (result != REG_NOERROR) rval = -1; 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 (BE (bufp->regs_allocated == REGS_UNALLOCATED, 0)) rval = -2; } if (BE (rval == 0, 1)) { if (ret_len) { assert (pmatch[0].rm_so == start); rval = pmatch[0].rm_eo - start; } else rval = pmatch[0].rm_so; } re_free (pmatch); out: __libc_lock_unlock (dfa->lock); return rval; } static unsigned int internal_function 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 (BE (regs->start == NULL, 0)) return REGS_UNALLOCATED; regs->end = re_malloc (regoff_t, need_regs); if (BE (regs->end == NULL, 0)) { 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 (BE (need_regs > regs->num_regs, 0)) { regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); regoff_t *new_end; if (BE (new_start == NULL, 0)) return REGS_UNALLOCATED; new_end = re_realloc (regs->end, regoff_t, need_regs); if (BE (new_end == NULL, 0)) { re_free (new_start); return REGS_UNALLOCATED; } regs->start = new_start; regs->end = new_end; regs->num_regs = need_regs; } } else { assert (regs_allocated == REGS_FIXED); /* This function may not be called with REGS_FIXED and nregs too big. */ assert (regs->num_regs >= nregs); 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 (bufp, regs, num_regs, starts, ends) struct re_pattern_buffer *bufp; struct re_registers *regs; __re_size_t num_regs; regoff_t *starts, *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 (s) 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 internal_function __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 = (const re_dfa_t *) preg->buffer; Idx left_lim, right_lim; int incr; bool fl_longest_match; int match_kind; Idx match_first; Idx match_last = REG_MISSING; Idx extra_nmatch; bool sb; int ch; #if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) re_match_context_t mctx = { .dfa = dfa }; #else re_match_context_t mctx; #endif char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate && start != last_start && !preg->can_be_null) ? preg->fastmap : NULL); RE_TRANSLATE_TYPE t = preg->translate; #if !(defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) memset (&mctx, '\0', sizeof (re_match_context_t)); mctx.dfa = dfa; #endif extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; nmatch -= extra_nmatch; /* Check if the DFA haven't been compiled. */ if (BE (preg->used == 0 || dfa->init_state == NULL || dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL, 0)) return REG_NOMATCH; #ifdef DEBUG /* We assume front-end functions already check them. */ assert (0 <= last_start && last_start <= length); #endif /* 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 (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) 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 (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= mctx.input.bufs_len, 0)) { err = REG_ESPACE; goto free_return; } mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); if (BE (mctx.state_log == NULL, 0)) { err = REG_ESPACE; goto free_return; } } else mctx.state_log = NULL; match_first = start; mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF; /* Check incrementally whether of not the input string match. */ 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 (BE (match_first < right_lim, 1) && !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 (BE (match_first < right_lim, 1) && !fastmap[(unsigned char) string[match_first]]) ++match_first; forward_match_found_start_or_reached_end: if (BE (match_first == right_lim, 0)) { 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 (BE (offset >= (__re_size_t) mctx.input.valid_raw_len, 0)) { err = re_string_reconstruct (&mctx.input, match_first, eflags); if (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) 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 != REG_MISSING) { if (BE (match_last == REG_ERROR, 0)) { 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 (BE (err != REG_NOMATCH, 0)) goto free_return; match_last = REG_MISSING; } else break; /* We found a match. */ } } match_ctx_clean (&mctx); } #ifdef DEBUG assert (match_last != REG_MISSING); assert (err == REG_NOERROR); #endif /* 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 (BE (err != REG_NOERROR, 0)) goto free_return; } /* At last, add the offset to the each registers, since we slided 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 (BE (mctx.input.offsets_needed != 0, 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 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 internal_function __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; #ifdef DEBUG assert (mctx->state_log != NULL); #endif match_last = mctx->match_last; halt_node = mctx->last_node; /* Avoid overflow. */ if (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= match_last, 0)) return REG_ESPACE; sifted_states = re_malloc (re_dfastate_t *, match_last + 1); if (BE (sifted_states == NULL, 0)) { ret = REG_ESPACE; goto free_return; } if (dfa->nbackref) { lim_states = re_malloc (re_dfastate_t *, match_last + 1); if (BE (lim_states == NULL, 0)) { 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 (BE (ret != REG_NOERROR, 0)) goto free_return; if (sifted_states[0] != NULL || lim_states[0] != NULL) break; do { --match_last; if (! REG_VALID_INDEX (match_last)) { 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 (BE (ret != REG_NOERROR, 0)) 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 (BE (ret != REG_NOERROR, 0)) 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)) internal_function 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 REG_MISSING if there is no match, and return REG_ERROR 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 assume that the maching starts from the current index of the buffer. */ static Idx internal_function __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 = REG_MISSING; 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 (BE (cur_state == NULL, 0)) { assert (err == REG_ESPACE); return REG_ERROR; } 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 (BE (dfa->nbackref, 0)) { at_init_state = false; err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); if (BE (err != REG_NOERROR, 0)) return err; if (cur_state->has_backref) { err = transit_state_bkref (mctx, &cur_state->nodes); if (BE (err != REG_NOERROR, 0)) return err; } } } /* If the RE accepts NULL string. */ if (BE (cur_state->halt, 0)) { 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 (BE (next_char_idx >= mctx->input.bufs_len, 0) || (BE (next_char_idx >= mctx->input.valid_len, 0) && mctx->input.valid_len < mctx->input.len)) { err = extend_buffers (mctx); if (BE (err != REG_NOERROR, 0)) { assert (err == REG_ESPACE); return REG_ERROR; } } 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 (BE (err != REG_NOERROR, 0)) return REG_ERROR; if (mctx->state_log == NULL || (match && !fl_longest_match) || (cur_state = find_recover_state (&err, mctx)) == NULL) break; } if (BE (at_init_state, 0)) { 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 internal_function 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 internal_function check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx) { Idx i; unsigned int context; #ifdef DEBUG assert (state->halt); #endif 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 REG_MISSING in case of errors. */ static Idx internal_function proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, Idx *pidx, Idx node, re_node_set *eps_via_nodes, struct re_fail_stack_t *fs) { const re_dfa_t *const dfa = mctx->dfa; Idx i; bool ok; 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]; Idx dest_node; ok = re_node_set_insert (eps_via_nodes, node); if (BE (! ok, 0)) return REG_ERROR; /* Pick up a valid destination, or return REG_MISSING if none is found. */ for (dest_node = REG_MISSING, i = 0; i < edests->nelem; ++i) { Idx candidate = edests->elems[i]; if (!re_node_set_contains (cur_nodes, candidate)) continue; if (dest_node == REG_MISSING) 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, eps_via_nodes)) return REG_ERROR; /* 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; naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; if (fs != NULL) { if (regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) return REG_MISSING; else if (naccepted) { char *buf = (char *) re_string_get_buffer (&mctx->input); if (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, naccepted) != 0) return REG_MISSING; } } if (naccepted == 0) { Idx dest_node; ok = re_node_set_insert (eps_via_nodes, node); if (BE (! ok, 0)) return REG_ERROR; 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 REG_MISSING; re_node_set_empty (eps_via_nodes); return dest_node; } } return REG_MISSING; } static reg_errcode_t internal_function __attribute_warn_unused_result__ push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, 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 = realloc (fs->stack, (sizeof (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, nregs); if (fs->stack[num].regs == NULL) return REG_ESPACE; memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); return err; } static Idx internal_function pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes) { Idx num = --fs->num; assert (REG_VALID_INDEX (num)); *pidx = fs->stack[num].idx; memcpy (regs, fs->stack[num].regs, 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; return fs->stack[num].node; } /* 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 internal_function __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 = (const re_dfa_t *) 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 }; regmatch_t *prev_idx_match; bool prev_idx_match_malloced = false; #ifdef DEBUG assert (nmatch > 1); assert (mctx->state_log != NULL); #endif 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 (__libc_use_alloca (nmatch * sizeof (regmatch_t))) prev_idx_match = (regmatch_t *) alloca (nmatch * sizeof (regmatch_t)); else { prev_idx_match = re_malloc (regmatch_t, nmatch); if (prev_idx_match == NULL) { free_fail_stack_return (fs); return REG_ESPACE; } prev_idx_match_malloced = true; } 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) { Idx reg_idx; if (fs) { for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) break; if (reg_idx == nmatch) { re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); return free_fail_stack_return (fs); } cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, &eps_via_nodes); } else { re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); return REG_NOERROR; } } /* Proceed to next node. */ cur_node = proceed_next_node (mctx, nmatch, pmatch, &idx, cur_node, &eps_via_nodes, fs); if (BE (! REG_VALID_INDEX (cur_node), 0)) { if (BE (cur_node == REG_ERROR, 0)) { re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); free_fail_stack_return (fs); return REG_ESPACE; } if (fs) cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, &eps_via_nodes); else { re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); return REG_NOMATCH; } } } re_node_set_free (&eps_via_nodes); if (prev_idx_match_malloced) re_free (prev_idx_match); return free_fail_stack_return (fs); } static reg_errcode_t internal_function 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 internal_function 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) { Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; if (reg_num < nmatch) { /* We are at the last node of this sub expression. */ 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 internal_function 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; #ifdef DEBUG assert (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); #endif /* 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 (BE (err != REG_NOERROR, 0)) return err; err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) goto free_return; } err = REG_NOERROR; free_return: re_node_set_free (&cur_dest); return err; } static reg_errcode_t internal_function __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; #ifdef DEBUG re_token_type_t type = dfa->nodes[prev_node].type; assert (!IS_EPSILON_NODE (type)); #endif #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 (BE (! ok, 0)) return REG_ESPACE; } return REG_NOERROR; } /* Helper functions. */ static reg_errcode_t internal_function 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 || (next_state_log_idx >= mctx->input.valid_len && mctx->input.valid_len < mctx->input.len)) { reg_errcode_t err; err = extend_buffers (mctx); if (BE (err != REG_NOERROR, 0)) 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 internal_function 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 (BE (err != REG_NOERROR, 0)) return err; dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); re_node_set_free (&merged_set); if (BE (err != REG_NOERROR, 0)) return err; } } return REG_NOERROR; } static reg_errcode_t internal_function 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 (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) return err; } } sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; } if (candidates && mctx->state_log[str_idx]->has_backref) { err = sift_states_bkref (mctx, sctx, str_idx, candidates); if (BE (err != REG_NOERROR, 0)) return err; } return REG_NOERROR; } static reg_errcode_t internal_function __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 (BE (err != REG_NOERROR, 0)) return err; if (!state->inveclosure.alloc) { err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); if (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) return REG_ESPACE; } } return re_node_set_add_intersect (dest_nodes, candidates, &state->inveclosure); } static reg_errcode_t internal_function 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] : REG_MISSING); if ((!re_node_set_contains (inv_eclosure, edst1) && re_node_set_contains (dest_nodes, edst1)) || (REG_VALID_NONZERO_INDEX (edst2) && !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 (BE (err != REG_NOERROR, 0)) { 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 internal_function 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 internal_function 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 != REG_MISSING) { 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 internal_function 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 internal_function 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 = REG_MISSING; Idx cls_node = REG_MISSING; 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 (REG_VALID_INDEX (ops_node)) { err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; } /* Check the limitation of the close subexpression. */ if (REG_VALID_INDEX (cls_node)) 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 (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) return err; } } } } return REG_NOERROR; } static reg_errcode_t internal_function __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 == REG_MISSING) 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 (BE (err != REG_NOERROR, 0)) 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 (BE (! ok, 0)) { err = REG_ESPACE; goto free_return; } cur_state = local_sctx.sifted_states[str_idx]; err = sift_states_backward (mctx, &local_sctx); if (BE (err != REG_NOERROR, 0)) goto free_return; if (sctx->limited_states != NULL) { err = merge_state_array (dfa, sctx->limited_states, local_sctx.sifted_states, str_idx + 1); if (BE (err != REG_NOERROR, 0)) 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 internal_function 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 could'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. If STATE can accept a multibyte char/collating element/back reference update the destination of STATE_LOG. */ static re_dfastate_t * internal_function __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 (BE (state->accept_mb, 0)) { *err = transit_state_mb (mctx, state); if (BE (*err != REG_NOERROR, 0)) 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 (BE (trtable != NULL, 1)) return trtable[ch]; trtable = state->word_trtable; if (BE (trtable != NULL, 1)) { 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 * internal_function 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 (BE (*err != REG_NOERROR, 0)) 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 (BE (dfa->nbackref, 0) && 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 (BE (*err != REG_NOERROR, 0)) return NULL; /* If the next state has back references. */ if (next_state->has_backref) { *err = transit_state_bkref (mctx, &next_state->nodes); if (BE (*err != REG_NOERROR, 0)) 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 * internal_function 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 correspoding back references. */ static reg_errcode_t internal_function 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 (BE (err != REG_NOERROR, 0)) 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. */ 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 (BE (*err != REG_NOERROR, 0)) 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 (BE (*err != REG_NOERROR, 0)) { 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 internal_function 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 (BE (err != REG_NOERROR, 0)) return err; #ifdef DEBUG assert (dfa->nexts[cur_node_idx] != REG_MISSING); #endif 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 (BE (err != REG_NOERROR, 0)) 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 (BE (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR, 0)) return err; } return REG_NOERROR; } #endif /* RE_ENABLE_I18N */ static reg_errcode_t internal_function 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 (BE (err != REG_NOERROR, 0)) goto free_return; /* And add the epsilon closures (which is `new_dest_nodes') of the backreference to appropriate state_log. */ #ifdef DEBUG assert (dfa->nexts[node_idx] != REG_MISSING); #endif 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 (BE (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) { 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 (BE (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) goto free_return; err = transit_state_bkref (mctx, new_dest_nodes); if (BE (err != REG_NOERROR, 0)) 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 internal_function __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 != REG_MISSING) { 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 (BE (bkref_str_off + sl_str_diff > mctx->input.valid_len, 0)) { /* 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 (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) 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 (BE (bkref_str_off >= mctx->input.valid_len, 0)) { /* If we are at the end of the input, we cannot match. */ if (bkref_str_off >= mctx->input.len) break; err = extend_buffers (mctx); if (BE (err != REG_NOERROR, 0)) 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 == REG_MISSING) 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 (BE (err != REG_NOERROR, 0)) return err; sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); if (BE (sub_last == NULL, 0)) return REG_ESPACE; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); if (err == REG_NOMATCH) continue; } } 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 internal_function 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 (BE (err != REG_NOERROR, 0)) 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 internal_function 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 REG_MISSING; } /* 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, or REG_NOMATCH otherwise. */ static reg_errcode_t internal_function __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 (BE (path->alloc < last_str + mctx->max_mb_elem_len + 1, 0)) { re_dfastate_t **new_array; Idx old_alloc = path->alloc; Idx new_alloc = old_alloc + last_str + mctx->max_mb_elem_len + 1; if (BE (new_alloc < old_alloc, 0) || BE (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc, 0)) return REG_ESPACE; new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); if (BE (new_array == NULL, 0)) 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 (BE (err != REG_NOERROR, 0)) return err; err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (BE (err != REG_NOERROR, 0)) { 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 (BE (err != REG_NOERROR, 0)) 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 (BE (err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } } cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (BE (cur_state == NULL && err != REG_NOERROR, 0)) { 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 (BE (err != REG_NOERROR, 0)) { 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 (BE (err != REG_NOERROR, 0)) { 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 (BE (err != REG_NOERROR, 0)) { re_node_set_free (&next_nodes); return err; } err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (BE (err != REG_NOERROR, 0)) { 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 (BE (cur_state == NULL && err != REG_NOERROR, 0)) { 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 internal_function __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]; #ifdef DEBUG re_token_type_t type = dfa->nodes[cur_node].type; assert (!IS_EPSILON_NODE (type)); #endif #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 (BE (err != REG_NOERROR, 0)) { re_node_set_free (&union_set); return err; } } ok = re_node_set_insert (&union_set, next_node); if (BE (! ok, 0)) { re_node_set_free (&union_set); return REG_ESPACE; } mctx->state_log[next_idx] = re_acquire_state (&err, dfa, &union_set); if (BE (mctx->state_log[next_idx] == NULL && err != REG_NOERROR, 0)) { 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 (BE (! ok, 0)) { 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 internal_function 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; #ifdef DEBUG assert (cur_nodes->nelem); #endif err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); if (BE (err != REG_NOERROR, 0)) 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 == REG_MISSING) { /* There are no problematic nodes, just merge them. */ err = re_node_set_merge (&new_nodes, eclosure); if (BE (err != REG_NOERROR, 0)) { 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 (BE (err != REG_NOERROR, 0)) { 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 internal_function __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 (BE (! ok, 0)) return REG_ESPACE; } break; } ok = re_node_set_insert (dst_nodes, cur_node); if (BE (! ok, 0)) 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 (BE (err != REG_NOERROR, 0)) 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 internal_function __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 == REG_MISSING) 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 (BE (err != REG_NOERROR || err2 != REG_NOERROR || err3 != REG_NOERROR, 0)) { 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 (BE (err != REG_NOERROR || ! ok, 0)) { 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 (BE (err != REG_NOERROR, 0)) return err; } mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); re_node_set_free (&union_set); if (BE (mctx->state_log[to_idx] == NULL && err != REG_NOERROR, 0)) return err; } } while (ent++->more); return REG_NOERROR; } /* Build transition table for the state. Return true if successful. */ static bool internal_function 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; bool dests_node_malloced = false; bool dest_states_malloced = false; Idx ndests; /* Number of the destination states from `state'. */ re_dfastate_t **trtable; re_dfastate_t **dest_states = NULL, **dest_states_word, **dest_states_nl; re_node_set follows, *dests_node; bitset_t *dests_ch; bitset_t acceptable; struct dests_alloc { re_node_set dests_node[SBC_MAX]; bitset_t dests_ch[SBC_MAX]; } *dests_alloc; /* 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. */ if (__libc_use_alloca (sizeof (struct dests_alloc))) dests_alloc = (struct dests_alloc *) alloca (sizeof (struct dests_alloc)); else { dests_alloc = re_malloc (struct dests_alloc, 1); if (BE (dests_alloc == NULL, 0)) return false; dests_node_malloced = true; } dests_node = dests_alloc->dests_node; dests_ch = dests_alloc->dests_ch; /* Initialize transiton 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 (BE (! REG_VALID_NONZERO_INDEX (ndests), 0)) { if (dests_node_malloced) free (dests_alloc); if (ndests == 0) { state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (BE (state->trtable == NULL, 0)) return false; return true; } return false; } err = re_node_set_alloc (&follows, ndests + 1); if (BE (err != REG_NOERROR, 0)) goto out_free; /* Avoid arithmetic overflow in size calculation. */ if (BE ((((SIZE_MAX - (sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX) / (3 * sizeof (re_dfastate_t *))) < ndests), 0)) goto out_free; if (__libc_use_alloca ((sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX + ndests * 3 * sizeof (re_dfastate_t *))) dest_states = (re_dfastate_t **) alloca (ndests * 3 * sizeof (re_dfastate_t *)); else { dest_states = (re_dfastate_t **) malloc (ndests * 3 * sizeof (re_dfastate_t *)); if (BE (dest_states == NULL, 0)) { out_free: if (dest_states_malloced) free (dest_states); re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); if (dests_node_malloced) free (dests_alloc); return false; } dest_states_malloced = true; } dest_states_word = dest_states + ndests; dest_states_nl = dest_states_word + ndests; 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 != REG_MISSING) { err = re_node_set_merge (&follows, dfa->eclosures + next_node); if (BE (err != REG_NOERROR, 0)) goto out_free; } } dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); if (BE (dest_states[i] == NULL && err != REG_NOERROR, 0)) 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 (BE (dest_states_word[i] == NULL && err != REG_NOERROR, 0)) 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 (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0)) 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 (!BE (need_word_trtable, 0)) { /* 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 (BE (trtable == NULL, 0)) 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 (BE (elem & 1, 0)) { /* 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 (BE (trtable == NULL, 0)) 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 (BE (elem & 1, 0)) { /* 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; } } if (dest_states_malloced) free (dest_states); re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); if (dests_node_malloced) free (dests_alloc); 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]. This function return the number of destinations. */ static Idx internal_function 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 (BE (err != REG_NOERROR, 0)) goto error_return; ++ndests; } /* Put the position in the current group. */ ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); if (BE (! ok, 0)) 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 (BE (err != REG_NOERROR, 0)) goto error_return; ++ndests; bitset_empty (accepts); } } return ndests; error_return: for (j = 0; j < ndests; ++j) re_node_set_free (dests_node + j); return REG_MISSING; } #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. */ static int internal_function 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 (BE (node->type == OP_UTF8_PERIOD, 0)) { unsigned char c = re_string_byte_at (input, str_idx), d; if (BE (c < 0xc2, 1)) 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; int32_t idx; /* This #include defines a local function! */ # include <locale/weight.h> /* 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? */ 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 (&cp); if (idx > 0) for (i = 0; i < cset->nequiv_classes; ++i) { int32_t equiv_class_idx = cset->equiv_classes[i]; size_t weight_len = weights[idx & 0xffffff]; if (weight_len == weights[equiv_class_idx & 0xffffff] && (idx >> 24) == (equiv_class_idx >> 24)) { Idx cnt = 0; idx &= 0xffffff; equiv_class_idx &= 0xffffff; while (cnt <= weight_len && (weights[equiv_class_idx + 1 + cnt] == weights[idx + 1 + cnt])) ++cnt; if (cnt > weight_len) { match_len = elem_len; goto check_node_accept_bytes_match; } } } } } else # endif /* _LIBC */ { /* match with range expression? */ #if __GNUC__ >= 2 && ! (__STDC_VERSION__ < 199901L && defined __STRICT_ANSI__) wchar_t cmp_buf[] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'}; #else wchar_t cmp_buf[] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'}; cmp_buf[2] = wc; #endif for (i = 0; i < cset->nranges; ++i) { cmp_buf[0] = cset->range_starts[i]; cmp_buf[4] = cset->range_ends[i]; if (wcscoll (cmp_buf, cmp_buf + 2) <= 0 && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0) { 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 internal_function 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) * (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 internal_function 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 internal_function __attribute_warn_unused_result__ extend_buffers (re_match_context_t *mctx) { reg_errcode_t ret; re_string_t *pstr = &mctx->input; /* Avoid overflow. */ if (BE (SIZE_MAX / 2 / sizeof (re_dfastate_t *) <= pstr->bufs_len, 0)) return REG_ESPACE; /* Double the lengthes of the buffers. */ ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); if (BE (ret != REG_NOERROR, 0)) 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 (BE (new_array == NULL, 0)) 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 (BE (ret != REG_NOERROR, 0)) 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 internal_function __attribute_warn_unused_result__ match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) { mctx->eflags = eflags; mctx->match_last = REG_MISSING; if (n > 0) { /* Avoid overflow. */ size_t max_object_size = MAX (sizeof (struct re_backref_cache_entry), sizeof (re_sub_match_top_t *)); if (BE (SIZE_MAX / max_object_size < n, 0)) 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 (BE (mctx->bkref_ents == NULL || mctx->sub_tops == NULL, 0)) 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 internal_function 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); } free (top); } mctx->nsub_tops = 0; mctx->nbkref_ents = 0; } /* Free all the memory associated with MCTX. */ static void internal_function 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 internal_function __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 (BE (new_entry == NULL, 0)) { 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 REG_MISSING if none is found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ static Idx internal_function 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 REG_MISSING; } /* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches at STR_IDX. */ static reg_errcode_t internal_function __attribute_warn_unused_result__ match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) { #ifdef DEBUG assert (mctx->sub_tops != NULL); assert (mctx->asub_tops > 0); #endif if (BE (mctx->nsub_tops == mctx->asub_tops, 0)) { 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 (BE (new_array == NULL, 0)) 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 (BE (mctx->sub_tops[mctx->nsub_tops] == NULL, 0)) 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. */ static re_sub_match_last_t * internal_function match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) { re_sub_match_last_t *new_entry; if (BE (subtop->nlasts == subtop->alasts, 0)) { 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 (BE (new_array == NULL, 0)) return NULL; subtop->lasts = new_array; subtop->alasts = new_alasts; } new_entry = calloc (1, sizeof (re_sub_match_last_t)); if (BE (new_entry != NULL, 1)) { subtop->lasts[subtop->nlasts] = new_entry; new_entry->node = node; new_entry->str_idx = str_idx; ++subtop->nlasts; } return new_entry; } static void internal_function 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-20111211-stable/lib/relocatable.c������������������������������������������������������������0000664�0000000�0000000�00000037172�11671051007�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide relocatable packages. Copyright (C) 2003-2006, 2008-2011 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 Lesser General 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 <http://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 __WIN32__) && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #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 /* 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_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Win32, 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_PATH_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_PATH_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 Win32 platforms. */ #ifndef ENABLE_COSTLY_RELOCATABLE # if (defined _WIN32 || 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 __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, 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. opi 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 curr_prefix_len = cp - curr_installdir; char *curr_prefix; curr_prefix = (char *) xmalloc (curr_prefix_len + 1); #ifdef NO_XMALLOC if (curr_prefix == NULL) { free (curr_installdir); return NULL; } #endif memcpy (curr_prefix, curr_installdir, curr_prefix_len); curr_prefix[curr_prefix_len] = '\0'; free (curr_installdir); return 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 __WIN32__) && !defined __CYGWIN__ /* Native Win32 only. On Cygwin, it is better to use the Cygwin provided /proc interface, than to use native Win32 API and cygwin_conv_to_posix_path, because it supports longer file names (see <http://cygwin.com/ml/cygwin/2011-01/msg00410.html>). */ /* Determine the full pathname of the shared library when it is loaded. */ 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_PATH_WITH_DIR (location)) /* Shouldn't happen. */ return FALSE; shared_library_fullname = strdup (location); } return TRUE; } #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 /* WIN32 / Unix */ /* Return the full pathname of the current shared library. Return NULL if unknown. Guaranteed to work only on Linux, Cygwin and Woe32. */ static char * get_shared_library_fullname () { #if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) 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; } } } /* Nothing to relocate. */ return pathname; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/relocatable.h������������������������������������������������������������0000664�0000000�0000000�00000006102�11671051007�0017665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide relocatable packages. Copyright (C) 2003, 2005, 2008-2011 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 Lesser General 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 <http://www.gnu.org/licenses/>. */ #ifndef _RELOCATABLE_H #define _RELOCATABLE_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); /* 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, think about caching the result. Or free the return value if it was different from the argument pathname. */ /* 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); #else /* By default, we use the hardwired pathnames. */ #define relocate(pathname) (pathname) #endif #ifdef __cplusplus } #endif #endif /* _RELOCATABLE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/relocwrapper.c�����������������������������������������������������������0000664�0000000�0000000�00000014035�11671051007�0020114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Relocating wrapper program. Copyright (C) 2003, 2005-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ /* Dependencies: relocwrapper -> progname -> progreloc -> areadlink -> careadlinkat -> allocator -> readlink -> canonicalize-lgpl -> malloca -> readlink -> relocatable -> setenv -> malloca -> 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 /* 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-20111211-stable/lib/remove.c�����������������������������������������������������������������0000664�0000000�0000000�00000002776�11671051007�0016715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remove a file or directory. Copyright (C) 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 <http://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-20111211-stable/lib/rename.c�����������������������������������������������������������������0000664�0000000�0000000�00000032046�11671051007�0016660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around rename bugs in some systems. Copyright (C) 2001-2003, 2005-2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Volker Borchert, Eric Blake. */ #include <config.h> #include <stdio.h> #undef rename #if (defined _WIN32 || 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" /* 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)) { error = errno; free (src_temp); free (dst_temp); errno = error; 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; 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: if (src_temp != src) free (src_temp); if (dst_temp != dst) free (dst_temp); errno = rename_errno; return ret_val; } #endif /* ! W32 platform */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/renameat.c���������������������������������������������������������������0000664�0000000�0000000�00000010420�11671051007�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Rename a file relative to open directories. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #include <stdio.h> #if HAVE_RENAMEAT # include <errno.h> # include <stdbool.h> # include <stdlib.h> # include <string.h> # include <sys/stat.h> # include "dirname.h" # include "openat.h" # undef renameat /* 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. */ int rpl_renameat (int fd1, char const *src, int fd2, 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; int ret_val = -1; int rename_errno = ENOTDIR; struct stat src_st; struct stat dst_st; /* Let strace see any ENOENT failure. */ if (!src_len || !dst_len) return renameat (fd1, src, fd2, dst); src_slash = src[src_len - 1] == '/'; dst_slash = dst[dst_len - 1] == '/'; if (!src_slash && !dst_slash) return renameat (fd1, src, fd2, dst); /* 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 (lstatat (fd2, dst, &dst_st)) { if (errno != ENOENT || !S_ISDIR (src_st.st_mode)) return -1; } else if (!S_ISDIR (dst_st.st_mode)) { errno = ENOTDIR; return -1; } else if (!S_ISDIR (src_st.st_mode)) { errno = EISDIR; return -1; } # 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. */ 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 */ ret_val = renameat (fd1, src_temp, fd2, dst_temp); rename_errno = errno; out: if (src_temp != src) free (src_temp); if (dst_temp != dst) free (dst_temp); errno = rename_errno; return ret_val; } #else /* !HAVE_RENAMEAT */ # include "openat-priv.h" /* 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. */ int renameat (int fd1, char const *file1, int fd2, char const *file2) { return at_func2 (fd1, file1, fd2, file2, rename); } #endif /* !HAVE_RENAMEAT */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/resource-ext.h�����������������������������������������������������������0000664�0000000�0000000�00000003207�11671051007�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extra functions for resource usage. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/rewinddir.c��������������������������������������������������������������0000664�0000000�0000000�00000002661�11671051007�0017400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Restart reading the entries of a directory from the beginning. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #include <errno.h> #include "dirent-private.h" 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-20111211-stable/lib/rijndael-alg-fst.c�������������������������������������������������������0000664�0000000�0000000�00000127563�11671051007�0020545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rijndael-alg-fst.c --- Rijndael cipher implementation. * Copyright (C) 2005-2006, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* Adapted for gnulib by Simon Josefsson. * * Based on public domain "Optimised C code" retrieved from (SHA1 * 7c8e4b00d06685d1dbc6724a9e0d502353de339e): * 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-20111211-stable/lib/rijndael-alg-fst.h�������������������������������������������������������0000664�0000000�0000000�00000005251�11671051007�0020537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rijndael-alg-fst.h --- Rijndael cipher implementation. * Copyright (C) 2005, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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-20111211-stable/lib/rijndael-api-fst.c�������������������������������������������������������0000664�0000000�0000000�00000034670�11671051007�0020547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rijndael-api-fst.c --- Rijndael cipher implementation. * Copyright (C) 2005-2006, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* Adapted for gnulib by Simon Josefsson. * * Based on public domain "Optimised C code" retrieved from (SHA1 * 7c8e4b00d06685d1dbc6724a9e0d502353de339e): * 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; char block[16], *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--) { ((uint32_t *) block)[0] = ((uint32_t *) input)[0] ^ ((uint32_t *) iv)[0]; ((uint32_t *) block)[1] = ((uint32_t *) input)[1] ^ ((uint32_t *) iv)[1]; ((uint32_t *) block)[2] = ((uint32_t *) input)[2] ^ ((uint32_t *) iv)[2]; ((uint32_t *) block)[3] = ((uint32_t *) input)[3] ^ ((uint32_t *) iv)[3]; rijndaelEncrypt (key->rk, key->Nr, block, 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); outBuffer[k >> 3] ^= (block[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; char block[16], *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, input, 16 - padLen); memset (block + 16 - padLen, padLen, padLen); rijndaelEncrypt (key->rk, key->Nr, block, outBuffer); break; case RIJNDAEL_MODE_CBC: iv = cipher->IV; for (i = numBlocks; i > 0; i--) { ((uint32_t *) block)[0] = ((uint32_t *) input)[0] ^ ((uint32_t *) iv)[0]; ((uint32_t *) block)[1] = ((uint32_t *) input)[1] ^ ((uint32_t *) iv)[1]; ((uint32_t *) block)[2] = ((uint32_t *) input)[2] ^ ((uint32_t *) iv)[2]; ((uint32_t *) block)[3] = ((uint32_t *) input)[3] ^ ((uint32_t *) iv)[3]; rijndaelEncrypt (key->rk, key->Nr, block, 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[i] = input[i] ^ iv[i]; } for (i = 16 - padLen; i < 16; i++) { block[i] = (char) padLen ^ iv[i]; } rijndaelEncrypt (key->rk, key->Nr, block, 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; char block[16], *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); ((uint32_t *) block)[0] ^= ((uint32_t *) iv)[0]; ((uint32_t *) block)[1] ^= ((uint32_t *) iv)[1]; ((uint32_t *) block)[2] ^= ((uint32_t *) iv)[2]; ((uint32_t *) block)[3] ^= ((uint32_t *) iv)[3]; memcpy (cipher->IV, input, 16); memcpy (outBuffer, block, 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); 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[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; char block[16]; 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); padLen = block[15]; if (padLen >= 16) { return RIJNDAEL_BAD_DATA; } for (i = 16 - padLen; i < 16; i++) { if (block[i] != padLen) { return RIJNDAEL_BAD_DATA; } } memcpy (outBuffer, block, 16 - padLen); break; case RIJNDAEL_MODE_CBC: /* all blocks but last */ for (i = numBlocks - 1; i > 0; i--) { rijndaelDecrypt (key->rk, key->Nr, input, block); ((uint32_t *) block)[0] ^= ((uint32_t *) cipher->IV)[0]; ((uint32_t *) block)[1] ^= ((uint32_t *) cipher->IV)[1]; ((uint32_t *) block)[2] ^= ((uint32_t *) cipher->IV)[2]; ((uint32_t *) block)[3] ^= ((uint32_t *) cipher->IV)[3]; memcpy (cipher->IV, input, 16); memcpy (outBuffer, block, 16); input += 16; outBuffer += 16; } /* last block */ rijndaelDecrypt (key->rk, key->Nr, input, block); ((uint32_t *) block)[0] ^= ((uint32_t *) cipher->IV)[0]; ((uint32_t *) block)[1] ^= ((uint32_t *) cipher->IV)[1]; ((uint32_t *) block)[2] ^= ((uint32_t *) cipher->IV)[2]; ((uint32_t *) block)[3] ^= ((uint32_t *) cipher->IV)[3]; padLen = block[15]; if (padLen <= 0 || padLen > 16) { return RIJNDAEL_BAD_DATA; } for (i = 16 - padLen; i < 16; i++) { if (block[i] != padLen) { return RIJNDAEL_BAD_DATA; } } memcpy (outBuffer, block, 16 - padLen); break; default: return RIJNDAEL_BAD_CIPHER_STATE; } return 16 * numBlocks - padLen; } ������������������������������������������������������������������������gnulib-20111211-stable/lib/rijndael-api-fst.h�������������������������������������������������������0000664�0000000�0000000�00000020176�11671051007�0020550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rijndael-api-fst.h --- Rijndael cipher implementation. * Copyright (C) 2005, 2009-2011 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 2, or (at your * option) any later version. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * */ /* 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 *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 *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 *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 *outBuffer); #endif /* __RIJNDAEL_API_FST_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/rint.c�������������������������������������������������������������������0000664�0000000�0000000�00000006642�11671051007�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round according to the current rounding mode. Copyright (C) 2007, 2010-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 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. <http://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-20111211-stable/lib/rintf.c������������������������������������������������������������������0000664�0000000�0000000�00000001513�11671051007�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round according to the current rounding mode. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #define USE_FLOAT #include "rint.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/rintl.c������������������������������������������������������������������0000664�0000000�0000000�00000002000�11671051007�0016524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round according to the current rounding mode. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/rmdir.c������������������������������������������������������������������0000664�0000000�0000000�00000003034�11671051007�0016521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around rmdir bugs. Copyright (C) 1988, 1990, 1999, 2003-2006, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <string.h> #include "dosname.h" #undef rmdir /* 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-20111211-stable/lib/round.c������������������������������������������������������������������0000664�0000000�0000000�00000012025�11671051007�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round toward nearest, breaking ties away from zero. Copyright (C) 2007, 2010-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 /* 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-20111211-stable/lib/roundf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001535�11671051007�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round toward nearest, breaking ties away from zero. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #define USE_FLOAT #include "round.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/roundl.c�����������������������������������������������������������������0000664�0000000�0000000�00000002024�11671051007�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round toward nearest, breaking ties away from zero. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/rpmatch.c����������������������������������������������������������������0000664�0000000�0000000�00000013667�11671051007�0017057�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-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 <http://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) 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-20111211-stable/lib/safe-alloc.c�������������������������������������������������������������0000664�0000000�0000000�00000007073�11671051007�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* safe-alloc.c: safer memory allocation Copyright (C) 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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Written by Daniel Berrange <berrange@redhat.com>, 2008 */ #include <config.h> /* Specification. */ #include "safe-alloc.h" #include <stdlib.h> #include <stddef.h> #include <errno.h> /* Return 1 if an array of N objects, each of size S, cannot exist due to size arithmetic overflow. S must be positive and N must be nonnegative. This is a macro, not an inline function, so that it works correctly even when SIZE_MAX < N. By gnulib convention, SIZE_MAX represents overflow in size calculations, so the conservative dividend to use here is SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. However, malloc (SIZE_MAX) fails on all known hosts where sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for exactly-SIZE_MAX allocations on such hosts; this avoids a test and branch when S is known to be 1. This is the same as xalloc_oversized from xalloc.h */ #define safe_alloc_oversized(n, s) \ ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) /** * safe_alloc_alloc_n: * @ptrptr: pointer to pointer for address of allocated memory * @size: number of bytes to allocate * @count: number of elements to allocate * * Allocate an array of memory 'count' elements long, * each with 'size' bytes. Return the address of the * allocated memory in 'ptrptr'. The newly allocated * memory is filled with zeros. * * Return -1 on failure to allocate, zero on success */ int safe_alloc_alloc_n (void *ptrptr, size_t size, size_t count, int zeroed) { if (size == 0 || count == 0) { *(void **) ptrptr = NULL; return 0; } if (safe_alloc_oversized (count, size)) { errno = ENOMEM; return -1; } if (zeroed) *(void **) ptrptr = calloc (count, size); else *(void **) ptrptr = malloc (count * size); if (*(void **) ptrptr == NULL) return -1; return 0; } /** * safe_alloc_realloc_n: * @ptrptr: pointer to pointer for address of allocated memory * @size: number of bytes to allocate * @count: number of elements in array * * Resize the block of memory in 'ptrptr' to be an array of * 'count' elements, each 'size' bytes in length. Update 'ptrptr' * with the address of the newly allocated memory. On failure, * 'ptrptr' is not changed and still points to the original memory * block. The newly allocated memory is filled with zeros. * * Return -1 on failure to allocate, zero on success */ int safe_alloc_realloc_n (void *ptrptr, size_t size, size_t count) { void *tmp; if (size == 0 || count == 0) { free (*(void **) ptrptr); *(void **) ptrptr = NULL; return 0; } if (safe_alloc_oversized (count, size)) { errno = ENOMEM; return -1; } tmp = realloc (*(void **) ptrptr, size * count); if (!tmp) return -1; *(void **) ptrptr = tmp; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/safe-alloc.h�������������������������������������������������������������0000664�0000000�0000000�00000007436�11671051007�0017431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* safe-alloc.h: safer memory allocation Copyright (C) 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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Written by Daniel Berrange <berrange@redhat.com>, 2008 */ #ifndef SAFE_ALLOC_H_ # define SAFE_ALLOC_H_ # include <stdlib.h> #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 _GL_ATTRIBUTE_RETURN_CHECK # if __GNUC_PREREQ (3, 4) # define _GL_ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__)) # else # define _GL_ATTRIBUTE_RETURN_CHECK # endif # endif /* Don't call these directly - use the macros below */ int safe_alloc_alloc_n (void *ptrptr, size_t size, size_t count, int zeroed) _GL_ATTRIBUTE_RETURN_CHECK; int safe_alloc_realloc_n (void *ptrptr, size_t size, size_t count) _GL_ATTRIBUTE_RETURN_CHECK; /** * ALLOC: * @ptr: pointer to hold address of 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) \ safe_alloc_alloc_n (&(ptr), sizeof (*(ptr)), 1, 1) /** * ALLOC_N: * @ptr: pointer to hold address of 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_alloc_n (&(ptr), sizeof (*(ptr)), (count), 1) /** * ALLOC_N_UNINITIALIZED: * @ptr: pointer to hold address of 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_alloc_n (&(ptr), sizeof (*(ptr)), (count), 0) /** * REALLOC_N: * @ptr: pointer to hold address of 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_realloc_n (&(ptr), sizeof (*(ptr)), (count)) /** * FREE: * @ptr: pointer holding address to be freed * * Free the memory stored in 'ptr' and update to point * to NULL. */ # define FREE(ptr) \ do \ { \ free (ptr); \ (ptr) = NULL; \ } \ while (0) #endif /* SAFE_ALLOC_H_ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/safe-read.c��������������������������������������������������������������0000664�0000000�0000000�00000004147�11671051007�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read and write that retries after interrupts. Copyright (C) 1993-1994, 1998, 2002-2006, 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 <http://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 <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) { /* Work around a bug in Tru64 5.1. Attempting to read more than INT_MAX bytes fails with errno == EINVAL. See <http://lists.gnu.org/archive/html/bug-gnu-utils/2002-04/msg00010.html>. When decreasing COUNT, keep it block-aligned. */ enum { BUGGY_READ_MAXIMUM = INT_MAX & ~8191 }; for (;;) { ssize_t result = rw (fd, buf, count); if (0 <= result) return result; else if (IS_EINTR (errno)) continue; else if (errno == EINVAL && BUGGY_READ_MAXIMUM < count) count = BUGGY_READ_MAXIMUM; else return result; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/safe-read.h��������������������������������������������������������������0000664�0000000�0000000�00000003433�11671051007�0017243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read() that retries after interrupts. Copyright (C) 2002, 2006, 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 <http://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: MacOS 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-20111211-stable/lib/safe-write.c�������������������������������������������������������������0000664�0000000�0000000�00000001452�11671051007�0017454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write that retries after interrupts. Copyright (C) 2002, 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 <http://www.gnu.org/licenses/>. */ #define SAFE_WRITE #include "safe-read.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/safe-write.h�������������������������������������������������������������0000664�0000000�0000000�00000003333�11671051007�0017461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write() that retries after interrupts. Copyright (C) 2002, 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 <http://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: MacOS 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-20111211-stable/lib/same-inode.h�������������������������������������������������������������0000664�0000000�0000000�00000001717�11671051007�0017440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether two stat buffers refer to the same file. Copyright (C) 2006, 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 <http://www.gnu.org/licenses/>. */ #ifndef SAME_INODE_H # define SAME_INODE_H 1 # 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) #endif �������������������������������������������������gnulib-20111211-stable/lib/same.c�������������������������������������������������������������������0000664�0000000�0000000�00000007201�11671051007�0016331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether two file names refer to the same file. Copyright (C) 1997-2000, 2002-2006, 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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.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 /* Return nonzero if SOURCE and DEST point to the same name in the same directory. */ bool same_name (const char *source, const char *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 ! _POSIX_NO_TRUNC && HAVE_PATHCONF && defined _PC_NAME_MAX /* This implementation silently truncates components of file names. If the base names might be truncated, check whether the truncated base names are the same, while checking the directories. */ 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; char *source_dirname, *dest_dirname; /* Compare the parent directories (via the device and inode numbers). */ source_dirname = dir_name (source); dest_dirname = dir_name (dest); if (stat (source_dirname, &source_dir_stats)) { /* Shouldn't happen. */ error (1, errno, "%s", source_dirname); } if (stat (dest_dirname, &dest_dir_stats)) { /* Shouldn't happen. */ error (1, errno, "%s", dest_dirname); } same = SAME_INODE (source_dir_stats, dest_dir_stats); #if ! _POSIX_NO_TRUNC && HAVE_PATHCONF && defined _PC_NAME_MAX if (same && ! identical_basenames) { long name_max = (errno = 0, pathconf (dest_dirname, _PC_NAME_MAX)); if (name_max < 0) { if (errno) { /* Shouldn't happen. */ error (1, errno, "%s", dest_dirname); } same = false; } else same = (name_max <= min_baselen && memcmp (source_basename, dest_basename, name_max) == 0); } #endif free (source_dirname); free (dest_dirname); } return same; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/same.h�������������������������������������������������������������������0000664�0000000�0000000�00000001635�11671051007�0016343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether two file names refer to the same file. Copyright (C) 1997-2000, 2003-2004, 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 <http://www.gnu.org/licenses/>. */ #ifndef SAME_H_ # define SAME_H_ 1 # include <stdbool.h> bool same_name (const char *source, const char *dest); #endif /* SAME_H_ */ ���������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/save-cwd.c���������������������������������������������������������������0000664�0000000�0000000�00000006007�11671051007�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* save-cwd.c -- Save and restore current working directory. Copyright (C) 1995, 1997-1998, 2003-2006, 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 <http://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" #include "cloexec.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); if (!GNULIB_FCNTL_SAFER) cwd->desc = fd_safer (cwd->desc); if (cwd->desc < 0) { cwd->name = getcwd (NULL, 0); return cwd->name ? 0 : -1; } set_cloexec_flag (cwd->desc, true); 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-20111211-stable/lib/save-cwd.h���������������������������������������������������������������0000664�0000000�0000000�00000002045�11671051007�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save and restore current working directory. Copyright (C) 1995, 1997-1998, 2003, 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 <http://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-20111211-stable/lib/savedir.c����������������������������������������������������������������0000664�0000000�0000000�00000007360�11671051007�0017047�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-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 <http://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" #ifndef NAME_SIZE_DEFAULT # define NAME_SIZE_DEFAULT 512 #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. Return NULL (setting errno) if DIRP cannot be read. If DIRP is NULL, return NULL without affecting errno. */ char * streamsavedir (DIR *dirp) { char *name_space; size_t allocated = NAME_SIZE_DEFAULT; size_t used = 0; int save_errno; if (dirp == NULL) return NULL; name_space = xmalloc (allocated); 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') { size_t entry_size = _D_EXACT_NAMLEN (dp) + 1; if (used + entry_size < used) xalloc_die (); if (allocated <= used + entry_size) { do { if (2 * allocated < allocated) xalloc_die (); allocated *= 2; } while (allocated <= used + entry_size); name_space = xrealloc (name_space, allocated); } memcpy (name_space + used, entry, entry_size); used += entry_size; } } name_space[used] = '\0'; save_errno = errno; if (save_errno != 0) { free (name_space); errno = save_errno; return NULL; } return name_space; } /* Like savedirstreamp (DIRP), except also close DIRP. */ static char * savedirstream (DIR *dirp) { char *name_space = streamsavedir (dirp); if (dirp && closedir (dirp) != 0) { int save_errno = errno; free (name_space); errno = save_errno; return NULL; } 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) { return savedirstream (opendir (dir)); } /* Return a freshly allocated string containing the file names in directory FD, separated by '\0' characters; the end is marked by two '\0' characters in a row. Return NULL (setting errno) if FD cannot be read or closed. */ /* deprecated */ char * fdsavedir (int fd) { return savedirstream (fdopendir (fd)); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/savedir.h����������������������������������������������������������������0000664�0000000�0000000�00000002010�11671051007�0017037�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-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 <http://www.gnu.org/licenses/>. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #ifndef _GL_SAVEDIR_H #define _GL_SAVEDIR_H #include <dirent.h> char *streamsavedir (DIR *dirp); char *savedir (char const *dir); char *fdsavedir (int fd); /* deprecated */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/savewd.c�����������������������������������������������������������������0000664�0000000�0000000�00000016552�11671051007�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save and restore the working directory, possibly using a child process. Copyright (C) 2006-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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "savewd.h" #include <assert.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 "dosname.h" #include "fcntl-safer.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; /* Fall through. */ 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 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: assert (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 || (options & SAVEWD_CHDIR_READABLE))) 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: assert (wd->val.child == 0); break; default: assert (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; } /* Fall through. */ 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) assert (errno == EINTR); wd->val.child = -1; if (! WIFEXITED (child_status)) raise (WTERMSIG (child_status)); return WEXITSTATUS (child_status); } } break; default: assert (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: assert (wd->val.child < 0); break; default: assert (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 inline 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-20111211-stable/lib/savewd.h�����������������������������������������������������������������0000664�0000000�0000000�00000012367�11671051007�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save and restore the working directory, possibly using a subprocess. Copyright (C) 2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef SAVEWD_H # define SAVEWD_H 1 #include <stdbool.h> #include <sys/types.h> /* 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. */ static inline void savewd_init (struct savewd *wd) { wd->state = INITIAL_STATE; } /* Options for savewd_chdir. */ enum { /* Do not follow symbolic links, if supported. */ SAVEWD_CHDIR_NOFOLLOW = 1, /* The directory should be readable, so fail if it happens to be discovered that the directory is not readable. (Unreadable directories are not necessarily diagnosed, though.) */ SAVEWD_CHDIR_READABLE = 2, /* Do not chdir if the directory is readable; simply succeed without invoking chdir if the directory was opened. */ SAVEWD_CHDIR_SKIP_READABLE = 4 }; /* 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. */ static inline int 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); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/scandir.c����������������������������������������������������������������0000664�0000000�0000000�00000010570�11671051007�0017032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-1998, 2000, 2002-2003, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> #include <dirent.h> #include <stdlib.h> #include <string.h> #include <errno.h> #if _LIBC # include <bits/libc-lock.h> #endif #if ! defined __builtin_expect && __GNUC__ < 3 # define __builtin_expect(expr, expected) (expr) #endif #undef select #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 #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 SCANDIR (const char *dir, DIRENT_TYPE ***namelist, int (*select) (const DIRENT_TYPE *), int (*cmp) (const DIRENT_TYPE **, const DIRENT_TYPE **)) { 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-20111211-stable/lib/sched.in.h���������������������������������������������������������������0000664�0000000�0000000�00000003124�11671051007�0017104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement <sched.h> for platforms that lack it. Copyright (C) 2008-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 <http://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@ # @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 <http://sourceware.org/bugzilla/show_bug.cgi?id=13198>) and MacOS X 10.5. */ #include <sys/types.h> #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 #endif /* _@GUARD_PREFIX@_SCHED_H */ #endif /* _@GUARD_PREFIX@_SCHED_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/se-context.in.h����������������������������������������������������������0000664�0000000�0000000�00000002217�11671051007�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef SELINUX_CONTEXT_H # define SELINUX_CONTEXT_H # include <errno.h> /* The definition of _GL_UNUSED_PARAMETER is copied here. */ typedef int context_t; static inline context_t context_new (char const *s _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return 0; } static inline char *context_str (context_t con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return (void *) 0; } static inline void context_free (context_t c _GL_UNUSED_PARAMETER) {} static inline int context_user_set (context_t sc _GL_UNUSED_PARAMETER, char const *s _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int context_role_set (context_t sc _GL_UNUSED_PARAMETER, char const *s _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int context_range_set (context_t sc _GL_UNUSED_PARAMETER, char const *s _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int context_type_set (context_t sc _GL_UNUSED_PARAMETER, char const *s _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/se-selinux.in.h����������������������������������������������������������0000664�0000000�0000000�00000007450�11671051007�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement <selinux/selinux.h> for platforms that lack it. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_SELINUX_SELINUX_H # define _@GUARD_PREFIX@_SELINUX_SELINUX_H # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ # if HAVE_SELINUX_SELINUX_H #@INCLUDE_NEXT@ @NEXT_SELINUX_SELINUX_H@ # else # include <sys/types.h> # include <errno.h> /* The definition of _GL_UNUSED_PARAMETER is copied here. */ # if !GNULIB_defined_security_types typedef unsigned short security_class_t; # define security_context_t char* # define is_selinux_enabled() 0 static inline int getcon (security_context_t *con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline void freecon (security_context_t con _GL_UNUSED_PARAMETER) {} static inline int getfscreatecon (security_context_t *con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int setfscreatecon (security_context_t con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int matchpathcon (char const *file _GL_UNUSED_PARAMETER, mode_t m _GL_UNUSED_PARAMETER, security_context_t *con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int getfilecon (char const *file _GL_UNUSED_PARAMETER, security_context_t *con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int lgetfilecon (char const *file _GL_UNUSED_PARAMETER, security_context_t *con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int fgetfilecon (int fd, security_context_t *con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int setfilecon (char const *file _GL_UNUSED_PARAMETER, security_context_t con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int lsetfilecon (char const *file _GL_UNUSED_PARAMETER, security_context_t con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int fsetfilecon (int fd _GL_UNUSED_PARAMETER, security_context_t con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int security_check_context (security_context_t con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int security_check_context_raw (security_context_t con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int setexeccon (security_context_t con _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int security_compute_create (security_context_t scon _GL_UNUSED_PARAMETER, security_context_t tcon _GL_UNUSED_PARAMETER, security_class_t tclass _GL_UNUSED_PARAMETER, security_context_t *newcon _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } static inline int matchpathcon_init_prefix (char const *path _GL_UNUSED_PARAMETER, char const *prefix _GL_UNUSED_PARAMETER) { errno = ENOTSUP; return -1; } # define GNULIB_defined_security_types 1 # endif # endif #endif /* _@GUARD_PREFIX@_SELINUX_SELINUX_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/search.in.h��������������������������������������������������������������0000664�0000000�0000000�00000015337�11671051007�0017274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <search.h>. 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 <http://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_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 <http://www.opengroup.org/susv3xbd/search.h.html>, <http://www.opengroup.org/susv3xsh/tsearch.html> for details. */ # if !@HAVE_TSEARCH@ # 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 *key, void **vrootp, _gl_search_compar_fn compar) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (tdelete, void *, (const void *key, void **vrootp, _gl_search_compar_fn compar)); # else # if !@HAVE_TSEARCH@ _GL_FUNCDECL_SYS (tdelete, void *, (const void *key, void **vrootp, _gl_search_compar_fn compar) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (tdelete, void *, (const void *key, void **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 casted 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_TSEARCH@ _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); #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-20111211-stable/lib/select.c�����������������������������������������������������������������0000664�0000000�0000000�00000032751�11671051007�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for select(2) Contributed by Paolo Bonzini. Copyright 2008-2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> #include <alloca.h> #include <assert.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Win32. */ #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> #include "msvc-nothrow.h" 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 #define IsConsoleHandle(h) (((long) (h) & 3) == 3) 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 Win32 handle is H). */ static int win32_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 Win9x, 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 WinXP 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) { 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; 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 && win32_poll_handle (h, i, &rbits, &wbits, &xbits)) wait_timeout = 0; } } 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; } 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); /* Now fill in the results. */ FD_ZERO (rfds); FD_ZERO (wfds); FD_ZERO (xfds); /* Place a sentinel at the end of the array. */ handle_array[nhandles] = NULL; 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. Don't update rc, as these results are counted in the return value of Winsock's select. */ WSAEventSelect ((SOCKET) h, NULL, 0); if (FD_ISSET (h, &handle_rfds)) FD_SET (i, rfds); if (FD_ISSET (h, &handle_wfds)) FD_SET (i, wfds); if (FD_ISSET (h, &handle_xfds)) FD_SET (i, xfds); } else { /* Not a socket. */ nhandles++; win32_poll_handle (h, i, &rbits, &wbits, &xbits); if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { rc++; FD_SET (i, rfds); } if (wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { rc++; FD_SET (i, wfds); } if (xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { rc++; FD_SET (i, xfds); } } } return rc; } #else /* ! Native Win32. */ #include <sys/select.h> #undef select int rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, struct timeval *timeout) { /* 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-20111211-stable/lib/selinux-at.c�������������������������������������������������������������0000664�0000000�0000000�00000004323�11671051007�0017477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* openat-style fd-relative functions for SE Linux 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 <http://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 "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ #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 , security_context_t *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 , security_context_t *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 , security_context_t 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 , security_context_t 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-20111211-stable/lib/selinux-at.h�������������������������������������������������������������0000664�0000000�0000000�00000005454�11671051007�0017512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Prototypes for openat-style fd-relative SELinux 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 <http://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, security_context_t *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, security_context_t *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, security_context_t 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, security_context_t con); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/send.c�������������������������������������������������������������������0000664�0000000�0000000�00000002377�11671051007�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* send.c --- wrappers for Windows send function Copyright (C) 2008-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 <http://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-20111211-stable/lib/sendto.c�����������������������������������������������������������������0000664�0000000�0000000�00000002514�11671051007�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sendto.c --- wrappers for Windows sendto function Copyright (C) 2008-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 <http://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-20111211-stable/lib/set-mode-acl.c�����������������������������������������������������������0000664�0000000�0000000�00000052511�11671051007�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* set-mode-acl.c - set access control list equivalent to a mode Copyright (C) 2002-2003, 2005-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 <http://www.gnu.org/licenses/>. Written by Paul Eggert and Andreas Gruenbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include "acl-internal.h" #include "gettext.h" #define _(msgid) gettext (msgid) /* If DESC is a valid file descriptor use fchmod to change the file's mode to MODE on systems that have fchown. On systems that don't have fchown and if DESC is invalid, use chown 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 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) { #if USE_ACL # if HAVE_ACL_GET_FILE /* POSIX 1003.1e draft 17 (abandoned) specific version. */ /* Linux, FreeBSD, MacOS X, IRIX, Tru64 */ # if !HAVE_ACL_TYPE_EXTENDED /* Linux, FreeBSD, IRIX, Tru64 */ /* We must also have acl_from_text and acl_delete_def_file. (acl_delete_def_file could be emulated with acl_init followed by acl_set_file, but acl_set_file with an empty acl is unspecified.) */ # 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 acl_t acl; int ret; if (HAVE_ACL_FROM_MODE) /* Linux */ { acl = acl_from_mode (mode); if (!acl) return -1; } else /* FreeBSD, IRIX, Tru64 */ { /* If we were to create the ACL using the functions acl_init(), acl_create_entry(), acl_set_tag_type(), acl_set_qualifier(), acl_get_permset(), acl_clear_perm[s](), acl_add_perm(), we would need to create a qualifier. I don't know how to do this. So create it using acl_from_text(). */ # if HAVE_ACL_FREE_TEXT /* Tru64 */ char acl_text[] = "u::---,g::---,o::---,"; # else /* FreeBSD, IRIX */ 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'; acl = acl_from_text (acl_text); if (!acl) return -1; } if (HAVE_ACL_SET_FD && desc != -1) ret = acl_set_fd (desc, acl); else ret = acl_set_file (name, ACL_TYPE_ACCESS, acl); if (ret != 0) { int saved_errno = errno; acl_free (acl); if (ACL_NOT_WELL_SUPPORTED (errno)) return chmod_or_fchmod (name, desc, mode); else { errno = saved_errno; return -1; } } else acl_free (acl); if (S_ISDIR (mode) && acl_delete_def_file (name)) return -1; if (!MODE_INSIDE_ACL || (mode & (S_ISUID | S_ISGID | S_ISVTX))) { /* We did not call chmod so far, and either the mode and the ACL are separate or special bits are to be set which don't fit into ACLs. */ return chmod_or_fchmod (name, desc, mode); } return 0; # else /* HAVE_ACL_TYPE_EXTENDED */ /* MacOS X */ /* On MacOS 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. */ acl_t acl; int ret; /* Remove the ACL 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); if (ret != 0) { int saved_errno = errno; acl_free (acl); if (ACL_NOT_WELL_SUPPORTED (saved_errno)) return chmod_or_fchmod (name, desc, mode); else { errno = saved_errno; return -1; } } acl_free (acl); } } /* Since !MODE_INSIDE_ACL, we have to call chmod explicitly. */ return chmod_or_fchmod (name, desc, mode); # endif # elif HAVE_FACL && defined GETACLCNT /* Solaris, Cygwin, not HP-UX */ int done_setacl = 0; # 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; { int count; ace_t *entries; for (;;) { if (desc != -1) count = facl (desc, ACE_GETACLCNT, 0, NULL); else count = acl (name, ACE_GETACLCNT, 0, NULL); if (count <= 0) { convention = -1; break; } entries = (ace_t *) malloc (count * sizeof (ace_t)); if (entries == NULL) { errno = ENOMEM; return -1; } if ((desc != -1 ? facl (desc, ACE_GETACL, count, entries) : acl (name, ACE_GETACL, count, entries)) == count) { 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 (entries); break; } /* Huh? The number of ACL entries changed since the last call. Repeat. */ free (entries); } } 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) return chmod_or_fchmod (name, desc, mode); return -1; } if (ret == 0) done_setacl = 1; } # endif if (!done_setacl) { 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) return chmod_or_fchmod (name, desc, mode); return -1; } } if (!MODE_INSIDE_ACL || (mode & (S_ISUID | S_ISGID | S_ISVTX))) { /* We did not call chmod so far, so the special bits have not yet been set. */ return chmod_or_fchmod (name, desc, mode); } return 0; # elif HAVE_GETACL /* HP-UX */ struct stat statbuf; int ret; if (desc != -1) ret = fstat (desc, &statbuf); else ret = stat (name, &statbuf); if (ret < 0) return -1; { struct acl_entry entries[3]; entries[0].uid = statbuf.st_uid; entries[0].gid = ACL_NSGROUP; entries[0].mode = (mode >> 6) & 7; entries[1].uid = ACL_NSUSER; entries[1].gid = statbuf.st_gid; entries[1].mode = (mode >> 3) & 7; entries[2].uid = ACL_NSUSER; entries[2].gid = ACL_NSGROUP; entries[2].mode = mode & 7; if (desc != -1) ret = fsetacl (desc, sizeof (entries) / sizeof (struct acl_entry), entries); else ret = setacl (name, sizeof (entries) / sizeof (struct acl_entry), entries); } if (ret < 0) { if (!(errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)) return -1; # if HAVE_ACLV_H /* HP-UX >= 11.11 */ { struct acl entries[4]; 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 = CLASS_OBJ; entries[2].a_id = 0; entries[2].a_perm = (mode >> 3) & 7; entries[3].a_type = OTHER_OBJ; entries[3].a_id = 0; entries[3].a_perm = mode & 7; ret = aclsort (sizeof (entries) / sizeof (struct acl), 1, entries); if (ret > 0) abort (); if (ret < 0) { if (0) return chmod_or_fchmod (name, desc, mode); return -1; } ret = acl ((char *) name, ACL_SET, sizeof (entries) / sizeof (struct acl), entries); if (ret < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) return chmod_or_fchmod (name, desc, mode); return -1; } } # else return chmod_or_fchmod (name, desc, mode); # endif } if (mode & (S_ISUID | S_ISGID | S_ISVTX)) { /* We did not call chmod so far, so the special bits have not yet been set. */ return chmod_or_fchmod (name, desc, mode); } return 0; # elif HAVE_ACLX_GET && defined ACL_AIX_WIP /* AIX */ 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) return chmod_or_fchmod (name, desc, mode); /* 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; } return chmod_or_fchmod (name, desc, mode); # elif HAVE_STATACL /* older AIX */ 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 = fchacl (desc, &u.a, u.a.acl_len); else ret = chacl (name, &u.a, u.a.acl_len); if (ret < 0 && errno == ENOSYS) return chmod_or_fchmod (name, desc, mode); return ret; # elif HAVE_ACLSORT /* NonStop Kernel */ struct acl entries[4]; 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 = CLASS_OBJ; entries[2].a_id = 0; entries[2].a_perm = (mode >> 3) & 7; entries[3].a_type = OTHER_OBJ; entries[3].a_id = 0; entries[3].a_perm = mode & 7; ret = aclsort (sizeof (entries) / sizeof (struct acl), 1, entries); if (ret > 0) abort (); if (ret < 0) { if (0) return chmod_or_fchmod (name, desc, mode); return -1; } ret = acl ((char *) name, ACL_SET, sizeof (entries) / sizeof (struct acl), entries); if (ret < 0) { if (0) return chmod_or_fchmod (name, desc, mode); return -1; } if (mode & (S_ISUID | S_ISGID | S_ISVTX)) { /* We did not call chmod so far, so the special bits have not yet been set. */ return chmod_or_fchmod (name, desc, mode); } return 0; # else /* Unknown flavor of ACLs */ return chmod_or_fchmod (name, desc, mode); # endif #else /* !USE_ACL */ return chmod_or_fchmod (name, desc, mode); #endif } /* As with qset_acl, but also output a diagnostic on failure. */ int set_acl (char const *name, int desc, mode_t mode) { int r = qset_acl (name, desc, mode); if (r != 0) error (0, errno, _("setting permissions for %s"), quote (name)); return r; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/setenv.c�����������������������������������������������������������������0000664�0000000�0000000�00000025025�11671051007�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2003, 2005-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #if !_LIBC # define _GL_USE_STDLIB_ALLOC 1 # include <config.h> #endif /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ #define _GL_ARG_NONNULL(params) #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__) # 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-20111211-stable/lib/setlocale.c��������������������������������������������������������������0000664�0000000�0000000�00000070005�11671051007�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the current locale. Copyright (C) 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 <http://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 <stdlib.h> #include <string.h> #include "localename.h" #if 1 # undef setlocale /* 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 __WIN32__) && ! defined __CYGWIN__ /* The native Win32 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) */ { "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; 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]; /* First, try setlocale with the original argument unchanged. */ result = setlocale (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; } # else # define setlocale_unixlike setlocale # 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 char * rpl_setlocale (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_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) goto fail; # if (defined _WIN32 || 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 = 0; 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) goto fail; } /* 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 __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 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/setsockopt.c�������������������������������������������������������������0000664�0000000�0000000�00000003346�11671051007�0017610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* setsockopt.c --- wrappers for Windows setsockopt function Copyright (C) 2008-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 <http://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-20111211-stable/lib/settime.c����������������������������������������������������������������0000664�0000000�0000000�00000002777�11671051007�0017073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* settime -- set the system clock Copyright (C) 2002, 2004-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 <http://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-20111211-stable/lib/sh-quote.c���������������������������������������������������������������0000664�0000000�0000000�00000005544�11671051007�0017161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Shell quoting. Copyright (C) 2001-2004, 2006, 2009-2011 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 <http://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 (char **argv) { if (*argv != NULL) { char **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-20111211-stable/lib/sh-quote.h���������������������������������������������������������������0000664�0000000�0000000�00000003063�11671051007�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Shell quoting. Copyright (C) 2001-2002, 2004, 2009-2011 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 <http://www.gnu.org/licenses/>. */ /* 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 <stddef.h> /* 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 *p, const char *string); /* Returns the freshly allocated quoted string. */ extern char * shell_quote (const char *string); /* Returns a freshly allocated string containing all argument strings, quoted, separated through spaces. */ extern char * shell_quote_argv (char **argv); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sha1.c�������������������������������������������������������������������0000664�0000000�0000000�00000032045�11671051007�0016244�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-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Scott G. Miller Credits: Robert Klep <robert@ilse.nl> -- Expansion function fix */ #include <config.h> #include "sha1.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) #else # define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #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 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 inline 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); } /* Compute SHA1 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ int sha1_stream (FILE *stream, void *resblock) { struct sha1_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ sha1_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 */ 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; } /* 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. */ 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 # 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; 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; /* 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] += len; if (ctx->total[0] < len) ++ctx->total[1]; #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; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sha1.h�������������������������������������������������������������������0000664�0000000�0000000�00000006207�11671051007�0016252�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-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef SHA1_H # define SHA1_H 1 # include <stdio.h> # include <stdint.h> # ifdef __cplusplus extern "C" { # endif #define SHA1_DIGEST_SIZE 20 /* 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; uint32_t buffer[32]; }; /* 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 *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 *resbuf); /* Compute SHA1 message digest for bytes read from STREAM. The resulting message digest number will be written into the 20 bytes beginning at RESBLOCK. */ extern int sha1_stream (FILE *stream, void *resblock); /* 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 *resblock); # ifdef __cplusplus } # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sha256.c�����������������������������������������������������������������0000664�0000000�0000000�00000042620�11671051007�0016420�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-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 <http://www.gnu.org/licenses/>. */ /* Written by David Madore, considerably copypasting from Scott G. Miller's sha1.c */ #include <config.h> #include "sha256.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) #else # define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #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. */ 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 intializes 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 * (uint32_t *) cp = v */ static inline 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); } /* Compute SHA256 message digest for bytes read from STREAM. The resulting message digest number will be written into the 32 bytes beginning at RESBLOCK. */ int sha256_stream (FILE *stream, void *resblock) { struct sha256_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ sha256_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 */ 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. */ sha256_finish_ctx (&ctx, resblock); free (buffer); return 0; } /* FIXME: Avoid code duplication */ int sha224_stream (FILE *stream, void *resblock) { struct sha256_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ sha224_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 */ 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. */ sha224_finish_ctx (&ctx, resblock); free (buffer); return 0; } /* 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 * 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. */ 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 # 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; 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]; /* 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] += len; if (ctx->total[0] < len) ++ctx->total[1]; #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; } } ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sha256.h�����������������������������������������������������������������0000664�0000000�0000000�00000006732�11671051007�0016431�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-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 <http://www.gnu.org/licenses/>. */ #ifndef SHA256_H # define SHA256_H 1 # include <stdio.h> # include <stdint.h> # ifdef __cplusplus extern "C" { # endif /* Structure to save state of computation between the single steps. */ struct sha256_ctx { uint32_t state[8]; uint32_t total[2]; size_t buflen; uint32_t buffer[32]; }; enum { SHA224_DIGEST_SIZE = 224 / 8 }; enum { SHA256_DIGEST_SIZE = 256 / 8 }; /* 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 *resbuf); extern void *sha224_finish_ctx (struct sha256_ctx *ctx, void *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 *resbuf); extern void *sha224_read_ctx (const struct sha256_ctx *ctx, void *resbuf); /* Compute SHA256 (SHA224) message digest for bytes read from STREAM. 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); /* 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 *resblock); extern void *sha224_buffer (const char *buffer, size_t len, void *resblock); # ifdef __cplusplus } # endif #endif ��������������������������������������gnulib-20111211-stable/lib/sha512.c�����������������������������������������������������������������0000664�0000000�0000000�00000053425�11671051007�0016420�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-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 <http://www.gnu.org/licenses/>. */ /* Written by David Madore, considerably copypasting from Scott G. Miller's sha1.c */ #include <config.h> #include "sha512.h" #include <stdalign.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) #else # define SWAP(n) \ u64or (u64or (u64or (u64shl (n, 56), \ u64shl (u64and (n, u64lo (0x0000ff00)), 40)), \ u64or (u64shl (u64and (n, u64lo (0x00ff0000)), 24), \ u64shl (u64and (n, u64lo (0xff000000)), 8))), \ u64or (u64or (u64and (u64shr (n, 8), u64lo (0xff000000)), \ u64and (u64shr (n, 24), u64lo (0x00ff0000))), \ u64or (u64and (u64shr (n, 40), u64lo (0x0000ff00)), \ u64shr (n, 56)))) #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 128 != 0 # error "invalid BLOCKSIZE" #endif /* 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 intializes 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 inline 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); } /* Compute SHA512 message digest for bytes read from STREAM. The resulting message digest number will be written into the 64 bytes beginning at RESBLOCK. */ int sha512_stream (FILE *stream, void *resblock) { struct sha512_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ sha512_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 % 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. */ sha512_finish_ctx (&ctx, resblock); free (buffer); return 0; } /* FIXME: Avoid code duplication */ int sha384_stream (FILE *stream, void *resblock) { struct sha512_ctx ctx; size_t sum; char *buffer = malloc (BLOCKSIZE + 72); if (!buffer) return 1; /* Initialize the computation context. */ sha384_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 % 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. */ sha384_finish_ctx (&ctx, resblock); free (buffer); return 0; } /* 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. */ 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 # 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; 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]; /* 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], u64lo (len)); if (u64lt (ctx->total[0], u64lo (len))) ctx->total[1] = u64plus (ctx->total[1], u64lo (1)); #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); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sha512.h�����������������������������������������������������������������0000664�0000000�0000000�00000007062�11671051007�0016421�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-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 <http://www.gnu.org/licenses/>. */ #ifndef SHA512_H # define SHA512_H 1 # include <stdio.h> # include "u64.h" # ifdef __cplusplus extern "C" { # endif /* Structure to save state of computation between the single steps. */ struct sha512_ctx { u64 state[8]; u64 total[2]; size_t buflen; u64 buffer[32]; }; enum { SHA384_DIGEST_SIZE = 384 / 8 }; enum { SHA512_DIGEST_SIZE = 512 / 8 }; /* 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 *resbuf); extern void *sha384_finish_ctx (struct sha512_ctx *ctx, void *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 *resbuf); extern void *sha384_read_ctx (const struct sha512_ctx *ctx, void *resbuf); /* Compute SHA512 (SHA384) message digest for bytes read from STREAM. 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); /* 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 *resblock); extern void *sha384_buffer (const char *buffer, size_t len, void *resblock); # ifdef __cplusplus } # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/shutdown.c���������������������������������������������������������������0000664�0000000�0000000�00000002344�11671051007�0017262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* shutdown.c --- wrappers for Windows shutdown function Copyright (C) 2008-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 <http://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-20111211-stable/lib/sig-handler.h������������������������������������������������������������0000664�0000000�0000000�00000003236�11671051007�0017612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience declarations when working with <signal.h>. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #ifndef _GL_SIG_HANDLER_H #define _GL_SIG_HANDLER_H #include <signal.h> /* 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. */ static inline sa_handler_t get_handler (struct sigaction const *a) { #ifdef SA_SIGINFO /* 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. So use (and cast) sa_sigaction in that case. */ if (a->sa_flags & SA_SIGINFO) return (sa_handler_t) a->sa_sigaction; #endif return a->sa_handler; } #endif /* _GL_SIG_HANDLER_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sig2str.c����������������������������������������������������������������0000664�0000000�0000000�00000016001�11671051007�0016777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sig2str.c -- convert between signal names and numbers Copyright (C) 2002, 2004, 2006, 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 <http://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 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 /* BeOS */ #ifdef SIGKILLTHR NUMNAME (KILLTHR), #endif /* Older HP-UX versions. */ #ifdef SIGDIL NUMNAME (DIL), #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; if (! (rtmin <= signum && signum <= rtmax)) return -1; if (signum <= rtmin + (rtmax - rtmin) / 2) { int delta = signum - rtmin; sprintf (signame, delta ? "RTMIN+%d" : "RTMIN", delta); } else { int delta = rtmax - signum; sprintf (signame, delta ? "RTMAX-%d" : "RTMAX", delta); } return 0; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sig2str.h����������������������������������������������������������������0000664�0000000�0000000�00000002533�11671051007�0017011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sig2str.h -- convert between signal names and numbers Copyright (C) 2002, 2005, 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 <http://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) int sig2str (int, char *); int str2sig (char const *, int *); #endif /* An upper bound on signal numbers allowed by the system. */ #if defined _sys_nsig # define SIGNUM_BOUND (_sys_nsig - 1) #elif defined NSIG # define SIGNUM_BOUND (NSIG - 1) #else # define SIGNUM_BOUND 64 #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sigaction.c��������������������������������������������������������������0000664�0000000�0000000�00000016115�11671051007�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Eric Blake <ebb9@byu.net>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 Woe32 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 Win32 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 __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-20111211-stable/lib/siglist.h����������������������������������������������������������������0000664�0000000�0000000�00000007415�11671051007�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical list of all signal names. Copyright (C) 1996-1999, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/signal.in.h��������������������������������������������������������������0000664�0000000�0000000�00000033476�11671051007�0017310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <signal.h>. Copyright (C) 2006-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 <http://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 /* MacOS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 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 __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 *new_mask, sigset_t *old_mask)); _GL_CXXALIAS_RPL (pthread_sigmask, int, (int how, const sigset_t *new_mask, sigset_t *old_mask)); # else # if !@HAVE_PTHREAD_SIGMASK@ _GL_FUNCDECL_SYS (pthread_sigmask, int, (int how, const sigset_t *new_mask, sigset_t *old_mask)); # endif _GL_CXXALIAS_SYS (pthread_sigmask, int, (int how, const sigset_t *new_mask, sigset_t *old_mask)); # endif _GL_CXXALIASWARN (pthread_sigmask); #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 _GL_CXXALIASWARN (raise); #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 /* Test whether a given signal is contained in a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on MacOS 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 MacOS 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 MacOS 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 MacOS 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 MacOS 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 *set, sigset_t *old_set)); # endif _GL_CXXALIAS_SYS (sigprocmask, int, (int operation, const sigset_t *set, sigset_t *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 _GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif _GL_CXXALIASWARN (signal); # 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-20111211-stable/lib/signbitd.c���������������������������������������������������������������0000664�0000000�0000000�00000004066�11671051007�0017215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. 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 <http://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-20111211-stable/lib/signbitf.c���������������������������������������������������������������0000664�0000000�0000000�00000004077�11671051007�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. 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 <http://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-20111211-stable/lib/signbitl.c���������������������������������������������������������������0000664�0000000�0000000�00000004142�11671051007�0017220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. 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 <http://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-20111211-stable/lib/sigpipe-die.c������������������������������������������������������������0000664�0000000�0000000�00000004527�11671051007�0017613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a SIGPIPE signal and exit. Copyright (C) 2008-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 <http://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-20111211-stable/lib/sigpipe-die.h������������������������������������������������������������0000664�0000000�0000000�00000004631�11671051007�0017614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a SIGPIPE signal and exit. Copyright (C) 2008-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 <http://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-20111211-stable/lib/sigprocmask.c������������������������������������������������������������0000664�0000000�0000000�00000020625�11671051007�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking. Copyright (C) 2006-2011 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 <http://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 Woe32 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 __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 inline 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-20111211-stable/lib/sincosl.c����������������������������������������������������������������0000664�0000000�0000000�00000167457�11671051007�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Quad-precision floating point trigonometric functions on <-pi/4,pi/4>. Copyright (C) 1999, 2006-2007, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "trigl.h" #include <float.h> #include <math.h> 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-20111211-stable/lib/sinf.c�������������������������������������������������������������������0000664�0000000�0000000�00000001511�11671051007�0016341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sine function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float sinf (float x) { return (float) sin ((double) x); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sinhf.c������������������������������������������������������������������0000664�0000000�0000000�00000001526�11671051007�0016517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hyperbolic sine function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float sinhf (float x) { return (float) sinh ((double) x); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sinl.c�������������������������������������������������������������������0000664�0000000�0000000�00000006207�11671051007�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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 /* sinl(x) * Return sine function of x. * * kernel function: * __kernel_sinl ... sine function on [-pi/4,pi/4] * __kernel_cosl ... cose 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-20111211-stable/lib/size_max.h���������������������������������������������������������������0000664�0000000�0000000�00000002322�11671051007�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* size_max.h -- declare SIZE_MAX through system headers Copyright (C) 2005-2006, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/sleep.c������������������������������������������������������������������0000664�0000000�0000000�00000004407�11671051007�0016521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Pausing execution of the current thread. Copyright (C) 2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <limits.h> #include "verify.h" #if (defined _WIN32 || 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 interruptiple 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-20111211-stable/lib/snprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000003634�11671051007�0017255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-2011 Free Software Foundation, Inc. Written by Simon Josefsson and Paul Eggert. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/socket.c�����������������������������������������������������������������0000664�0000000�0000000�00000002564�11671051007�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* socket.c --- wrappers for Windows socket function Copyright (C) 2008-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 <http://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" 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-20111211-stable/lib/sockets.c����������������������������������������������������������������0000664�0000000�0000000�00000010015�11671051007�0017054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sockets.c --- wrappers for Windows socket functions Copyright (C) 2008-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 <http://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" # include "msvc-nothrow.h" /* 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 (int version _GL_UNUSED) { #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) 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-20111211-stable/lib/sockets.h����������������������������������������������������������������0000664�0000000�0000000�00000003175�11671051007�0017072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sockets.h - wrappers for Windows socket functions Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson */ #ifndef SOCKETS_H # define SOCKETS_H 1 #define SOCKETS_1_0 0x100 /* don't use - does not work on Windows XP */ #define SOCKETS_1_1 0x101 #define SOCKETS_2_0 0x200 /* don't use - does not work on Windows XP */ #define SOCKETS_2_1 0x201 #define SOCKETS_2_2 0x202 int gl_sockets_startup (int version) #if !WINDOWS_SOCKETS _GL_ATTRIBUTE_CONST #endif ; int gl_sockets_cleanup (void) #if !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. */ #if WINDOWS_SOCKETS #include <sys/socket.h> #include "msvc-nothrow.h" 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-20111211-stable/lib/spawn-pipe.c�������������������������������������������������������������0000664�0000000�0000000�00000034644�11671051007�0017502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of subprocesses, communicating via pipes. Copyright (C) 2001-2004, 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "spawn-pipe.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include "error.h" #include "fatal-signal.h" #include "unistd-safer.h" #include "wait-process.h" #include "gettext.h" #define _(str) gettext (str) #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 API. */ # include <process.h> # include "w32spawn.h" #else /* Unix API. */ # include <spawn.h> #endif /* The results of open() in this file are not used with fchdir, therefore save some unnecessary work in fchdir.c. */ #undef open #undef close #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 inline int nonintr_close (int fd) { int retval; do retval = close (fd); while (retval < 0 && errno == EINTR); return retval; } #define close nonintr_close static inline 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 /* 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, char **prog_argv, 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]) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 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. */ int ifd[2]; int ofd[2]; int orig_stdin; int orig_stdout; int orig_stderr; int child; int nulloutfd; int stdinfd; int stdoutfd; int saved_errno; /* FIXME: Need to free memory allocated by prepare_spawn. */ prog_argv = prepare_spawn (prog_argv); 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 * */ /* 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); child = -1; /* 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). */ /* Use spawnvpe and pass the environment explicitly. This is needed if the program has modified the environment using putenv() or [un]setenv(). On Windows, programs 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. When using spawnvp() without 'e', the child process inherits a copy of the environment block - ignoring the effects of putenv() and [un]setenv(). */ { child = spawnvpe (P_NOWAIT, prog_path, (const char **) prog_argv, (const char **) environ); if (child < 0 && 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 prog_argv. */ --prog_argv; child = spawnvpe (P_NOWAIT, prog_argv[0], (const char **) prog_argv, (const char **) environ); } } 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]); if (child == -1) { if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, saved_errno, _("%s subprocess failed"), progname); if (pipe_stdout) close (ifd[0]); if (pipe_stdin) close (ofd[1]); errno = saved_errno; return -1; } 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) || (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))) || (err = posix_spawnp (&child, prog_path, &actions, attrs_allocated ? &attrs : NULL, 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 (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, err, _("%s subprocess failed"), progname); if (pipe_stdout) { close (ifd[0]); close (ifd[1]); } if (pipe_stdin) { close (ofd[0]); close (ofd[1]); } errno = err; return -1; } 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]); if (pipe_stdout) fd[0] = ifd[0]; if (pipe_stdin) fd[1] = ofd[1]; return child; #endif } /* 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, char **prog_argv, bool null_stderr, bool slave_process, bool exit_on_error, int fd[2]) { pid_t result = create_pipe (progname, prog_path, prog_argv, 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, char **prog_argv, 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, 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, char **prog_argv, 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, true, false, NULL, prog_stdout, null_stderr, slave_process, exit_on_error, iofd); if (result != -1) fd[0] = iofd[1]; return result; } ��������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/spawn-pipe.h�������������������������������������������������������������0000664�0000000�0000000�00000014314�11671051007�0017477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of subprocesses, communicating via pipes. Copyright (C) 2001-2003, 2006, 2008-2011 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 <http://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. 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, char **prog_argv, 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, char **prog_argv, 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, char **prog_argv, bool null_stderr, bool slave_process, bool exit_on_error, int fd[2]); /* The name of the "always silent" device. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 API. */ # define DEV_NULL "NUL" #else /* Unix API. */ # define DEV_NULL "/dev/null" #endif #ifdef __cplusplus } #endif #endif /* _SPAWN_PIPE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/spawn.c������������������������������������������������������������������0000664�0000000�0000000�00000002376�11671051007�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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, argv, envp, 0); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/spawn.in.h���������������������������������������������������������������0000664�0000000�0000000�00000107467�11671051007�0017165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Definitions for POSIX spawn interface. Copyright (C) 2000, 2003-2004, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_SPAWN_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SPAWN_H@ # @INCLUDE_NEXT@ @NEXT_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 /* 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 199901L <= __STDC_VERSION__ # define _Restrict_ restrict # elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) # define _Restrict_ __restrict # else # define _Restrict_ # endif #endif /* gcc 3.1 and up support the [restrict] syntax. Don't trust sys/cdefs.h's definition of __restrict_arr, though, as it mishandles gcc -ansi -pedantic. */ #ifndef _Restrict_arr_ # if ((199901L <= __STDC_VERSION__ \ || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ && !defined __STRICT_ANSI__)) \ && !defined __GNUG__) # 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@ # define posix_spawnattr_t rpl_posix_spawnattr_t #endif #if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ # 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@ # define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t #endif #if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ # 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. */ #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) #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 _GL_CXXALIASWARN (posix_spawnattr_getschedpolicy); #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 _GL_CXXALIASWARN (posix_spawnattr_setschedpolicy); #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 _GL_CXXALIASWARN (posix_spawnattr_getschedparam); #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 _GL_CXXALIASWARN (posix_spawnattr_setschedparam); #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@ # 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 _GL_CXXALIASWARN (posix_spawn_file_actions_addopen); #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@ # 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 _GL_CXXALIASWARN (posix_spawn_file_actions_addclose); #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@ # 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 _GL_CXXALIASWARN (posix_spawn_file_actions_adddup2); #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 #endif /* _@GUARD_PREFIX@_SPAWN_H */ #endif /* _@GUARD_PREFIX@_SPAWN_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/spawn_faction_addclose.c�������������������������������������������������0000664�0000000�0000000�00000003464�11671051007�0022104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 #include "spawn_int.h" /* 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) { int maxfd = __sysconf (_SC_OPEN_MAX); struct __spawn_action *rec; /* Test for the validity of the file descriptor. */ if (fd < 0 || fd >= maxfd) return EBADF; /* 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; /* 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; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/spawn_faction_adddup2.c��������������������������������������������������0000664�0000000�0000000�00000003604�11671051007�0021645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 #include "spawn_int.h" /* 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) { int maxfd = __sysconf (_SC_OPEN_MAX); struct __spawn_action *rec; /* Test for the validity of the file descriptor. */ if (fd < 0 || newfd < 0 || fd >= maxfd || newfd >= maxfd) return EBADF; /* 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; /* 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; } ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/spawn_faction_addopen.c��������������������������������������������������0000664�0000000�0000000�00000003750�11671051007�0021736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 #include "spawn_int.h" /* 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) { int maxfd = __sysconf (_SC_OPEN_MAX); struct __spawn_action *rec; /* Test for the validity of the file descriptor. */ if (fd < 0 || fd >= maxfd) return EBADF; /* 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; /* 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; rec->action.open_action.oflag = oflag; rec->action.open_action.mode = mode; /* Account for the new entry. */ ++file_actions->_used; return 0; } ������������������������gnulib-20111211-stable/lib/spawn_faction_destroy.c��������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0022010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <stdlib.h> /* Initialize data structure for file attribute for `spawn' call. */ int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions) { /* Free the memory allocated. */ free (file_actions->_actions); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/spawn_faction_init.c�����������������������������������������������������0000664�0000000�0000000�00000003272�11671051007�0021266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawn_int.h��������������������������������������������������������������0000664�0000000�0000000�00000003314�11671051007�0017414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 } tag; union { struct { int fd; } close_action; struct { int fd; int newfd; } dup2_action; struct { int fd; const char *path; int oflag; mode_t mode; } open_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, char *const argv[], char *const envp[], int use_path); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/spawnattr_destroy.c������������������������������������������������������0000664�0000000�0000000�00000001744�11671051007�0021206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_getdefault.c���������������������������������������������������0000664�0000000�0000000�00000002220�11671051007�0021627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_getflags.c�����������������������������������������������������0000664�0000000�0000000�00000002020�11671051007�0021275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_getpgroup.c����������������������������������������������������0000664�0000000�0000000�00000002034�11671051007�0021522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_getschedparam.c������������������������������������������������0000664�0000000�0000000�00000002262�11671051007�0022320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_getschedpolicy.c�����������������������������������������������0000664�0000000�0000000�00000002266�11671051007�0022523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_getsigmask.c���������������������������������������������������0000664�0000000�0000000�00000002160�11671051007�0021644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_init.c���������������������������������������������������������0000664�0000000�0000000�00000002131�11671051007�0020447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_setdefault.c���������������������������������������������������0000664�0000000�0000000�00000002211�11671051007�0021643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_setflags.c�����������������������������������������������������0000664�0000000�0000000�00000003200�11671051007�0021312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2004, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_setpgroup.c����������������������������������������������������0000664�0000000�0000000�00000002025�11671051007�0021536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_setschedparam.c������������������������������������������������0000664�0000000�0000000�00000002263�11671051007�0022335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_setschedpolicy.c�����������������������������������������������0000664�0000000�0000000�00000002367�11671051007�0022541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawnattr_setsigmask.c���������������������������������������������������0000664�0000000�0000000�00000002154�11671051007�0021663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/spawni.c�����������������������������������������������������������������0000664�0000000�0000000�00000025104�11671051007�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Guts of POSIX spawn interface. Generic POSIX.1 version. Copyright (C) 2000-2006, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 "/bin/sh" #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 #else # undef internal_function # define internal_function /* empty */ #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 __WIN32__) && ! defined __CYGWIN__ /* Native Woe32 API. */ int __spawni (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[], int use_path) { /* Not yet implemented. */ return ENOSYS; } #else /* The file is accessible but it is not an executable file. Invoke the shell to interpret it as a script. */ static void internal_function script_execute (const char *file, char *const argv[], char *const envp[]) { /* Count the arguments. */ int argc = 0; while (argv[argc++]) ; /* Construct an argument list for the shell. */ { char **new_argv = (char **) alloca ((argc + 1) * sizeof (char *)); new_argv[0] = (char *) _PATH_BSHELL; new_argv[1] = (char *) file; while (argc > 1) { new_argv[argc] = argv[argc - 1]; --argc; } /* Execute the shell. */ execve (new_argv[0], new_argv, envp); } } /* 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, char *const argv[], 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; } } } if (! use_path || strchr (file, '/') != NULL) { /* The FILE parameter is actually a path. */ execve (file, argv, envp); if (errno == ENOEXEC) script_execute (file, argv, 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, argv, envp); if (errno == ENOEXEC) script_execute (startp, argv, 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-20111211-stable/lib/spawnp.c�����������������������������������������������������������������0000664�0000000�0000000�00000002402�11671051007�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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, argv, envp, 1); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sprintf.c����������������������������������������������������������������0000664�0000000�0000000�00000004144�11671051007�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-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 <http://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-20111211-stable/lib/sqrtf.c������������������������������������������������������������������0000664�0000000�0000000�00000001511�11671051007�0016541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Square root. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float sqrtf (float x) { return (float) sqrt ((double) x); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sqrtl.c������������������������������������������������������������������0000664�0000000�0000000�00000002747�11671051007�0016563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for sqrtl. Contributed by Paolo Bonzini Copyright 2002-2003, 2007, 2009-2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/stat-macros.h������������������������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0017640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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-20111211-stable/lib/stat-size.h��������������������������������������������������������������0000664�0000000�0000000�00000010164�11671051007�0017336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* macros useful in interpreting size-related values in struct stat. Copyright (C) 1989, 1991-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 <http://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 /* Much of the remainder of this file is not indented consistently with the above, in order to make it easier to see that the text is almost identical to part of the system.h header in coreutils. */ /* 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 /* Some systems, like Sequents, return st_blksize of 0 on pipes. Also, 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 # else /* !hpux */ # if defined _AIX && defined _I386 /* AIX PS/2 counts st_blocks in 4K units. */ # define ST_NBLOCKSIZE (4 * 1024) # else # if defined _CRAY # define ST_NBLOCKS(statbuf) \ (S_ISREG ((statbuf).st_mode) || S_ISDIR ((statbuf).st_mode) \ ? (statbuf).st_blocks * ST_BLKSIZE (statbuf) / ST_NBLOCKSIZE : 0) # endif # endif # 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-20111211-stable/lib/stat-time.h��������������������������������������������������������������0000664�0000000�0000000�00000012736�11671051007�0017331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2005, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef STAT_TIME_H #define STAT_TIME_H 1 #include <sys/stat.h> #include <time.h> /* 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 defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC # ifdef 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. */ static inline long int 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. */ static inline long int 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. */ static inline long int 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. */ static inline long int get_stat_birthtime_ns (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 /* Avoid a "parameter unused" warning. */ (void) st; return 0; # endif } /* Return *ST's access time. */ static inline struct timespec 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. */ static inline struct timespec 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. */ static inline struct timespec 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. */ static inline struct timespec get_stat_birthtime (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 __WIN32__) && ! defined __CYGWIN__ /* Woe32 native platforms (but not Cygwin) put the "file creation time" in st_ctime (!). See <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>. */ t.tv_sec = st->st_ctime; t.tv_nsec = 0; #else /* Birth time is not supported. */ t.tv_sec = -1; t.tv_nsec = -1; /* Avoid a "parameter unused" warning. */ (void) st; #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 time stamps. 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; } #endif ����������������������������������gnulib-20111211-stable/lib/stat.c�������������������������������������������������������������������0000664�0000000�0000000�00000007727�11671051007�0016374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in stat. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ /* 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 static inline int orig_stat (const char *filename, struct stat *buf) { return stat (filename, buf); } /* Specification. */ /* 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" #include <errno.h> #include <limits.h> #include <stdbool.h> #include <string.h> #include "dosname.h" #include "verify.h" #if REPLACE_FUNC_STAT_DIR # include "pathmax.h" /* The only known systems where REPLACE_FUNC_STAT_DIR is needed also have a constant PATH_MAX. */ # ifndef PATH_MAX # error "Please port this replacement to your platform" # endif #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 *st) { int result = orig_stat (name, st); #if REPLACE_FUNC_STAT_FILE /* Solaris 9 mistakenly succeeds when given a non-directory with a trailing slash. */ if (result == 0 && !S_ISDIR (st->st_mode)) { size_t len = strlen (name); if (ISSLASH (name[len - 1])) { errno = ENOTDIR; return -1; } } #endif /* REPLACE_FUNC_STAT_FILE */ #if REPLACE_FUNC_STAT_DIR if (result == -1 && errno == ENOENT) { /* Due to mingw's oddities, there are some directories (like c:\) where stat() only succeeds with a trailing slash, and other directories (like c:\windows) where stat() only succeeds without a trailing slash. But we want the two to be synonymous, since chdir() manages either style. Likewise, Mingw also reports ENOENT for names longer than PATH_MAX, when we want ENAMETOOLONG, and for stat("file/"), when we want ENOTDIR. Fortunately, mingw PATH_MAX is small enough for stack allocation. */ char fixed_name[PATH_MAX + 1] = {0}; size_t len = strlen (name); bool check_dir = false; verify (PATH_MAX <= 4096); if (PATH_MAX <= len) errno = ENAMETOOLONG; else if (len) { strcpy (fixed_name, name); if (ISSLASH (fixed_name[len - 1])) { check_dir = true; while (len && ISSLASH (fixed_name[len - 1])) fixed_name[--len] = '\0'; if (!len) fixed_name[0] = '/'; } else fixed_name[len++] = '/'; result = orig_stat (fixed_name, st); if (result == 0 && check_dir && !S_ISDIR (st->st_mode)) { result = -1; errno = ENOTDIR; } } } #endif /* REPLACE_FUNC_STAT_DIR */ return result; } �����������������������������������������gnulib-20111211-stable/lib/stdalign.in.h������������������������������������������������������������0000664�0000000�0000000�00000006561�11671051007�0017633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C 1x <stdalign.h>. Copyright 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert and Bruno Haible. */ #ifndef _GL_STDALIGN_H #define _GL_STDALIGN_H /* ISO C1X <stdalign.h> for platforms that lack it. References: ISO C1X <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf> sections 6.5.3.4, 6.7.5, 7.15. C++0X <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 __alignof__ operator, which can yield a better-performing alignment for an object of that type. For example, on x86 with GCC, __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> #if defined __cplusplus template <class __t> struct __alignof_helper { char __a; __t __b; }; # define _Alignof(type) offsetof (__alignof_helper<type>, __b) #else # define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) #endif #define alignof _Alignof #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 draft C1X 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 __GNUC__ || __IBMC__ || __IBMCPP__ || 0x5110 <= __SUNPRO_C # define _Alignas(a) __attribute__ ((__aligned__ (a))) #elif 1300 <= _MSC_VER # define _Alignas(a) __declspec (align (a)) #endif #ifdef _Alignas # define alignas _Alignas # define __alignas_is_defined 1 #endif #endif /* _GL_STDALIGN_H */ �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/stdarg.in.h��������������������������������������������������������������0000664�0000000�0000000�00000002273�11671051007�0017306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <stdarg.h>. Copyright (C) 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/stdbool.in.h�������������������������������������������������������������0000664�0000000�0000000�00000011660�11671051007�0017470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2003, 2006-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 /* For the sake of symbolic names in gdb, we 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 if we do this, values of type '_Bool' may 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 we add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ #if defined __cplusplus || (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 http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html http://lists.gnu.org/archive/html/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@ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # endif # endif #endif #define bool _Bool /* The other macros must be usable in preprocessor directives. */ #define false 0 #define true 1 #define __bool_true_false_are_defined 1 #endif /* _GL_STDBOOL_H */ ��������������������������������������������������������������������������������gnulib-20111211-stable/lib/stddef.in.h��������������������������������������������������������������0000664�0000000�0000000�00000005343�11671051007�0017274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Eric Blake. */ /* * POSIX 2008 <stddef.h> for platforms that have issues. * <http://www.opengroup.org/susv3xbd/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 # undef _@GUARD_PREFIX@_STDDEF_H # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ #if @REPLACE_NULL@ # 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 /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/stdint.in.h��������������������������������������������������������������0000664�0000000�0000000�00000042725�11671051007�0017335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2002, 2004-2011 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* * ISO C 99 <stdint.h> for platforms that lack it. * <http://www.opengroup.org/susv3xbd/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 /* 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 /* 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 /* <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. MacOS 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 /* Get LONG_MIN, LONG_MAX, ULONG_MAX. */ #include <limits.h> #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. */ #define _STDINT_MIN(signed, bits, zero) \ ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) #define _STDINT_MAX(signed, bits, zero) \ ((signed) \ ? ~ _STDINT_MIN (signed, bits, zero) \ : /* The expression for the unsigned case. The subtraction of (signed) \ is a nop in the unsigned case and avoids "signed integer overflow" \ warnings in the signed case. */ \ ((((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 # elif @HAVE_LONG_LONG_INT@ # 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 # elif @HAVE_UNSIGNED_LONG_LONG_INT@ # 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. Assume that 'long int' is fast enough for all narrower integers. */ #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 long int gl_int_fast8_t; typedef unsigned long int gl_uint_fast8_t; typedef long int gl_int_fast16_t; typedef unsigned long int gl_uint_fast16_t; typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_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 */ #undef intptr_t #undef uintptr_t typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; #define intptr_t gl_intptr_t #define uintptr_t gl_uintptr_t /* 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 @HAVE_LONG_LONG_INT@ && 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 @HAVE_UNSIGNED_LONG_LONG_INT@ && 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 */ #if ! defined __cplusplus || defined __STDC_LIMIT_MACROS /* 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 LONG_MIN #define INT_FAST8_MAX LONG_MAX #define UINT_FAST8_MAX ULONG_MAX #undef INT_FAST16_MIN #undef INT_FAST16_MAX #undef UINT_FAST16_MAX #define INT_FAST16_MIN LONG_MIN #define INT_FAST16_MAX LONG_MAX #define UINT_FAST16_MAX ULONG_MAX #undef INT_FAST32_MIN #undef INT_FAST32_MAX #undef UINT_FAST32_MAX #define INT_FAST32_MIN LONG_MIN #define INT_FAST32_MAX LONG_MAX #define UINT_FAST32_MAX ULONG_MAX #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 #define INTPTR_MIN LONG_MIN #define INTPTR_MAX LONG_MAX #define UINTPTR_MAX ULONG_MAX /* 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_MIN (1, 64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif #else # define PTRDIFF_MIN \ _STDINT_MIN (1, @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 #define SIG_ATOMIC_MIN \ _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) #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) /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ # include <stddef.h> # include <stdio.h> # include <time.h> # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include <wchar.h> # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H #endif #undef WCHAR_MIN #undef WCHAR_MAX #define WCHAR_MIN \ _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) #define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ #undef WINT_MIN #undef WINT_MAX #define WINT_MIN \ _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) #define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) #endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */ /* 7.18.4. Macros for integer constants */ #if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS /* 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 #elif @HAVE_LONG_LONG_INT@ # 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 #elif @HAVE_UNSIGNED_LONG_LONG_INT@ # define UINT64_C(x) x##ULL #endif /* 7.18.4.2. Macros for greatest-width integer constants */ #ifndef INTMAX_C # if @HAVE_LONG_LONG_INT@ && 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 @HAVE_UNSIGNED_LONG_LONG_INT@ && 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 /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ �������������������������������������������gnulib-20111211-stable/lib/stdio--.h����������������������������������������������������������������0000664�0000000�0000000�00000002206�11671051007�0016665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like stdio.h, but redefine some names to avoid glitches. Copyright (C) 2005-2006, 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 <http://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-20111211-stable/lib/stdio-impl.h�������������������������������������������������������������0000664�0000000�0000000�00000010103�11671051007�0017465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Implementation details of FILE streams. Copyright (C) 2007-2008, 2010-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 <http://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. */ /* BSD stdio derived implementations. */ #if defined __NetBSD__ /* NetBSD */ /* Get __NetBSD_Version__. */ # include <sys/param.h> #endif #if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ # if defined __DragonFly__ /* DragonFly */ /* See <http://www.dragonflybsd.org/cvsweb/src/lib/libc/stdio/priv_stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>. */ # 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 <http://www.dragonflybsd.org/cvsweb/src/include/stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>. */ # define _p pub._p # define _flags pub._flags # define _r pub._r # define _w pub._w # else # define fp_ fp # endif # if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ /* NetBSD >= 1.5ZA, OpenBSD */ /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> and <http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */ struct __sfileext { struct __sbuf _ub; /* ungetc buffer */ /* More fields, not relevant here. */ }; # define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub # else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, MacOS X, Cygwin */ # define fp_ub fp_->_ub # endif # define HASUB(fp) (fp_ub._base != NULL) #endif /* SystemV derived implementations. */ #ifdef __TANDEM /* NonStop Kernel */ # ifndef _IOERR /* These values were determined by the program 'stdioext-flags' at <http://lists.gnu.org/archive/html/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) # else # define fp_ fp # endif # if defined _SCO_DS /* OpenServer */ # define _cnt __cnt # define _ptr __ptr # define _base __base # define _flag __flag # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/stdio-read.c�������������������������������������������������������������0000664�0000000�0000000�00000012022�11671051007�0017434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream read function. Copyright (C) 2008-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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 __WIN32__) && ! defined __CYGWIN__ # include <errno.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "msvc-nothrow.h" # 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; \ } int scanf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stdin, format, args); va_end (args); return retval; } 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; } int vscanf (const char *format, va_list args) { return vfscanf (stdin, format, args); } int vfscanf (FILE *stream, const char *format, va_list args) #undef vfscanf { CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF) } 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) } char * gets (char *s) #undef gets { FILE *stream = stdin; CALL_WITH_ERRNO_FIX (char *, gets (s), ret == NULL) } 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-20111211-stable/lib/stdio-safer.h������������������������������������������������������������0000664�0000000�0000000�00000002162�11671051007�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke stdio functions, but avoid some glitches. Copyright (C) 2001, 2003, 2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <stdio.h> #if GNULIB_FOPEN_SAFER FILE *fopen_safer (char const *, char const *); #endif #if GNULIB_FREOPEN_SAFER FILE *freopen_safer (char const *, char const *, FILE *); #endif #if GNULIB_POPEN_SAFER FILE *popen_safer (char const *, char const *); #endif #if GNULIB_TMPFILE_SAFER FILE *tmpfile_safer (void); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/stdio-write.c������������������������������������������������������������0000664�0000000�0000000�00000016376�11671051007�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream write function. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 __WIN32__) && ! defined __CYGWIN__ # include <errno.h> # include <signal.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "msvc-nothrow.h" # 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-20111211-stable/lib/stdio.in.h���������������������������������������������������������������0000664�0000000�0000000�00000141027�11671051007�0017145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdio.h>. Copyright (C) 2004, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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. */ #include <sys/types.h> /* 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. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF 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_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, 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 ((__printf__, 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)) /* Solaris 10 declares 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 __GLIBC__ # 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. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) #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 *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *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 _GL_CXXALIASWARN (fclose); #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_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_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #elif defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on Win32 platforms is not POSIX compatible - " "use gnulib module fdopen for portability"); #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 _GL_CXXALIASWARN (fflush); #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 _GL_CXXALIASWARN (fgetc); #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 *s, int n, FILE *stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); # endif _GL_CXXALIASWARN (fgets); #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 *filename, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); # else _GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); # endif _GL_CXXALIASWARN (fopen); #elif defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on Win32 platforms is not POSIX compatible - " "use gnulib module fopen for portability"); #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 *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); # endif _GL_CXXALIASWARN (fprintf); #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 _GL_CXXALIASWARN (fputc); #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 *string, FILE *stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); # endif _GL_CXXALIASWARN (fputs); #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 *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # endif _GL_CXXALIASWARN (fread); #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 *filename, const char *mode, FILE *stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # endif _GL_CXXALIASWARN (freopen); #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on Win32 platforms is not POSIX compatible - " "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 *stream, const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); # endif _GL_CXXALIASWARN (fscanf); #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 _GL_CXXALIASWARN (fseek); #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 _GL_CXXALIASWARN (ftell); #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 *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); /* Work around glibc bug 11959 <http://sources.redhat.com/bugzilla/show_bug.cgi?id=11959>, which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes, so it's not needed for C++. */ # if !defined __cplusplus && 0 < __USE_FORTIFY_LEVEL static inline size_t _GL_ARG_NONNULL ((1, 4)) rpl_fwrite (const void *ptr, size_t s, size_t n, FILE *stream) { size_t r = fwrite (ptr, s, n, stream); (void) r; return r; } # undef fwrite # define fwrite rpl_fwrite # endif # endif _GL_CXXALIASWARN (fwrite); #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 _GL_CXXALIASWARN (getc); #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 _GL_CXXALIASWARN (getchar); #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 **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *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 **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *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 #if @GNULIB_GETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gets # define gets rpl_gets # endif _GL_FUNCDECL_RPL (gets, char *, (char *s) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gets, char *, (char *s)); # else _GL_CXXALIAS_SYS (gets, char *, (char *s)); # undef gets # endif _GL_CXXALIASWARN (gets); /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning. Assume it is always declared, since it is required by C89. */ _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #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 (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 (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 (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 (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, "popen 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 _GL_CXXALIASWARN (perror); #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_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #elif 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 #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__ # 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 *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *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 *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); # endif _GL_CXXALIASWARN (printf); #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 _GL_CXXALIASWARN (putc); #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 _GL_CXXALIASWARN (putchar); #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 _GL_CXXALIASWARN (puts); #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 _GL_CXXALIASWARN (remove); #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 _GL_CXXALIASWARN (rename); #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__ # 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 *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 *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); # endif _GL_CXXALIASWARN (scanf); #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif _GL_FUNCDECL_RPL (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *str, size_t size, const char *format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *str, size_t size, const char *format, ...)); # endif _GL_CXXALIASWARN (snprintf); #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 sprintf should be handled like gets (for example, OpenBSD issues a link warning for both functions), since both 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 _GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); # endif _GL_CXXALIASWARN (sprintf); #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_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif _GL_CXXALIASWARN (tmpfile); #elif 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 #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 _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (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 (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 _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (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 (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 *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (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 *format, va_list args)); # endif _GL_CXXALIASWARN (vdprintf); #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 *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *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 *fp, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfprintf); #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 *stream, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *stream, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfscanf); #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 *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *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 *format, va_list args)); # endif _GL_CXXALIASWARN (vprintf); #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 *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); # endif _GL_CXXALIASWARN (vscanf); #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif _GL_FUNCDECL_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsnprintf); #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 _GL_FUNCDECL_RPL (vsprintf, int, (char *str, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *str, const char *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 *str, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsprintf); #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-20111211-stable/lib/stdlib--.h���������������������������������������������������������������0000664�0000000�0000000�00000002101�11671051007�0017016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like stdlib.h, but redefine some names to avoid glitches. Copyright (C) 2005-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 <http://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-20111211-stable/lib/stdlib-safer.h�����������������������������������������������������������0000664�0000000�0000000�00000001775�11671051007�0020002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke stdlib.h functions, but avoid some glitches. Copyright (C) 2005, 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 <http://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-20111211-stable/lib/stdlib.in.h��������������������������������������������������������������0000664�0000000�0000000�00000066756�11671051007�0017323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdlib.h>. Copyright (C) 1995, 2001-2004, 2006-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 <http://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_malloc_and_calloc /* Special invocation convention inside glibc header files. */ #@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@ # include <sys/loadavg.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@ || !@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_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) /* On MacOS X 10.3, only <unistd.h> declares mkstemp. */ /* On MacOS X 10.5, only <unistd.h> declares mkstemps. */ /* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ /* But avoid namespace pollution on glibc systems and native Windows. */ # include <unistd.h> #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_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_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_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); # else _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif _GL_CXXALIASWARN (calloc); #elif 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 #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_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); # else # if !@HAVE_CANONICALIZE_FILE_NAME@ _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif _GL_CXXALIASWARN (canonicalize_file_name); #elif 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 #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:2001 specification. http://www.opengroup.org/susv3xsh/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_CXXALIAS_RPL (malloc, void *, (size_t size)); # else _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif _GL_CXXALIASWARN (malloc); #elif 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 /* 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 *pwc, const char *s, size_t n)); _GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # else _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # endif _GL_CXXALIASWARN (mbtowc); #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_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 !@HAVE_PTSNAME@ _GL_FUNCDECL_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIAS_SYS (ptsname, char *, (int fd)); _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 _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)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #endif #if @GNULIB_RANDOM_R@ # if !@HAVE_RANDOM_R@ # ifndef RAND_MAX # define RAND_MAX 2147483647 # endif # endif #endif #if @GNULIB_RANDOM_R@ # 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)); _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 !@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)); _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 !@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 _GL_CXXALIAS_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); _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 !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state)); _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_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); # else _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif _GL_CXXALIASWARN (realloc); #elif 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 #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif _GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); # else # if !@HAVE_REALPATH@ _GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *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_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 _GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); # else # if !@HAVE_STRTOD@ _GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); # endif _GL_CXXALIASWARN (strtod); #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_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 !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, (const char *string, char **endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, (const char *string, char **endptr, int base)); _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_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 !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, (const char *string, char **endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, (const char *string, char **endptr, int base)); _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 _GL_CXXALIASWARN (wctomb); #endif #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif ������������������gnulib-20111211-stable/lib/stpcpy.c�����������������������������������������������������������������0000664�0000000�0000000�00000002542�11671051007�0016731�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-2011 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 program is free software: you can redistribute it and/or modify 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 <http://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-20111211-stable/lib/stpncpy.c����������������������������������������������������������������0000664�0000000�0000000�00000004122�11671051007�0017103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1993, 1995-1997, 2002-2003, 2005-2007, 2009-2011 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 program is free software: you can redistribute it and/or modify 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 <http://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-20111211-stable/lib/str-kmp.h����������������������������������������������������������������0000664�0000000�0000000�00000012571�11671051007�0017014�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-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 http://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-20111211-stable/lib/str-two-way.h������������������������������������������������������������0000664�0000000�0000000�00000042276�11671051007�0017641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Byte-wise substring search, using the Two-Way algorithm. Copyright (C) 2008-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Eric Blake <ebb9@byu.net>, 2008. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Before including this file, you need to include <config.h> and <string.h>, and define: RESULT_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 http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, http://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-20111211-stable/lib/strcasecmp.c�������������������������������������������������������������0000664�0000000�0000000�00000003540�11671051007�0017552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strcasestr.c�������������������������������������������������������������0000664�0000000�0000000�00000006050�11671051007�0017602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive searching in a string. Copyright (C) 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/strchrnul.c��������������������������������������������������������������0000664�0000000�0000000�00000013015�11671051007�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2003, 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 <http://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-20111211-stable/lib/strchrnul.valgrind�������������������������������������������������������0000664�0000000�0000000�00000000403�11671051007�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in strchrnul(). # This use is OK because it provides only a speedup. { strchrnul-value4 Memcheck:Value4 fun:strchrnul } { strchrnul-value8 Memcheck:Value8 fun:strchrnul } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strcspn.c����������������������������������������������������������������0000664�0000000�0000000�00000002336�11671051007�0017104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994, 1996-1997, 2002-2003, 2005-2006, 2009-2011 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 program is free software: you can redistribute it and/or modify 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stddef.h> #include <string.h> #undef strcspn /* 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-20111211-stable/lib/strdup.c�����������������������������������������������������������������0000664�0000000�0000000�00000002601�11671051007�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/streq.h������������������������������������������������������������������0000664�0000000�0000000�00000007643�11671051007�0016561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimized string comparison. Copyright (C) 2001-2002, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #ifndef _GL_STREQ_H #define _GL_STREQ_H #include <string.h> /* STREQ allows to optimize string comparison with a small literal string. STREQ (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 (__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(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(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ (strcmp (s1, s2) == 0) #endif #endif /* _GL_STREQ_H */ ���������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strerror-override.c������������������������������������������������������0000664�0000000�0000000�00000021030�11671051007�0021077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-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 <http://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 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"; 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 ENOTRECOVERABLE: return "State not recoverable"; case EOWNERDEAD: return "Owner died"; 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 default: return NULL; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strerror-override.h������������������������������������������������������0000664�0000000�0000000�00000003500�11671051007�0021106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-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 <http://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_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 extern const char *strerror_override (int errnum); # else # define strerror_override(ignored) NULL # endif #endif /* _GL_STRERROR_OVERRIDE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strerror.c���������������������������������������������������������������0000664�0000000�0000000�00000004043�11671051007�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror.c --- POSIX compatible system error routine 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 <http://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 (); return memcpy (buf, msg, len + 1); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strerror_r.c�������������������������������������������������������������0000664�0000000�0000000�00000022575�11671051007�0017622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror_r.c --- POSIX compatible system error routine Copyright (C) 2010-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 <http://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> #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 #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 __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 /* 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 # 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; } # 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); int ret; if (len < buflen) { /* Although POSIX allows memcpy() to corrupt errno, we don't know of any implementation where this is a real problem. */ memcpy (buf, msg, len + 1); ret = 0; } else { memcpy (buf, msg, buflen - 1); buf[buflen - 1] = '\0'; ret = ERANGE; } return ret; } 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 { extern int __xpg_strerror_r (int errnum, char *buf, size_t buflen); 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. */ if (ret < 0) ret = errno; # endif # ifdef _AIX /* AIX returns 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 __WIN32__) && !defined __CYGWIN__) || defined __CYGWIN__ /* NetBSD, HP-UX, native Win32, 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 Win32: 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 (ret == EINVAL && !*buf) snprintf (buf, buflen, "Unknown error %d", errnum); errno = saved_errno; return ret; } } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strftime.c���������������������������������������������������������������0000664�0000000�0000000�00000133560�11671051007�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2001, 2003-2007, 2009-2011 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 program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef _LIBC # define HAVE_STRUCT_ERA_ENTRY 1 # define HAVE_TM_GMTOFF 1 # define HAVE_TM_ZONE 1 # define HAVE_TZNAME 1 # define HAVE_TZSET 1 # include "../locale/localeinfo.h" #else # include <config.h> # if FPRINTFTIME # include "ignore-value.h" # include "fprintftime.h" # else # include "strftime.h" # endif #endif #include <ctype.h> #include <time.h> #if HAVE_TZNAME && !HAVE_DECL_TZNAME extern char *tzname[]; #endif /* Do multibyte processing if multibytes 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 <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.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 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) / (1 << (b)) - ((a) % (1 << (b)) < 0)) /* Bound on length of the string representing an integer type or expression T. Subtract 1 for the sign bit if t is signed; log10 (2.0) < 146/485; add 1 for integer division truncation; add 1 more for a minus sign if needed. */ #define INT_STRLEN_BOUND(t) \ ((sizeof (t) * CHAR_BIT - 1) * 146 / 485 + 2) #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 tzname __tzname # define tzset __tzset #endif #if !HAVE_TM_GMTOFF /* 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. 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 #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) \ do \ { \ size_t _n = (n); \ size_t _w = (width < 0 ? 0 : width); \ size_t _incr = _n < _w ? _w : _n; \ if (_incr >= maxsize - i) \ return 0; \ if (p) \ { \ if (digits == 0 && _n < _w) \ { \ size_t _delta = width - _n; \ if (pad == L_('0')) \ memset_zero (p, _delta); \ else \ memset_space (p, _delta); \ } \ f; \ advance (p, _n); \ } \ i += _incr; \ } while (0) #if FPRINTFTIME # define add1(C) add (1, fputc (C, p)) #else # define add1(C) add (1, *p = C) #endif #if FPRINTFTIME # define cpy(n, s) \ add ((n), \ do \ { \ if (to_lowcase) \ fwrite_lowcase (p, (s), _n); \ else if (to_uppcase) \ fwrite_uppcase (p, (s), _n); \ else \ { \ /* We are ignoring the value of fwrite here, in spite of the \ fact that technically, that may not be valid: the fwrite \ specification in POSIX 2008 defers to that of fputc, which \ is intended to be consistent with the one from ISO C, \ which permits failure due to ENOMEM *without* setting the \ stream's error indicator. */ \ ignore_value (fwrite ((s), _n, 1, p)); \ } \ } \ while (0) \ ) #else # define cpy(n, s) \ add ((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_ARG , loc # define LOCALE_PARAM_PROTO , __locale_t loc # define HELPER_LOCALE_ARG , current #else # define LOCALE_PARAM_PROTO # 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_PROTO) { 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_PROTO) { 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 *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 */ /* 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) #ifdef __GNUC__ __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 UT and NS. Emacs is a special case for now, but this Emacs-specific code can be removed once Emacs's config.h defines my_strftime. */ #if defined emacs && !defined my_strftime # define my_strftime nstrftime #endif #if FPRINTFTIME # undef my_strftime # define my_strftime fprintftime #endif #ifdef my_strftime # define extra_args , ut, ns # define extra_args_spec , int ut, 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 ut 0 # define ns 0 #endif /* Just like my_strftime, below, but with one more parameter, UPCASE, to indicate that the result should be converted to upper case. */ static size_t strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) const CHAR_T *format, const struct tm *tp extra_args_spec LOCALE_PARAM_PROTO) { #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 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 *) _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday)) # define f_wkday \ ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday)) # define a_month \ ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon)) # define f_month \ ((const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(MON_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 ap_len STRLEN (ampm) #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 #if ! defined _LIBC && ! HAVE_RUN_TZSET_TEST /* Solaris 2.5.x and 2.6 tzset sometimes modify the storage returned by localtime. On such systems, we must either use the tzset and localtime wrappers to work around the bug (which sets HAVE_RUN_TZSET_TEST) or make a copy of the structure. */ struct tm copy = *tp; tp = © #endif zone = NULL; #if HAVE_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 (ut) { if (! (zone && *zone)) zone = "GMT"; } else { /* POSIX.1 requires that local time zone information be used as though strftime called tzset. */ # if HAVE_TZSET tzset (); # endif } #endif if (hour12 > 12) hour12 -= 12; else if (hour12 == 0) hour12 = 12; for (f = format; *f != '\0'; ++f) { int pad = 0; /* Padding for number ('-', '_', 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 sign_char; 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))]; int width = -1; bool to_lowcase = false; bool to_uppcase = upcase; size_t colons; bool change_case = false; int format_char; #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_('0'): pad = *f; continue; /* This changes textual output. */ case L_('^'): to_uppcase = true; continue; case L_('#'): change_case = true; continue; default: break; } break; } /* As a GNU extension we allow to specify the field width. */ if (ISDIGIT (*f)) { width = 0; do { if (width > INT_MAX / 10 || (width == INT_MAX / 10 && *f - L_('0') > INT_MAX % 10)) /* Avoid overflow. */ width = INT_MAX; else { width *= 10; width += *f - L_('0'); } ++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) \ digits = d; \ number_value = v; goto do_number #define DO_SIGNED_NUMBER(d, negative, v) \ digits = d; \ negative_number = negative; \ u_number_value = v; goto do_signed_number /* 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, negative, mask, v) \ digits = d; \ negative_number = negative; \ tz_colon_mask = mask; \ u_number_value = v; goto do_tz_offset #define DO_NUMBER_SPACEPAD(d, v) \ digits = d; \ number_value = v; goto do_number_spacepad 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 != 0) goto bad_format; #ifdef _NL_CURRENT cpy (am_len, a_month); break; #else goto underlying_strftime; #endif case L_('B'): if (modifier != 0) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT 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 == '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: { size_t len = strftime_case_ (to_uppcase, NULL, STRFTIME_ARG ((size_t) -1) subfmt, tp extra_args LOCALE_ARG); add (len, strftime_case_ (to_uppcase, p, STRFTIME_ARG (maxsize - i) subfmt, tp 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_('O')) goto bad_format; 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 } { int century = tp->tm_year / 100 + TM_YEAR_BASE / 100; century -= tp->tm_year % 100 < 0 && 0 < century; DO_SIGNED_NUMBER (2, tp->tm_year < - TM_YEAR_BASE, 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_number_spacepad: /* Force `_' flag unless overridden by `0' or `-' flag. */ if (pad != L_('0') && pad != L_('-')) 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; 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 (digits < width) digits = width; sign_char = (negative_number ? L_('-') : always_output_a_sign ? L_('+') : 0); if (pad == L_('-')) { if (sign_char) add1 (sign_char); } else { int padding = digits - (buf + (sizeof (buf) / sizeof (buf[0])) - bufp) - !!sign_char; if (padding > 0) { if (pad == L_('_')) { if ((size_t) padding >= maxsize - i) return 0; if (p) memset_space (p, padding); i += padding; width = width > padding ? width - padding : 0; if (sign_char) add1 (sign_char); } else { if ((size_t) digits >= maxsize - i) return 0; if (sign_char) add1 (sign_char); if (p) memset_zero (p, padding); i += padding; width = 0; } } else { if (sign_char) add1 (sign_char); } } cpy (buf + sizeof (buf) / sizeof (buf[0]) - bufp, bufp); break; case L_('F'): if (modifier != 0) goto bad_format; subfmt = L_("%Y-%m-%d"); goto subformat; 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; number_value = ns; if (width == -1) width = 9; else { /* Take an explicit width less than 9 as a precision. */ int j; for (j = width; j < 9; j++) number_value /= 10; } DO_NUMBER (width, number_value); #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_('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; t = mktime (<m); /* 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_NUMBER (2, (0 <= yy ? yy : tp->tm_year < -TM_YEAR_BASE - year_adjust ? -yy : yy + 100)); } case L_('G'): DO_SIGNED_NUMBER (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 == '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 goto subformat; } #else goto underlying_strftime; #endif } if (modifier == L_('O')) goto bad_format; else DO_SIGNED_NUMBER (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]; DO_NUMBER (1, (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_NUMBER (2, yy); } case L_('Z'): if (change_case) { to_uppcase = false; to_lowcase = true; } #if HAVE_TZNAME /* The tzset() call might have changed the value. */ if (!(zone && *zone) && tp->tm_isdst >= 0) zone = tzname[tp->tm_isdst != 0]; #endif if (! zone) zone = ""; #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 (ut) diff = 0; else { struct tm gtm; struct tm ltm; time_t lt; ltm = *tp; lt = mktime (<m); if (lt == (time_t) -1) { /* mktime returns -1 for errors, but -1 is also a valid time_t value. Check whether an error really occurred. */ struct tm tm; if (! __localtime_r (<, &tm) || ((ltm.tm_sec ^ tm.tm_sec) | (ltm.tm_min ^ tm.tm_min) | (ltm.tm_hour ^ tm.tm_hour) | (ltm.tm_mday ^ tm.tm_mday) | (ltm.tm_mon ^ tm.tm_mon) | (ltm.tm_year ^ tm.tm_year))) break; } if (! __gmtime_r (<, >m)) break; diff = tm_diff (<m, >m); } #endif hour_diff = diff / 60 / 60; min_diff = diff / 60 % 60; sec_diff = diff % 60; switch (colons) { case 0: /* +hhmm */ DO_TZ_OFFSET (5, diff < 0, 0, hour_diff * 100 + min_diff); case 1: tz_hh_mm: /* +hh:mm */ DO_TZ_OFFSET (6, diff < 0, 04, hour_diff * 100 + min_diff); case 2: tz_hh_mm_ss: /* +hh:mm:ss */ DO_TZ_OFFSET (9, diff < 0, 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, diff < 0, 0, hour_diff); default: goto bad_format; } } case L_('\0'): /* GNU extension: % at end of format. */ --f; /* Fall through. */ 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 return i; } /* 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_PROTO) { return strftime_case_ (false, s, STRFTIME_ARG (maxsize) format, tp extra_args LOCALE_ARG); } #if defined _LIBC && ! FPRINTFTIME libc_hidden_def (my_strftime) #endif #if defined emacs && ! FPRINTFTIME /* For Emacs we have a separate interface which corresponds to the normal strftime function plus the ut argument, but without the ns argument. */ size_t emacs_strftimeu (char *s, size_t maxsize, const char *format, const struct tm *tp, int ut) { return my_strftime (s, maxsize, format, tp, ut, 0); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strftime.h���������������������������������������������������������������0000664�0000000�0000000�00000002306�11671051007�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* declarations for strftime.c Copyright (C) 2002, 2004, 2008-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 <http://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. When __UTC is nonzero and tm->tm_zone is NULL or the empty string, use UTC instead. Use __NS as the number of nanoseconds in the %N directive. */ size_t nstrftime (char *, size_t, char const *, struct tm const *, int __utc, int __ns); #ifdef __cplusplus } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/striconv.c���������������������������������������������������������������0000664�0000000�0000000�00000031310�11671051007�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion. Copyright (C) 2001-2007, 2010-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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) { int saved_errno = errno; free (result); errno = saved_errno; } 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: { int saved_errno = errno; free (result); errno = saved_errno; 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) { /* Return NULL, but free the allocated memory, and while doing that, preserve the errno from iconv_close. */ int saved_errno = errno; free (result); errno = saved_errno; 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-20111211-stable/lib/striconv.h���������������������������������������������������������������0000664�0000000�0000000�00000005611�11671051007�0017263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion. Copyright (C) 2001-2004, 2006-2007, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _STRICONV_H #define _STRICONV_H #include <stddef.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); #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); #ifdef __cplusplus } #endif #endif /* _STRICONV_H */ �����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/striconveh.c�������������������������������������������������������������0000664�0000000�0000000�00000114533�11671051007�0017577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion with error handling. Copyright (C) 2001-2011 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 <http://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 (cdp->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) { int saved_errno = errno; free (result); errno = saved_errno; } 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) { int saved_errno = errno; free (result); errno = saved_errno; } 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) { int saved_errno = errno; free (result); errno = saved_errno; } 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) { int saved_errno = errno; free (result); errno = saved_errno; } return -1; } } else { if (result != initial_result) { int saved_errno = errno; free (result); errno = saved_errno; } 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) { if (result != NULL) { int saved_errno = errno; free (result); errno = saved_errno; } 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) { /* Return -1, but free the allocated memory, and while doing that, preserve the errno from iconveh_close. */ int saved_errno = errno; if (result != *resultp && result != NULL) free (result); errno = saved_errno; 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) { /* Return NULL, but free the allocated memory, and while doing that, preserve the errno from iconveh_close. */ int saved_errno = errno; free (result); errno = saved_errno; 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-20111211-stable/lib/striconveh.h�������������������������������������������������������������0000664�0000000�0000000�00000013225�11671051007�0017600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion with error handling. Copyright (C) 2001-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _STRICONVEH_H #define _STRICONVEH_H #include <stddef.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); #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); #ifdef __cplusplus } #endif #endif /* _STRICONVEH_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/striconveha.c������������������������������������������������������������0000664�0000000�0000000�00000025746�11671051007�0017747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion with error handling and autodetection. Copyright (C) 2002, 2005, 2007, 2009-2011 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 <http://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-20111211-stable/lib/striconveha.h������������������������������������������������������������0000664�0000000�0000000�00000010034�11671051007�0017734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character set conversion with error handling and autodetection. Copyright (C) 2002, 2005, 2007-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _STRICONVEHA_H #define _STRICONVEHA_H #include <stdbool.h> #include <stddef.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); /* 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-20111211-stable/lib/string.in.h��������������������������������������������������������������0000664�0000000�0000000�00000115224�11671051007�0017331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <string.h>. Copyright (C) 1995-1996, 2001-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _@GUARD_PREFIX@_STRING_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include <wchar.h> #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #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 /* 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. */ /* 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 !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _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 /* 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) # 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 # if ! @HAVE_MEMCHR@ _GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* 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)); # else _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 (strchr, "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_CXXALIAS_RPL (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@ || defined strdup) _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #elif 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 #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 *dest, const char *src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); # endif _GL_CXXALIASWARN (strncat); #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 *__string, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n)); # else # if ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__string, 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 *__string, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, 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)); # else _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 (strpbrk, "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 (strpbrk, "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 (strrchr, "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)); # else _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: http://www.opengroup.org/susv3xsh/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_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _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_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_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_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_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_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_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_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_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_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_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_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_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_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_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 *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 _GL_CXXALIASWARN (strerror); #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 #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_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 */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strings.in.h�������������������������������������������������������������0000664�0000000�0000000�00000007767�11671051007�0017530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute <strings.h>. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/stripslash.c�������������������������������������������������������������0000664�0000000�0000000�00000003041�11671051007�0017576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stripslash.c -- remove redundant trailing slashes from a file name Copyright (C) 1990, 2001, 2003-2006, 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 <http://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-20111211-stable/lib/strncasecmp.c������������������������������������������������������������0000664�0000000�0000000�00000003670�11671051007�0017734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strncasecmp.c -- case insensitive string comparator Copyright (C) 1998-1999, 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); } ������������������������������������������������������������������������gnulib-20111211-stable/lib/strncat.c����������������������������������������������������������������0000664�0000000�0000000�00000002125�11671051007�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate strings. Copyright (C) 1999, 2002, 2006, 2010-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/strndup.c����������������������������������������������������������������0000664�0000000�0000000�00000002135�11671051007�0017104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A replacement function, for systems that lack strndup. Copyright (C) 1996-1998, 2001-2003, 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/strnlen.c����������������������������������������������������������������0000664�0000000�0000000�00000002275�11671051007�0017077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING, but scan at most MAXLEN characters. Copyright (C) 2005-2007, 2009-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/strnlen1.c���������������������������������������������������������������0000664�0000000�0000000�00000002365�11671051007�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING + 1, but scan at most MAXLEN bytes. Copyright (C) 2005-2006, 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 <http://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-20111211-stable/lib/strnlen1.h���������������������������������������������������������������0000664�0000000�0000000�00000002307�11671051007�0017161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING + 1, but scan at most MAXLEN bytes. Copyright (C) 2005, 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 <http://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-20111211-stable/lib/strpbrk.c����������������������������������������������������������������0000664�0000000�0000000�00000002430�11671051007�0017072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994, 2000, 2002-2003, 2006, 2009-2011 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 program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> #include <stddef.h> #include <string.h> #undef strpbrk /* 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-20111211-stable/lib/strptime.c���������������������������������������������������������������0000664�0000000�0000000�00000107604�11671051007�0017263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2002, 2004-2005, 2007, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 <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 wday = (-473 + (365 * (tm->tm_year - 70)) + (corr_year / 4) - ((corr_year / 4) / 25) + ((corr_year / 4) % 25 < 0) + (((corr_year / 4) / 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 const char *rp_backup; 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; #endif struct era_entry *era; have_I = is_pm = 0; century = -1; want_century = 0; want_era = 0; era = NULL; 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 iput string. */ if (*fmt != '%') { match_char (*fmt++, *rp++); continue; } ++fmt; #ifndef _NL_CURRENT /* We need this for handling the `E' modifier. */ start_over: #endif /* Make back up of current processing pointer. */ rp_backup = rp; 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 '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. */ { 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 '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-20111211-stable/lib/strsep.c�����������������������������������������������������������������0000664�0000000�0000000�00000002723�11671051007�0016730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2004, 2007, 2009-2011 Free Software Foundation, Inc. Written by Yoann Vandoorselaere <yoann@prelude-ids.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ #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-20111211-stable/lib/strsignal.c��������������������������������������������������������������0000664�0000000�0000000�00000012136�11671051007�0017415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994-2002, 2005, 2008-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/strstr.c�����������������������������������������������������������������0000664�0000000�0000000�00000006110�11671051007�0016743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This particular implementation was written by Eric Blake, 2008. */ #ifndef _LIBC # include <config.h> #endif /* Specification of strstr. */ #include <string.h> #include <stdbool.h> #ifndef _LIBC # define __builtin_expect(expr, val) (expr) #endif #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-20111211-stable/lib/strtod.c�����������������������������������������������������������������0000664�0000000�0000000�00000025002�11671051007�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1992, 1997, 1999, 2003, 2006, 2008-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <ctype.h> #include <errno.h> #include <float.h> #include <limits.h> #include <math.h> #include <stdbool.h> #include <string.h> #include "c-ctype.h" #ifndef HAVE_LDEXP_IN_LIBC #define HAVE_LDEXP_IN_LIBC 0 #endif #ifndef HAVE_RAW_DECL_STRTOD #define HAVE_RAW_DECL_STRTOD 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; } #if !HAVE_LDEXP_IN_LIBC #define ldexp dummy_ldexp /* A dummy definition that will never be invoked. */ static double ldexp (double x _GL_UNUSED, int exponent _GL_UNUSED) { abort (); return 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 (HAVE_LDEXP_IN_LIBC && 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 < -DBL_MAX / radix) { errno = ERANGE; return -HUGE_VAL; } else if (DBL_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. To convert from a number of digits to a radix exponent, multiply by RADIX_MULTIPLIER (either 1 or 4). */ static double parse_number (const char *nptr, int base, int radix, int radix_multiplier, char expchar, char **endptr) { const char *s = nptr; bool got_dot = false; long int exponent = 0; double num = 0; for (;; ++s) { int digit; if (c_isdigit (*s)) digit = *s - '0'; else if (base == 16 && c_isxdigit (*s)) digit = c_tolower (*s) - ('a' - 10); else if (! got_dot && *s == '.') { /* Record that we have found the decimal point. */ got_dot = true; continue; } else /* Any other character terminates the number. */ break; /* Make sure that multiplication by base will not overflow. */ if (num <= DBL_MAX / base) num = num * base + digit; else { /* The value of the digit doesn't matter, since we have already gotten as many digits as can be represented in a `double'. This doesn't necessarily mean the result will overflow. The exponent may reduce it to within range. We just need to record that there was another digit so that we can multiply by 10 later. */ exponent += radix_multiplier; } /* Keep track of the number of digits after the decimal point. If we just divided by base here, we might lose precision. */ if (got_dot) exponent -= radix_multiplier; } if (c_tolower (*s) == expchar && ! locale_isspace (s[1])) { /* Add any given exponent to the implicit one. */ int save = errno; char *end; long int value = strtol (s + 1, &end, 10); errno = save; 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); } static double underlying_strtod (const char *, char **); /* 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 MacOS 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 /* 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) { bool negative = false; /* The number so far. */ double num; const char *s = nptr; const char *end; char *endbuf; int saved_errno; /* Eat whitespace. */ while (locale_isspace (*s)) ++s; /* Get the sign. */ negative = *s == '-'; if (*s == '-' || *s == '+') ++s; saved_errno = errno; num = underlying_strtod (s, &endbuf); end = endbuf; if (c_isdigit (s[*s == '.'])) { /* 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] == '.')])) end = s + 1; else if (end <= s + 2) { num = parse_number (s + 2, 16, 2, 4, '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] == '+')])) 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, 'e', &endbuf); } else { dup[e - s] = '\0'; num = underlying_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 = 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; } /* The "underlying" strtod implementation. This must be defined after strtod because it #undefs strtod. */ static double underlying_strtod (const char *nptr, char **endptr) { if (HAVE_RAW_DECL_STRTOD) { /* Prefer the native strtod if available. Usually it should work and it should give more-accurate results than our approximation. */ #undef strtod return strtod (nptr, endptr); } else { /* Approximate strtod well enough for this module. There's no need to handle anything but finite unsigned decimal numbers with nonnull ENDPTR. */ return parse_number (nptr, 10, 10, 1, 'e', endptr); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strtoimax.c��������������������������������������������������������������0000664�0000000�0000000�00000004024�11671051007�0017436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert string representation of a number into an intmax_t value. Copyright (C) 1999, 2001-2004, 2006, 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 <http://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 && HAVE_UNSIGNED_LONG_LONG_INT 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 && HAVE_LONG_LONG_INT long long int strtoll (char const *, char **, int); # endif #endif #ifdef UNSIGNED # define Have_long_long HAVE_UNSIGNED_LONG_LONG_INT # define Int uintmax_t # define Unsigned unsigned # define strtoimax strtoumax # define strtol strtoul # define strtoll strtoull #else # define Have_long_long HAVE_LONG_LONG_INT # define Int intmax_t # define Unsigned #endif Int strtoimax (char const *ptr, char **endptr, int base) { #if Have_long_long 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); #else verify (sizeof (Int) == sizeof (Unsigned long int)); #endif return strtol (ptr, endptr, base); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strtok_r.c���������������������������������������������������������������0000664�0000000�0000000�00000004114�11671051007�0017253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant string tokenizer. Generic version. Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/strtol.c�����������������������������������������������������������������0000664�0000000�0000000�00000025666�11671051007�0016752�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-2011 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 program is free software: you can redistribute it and/or modify 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 <http://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 # 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 # 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 # ifdef QUAD # define strtol wcstoll # else # define strtol wcstol # endif # else # ifdef QUAD # 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 /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if negative values of the signed integer type T use two's complement, ones' complement, or signed magnitude representation, respectively. Much GNU code assumes two's complement, but some people like to be portable to all possible C hosts. */ # define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) # define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) # define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) /* True if the arithmetic type T is signed. */ # define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* The maximum and minimum values for the integer type T. These macros have undefined behavior if T is signed and has padding bits. If this is a problem for you, please let us know how to fix it for your host. */ # define TYPE_MINIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) 0 \ : TYPE_SIGNED_MAGNITUDE (t) \ ? ~ (t) 0 \ : ~ TYPE_MAXIMUM (t))) # define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) # ifndef ULLONG_MAX # define ULLONG_MAX TYPE_MAXIMUM (unsigned long long) # endif # ifndef LLONG_MAX # define LLONG_MAX TYPE_MAXIMUM (long long int) # endif # ifndef LLONG_MIN # define LLONG_MIN TYPE_MINIMUM (long long int) # endif # 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 /* 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 ((Ch), loc) # define ISALPHA(Ch) __isalpha_l ((Ch), loc) # define TOUPPER(Ch) __toupper_l ((Ch), loc) # else # define ISSPACE(Ch) isspace (Ch) # define ISALPHA(Ch) isalpha (Ch) # define TOUPPER(Ch) toupper (Ch) # endif #endif #define INTERNAL(X) INTERNAL1(X) #define INTERNAL1(X) __##X##_internal #define WEAKNAME(X) WEAKNAME1(X) #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, int group 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; } /* 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); } ��������������������������������������������������������������������������gnulib-20111211-stable/lib/strtoll.c����������������������������������������������������������������0000664�0000000�0000000�00000002110�11671051007�0017101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Function to parse a `long long int' from text. Copyright (C) 1995-1997, 1999, 2001, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/strtoul.c����������������������������������������������������������������0000664�0000000�0000000�00000001450�11671051007�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1997, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #define UNSIGNED 1 #include "strtol.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strtoull.c���������������������������������������������������������������0000664�0000000�0000000�00000002016�11671051007�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Function to parse an `unsigned long long int' from text. Copyright (C) 1995-1997, 1999, 2009-2011 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 program is free software: you can redistribute it and/or modify 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 <http://www.gnu.org/licenses/>. */ #define QUAD 1 #include "strtoul.c" #ifdef _LIBC strong_alias (__strtoull_internal, __strtouq_internal) weak_alias (strtoull, strtouq) #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strtoumax.c��������������������������������������������������������������0000664�0000000�0000000�00000000052�11671051007�0017447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define UNSIGNED 1 #include "strtoimax.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/strverscmp.c�������������������������������������������������������������0000664�0000000�0000000�00000007570�11671051007�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare strings while treating digits characters numerically. Copyright (C) 1997, 2000, 2002, 2004, 2006, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997. This program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if !_LIBC # include <config.h> #endif #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 0x4 #define S_F 0x8 #define S_Z 0xC /* result_type: CMP: return diff; LEN: compare using len_diff/diff */ #define CMP 2 #define LEN 3 /* 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) #undef __strverscmp #undef strverscmp #ifndef weak_alias # define __strverscmp strverscmp #endif /* 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; unsigned char c1, c2; int state; int diff; /* Symbol(s) 0 [1-9] others (padding) Transition (10) 0 (01) d (00) x (11) - */ static const unsigned int next_state[] = { /* state x d 0 - */ /* S_N */ S_N, S_I, S_Z, S_N, /* S_I */ S_N, S_I, S_I, S_I, /* S_F */ S_N, S_F, S_F, S_F, /* S_Z */ S_N, S_F, S_Z, S_Z }; static const int result_type[] = { /* state x/x x/d x/0 x/- d/x d/d d/0 d/- 0/x 0/d 0/0 0/- -/x -/d -/0 -/- */ /* S_N */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_I */ CMP, -1, -1, CMP, 1, LEN, LEN, CMP, 1, LEN, LEN, CMP, CMP, CMP, CMP, CMP, /* S_F */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_Z */ CMP, 1, 1, CMP, -1, CMP, CMP, CMP, -1, CMP, CMP, CMP }; if (p1 == p2) return 0; c1 = *p1++; c2 = *p2++; /* Hint: '0' is a digit too. */ state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0)); while ((diff = c1 - c2) == 0 && c1 != '\0') { state = next_state[state]; c1 = *p1++; c2 = *p2++; state |= (c1 == '0') + (ISDIGIT (c1) != 0); } state = result_type[state << 2 | ((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; } } #ifdef weak_alias weak_alias (__strverscmp, strverscmp) #endif ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/symlink.c����������������������������������������������������������������0000664�0000000�0000000�00000002631�11671051007�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stub for symlink(). Copyright (C) 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 <http://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 = EEXIST; return -1; } return symlink (contents, name); } #else /* !HAVE_SYMLINK */ /* The system does not support symlinks. */ int symlink (char const *contents _GL_UNUSED, char const *name _GL_UNUSED) { errno = ENOSYS; return -1; } #endif /* !HAVE_SYMLINK */ �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/symlinkat.c��������������������������������������������������������������0000664�0000000�0000000�00000004504�11671051007�0017422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a symlink relative to an open directory. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #include <unistd.h> #if !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. */ # include <errno.h> int symlinkat (char const *path1 _GL_UNUSED, int fd _GL_UNUSED, char const *path2 _GL_UNUSED) { 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-20111211-stable/lib/sys_file.in.h������������������������������������������������������������0000664�0000000�0000000�00000003733�11671051007�0017641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/file.h. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/sys_ioctl.in.h�����������������������������������������������������������0000664�0000000�0000000�00000005020�11671051007�0020023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <sys/ioctl.h>. Copyright (C) 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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>. 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-20111211-stable/lib/sys_select.in.h����������������������������������������������������������0000664�0000000�0000000�00000024207�11671051007�0020200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/select.h>. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ /* On OSF/1, <sys/types.h> and <sys/time.h> include <sys/select.h>. Simply delegate to the system's header in this case. */ #if @HAVE_SYS_SELECT_H@ && defined __osf__ && (defined _SYS_TYPES_H_ && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H) && defined _OSF_SOURCE # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #elif @HAVE_SYS_SELECT_H@ && defined __osf__ && (defined _SYS_TIME_H_ && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H) && defined _OSF_SOURCE # 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@ #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> /* Get definition of 'sigset_t'. But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <signal.h> #endif #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, MacOS X, AIX, HP-UX, IRIX, Solaris, Interix declare select() in <sys/time.h>. But avoid namespace pollution on glibc systems. */ # ifndef __GLIBC__ # 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 #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 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 # else _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 #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 *, fd_set *, fd_set *, struct timeval *)); _GL_CXXALIAS_RPL (select, int, (int, fd_set *, fd_set *, fd_set *, struct timeval *)); # else _GL_CXXALIAS_SYS (select, int, (int, fd_set *, fd_set *, fd_set *, struct timeval *)); # 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-20111211-stable/lib/sys_socket.in.h����������������������������������������������������������0000664�0000000�0000000�00000054275�11671051007�0020221�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-2011 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 /* 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 typedef unsigned short sa_family_t; # 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 #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 indiriectly 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 <http://msdn.microsoft.com/en-us/library/ms738520> 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 !GNULIB_defined_socklen_t typedef int socklen_t; # define GNULIB_defined_socklen_t 1 # endif # 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 /* 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 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 # else _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 *addr, socklen_t *addrlen)); _GL_CXXALIAS_RPL (accept, int, (int fd, struct sockaddr *addr, socklen_t *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 *addr, socklen_t *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 *addr, socklen_t *addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getpeername, int, (int fd, struct sockaddr *addr, socklen_t *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 *addr, socklen_t *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 *addr, socklen_t *addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getsockname, int, (int fd, struct sockaddr *addr, socklen_t *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 *addr, socklen_t *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 *optval, socklen_t *optlen) _GL_ARG_NONNULL ((4, 5))); _GL_CXXALIAS_RPL (getsockopt, int, (int fd, int level, int optname, void *optval, socklen_t *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 *optval, socklen_t *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 _GL_CXXALIAS_SYS (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 _GL_CXXALIAS_SYS (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 *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recvfrom, ssize_t, (int fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *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 *buf, size_t len, int flags, struct sockaddr *from, socklen_t *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 <http://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 #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sys_stat.in.h������������������������������������������������������������0000664�0000000�0000000�00000044140�11671051007�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/stat header file. Copyright (C) 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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. */ #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 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 <unistd.h>. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #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_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 /* S_IXUGO is a common extension to POSIX. */ #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_FCHMODAT@ # 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)); _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 _GL_CXXALIASWARN (fstat); #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 *name, struct stat *st, int flags) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (fstatat, int, (int fd, char const *name, struct stat *st, int flags)); # else # if !@HAVE_FSTATAT@ _GL_FUNCDECL_SYS (fstatat, int, (int fd, char const *name, struct stat *st, int flags) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (fstatat, int, (int fd, char const *name, struct stat *st, int flags)); # endif _GL_CXXALIASWARN (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_LCHMOD@ /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME denotes a symbolic link. */ # if !@HAVE_LCHMOD@ /* The lchmod replacement follows symbolic links. Callers should take this into account; lchmod should be applied only to arguments that are known to not be symbolic links. On hosts that lack lchmod, this can lead to race conditions between the check and the invocation of lchmod, but we know of no workarounds that are reliable in general. You might try requesting support for lchmod from your operating system supplier. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lchmod chmod # endif /* Need to cast, because on mingw, the second parameter of chmod is int mode. */ _GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, (const char *filename, mode_t mode)); # else # if 0 /* assume already declared */ _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)); # endif # if @HAVE_LCHMOD@ _GL_CXXALIASWARN (lchmod); # endif #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 *name, struct stat *buf)); # elif @REPLACE_LSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lstat # define lstat rpl_lstat # endif _GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); # else _GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); # endif # if @HAVE_LSTAT@ _GL_CXXALIASWARN (lstat); # endif #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 @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)); #else /* 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 (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # if !GNULIB_defined_rpl_mkdir static inline 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) # 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 #endif _GL_CXXALIASWARN (mkdir); #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 !@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)); _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 !@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)); _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@ /* 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. */ # undef stat # ifdef _LARGE_FILES /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, so we have to replace stat64() instead of stat(). */ # define stat stat64 # undef stat64 # define stat64(name, st) rpl_stat (name, st) # else /* !_LARGE_FILES */ # define stat(name, st) rpl_stat (name, st) # endif /* !_LARGE_FILES */ _GL_EXTERN_C int stat (const char *name, struct stat *buf) _GL_ARG_NONNULL ((1, 2)); # endif #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_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-20111211-stable/lib/sys_time.in.h������������������������������������������������������������0000664�0000000�0000000�00000015610�11671051007�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/time.h. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _@GUARD_PREFIX@_SYS_TIME_H /* Simply delegate to the system's header, without adding anything. */ # if @HAVE_SYS_TIME_H@ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ # endif #else # define _@GUARD_PREFIX@_SYS_TIME_H # if @HAVE_SYS_TIME_H@ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ # else # include <time.h> # endif /* On native Windows with MSVC: Get the 'struct timeval' type. */ # if defined _MSC_VER && @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@ # 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); # 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 # else _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 */ ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sys_times.in.h�����������������������������������������������������������0000664�0000000�0000000�00000004425�11671051007�0020042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a sys/times.h header file. Copyright (C) 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/sys_types.in.h�����������������������������������������������������������0000664�0000000�0000000�00000002575�11671051007�0020071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/types.h. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ /* But avoid namespace pollution on glibc systems. */ #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <stddef.h> #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/sys_uio.in.h�������������������������������������������������������������0000664�0000000�0000000�00000003300�11671051007�0017504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/uio.h>. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ # 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-20111211-stable/lib/sys_utsname.in.h���������������������������������������������������������0000664�0000000�0000000�00000005724�11671051007�0020400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/utsname.h>. Copyright (C) 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/sys_wait.in.h������������������������������������������������������������0000664�0000000�0000000�00000007534�11671051007�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <sys/wait.h>. Copyright (C) 2001-2003, 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 __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 __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 __WIN32__) && ! defined __CYGWIN__ _GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); # endif _GL_CXXALIAS_SYS (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-20111211-stable/lib/sysexits.in.h������������������������������������������������������������0000664�0000000�0000000�00000003667�11671051007�0017725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* exit() exit codes for some BSD system programs. Copyright (C) 2003, 2006-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 <http://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 <http://lists.gnu.org/archive/html/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@ # 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-20111211-stable/lib/t-idcache����������������������������������������������������������������0000775�0000000�0000000�00000002434�11671051007�0017012�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-20111211-stable/lib/tanf.c�������������������������������������������������������������������0000664�0000000�0000000�00000001514�11671051007�0016335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tangent function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float tanf (float x) { return (float) tan ((double) x); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/tanhf.c������������������������������������������������������������������0000664�0000000�0000000�00000001531�11671051007�0016504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hyperbolic tangent function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> float tanhf (float x) { return (float) tanh ((double) x); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/tanl.c�������������������������������������������������������������������0000664�0000000�0000000�00000015054�11671051007�0016347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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 /* 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-20111211-stable/lib/tcgetsid.c���������������������������������������������������������������0000664�0000000�0000000�00000002373�11671051007�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the session ID of the controlling terminal of the current process. Copyright (C) 2010-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 /* MacOS 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-20111211-stable/lib/tempname.c���������������������������������������������������������������0000664�0000000�0000000�00000021662�11671051007�0017221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* tempname.c - generate the name of a temporary file. Copyright (C) 1991-2003, 2005-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 <http://www.gnu.org/licenses/>. */ /* Extracted from glibc sysdeps/posix/tempname.c. See also tmpdir.c. */ #if !_LIBC # include <config.h> # include "tempname.h" #endif #include <sys/types.h> #include <assert.h> #include <errno.h> #ifndef __set_errno # define __set_errno(Val) errno = (Val) #endif #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 <sys/time.h> #include <stdint.h> #include <unistd.h> #include <sys/stat.h> #if _LIBC # define struct_stat64 struct stat64 #else # define struct_stat64 struct stat # define __gen_tempname gen_tempname # define __getpid getpid # define __gettimeofday gettimeofday # define __mkdir mkdir # define __open open # define __lxstat64(version, file, buf) lstat (file, buf) #endif #if ! (HAVE___SECURE_GETENV || _LIBC) # define __secure_getenv getenv #endif #ifdef _LIBC # include <hp-timing.h> # if HP_TIMING_AVAIL # define RANDOM_BITS(Var) \ if (__builtin_expect (value == UINT64_C (0), 0)) \ { \ /* If this is the first time this function is used initialize \ the variable we accumulate the value in to some somewhat \ random value. If we'd not do this programs at startup time \ might have a reduced set of possible names, at least on slow \ machines. */ \ struct timeval tv; \ __gettimeofday (&tv, NULL); \ value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \ } \ HP_TIMING_NOW (Var) # endif #endif /* Use the widest available unsigned type if uint64_t is not available. The algorithm below extracts a number less than 62**6 (approximately 2**35.725) from uint64_t, so ancient hosts where uintmax_t is only 32 bits lose about 3.725 bits of randomness, which is better than not having mkstemp at all. */ #if !defined UINT64_MAX && !defined uint64_t # define uint64_t uintmax_t #endif #if _LIBC /* Return nonzero if DIR is an existent directory. */ static int 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, 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 */ /* 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 "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 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. */ int __gen_tempname (char *tmpl, int suffixlen, int flags, int kind) { int len; char *XXXXXX; static uint64_t value; uint64_t random_time_bits; unsigned int count; int fd = -1; int save_errno = errno; struct_stat64 st; /* 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 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. */ #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 len = strlen (tmpl); if (len < 6 + suffixlen || memcmp (&tmpl[len - 6 - suffixlen], "XXXXXX", 6)) { __set_errno (EINVAL); return -1; } /* This is where the Xs start. */ XXXXXX = &tmpl[len - 6 - suffixlen]; /* Get some more or less random data. */ #ifdef RANDOM_BITS RANDOM_BITS (random_time_bits); #else { struct timeval tv; __gettimeofday (&tv, NULL); random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; } #endif value += random_time_bits ^ __getpid (); for (count = 0; count < attempts; value += 7777, ++count) { uint64_t v = value; /* Fill in the random bits. */ XXXXXX[0] = letters[v % 62]; v /= 62; XXXXXX[1] = letters[v % 62]; v /= 62; XXXXXX[2] = letters[v % 62]; v /= 62; XXXXXX[3] = letters[v % 62]; v /= 62; XXXXXX[4] = letters[v % 62]; v /= 62; XXXXXX[5] = letters[v % 62]; switch (kind) { case __GT_FILE: fd = __open (tmpl, (flags & ~O_ACCMODE) | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); break; case __GT_DIR: fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); break; case __GT_NOCREATE: /* This case is backward from the other three. __gen_tempname succeeds if __xstat fails because the name does not exist. Note the continue to bypass the common logic at the bottom of the loop. */ if (__lxstat64 (_STAT_VER, tmpl, &st) < 0) { if (errno == ENOENT) { __set_errno (save_errno); return 0; } else /* Give up now. */ return -1; } continue; default: assert (! "invalid KIND in __gen_tempname"); abort (); } 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; } ������������������������������������������������������������������������������gnulib-20111211-stable/lib/tempname.h���������������������������������������������������������������0000664�0000000�0000000�00000003465�11671051007�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a temporary file or directory. Copyright (C) 2006, 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 <http://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 /* 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); #endif /* GL_TEMPNAME_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/termios.in.h�������������������������������������������������������������0000664�0000000�0000000�00000004534�11671051007�0017506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <termios.h>. Copyright (C) 2010-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 #if @GNULIB_TCGETSID@ /* Get pid_t. */ # include <sys/types.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_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-20111211-stable/lib/time.in.h����������������������������������������������������������������0000664�0000000�0000000�00000021625�11671051007�0016762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more-standard <time.h>. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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. 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 _@GUARD_PREFIX@_TIME_H) # @INCLUDE_NEXT@ @NEXT_TIME_H@ #else # define _@GUARD_PREFIX@_TIME_H # @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, Ultrix 4.3). Or they define it with the wrong member names or define it in <sys/time.h> (e.g., FreeBSD circa 1997). Stock Mingw 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> /* The pthreads-win32 <pthread.h> also defines a couple of broken macros. */ # undef asctime_r # undef ctime_r # undef gmtime_r # undef localtime_r # undef rand_r # undef strtok_r # 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 /* Per http://austingroupbugs.net/view.php?id=327, POSIX 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 /* Sleep for at least RQTP seconds unless interrupted, If interrupted, return -1 and store the remaining time into RMTP. See <http://www.opengroup.org/susv3xsh/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 /* 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 _GL_CXXALIASWARN (mktime); # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <http://www.opengroup.org/susv3xsh/localtime_r.html> and <http://www.opengroup.org/susv3xsh/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 /* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store the resulting broken-down time into TM. See <http://www.opengroup.org/susv3xsh/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 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, "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 (asctime, "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 (asctime, "ctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif #endif �����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/time_r.c�����������������������������������������������������������������0000664�0000000�0000000�00000002404�11671051007�0016663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant time functions like localtime_r. Copyright (C) 2003, 2006-2007, 2010-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 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, 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 <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-20111211-stable/lib/timegm.c�����������������������������������������������������������������0000664�0000000�0000000�00000002367�11671051007�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTC calendar time to simple time. Like mktime but assumes UTC. Copyright (C) 1994, 1997, 2003-2004, 2006-2007, 2009-2011 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBC # include <config.h> #endif #include <time.h> #ifndef _LIBC # undef __gmtime_r # define __gmtime_r gmtime_r # define __mktime_internal mktime_internal # include "mktime-internal.h" #endif time_t timegm (struct tm *tmp) { static time_t gmtime_offset; tmp->tm_isdst = 0; return __mktime_internal (tmp, __gmtime_r, &gmtime_offset); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/times.c������������������������������������������������������������������0000664�0000000�0000000�00000004216�11671051007�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get process times Copyright (C) 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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 filetime2clock (creation_time); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/timespec-add.c�����������������������������������������������������������0000664�0000000�0000000�00000003275�11671051007�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Add two struct timespec values. 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 <http://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 <= 999999999. */ #include <config.h> #include "timespec.h" #include "intprops.h" struct timespec timespec_add (struct timespec a, struct timespec b) { struct timespec r; time_t rs = a.tv_sec; time_t bs = b.tv_sec; int ns = a.tv_nsec + b.tv_nsec; int nsd = ns - 1000000000; int rns = ns; if (0 <= nsd) { rns = nsd; if (rs == TYPE_MAXIMUM (time_t)) { if (0 <= bs) goto high_overflow; bs++; } else rs++; } if (INT_ADD_OVERFLOW (rs, bs)) { if (rs < 0) { rs = TYPE_MINIMUM (time_t); rns = 0; } else { high_overflow: rs = TYPE_MAXIMUM (time_t); rns = 999999999; } } else rs += bs; r.tv_sec = rs; r.tv_nsec = rns; return r; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/timespec-sub.c�����������������������������������������������������������0000664�0000000�0000000�00000003325�11671051007�0020007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Subtract two struct timespec values. 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 <http://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 <= 999999999. */ #include <config.h> #include <config.h> #include "timespec.h" #include "intprops.h" struct timespec timespec_sub (struct timespec a, struct timespec b) { struct timespec r; 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 + 1000000000; if (rs == TYPE_MINIMUM (time_t)) { if (bs <= 0) goto low_overflow; bs--; } else rs--; } if (INT_SUBTRACT_OVERFLOW (rs, bs)) { if (rs < 0) { low_overflow: rs = TYPE_MINIMUM (time_t); rns = 0; } else { rs = TYPE_MAXIMUM (time_t); rns = 999999999; } } else rs -= bs; r.tv_sec = rs; r.tv_nsec = rns; return r; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/timespec.h���������������������������������������������������������������0000664�0000000�0000000�00000005702�11671051007�0017226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* timespec -- System time interface Copyright (C) 2000, 2002, 2004-2005, 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 <http://www.gnu.org/licenses/>. */ #if ! defined TIMESPEC_H # define TIMESPEC_H # include <time.h> /* Return negative, zero, positive if A < B, A == B, A > B, respectively. For each time stamp T, this code assumes that either: * T.tv_nsec is in the range 0..999999999; or * T.tv_sec corresponds to a valid leap second on a host that supports leap seconds, and T.tv_nsec is in the range 1000000000..1999999999; or * T.tv_sec is the minimum time_t value and T.tv_nsec is -1; or T.tv_sec is the maximum time_t value and T.tv_nsec is 2000000000. This allows for special struct timespec values that are less or greater than all possible valid time stamps. In all these cases, it is safe to subtract two tv_nsec values and convert the result to integer without worrying about overflow on any platform of interest to the GNU project, since all such platforms have 32-bit int or wider. Replacing "(int) (a.tv_nsec - b.tv_nsec)" with something like "a.tv_nsec < b.tv_nsec ? -1 : a.tv_nsec > b.tv_nsec" would cause this function to work in some cases where the above assumption is violated, but not in all cases (e.g., a.tv_sec==1, a.tv_nsec==-2, b.tv_sec==0, b.tv_nsec==999999999) and is arguably not worth the extra instructions. Using a subtraction has the advantage of detecting some invalid cases on platforms that detect integer overflow. The (int) cast avoids a gcc -Wconversion warning. */ static inline int timespec_cmp (struct timespec a, struct timespec b) { return (a.tv_sec < b.tv_sec ? -1 : a.tv_sec > b.tv_sec ? 1 : (int) (a.tv_nsec - b.tv_nsec)); } /* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be nonnegative. */ static inline int timespec_sign (struct timespec a) { return a.tv_sec < 0 ? -1 : a.tv_sec || a.tv_nsec; } struct timespec timespec_add (struct timespec, struct timespec); struct timespec timespec_sub (struct timespec, struct timespec); struct timespec dtotimespec (double); /* Return an approximation to A, of type 'double'. */ static inline double timespectod (struct timespec a) { return a.tv_sec + a.tv_nsec / 1e9; } void gettime (struct timespec *); int settime (struct timespec const *); #endif ��������������������������������������������������������������gnulib-20111211-stable/lib/tmpdir.c�����������������������������������������������������������������0000664�0000000�0000000�00000010151�11671051007�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1999, 2001-2002, 2006, 2009-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 __WIN32__) && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #endif #include "pathmax.h" #if _LIBC # define struct_stat64 struct stat64 #else # define struct_stat64 struct stat # define __xstat64(version, path, buf) stat (path, buf) #endif #if ! (HAVE___SECURE_GETENV || _LIBC) # define __secure_getenv getenv #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, 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; 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 (defined _WIN32 || 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); while (dlen >= 1 && ISSLASH (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; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/tmpdir.h�����������������������������������������������������������������0000664�0000000�0000000�00000002357�11671051007�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a temporary directory. Copyright (C) 2001-2002, 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 <http://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-20111211-stable/lib/tmpfile-safer.c����������������������������������������������������������0000664�0000000�0000000�00000003530�11671051007�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke tmpfile, but avoid some glitches. Copyright (C) 2006, 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 <http://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-20111211-stable/lib/tmpfile.c����������������������������������������������������������������0000664�0000000�0000000�00000007042�11671051007�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a temporary file. 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 <http://www.gnu.org/licenses/>. */ /* Written by Ben Pfaff. */ #include <config.h> /* Specification. */ #include <stdio.h> /* This replacement is used only on native Windows platforms. */ #include <errno.h> #include <fcntl.h> #include <string.h> #include <sys/stat.h> #include <io.h> #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #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. */ /* 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; 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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/towctrans-impl.h���������������������������������������������������������0000664�0000000�0000000�00000001600�11671051007�0020371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a wide character using a case mapping. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ wint_t towctrans (wint_t wc, wctrans_t desc) { return ((wint_t (*) (wint_t)) desc) (wc); } ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/towctrans.c��������������������������������������������������������������0000664�0000000�0000000�00000001577�11671051007�0017442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a wide character using a case mapping. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include "towctrans-impl.h" ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/trigl.c������������������������������������������������������������������0000664�0000000�0000000�00000055604�11671051007�0016537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Quad-precision floating point argument reduction. Copyright (C) 1999, 2007, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jj@ultra.linux.cz> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "trigl.h" #include <float.h> #include <math.h> /* 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(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[] ouput 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[] reversingly */ 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-20111211-stable/lib/trigl.h������������������������������������������������������������������0000664�0000000�0000000�00000003017�11671051007�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for sinl, cosl, tanl internal functions Contributed by Paolo Bonzini Copyright 2002-2003, 2009-2011 Free Software Foundation, Inc. This file is part of gnulib. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/trim.c�������������������������������������������������������������������0000664�0000000�0000000�00000006160�11671051007�0016362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Removes leading and/or trailing whitespaces Copyright (C) 2006-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 <http://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. */ #ifdef 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-20111211-stable/lib/trim.h�������������������������������������������������������������������0000664�0000000�0000000�00000002255�11671051007�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Removes leading and/or trailing whitespaces Copyright (C) 2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Davide Angelocola <davide.angelocola@gmail.com> */ /* 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); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/trunc.c������������������������������������������������������������������0000664�0000000�0000000�00000006724�11671051007�0016550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards zero. Copyright (C) 2007, 2010-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 <http://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 /* 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-20111211-stable/lib/truncf.c�����������������������������������������������������������������0000664�0000000�0000000�00000001475�11671051007�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards zero. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_FLOAT #include "trunc.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/truncl.c�����������������������������������������������������������������0000664�0000000�0000000�00000001764�11671051007�0016723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards zero. 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 <http://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-20111211-stable/lib/tsearch.c����������������������������������������������������������������0000664�0000000�0000000�00000052157�11671051007�0017047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995-1997, 2000, 2006-2007, 2009-2011 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 program is free software: you can redistribute it and/or modify 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 <http://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. */ #include <config.h> /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the rootp == NULL tests below. */ #define _GL_ARG_NONNULL(params) /* Specification. */ #ifdef IN_LIBINTL # include "tsearch.h" #else # include <search.h> #endif #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 /* 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 (key, vrootp, compar) 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 /* 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 #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-20111211-stable/lib/ttyname_r.c��������������������������������������������������������������0000664�0000000�0000000�00000004624�11671051007�0017414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of a terminal. Copyright (C) 2010-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 <http://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> int ttyname_r (int fd, char *buf, size_t buflen) #undef ttyname_r { /* When ttyname_r exists, use it. */ #if HAVE_TTYNAME_R /* 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); 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-20111211-stable/lib/u64.h��������������������������������������������������������������������0000664�0000000�0000000�00000006402�11671051007�0016031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* uint64_t-like operations that work even on hosts lacking uint64_t Copyright (C) 2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <stdint.h> /* 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 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. */ static 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. */ static inline u64 u64lo (uint32_t lo) { u64 r; r.hi = 0; r.lo = lo; return r; } /* Return X < Y. */ static inline int u64lt (u64 x, u64 y) { return x.hi < y.hi || (x.hi == y.hi && x.lo < y.lo); } /* Return X & Y. */ static 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. */ static 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. */ static 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. */ static 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. */ static 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. */ static 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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uinttostr.c��������������������������������������������������������������0000664�0000000�0000000�00000000116�11671051007�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define anytostr uinttostr #define inttype unsigned int #include "anytostr.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/umaxtostr.c��������������������������������������������������������������0000664�0000000�0000000�00000000113�11671051007�0017445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define anytostr umaxtostr #define inttype uintmax_t #include "anytostr.c" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uname.c������������������������������������������������������������������0000664�0000000�0000000�00000021026�11671051007�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* uname replacement. Copyright (C) 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 <http://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 __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 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-20111211-stable/lib/unicase.in.h�������������������������������������������������������������0000664�0000000�0000000�00000047223�11671051007�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character case mappings. Copyright (C) 2002, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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); /* Return the lowercase mapping of a Unicode character. */ extern ucs4_t uc_tolower (ucs4_t uc); /* Return the titlecase mapping of a Unicode character. */ extern ucs4_t uc_totitle (ucs4_t uc); /* ========================================================================= */ /* 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); /* 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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *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 *resultbuf, size_t *lengthp); extern char * u16_casexfrm (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *resultbuf, size_t *lengthp); extern char * u32_casexfrm (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *resultbuf, size_t *lengthp); extern char * ulc_casexfrm (const char *s, size_t n, const char *iso639_language, uninorm_t nf, char *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-20111211-stable/lib/unicase/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016667�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/cased.c����������������������������������������������������������0000664�0000000�0000000�00000002756�11671051007�0020124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a Unicode character is cased. Copyright (C) 2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/cased.h����������������������������������������������������������0000664�0000000�0000000�00000016031�11671051007�0020120�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 6.0.0. */ #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_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, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFEFFFFF, 0x01FFFFFF, 0x00000003, 0x0000001F, 0x00000000, 0x00000000, 0x00000020, 0x3CCF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x007FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F0000, 0x00000000, 0x00000000, 0x00000000, 0x3E2FFC84, 0xF21FBD50, 0x000043E0, 0xFFFFFFFF, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00003FFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000378FF, 0x000003FF, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/casefold.h�������������������������������������������������������0000664�0000000�0000000�00000001663�11671051007�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding of Unicode characters. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "unitypes.h" /* Return the casefold mapping of a Unicode character. */ extern ucs4_t uc_tocasefold (ucs4_t uc); �����������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/caseprop.h�������������������������������������������������������0000664�0000000�0000000�00000002471�11671051007�0020660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case related properties of Unicode characters. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdbool.h> #include "unitypes.h" /* Determine whether a character is "cased" according to the Unicode Standard, <http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf>, section 3.13, definition D120. */ extern bool uc_is_cased (ucs4_t uc); /* Determine whether a character is "case-ignorable" according to the Unicode Standard, <http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf>, section 3.13, definition D121. */ extern bool uc_is_case_ignorable (ucs4_t uc); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/context.h��������������������������������������������������������0000664�0000000�0000000�00000005372�11671051007�0020533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping contexts of UTF-8/UTF-16/UTF-32 substring. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* The context of a prefix string combines the information of the "Before C" conditions of the Unicode Standard, <http://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, <http://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-20111211-stable/lib/unicase/empty-prefix-context.c�������������������������������������������0000664�0000000�0000000�00000002032�11671051007�0023143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of empty prefix string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/empty-suffix-context.c�������������������������������������������0000664�0000000�0000000�00000002001�11671051007�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of empty suffix string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/ignorable.c������������������������������������������������������0000664�0000000�0000000�00000004734�11671051007�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a Unicode character is case-ignorable. Copyright (C) 2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 <http://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-20111211-stable/lib/unicase/ignorable.h������������������������������������������������������0000664�0000000�0000000�00000031533�11671051007�0021007�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 6.0.0. */ #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[32 << 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, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, 16 + 384 * 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x04004080, 0x40000000, 0x00000001, 0x00000000, 0x0190A100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFE000000, 0xFFFFFFFC, 0xFFFFFFE0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFDF, 0x0030FFFF, 0x000000B0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00100000, 0x07FF000F, 0x00000000, 0xFFFFF801, 0x00010000, 0x00000000, 0x00000000, 0xBFC00000, 0x00003DFF, 0x00028000, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x043FF800, 0xFFC00000, 0x00003FFF, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x14000000, 0x00FE21FE, 0x0002000C, 0x00000002, 0x10000000, 0x0000201E, 0x0000000C, 0x00000006, 0x10000000, 0x00023986, 0x00230000, 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, 0x00000002, 0x90000000, 0x0040201E, 0x0000000C, 0x00000004, 0x00000000, 0x00002001, 0x00000000, 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, 0x00000000, 0x90000000, 0x00003040, 0x0000000C, 0x00000000, 0x00000000, 0x0000201E, 0x0000000C, 0x00000000, 0x00000000, 0x005C0400, 0x00000000, 0x00000000, 0x07F20000, 0x00007FC0, 0x00000000, 0x00000000, 0x1BF20000, 0x00003F40, 0x00000000, 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, 0x20002064, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, 0x00000000, 0x3FB00000, 0x208FFE40, 0x00000000, 0x00003800, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x0E040187, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01800000, 0x00000000, 0x7F400000, 0x9FF81FE5, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, 0x00000003, 0x0000033C, 0x00000000, 0x0003A340, 0x00000000, 0x00CFF000, 0x00000000, 0x3F000000, 0x00000000, 0x00000000, 0xFFF70000, 0x000021FD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, 0x0300F800, 0x00007C90, 0x00000000, 0x8002FC1F, 0x1FE00000, 0x00000000, 0xFFFF0000, 0x0001FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00038000, 0x00000000, 0x00000000, 0x00000000, 0x80008000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x083EFC00, 0x00000000, 0x00000000, 0x7E000000, 0x00000000, 0x00000000, 0x70000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3F000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0xB0078000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00000000, 0x00000700, 0x00000000, 0x00000000, 0x00000000, 0x00000844, 0x00000060, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x0003FFFF, 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, 0x00000007, 0x13C80000, 0x00008000, 0x00000000, 0x00000000, 0x00667E00, 0x00001008, 0x00010000, 0x00000000, 0xC19D0000, 0x20000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002120, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x00000003, 0x00000000, 0x0008FFFF, 0x0000007F, 0x00240000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x04004080, 0x40000000, 0x00000001, 0x00010000, 0xC0000000, 0x00000000, 0x00000000, 0x0E000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFF000000, 0x0000007F, 0x00000000, 0x00000003, 0x26780000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF80380, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/invariant.h������������������������������������������������������0000664�0000000�0000000�00000004255�11671051007�0021041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal functions for Unicode character case mappings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/locale-language.c������������������������������������������������0000664�0000000�0000000�00000003432�11671051007�0022055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Language code of current locale. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/locale-languages.gperf�������������������������������������������0000664�0000000�0000000�00000013347�11671051007�0023127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%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" */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/simple-mapping.h�������������������������������������������������0000664�0000000�0000000�00000002610�11671051007�0021761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Simple case mapping for Unicode characters. Copyright (C) 2002, 2006, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/special-casing-table.gperf���������������������������������������0000664�0000000�0000000�00000051276�11671051007�0023676�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 6.0.0. */ 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-20111211-stable/lib/unicase/special-casing.c�������������������������������������������������0000664�0000000�0000000�00000001653�11671051007�0021722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Special casing table. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "special-casing.h" #include <string.h> #include "unicase/special-casing-table.h" �������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/special-casing.h�������������������������������������������������0000664�0000000�0000000�00000003756�11671051007�0021735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Special casing table. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* 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, unsigned int len); ������������������gnulib-20111211-stable/lib/unicase/tocasefold.c�����������������������������������������������������0000664�0000000�0000000�00000002025�11671051007�0021155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefold mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/tocasefold.h�����������������������������������������������������0000664�0000000�0000000�00000100517�11671051007�0021167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-case.c for Unicode 6.0.0. */ #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[26 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1408, 1536, 1664, 1792, -1, -1, 1920, 2048, -1, -1, -1, -1, -1, 2176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2560, 2688, 2816, 2944, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3072, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 0, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/tolower.c��������������������������������������������������������0000664�0000000�0000000�00000002017�11671051007�0020526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/tolower.h��������������������������������������������������������0000664�0000000�0000000�00000100517�11671051007�0020537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-case.c for Unicode 6.0.0. */ #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[26 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1408, 1536, 1664, 1792, -1, -1, 1920, 2048, -1, -1, -1, -1, -1, 2176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2560, 2688, 2816, 2944, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3072, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 0, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/totitle.c��������������������������������������������������������0000664�0000000�0000000�00000002017�11671051007�0020517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/totitle.h��������������������������������������������������������0000664�0000000�0000000�00000106207�11671051007�0020532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-case.c for Unicode 6.0.0. */ #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[29 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, -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, 2816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2944, 3072, 3200, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3456, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 0, 0, 0, 0, -205, 0, 0, -207, 0, 42280, 0, 0, -209, -211, 0, 10743, 0, 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, 0, -218, -69, -217, -217, -71, 0, 0, 0, 0, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/toupper.c��������������������������������������������������������0000664�0000000�0000000�00000002017�11671051007�0020531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/toupper.h��������������������������������������������������������0000664�0000000�0000000�00000106207�11671051007�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-case.c for Unicode 6.0.0. */ #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[29 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, -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, 2816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2944, 3072, 3200, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3456, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 0, 0, 0, 0, -205, 0, 0, -207, 0, 42280, 0, 0, -209, -211, 0, 10743, 0, 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, 0, -218, -69, -217, -217, -71, 0, 0, 0, 0, 0, -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/u-casecmp.h������������������������������������������������������0000664�0000000�0000000�00000004204�11671051007�0020715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-casecoll.h�����������������������������������������������������0000664�0000000�0000000�00000004103�11671051007�0021065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-casefold.h�����������������������������������������������������0000664�0000000�0000000�00000002261�11671051007�0021063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for Unicode strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-casemap.h������������������������������������������������������0000664�0000000�0000000�00000036176�11671051007�0020730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-casexfrm.h�����������������������������������������������������0000664�0000000�0000000�00000005134�11671051007�0021115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-ct-casefold.h��������������������������������������������������0000664�0000000�0000000�00000007545�11671051007�0021501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for Unicode substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-ct-totitle.h���������������������������������������������������0000664�0000000�0000000�00000043502�11671051007�0021376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-8/UTF-16/UTF-32 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unicase/u-is-cased.h�����������������������������������������������������0000664�0000000�0000000�00000007027�11671051007�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether case matters for a Unicode string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-is-invariant.h�������������������������������������������������0000664�0000000�0000000�00000004111�11671051007�0021703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a Unicode string is invariant under a given case mapping. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-prefix-context.h�����������������������������������������������0000664�0000000�0000000�00000005306�11671051007�0022265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of prefix UTF-8/UTF-16/UTF-32 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-suffix-context.h�����������������������������������������������0000664�0000000�0000000�00000005616�11671051007�0022300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of suffix UTF-8/UTF-16/UTF-32 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u-totitle.h������������������������������������������������������0000664�0000000�0000000�00000002266�11671051007�0020774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-casecmp.c����������������������������������������������������0000664�0000000�0000000�00000002216�11671051007�0021060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-casecoll.c���������������������������������������������������0000664�0000000�0000000�00000002113�11671051007�0021226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-casefold.c���������������������������������������������������0000664�0000000�0000000�00000001770�11671051007�0021231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-casemap.c����������������������������������������������������0000664�0000000�0000000�00000002416�11671051007�0021060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "caseprop.h" #include "context.h" #include "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-20111211-stable/lib/unicase/u16-casexfrm.c���������������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0021256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-ct-casefold.c������������������������������������������������0000664�0000000�0000000�00000002242�11671051007�0021630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-16 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include "unicasemap.h" #include "special-casing.h" #include "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-20111211-stable/lib/unicase/u16-ct-tolower.c�������������������������������������������������0000664�0000000�0000000�00000002747�11671051007�0021555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-16 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u16-ct-totitle.c�������������������������������������������������0000664�0000000�0000000�00000002546�11671051007�0021543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-16 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "caseprop.h" #include "context.h" #include "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-20111211-stable/lib/unicase/u16-ct-toupper.c�������������������������������������������������0000664�0000000�0000000�00000002747�11671051007�0021560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-16 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u16-is-cased.c���������������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0021136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether case matters for an UTF-16 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-is-casefolded.c����������������������������������������������0000664�0000000�0000000�00000002146�11671051007�0022151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is already case-folded. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-is-invariant.c�����������������������������������������������0000664�0000000�0000000�00000002217�11671051007�0022052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is invariant under a given case mapping. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-is-lowercase.c�����������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0022041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is entirely lower case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-is-titlecase.c�����������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0022032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is entirely title case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-is-uppercase.c�����������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-16 string is entirely upper case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-prefix-context.c���������������������������������������������0000664�0000000�0000000�00000002233�11671051007�0022423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of prefix UTF-16 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "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-20111211-stable/lib/unicase/u16-suffix-context.c���������������������������������������������0000664�0000000�0000000�00000002203�11671051007�0022427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of suffix UTF-16 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "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-20111211-stable/lib/unicase/u16-tolower.c����������������������������������������������������0000664�0000000�0000000�00000002643�11671051007�0021144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u16-totitle.c����������������������������������������������������0000664�0000000�0000000�00000001763�11671051007�0021137�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u16-toupper.c����������������������������������������������������0000664�0000000�0000000�00000002643�11671051007�0021147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-16 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u32-casecmp.c����������������������������������������������������0000664�0000000�0000000�00000002216�11671051007�0021056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-casecoll.c���������������������������������������������������0000664�0000000�0000000�00000002113�11671051007�0021224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-casefold.c���������������������������������������������������0000664�0000000�0000000�00000001770�11671051007�0021227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-casemap.c����������������������������������������������������0000664�0000000�0000000�00000002416�11671051007�0021056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "caseprop.h" #include "context.h" #include "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-20111211-stable/lib/unicase/u32-casexfrm.c���������������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-ct-casefold.c������������������������������������������������0000664�0000000�0000000�00000002242�11671051007�0021626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-32 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include "unicasemap.h" #include "special-casing.h" #include "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-20111211-stable/lib/unicase/u32-ct-tolower.c�������������������������������������������������0000664�0000000�0000000�00000002747�11671051007�0021553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-32 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u32-ct-totitle.c�������������������������������������������������0000664�0000000�0000000�00000002546�11671051007�0021541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-32 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "caseprop.h" #include "context.h" #include "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-20111211-stable/lib/unicase/u32-ct-toupper.c�������������������������������������������������0000664�0000000�0000000�00000002747�11671051007�0021556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-32 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u32-is-cased.c���������������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0021134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether case matters for an UTF-32 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-is-casefolded.c����������������������������������������������0000664�0000000�0000000�00000002146�11671051007�0022147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is already case-folded. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-is-invariant.c�����������������������������������������������0000664�0000000�0000000�00000002217�11671051007�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is invariant under a given case mapping. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-is-lowercase.c�����������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0022037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is entirely lower case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-is-titlecase.c�����������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0022030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is entirely title case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-is-uppercase.c�����������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0022042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-32 string is entirely upper case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-prefix-context.c���������������������������������������������0000664�0000000�0000000�00000002233�11671051007�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of prefix UTF-32 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "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-20111211-stable/lib/unicase/u32-suffix-context.c���������������������������������������������0000664�0000000�0000000�00000002203�11671051007�0022425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of suffix UTF-32 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "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-20111211-stable/lib/unicase/u32-tolower.c����������������������������������������������������0000664�0000000�0000000�00000002643�11671051007�0021142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u32-totitle.c����������������������������������������������������0000664�0000000�0000000�00000001762�11671051007�0021134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u32-toupper.c����������������������������������������������������0000664�0000000�0000000�00000002643�11671051007�0021145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-32 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u8-casecmp.c�����������������������������������������������������0000664�0000000�0000000�00000002210�11671051007�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-casecoll.c����������������������������������������������������0000664�0000000�0000000�00000002107�11671051007�0021152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-casefold.c����������������������������������������������������0000664�0000000�0000000�00000005104�11671051007�0021145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-casemap.c�����������������������������������������������������0000664�0000000�0000000�00000002407�11671051007�0021001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "caseprop.h" #include "context.h" #include "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-20111211-stable/lib/unicase/u8-casexfrm.c����������������������������������������������������0000664�0000000�0000000�00000002246�11671051007�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-ct-casefold.c�������������������������������������������������0000664�0000000�0000000�00000002235�11671051007�0021553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Casefolding mapping for UTF-8 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <errno.h> #include <stddef.h> #include <stdlib.h> #include "unicasemap.h" #include "special-casing.h" #include "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-20111211-stable/lib/unicase/u8-ct-tolower.c��������������������������������������������������0000664�0000000�0000000�00000002731�11671051007�0021467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-8 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u8-ct-totitle.c��������������������������������������������������0000664�0000000�0000000�00000002536�11671051007�0021463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-8 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "caseprop.h" #include "context.h" #include "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-20111211-stable/lib/unicase/u8-ct-toupper.c��������������������������������������������������0000664�0000000�0000000�00000002731�11671051007�0021472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-8 substrings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u8-is-cased.c����������������������������������������������������0000664�0000000�0000000�00000002243�11671051007�0021056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether case matters for an UTF-8 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-is-casefolded.c�����������������������������������������������0000664�0000000�0000000�00000002140�11671051007�0022064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is already case-folded. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-is-invariant.c������������������������������������������������0000664�0000000�0000000�00000002212�11671051007�0021766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is invariant under a given case mapping. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-is-lowercase.c������������������������������������������������0000664�0000000�0000000�00000002135�11671051007�0021763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is entirely lower case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-is-titlecase.c������������������������������������������������0000664�0000000�0000000�00000002135�11671051007�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is entirely title case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-is-uppercase.c������������������������������������������������0000664�0000000�0000000�00000002135�11671051007�0021766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether an UTF-8 string is entirely upper case. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-prefix-context.c����������������������������������������������0000664�0000000�0000000�00000002225�11671051007�0022345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of prefix UTF-8 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "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-20111211-stable/lib/unicase/u8-suffix-context.c����������������������������������������������0000664�0000000�0000000�00000002176�11671051007�0022361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-mapping context of suffix UTF-8 string. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include "unictype.h" #include "unistr.h" #include "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-20111211-stable/lib/unicase/u8-tolower.c�����������������������������������������������������0000664�0000000�0000000�00000005753�11671051007�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/u8-totitle.c�����������������������������������������������������0000664�0000000�0000000�00000005103�11671051007�0021050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Titlecase mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/u8-toupper.c�����������������������������������������������������0000664�0000000�0000000�00000005753�11671051007�0021075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Uppercase mapping for UTF-8 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" #include <stddef.h> #include "unicasemap.h" #include "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-20111211-stable/lib/unicase/ulc-casecmp.c����������������������������������������������������0000664�0000000�0000000�00000004134�11671051007�0021231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case and normalization insensitive comparison of strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/ulc-casecoll.c���������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0021405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, case and normalization insensitive comparison of strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/ulc-casexfrm.c���������������������������������������������������0000664�0000000�0000000�00000003602�11671051007�0021425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for case insensitive comparison of strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicase/unicasemap.h�����������������������������������������������������0000664�0000000�0000000�00000004466�11671051007�0021177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unicodeio.c��������������������������������������������������������������0000664�0000000�0000000�00000015544�11671051007�0017373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character output to streams with locale dependent encoding. Copyright (C) 2000-2003, 2006, 2008-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 <http://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" #include "ignore-value.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); 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 ) 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. */ ignore_value (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, void *callback_arg _GL_UNUSED) { 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, const char *msg _GL_UNUSED, 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-20111211-stable/lib/unicodeio.h��������������������������������������������������������������0000664�0000000�0000000�00000004155�11671051007�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character output to streams with locale dependent encoding. Copyright (C) 2000-2003, 2005, 2008-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 <http://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-20111211-stable/lib/uniconv.in.h�������������������������������������������������������������0000664�0000000�0000000�00000016530�11671051007�0017504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversions between Unicode and legacy encodings. Copyright (C) 2002, 2005, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 *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 *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 *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-20111211-stable/lib/uniconv/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016721�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniconv/u-conv-from-enc.h������������������������������������������������0000664�0000000�0000000�00000005504�11671051007�0022011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-16/UTF-32 from legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u-conv-to-enc.h��������������������������������������������������0000664�0000000�0000000�00000010352�11671051007�0021465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16/UTF-32 to legacy encodings. Copyright (C) 2002, 2006-2011 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 <http://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-20111211-stable/lib/uniconv/u-strconv-from-enc.h���������������������������������������������0000664�0000000�0000000�00000002550�11671051007�0022540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-8/UTF-16/UTF-32 from legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u-strconv-to-enc.h�����������������������������������������������0000664�0000000�0000000�00000003754�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16/UTF-32 to legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u16-conv-from-enc.c����������������������������������������������0000664�0000000�0000000�00000002767�11671051007�0022163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-16 from legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u16-conv-to-enc.c������������������������������������������������0000664�0000000�0000000�00000011235�11671051007�0021630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16 to legacy encodings. Copyright (C) 2002, 2006-2011 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 <http://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-20111211-stable/lib/uniconv/u16-strconv-from-enc.c�������������������������������������������0000664�0000000�0000000�00000002211�11671051007�0022674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-16 from legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u16-strconv-from-locale.c����������������������������������������0000664�0000000�0000000�00000002104�11671051007�0023367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-16 from the locale encoding. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u16-strconv-to-enc.c���������������������������������������������0000664�0000000�0000000�00000003113�11671051007�0022355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16 to legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u16-strconv-to-locale.c������������������������������������������0000664�0000000�0000000�00000002100�11671051007�0023042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-16 to the locale encoding. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u32-conv-from-enc.c����������������������������������������������0000664�0000000�0000000�00000002740�11671051007�0022150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-32 from legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u32-conv-to-enc.c������������������������������������������������0000664�0000000�0000000�00000003054�11671051007�0021626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-32 to legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u32-strconv-from-enc.c�������������������������������������������0000664�0000000�0000000�00000002211�11671051007�0022672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-32 from legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u32-strconv-from-locale.c����������������������������������������0000664�0000000�0000000�00000002104�11671051007�0023365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-32 from the locale encoding. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u32-strconv-to-enc.c���������������������������������������������0000664�0000000�0000000�00000003064�11671051007�0022360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-32 to legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u32-strconv-to-locale.c������������������������������������������0000664�0000000�0000000�00000002100�11671051007�0023040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-32 to the locale encoding. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u8-conv-from-enc.c�����������������������������������������������0000664�0000000�0000000�00000005744�11671051007�0022102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-8 from legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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; } } 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-20111211-stable/lib/uniconv/u8-conv-to-enc.c�������������������������������������������������0000664�0000000�0000000�00000005115�11671051007�0021551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-8 to legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 CONFIG_UNICODE_SAFETY if (u8_check (src, srclen)) { errno = EILSEQ; return NULL; } #endif /* Memory allocation. */ if (resultbuf != NULL && *lengthp >= srclen) result = resultbuf; else { result = (char *) malloc (srclen > 0 ? srclen : 1); if (result == NULL) { errno = ENOMEM; return NULL; } } 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-20111211-stable/lib/uniconv/u8-strconv-from-enc.c��������������������������������������������0000664�0000000�0000000�00000002204�11671051007�0022617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-8 from legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u8-strconv-from-locale.c�����������������������������������������0000664�0000000�0000000�00000002100�11671051007�0023304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion to UTF-8 from the locale encoding. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniconv/u8-strconv-to-enc.c����������������������������������������������0000664�0000000�0000000�00000004474�11671051007�0022311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-8 to legacy encodings. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 CONFIG_UNICODE_SAFETY if (u8_check (string, length)) { errno = EILSEQ; return NULL; } #endif 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-20111211-stable/lib/uniconv/u8-strconv-to-locale.c�������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0022775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion from UTF-8 to the locale encoding. Copyright (C) 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype.in.h������������������������������������������������������������0000664�0000000�0000000�00000105370�11671051007�0017664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character classification and properties. Copyright (C) 2002, 2005-2011 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 <http://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); /* Return the long name of a general category. */ extern const char * uc_general_category_long_name (uc_general_category_t category); /* 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); /* Return the general category of a Unicode character. */ extern uc_general_category_t uc_general_category (ucs4_t uc); /* 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); /* Likewise. This function uses a big table comprising all categories. */ extern bool uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask); /* ========================================================================= */ /* 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); /* Return the name of a canonical combining class. */ extern const char * uc_combining_class_name (int ccc); /* Return the long name of a canonical combining class. */ extern const char * uc_combining_class_long_name (int ccc); /* 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); /* ========================================================================= */ /* 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 */ }; /* Return the name of a bidi class. */ extern const char * uc_bidi_class_name (int bidi_class); /* Same; obsolete function name. */ extern const char * uc_bidi_category_name (int category); /* Return the long name of a bidi class. */ extern const char * uc_bidi_class_long_name (int bidi_class); /* 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); /* Same; obsolete function name. */ extern int uc_bidi_category_byname (const char *category_name); /* Return the bidi class of a Unicode character. */ extern int uc_bidi_class (ucs4_t uc); /* Same; obsolete function name. */ extern int uc_bidi_category (ucs4_t uc); /* Test whether a Unicode character belongs to a given bidi class. */ extern bool uc_is_bidi_class (ucs4_t uc, int bidi_class); /* Same; obsolete function name. */ extern bool uc_is_bidi_category (ucs4_t uc, int category); /* ========================================================================= */ /* 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); /* ========================================================================= */ /* Field 7 of Unicode Character Database: Digit value. */ /* Return the digit value of a Unicode character. */ extern int uc_digit_value (ucs4_t uc); /* ========================================================================= */ /* 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); /* ========================================================================= */ /* 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); /* Return the long name of a joining type. */ extern const char * uc_joining_type_long_name (int joining_type); /* 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); /* Return the joining type of a Unicode character. */ extern int uc_joining_type (ucs4_t uc); /* ========================================================================= */ /* 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 */ }; /* Return the name of a joining group. */ extern const char * uc_joining_group_name (int joining_group); /* Return the joining group given by name, e.g. "Teh_Marbuta". */ extern int uc_joining_group_byname (const char *joining_group_name); /* Return the joining group of a Unicode character. */ extern int uc_joining_group (ucs4_t uc); /* ========================================================================= */ /* 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); extern bool uc_is_property_alphabetic (ucs4_t uc); extern bool uc_is_property_other_alphabetic (ucs4_t uc); extern bool uc_is_property_not_a_character (ucs4_t uc); extern bool uc_is_property_default_ignorable_code_point (ucs4_t uc); extern bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc); extern bool uc_is_property_deprecated (ucs4_t uc); extern bool uc_is_property_logical_order_exception (ucs4_t uc); extern bool uc_is_property_variation_selector (ucs4_t uc); extern bool uc_is_property_private_use (ucs4_t uc); extern bool uc_is_property_unassigned_code_value (ucs4_t uc); extern bool uc_is_property_uppercase (ucs4_t uc); extern bool uc_is_property_other_uppercase (ucs4_t uc); extern bool uc_is_property_lowercase (ucs4_t uc); extern bool uc_is_property_other_lowercase (ucs4_t uc); extern bool uc_is_property_titlecase (ucs4_t uc); extern bool uc_is_property_cased (ucs4_t uc); extern bool uc_is_property_case_ignorable (ucs4_t uc); extern bool uc_is_property_changes_when_lowercased (ucs4_t uc); extern bool uc_is_property_changes_when_uppercased (ucs4_t uc); extern bool uc_is_property_changes_when_titlecased (ucs4_t uc); extern bool uc_is_property_changes_when_casefolded (ucs4_t uc); extern bool uc_is_property_changes_when_casemapped (ucs4_t uc); extern bool uc_is_property_soft_dotted (ucs4_t uc); extern bool uc_is_property_id_start (ucs4_t uc); extern bool uc_is_property_other_id_start (ucs4_t uc); extern bool uc_is_property_id_continue (ucs4_t uc); extern bool uc_is_property_other_id_continue (ucs4_t uc); extern bool uc_is_property_xid_start (ucs4_t uc); extern bool uc_is_property_xid_continue (ucs4_t uc); extern bool uc_is_property_pattern_white_space (ucs4_t uc); extern bool uc_is_property_pattern_syntax (ucs4_t uc); extern bool uc_is_property_join_control (ucs4_t uc); extern bool uc_is_property_grapheme_base (ucs4_t uc); extern bool uc_is_property_grapheme_extend (ucs4_t uc); extern bool uc_is_property_other_grapheme_extend (ucs4_t uc); extern bool uc_is_property_grapheme_link (ucs4_t uc); extern bool uc_is_property_bidi_control (ucs4_t uc); extern bool uc_is_property_bidi_left_to_right (ucs4_t uc); extern bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc); extern bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc); extern bool uc_is_property_bidi_european_digit (ucs4_t uc); extern bool uc_is_property_bidi_eur_num_separator (ucs4_t uc); extern bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc); extern bool uc_is_property_bidi_arabic_digit (ucs4_t uc); extern bool uc_is_property_bidi_common_separator (ucs4_t uc); extern bool uc_is_property_bidi_block_separator (ucs4_t uc); extern bool uc_is_property_bidi_segment_separator (ucs4_t uc); extern bool uc_is_property_bidi_whitespace (ucs4_t uc); extern bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc); extern bool uc_is_property_bidi_boundary_neutral (ucs4_t uc); extern bool uc_is_property_bidi_pdf (ucs4_t uc); extern bool uc_is_property_bidi_embedding_or_override (ucs4_t uc); extern bool uc_is_property_bidi_other_neutral (ucs4_t uc); extern bool uc_is_property_hex_digit (ucs4_t uc); extern bool uc_is_property_ascii_hex_digit (ucs4_t uc); extern bool uc_is_property_ideographic (ucs4_t uc); extern bool uc_is_property_unified_ideograph (ucs4_t uc); extern bool uc_is_property_radical (ucs4_t uc); extern bool uc_is_property_ids_binary_operator (ucs4_t uc); extern bool uc_is_property_ids_trinary_operator (ucs4_t uc); extern bool uc_is_property_zero_width (ucs4_t uc); extern bool uc_is_property_space (ucs4_t uc); extern bool uc_is_property_non_break (ucs4_t uc); extern bool uc_is_property_iso_control (ucs4_t uc); extern bool uc_is_property_format_control (ucs4_t uc); extern bool uc_is_property_dash (ucs4_t uc); extern bool uc_is_property_hyphen (ucs4_t uc); extern bool uc_is_property_punctuation (ucs4_t uc); extern bool uc_is_property_line_separator (ucs4_t uc); extern bool uc_is_property_paragraph_separator (ucs4_t uc); extern bool uc_is_property_quotation_mark (ucs4_t uc); extern bool uc_is_property_sentence_terminal (ucs4_t uc); extern bool uc_is_property_terminal_punctuation (ucs4_t uc); extern bool uc_is_property_currency_symbol (ucs4_t uc); extern bool uc_is_property_math (ucs4_t uc); extern bool uc_is_property_other_math (ucs4_t uc); extern bool uc_is_property_paired_punctuation (ucs4_t uc); extern bool uc_is_property_left_of_pair (ucs4_t uc); extern bool uc_is_property_combining (ucs4_t uc); extern bool uc_is_property_composite (ucs4_t uc); extern bool uc_is_property_decimal_digit (ucs4_t uc); extern bool uc_is_property_numeric (ucs4_t uc); extern bool uc_is_property_diacritic (ucs4_t uc); extern bool uc_is_property_extender (ucs4_t uc); extern bool uc_is_property_ignorable_control (ucs4_t uc); /* ========================================================================= */ /* 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); /* Return the script given by name, e.g. "HAN". */ extern const uc_script_t * uc_script_byname (const char *script_name); /* Test whether a Unicode character belongs to a given script. */ extern bool uc_is_script (ucs4_t uc, const uc_script_t *script); /* 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); /* Test whether a Unicode character belongs to a given block. */ extern bool uc_is_block (ucs4_t uc, const uc_block_t *block); /* 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); /* Test whether a Unicode character is considered whitespace in Java. */ extern bool uc_is_java_whitespace (ucs4_t uc); 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); /* Return the categorization of a Unicode character w.r.t. the Java identifier syntax. */ extern int uc_java_ident_category (ucs4_t uc); /* ========================================================================= */ /* 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); /* 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); /* Test for any control character. */ extern bool uc_is_cntrl (ucs4_t uc); /* Test for any character that corresponds to a decimal-digit character. */ extern bool uc_is_digit (ucs4_t uc); /* 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); /* 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); /* Test for any printing character. */ extern bool uc_is_print (ucs4_t uc); /* 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); /* 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); /* 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); /* Test for any character that corresponds to a hexadecimal-digit character. */ extern bool uc_is_xdigit (ucs4_t uc); /* 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); /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNICTYPE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017100�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/3level.h��������������������������������������������������������0000664�0000000�0000000�00000023214�11671051007�0020445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000-2001, 2009-2011 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 program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/unictype/3levelbit.h�����������������������������������������������������0000664�0000000�0000000�00000022673�11671051007�0021154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000-2002, 2009-2011 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 program is free software; you can 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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-20111211-stable/lib/unictype/Makefile��������������������������������������������������������0000664�0000000�0000000�00000001217�11671051007�0020541�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-20111211-stable/lib/unictype/bidi_byname.c���������������������������������������������������0000664�0000000�0000000�00000003563�11671051007�0021515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/bidi_byname.gperf�����������������������������������������������0000664�0000000�0000000�00000003344�11671051007�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. */ 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 L, UC_BIDI_L LRE, UC_BIDI_LRE LRO, UC_BIDI_LRO NSM, UC_BIDI_NSM ON, UC_BIDI_ON PDF, UC_BIDI_PDF R, UC_BIDI_R RLE, UC_BIDI_RLE 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 Left To Right, UC_BIDI_L LeftToRight, UC_BIDI_L Left To Right Embedding, UC_BIDI_LRE LeftToRightEmbedding, UC_BIDI_LRE 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 Right To Left, UC_BIDI_R RightToLeft, UC_BIDI_R Right To Left Embedding, UC_BIDI_RLE RightToLeftEmbedding, UC_BIDI_RLE 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-20111211-stable/lib/unictype/bidi_longname.c�������������������������������������������������0000664�0000000�0000000�00000003122�11671051007�0022031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 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 <http://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-20111211-stable/lib/unictype/bidi_name.c�����������������������������������������������������0000664�0000000�0000000�00000002536�11671051007�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/bidi_of.c�������������������������������������������������������0000664�0000000�0000000�00000003541�11671051007�0020642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 = ((u_bidi_category.level3[index3>>4] | (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-20111211-stable/lib/unictype/bidi_of.h�������������������������������������������������������0000664�0000000�0000000�00000162177�11671051007�0020662�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 6.0.0. */ #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[125 * 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, -1, 5120, 5248, 5376, 5504, -1, 5632, -1, -1, -1, 5760, 5888, 6016, 6144, 6272, 6400, 6528, 6656, 6784, 6912, 7040, 6528, 6528, 6528, 7168, 7296, 7424, -1, -1, 6528, 6528, 6528, 6528, 7552, -1, -1, 7680, 7808, 7936, 8064, 8192, 6528, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, 1536, 12288, 1536, 12416, 1536, 12544, 1536, 1536, 1536, 1536, 1536, 12672, 1536, 1536, 1536, 12800, 12928, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13056, 13184, 13312, -1, 13440, -1, -1, -1, -1, -1, -1, 13568, 13696, 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, 13952, 14080, 14208, -1, -1, -1, 14336, 14464, 14592, 14720, 14848, 14976, 15104, 15232, 15360, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15488, 15616, 15616, 15744, 15872, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 15616, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15488 }, { 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, 0x0000, 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, 0x8845, 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, 0x5908, 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, 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, 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, 0x0000, 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, 0x0000, 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, 0x0000, 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, 0x0000, 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, 0x045a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0x0000, 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, 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, 0x0001, 0x0000, 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, 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, 0xb5ad, 0x5ad6, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 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, 0x08e7, 0x8421, 0xe738, 0x739c, 0x0008, 0x1080, 0x0842, 0x24a5, 0x04a5, 0x2108, 0x1084, 0x0842, 0x24a5, 0x04a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0001, 0x0000, 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, 0x0002, 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, 0x0009, 0x0000, 0x0000, 0x0000, 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, 0x4a40, 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, 0x204a, 0x9481, 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, 0x0001, 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, 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, 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, 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, 0x6b5a, 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, 0x0009, 0x0000, 0xd000, 0x949a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x00d0, 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, 0x0000, 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, 0x0000, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x8423, 0x4210, 0x2108, 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, 0x004a, 0x0000, 0x4a52, 0xa529, 0x5294, 0x094a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 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, 0x0000, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0x04a5, 0x4a40, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a40, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2108, 0x1084, 0x0842, 0x0021, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0x2529, 0x5290, 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, 0x294a, 0x94a5, 0x4a52, 0x0009, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x8129, 0x5294, 0x004a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x04a5, 0x4812, 0xa529, 0x5294, 0x294a, 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, 0x4094, 0x294a, 0x0001, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa409, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x0025, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0094, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x94a5, 0x4a40, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4812, 0x8129, 0x1204, 0x2048, 0x04a5, 0x4a52, 0x2529, 0x5200, 0x094a, 0x0024, 0x4a52, 0xa409, 0x5294, 0x294a, 0x94a5, 0x0012, 0xa400, 0x5294, 0x294a, 0x94a5, 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, 0x2529, 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, 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, 0x0000, 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-20111211-stable/lib/unictype/bidi_test.c�����������������������������������������������������0000664�0000000�0000000�00000002100�11671051007�0021203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Bidi classes of Unicode characters. Copyright (C) 2002, 2006, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/bitmap.h��������������������������������������������������������0000664�0000000�0000000�00000003227�11671051007�0020531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Three-level bitmap lookup. Copyright (C) 2000-2002, 2005-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ static inline int bitmap_lookup (const void *table, ucs4_t uc); /* These values are currently hardcoded into gen-ctype.c. */ #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 int *) table)[lookup2 + index3]; return (lookup3 >> (uc & 0x1f)) & 1; } } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/block_test.c����������������������������������������������������0000664�0000000�0000000�00000002045�11671051007�0021376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Blocks of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/blocks.c��������������������������������������������������������0000664�0000000�0000000�00000003560�11671051007�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Blocks of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/blocks.h��������������������������������������������������������0000664�0000000�0000000�00000044055�11671051007�0020536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Unicode blocks. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ 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" }, { 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" }, { 0x1B00, 0x1B7F, "Balinese" }, { 0x1B80, 0x1BBF, "Sundanese" }, { 0x1BC0, 0x1BFF, "Batak" }, { 0x1C00, 0x1C4F, "Lepcha" }, { 0x1C50, 0x1C7F, "Ol Chiki" }, { 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" }, { 0xAA00, 0xAA5F, "Cham" }, { 0xAA60, 0xAA7F, "Myanmar Extended-A" }, { 0xAA80, 0xAADF, "Tai Viet" }, { 0xAB00, 0xAB2F, "Ethiopic Extended-A" }, { 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" }, { 0x10300, 0x1032F, "Old Italic" }, { 0x10330, 0x1034F, "Gothic" }, { 0x10380, 0x1039F, "Ugaritic" }, { 0x103A0, 0x103DF, "Old Persian" }, { 0x10400, 0x1044F, "Deseret" }, { 0x10450, 0x1047F, "Shavian" }, { 0x10480, 0x104AF, "Osmanya" }, { 0x10800, 0x1083F, "Cypriot Syllabary" }, { 0x10840, 0x1085F, "Imperial Aramaic" }, { 0x10900, 0x1091F, "Phoenician" }, { 0x10920, 0x1093F, "Lydian" }, { 0x10A00, 0x10A5F, "Kharoshthi" }, { 0x10A60, 0x10A7F, "Old South Arabian" }, { 0x10B00, 0x10B3F, "Avestan" }, { 0x10B40, 0x10B5F, "Inscriptional Parthian" }, { 0x10B60, 0x10B7F, "Inscriptional Pahlavi" }, { 0x10C00, 0x10C4F, "Old Turkic" }, { 0x10E60, 0x10E7F, "Rumi Numeral Symbols" }, { 0x11000, 0x1107F, "Brahmi" }, { 0x11080, 0x110CF, "Kaithi" }, { 0x12000, 0x123FF, "Cuneiform" }, { 0x12400, 0x1247F, "Cuneiform Numbers and Punctuation" }, { 0x13000, 0x1342F, "Egyptian Hieroglyphs" }, { 0x16800, 0x16A3F, "Bamum Supplement" }, { 0x1B000, 0x1B0FF, "Kana Supplement" }, { 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" }, { 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" }, { 0x1F680, 0x1F6FF, "Transport And Map Symbols" }, { 0x1F700, 0x1F77F, "Alchemical Symbols" }, { 0x20000, 0x2A6DF, "CJK Unified Ideographs Extension B" }, { 0x2A700, 0x2B73F, "CJK Unified Ideographs Extension C" }, { 0x2B740, 0x2B81F, "CJK Unified Ideographs Extension D" }, { 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 0x30000 static const uint8_t blocks_level1[768 * 2] = { 0, 2, 2, 4, 3, 6, 6, 8, 8, 9, 9, 12, 12, 13, 13, 17, 17, 19, 19, 21, 21, 23, 23, 25, 25, 27, 27, 29, 29, 31, 31, 32, 32, 34, 34, 35, 35, 36, 35, 38, 38, 39, 38, 39, 38, 41, 41, 46, 46, 48, 48, 52, 52, 54, 54, 57, 57, 60, 60, 63, 63, 64, 64, 65, 65, 69, 69, 72, 72, 73, 73, 74, 74, 77, 77, 80, 80, 81, 81, 84, 84, 85, 85, 87, 87, 88, 88, 89, 89, 92, 92, 96, 96, 98, 98, 100, 100, 103, 103, 109, 109, 110, 110, 111, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 112, 111, 113, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 114, 115, 114, 115, 114, 115, 114, 115, 114, 117, 117, 118, 117, 120, 120, 122, 122, 127, 127, 131, 131, 134, 134, 136, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 137, 136, 138, 138, 139, 138, 139, 138, 139, 138, 140, 140, 141, 140, 141, 140, 141, 140, 141, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 141, 142, 142, 143, 142, 143, 143, 145, 144, 145, 144, 145, 145, 151, 151, 153, 153, 155, 155, 159, 159, 161, 161, 165, 165, 168, 168, 168, 168, 168, 168, 168, 168, 170, 170, 172, 172, 174, 174, 177, 177, 178, 178, 178, 178, 179, 179, 179, 179, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 181, 182, 181, 182, 181, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 183, 184, 183, 184, 183, 184, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 185, 184, 185, 184, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 188, 188, 189, 189, 191, 191, 192, 191, 192, 191, 192, 191, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 195, 195, 196, 196, 197, 197, 198, 197, 198, 197, 198, 198, 200, 200, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 201, 202, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 203, 202, 204, 203, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 205, 204, 205, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205 }; #define blocks_upper_first_index 205 #define blocks_upper_last_index 209 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_C.c�������������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0020564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_C.h�������������������������������������������������������0000664�0000000�0000000�00000124723�11671051007�0020607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[61 << 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, 18 + 640 * sizeof (short) / sizeof (int) + 288, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * 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, 18 + 640 * sizeof (short) / sizeof (int) + 400, -1, -1, 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, -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) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 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) + 496, 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) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, -1, 18 + 640 * sizeof (short) / sizeof (int) + 704, 18 + 640 * sizeof (short) / sizeof (int) + 720, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 736, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, -1, 18 + 640 * sizeof (short) / sizeof (int) + 752, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 768, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 784, 18 + 640 * sizeof (short) / sizeof (int) + 800, 18 + 640 * sizeof (short) / sizeof (int) + 816, 18 + 640 * sizeof (short) / sizeof (int) + 832, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 848, 18 + 640 * sizeof (short) / sizeof (int) + 864, 18 + 640 * sizeof (short) / sizeof (int) + 880, 18 + 640 * sizeof (short) / sizeof (int) + 896, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 912, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 928, 18 + 640 * sizeof (short) / sizeof (int) + 944, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, -1, 18 + 640 * sizeof (short) / sizeof (int) + 944, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 960, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496, 18 + 640 * sizeof (short) / sizeof (int) + 496 }, { 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, 0xFFFFFFFF, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x83000000, 0x0000280F, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0001FF00, 0x01800000, 0x00000001, 0x0001F900, 0x00000000, 0x0000FF00, 0xFFE0F800, 0x3000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x0000C000, 0x00000000, 0x00001800, 0x00000000, 0x00000000, 0xFFFC0000, 0x00000000, 0xF8000000, 0x00000000, 0x8000C000, 0xB0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00066011, 0x0C3A0200, 0x4F7F8660, 0xF0000030, 0x00067811, 0x2C920200, 0xA1FDC678, 0xFFC0003F, 0x00044011, 0x0C120200, 0xFFFEC440, 0xFFFD0030, 0x00066011, 0x0C120200, 0x4F3FC660, 0xFF000030, 0x29C23813, 0x3C0038E7, 0xFF7EC238, 0xF800003F, 0x00022011, 0x1C100200, 0xFC9FC220, 0x00FF0030, 0x00022013, 0x0C100200, 0xBF9FC220, 0xFFF90030, 0x00022013, 0x18000000, 0xFF7F8220, 0x01C00030, 0x03800013, 0xD0040000, 0x00A07B80, 0xFFE3FFFF, 0x00000001, 0x78000000, 0xF0000000, 0xFFFFFFFF, 0x010FDA69, 0xC4001351, 0xCC00C0A0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000100, 0x0001E000, 0x01000000, 0x20000000, 0xF8002000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC280C200, 0x00000000, 0x0000C200, 0x80C20000, 0x008000C2, 0x00000000, 0x00C20000, 0x00000000, 0x18000000, 0xE0000000, 0xFC000000, 0x00000000, 0x00000000, 0xFFE00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xFFE02000, 0xFF800000, 0xFFF00000, 0xFFF22000, 0x00000000, 0x00300000, 0xC0000000, 0xFC00FC00, 0xFC008000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x0000F800, 0x00000000, 0xFFC00000, 0xE0000000, 0xF000F000, 0x0000000E, 0xFFE0C000, 0x00000000, 0x0000F000, 0x3800FC00, 0x00000000, 0x30000000, 0x00000000, 0x80000000, 0x60000000, 0xFC00FC00, 0xFFFFC000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x0000F000, 0xE0000000, 0x00000000, 0xFC003800, 0x00000000, 0x0FF00000, 0x00000000, 0x07000000, 0x00001C00, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFF80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FFFFF80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0C00000, 0x00000000, 0x5500C0C0, 0xC0000000, 0x00000000, 0x00200000, 0x10300020, 0x80230000, 0x0000F800, 0x00007C00, 0x00000000, 0x000CFFFF, 0xE0008000, 0xFC000000, 0x0000FFFF, 0xFFFE0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC00E000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00008000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FC0000, 0x00000000, 0x0000FFC0, 0x00000000, 0x7FFE7FC0, 0xFF800000, 0x80808080, 0x80808080, 0x00000000, 0x00000000, 0xFFFC0000, 0xFFFFFFFF, 0xFFFFFFFF, 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x01800000, 0x00000000, 0x00000000, 0x00000000, 0x0000001F, 0x0001C000, 0x00000000, 0x00000000, 0x00008000, 0xF8000000, 0x00000000, 0x0000FFF0, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x0000FF80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF000, 0x00000000, 0x0FF00000, 0xFF000000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC8000, 0xFFFFFC00, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xFC00F000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0xFC003FE0, 0xF0000000, 0x00000000, 0x00000000, 0x7FF00000, 0xE0000000, 0x00000000, 0x00000000, 0x3C004000, 0xFFFFFFFF, 0x00000000, 0xFF800000, 0x0C00C000, 0xF0000000, 0x00000000, 0x00000000, 0x07FFFFF8, 0xFFFFFFFF, 0xFF818181, 0xFFFF8080, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFC00C000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFF0, 0x00000780, 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000C000, 0x00000000, 0x0000C000, 0x00000000, 0x00000000, 0xFC000000, 0xFFFFFFFF, 0x1F07FF80, 0xA0800000, 0x00000024, 0x00000000, 0x00000000, 0x00000000, 0x0007FFFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, 0x00030000, 0x00000000, 0xFFFFFF00, 0xC000FFFF, 0xFC000000, 0x0000FF80, 0x00080000, 0x0020F080, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xE3030303, 0xCFFF8080, 0x00001000, 0x48000080, 0xC000C000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x00000078, 0x00700000, 0x00000000, 0x00000000, 0xF000F800, 0xFFFFFFFF, 0x0000FFFF, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000, 0x00000000, 0xFFFE0000, 0xFFFFFFFF, 0x80000000, 0x0000FFF0, 0xFFFFF800, 0xFFFFFFFF, 0x40000000, 0x00000000, 0xFFC000F0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000002C0, 0x6E400000, 0x00400000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x70000000, 0x7C000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x01100F90, 0x78F00000, 0xFE00FF00, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x01C00000, 0x00C00000, 0x00F80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x0003C000, 0xFFFF0000, 0x00000000, 0x20000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFF0FFF8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFE000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x00000000, 0x00000180, 0x00000000, 0x07F80000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFF800000, 0xFFFC0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x20000000, 0x1400219B, 0x00000010, 0x00000000, 0x20201840, 0x84000000, 0x000203A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003000, 0x00000000, 0x00000000, 0x0000F000, 0x00000000, 0x00000000, 0xFFF00000, 0x80018000, 0x00010001, 0xFFFFFFFF, 0x0000F800, 0x00008000, 0x00000000, 0x0000FC00, 0xF8000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x0000FFF8, 0xF8000000, 0xFFFCFE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x0040FFFE, 0x00000000, 0xE0000000, 0xFFF00000, 0x00000000, 0xFFFFF820, 0xFFFE0000, 0x00000000, 0x80000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE1000000, 0x00000000, 0xC0000000, 0x0000FFFF, 0xFFFFFF00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x8AA20001, 0x0010D0C0, 0xFFFF001E, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000 } }; ���������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Cc.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Cc.h������������������������������������������������������0000664�0000000�0000000�00000004113�11671051007�0020740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Cf.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Cf.h������������������������������������������������������0000664�0000000�0000000�00000015475�11671051007�0020760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[8 << 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, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 16 + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 64, -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, 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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00300000, 0x00000000, 0x00000000, 0x0000F800, 0x00007C00, 0x00000000, 0x0000FC1F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07F80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Cn.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Cn.h������������������������������������������������������0000664�0000000�0000000�00000125524�11671051007�0020765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[60 << 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, 18 + 768 * sizeof (short) / sizeof (int) + 272, -1, 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, 18 + 768 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * 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 + 768 * sizeof (short) / sizeof (int) + 384, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 400, 18 + 768 * sizeof (short) / sizeof (int) + 416, 18 + 768 * sizeof (short) / sizeof (int) + 432, 18 + 768 * 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 + 768 * sizeof (short) / sizeof (int) + 464, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, -1, 18 + 768 * sizeof (short) / sizeof (int) + 672, 18 + 768 * sizeof (short) / sizeof (int) + 688, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 704, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, -1, 18 + 768 * sizeof (short) / sizeof (int) + 720, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 736, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 768, 18 + 768 * sizeof (short) / sizeof (int) + 784, 18 + 768 * sizeof (short) / sizeof (int) + 800, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 816, 18 + 768 * sizeof (short) / sizeof (int) + 832, 18 + 768 * sizeof (short) / sizeof (int) + 848, 18 + 768 * sizeof (short) / sizeof (int) + 864, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * 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, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 880, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 896, 18 + 768 * sizeof (short) / sizeof (int) + 912, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, -1, 18 + 768 * sizeof (short) / sizeof (int) + 912, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 928, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 944 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x83000000, 0x0000280F, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0001FF00, 0x01800000, 0x00000001, 0x0001F900, 0x00000000, 0x0000FF00, 0xFFE0F800, 0x30000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00001800, 0x00000000, 0x00000000, 0xFFFC0000, 0x00000000, 0xF8000000, 0x00000000, 0x8000C000, 0xB0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00066011, 0x0C3A0200, 0x4F7F8660, 0xF0000030, 0x00067811, 0x2C920200, 0xA1FDC678, 0xFFC0003F, 0x00044011, 0x0C120200, 0xFFFEC440, 0xFFFD0030, 0x00066011, 0x0C120200, 0x4F3FC660, 0xFF000030, 0x29C23813, 0x3C0038E7, 0xFF7EC238, 0xF800003F, 0x00022011, 0x1C100200, 0xFC9FC220, 0x00FF0030, 0x00022013, 0x0C100200, 0xBF9FC220, 0xFFF90030, 0x00022013, 0x18000000, 0xFF7F8220, 0x01C00030, 0x03800013, 0xD0040000, 0x00A07B80, 0xFFE3FFFF, 0x00000001, 0x78000000, 0xF0000000, 0xFFFFFFFF, 0x010FDA69, 0xC4001351, 0xCC00C0A0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000100, 0x0001E000, 0x01000000, 0x20000000, 0xF8002000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC280C200, 0x00000000, 0x0000C200, 0x80C20000, 0x008000C2, 0x00000000, 0x00C20000, 0x00000000, 0x18000000, 0xE0000000, 0xFC000000, 0x00000000, 0x00000000, 0xFFE00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xFFE02000, 0xFF800000, 0xFFF00000, 0xFFF22000, 0x00000000, 0x00000000, 0xC0000000, 0xFC00FC00, 0xFC008000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x0000F800, 0x00000000, 0xFFC00000, 0xE0000000, 0xF000F000, 0x0000000E, 0xFFE0C000, 0x00000000, 0x0000F000, 0x3800FC00, 0x00000000, 0x30000000, 0x00000000, 0x80000000, 0x60000000, 0xFC00FC00, 0xFFFFC000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x0000F000, 0xE0000000, 0x00000000, 0xFC003800, 0x00000000, 0x0FF00000, 0x00000000, 0x07000000, 0x00001C00, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFF80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FFFFF80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0C00000, 0x00000000, 0x5500C0C0, 0xC0000000, 0x00000000, 0x00200000, 0x10300020, 0x80230000, 0x00000000, 0x00000000, 0x00000000, 0x000C03E0, 0xE0008000, 0xFC000000, 0x0000FFFF, 0xFFFE0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC00E000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00008000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FC0000, 0x00000000, 0x0000FFC0, 0x00000000, 0x7FFE7FC0, 0xFF800000, 0x80808080, 0x80808080, 0x00000000, 0x00000000, 0xFFFC0000, 0xFFFFFFFF, 0xFFFFFFFF, 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x01800000, 0x00000000, 0x00000000, 0x00000000, 0x0000001F, 0x0001C000, 0x00000000, 0x00000000, 0x00008000, 0xF8000000, 0x00000000, 0x0000FFF0, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x0000FF80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF000, 0x00000000, 0x0FF00000, 0xFF000000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC8000, 0xFFFFFC00, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xFC00F000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0xFC003FE0, 0xF0000000, 0x00000000, 0x00000000, 0x7FF00000, 0xE0000000, 0x00000000, 0x00000000, 0x3C004000, 0xFFFFFFFF, 0x00000000, 0xFF800000, 0x0C00C000, 0xF0000000, 0x00000000, 0x00000000, 0x07FFFFF8, 0xFFFFFFFF, 0xFF818181, 0xFFFF8080, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFC00C000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFF0, 0x00000780, 0xF0000000, 0x00000000, 0x0000C000, 0x00000000, 0x0000C000, 0x00000000, 0x00000000, 0xFC000000, 0xFFFFFFFF, 0x1F07FF80, 0xA0800000, 0x00000024, 0x00000000, 0x00000000, 0x00000000, 0x0007FFFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, 0x00030000, 0x00000000, 0xFFFFFF00, 0xC000FFFF, 0xFC000000, 0x0000FF80, 0x00080000, 0x0020F080, 0x00000000, 0x00000000, 0x00000000, 0x60000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xE3030303, 0xC1FF8080, 0x00001000, 0x48000080, 0xC000C000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x00000078, 0x00700000, 0x00000000, 0x00000000, 0xF000F800, 0xFFFFFFFF, 0x0000FFFF, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000, 0x00000000, 0xFFFE0000, 0xFFFFFFFF, 0x80000000, 0x0000FFF0, 0xFFFFF800, 0xFFFFFFFF, 0x40000000, 0x00000000, 0xFFC000F0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000002C0, 0x6E400000, 0x00400000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x70000000, 0x7C000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x01100F90, 0x78F00000, 0xFE00FF00, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x01C00000, 0x00C00000, 0x00F80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x0003C000, 0xFFFF0000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFF0FFF8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFE000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x00000000, 0x00000180, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFF800000, 0xFFFC0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x20000000, 0x1400219B, 0x00000010, 0x00000000, 0x20201840, 0x84000000, 0x000203A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003000, 0x00000000, 0x00000000, 0x0000F000, 0x00000000, 0x00000000, 0xFFF00000, 0x80018000, 0x00010001, 0xFFFFFFFF, 0x0000F800, 0x00008000, 0x00000000, 0x0000FC00, 0xF8000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x0000FFF8, 0xF8000000, 0xFFFCFE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x0040FFFE, 0x00000000, 0xE0000000, 0xFFF00000, 0x00000000, 0xFFFFF820, 0xFFFE0000, 0x00000000, 0x80000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE1000000, 0x00000000, 0xC0000000, 0x0000FFFF, 0xFFFFFF00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x8AA20001, 0x0010D0C0, 0xFFFF001E, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Co.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Co.h������������������������������������������������������0000664�0000000�0000000�00000025263�11671051007�0020765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Cs.c������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0020760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Cs.h������������������������������������������������������0000664�0000000�0000000�00000004333�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_L.c�������������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_L.h�������������������������������������������������������0000664�0000000�0000000�00000061227�11671051007�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[48 << 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, -1, 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, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 624, -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) + 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, 4 + 384 * sizeof (short) / sizeof (int) + 320, 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, 4 + 384 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, -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) + 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) + 720, 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) + 736, 4 + 384 * 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, 4 + 384 * sizeof (short) / sizeof (int) + 320, 4 + 384 * sizeof (short) / sizeof (int) + 752, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, 0x00000000, 0x00000000, 0x00000000, 0x3CDF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x027FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0xFFFFFFFF, 0x000007FF, 0xFFFEC000, 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C060, 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x043007FF, 0x043FFFFF, 0x00000110, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xFEFE0003, 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x00030003, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x00000003, 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x00000003, 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00060003, 0xFFFDDFE0, 0x27FFFFFF, 0x00004000, 0xFC000003, 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, 0xFFFFFFFE, 0x000DFFFF, 0x0000007F, 0x00000000, 0xFEF02596, 0x200DECAE, 0x3000005F, 0x00000000, 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, 0x00001F00, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, 0x00004003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x000007FF, 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, 0xFFFFFFFF, 0x00000FFF, 0x000000FE, 0x00000000, 0x007FFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, 0xFFFFFFF8, 0x0000C001, 0xFFFFFFFF, 0x0000003F, 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x0003DE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x80020000, 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, 0x3E2FFC84, 0xF3FFBD50, 0x000043E0, 0x00000000, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x183E0000, 0xFFFFFFFE, 0xFFFFFFFF, 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000379FF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x08FC0000, 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x1FFFFFFF, 0xFFFFFFF0, 0x0007FFFF, 0x00008000, 0x00000000, 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0x047FFFFF, 0xFFFFFFFF, 0x3E62FFFF, 0x38000005, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000007, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000003FD, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x0000FF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x00FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_LC.c������������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0020700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 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 <http://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-20111211-stable/lib/unictype/categ_LC.h������������������������������������������������������0000664�0000000�0000000�00000015405�11671051007�0020717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFEFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x38CF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x007FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFEFFFFFC, 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3E2FFC84, 0xF21FBD50, 0x000043E0, 0x00000000, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xDFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00003FFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFEFFFF, 0x000378FF, 0x000003FF, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Ll.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Ll.h������������������������������������������������������0000664�0000000�0000000�00000015005�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -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, 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, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -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, 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 }, { 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x04200400, 0x80000000, 0xFF7FFFFF, 0xAAAAAAAA, 0x55AAAAAA, 0xAAAAAB55, 0xD4AAAAAA, 0x4E243129, 0xE6512D2A, 0xB5555240, 0xAA29AAAA, 0xAAAAAAAA, 0x93FAAAAA, 0xFFFFAA85, 0xFFFFFFFF, 0xFFEFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x388A0000, 0x00010000, 0xFFFFF000, 0xAAE37FFF, 0x192FAAAA, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, 0xAAAAAAAA, 0x000000AA, 0x00000000, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFEFFFFFC, 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xBFEAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x003F00FF, 0x00FF00FF, 0x00FF003F, 0x3FFF00FF, 0x00FF00FF, 0x40DF00FF, 0x00CF00DC, 0x00DC00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0008C400, 0x32108000, 0x000043C0, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x1FDA1562, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0000501A, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AAA, 0x00AAAAAA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAABAAA8, 0xAAAAAAAA, 0x95FEAAAA, 0x000250AA, 0x000002AA, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x000FFFFF, 0xFFDFC000, 0x000000FF, 0x0FFFFFFC, 0xEBC00000, 0x0000FFEF, 0xFFFFFC00, 0xC000000F, 0x00FFFFFF, 0xFFFC0000, 0x00000FFF, 0xFFFFFFC0, 0xFC000000, 0x000FFFFF, 0xFFFFC000, 0x000000FF, 0x0FFFFFFC, 0xFFC00000, 0x0000FFFF, 0xFFFFFC00, 0x0000003F, 0xF7FFFFFC, 0xF0000003, 0x0FDFFFFF, 0xFFC00000, 0x003F7FFF, 0xFFFF0000, 0x0000FDFF, 0xFFFFFC00, 0x00000BF7, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Lm.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Lm.h������������������������������������������������������0000664�0000000�0000000�00000015514�11671051007�0020772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[20 << 4]; } u_categ_Lm = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -1, 2 + 128 * sizeof (short) / sizeof (int) + 0, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96, 2 + 128 * sizeof (short) / sizeof (int) + 112, 2 + 128 * sizeof (short) / sizeof (int) + 128, 2 + 128 * sizeof (short) / sizeof (int) + 144, -1, 2 + 128 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 176, 2 + 128 * sizeof (short) / sizeof (int) + 192, 2 + 128 * 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, 2 + 128 * sizeof (short) / sizeof (int) + 224, -1, 2 + 128 * sizeof (short) / sizeof (int) + 240, 2 + 128 * sizeof (short) / sizeof (int) + 256, 2 + 128 * sizeof (short) / sizeof (int) + 272, 2 + 128 * 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, 2 + 128 * sizeof (short) / sizeof (int) + 304 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x0003FFC3, 0x0000501F, 0x00000000, 0x00000000, 0x00000000, 0x04100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04300000, 0x04000000, 0x00000110, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3F000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x01000003, 0xF8000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80020000, 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x083E0000, 0x00000000, 0x00000000, 0x60000000, 0x00000000, 0x00000000, 0x70000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3F000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF800000, 0x00000000, 0x00000000, 0x00010000, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Lo.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Lo.h������������������������������������������������������0000664�0000000�0000000�00000057550�11671051007�0021002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[45 << 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, -1, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, -1, 4 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 608, -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) + 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, 4 + 384 * sizeof (short) / sizeof (int) + 288, 4 + 384 * sizeof (short) / sizeof (int) + 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, 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, 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) + 672, 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) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, -1, -1, -1, -1, -1, -1, -1, -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) + 704, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0xFFFFFFFF, 0x000007FE, 0xFFFEC000, 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C000, 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x000007FF, 0x003FFFFF, 0x00000000, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xFEFC0003, 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x00030003, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x00000003, 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x00000003, 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00060003, 0xFFFDDFE0, 0x27FFFFFF, 0x00004000, 0xFC000003, 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, 0xFFFFFFFE, 0x000DFFFF, 0x0000003F, 0x00000000, 0xFEF02596, 0x200DECAE, 0x3000001F, 0x00000000, 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, 0x00001F00, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, 0x00004003, 0x00000000, 0xFFFF0000, 0x07FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x000007FF, 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, 0xFFFFFFFF, 0x000FFFFF, 0x10000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFF7, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, 0xFFFFFFFF, 0x00000FFF, 0x000000FE, 0x00000000, 0x007FFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, 0xFFFFFFF8, 0x0000C001, 0xFFFFFFFF, 0x0000003F, 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x0003DE00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01E00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x0000003F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0x00000040, 0x10000000, 0xFFFFFFFE, 0xFFFFFFFF, 0x807FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x87FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFDFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0FFF, 0x00000C00, 0x00000000, 0x00004000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x08FC0000, 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x1FFFFFFF, 0xFFFFFFF0, 0x0007FFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0x047EFFFF, 0xFFFFFFFF, 0x3E62FFFF, 0x18000005, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000007, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xA0000000, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFEFFC0, 0x3FFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000003FD, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x0000FF0F, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x00FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Lt.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Lt.h������������������������������������������������������0000664�0000000�0000000�00000004513�11671051007�0020776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000920, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF00FF00, 0x1000FF00, 0x00001000, 0x10000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Lu.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Lu.h������������������������������������������������������0000664�0000000�0000000�00000014405�11671051007�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[12 << 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, -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, 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, 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, 3 + 256 * sizeof (short) / sizeof (int) + 128, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x7F7FFFFF, 0x00000000, 0x55555555, 0xAA555555, 0x555554AA, 0x2B555555, 0xB1DBCED6, 0x11AED2D5, 0x4AAAA490, 0x55D25555, 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00450000, 0xFFFED740, 0x00000FFB, 0x551C8000, 0xE6905555, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, 0x55555555, 0xFFFE0055, 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x55555555, 0x55555555, 0x55555555, 0x40155555, 0x55555555, 0x55555555, 0x55555555, 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, 0x00000000, 0x0F000000, 0x0F000F00, 0x0F001F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3E273884, 0xC00F3D50, 0x00000020, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0xC025EA9D, 0x55555555, 0x55555555, 0x55555555, 0x00002805, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x00001555, 0x00555555, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55545554, 0x55555555, 0x6A005555, 0x00012855, 0x00000155, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FFFFFF, 0xFFF00000, 0x00003FFF, 0xFFFFFF00, 0xD0000003, 0x003FDE64, 0xFFFF0000, 0x000003FF, 0x1FDFE7B0, 0x7B000000, 0x0001FC5F, 0xFFFFF000, 0x0000003F, 0x03FFFFFF, 0xFFF00000, 0x00003FFF, 0xFFFFFF00, 0xF0000003, 0x003FFFFF, 0xFFFF0000, 0x000003FF, 0xFFFFFF00, 0x00000001, 0x07FFFFFC, 0xF0000000, 0x001FFFFF, 0xFFC00000, 0x00007FFF, 0xFFFF0000, 0x000001FF, 0x00000400, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_M.c�������������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_M.h�������������������������������������������������������0000664�0000000�0000000�00000027075�11671051007�0020623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[27 << 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, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 16 + 384 * 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, 16 + 384 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, 0x07FF0000, 0x00000000, 0xFFFFF800, 0x00010000, 0x00000000, 0x00000000, 0x9FC00000, 0x00003D9F, 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, 0xFBC00000, 0x00003EEF, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0xDC000000, 0x00FEFFFF, 0x0000000C, 0x0000000E, 0xD0000000, 0x0080399F, 0x0000000C, 0x0000000E, 0xD0000000, 0x00023987, 0x00230000, 0x0000000E, 0xD0000000, 0x00003BBF, 0x0000000C, 0x0000000E, 0xD0000000, 0x00C0399F, 0x0000000C, 0x00000004, 0xC0000000, 0x00803DC7, 0x00000000, 0x0000000E, 0xC0000000, 0x00603DDF, 0x0000000C, 0x0000000C, 0xD0000000, 0x00603DDF, 0x0000000C, 0x0000000C, 0xC0000000, 0x00803DDF, 0x0000000C, 0x0000000C, 0x00000000, 0xFF5F8400, 0x000C0000, 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, 0x03000000, 0xC2A00000, 0x00000000, 0xFFFE0000, 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0x00000000, 0x7FFFF800, 0xC3C00000, 0x001E3F9D, 0x3C00BFFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, 0x00000000, 0xFFC00000, 0x200FFFFF, 0x00000000, 0x00003800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x0FFF0FFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x00000301, 0x00000000, 0x0F800000, 0x00000000, 0x7FE00000, 0x9FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001F, 0xFFF00000, 0x0000001F, 0x000FF800, 0x00000007, 0x000007FE, 0x00000000, 0x000FFFC0, 0x00000000, 0x00FFFFF0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF70000, 0x000421FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00038000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x06000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30078000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000844, 0x000000F8, 0x00000000, 0x00000000, 0x00000003, 0xFFF00000, 0x0000001F, 0x0003FFFF, 0x00000000, 0x00003FC0, 0x000FFF80, 0x00000000, 0x0000000F, 0xFFF80000, 0x00000001, 0x00000000, 0x00000000, 0x007FFE00, 0x00003008, 0x08000000, 0x00000000, 0xC19D0000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000037F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0xFF000000, 0x0000007F, 0x00000000, 0x00000007, 0x07FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Mc.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Mc.h������������������������������������������������������0000664�0000000�0000000�00000015005�11671051007�0020754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0xC8000000, 0x0000DE01, 0x00000000, 0x0000000C, 0xC0000000, 0x00801981, 0x00000000, 0x00000008, 0xC0000000, 0x00000001, 0x00000000, 0x00000008, 0xC0000000, 0x00001A01, 0x00000000, 0x0000000C, 0x40000000, 0x00801981, 0x00000000, 0x00000000, 0xC0000000, 0x00801DC6, 0x00000000, 0x0000000E, 0x00000000, 0x0000001E, 0x00000000, 0x0000000C, 0x40000000, 0x00600D9F, 0x00000000, 0x0000000C, 0xC0000000, 0x00801DC1, 0x00000000, 0x0000000C, 0x00000000, 0xFF038000, 0x000C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x19021800, 0x00C00000, 0x00003F9C, 0x1C009F98, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0400000, 0x000001BF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FB0E78, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x00000301, 0x00000000, 0x0E000000, 0x00000000, 0x00A00000, 0x0007E01A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0xE8200000, 0x0000001B, 0x00000000, 0x00000004, 0x000004C2, 0x00000000, 0x000C5C80, 0x00000000, 0x00300FF0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000098, 0x00000000, 0x00000000, 0x00000003, 0xFFF00000, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x000C0000, 0x00000000, 0x00000008, 0xEC300000, 0x00000001, 0x00000000, 0x00000000, 0x00198000, 0x00002000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000016D8, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x01870000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007E060, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Me.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Me.h������������������������������������������������������0000664�0000000�0000000�00000005113�11671051007�0020755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -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, 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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x0000001D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00070000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Mn.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Mn.h������������������������������������������������������0000664�0000000�0000000�00000027076�11671051007�0021002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[27 << 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, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 16 + 384 * 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, 16 + 384 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, 0x07FF0000, 0x00000000, 0xFFFFF800, 0x00010000, 0x00000000, 0x00000000, 0x9FC00000, 0x00003D9F, 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, 0xFBC00000, 0x00003EEF, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x14000000, 0x00FE21FE, 0x0000000C, 0x00000002, 0x10000000, 0x0000201E, 0x0000000C, 0x00000006, 0x10000000, 0x00023986, 0x00230000, 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, 0x00000002, 0x90000000, 0x0040201E, 0x0000000C, 0x00000004, 0x00000000, 0x00002001, 0x00000000, 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, 0x00000000, 0x90000000, 0x00003040, 0x0000000C, 0x00000000, 0x00000000, 0x0000201E, 0x0000000C, 0x00000000, 0x00000000, 0x005C0400, 0x00000000, 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, 0x20002064, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, 0x00000000, 0x3F800000, 0x200FFE40, 0x00000000, 0x00003800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x0E040187, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01800000, 0x00000000, 0x7F400000, 0x9FF81FE5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, 0x00000003, 0x0000033C, 0x00000000, 0x0003A340, 0x00000000, 0x00CFF000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF70000, 0x000021FD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFF0000, 0x0001FFE2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00038000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x06000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30008000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000844, 0x00000060, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x0003FFFF, 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, 0x00000007, 0x13C80000, 0x00000000, 0x00000000, 0x00000000, 0x00667E00, 0x00001008, 0x00000000, 0x00000000, 0xC19D0000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002120, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFF000000, 0x0000007F, 0x00000000, 0x00000003, 0x06780000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF8000380, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_N.c�������������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0020577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_N.h�������������������������������������������������������0000664�0000000�0000000�00000027004�11671051007�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, 3 + 256 * sizeof (short) / sizeof (int) + 432, 3 + 256 * sizeof (short) / sizeof (int) + 448, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 3 + 256 * sizeof (short) / sizeof (int) + 496, -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 }, { 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x720C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x03F0FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00FCFFC0, 0x00000000, 0x00000000, 0x00000000, 0x0007FFC0, 0x00000000, 0x00000000, 0x00000000, 0x7F00FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x003FFFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFE00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0001C000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x07FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03F10000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x000003E7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x070003FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF80, 0x000FFFFF, 0xFFFFFFFF, 0x01FFFFFF, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x00000402, 0x00000000, 0x00000000, 0x00000000, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FC00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x60000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Nd.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Nd.h������������������������������������������������������0000664�0000000�0000000�00000017405�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, 3 + 256 * sizeof (short) / sizeof (int) + 224, -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, 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 }, { 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Nl.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Nl.h������������������������������������������������������0000664�0000000�0000000�00000012004�11671051007�0020762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0001C000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x000001E7, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x070003FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000402, 0x00000000, 0x00000000, 0x00000000, 0x003E0000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_No.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_No.h������������������������������������������������������0000664�0000000�0000000�00000022005�11671051007�0020767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[23 << 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, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 3 + 256 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x720C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03F00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00FC0000, 0x00000000, 0x00000000, 0x00000000, 0x00070000, 0x00000000, 0x00000000, 0x00000000, 0x7F000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000FFC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFE00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03F10000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF80, 0x000FFFFF, 0x00000000, 0x01E00000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FC00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x60000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_P.c�������������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0020601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_P.h�������������������������������������������������������0000664�0000000�0000000�00000027004�11671051007�0020616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -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, 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, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x8C00F7EE, 0xB8000001, 0x28000000, 0x00000000, 0x88800802, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x00000000, 0x00000600, 0x40000000, 0x00000049, 0x00180000, 0xC8003600, 0x00000000, 0x00000000, 0x00003C00, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03800000, 0x00000000, 0x7FFF0000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00000000, 0x0C008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007FFF0, 0x3C000000, 0x00000000, 0x00000000, 0x00000020, 0x00000000, 0x061F0000, 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000001FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00006000, 0x18000000, 0x00000000, 0x00000000, 0x00003800, 0x00000000, 0x00600000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07700000, 0x00000000, 0x000007FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0xF0000000, 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFF00FF, 0x7FFBFFEF, 0x60000000, 0x00006000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFF00, 0x00000000, 0x00000000, 0x00000060, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FFFFF8, 0x00000000, 0x0F000000, 0x30000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xDE000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00037FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF3FF0E, 0x20010000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x00000000, 0x40080000, 0x00000000, 0x00000000, 0x00000000, 0x00FC0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F00000, 0x00000000, 0x00000000, 0x0000C000, 0x07000000, 0x00000000, 0x0000C000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xC0003FFE, 0x00000000, 0x00000000, 0x00000000, 0xF0000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0xFFFF0000, 0xFFF7FFFF, 0x00000D0B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C00F7EE, 0xB8000001, 0xA8000000, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FF0000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFE000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003F80, 0x00000000, 0x00000000, 0xD8000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Pc.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Pc.h������������������������������������������������������0000664�0000000�0000000�00000005113�11671051007�0020756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00100001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00180000, 0x0000E000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Pd.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Pd.h������������������������������������������������������0000664�0000000�0000000�00000007513�11671051007�0020765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x40000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00060000, 0x01000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Pe.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Pe.h������������������������������������������������������0000664�0000000�0000000�00000011114�11671051007�0020756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000200, 0x20000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x40000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002AAA00, 0x00000000, 0x00000000, 0x00000040, 0x0000AA80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01555550, 0x00000000, 0x0A000000, 0x20000000, 0x00000000, 0x000002A8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xCAA2AA00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x55400000, 0x54000115, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x20000000, 0x20000000, 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Pf.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Pf.h������������������������������������������������������0000664�0000000�0000000�00000005113�11671051007�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20002428, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Pi.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Pi.h������������������������������������������������������0000664�0000000�0000000�00000005113�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x99000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10001214, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Po.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Po.h������������������������������������������������������0000664�0000000�0000000�00000024405�11671051007�0020777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -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, 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, 3 + 256 * sizeof (short) / sizeof (int) + 208, -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, 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, -1, -1, -1, -1, -1, -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, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 384, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x8C00D4EE, 0x10000001, 0x00000000, 0x00000000, 0x80800002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x00000000, 0x00000200, 0x00000000, 0x00000049, 0x00180000, 0xC8003600, 0x00000000, 0x00000000, 0x00003C00, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03800000, 0x00000000, 0x7FFF0000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00000000, 0x0C008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007FFF0, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x00000000, 0x061F0000, 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000001FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00006000, 0x00000000, 0x00000000, 0x00000000, 0x00003800, 0x00000000, 0x00600000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07700000, 0x00000000, 0x000007BF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0xF0000000, 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00C00000, 0x79FF00FF, 0x7FEBFF8E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xDE000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xCB7FC9C3, 0x00037C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000E, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x00000000, 0x40080000, 0x00000000, 0x00000000, 0x00000000, 0x00FC0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F00000, 0x00000000, 0x00000000, 0x0000C000, 0x07000000, 0x00000000, 0x0000C000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xC0003FFE, 0x00000000, 0x00000000, 0x00000000, 0xF0000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x027F0000, 0x00010000, 0x80F71E60, 0x00000D03, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C00D4EE, 0x10000001, 0x00000000, 0x00000032, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FF0000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFE000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003F80, 0x00000000, 0x00000000, 0xD8000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Ps.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Ps.h������������������������������������������������������0000664�0000000�0000000�00000011114�11671051007�0020774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000100, 0x08000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x14000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x44000000, 0x00000000, 0x00000020, 0x20000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00155500, 0x00000000, 0x00000000, 0x00000020, 0x00005540, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00AAAAA8, 0x00000000, 0x05000000, 0x10000000, 0x00000000, 0x00000154, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x25515500, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0xAAA00000, 0x2A00008A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x08000000, 0x88000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_S.c�������������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_S.h�������������������������������������������������������0000664�0000000�0000000�00000032404�11671051007�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 6.0.0. */ #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_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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 3 + 256 * sizeof (short) / sizeof (int) + 544, -1, 3 + 256 * sizeof (short) / sizeof (int) + 560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 576, 3 + 256 * sizeof (short) / sizeof (int) + 592, 3 + 256 * sizeof (short) / sizeof (int) + 608, 3 + 256 * sizeof (short) / sizeof (int) + 624, -1, -1, -1, -1 }, { 0x00000000, 0x70000810, 0x40000000, 0x50000001, 0x00000000, 0x0153D3FC, 0x00800000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC003C, 0xFFFFAFE0, 0x00000000, 0x00000000, 0x00000000, 0x00200000, 0x00000030, 0x00000000, 0x00000000, 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000C9C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x60000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C0C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x07F80000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFCF8000E, 0x01500000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x01E0DFBF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FF007FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, 0x00000000, 0x00000000, 0x00040010, 0x1C000000, 0x00001C00, 0x03FFFFFF, 0x00000000, 0x00000000, 0xC1D0037B, 0x0C0042AF, 0x0000BC1F, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF9FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0x00000000, 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, 0xFFF00000, 0xFFFFFFFF, 0xFFFFD79F, 0xFFFF003F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE000007, 0xFFFFFFFF, 0xF0FFFFFF, 0xCFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007E0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, 0x000C0010, 0xC0C00001, 0x00000000, 0x00000000, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC30000, 0x00000000, 0xFFFFFFFF, 0x0000000F, 0x7FFFFFFF, 0xFFFFFC00, 0x0001FFFF, 0xFFFFFFFF, 0xFFFFFC00, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007FFFFF, 0x00000003, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03C00F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x00000000, 0x00000000, 0x00000000, 0x00000274, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x70000810, 0x40000000, 0x50000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0xFF800000, 0x00000000, 0xFE000000, 0x0FFF03FF, 0x00000000, 0xFFFF0000, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0x00001C1F, 0xFFFFF018, 0xFFFFC3FF, 0x3FFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000002, 0x08000000, 0x00200000, 0x00200000, 0x00008000, 0x00008000, 0x00000200, 0x00000200, 0x00000008, 0x00000000, 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x7FFE7FFF, 0xFFFEFFFE, 0x00000000, 0xFFFF0000, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFF03FF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFF0007, 0x07FFFFFF, 0x000301FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFBF0001, 0xFFFFFFFF, 0x1FFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x000007DF, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1EFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x755DFFFE, 0xFFEF2F3F, 0x0000FFE1, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Sc.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Sc.h������������������������������������������������������0000664�0000000�0000000�00000010514�11671051007�0020762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[10 << 4]; } u_categ_Sc = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, 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, 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, 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, 2 + 128 * sizeof (short) / sizeof (int) + 128, 2 + 128 * sizeof (short) / sizeof (int) + 144 }, { 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x0000003C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x080C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000063 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Sk.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Sk.h������������������������������������������������������0000664�0000000�0000000�00000007113�11671051007�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_categ_Sk = { { 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, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 2 + 128 * sizeof (short) / sizeof (int) + 80, -1, 2 + 128 * sizeof (short) / sizeof (int) + 96 }, { 0x00000000, 0x00000000, 0x40000000, 0x00000001, 0x00000000, 0x01108100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC003C, 0xFFFFAFE0, 0x00000000, 0x00000000, 0x00000000, 0x00200000, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x007FFFFF, 0x00000003, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Sm.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Sm.h������������������������������������������������������0000664�0000000�0000000�00000014405�11671051007�0020777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[12 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x70000800, 0x00000000, 0x50000000, 0x00000000, 0x00021000, 0x00800000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00400000, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040010, 0x1C000000, 0x00001C00, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00000000, 0x0000081F, 0x00000000, 0x0C1F0000, 0x00004049, 0x0014C000, 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000F00, 0x00000003, 0x00000000, 0x10000000, 0xF8000000, 0x000FFFFF, 0xF0000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000002, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFD79F, 0xFFFF003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE000007, 0xFFFFFFFF, 0xF0FFFFFF, 0xCFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFF0000, 0x00001F9F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000074, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x70000800, 0x00000000, 0x50000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001E04, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000002, 0x08000000, 0x00200000, 0x00200000, 0x00008000, 0x00008000, 0x00000200, 0x00000200, 0x00000008, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_So.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_So.h������������������������������������������������������0000664�0000000�0000000�00000027405�11671051007�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[34 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 3 + 256 * sizeof (short) / sizeof (int) + 464, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x004142C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000C000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x60000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x05F80000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFCF8000E, 0x01500000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x01E0DFBF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FF007FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0D0037B, 0x0C0042AF, 0x0000B400, 0x00000000, 0xF3E00000, 0xFFFFBFB6, 0xFFEB3FFF, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF0FF, 0xFFFFF9FC, 0xFFFFFFFF, 0xEFFFFFFF, 0x07FFFFFF, 0xFFF00000, 0x0FFFFFFF, 0x000FFFFC, 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0x00000000, 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF7FFFFF, 0xFFFFFFFD, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, 0xFFF00000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000FFFF, 0x03FF0060, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007E0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, 0x000C0010, 0xC0C00001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC30000, 0x00000000, 0xFFFFFFFF, 0x0000000F, 0x7FFFFFFF, 0xFFFFFC00, 0x0001FFFF, 0xFFFFFFFF, 0xFFFFFC00, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02C00F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30006110, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0xFF800000, 0x00000000, 0xFE000000, 0x0FFF03FF, 0x00000000, 0xFFFF0000, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0x00001C1F, 0xFFFFF018, 0xFFFFC3FF, 0x3FFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x7FFE7FFF, 0xFFFEFFFE, 0x00000000, 0xFFFF0000, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFF03FF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFF0007, 0x07FFFFFF, 0x000301FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFBF0001, 0xFFFFFFFF, 0x1FFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x000007DF, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1EFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x755DFFFE, 0xFFEF2F3F, 0x0000FFE1, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Z.c�������������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Z.h�������������������������������������������������������0000664�0000000�0000000�00000006112�11671051007�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 6.0.0. */ #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_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, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -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 }, { 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00008300, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Zl.c������������������������������������������������������0000664�0000000�0000000�00000002056�11671051007�0020777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Zl.h������������������������������������������������������0000664�0000000�0000000�00000004113�11671051007�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Zp.c������������������������������������������������������0000664�0000000�0000000�00000002056�11671051007�0021003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Zp.h������������������������������������������������������0000664�0000000�0000000�00000004113�11671051007�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_Zs.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0021003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_Zs.h������������������������������������������������������0000664�0000000�0000000�00000006113�11671051007�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -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 }, { 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00008000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/categ_and.c�����������������������������������������������������0000664�0000000�0000000�00000002632�11671051007�0021154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/categ_and_not.c�������������������������������������������������0000664�0000000�0000000�00000002550�11671051007�0022033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/categ_byname.c��������������������������������������������������0000664�0000000�0000000�00000013406�11671051007�0021666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_byname.gperf����������������������������������������������0000664�0000000�0000000�00000007132�11671051007�0022546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. */ 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-20111211-stable/lib/unictype/categ_longname.c������������������������������������������������0000664�0000000�0000000�00000006262�11671051007�0022215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 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 <http://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-20111211-stable/lib/unictype/categ_name.c����������������������������������������������������0000664�0000000�0000000�00000005306�11671051007�0021333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/categ_none.c����������������������������������������������������0000664�0000000�0000000�00000002023�11671051007�0021343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/categ_of.c������������������������������������������������������0000664�0000000�0000000�00000004476�11671051007�0021026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 = ((u_category.level3[index3>>4] | (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-20111211-stable/lib/unictype/categ_of.h������������������������������������������������������0000664�0000000�0000000�00000231434�11671051007�0021027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Categories of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[173 * 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, -1, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096, 4224, 4224, 4352, 4480, 4608, 4736, 4864, 4224, 4224, 4224, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 6400, 6528, 6656, 6784, 6912, 7040, 7168, 7296, 7424, 7552, 7680, 7808, 7936, 8064, 8064, 8192, 8320, 8448, 8576, 8704, 8832, 8960, 8704, 9088, 9216, 8704, 8704, 8064, 9344, 8064, 8064, 9472, -1, 9600, 9728, 9856, 9984, 10112, 10240, 8704, 10368, 10496, 10624, 10752, 10880, 11008, 11136, 8704, 8704, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 11264, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 11392, 11520, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 11648, 4224, 4224, 11776, 11904, 12032, 12160, 12288, 12416, 12544, 12672, 12800, 12928, 13056, 13184, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 13312, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13440, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 4224, 4224, 13696, 13824, 13952, 14080, 4224, 4224, 14208, 14336, 14464, 14592, 14720, 14848, 14976, 15104, 15232, 15360, -1, 15488, 15616, 15744, 15872, 16000, -1, -1, -1, -1, -1, -1, 16128, -1, 16256, -1, 16384, -1, 16512, -1, 16640, -1, -1, -1, 16768, -1, -1, -1, 16896, 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, 4224, 4224, 4224, 4224, 4224, 4224, 17152, -1, 17280, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 17408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 4224, 4224, 4224, 17536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17664, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 17792, 17920, 18048, 18176, -1, 18304, -1, 18432, 18560, 18688, 18816, 18944, 19072, 19200, 19328, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19456, 19584, 19712, 19840, 19968, -1, 20096, 20224, 20352, 20480, 20608, 20736, 20864, 20992, 21120, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 21248, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 21376, 4224, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 4224, 4224, 4224, 21504, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21632, -1, 21760, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 13568, 22016 }, { 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, 0xb4ad, 0x2786, 0xa575, 0x2a55, 0x4345, 0x548d, 0xa805, 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, 0xec42, 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, 0xbd08, 0xdef7, 0xef7b, 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, 0xef7b, 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, 0xbbdd, 0x3294, 0x19c6, 0xad63, 0x94a5, 0x4a52, 0xa529, 0xd894, 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, 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, 0x9d21, 0x4210, 0x2108, 0x18bd, 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, 0xf67d, 0x7bde, 0xbdef, 0xdef7, 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, 0x18dd, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, 0x09d2, 0x8421, 0xdef4, 0x2949, 0x18c5, 0x7a63, 0xa529, 0x5297, 0xef4a, 0xf7bd, 0x4bde, 0x84e9, 0xdef4, 0xef7b, 0x9484, 0x3bd2, 0x0842, 0x8421, 0x4210, 0xf7bd, 0x7bde, 0x4aef, 0xa529, 0xaa94, 0x1bbd, 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, 0x1bbd, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0x3189, 0x94a6, 0xba52, 0xa631, 0x631b, 0xe90a, 0xf7bd, 0x7bde, 0xbd37, 0xdef7, 0xef7b, 0x9484, 0x3bd2, 0x0842, 0x8421, 0x4210, 0x294a, 0x54a5, 0xbdef, 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, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 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, 0xef48, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6a4, 0x631a, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6b5a, 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, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x3890, 0xef7a, 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, 0xc635, 0x6318, 0x518c, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xef7a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef6, 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, 0x7a42, 0xbdef, 0xdef7, 0xef7b, 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, 0xf7a9, 0x7bde, 0xbdef, 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, 0xb5a2, 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, 0xed8a, 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, 0x0842, 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, 0xef7a, 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, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x1086, 0x0842, 0xc621, 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, 0xd318, 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, 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, 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, 0xde98, 0x213b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 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, 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, 0x4a58, 0xa529, 0x5294, 0x294a, 0x94c5, 0x4a52, 0x8529, 0x4210, 0x210a, 0x9884, 0x7bde, 0xbdef, 0xdef7, 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, 0x8463, 0x4210, 0x2108, 0x1084, 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, 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0x5ef7, 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, 0x7bad, 0xbdef, 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, 0xdef6, 0xef7b, 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, 0xdef5, 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, 0x52ad, 0x594a, 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, 0x7bda, 0xbdef, 0xdef7, 0xef7b, 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, 0xd6bd, 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, 0x2eca, 0x94bb, 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, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef6, 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, 0xe800, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0xe842, 0x0020, 0x4200, 0x0100, 0x1004, 0x0000, 0x8020, 0x4010, 0x2108, 0x1084, 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, 0xf4a5, 0x7bde, 0x3def, 0x18c6, 0x8c55, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xbdef, 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, 0xf631, 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, 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, 0x294a, 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, 0xb5ad, 0x5ad6, 0xad6b, 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, 0xd210, 0xef7b, 0xf7bd, 0x7bde, 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, 0x7bd8, 0xbdef, 0x5ef7, 0x1c4a, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0xbd08, 0xdef7, 0xef7b, 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, 0xe840, 0xf420, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x8020, 0x0200, 0x2008, 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, 0x4207, 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, 0x7a53, 0xbdef, 0xdef7, 0x8c7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x10a5, 0x0842, 0x3121, 0xd246, 0xef7b, 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, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 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, 0xd312, 0xef7b, 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, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x109d, 0x0842, 0x9de9, 0x4210, 0xe908, 0x109d, 0x0842, 0xbde9, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x84e9, 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, 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, 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, 0xef48, 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, 0x7348, 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, 0xbde9, 0xdef7, 0xef7b, 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, 0xd631, 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, 0xdeaa, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 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, 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, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0x294a, 0x7bd5, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1124, 0x0842, 0x8421, 0xdea4, 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, 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, 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, 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, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 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, 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, 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, 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, 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, 0xef7b, 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, 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, 0x4210, 0xe908, 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, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xc631, 0x7bd8, 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, 0xa421, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 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, 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, 0xef6b, 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, 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, 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, 0xed6b, 0xd6bd, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6bd, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x294a, 0x94a5, 0x4a52, 0xdea9, 0xef7b, 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, 0xdef6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xded6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 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, 0xded6, 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, 0xf7b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5af, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7b5a, 0xb5ad, 0xded6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xf7b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xd7b5, 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, 0xbdad, 0x5ad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef6b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdad, 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, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0x5af7, 0xad6b, 0xd6bd, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd7b5, 0x7b5a, 0xb5ed, 0x5ed7, 0xed6b, 0xd6b5, 0x6b5a, 0xb5ef, 0xdad6, 0xef6b, 0xd6b5, 0x6bda, 0xb5ad, 0x5ad6, 0xad6b, 0xf7b5, 0x6bde, 0xb5ad, 0x5ad6, 0xad6b, 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, 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, 0x7bda, 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, 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-20111211-stable/lib/unictype/categ_or.c������������������������������������������������������0000664�0000000�0000000�00000002545�11671051007�0021035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/categ_test.c����������������������������������������������������0000664�0000000�0000000�00000002166�11671051007�0021373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/combiningclass.c������������������������������������������������0000664�0000000�0000000�00000003043�11671051007�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Combining classes of Unicode characters. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/combiningclass.h������������������������������������������������0000664�0000000�0000000�00000130630�11671051007�0022247�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 6.0.0. */ #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[53 << 7]; } u_combclass = { { 0, 512 }, { -1, -1, -1, -1, -1, -1, 0, -1, -1, 128, -1, 256, 384, 512, 640, 768, 896, -1, 1024, 1152, 1152, 1152, 1152, 1280, 1408, 1152, 1280, 1536, 1664, 1792, 1920, 2048, 2176, 2304, -1, -1, -1, -1, 2432, -1, -1, -1, -1, -1, -1, -1, 2560, 2688, -1, 2816, 2944, -1, 3072, -1, 3200, 3328, 3456, 3584, -1, 3712, -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, 3968, 4096, 4224, -1, -1, -1, -1, 4352, 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, 4608, 4736, -1, -1, 4864, 4992, 5120, 5248, -1, 5376, -1, 5504, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5632, -1, -1, -1, -1, -1, 5760, -1, -1, -1, -1, -1, -1, 5888, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6016, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6144, 6272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6400, 6528, 6656, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 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 } }; ��������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/combiningclass_byname.c�����������������������������������������0000664�0000000�0000000�00000003421�11671051007�0023572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical combining classes of Unicode characters. 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 <http://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-20111211-stable/lib/unictype/combiningclass_byname.gperf�������������������������������������0000664�0000000�0000000�00000002643�11671051007�0024460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Categories of Unicode characters. */ 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-20111211-stable/lib/unictype/combiningclass_longname.c���������������������������������������0000664�0000000�0000000�00000005161�11671051007�0024122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical combining classes of Unicode characters. Copyright (C) 2002, 2006-2007, 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 <http://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-20111211-stable/lib/unictype/combiningclass_name.c�������������������������������������������0000664�0000000�0000000�00000005464�11671051007�0023250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical combining classes of Unicode characters. Copyright (C) 2002, 2006-2007, 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 <http://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-20111211-stable/lib/unictype/ctype_alnum.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_alnum.h���������������������������������������������������0000664�0000000�0000000�00000062655�11671051007�0021607�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 6.0.0. */ #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[51 << 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, -1, 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, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, -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) + 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, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 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, 4 + 384 * sizeof (short) / sizeof (int) + 704, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 752, -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) + 768, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 784, 4 + 384 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -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, 4 + 384 * sizeof (short) / sizeof (int) + 800, -1, -1 }, { 0x00000000, 0x03FF0000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, 0x00000000, 0x00000000, 0x00000020, 0x3CDF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x027FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0xFFFFFFFF, 0x000007FF, 0xFFFEC3FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9FFFC060, 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0002003F, 0xFFFFFFFF, 0x043007FF, 0x043FFFFF, 0x00000110, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xFEFEFFC3, 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x0003FFC3, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001CFFC0, 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x0000FFC3, 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x0002FFC3, 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x0000FFC0, 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x0000FFC3, 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x0006FFC3, 0xFFFDDFE0, 0x27FFFFFF, 0x00004000, 0xFC00FFC3, 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, 0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FBF, 0x00000000, 0xFEF02596, 0x200DECAE, 0x33FF005F, 0x00000000, 0x00000001, 0x000003FF, 0xFFFFFEFF, 0x00001FFF, 0x00001F00, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x800007FF, 0x3C3F03FF, 0xFFE1C062, 0x03FF4003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x000003FF, 0x03FF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x00000000, 0xFFFFFFC0, 0x001F3FFF, 0xFFFFFFFF, 0x00000FFF, 0x03FF00FE, 0x00000000, 0x007FFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x03FF03FF, 0x00000080, 0x00000000, 0x00000000, 0xFFFFFFE0, 0x000FFFFF, 0x03FF0FE0, 0x00000000, 0xFFFFFFF8, 0x03FFC001, 0xFFFFFFFF, 0x0000003F, 0xFFFFFFFF, 0x0000000F, 0xFFFFE3FF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x0003DE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x80020000, 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, 0x3E2FFC84, 0xF3FFBF50, 0x000043E0, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0x00000FFF, 0xFFFFFFFF, 0x80007FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000379FF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFC, 0x000FFFFF, 0x03FF0000, 0x08FC0000, 0xFFFFFFFF, 0xFFFF003F, 0x0000007F, 0x1FFFFFFF, 0xFFFFFFF0, 0x0007FFFF, 0x03FF8000, 0x00000000, 0xFFFFFFFF, 0x000001FF, 0x03FF0FF7, 0x047FFFFF, 0xFFFFFFFF, 0x3E62FFFF, 0x38000005, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x03FF0007, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x03FF0000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x00FFFFFF, 0x00000000, 0x0000FFC0, 0xFFFFFFF8, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFF1FFF, 0xFFFF03FF, 0xFFFF03FF, 0x000007FF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_alpha.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_alpha.h���������������������������������������������������0000664�0000000�0000000�00000062655�11671051007�0021560�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 6.0.0. */ #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[51 << 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, -1, 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, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, -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) + 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, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 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, 4 + 384 * sizeof (short) / sizeof (int) + 704, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 752, -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) + 768, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 784, 4 + 384 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -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, 4 + 384 * sizeof (short) / sizeof (int) + 800, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, 0x00000000, 0x00000000, 0x00000020, 0x3CDF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x027FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0xFFFFFFFF, 0x000007FF, 0xFFFEC3FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9FFFC060, 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0002003F, 0xFFFFFFFF, 0x043007FF, 0x043FFFFF, 0x00000110, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xFEFEFFC3, 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x0003FFC3, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001CFFC0, 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x0000FFC3, 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x0002FFC3, 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x0000FFC0, 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x0000FFC3, 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x0006FFC3, 0xFFFDDFE0, 0x27FFFFFF, 0x00004000, 0xFC00FFC3, 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, 0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FBF, 0x00000000, 0xFEF02596, 0x200DECAE, 0x33FF005F, 0x00000000, 0x00000001, 0x000003FF, 0xFFFFFEFF, 0x00001FFF, 0x00001F00, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x800007FF, 0x3C3F03FF, 0xFFE1C062, 0x03FF4003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x000003FF, 0x03FF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x00000000, 0xFFFFFFC0, 0x001F3FFF, 0xFFFFFFFF, 0x00000FFF, 0x03FF00FE, 0x00000000, 0x007FFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x03FF03FF, 0x00000080, 0x00000000, 0x00000000, 0xFFFFFFE0, 0x000FFFFF, 0x03FF0FE0, 0x00000000, 0xFFFFFFF8, 0x03FFC001, 0xFFFFFFFF, 0x0000003F, 0xFFFFFFFF, 0x0000000F, 0xFFFFE3FF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x0003DE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x80020000, 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, 0x3E2FFC84, 0xF3FFBF50, 0x000043E0, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0x00000FFF, 0xFFFFFFFF, 0x80007FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000379FF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFC, 0x000FFFFF, 0x03FF0000, 0x08FC0000, 0xFFFFFFFF, 0xFFFF003F, 0x0000007F, 0x1FFFFFFF, 0xFFFFFFF0, 0x0007FFFF, 0x03FF8000, 0x00000000, 0xFFFFFFFF, 0x000001FF, 0x03FF0FF7, 0x047FFFFF, 0xFFFFFFFF, 0x3E62FFFF, 0x38000005, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x03FF0007, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x03FF0000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x00FFFFFF, 0x00000000, 0x0000FFC0, 0xFFFFFFF8, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFF1FFF, 0xFFFF03FF, 0xFFFF03FF, 0x000007FF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_blank.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_blank.h���������������������������������������������������0000664�0000000�0000000�00000006140�11671051007�0021545�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 6.0.0. */ #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_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, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -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 }, { 0x00000200, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000077F, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_cntrl.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_cntrl.h���������������������������������������������������0000664�0000000�0000000�00000004540�11671051007�0021602�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 6.0.0. */ #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 }, { 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_digit.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_digit.h���������������������������������������������������0000664�0000000�0000000�00000004140�11671051007�0021554�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 6.0.0. */ #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 }, { 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_graph.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_graph.h���������������������������������������������������0000664�0000000�0000000�00000113141�11671051007�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 6.0.0. */ #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[61 << 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) + 304, 18 + 640 * sizeof (short) / sizeof (int) + 160, 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) + 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) + 400, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 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) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 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) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (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, -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) + 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, -1, 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, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 688, 18 + 640 * sizeof (short) / sizeof (int) + 704, -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) + 720, -1, -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) + 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, 18 + 640 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 768, 18 + 640 * sizeof (short) / sizeof (int) + 784, 18 + 640 * sizeof (short) / sizeof (int) + 800, 18 + 640 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 832, 18 + 640 * sizeof (short) / sizeof (int) + 848, 18 + 640 * sizeof (short) / sizeof (int) + 864, 18 + 640 * sizeof (short) / sizeof (int) + 880, -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) + 896, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 912, 18 + 640 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, -1, -1, -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) + 928, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 960 }, { 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0x7FFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7CFFFFFF, 0xFFFFD7F0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0xFE7FFFFF, 0xFFFFFFFE, 0xFFFE06FF, 0xFFFFFFFF, 0xFFFF00FF, 0x001F07FF, 0xCFFFFFCF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFBFFF, 0xFFFFFFFF, 0xFFFFE7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFFFF, 0x7FFF3FFF, 0x4FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEFFFFFF, 0xFFF99FEE, 0xF3C5FDFF, 0xB080799F, 0x0FFFFFCF, 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x003FFFC0, 0xFFFBBFEE, 0xF3EDFDFF, 0x00013BBF, 0x0002FFCF, 0xFFF99FEE, 0xF3EDFDFF, 0xB0C0399F, 0x00FFFFCF, 0xD63DC7EC, 0xC3FFC718, 0x00813DC7, 0x07FFFFC0, 0xFFFDDFEE, 0xE3EFFDFF, 0x03603DDF, 0xFF00FFCF, 0xFFFDDFEC, 0xF3EFFDFF, 0x40603DDF, 0x0006FFCF, 0xFFFDDFEC, 0xE7FFFFFF, 0x00807DDF, 0xFE3FFFCF, 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x001C0000, 0xFFFFFFFE, 0x87FFFFFF, 0x0FFFFFFF, 0x00000000, 0xFEF02596, 0x3BFFECAE, 0x33FF3F5F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFEFF, 0xFFFE1FFF, 0xFEFFFFFF, 0xDFFFFFFF, 0x07FFDFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF003F, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0xE7FFFFFF, 0x1FFFFFFF, 0x03FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x001FDFFF, 0x007FFFFF, 0x000FFFFF, 0x000DDFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x03FF03FF, 0x03FF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF07FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x0FFF0FFF, 0xFFFFFFF1, 0x001F3FFF, 0xFFFFFFFF, 0xFFFF0FFF, 0xC7FF03FF, 0xFFFFFFFF, 0xCFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x9FFFFFFF, 0x03FF03FF, 0x00003FFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0FFF, 0x1FFFFFFF, 0xFFFFFFFF, 0x03FFC7FF, 0xFFFFFFFF, 0xF00FFFFF, 0xFFFFFFFF, 0xF8FFFFFF, 0xFFFFE3FF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFF0000, 0x0007FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF000007F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xEFCFFFDF, 0x7FDCFFFF, 0xFFFFF880, 0xFFFFFCFF, 0x7FFFFFFF, 0xFFF3FC1F, 0x1FFF7FFF, 0x03FFFFFF, 0xFFFF0000, 0x0001FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFD7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE03FFFF, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x8001803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0x00000000, 0x00000000, 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFE7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF7FFF, 0x07FFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0xFFFFFFFF, 0xFFFF007F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0xFFFFFFFF, 0xF00FFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00037FFF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFFFFF, 0x03FF0FFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFC01F, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x800FFFFF, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC3FFBFFF, 0x00000000, 0xFFFFFFFF, 0x007FFFFF, 0xF3FF3FFF, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF8000007, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x03FF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xE0F8007F, 0x5F7FFFFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80003, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x3FFF0000, 0x03FFFFFF, 0xFFFF007F, 0xFFF7FFFF, 0xFFDF0F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x9FFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x3E007F7F, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFF87, 0xFF8FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFF07FF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF000F, 0x000007FF, 0x00000000, 0xBFFFFFFF, 0xFFFFFFFF, 0x003FFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0xFFBFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8FFFFFFF, 0x83FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEFF06F, 0x870FFFFF, 0x01FF00FF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFE3FFFFF, 0xFF3FFFFF, 0xFF07FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC3FFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000F0007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x7FFE7FFF, 0xFFFEFFFE, 0x00000000, 0xFFFF07FF, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFF03FF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFF0007, 0x07FFFFFF, 0x000301FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFBF0001, 0xFFFFFFFF, 0x1FFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x000007DF, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1EFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x755DFFFE, 0xFFEF2F3F, 0x0000FFE1, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_lower.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_lower.h���������������������������������������������������0000664�0000000�0000000�00000014032�11671051007�0021605�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 6.0.0. */ #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_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, -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, 3 + 256 * sizeof (short) / sizeof (int) + 96, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00200000, 0x80000000, 0xFF7FFFFF, 0xAAAAAAAA, 0x54AAAAAA, 0xAAAAA955, 0xD4AAAAAA, 0x46241129, 0xA251212A, 0xB5555B60, 0xAA2CAAAA, 0xAAAAAAAA, 0x900AAAA8, 0x0ADFAA85, 0x20268B29, 0x00041F09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x388A0000, 0x00000000, 0xFFFEF000, 0xAAE37FFF, 0x0927AAAA, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, 0xAAAAAAAA, 0x000000AA, 0x00000000, 0xFFFFFFFE, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x082AAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x003F00FF, 0x00FF00FF, 0x00AA003F, 0x3FFF00FF, 0x00FF00FF, 0x400B00FF, 0x00030008, 0x00080023, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0xFFFF0000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x00481562, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0000500A, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AAA, 0x00AAAAAA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAA8AAA8, 0xAAAAAAAA, 0x9400AAAA, 0x000210AA, 0x000002AA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_print.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_print.h���������������������������������������������������0000664�0000000�0000000�00000113141�11671051007�0021612�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 6.0.0. */ #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[61 << 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) + 304, 18 + 640 * sizeof (short) / sizeof (int) + 160, 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) + 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) + 400, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 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) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 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) + 480, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (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, -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) + 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, -1, 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, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 688, 18 + 640 * sizeof (short) / sizeof (int) + 704, -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) + 720, -1, -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) + 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, 18 + 640 * sizeof (short) / sizeof (int) + 752, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 768, 18 + 640 * sizeof (short) / sizeof (int) + 784, 18 + 640 * sizeof (short) / sizeof (int) + 800, 18 + 640 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 832, 18 + 640 * sizeof (short) / sizeof (int) + 848, 18 + 640 * sizeof (short) / sizeof (int) + 864, 18 + 640 * sizeof (short) / sizeof (int) + 880, -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) + 896, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 160, 18 + 640 * sizeof (short) / sizeof (int) + 912, 18 + 640 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, -1, -1, -1, -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) + 928, -1, -1, 18 + 640 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 960 }, { 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7CFFFFFF, 0xFFFFD7F0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0xFE7FFFFF, 0xFFFFFFFE, 0xFFFE06FF, 0xFFFFFFFF, 0xFFFF00FF, 0x001F07FF, 0xCFFFFFCF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFBFFF, 0xFFFFFFFF, 0xFFFFE7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFFFF, 0x7FFF3FFF, 0x4FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEFFFFFF, 0xFFF99FEE, 0xF3C5FDFF, 0xB080799F, 0x0FFFFFCF, 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x003FFFC0, 0xFFFBBFEE, 0xF3EDFDFF, 0x00013BBF, 0x0002FFCF, 0xFFF99FEE, 0xF3EDFDFF, 0xB0C0399F, 0x00FFFFCF, 0xD63DC7EC, 0xC3FFC718, 0x00813DC7, 0x07FFFFC0, 0xFFFDDFEE, 0xE3EFFDFF, 0x03603DDF, 0xFF00FFCF, 0xFFFDDFEC, 0xF3EFFDFF, 0x40603DDF, 0x0006FFCF, 0xFFFDDFEC, 0xE7FFFFFF, 0x00807DDF, 0xFE3FFFCF, 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x001C0000, 0xFFFFFFFE, 0x87FFFFFF, 0x0FFFFFFF, 0x00000000, 0xFEF02596, 0x3BFFECAE, 0x33FF3F5F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFEFF, 0xFFFE1FFF, 0xFEFFFFFF, 0xDFFFFFFF, 0x07FFDFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF003F, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0xE7FFFFFF, 0x1FFFFFFF, 0x03FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x001FDFFF, 0x007FFFFF, 0x000FFFFF, 0x000DDFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x03FF03FF, 0x03FF7FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF07FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x0FFF0FFF, 0xFFFFFFF1, 0x001F3FFF, 0xFFFFFFFF, 0xFFFF0FFF, 0xC7FF03FF, 0xFFFFFFFF, 0xCFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x9FFFFFFF, 0x03FF03FF, 0x00003FFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0FFF, 0x1FFFFFFF, 0xFFFFFFFF, 0x03FFC7FF, 0xFFFFFFFF, 0xF00FFFFF, 0xFFFFFFFF, 0xF8FFFFFF, 0xFFFFE3FF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFF0000, 0x0007FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF000007F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xEFCFFFDF, 0x7FDCFFFF, 0xFFFFFFFF, 0xFFFFFCFF, 0xFFFFFFFF, 0xFFF3FC1F, 0x1FFF7FFF, 0x03FFFFFF, 0xFFFF0000, 0x0001FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFD7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE03FFFF, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x8001803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0x00000000, 0x00000000, 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFE7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF7FFF, 0x07FFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0xFFFFFFFF, 0xFFFF007F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0xFFFFFFFF, 0xF00FFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00037FFF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFFFFF, 0x03FF0FFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFC01F, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x800FFFFF, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC3FFBFFF, 0x00000000, 0xFFFFFFFF, 0x007FFFFF, 0xF3FF3FFF, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF8000007, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x03FF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xE0F8007F, 0x5F7FFFFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80003, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x3FFF0000, 0x03FFFFFF, 0xFFFF007F, 0xFFF7FFFF, 0xFFDF0F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x9FFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x3E007F7F, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFF87, 0xFF8FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFF07FF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF000F, 0x000007FF, 0x00000000, 0xBFFFFFFF, 0xFFFFFFFF, 0x003FFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0xFFBFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8FFFFFFF, 0x83FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEFF06F, 0x870FFFFF, 0x01FF00FF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFE3FFFFF, 0xFF3FFFFF, 0xFF07FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFC3FFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000F0007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x7FFE7FFF, 0xFFFEFFFE, 0x00000000, 0xFFFF07FF, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFF03FF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFF0007, 0x07FFFFFF, 0x000301FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFBF0001, 0xFFFFFFFF, 0x1FFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x000007DF, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1EFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x755DFFFE, 0xFFEF2F3F, 0x0000FFE1, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_punct.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_punct.h���������������������������������������������������0000664�0000000�0000000�00000063111�11671051007�0021610�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 6.0.0. */ #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[51 << 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) + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 432, 18 + 512 * sizeof (short) / sizeof (int) + 448, 18 + 512 * sizeof (short) / sizeof (int) + 464, 18 + 512 * 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, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 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, -1, 18 + 512 * sizeof (short) / sizeof (int) + 592, 18 + 512 * sizeof (short) / sizeof (int) + 608, -1, 18 + 512 * sizeof (short) / sizeof (int) + 624, 18 + 512 * sizeof (short) / sizeof (int) + 640, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * 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, 18 + 512 * sizeof (short) / sizeof (int) + 672, 18 + 512 * sizeof (short) / sizeof (int) + 688, -1, 18 + 512 * sizeof (short) / sizeof (int) + 704, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 720, 18 + 512 * sizeof (short) / sizeof (int) + 736, 18 + 512 * sizeof (short) / sizeof (int) + 752, 18 + 512 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 800 }, { 0x00000000, 0xFC00FFFE, 0xF8000001, 0x78000001, 0x00000000, 0xFBDFFBFF, 0x00800000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC003C, 0xFFFFAFE0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFDF, 0x4020FFFF, 0x000000B0, 0x00000000, 0x00000000, 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x00000000, 0xFFFE0600, 0xFFFFFFFF, 0x000000FF, 0x00180000, 0xCFFFFFCF, 0x00000000, 0xFFFFF800, 0x00013C00, 0x00000000, 0x00000000, 0xFFD00000, 0x60003F9F, 0x0002BFFF, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x03CFF800, 0xFBC00000, 0x7FFF3EEF, 0x4E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0xDC000000, 0x00FEFFFF, 0x0001003C, 0x0000000E, 0xD0000000, 0x0080399F, 0x0FFC000C, 0x0000000E, 0xD0000000, 0x00023987, 0x00230000, 0x0000000E, 0xD0000000, 0x00003BBF, 0x0002000C, 0x0000000E, 0xD0000000, 0x00C0399F, 0x00FD000C, 0x00000004, 0xC0000000, 0x00803DC7, 0x07FF0000, 0x0000000E, 0xC0000000, 0x00603DDF, 0xFF00000C, 0x0000000C, 0xD0000000, 0x00603DDF, 0x0000000C, 0x0000000C, 0xC0000000, 0x00803DDF, 0x023F000C, 0x0000000C, 0x00000000, 0xFF5F8400, 0x001C0000, 0x00000000, 0x80008000, 0x0C008040, 0x00000000, 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, 0xFFFFFFFE, 0xFFFFFC00, 0x00000000, 0xFFFE0000, 0xFEFFE0FF, 0xDFFFFFFF, 0x07FFDFFF, 0x00000000, 0x00000000, 0x7FFFF800, 0xC3C0FC00, 0x001E3F9D, 0xFC00BFFC, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x1FFFFFFF, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00006000, 0x18000000, 0x00000000, 0x00000000, 0x00003800, 0x001C0000, 0x007C0000, 0x000C0000, 0x000C0000, 0x00000000, 0xFFF00000, 0x2F7FFFFF, 0x03FF0000, 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x0FFF0FFF, 0x00000031, 0x00000000, 0x00000000, 0xFFFF0000, 0xC4000301, 0xFFFFFFFF, 0xCF800000, 0x00000000, 0x7FE00000, 0x9FFFFFFF, 0x00000000, 0x00003F7F, 0x00000000, 0x00000000, 0x0000001F, 0xFFF00000, 0xFC00001F, 0x1FFFFFFF, 0x00000007, 0x000007FE, 0x00000000, 0xF00FFFC0, 0x00000000, 0xF8FFFFF0, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x000421FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, 0xFFFFF880, 0xFFFFFCFF, 0x7FFFFFFF, 0x7FF1FC1F, 0x00007FFF, 0x03FFFFFF, 0xFFFF0000, 0x0001FFFF, 0xC1D0037B, 0x0C0040AF, 0xFFFFBC1F, 0x00000000, 0xFFFF0200, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFD7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFE0387E0, 0x00000000, 0x00000000, 0x00000000, 0x80010000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00037FFF, 0x00000000, 0x00000000, 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, 0xFFFFFF1E, 0xE0C1FC01, 0x00000000, 0x00000000, 0x1E000000, 0x00000001, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x00000000, 0xFFFFFFFF, 0x0000000F, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x00000000, 0x700F8000, 0x00000000, 0x00000000, 0x00000000, 0x00FF0000, 0x007FFFFF, 0x00000003, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000844, 0x03FF0FF8, 0x00000000, 0x00F00000, 0x00000003, 0xFFF00000, 0x0000C01F, 0x0703FFFF, 0x00000000, 0x0000FFC0, 0x800FFF80, 0x00000000, 0x0000000F, 0xFFF80000, 0xC0003FFF, 0x00000000, 0x00000000, 0x007FFE00, 0xF0003008, 0x0B800000, 0x00000000, 0xC19D0000, 0xC0000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003FF8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x03FFFFFF, 0xFFFF007F, 0xFFF7FFFF, 0x00000F7F, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xFC00FFFE, 0xF8000001, 0xF8000001, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x3E007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF87, 0xFF8FFFFF, 0x00000000, 0xFFE00000, 0x0FFF07FF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0xFF800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8FC00000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000F06E, 0x87000000, 0x01FF00FF, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFE000000, 0xFF000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0xFF000000, 0xFFFC3FFF, 0x0000003F, 0x00000007, 0xFFFF0000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000002, 0x08000000, 0x00200000, 0x00200000, 0x00008000, 0x00008000, 0x00000200, 0x00000200, 0x00000008, 0x00000000, 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x7FFE7FFF, 0xFFFEFFFE, 0x00000000, 0x000007FF, 0x00006000, 0x0000FC00, 0x00000000, 0x07FFF800, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0007, 0x07FFFFFF, 0x000301FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFBF0001, 0xFFFFFFFF, 0x1FFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x000007DF, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1EFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x755DFFFE, 0xFFEF2F3F, 0x0000FFE1, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_space.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_space.h���������������������������������������������������0000664�0000000�0000000�00000006140�11671051007�0021551�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 6.0.0. */ #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_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, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -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 }, { 0x00003E00, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000077F, 0x00000300, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_upper.c���������������������������������������������������0000664�0000000�0000000�00000002062�11671051007�0021603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_upper.h���������������������������������������������������0000664�0000000�0000000�00000014032�11671051007�0021610�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 6.0.0. */ #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_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, -1, -1, -1, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x7F7FFFFF, 0x00000000, 0x55555555, 0xAA555555, 0x555554AA, 0x2B555555, 0xB1DBCED6, 0x11AED2D5, 0x4AAAADB0, 0x55D65555, 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00450000, 0xFFFED740, 0x00000FFB, 0x55008000, 0xE6905555, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, 0x55555555, 0xFFFE0055, 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x55555555, 0x55555555, 0x55555555, 0x40155555, 0x55555555, 0x55555555, 0x55555555, 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, 0xFF00FF00, 0x1F00FF00, 0x0F001F00, 0x1F001F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040C40, 0x00000000, 0x0000FFFF, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0xC025EA9D, 0x55555555, 0x55555555, 0x55555555, 0x00002805, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x00001555, 0x00555555, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55545554, 0x55555555, 0x6A005555, 0x00012855, 0x00000155, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/ctype_xdigit.c��������������������������������������������������0000664�0000000�0000000�00000002066�11671051007�0021744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/ctype_xdigit.h��������������������������������������������������0000664�0000000�0000000�00000004141�11671051007�0021745�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 6.0.0. */ #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 }, { 0x00000000, 0x03FF0000, 0x0000007E, 0x0000007E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/decdigit.c������������������������������������������������������0000664�0000000�0000000�00000003205�11671051007�0021020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Values of decimal digit Unicode characters. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/decdigit.h������������������������������������������������������0000664�0000000�0000000�00000032367�11671051007�0021040�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 6.0.0. */ #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[13 << 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, -1, 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, 640, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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-20111211-stable/lib/unictype/digit.c���������������������������������������������������������0000664�0000000�0000000�00000003135�11671051007�0020346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Values of digit Unicode characters. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/digit.h���������������������������������������������������������0000664�0000000�0000000�00000044135�11671051007�0020360�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 6.0.0. */ #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[25 << 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, -1, 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, 768, 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, 2560, -1, -1, -1, -1, -1, -1, -1, 2688, -1, -1, -1, 2816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2944, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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 }, { 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, 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, 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-20111211-stable/lib/unictype/identsyntaxmap.h������������������������������������������������0000664�0000000�0000000�00000003105�11671051007�0022320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Three-level bitmap lookup. Copyright (C) 2000-2002, 2005-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/joininggroup_byname.c�������������������������������������������0000664�0000000�0000000�00000003446�11671051007�0023320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. 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 <http://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-20111211-stable/lib/unictype/joininggroup_byname.gperf���������������������������������������0000664�0000000�0000000�00000005344�11671051007�0024200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. */ 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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/joininggroup_name.c���������������������������������������������0000664�0000000�0000000�00000003507�11671051007�0022763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. 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 <http://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)(long)&((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-20111211-stable/lib/unictype/joininggroup_name.h���������������������������������������������0000664�0000000�0000000�00000005724�11671051007�0022773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. 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 <http://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") ��������������������������������������������gnulib-20111211-stable/lib/unictype/joininggroup_of.c�����������������������������������������������0000664�0000000�0000000�00000002254�11671051007�0022445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining group of Unicode characters. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "unictype/joininggroup_of.h" int uc_joining_group (ucs4_t uc) { if (uc >= joining_group_header_0 && uc < joining_group_header_0 + sizeof (u_joining_group) / sizeof (u_joining_group[0])) return u_joining_group[uc - joining_group_header_0]; return UC_JOINING_GROUP_NONE; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/joininggroup_of.h�����������������������������������������������0000664�0000000�0000000�00000026730�11671051007�0022457�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 6.0.0. */ #define joining_group_header_0 0x620 static const unsigned char u_joining_group[0x780 - 0x620] = { UC_JOINING_GROUP_YEH, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_YEH, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_TEH_MARBUTA, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_SAD, UC_JOINING_GROUP_SAD, UC_JOINING_GROUP_TAH, UC_JOINING_GROUP_TAH, UC_JOINING_GROUP_AIN, UC_JOINING_GROUP_AIN, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_FARSI_YEH, UC_JOINING_GROUP_FARSI_YEH, UC_JOINING_GROUP_FARSI_YEH, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_QAF, UC_JOINING_GROUP_KAF, UC_JOINING_GROUP_LAM, UC_JOINING_GROUP_MEEM, UC_JOINING_GROUP_NOON, UC_JOINING_GROUP_HEH, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_YEH, UC_JOINING_GROUP_YEH, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_QAF, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_YEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_SAD, UC_JOINING_GROUP_SAD, UC_JOINING_GROUP_TAH, UC_JOINING_GROUP_AIN, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_QAF, UC_JOINING_GROUP_QAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_SWASH_KAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_KAF, UC_JOINING_GROUP_KAF, UC_JOINING_GROUP_KAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_LAM, UC_JOINING_GROUP_LAM, UC_JOINING_GROUP_LAM, UC_JOINING_GROUP_LAM, UC_JOINING_GROUP_NOON, UC_JOINING_GROUP_NOON, UC_JOINING_GROUP_NOON, UC_JOINING_GROUP_NOON, UC_JOINING_GROUP_NYA, UC_JOINING_GROUP_KNOTTED_HEH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_TEH_MARBUTA, UC_JOINING_GROUP_HEH_GOAL, UC_JOINING_GROUP_HEH_GOAL, UC_JOINING_GROUP_TEH_MARBUTA_GOAL, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_FARSI_YEH, UC_JOINING_GROUP_YEH_WITH_TAIL, UC_JOINING_GROUP_FARSI_YEH, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_YEH, UC_JOINING_GROUP_YEH, UC_JOINING_GROUP_YEH_BARREE, UC_JOINING_GROUP_YEH_BARREE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_TEH_MARBUTA, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_SAD, UC_JOINING_GROUP_AIN, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_KNOTTED_HEH, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_ALAPH, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_BETH, UC_JOINING_GROUP_GAMAL, UC_JOINING_GROUP_GAMAL, UC_JOINING_GROUP_DALATH_RISH, UC_JOINING_GROUP_DALATH_RISH, UC_JOINING_GROUP_HE, UC_JOINING_GROUP_SYRIAC_WAW, UC_JOINING_GROUP_ZAIN, UC_JOINING_GROUP_HETH, UC_JOINING_GROUP_TETH, UC_JOINING_GROUP_TETH, UC_JOINING_GROUP_YUDH, UC_JOINING_GROUP_YUDH_HE, UC_JOINING_GROUP_KAPH, UC_JOINING_GROUP_LAMADH, UC_JOINING_GROUP_MIM, UC_JOINING_GROUP_NUN, UC_JOINING_GROUP_SEMKATH, UC_JOINING_GROUP_FINAL_SEMKATH, UC_JOINING_GROUP_E, UC_JOINING_GROUP_PE, UC_JOINING_GROUP_REVERSED_PE, UC_JOINING_GROUP_SADHE, UC_JOINING_GROUP_QAPH, UC_JOINING_GROUP_DALATH_RISH, UC_JOINING_GROUP_SHIN, UC_JOINING_GROUP_TAW, UC_JOINING_GROUP_BETH, UC_JOINING_GROUP_GAMAL, UC_JOINING_GROUP_DALATH_RISH, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_NONE, UC_JOINING_GROUP_ZHAIN, UC_JOINING_GROUP_KHAPH, UC_JOINING_GROUP_FE, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_BEH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_DAL, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_AIN, UC_JOINING_GROUP_AIN, UC_JOINING_GROUP_AIN, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_FEH, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_GAF, UC_JOINING_GROUP_MEEM, UC_JOINING_GROUP_MEEM, UC_JOINING_GROUP_NOON, UC_JOINING_GROUP_NOON, UC_JOINING_GROUP_NOON, UC_JOINING_GROUP_LAM, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_REH, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_ALEF, UC_JOINING_GROUP_FARSI_YEH, UC_JOINING_GROUP_FARSI_YEH, UC_JOINING_GROUP_YEH, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_WAW, UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, UC_JOINING_GROUP_HAH, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_SEEN, UC_JOINING_GROUP_KAF }; ����������������������������������������gnulib-20111211-stable/lib/unictype/joiningtype_byname.c��������������������������������������������0000664�0000000�0000000�00000003433�11671051007�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. 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 <http://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-20111211-stable/lib/unictype/joiningtype_byname.gperf����������������������������������������0000664�0000000�0000000�00000001524�11671051007�0024021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. */ 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-20111211-stable/lib/unictype/joiningtype_longname.c������������������������������������������0000664�0000000�0000000�00000002424�11671051007�0023465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. 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 <http://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-20111211-stable/lib/unictype/joiningtype_name.c����������������������������������������������0000664�0000000�0000000�00000002257�11671051007�0022611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. 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 <http://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-20111211-stable/lib/unictype/joiningtype_of.c������������������������������������������������0000664�0000000�0000000�00000003551�11671051007�0022273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Arabic joining type of Unicode characters. 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 <http://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-20111211-stable/lib/unictype/joiningtype_of.h������������������������������������������������0000664�0000000�0000000�00000014406�11671051007�0022301�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 6.0.0. */ #define joining_type_header_0 16 #define joining_type_header_1 1 #define joining_type_header_2 7 #define joining_type_header_3 511 #define joining_type_header_4 127 static const struct { int level1[1]; short level2[1 << 9]; unsigned char level3[5 * 64]; } u_joining_type = { { 0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 128, 256, 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, 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 }, { 0x00, 0x00, 0xff, 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, 0x20, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/mirror.c��������������������������������������������������������0000664�0000000�0000000�00000003060�11671051007�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Mirrored Unicode characters. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/mirror.h��������������������������������������������������������0000664�0000000�0000000�00000071067�11671051007�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Mirrored Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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, 0, 55345, 0, 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-20111211-stable/lib/unictype/numeric.c�������������������������������������������������������0000664�0000000�0000000�00000003543�11671051007�0020713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Values of numeric Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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) * 7; /* level3 contains 7-bit values, packed into 16-bit words. */ unsigned int lookup3 = ((u_numeric.level3[index3>>4] | (u_numeric.level3[(index3>>4)+1] << 16)) >> (index3 % 16)) & 0x7f; return u_numeric_values[lookup3]; } } } { const uc_fraction_t default_value = { 0, 0 }; return default_value; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/numeric.h�������������������������������������������������������0000664�0000000�0000000�00000114531�11671051007�0020720�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 6.0.0. */ static const uc_fraction_t u_numeric_values[113] = { { 0, 0 }, { 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 }, { -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, 16 }, { 3, 16 } }; #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[54 * 56 + 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, -1, 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, 1408, 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, 4736, 4864, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1664, -1, -1, -1, 4992, 5120, -1, -1, 5248, 5376, -1, 4352, -1, -1, -1, -1, -1, -1, 5504, -1, 5632, -1, 5760, -1, 5888, -1, -1, -1, -1, -1, 6016, -1, -1, -1, 6144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6400, -1, -1, -1, -1, -1, -1, -1, -1, 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, 6656, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6784, -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, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc000, 0x0080, 0x0000, 0x0000, 0x0001, 0xae00, 0x0186, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, 0x1424, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, 0x1424, 0x0000, 0xf000, 0xc34e, 0xe1c1, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, 0x1424, 0x0000, 0x1ab8, 0xa77e, 0x00e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, 0x1424, 0x5c0b, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, 0x1424, 0x0000, 0x0000, 0x0000, 0x0100, 0x80c1, 0x1820, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, 0x1424, 0x5c0b, 0x5c10, 0x030d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0xc101, 0x5080, 0x1c30, 0x0910, 0xd545, 0xc57a, 0xb566, 0x6e5b, 0x0a97, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x80c1, 0x3050, 0x101c, 0xc509, 0xf2a2, 0xcd49, 0x3568, 0x0ddb, 0x04a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2648, 0x0014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0400, 0x0304, 0xc142, 0x4070, 0x1424, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0085, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x5000, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb6e8, 0xfbdb, 0x8f15, 0x65c9, 0x39f3, 0x5ead, 0x05b3, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xa305, 0xc331, 0x82f1, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xa305, 0xc331, 0x82f1, 0xa2c1, 0x0012, 0xcc38, 0xd39c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xa305, 0x78e1, 0x2240, 0x0992, 0x22a5, 0x1018, 0x860a, 0x2203, 0x58a1, 0x1a30, 0x078e, 0x2224, 0x5099, 0x822a, 0xa101, 0x3860, 0x1220, 0x058a, 0xe1a3, 0x4078, 0x9222, 0xa509, 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, 0x8040, 0x70d1, 0x203c, 0xc911, 0x5284, 0x0c11, 0x0508, 0x01c3, 0x5091, 0x022c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x8406, 0xe182, 0x4880, 0x1628, 0x0182, 0x60a1, 0x2038, 0x8a12, 0x6085, 0x2840, 0x0e18, 0x8488, 0x0162, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0x0002, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc100, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8b00, 0x07ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x4060, 0x0028, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0x60a1, 0x2038, 0x8a12, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xcb00, 0x9305, 0x6cd1, 0x1d38, 0x07cf, 0x1214, 0x488d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0x60a1, 0x2038, 0x8a12, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9280, 0x84e9, 0xa94a, 0xac56, 0xeb96, 0x8b05, 0x66c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x8406, 0xe182, 0x4880, 0x0228, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6ae0, 0x9df8, 0x0386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, 0x0000, 0x0000, 0x0160, 0x0000, 0x0300, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0380, 0x00e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0304, 0xc142, 0x4070, 0x1424, 0xca8b, 0x3527, 0xd5a3, 0x376c, 0x4e5c, 0xe3b7, 0x7cf5, 0x603f, 0x3850, 0x1624, 0x478d, 0x5264, 0x64b9, 0x9d36, 0x684f, 0x0a54, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaae0, 0x30c0, 0x15e3, 0x869d, 0x0cc5, 0x0bc7, 0x0d16, 0x198b, 0x178e, 0x3a54, 0x0217, 0x6081, 0x1830, 0x0c0c, 0xc58b, 0xb162, 0xccf8, 0xb366, 0x4e19, 0xe3c7, 0x78f1, 0x60bc, 0x30d1, 0x56ab, 0x61bf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc302, 0x0662, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1b80, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc100, 0x5160, 0x01c1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8200, 0x6101, 0xc151, 0x9505, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x1516, 0x80dc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0xb0a1, 0xe0a8, 0x0082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1000, 0x00cc, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8200, 0xa101, 0xa8b0, 0x82e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8200, 0xa101, 0xa8b0, 0x82e0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xe545, 0x9a93, 0x6ad1, 0x1bb6, 0xa72e, 0xf1db, 0xbe7a, 0xb01f, 0xf60a, 0x017e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x4060, 0x1828, 0x880e, 0x6284, 0xf951, 0x66a4, 0x9ab4, 0x86ed, 0x060b, 0x0304, 0xc142, 0x4070, 0x1424, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4203, 0x70c1, 0x2440, 0x8414, 0xe182, 0x4880, 0x0a28, 0x0386, 0xa122, 0x0c10, 0x0508, 0x01c3, 0x5091, 0x0608, 0x8284, 0x4061, 0x1420, 0x070c, 0x4244, 0x1821, 0x0810, 0x0305, 0x2000, 0x1018, 0x0508, 0x8103, 0x2850, 0x0a14, 0x0407, 0x9102, 0x2848, 0x0a14, 0x80c5, 0x3050, 0x041c, 0x4203, 0x60a1, 0x0030, 0x8200, 0xf781, 0xf67b, 0xd37e, 0x3360, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xe545, 0x9a93, 0x6ad1, 0x1bb6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0404, 0x4203, 0x70c1, 0x2440, 0x0114, 0x80c1, 0x3050, 0x101c, 0x4509, 0x3040, 0x1420, 0x070c, 0x4244, 0x1011, 0x080c, 0xc305, 0x9101, 0x0450, 0x0304, 0xc142, 0x4070, 0x1424, 0x8081, 0x4060, 0x1828, 0x880e, 0x0284, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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-20111211-stable/lib/unictype/pr_alphabetic.c�������������������������������������������������0000664�0000000�0000000�00000002223�11671051007�0022040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_alphabetic.h�������������������������������������������������0000664�0000000�0000000�00000062243�11671051007�0022055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[50 << 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, -1, 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, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 640, 4 + 384 * sizeof (short) / sizeof (int) + 656, -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) + 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, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 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, 4 + 384 * sizeof (short) / sizeof (int) + 704, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 736, -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) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 752, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 768, 4 + 384 * 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, 4 + 384 * sizeof (short) / sizeof (int) + 336, 4 + 384 * sizeof (short) / sizeof (int) + 784, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, 0x00000000, 0x00000000, 0x00000020, 0x3CDF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x027FFFFF, 0xFFFFFFFE, 0x000000FF, 0xBFFF0000, 0xFFFF00B6, 0x000707FF, 0x07FF0000, 0xFFFFFFFF, 0xFEFFFFFF, 0xFFFFC000, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FEFFFFF, 0x9C00E1FE, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFC00, 0x043007FF, 0xFCFFFFFF, 0x00001FFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xEFFFFFFF, 0xFFE1DFFF, 0xFEFE000F, 0xFFF99FEE, 0xE3C5FDFF, 0xB080599F, 0x0003000F, 0xFFF987EE, 0xC36DFDFF, 0x5E021987, 0x003F0000, 0xFFFBBFEE, 0xE3EDFDFF, 0x00011BBF, 0x0000000F, 0xFFF99FEE, 0xE3EDFDFF, 0xB0C0199F, 0x0002000F, 0xD63DC7EC, 0xC3FFC718, 0x00811DC7, 0x00000000, 0xFFFDDFEE, 0xE3EFFDFF, 0x03601DDF, 0x0000000F, 0xFFFDDFEC, 0xE3EFFDFF, 0x40601DDF, 0x0006000F, 0xFFFDDFEC, 0xE7FFFFFF, 0x00805DDF, 0xFC00000F, 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F807F, 0x000C0000, 0xFFFFFFFE, 0x07FFFFFF, 0x0000207F, 0x00000000, 0xFEF02596, 0x3BFFECAE, 0x3000205F, 0x00000000, 0x00000001, 0x00000000, 0xFFFFFEFF, 0xFFFE1FFF, 0xFEFFFF03, 0x1FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF97FFFFF, 0xFFFF0000, 0xFFFFC1E7, 0x3000407F, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0x87FFFFFF, 0x00000000, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, 0x000FDFFF, 0x000FFFFF, 0x000FFFFF, 0x000DDFFF, 0xFFFFFFFF, 0xFFCFFFFF, 0x108001FF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF07FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x01FF0FFF, 0xFFFF0000, 0x001F3FFF, 0xFFFFFFFF, 0xFFFF0FFF, 0x000003FF, 0x00000000, 0x0FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x001FFFFE, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFEFFFFF, 0x00000FEF, 0x00000000, 0xFFFFFFFF, 0x0000C3FF, 0xFFFFFFFF, 0x0003FFBF, 0xFFFFFFFF, 0x003FFFFF, 0xFC00E000, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x0007DE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x80020000, 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, 0x3E2FFC84, 0xF3FFBD50, 0x000043E0, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000379FF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFF7BB, 0x000000FF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x08FC0000, 0xFFFFFC00, 0xFFFF07FF, 0x0007FFFF, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFF7FFFF, 0x00008000, 0x00000000, 0xFFFFFFFF, 0x007FFFFF, 0x00003FFF, 0x047FFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x38000005, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x000007FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xE0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEFF06F, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0xFFFFFFFC, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_ascii_hex_digit.c��������������������������������������������0000664�0000000�0000000�00000002261�11671051007�0023062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_ascii_hex_digit.h��������������������������������������������0000664�0000000�0000000�00000004133�11671051007�0023067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x03FF0000, 0x0000007E, 0x0000007E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_arabic_digit.c������������������������������������������0000664�0000000�0000000�00000002472�11671051007�0023342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_arabic_digit.h������������������������������������������0000664�0000000�0000000�00000007426�11671051007�0023353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[2 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 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 }, { 0x0000000F, 0x00000000, 0x00000000, 0x00001BFF, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_arabic_right_to_left.c����������������������������������0000664�0000000�0000000�00000002562�11671051007�0025073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_arabic_right_to_left.h����������������������������������0000664�0000000�0000000�00000006145�11671051007�0025101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_arabic_right_to_left = { { 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, 2 + 128 * sizeof (short) / sizeof (int) + 32, 2 + 128 * sizeof (short) / sizeof (int) + 48, 2 + 128 * sizeof (short) / sizeof (int) + 64 }, { 0xF8002930, 0xFFFFFFFF, 0x000007FF, 0xFFFEE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFC00C060, 0xFFFD7FFF, 0x0000FFFF, 0xFFFFF800, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003E0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xDFFF0000, 0xFC000000, 0x0000FF80, 0x00080000, 0xFFFFF080, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_block_separator.c���������������������������������������0000664�0000000�0000000�00000002516�11671051007�0024112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_block_separator.h���������������������������������������0000664�0000000�0000000�00000004540�11671051007�0024116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x70002400, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_boundary_neutral.c��������������������������������������0000664�0000000�0000000�00000002526�11671051007�0024316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_boundary_neutral.h��������������������������������������0000664�0000000�0000000�00000022231�11671051007�0024316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[8 << 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, -1, -1, -1, -1, 18 + 512 * 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, 18 + 512 * sizeof (short) / sizeof (int) + 32, 18 + 512 * 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, 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, 18 + 512 * 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, 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) + 112, 18 + 512 * sizeof (short) / sizeof (int) + 112, 18 + 512 * sizeof (short) / sizeof (int) + 112, 18 + 512 * sizeof (short) / sizeof (int) + 112, 18 + 512 * sizeof (short) / sizeof (int) + 112, 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, 18 + 512 * sizeof (short) / sizeof (int) + 80 }, { 0x0FFFC1FF, 0x00000000, 0x00000000, 0x80000000, 0xFFFFFFDF, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003800, 0x00000000, 0x00000000, 0x0000FC1F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC1FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07F80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_common_separator.c��������������������������������������0000664�0000000�0000000�00000002526�11671051007�0024311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_common_separator.h��������������������������������������0000664�0000000�0000000�00000005541�11671051007�0024316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x0400D000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00250000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0400D000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_control.c�����������������������������������������������0000664�0000000�0000000�00000002237�11671051007�0022420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_control.h�����������������������������������������������0000664�0000000�0000000�00000004130�11671051007�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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 }, { 0x0000C000, 0x00007C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_embedding_or_override.c���������������������������������0000664�0000000�0000000�00000002760�11671051007�0025256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_embedding_or_override.h���������������������������������0000664�0000000�0000000�00000004146�11671051007�0025263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00006C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_eur_num_separator.c�������������������������������������0000664�0000000�0000000�00000002535�11671051007�0024473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_eur_num_separator.h�������������������������������������0000664�0000000�0000000�00000006142�11671051007�0024476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00002800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C000000, 0x00000C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_eur_num_terminator.c������������������������������������0000664�0000000�0000000�00000002544�11671051007�0024657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_eur_num_terminator.h������������������������������������0000664�0000000�0000000�00000010544�11671051007�0024663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[10 << 4]; } u_property_bidi_eur_num_terminator = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, 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, 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, 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, 2 + 128 * sizeof (short) / sizeof (int) + 144 }, { 0x00000000, 0x00000038, 0x00000000, 0x00000000, 0x00000000, 0x0003003C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x080C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x001F0000, 0x00000000, 0x00000000, 0x00000000, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000038, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000063 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_european_digit.c����������������������������������������0000664�0000000�0000000�00000002510�11671051007�0023730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_european_digit.h����������������������������������������0000664�0000000�0000000�00000012030�11671051007�0023733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 80, -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 }, { 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x020C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03F10000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FFFFF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_hebrew_right_to_left.c����������������������������������0000664�0000000�0000000�00000002561�11671051007�0025125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_hebrew_right_to_left.h����������������������������������0000664�0000000�0000000�00000013036�11671051007�0025131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x40000000, 0xFFFFFF49, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFC3007FF, 0x043FFFFF, 0xFFFFC110, 0xF1FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0000000, 0xFFFFFDFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0F91, 0x78FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x01FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_left_to_right.c�����������������������������������������0000664�0000000�0000000�00000002500�11671051007�0023562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_left_to_right.h�����������������������������������������0000664�0000000�0000000�00000115547�11671051007�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 6.0.0. */ #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[43 << 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) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 544, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 560, 18 + 512 * sizeof (short) / sizeof (int) + 576, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 592, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 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) + 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) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (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, -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) + 672 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF9FFFFFF, 0x00030003, 0x0000401F, 0x00000000, 0x00000000, 0x00000000, 0xBFCF0000, 0xFFFFFF4F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC07, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FBFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0xEBFFFFFF, 0xFF01DE01, 0xFFFFFFF3, 0xFFFFFFFD, 0xEFFFFFFF, 0xFFFFDFE1, 0xF7F3FFF3, 0xFFFFFFF9, 0xEFFFFFFF, 0xFFFDC679, 0xFFDCFFFF, 0xFFFFFFF9, 0xEFFFFFFF, 0xFFFFDE41, 0xFFFDFFF3, 0xFFFFFFFD, 0x6FFFFFFF, 0xFFBFDFE1, 0xFFFFFFF3, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFFFDFFE, 0xF807FFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFF9FC23E, 0x80FFFFF3, 0xFFFFFFFF, 0xEFFFFFFF, 0xFFFFCFFF, 0xFFFFFFF3, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFDFE1, 0xFFFFFFF3, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFA3FBFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x780DFFFF, 0xFFFF807F, 0xFFFFFFFF, 0xFFFFFFFF, 0xE40DFFFF, 0xFFFFC0FF, 0xFFFFFFFF, 0xFCFFFFFF, 0xC15FFFFF, 0xFFFFFFFF, 0x8001FFFF, 0x01001F20, 0xE0000000, 0xFFFFFFBF, 0xFFFFFFFF, 0xFFFFFFFF, 0x99021FFF, 0x3CFFFFFF, 0xFFE1FFFE, 0xDFFFDF9B, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0xFFFFFFFF, 0xFC00FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE7FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFE3FFFF, 0xFFE3FFFF, 0xFFF3FFFF, 0xFFF3FFFF, 0xFFFFFFFF, 0xC07FFFFF, 0xD7F001BF, 0xFC00FFFF, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFDFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF1FBFE78, 0xFFFFFFCE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0xFE7FFFFF, 0xFFFFFFFF, 0x80BFFFFF, 0x6007E01A, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF0, 0xE82FFFFF, 0xFFFFFFFB, 0xFFF007FF, 0xFFFFFFFC, 0xFFFFFCC3, 0xFFFFFFFF, 0xFFFC5CBF, 0xFFFFFFFF, 0xFF300FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0008FFFF, 0xFFFFDE02, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x0FFFFF80, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x5FFFFFFF, 0x1FFF1FFC, 0x9FFF1FFF, 0x00004000, 0x00000000, 0x00000000, 0x800E0000, 0xFFFF8000, 0xFC000000, 0x0000FFFF, 0xFFFE0000, 0x3E2FFC84, 0xF3FFBD50, 0x0000C3E0, 0xFFFFFFFF, 0x0000FDFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x07FFFFFF, 0x00200000, 0x00000000, 0x00000000, 0xFFF00000, 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002800, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC00E000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x01FC781F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFC0000, 0xFFFFFFFF, 0xFFFFFFFF, 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, 0x000000E0, 0x1F3E03FE, 0xFFFFFFFF, 0xFFFFFFFF, 0xE1FFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFF0, 0x9FFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x8FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF87FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0xFFFFFF80, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FF07FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFCFFFF, 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFEFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF7BB, 0xFCFFF09F, 0xFFFFFFFF, 0xFF0FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFEF, 0xFFFC0000, 0xFFFFFFFF, 0xFFFFC03F, 0xFFFC007F, 0xFFFFFFFF, 0xFFFFFFF8, 0xEC37FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF9981FF, 0xFFFFEFF7, 0xFFFFFFFF, 0xFFFFFFFF, 0x3E62FFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFDEDF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00008080, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xF000F800, 0xFFFFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xFFFFFFFD, 0x00FFFFFF, 0x0003FF80, 0xFFFFFFC0, 0xFFFFFFFC, 0xF987FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0007FC7F, 0xFFFFF018, 0xFFFFC3FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFFFDFF, 0xFFFFFFFF, 0x00003FF7, 0x00000000, 0x00000000, 0x0000F000, 0x00000000, 0x00000000, 0xFFF00000, 0x80018000, 0x00010001, 0xFFFFFFFF, 0xFFFFF800, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x0040FFFE, 0x00000000, 0xE0000000, 0xFFF00000, 0x00000000, 0xFFFFF820, 0xFFFE0000, 0x00000000, 0x80000000, 0x00000002, 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0xE1000000, 0x00000000, 0xC0000010, 0x0000FFFF, 0xFFFFFF00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x8AA20001, 0x0010D0C0, 0xFFFF001E, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_non_spacing_mark.c��������������������������������������0000664�0000000�0000000�00000002527�11671051007�0024252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_non_spacing_mark.h��������������������������������������0000664�0000000�0000000�00000027124�11671051007�0024257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[27 << 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, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 16 + 384 * 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, 16 + 384 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, 0x07FF0000, 0x00000000, 0xFFFFF800, 0x00010000, 0x00000000, 0x00000000, 0x9FC00000, 0x00003D9F, 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, 0xFBC00000, 0x00003EEF, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x14000000, 0x00FE21FE, 0x0000000C, 0x00000002, 0x10000000, 0x0000201E, 0x0000000C, 0x00000006, 0x10000000, 0x00023986, 0x00230000, 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, 0x00000002, 0x90000000, 0x0040201E, 0x0000000C, 0x00000004, 0x00000000, 0x00002001, 0x00000000, 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, 0x00000000, 0x10000000, 0x00003000, 0x0000000C, 0x00000000, 0x00000000, 0x0000201E, 0x0000000C, 0x00000000, 0x00000000, 0x005C0400, 0x00000000, 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, 0x20002064, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, 0x00000000, 0x3F800000, 0x200FFE40, 0x00000000, 0x00003800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x0E040187, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01800000, 0x00000000, 0x7F400000, 0x9FF81FE5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, 0x00000003, 0x0000033C, 0x00000000, 0x0003A340, 0x00000000, 0x00CFF000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF70000, 0x000021FD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00038000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x06000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30078000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000844, 0x00000060, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x0003FFFF, 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, 0x00000007, 0x13C80000, 0x00000000, 0x00000000, 0x00000000, 0x00667E00, 0x00001008, 0x00000000, 0x00000000, 0xC19D0000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002120, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFF000000, 0x0000007F, 0x00000000, 0x00000003, 0x06780000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF8000380, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_other_neutral.c�����������������������������������������0000664�0000000�0000000�00000002501�11671051007�0023605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_other_neutral.h�����������������������������������������0000664�0000000�0000000�00000031430�11671051007�0023615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 3 + 256 * sizeof (short) / sizeof (int) + 528, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 544, 3 + 256 * sizeof (short) / sizeof (int) + 560, 3 + 256 * sizeof (short) / sizeof (int) + 576, 3 + 256 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1 }, { 0x00000000, 0xF80007C6, 0xF8000001, 0x78000001, 0x00000000, 0xF9D0DBC2, 0x00800000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x06000000, 0xFFFCFFFC, 0xFFFFBFE0, 0x00000000, 0x00000000, 0x00000000, 0x40300000, 0x000000B0, 0x00000000, 0x00000000, 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x0000C0C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03C00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05F80000, 0x00000000, 0x00000000, 0x00000000, 0x7F000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3C000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x000007FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000031, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, 0xFFFF0000, 0xFFE000FF, 0x7FFFFFEF, 0x70000000, 0x00007000, 0x00000000, 0x00000000, 0x00000000, 0xC1D0037B, 0x0C0002AF, 0xFFFF3C1F, 0x00000000, 0xFFFF0200, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF3FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0xF8000000, 0xFFDFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFEFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFD7FF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFE0007E0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0003FFFF, 0x00000000, 0x00000000, 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, 0xFFFFFF1E, 0xE0C10001, 0x00000000, 0x00000000, 0x18000000, 0x00000001, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000000F, 0x60000000, 0x00000000, 0xFFFF0000, 0x70000000, 0x00000000, 0xFFFE0000, 0x0000F000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07800000, 0x00000000, 0x00000000, 0xC0000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x00000000, 0xC0080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00000000, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000F00, 0x00000000, 0x00F00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x03FF0000, 0xFFFF0000, 0x7FD2FFFF, 0x00000973, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF80007C6, 0xF8000001, 0xF8000001, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x3E007F1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFF07FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFE000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00200000, 0x00000000, 0x00008000, 0x00000000, 0x00000200, 0x00000000, 0x00000008, 0x00000000, 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x7FFE7FFF, 0xFFFEFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFBF0001, 0xFFFFFFFF, 0x1FFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x000007DF, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFEFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1EFFFFFF, 0xFFFFFFFF, 0x3FFFFFEF, 0xFFFF0000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x755DFFFE, 0xFFEF2F3F, 0x0000FFE1, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_pdf.c���������������������������������������������������0000664�0000000�0000000�00000002374�11671051007�0021513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_pdf.h���������������������������������������������������0000664�0000000�0000000�00000004124�11671051007�0021513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_segment_separator.c�������������������������������������0000664�0000000�0000000�00000002534�11671051007�0024462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_segment_separator.h�������������������������������������0000664�0000000�0000000�00000004142�11671051007�0024464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x80000A00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_bidi_whitespace.c��������������������������������������������0000664�0000000�0000000�00000002454�11671051007�0023075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_bidi_whitespace.h��������������������������������������������0000664�0000000�0000000�00000006133�11671051007�0023100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -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 }, { 0x00001000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00000100, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_byname.c�����������������������������������������������������0000664�0000000�0000000�00000031663�11671051007�0021231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2007, 2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/pr_byname.gperf�������������������������������������������������0000664�0000000�0000000�00000024311�11671051007�0022102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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-20111211-stable/lib/unictype/pr_case_ignorable.c���������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0022704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-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 <http://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-20111211-stable/lib/unictype/pr_case_ignorable.h���������������������������������������������0000664�0000000�0000000�00000031515�11671051007�0022714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[32 << 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, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, 16 + 384 * 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x04004080, 0x40000000, 0x00000001, 0x00000000, 0x0190A100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0430FFFF, 0x000000B0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00100000, 0x07FF000F, 0x00000000, 0xFFFFF801, 0x00010000, 0x00000000, 0x00000000, 0xBFC00000, 0x00003DFF, 0x00028000, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x043FF800, 0xFFC00000, 0x00003FFF, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x14000000, 0x00FE21FE, 0x0002000C, 0x00000002, 0x10000000, 0x0000201E, 0x0000000C, 0x00000006, 0x10000000, 0x00023986, 0x00230000, 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, 0x00000002, 0x90000000, 0x0040201E, 0x0000000C, 0x00000004, 0x00000000, 0x00002001, 0x00000000, 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, 0x00000000, 0x90000000, 0x00003040, 0x0000000C, 0x00000000, 0x00000000, 0x0000201E, 0x0000000C, 0x00000000, 0x00000000, 0x005C0400, 0x00000000, 0x00000000, 0x07F20000, 0x00007FC0, 0x00000000, 0x00000000, 0x1BF20000, 0x00003F40, 0x00000000, 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, 0x20002064, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, 0x00000000, 0x3FB00000, 0x208FFE40, 0x00000000, 0x00003800, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x0E040187, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01800000, 0x00000000, 0x7F400000, 0x9FF81FE5, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, 0x00000003, 0x0000033C, 0x00000000, 0x0003A340, 0x00000000, 0x00CFF000, 0x00000000, 0x3F000000, 0x00000000, 0x00000000, 0xFFF70000, 0x000021FD, 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x01000003, 0xF8000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xF000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, 0x0300F800, 0x00007C90, 0x00000000, 0x8002FC1F, 0x1FFF0000, 0x00000000, 0xFFFF0000, 0x0001FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00038000, 0x00000000, 0x00000000, 0x00000000, 0x80008000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x083EFC00, 0x00000000, 0x00000000, 0x7E000000, 0x00000000, 0x00000000, 0x70000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3F000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0xB0078000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00010000, 0x00000700, 0x00000000, 0x00000000, 0x00000000, 0x00000844, 0x00000060, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x0003FFFF, 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, 0x00000007, 0x13C80000, 0x00008000, 0x00000000, 0x00000000, 0x00667E00, 0x00001008, 0x00010000, 0x00000000, 0xC19D0000, 0x20000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002120, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x00000003, 0x00000000, 0x0008FFFF, 0x0000007F, 0x00240000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x04004080, 0x40000000, 0x00000001, 0x00010000, 0xC0000000, 0x00000000, 0x00000000, 0x0E000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFF000000, 0x0000007F, 0x00000000, 0x00000003, 0x26780000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF80380, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_cased.c������������������������������������������������������0000664�0000000�0000000�00000002165�11671051007�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-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 <http://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-20111211-stable/lib/unictype/pr_cased.h������������������������������������������������������0000664�0000000�0000000�00000016013�11671051007�0021032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFEFFFFF, 0x01FFFFFF, 0x00000003, 0x0000001F, 0x00000000, 0x00000000, 0x00000020, 0x3CCF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x007FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F0000, 0x00000000, 0x00000000, 0x00000000, 0x3E2FFC84, 0xF21FBD50, 0x000043E0, 0xFFFFFFFF, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00003FFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000378FF, 0x000003FF, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_changes_when_casefolded.c������������������������������������0000664�0000000�0000000�00000002341�11671051007�0024547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-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 <http://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-20111211-stable/lib/unictype/pr_changes_when_casefolded.h������������������������������������0000664�0000000�0000000�00000014435�11671051007�0024563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[12 << 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, -1, -1, -1, -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, -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, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00200000, 0xFF7FFFFF, 0x00000000, 0x55555555, 0xAA555555, 0x555556AA, 0xAB555555, 0xB1DBCED6, 0x11AED2D5, 0x4AAAADB0, 0x55D65555, 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x00450000, 0xFFFED740, 0x00000FFB, 0x55638004, 0xE6B35555, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, 0x55555555, 0xFFFE0055, 0x007FFFFF, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x55555555, 0x55555555, 0x55555555, 0x4C155555, 0x55555555, 0x55555555, 0x55555555, 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, 0xFFFFFFFF, 0x1F9CFFFF, 0x0F001F9C, 0x1F9C1F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040C40, 0x00000000, 0x0000FFFF, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0xC025EA9D, 0x55555555, 0x55555555, 0x55555555, 0x00002805, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x00001555, 0x00555555, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55545554, 0x55555555, 0x6A005555, 0x00012855, 0x00000155, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_changes_when_casemapped.c������������������������������������0000664�0000000�0000000�00000002341�11671051007�0024560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-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 <http://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-20111211-stable/lib/unictype/pr_changes_when_casemapped.h������������������������������������0000664�0000000�0000000�00000015035�11671051007�0024571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x00200000, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFEFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF7FFDFFF, 0xB3FFF3FF, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFC0FFFFD, 0x0ADFFFFF, 0x20268B29, 0x00041F09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x38CF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFE3FFFF, 0xEFB7FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x007FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x4FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040C40, 0x00004000, 0xFFFFFFFF, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xC06DFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000780F, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00003FFF, 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFCFFFC, 0xFFFFFFFF, 0xFE00FFFF, 0x000338FF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_changes_when_lowercased.c������������������������������������0000664�0000000�0000000�00000002341�11671051007�0024606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-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 <http://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-20111211-stable/lib/unictype/pr_changes_when_lowercased.h������������������������������������0000664�0000000�0000000�00000014035�11671051007�0024616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x7F7FFFFF, 0x00000000, 0x55555555, 0xAA555555, 0x555554AA, 0x2B555555, 0xB1DBCED6, 0x11AED2D5, 0x4AAAADB0, 0x55D65555, 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00450000, 0xFFFED740, 0x00000FFB, 0x55008000, 0xE6905555, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, 0x55555555, 0xFFFE0055, 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x55555555, 0x55555555, 0x55555555, 0x40155555, 0x55555555, 0x55555555, 0x55555555, 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, 0xFF00FF00, 0x1F00FF00, 0x0F001F00, 0x1F001F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040C40, 0x00000000, 0x0000FFFF, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0xC025EA9D, 0x55555555, 0x55555555, 0x55555555, 0x00002805, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x00001555, 0x00555555, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55545554, 0x55555555, 0x6A005555, 0x00012855, 0x00000155, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_changes_when_titlecased.c������������������������������������0000664�0000000�0000000�00000002341�11671051007�0024577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-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 <http://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-20111211-stable/lib/unictype/pr_changes_when_titlecased.h������������������������������������0000664�0000000�0000000�00000014435�11671051007�0024613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[12 << 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, -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, 3 + 256 * sizeof (short) / sizeof (int) + 96, -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, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00200000, 0x80000000, 0xFF7FFFFF, 0xAAAAAAAA, 0x54AAAAAA, 0xAAAAAB55, 0xD4AAAAAA, 0x46241129, 0xA251212A, 0xB55556D0, 0xAA2BAAAA, 0xAAAAAAAA, 0x900AAAA8, 0x0ADFAA85, 0x20268B29, 0x00041F09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x388A0000, 0x00010000, 0xFFFFF000, 0xAAE37FFF, 0x0927AAAA, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, 0xAAAAAAAA, 0x000000AA, 0x00000000, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0FEAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x003F00FF, 0x00FF00FF, 0x00FF003F, 0x3FFF00FF, 0x00FF00FF, 0x40DF00FF, 0x00CF00DC, 0x00DC00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0xFFFF0000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x00481562, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0000500A, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AAA, 0x00AAAAAA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAA8AAA8, 0xAAAAAAAA, 0x9400AAAA, 0x000210AA, 0x000002AA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_changes_when_uppercased.c������������������������������������0000664�0000000�0000000�00000002341�11671051007�0024611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-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 <http://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-20111211-stable/lib/unictype/pr_changes_when_uppercased.h������������������������������������0000664�0000000�0000000�00000014435�11671051007�0024625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[12 << 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, -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, 3 + 256 * sizeof (short) / sizeof (int) + 96, -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, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00200000, 0x80000000, 0xFF7FFFFF, 0xAAAAAAAA, 0x54AAAAAA, 0xAAAAAB55, 0xD4AAAAAA, 0x46241129, 0xA251212A, 0xB5555B60, 0xAA2DAAAA, 0xAAAAAAAA, 0x900AAAA8, 0x0ADFAA85, 0x20268B29, 0x00041F09, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x388A0000, 0x00010000, 0xFFFFF000, 0xAAE37FFF, 0x0927AAAA, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, 0xAAAAAAAA, 0x000000AA, 0x00000000, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x22000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0FEAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x003F00FF, 0x00FF00FF, 0x00FF003F, 0x3FFF00FF, 0xFFFFFFFF, 0x50DFFFFF, 0x00CF10DC, 0x10DC00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0xFFFF0000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x00481562, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0000500A, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AAA, 0x00AAAAAA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAA8AAA8, 0xAAAAAAAA, 0x9400AAAA, 0x000210AA, 0x000002AA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_combining.c��������������������������������������������������0000664�0000000�0000000�00000002215�11671051007�0021712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_combining.h��������������������������������������������������0000664�0000000�0000000�00000027110�11671051007�0021720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[27 << 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, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 16 + 384 * 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, 16 + 384 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, 0x07FF0000, 0x00000000, 0xFFFFF800, 0x00010000, 0x00000000, 0x00000000, 0x9FC00000, 0x00003D9F, 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, 0xFBC00000, 0x00003EEF, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0xDC000000, 0x00FEFFFF, 0x0000000C, 0x0000000E, 0xD0000000, 0x0080399F, 0x0000000C, 0x0000000E, 0xD0000000, 0x00023987, 0x00230000, 0x0000000E, 0xD0000000, 0x00003BBF, 0x0000000C, 0x0000000E, 0xD0000000, 0x00C0399F, 0x0000000C, 0x00000004, 0xC0000000, 0x00803DC7, 0x00000000, 0x0000000E, 0xC0000000, 0x00603DDF, 0x0000000C, 0x0000000C, 0xD0000000, 0x00603DDF, 0x0000000C, 0x0000000C, 0xC0000000, 0x00803DDF, 0x0000000C, 0x0000000C, 0x00000000, 0xFF5F8400, 0x000C0000, 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, 0x03000000, 0xC2A00000, 0x00000000, 0xFFFE0000, 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0x00000000, 0x7FFFF800, 0xC3C00000, 0x001E3F9D, 0x3C00BFFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, 0x00000000, 0xFFC00000, 0x200FFFFF, 0x00000000, 0x00003800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x0FFF0FFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x00000301, 0x00000000, 0x0F800000, 0x00000000, 0x7FE00000, 0x9FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001F, 0xFFF00000, 0x0000001F, 0x000FF800, 0x00000007, 0x000007FE, 0x00000000, 0x000FFFC0, 0x00000000, 0x00FFFFF0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF70000, 0x000421FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00038000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x06000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30078000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000844, 0x000000F8, 0x00000000, 0x00000000, 0x00000003, 0xFFF00000, 0x0000001F, 0x0003FFFF, 0x00000000, 0x00003FC0, 0x000FFF80, 0x00000000, 0x0000000F, 0xFFF80000, 0x00000001, 0x00000000, 0x00000000, 0x007FFE00, 0x00003008, 0x08000000, 0x00000000, 0xC19D0000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000037F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0xFF000000, 0x0000007F, 0x00000000, 0x00000007, 0x07FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_composite.c��������������������������������������������������0000664�0000000�0000000�00000002215�11671051007�0021747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_composite.h��������������������������������������������������0000664�0000000�0000000�00000025317�11671051007�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[26 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 384, 3 + 256 * sizeof (short) / sizeof (int) + 400, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x70000000, 0x3E7EFFBF, 0xBE7EFFBF, 0xFFFCFFFF, 0xFEFDFF3F, 0xFFF3F3F9, 0x7FFFFF3F, 0x00000000, 0x00018003, 0xDFFFFFF0, 0xFF3FFFCF, 0xCFFFFFFF, 0x000FFFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x0001D760, 0x0001FC00, 0x00187C00, 0x00000000, 0x0200708B, 0x02000000, 0x708B0000, 0x00C00000, 0x00000000, 0x00000000, 0xFCCF0006, 0x033FFCFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000007C, 0x00000000, 0x01E00000, 0x00000000, 0x00000000, 0x00080005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00120200, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0xB0001800, 0x00000000, 0x00000000, 0x00480000, 0x4E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30001900, 0x00000000, 0x00100000, 0x00000000, 0x00001C00, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000D81, 0x00000000, 0x00000000, 0x00000000, 0x00001C00, 0x00000000, 0x00000000, 0x00000000, 0x74000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x30000000, 0x00000000, 0x00000000, 0x00000000, 0x10842008, 0x03E80200, 0x20080002, 0x02001084, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00045540, 0x28000000, 0x0000000B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x1555FFFF, 0xFFFFFFFF, 0x17DFFFFF, 0xE7C7F5DE, 0x15DC37F7, 0x00000000, 0x10D80060, 0x00800380, 0x00000000, 0x00000000, 0x00000100, 0x00000000, 0x00000000, 0x0040026B, 0x08000007, 0xFFFF0000, 0x0DEE0DEE, 0x0C000200, 0x00004000, 0x0000E000, 0x00000000, 0x00001210, 0x0001B050, 0x00000292, 0x0333E005, 0x00000333, 0x0000F000, 0x00000000, 0x00003C0F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFE00, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0x00700000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555000, 0x36DB02A5, 0xC0100000, 0x55555000, 0x36DB02A5, 0xC7900000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0x7FFFC000, 0x00000000, 0xFFFE0000, 0x0000FFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0F8007F, 0x5F7FFC00, 0x0000FFDB, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, 0xAA820000, 0x00000000, 0x00000000, 0x00000000, 0x1FE00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x14000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x0000001F, 0x00000000, 0xF8000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF07FF, 0x000067FF, 0x0000FC00, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_currency_symbol.c��������������������������������������������0000664�0000000�0000000�00000002462�11671051007�0023170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_currency_symbol.h��������������������������������������������0000664�0000000�0000000�00000010534�11671051007�0023174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[10 << 4]; } u_property_currency_symbol = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, 2 + 128 * sizeof (short) / sizeof (int) + 32, 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, 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, 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, 2 + 128 * sizeof (short) / sizeof (int) + 128, 2 + 128 * sizeof (short) / sizeof (int) + 144 }, { 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x0000003C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x080C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000063 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_dash.c�������������������������������������������������������0000664�0000000�0000000�00000002157�11671051007�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_dash.h�������������������������������������������������������0000664�0000000�0000000�00000010120�11671051007�0020663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x40000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003F0000, 0x00000000, 0x00080000, 0x08000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00060000, 0x01000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_decimal_digit.c����������������������������������������������0000664�0000000�0000000�00000002444�11671051007�0022527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_decimal_digit.h����������������������������������������������0000664�0000000�0000000�00000017423�11671051007�0022537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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) + 64, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, 3 + 256 * sizeof (short) / sizeof (int) + 224, -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, 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 }, { 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_default_ignorable_code_point.c�������������������������������0000664�0000000�0000000�00000002377�11671051007�0025627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_default_ignorable_code_point.h�������������������������������0000664�0000000�0000000�00000017253�11671051007�0025633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 48, 16 + 384 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 80, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 144, 16 + 384 * sizeof (short) / sizeof (int) + 144, 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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00300000, 0x00000000, 0x00000000, 0x00003800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000F800, 0x00007C00, 0x00000000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x01FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07F80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_deprecated.c�������������������������������������������������0000664�0000000�0000000�00000002223�11671051007�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_deprecated.h�������������������������������������������������0000664�0000000�0000000�00000012240�11671051007�0022051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_diacritic.c��������������������������������������������������0000664�0000000�0000000�00000002215�11671051007�0021700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_diacritic.h��������������������������������������������������0000664�0000000�0000000�00000022417�11671051007�0021713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x40000000, 0x00000001, 0x00000000, 0x01908100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE0FF7FFF, 0x04300007, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0xFFFE0000, 0xBFFFFFFB, 0x00000016, 0x00000000, 0x00000000, 0x00000000, 0x0187F800, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00001C61, 0x00000000, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x003FF800, 0x03000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x001E2000, 0x00020000, 0x00000000, 0x10000000, 0x00002000, 0x00000000, 0x00000000, 0x10000000, 0x00002000, 0x00000000, 0x00000000, 0x10000000, 0x00002000, 0x00000000, 0x00000000, 0x10000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x10000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00005F80, 0x00000000, 0x00000000, 0x00000000, 0x00001F00, 0x00000000, 0x03000000, 0xC2A00000, 0x00000000, 0x00000000, 0x000000DC, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x06800000, 0x00000000, 0x00000000, 0x0C00BF80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x200FFE00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x9FE00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00000010, 0x000FF800, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00C00000, 0x00000000, 0x3F000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x000021FF, 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x000007FF, 0x00000000, 0x00000000, 0x0000FFF0, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00038000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x1E000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xB0008000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0xFF800000, 0x00000003, 0x00000000, 0x00000000, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x0003FFFF, 0x00000000, 0x00007800, 0x00080000, 0x00000000, 0x00000000, 0x00080000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x80000000, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000001, 0x00010000, 0xC0000000, 0x00000000, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x06000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF807E380, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_extender.c���������������������������������������������������0000664�0000000�0000000�00000002207�11671051007�0021564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_extender.h���������������������������������������������������0000664�0000000�0000000�00000012125�11671051007�0021571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[13 << 4]; } u_property_extender = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 64, 2 + 128 * sizeof (short) / sizeof (int) + 80, 2 + 128 * sizeof (short) / sizeof (int) + 96, -1, -1, -1, -1, -1, -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, 2 + 128 * sizeof (short) / sizeof (int) + 128, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 144, 2 + 128 * sizeof (short) / sizeof (int) + 160, 2 + 128 * 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, 2 + 128 * sizeof (short) / sizeof (int) + 192 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00400000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x003E0000, 0x00000000, 0x00000000, 0x60000000, 0x00000000, 0x00000000, 0x70000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_format_control.c���������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0022777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_format_control.h���������������������������������������������0000664�0000000�0000000�00000013514�11671051007�0023006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[4 << 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, -1, -1, -1, -1, 16 + 384 * 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, 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, 16 + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x0000FC1F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07F80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_grapheme_base.c����������������������������������������������0000664�0000000�0000000�00000002245�11671051007�0022532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_grapheme_base.h����������������������������������������������0000664�0000000�0000000�00000067406�11671051007�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[60 << 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) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 160, 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) + 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) + 400, 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) + 416, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 160, 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) + 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) + 496, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 704, 4 + 384 * sizeof (short) / sizeof (int) + 720, -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) + 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, 4 + 384 * sizeof (short) / sizeof (int) + 160, 4 + 384 * 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, 4 + 384 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 784, 4 + 384 * sizeof (short) / sizeof (int) + 800, 4 + 384 * sizeof (short) / sizeof (int) + 816, 4 + 384 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 848, 4 + 384 * sizeof (short) / sizeof (int) + 864, 4 + 384 * sizeof (short) / sizeof (int) + 880, 4 + 384 * sizeof (short) / sizeof (int) + 896, -1, -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) + 912, 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) + 928, 4 + 384 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, -1, -1, -1, -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) + 160, 4 + 384 * sizeof (short) / sizeof (int) + 944, -1, -1 }, { 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x00000000, 0xFFFFDFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x7CFF0000, 0xFFFFD7F0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC07, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0xFE7FFFFF, 0xFFFFFFFE, 0x000006FF, 0x40000000, 0xFFFF0049, 0x001F07FF, 0xC800FFC0, 0xFFFFFFFF, 0x000007FF, 0xFFFEFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x403FFFFF, 0xFFFFC260, 0xFFFD3FFF, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0002003F, 0xFFFFFFFF, 0x07F007FF, 0x043FFFFF, 0x7FFF0110, 0x41FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0xEBFFFFFF, 0xFF01DE01, 0xFEFFFFF3, 0xFFF99FEC, 0xA3C5FDFF, 0xB0005981, 0x0FFFFFC3, 0xFFF987E8, 0xC36DFDFF, 0x5E000001, 0x001CFFC0, 0xFFFBBFE8, 0xE3EDFDFF, 0x00011A01, 0x0002FFC3, 0xFFF99FEC, 0x23EDFDFF, 0xB0001981, 0x00FFFFC3, 0xD63DC7E8, 0x83FFC718, 0x00011DC6, 0x07FFFFC0, 0xFFFDDFEE, 0x23EFFDFF, 0x0300001E, 0xFF00FFC3, 0xFFFDDFEC, 0x63EFFDFF, 0x40000D9B, 0x0006FFC3, 0xFFFDDFEC, 0xA7FFFFFF, 0x00005DC1, 0xFE3FFFC3, 0xFC7FFFEC, 0x2FFBFFFF, 0x7F03007F, 0x001C0000, 0xFFFFFFFE, 0x800DFFFF, 0x0FFF807F, 0x00000000, 0xFEF02596, 0x200DECAE, 0x33FF005F, 0x00000000, 0xFCFFFFFF, 0xFD5FFFFF, 0xFFFFFEFF, 0x80001FFF, 0x00001F20, 0xC0000000, 0x07FFDFBF, 0x00000000, 0xFFFFFFFF, 0x99021FFF, 0x3CFFFFFF, 0xFFE1FFFE, 0xDFFFDF9B, 0xFFFFFFFF, 0xFFFF003F, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x1FFFFFFF, 0x03FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x0003DFFF, 0x0063FFFF, 0x0003FFFF, 0x0001DFFF, 0xFFFFFFFF, 0xC04FFFFF, 0x1FF001BF, 0x03FF03FF, 0x03FF47FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x01FB0E78, 0xFFFFFFF1, 0x001F3FFF, 0xFFFFFFFF, 0xFFFF0FFF, 0xC7FF03FF, 0xFFFFFFFF, 0xCE7FFFFF, 0xFFFFFFFF, 0x00BFFFFF, 0x0007E01A, 0x03FF03FF, 0x00003FFF, 0x00000000, 0x00000000, 0xFFFFFFF0, 0xE82FFFFF, 0xFFFF0FFB, 0x1FF007FF, 0xFFFFFFFC, 0x03FFC4C3, 0xFFFFFFFF, 0xF00C5CBF, 0xFFFFFFFF, 0xF8300FFF, 0xFFFFE3FF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00080000, 0x0007DE02, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xEFCFFFDF, 0x7FDCFFFF, 0xFFFF07FF, 0xFFFF80FF, 0xFFFFFFFF, 0xFFF30000, 0x1FFF7FFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFD7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF1FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE007FFF, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0001803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0xFFFFFFFF, 0x0003FFFF, 0x00000000, 0x00000000, 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF87FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF7FFF, 0x07FFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0xFFFFFFFF, 0xFFFF007F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0xFFFFFFFF, 0xC0087FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FCFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00037FFF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFF7BB, 0x03FF0F9F, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFC00F, 0x0FFC0000, 0xFFFFFFFF, 0xFFFFC03F, 0x800C007F, 0x1FFFFFFF, 0xFFFFFFF8, 0xEC37FFFF, 0xC3FFBFFF, 0x00000000, 0xFFFFFFFF, 0x001981FF, 0xF3FF2FF7, 0x0FFFFFFF, 0xFFFFFFFF, 0x3E62FFFF, 0xF8000005, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x03FF1EDF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xA0F8007F, 0x5F7FFFFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF80003, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x3FFF0000, 0x03FF0000, 0xFFFF0000, 0xFFF7FFFF, 0xFFDF0F7F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x30007F7F, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFF87, 0xFF8FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFF07FF, 0x00000000, 0xFFFF0000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF000F, 0x000007FF, 0x00000000, 0xBFFFFFFF, 0xFFFFFFFF, 0x003FFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0xFFBFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8FFFFFFF, 0x83FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEF0001, 0x000FFFFF, 0x01FF00FF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFE3FFFFF, 0xFF3FFFFF, 0xFF07FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFD, 0x00FFFFFF, 0xFFFC3F80, 0x0000FFFF, 0xFFFFFFFC, 0xD987FFFF, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000F0007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0x00003C5F, 0xFFFFF018, 0xFFFFC3FF, 0x3FFFFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x7FFE7FFF, 0xFFFEFFFE, 0x00000000, 0xFFFF07FF, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFF03FF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFF0007, 0x07FFFFFF, 0x000301FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFBF0001, 0xFFFFFFFF, 0x1FFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x000007DF, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1EFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x755DFFFE, 0xFFEF2F3F, 0x0000FFE1, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_grapheme_extend.c��������������������������������������������0000664�0000000�0000000�00000002261�11671051007�0023105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_grapheme_extend.h��������������������������������������������0000664�0000000�0000000�00000027116�11671051007�0023120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[27 << 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, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 352, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 16 + 384 * 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, 16 + 384 * sizeof (short) / sizeof (int) + 416, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, 0x07FF0000, 0x00000000, 0xFFFFF800, 0x00010000, 0x00000000, 0x00000000, 0x9FC00000, 0x00003D9F, 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, 0xFBC00000, 0x00003EEF, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x14000000, 0x00FE21FE, 0x0000000C, 0x00000002, 0x50000000, 0x0080201E, 0x0000000C, 0x00000006, 0x10000000, 0x00023986, 0x00230000, 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, 0x00000002, 0xD0000000, 0x00C0201E, 0x0000000C, 0x00000004, 0x40000000, 0x00802001, 0x00000000, 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, 0x00000000, 0x90000000, 0x00603044, 0x0000000C, 0x00000000, 0x40000000, 0x0080201E, 0x0000000C, 0x00000000, 0x00000000, 0x805C8400, 0x00000000, 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, 0x20002064, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, 0x00000000, 0x3F800000, 0x200FFE40, 0x00000000, 0x00003800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x0E040187, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01800000, 0x00000000, 0x7F400000, 0x9FF81FE5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, 0x00000003, 0x0000033C, 0x00000000, 0x0003A340, 0x00000000, 0x00CFF000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF70000, 0x000021FD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF000007F, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00038000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x06000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30078000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000844, 0x00000060, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x0003FFFF, 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, 0x00000007, 0x13C80000, 0x00000000, 0x00000000, 0x00000000, 0x00667E00, 0x00001008, 0x00000000, 0x00000000, 0xC19D0000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002120, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFF000000, 0x0000007F, 0x00000000, 0x00000003, 0x06780000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF807C3A0, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_grapheme_link.c����������������������������������������������0000664�0000000�0000000�00000002245�11671051007�0022555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_grapheme_link.h����������������������������������������������0000664�0000000�0000000�00000014423�11671051007�0022563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[12 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x06000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x000C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_hex_digit.c��������������������������������������������������0000664�0000000�0000000�00000002215�11671051007�0021711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_hex_digit.h��������������������������������������������������0000664�0000000�0000000�00000004525�11671051007�0021724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x03FF0000, 0x0000007E, 0x0000007E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x0000007E, 0x0000007E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_hyphen.c�����������������������������������������������������0000664�0000000�0000000�00000002173�11671051007�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_hyphen.h�����������������������������������������������������0000664�0000000�0000000�00000007122�11671051007�0021247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_id_continue.c������������������������������������������������0000664�0000000�0000000�00000002231�11671051007�0022243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_id_continue.h������������������������������������������������0000664�0000000�0000000�00000065722�11671051007�0022266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[51 << 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, -1, 16 + 512 * sizeof (short) / sizeof (int) + 544, 16 + 512 * sizeof (short) / sizeof (int) + 560, 16 + 512 * sizeof (short) / sizeof (int) + 576, -1, 16 + 512 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 608, 16 + 512 * sizeof (short) / sizeof (int) + 624, -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) + 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, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * 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, 16 + 512 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 688, 16 + 512 * sizeof (short) / sizeof (int) + 704, 16 + 512 * sizeof (short) / sizeof (int) + 720, 16 + 512 * sizeof (short) / sizeof (int) + 736, -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) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 752, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 768, 16 + 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, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 784, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x03FF0000, 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x04A00400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3CDFFFFF, 0xFFFFD7C0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFCFB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x027FFFFF, 0xFFFFFFFE, 0xFFFE00FF, 0xBFFFFFFF, 0xFFFF00B6, 0x000707FF, 0x07FF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC3FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x9FEFFFFF, 0x9FFFFDFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFE7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFFFF, 0x043FFFFF, 0xFFFFFFFF, 0x00003FFF, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEFEFFCF, 0xFFF99FEE, 0xF3C5FDFF, 0xB080799F, 0x0003FFCF, 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x003FFFC0, 0xFFFBBFEE, 0xF3EDFDFF, 0x00013BBF, 0x0000FFCF, 0xFFF99FEE, 0xF3EDFDFF, 0xB0C0399F, 0x0002FFCF, 0xD63DC7EC, 0xC3FFC718, 0x00813DC7, 0x0000FFC0, 0xFFFDDFEE, 0xE3EFFDFF, 0x03603DDF, 0x0000FFCF, 0xFFFDDFEC, 0xF3EFFDFF, 0x40603DDF, 0x0006FFCF, 0xFFFDDFEC, 0xE7FFFFFF, 0x00807DDF, 0xFC00FFCF, 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x000C0000, 0xFFFFFFFE, 0x07FFFFFF, 0x03FF7FFF, 0x00000000, 0xFEF02596, 0x3BFFECAE, 0x33FF3F5F, 0x00000000, 0x03000001, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE1FFF, 0xFEFFFFDF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0xE7FFFFFF, 0x0003FE00, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, 0x001FDFFF, 0x001FFFFF, 0x000FFFFF, 0x000DDFFF, 0xFFFFFFFF, 0xFFCFFFFF, 0x308FFFFF, 0x000003FF, 0x03FF3800, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF07FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x0FFF0FFF, 0xFFFFFFC0, 0x001F3FFF, 0xFFFFFFFF, 0xFFFF0FFF, 0x07FF03FF, 0x00000000, 0x0FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x9FFFFFFF, 0x03FF03FF, 0x00000080, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF0FFF, 0x000FF800, 0xFFFFFFFF, 0x03FFC7FF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFE3FF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0xFFF70000, 0x0007FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF000007F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x80000000, 0x00100001, 0x80020000, 0x1FFF0000, 0x00000000, 0x1FFF0000, 0x0001FFE2, 0x3F2FFC84, 0xF3FFFD50, 0x000043E0, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003F81F, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x8000803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, 0x000000E0, 0x1F3EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, 0xFE7FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0x00000FFF, 0xFFFFFFFF, 0xB000FFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000379FF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFFFFF, 0x000000FF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF001F, 0x08FFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0x000FFFFF, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF8001, 0x00000000, 0xFFFFFFFF, 0x007FFFFF, 0x03FF3FFF, 0x0C7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x38000007, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x03FF37FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xE0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, 0x0000FFFF, 0x0018007F, 0x0000E000, 0xFFDF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x03FF0000, 0x87FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEFF06F, 0x870FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000007F, 0x0000FFC0, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; ����������������������������������������������gnulib-20111211-stable/lib/unictype/pr_id_start.c���������������������������������������������������0000664�0000000�0000000�00000002207�11671051007�0021557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_id_start.h���������������������������������������������������0000664�0000000�0000000�00000061241�11671051007�0021567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[48 << 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, -1, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, -1, 4 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, -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) + 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, 4 + 384 * sizeof (short) / sizeof (int) + 304, 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, 4 + 384 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, -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) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 736, 4 + 384 * 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, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 752, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, 0x00000000, 0x00000000, 0x00000000, 0x3CDF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x027FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0xFFFFFFFF, 0x000007FF, 0xFFFEC000, 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C060, 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x043007FF, 0x043FFFFF, 0x00000110, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xFEFE0003, 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x00030003, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x00000003, 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x00000003, 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00060003, 0xFFFDDFE0, 0x27FFFFFF, 0x00004000, 0xFC000003, 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, 0xFFFFFFFE, 0x000DFFFF, 0x0000007F, 0x00000000, 0xFEF02596, 0x200DECAE, 0x3000005F, 0x00000000, 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, 0x00001F00, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, 0x00004003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, 0xFFFFFFFF, 0x00000FFF, 0x000000FE, 0x00000000, 0x007FFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, 0xFFFFFFF8, 0x0000C001, 0xFFFFFFFF, 0x0000003F, 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x0003DE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x80020000, 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, 0x3F2FFC84, 0xF3FFFD50, 0x000043E0, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, 0xF87FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000379FF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x08FC0000, 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x1FFFFFFF, 0xFFFFFFF0, 0x0007FFFF, 0x00008000, 0x00000000, 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0x047FFFFF, 0xFFFFFFFF, 0x3E62FFFF, 0x38000005, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000007, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x00FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_ideographic.c������������������������������������������������0000664�0000000�0000000�00000002231�11671051007�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_ideographic.h������������������������������������������������0000664�0000000�0000000�00000030353�11671051007�0022234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[9 << 4]; } u_property_ideographic = { { 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, 4 + 256 * sizeof (short) / sizeof (int) + 0, -1, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 32, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 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, 4 + 256 * sizeof (short) / sizeof (int) + 64, 4 + 256 * sizeof (short) / sizeof (int) + 80, -1, -1, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 96, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 112, 4 + 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, 4 + 256 * sizeof (short) / sizeof (int) + 16, 4 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1 }, { 0x000000C0, 0x070003FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_ids_binary_operator.c����������������������������������������0000664�0000000�0000000�00000002311�11671051007�0024000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_ids_binary_operator.h����������������������������������������0000664�0000000�0000000�00000004137�11671051007�0024015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FF30000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_ids_trinary_operator.c���������������������������������������0000664�0000000�0000000�00000002317�11671051007�0024212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_ids_trinary_operator.h���������������������������������������0000664�0000000�0000000�00000004140�11671051007�0024213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_ignorable_control.c������������������������������������������0000664�0000000�0000000�00000002275�11671051007�0023455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_ignorable_control.h������������������������������������������0000664�0000000�0000000�00000015517�11671051007�0023465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[8 << 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, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 16 + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 64, -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, 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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x0FFFC1FE, 0x00000000, 0x00000000, 0x80000000, 0xFFFFFFDF, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00300000, 0x00000000, 0x00000000, 0x0000F800, 0x00007C00, 0x00000000, 0x0000FC1F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07F80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_iso_control.c������������������������������������������������0000664�0000000�0000000�00000002426�11671051007�0022303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_iso_control.h������������������������������������������������0000664�0000000�0000000�00000004127�11671051007�0022310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_join_control.c�����������������������������������������������0000664�0000000�0000000�00000002420�11671051007�0022442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_join_control.h�����������������������������������������������0000664�0000000�0000000�00000004130�11671051007�0022447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_left_of_pair.c�����������������������������������������������0000664�0000000�0000000�00000002237�11671051007�0022402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_left_of_pair.h�����������������������������������������������0000664�0000000�0000000�00000007530�11671051007�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000100, 0x08000000, 0x08000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x14000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xDD000000, 0x02000000, 0x00000020, 0x20000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x25515500, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAA00000, 0x2A00000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x08000000, 0x08000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_line_separator.c���������������������������������������������0000664�0000000�0000000�00000002554�11671051007�0022762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_line_separator.h���������������������������������������������0000664�0000000�0000000�00000004132�11671051007�0022761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_logical_order_exception.c������������������������������������0000664�0000000�0000000�00000002341�11671051007�0024630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_logical_order_exception.h������������������������������������0000664�0000000�0000000�00000004543�11671051007�0024643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x0000001F, 0x00000000, 0x00000000, 0x00000000, 0x0000001F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1A600000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_lowercase.c��������������������������������������������������0000664�0000000�0000000�00000002215�11671051007�0021731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_lowercase.h��������������������������������������������������0000664�0000000�0000000�00000015417�11671051007�0021746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -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, 3 + 256 * sizeof (short) / sizeof (int) + 96, -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, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x04200400, 0x80000000, 0xFF7FFFFF, 0xAAAAAAAA, 0x55AAAAAA, 0xAAAAAB55, 0xD4AAAAAA, 0x4E243129, 0xE6512D2A, 0xB5555240, 0xAA29AAAA, 0xAAAAAAAA, 0x93FAAAAA, 0xFFFFAA85, 0xFFFFFFFF, 0xFFEFFFFF, 0x01FFFFFF, 0x00000003, 0x0000001F, 0x00000000, 0x00000000, 0x00000020, 0x3C8A0000, 0x00010000, 0xFFFFF000, 0xAAE37FFF, 0x192FAAAA, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, 0xAAAAAAAA, 0x000000AA, 0x00000000, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xBFEAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x003F00FF, 0x00FF00FF, 0x00FF003F, 0x3FFF00FF, 0x00FF00FF, 0x40DF00FF, 0x00CF00DC, 0x00DC00FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F0000, 0x00000000, 0x00000000, 0x00000000, 0x0008C400, 0x32108000, 0x000043C0, 0xFFFF0000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x3FDA1562, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0000501A, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AAA, 0x00AAAAAA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAAABAAA8, 0xAAAAAAAA, 0x95FFAAAA, 0x000250AA, 0x000002AA, 0x00000000, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x000FFFFF, 0xFFDFC000, 0x000000FF, 0x0FFFFFFC, 0xEBC00000, 0x0000FFEF, 0xFFFFFC00, 0xC000000F, 0x00FFFFFF, 0xFFFC0000, 0x00000FFF, 0xFFFFFFC0, 0xFC000000, 0x000FFFFF, 0xFFFFC000, 0x000000FF, 0x0FFFFFFC, 0xFFC00000, 0x0000FFFF, 0xFFFFFC00, 0x0000003F, 0xF7FFFFFC, 0xF0000003, 0x0FDFFFFF, 0xFFC00000, 0x003F7FFF, 0xFFFF0000, 0x0000FDFF, 0xFFFFFC00, 0x00000BF7, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_math.c�������������������������������������������������������0000664�0000000�0000000�00000002157�11671051007�0020703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_math.h�������������������������������������������������������0000664�0000000�0000000�00000015012�11671051007�0020702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x70000800, 0x40000000, 0x50000000, 0x00000000, 0x00021000, 0x00800000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00270000, 0x00730000, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00400000, 0x001C0000, 0x00040011, 0x7C00001E, 0x00007C00, 0x00000000, 0x1FFF0000, 0x0000F862, 0x3F2FFC84, 0xF1FBB310, 0x00000BFF, 0x00000000, 0xFFFF0000, 0xF0C37EFF, 0x2FFFFFFF, 0xFFF00030, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000F00, 0x00000003, 0x00000000, 0x10000000, 0xF8000000, 0x00BFFFFF, 0xF0010000, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF0FFC003, 0x000F8CC3, 0xFF001F94, 0x00000060, 0x00000000, 0x00000005, 0x0000E00F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFD7FF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFF0000, 0x00001F9F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000017E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x70000800, 0x50000000, 0x50000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00001E04, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCFFF, 0xFFFFFFFF } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_non_break.c��������������������������������������������������0000664�0000000�0000000�00000002215�11671051007�0021703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_non_break.h��������������������������������������������������0000664�0000000�0000000�00000006125�11671051007�0021714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF0008000, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00041100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020080, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_not_a_character.c��������������������������������������������0000664�0000000�0000000�00000002261�11671051007�0023062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_not_a_character.h��������������������������������������������0000664�0000000�0000000�00000011103�11671051007�0023062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_numeric.c����������������������������������������������������0000664�0000000�0000000�00000002201�11671051007�0021402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_numeric.h����������������������������������������������������0000664�0000000�0000000�00000032700�11671051007�0021416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[35 << 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, -1, 4 + 384 * sizeof (short) / sizeof (int) + 448, 4 + 384 * sizeof (short) / sizeof (int) + 464, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 496, -1, 4 + 384 * sizeof (short) / sizeof (int) + 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 544, -1, -1, -1 }, { 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x720C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x03F0FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00FCFFC0, 0x00000000, 0x00000000, 0x00000000, 0x0007FFC0, 0x00000000, 0x00000000, 0x00000000, 0x7F00FFC0, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x003FFFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFE00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0001C000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x07FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03F10000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x000003EF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x070003FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01080800, 0x00000000, 0x00040000, 0x000A0000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF80, 0x000FFFFF, 0xFFFFFFFF, 0x01FFFFFF, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x00000402, 0x00000000, 0x00000000, 0x00000000, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FC00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000FF, 0x60000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC0000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFF3FFFF, 0xFF3FFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_other_alphabetic.c�������������������������������������������0000664�0000000�0000000�00000002267�11671051007�0023251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_other_alphabetic.h�������������������������������������������0000664�0000000�0000000�00000020426�11671051007�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[20 << 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, -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, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 288, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xBFFF0000, 0x000000B6, 0x00000000, 0x07FF0000, 0x00000000, 0xFEFFF800, 0x00010000, 0x00000000, 0x00000000, 0x1FC00000, 0x0000219E, 0x00020000, 0xFFFF0000, 0x00000000, 0x00000000, 0x00000000, 0x0001FFC0, 0x00000000, 0x00000000, 0xF8C00000, 0x00001EEF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0xCC000000, 0x00E0DFFF, 0x0000000C, 0x0000000E, 0xC0000000, 0x0080199F, 0x0000000C, 0x0000000E, 0xC0000000, 0x00021987, 0x00230000, 0x0000000E, 0xC0000000, 0x00001BBF, 0x0000000C, 0x0000000E, 0xC0000000, 0x00C0199F, 0x0000000C, 0x00000004, 0xC0000000, 0x00801DC7, 0x00000000, 0x0000000E, 0xC0000000, 0x00601DDF, 0x0000000C, 0x0000000C, 0xC0000000, 0x00601DDF, 0x0000000C, 0x0000000C, 0xC0000000, 0x00801DDF, 0x0000000C, 0x0000000C, 0x00000000, 0xFF5F8000, 0x000C0000, 0x00000000, 0x07F20000, 0x00002000, 0x00000000, 0x00000000, 0x1BF20000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xFEFFE003, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x797FF800, 0xC3C00000, 0x001E0185, 0x3000007C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000C0000, 0x000C0000, 0x000C0000, 0x000C0000, 0x00000000, 0xFFC00000, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x01FF0FFF, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x00000301, 0x00000000, 0x0F800000, 0x00000000, 0x7FE00000, 0x001FFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001F, 0xFFE00000, 0x0000000F, 0x00000000, 0x00000007, 0x000003FE, 0x00000000, 0x0003FF80, 0x00000000, 0x003FFFF0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, 0x000000F8, 0x00000000, 0x00000000, 0x00000003, 0xFFF00000, 0x0000000F, 0x00000000, 0x00000000, 0x000007C0, 0x0007FF80, 0x00000000, 0x0000000F, 0xFFF00000, 0x00000000, 0x00000000, 0x00000000, 0x007FFE00, 0x00003008, 0x00000000, 0x00000000, 0x419D0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007F8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000F06E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0xFF000000, 0x0000003F, 0x00000000, 0x00000004, 0x01FF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_other_default_ignorable_code_point.c�������������������������0000664�0000000�0000000�00000002443�11671051007�0027022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_other_default_ignorable_code_point.h�������������������������0000664�0000000�0000000�00000012730�11671051007�0027027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, 16 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 16 + 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, 16 + 256 * sizeof (short) / sizeof (int) + 64, 16 + 256 * sizeof (short) / sizeof (int) + 80, 16 + 256 * sizeof (short) / sizeof (int) + 96, 16 + 256 * sizeof (short) / sizeof (int) + 96, 16 + 256 * sizeof (short) / sizeof (int) + 96, 16 + 256 * sizeof (short) / sizeof (int) + 96, 16 + 256 * sizeof (short) / sizeof (int) + 96, 16 + 256 * sizeof (short) / sizeof (int) + 96, 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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003E0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x01FF0000, 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF } }; ����������������������������������������gnulib-20111211-stable/lib/unictype/pr_other_grapheme_extend.c��������������������������������������0000664�0000000�0000000�00000002325�11671051007�0024307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_other_grapheme_extend.h��������������������������������������0000664�0000000�0000000�00000011432�11671051007�0024313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[6 << 4]; } u_property_other_grapheme_extend = { { 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, -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, -1, -1, 3 + 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, -1, -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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00800000, 0x00000000, 0x00000000, 0x40000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00600004, 0x00000000, 0x00000000, 0x40000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x80008000, 0x00000000, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007C020, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_other_id_continue.c������������������������������������������0000664�0000000�0000000�00000002275�11671051007�0023454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_other_id_continue.h������������������������������������������0000664�0000000�0000000�00000005535�11671051007�0023463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0003FE00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_other_id_start.c���������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0022761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_other_id_start.h���������������������������������������������0000664�0000000�0000000�00000004532�11671051007�0022770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_other_id_start = { { 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, 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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_other_lowercase.c��������������������������������������������0000664�0000000�0000000�00000002261�11671051007�0023133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_other_lowercase.h��������������������������������������������0000664�0000000�0000000�00000006533�11671051007�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[6 << 4]; } u_property_other_lowercase = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { -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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FF0000, 0x00000003, 0x0000001F, 0x00000000, 0x00000000, 0x00000020, 0x04000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x01000003, 0xF8000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x001F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_other_math.c�������������������������������������������������0000664�0000000�0000000�00000002223�11671051007�0022076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_other_math.h�������������������������������������������������0000664�0000000�0000000�00000013420�11671051007�0022104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00270000, 0x00330000, 0x00400000, 0x001C0000, 0x00000001, 0x6000001E, 0x00006000, 0x00000000, 0x1FFF0000, 0x0000F862, 0x3E2FFC84, 0xF1FBB310, 0x000003E0, 0x00000000, 0xF3E00000, 0xF0C33EB6, 0x2FEB3FFF, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00B00000, 0x00010000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF07FC003, 0x000F8CC1, 0x00001F94, 0x00000060, 0x00000000, 0x00000005, 0x0000600F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FFFFF8, 0x00000000, 0x0F000000, 0x30000000, 0x00000000, 0x00000000, 0x00000000, 0x0000010A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x50000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_other_uppercase.c��������������������������������������������0000664�0000000�0000000�00000002261�11671051007�0023136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_other_uppercase.h��������������������������������������������0000664�0000000�0000000�00000004533�11671051007�0023147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_other_uppercase = { { 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, 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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_paired_punctuation.c�����������������������������������������0000664�0000000�0000000�00000002303�11671051007�0023640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_paired_punctuation.h�����������������������������������������0000664�0000000�0000000�00000007536�11671051007�0023662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000300, 0x28000000, 0x28000000, 0x00000000, 0x08000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3C000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0x06000000, 0x00000060, 0x60000000, 0x00006000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xEFF3FF00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE00000, 0x7E00001F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x28000000, 0x28000000, 0x0000000C, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_paragraph_separator.c����������������������������������������0000664�0000000�0000000�00000002624�11671051007�0023776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_paragraph_separator.h����������������������������������������0000664�0000000�0000000�00000004137�11671051007�0024004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_pattern_syntax.c���������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0023032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_pattern_syntax.h���������������������������������������������0000664�0000000�0000000�00000010272�11671051007�0023037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0xFC00FFFE, 0x78000001, 0x78000001, 0x00000000, 0x88435AFE, 0x00800000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0x7FFF00FF, 0x7FEFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF0E, 0x00010001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_pattern_white_space.c����������������������������������������0000664�0000000�0000000�00000002311�11671051007�0023772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_pattern_white_space.h����������������������������������������0000664�0000000�0000000�00000004537�11671051007�0024013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00003E00, 0x00000001, 0x00000000, 0x00000000, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000C000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_private_use.c������������������������������������������������0000664�0000000�0000000�00000002545�11671051007�0022301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_private_use.h������������������������������������������������0000664�0000000�0000000�00000025277�11671051007�0022315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_punctuation.c������������������������������������������������0000664�0000000�0000000�00000002425�11671051007�0022321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_punctuation.h������������������������������������������������0000664�0000000�0000000�00000027021�11671051007�0022325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, 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, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, 3 + 256 * sizeof (short) / sizeof (int) + 272, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x8C00F7EE, 0xB8000001, 0x28000000, 0x00000000, 0x88800802, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x00000000, 0x00000600, 0x40000000, 0x00000049, 0x00180000, 0xC8003600, 0x00000000, 0x00000000, 0x00003C00, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03800000, 0x00000000, 0x7FFF0000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00000000, 0x0C008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007FFF0, 0x3C000000, 0x00000000, 0x00000000, 0x00000020, 0x00000000, 0x061F0000, 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000001FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00006000, 0x18000000, 0x00000000, 0x00000000, 0x00003800, 0x00000000, 0x00600000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07700000, 0x00000000, 0x000007FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0xF0000000, 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFF00FF, 0x7FFBFFEF, 0x60000000, 0x00006000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFF00, 0x00000000, 0x00000000, 0x00000060, 0x0000FFC0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FFFFF8, 0x00000000, 0x0F000000, 0x30000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xDE000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00037FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF3FF0E, 0x20010000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x00000000, 0x40080000, 0x00000000, 0x00000000, 0x00000000, 0x00FC0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F00000, 0x00000000, 0x00000000, 0x0000C000, 0x07000000, 0x00000000, 0x0000C000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0xC0003FFE, 0x00000000, 0x00000000, 0x00000000, 0xF0000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, 0xFFFF0000, 0xFFF7FFFF, 0x00000D0B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C00F7EE, 0xB8000001, 0xA8000000, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FF0000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFE000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003F80, 0x00000000, 0x00000000, 0xD8000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_quotation_mark.c���������������������������������������������0000664�0000000�0000000�00000002253�11671051007�0023004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_quotation_mark.h���������������������������������������������0000664�0000000�0000000�00000005532�11671051007�0023014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -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, 2 + 128 * sizeof (short) / sizeof (int) + 48 }, { 0x00000000, 0x00000084, 0x00000000, 0x00000000, 0x00000000, 0x08000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0x06000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE000F000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000084, 0x00000000, 0x00000000, 0x0000000C, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_radical.c����������������������������������������������������0000664�0000000�0000000�00000002201�11671051007�0021337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_radical.h����������������������������������������������������0000664�0000000�0000000�00000004123�11671051007�0021351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_sentence_terminal.c������������������������������������������0000664�0000000�0000000�00000002275�11671051007�0023452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_sentence_terminal.h������������������������������������������0000664�0000000�0000000�00000020427�11671051007�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 6.0.0. */ #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[20 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x80004002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x50000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000184, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00600000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000208, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xCC000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x00000380, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000C000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00880000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00C00000, 0x00000000, 0x00000000, 0x0000C000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00C40000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80004002, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00C00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000180, 0x00000000, 0x00000000, 0xC0000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_soft_dotted.c������������������������������������������������0000664�0000000�0000000�00000002231�11671051007�0022261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_soft_dotted.h������������������������������������������������0000664�0000000�0000000�00000013020�11671051007�0022264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000100, 0x20000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00400000, 0x00000110, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000C, 0x00C00000, 0x00000000, 0x00000C00, 0xC0000000, 0x00000000, 0x000C0000, 0x00000000, 0x000000C0, 0x0C000000, 0x00000000, 0x0000C000, 0x00000000, 0x0000000C, 0x00C00000, 0x00000000, 0x00000C00, 0xC0000000, 0x00000000, 0x000C0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_space.c������������������������������������������������������0000664�0000000�0000000�00000002354�11671051007�0021044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_space.h������������������������������������������������������0000664�0000000�0000000�00000006121�11671051007�0021045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -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 }, { 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00008000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_terminal_punctuation.c���������������������������������������0000664�0000000�0000000�00000002317�11671051007�0024214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_terminal_punctuation.h���������������������������������������0000664�0000000�0000000�00000023032�11671051007�0024216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[25 << 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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x8C005002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000008, 0x00000000, 0x88001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000, 0x00000000, 0x000017FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03000000, 0x00000000, 0x7FFF0000, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0007E100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000001FE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00006000, 0x00000000, 0x00000000, 0x00000000, 0x00003800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04700000, 0x00000000, 0x0000033C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xEC000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x00000380, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00F80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00C00000, 0x00000000, 0x00000000, 0x0000C000, 0x00000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000380, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0x00000000, 0x00000000, 0x00F70000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8C005002, 0x00000000, 0x00000000, 0x00000012, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003F80, 0x00000000, 0x00000000, 0xC0000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_test.c�������������������������������������������������������0000664�0000000�0000000�00000001737�11671051007�0020734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2005-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_titlecase.c��������������������������������������������������0000664�0000000�0000000�00000002410�11671051007�0021717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_titlecase.h��������������������������������������������������0000664�0000000�0000000�00000004525�11671051007�0021735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000920, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF00FF00, 0x1000FF00, 0x00001000, 0x10000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_unassigned_code_value.c��������������������������������������0000664�0000000�0000000�00000002325�11671051007�0024275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_unassigned_code_value.h��������������������������������������0000664�0000000�0000000�00000122524�11671051007�0024306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[60 << 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, 16 + 640 * sizeof (short) / sizeof (int) + 272, -1, 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, 16 + 640 * sizeof (short) / sizeof (int) + 352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 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, 16 + 640 * sizeof (short) / sizeof (int) + 384, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 400, 16 + 640 * sizeof (short) / sizeof (int) + 416, 16 + 640 * sizeof (short) / sizeof (int) + 432, 16 + 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, 16 + 640 * sizeof (short) / sizeof (int) + 464, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, -1, 16 + 640 * sizeof (short) / sizeof (int) + 672, 16 + 640 * sizeof (short) / sizeof (int) + 688, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 704, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, -1, 16 + 640 * sizeof (short) / sizeof (int) + 720, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 736, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 752, 16 + 640 * sizeof (short) / sizeof (int) + 768, 16 + 640 * sizeof (short) / sizeof (int) + 784, 16 + 640 * sizeof (short) / sizeof (int) + 800, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 816, 16 + 640 * sizeof (short) / sizeof (int) + 832, 16 + 640 * sizeof (short) / sizeof (int) + 848, 16 + 640 * sizeof (short) / sizeof (int) + 864, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 896, -1, -1, -1, -1, -1, -1, -1, 16 + 640 * sizeof (short) / sizeof (int) + 912, 16 + 640 * sizeof (short) / sizeof (int) + 928, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, -1, 16 + 640 * sizeof (short) / sizeof (int) + 928, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 880, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 880, 16 + 640 * sizeof (short) / sizeof (int) + 944, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 576, 16 + 640 * sizeof (short) / sizeof (int) + 880 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x83000000, 0x0000280F, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0001FF00, 0x01800000, 0x00000001, 0x0001F900, 0x00000000, 0x0000FF00, 0xFFE0F800, 0x30000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00001800, 0x00000000, 0x00000000, 0xFFFC0000, 0x00000000, 0xF8000000, 0x00000000, 0x8000C000, 0xB0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x00066011, 0x0C3A0200, 0x4F7F8660, 0xF0000030, 0x00067811, 0x2C920200, 0xA1FDC678, 0xFFC0003F, 0x00044011, 0x0C120200, 0xFFFEC440, 0xFFFD0030, 0x00066011, 0x0C120200, 0x4F3FC660, 0xFF000030, 0x29C23813, 0x3C0038E7, 0xFF7EC238, 0xF800003F, 0x00022011, 0x1C100200, 0xFC9FC220, 0x00FF0030, 0x00022013, 0x0C100200, 0xBF9FC220, 0xFFF90030, 0x00022013, 0x18000000, 0xFF7F8220, 0x01C00030, 0x03800013, 0xD0040000, 0x00A07B80, 0xFFE3FFFF, 0x00000001, 0x78000000, 0xF0000000, 0xFFFFFFFF, 0x010FDA69, 0xC4001351, 0xCC00C0A0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000100, 0x0001E000, 0x01000000, 0x20000000, 0xF8002000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, 0xE0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC280C200, 0x00000000, 0x0000C200, 0x80C20000, 0x008000C2, 0x00000000, 0x00C20000, 0x00000000, 0x18000000, 0xE0000000, 0xFC000000, 0x00000000, 0x00000000, 0xFFE00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE0000000, 0x00000000, 0x00000000, 0xFFFE0000, 0xFFE02000, 0xFF800000, 0xFFF00000, 0xFFF22000, 0x00000000, 0x00000000, 0xC0000000, 0xFC00FC00, 0xFC008000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x0000F800, 0x00000000, 0xFFC00000, 0xE0000000, 0xF000F000, 0x0000000E, 0xFFE0C000, 0x00000000, 0x0000F000, 0x3800FC00, 0x00000000, 0x30000000, 0x00000000, 0x80000000, 0x60000000, 0xFC00FC00, 0xFFFFC000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x0000F000, 0xE0000000, 0x00000000, 0xFC003800, 0x00000000, 0x0FF00000, 0x00000000, 0x07000000, 0x00001C00, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFF80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FFFFF80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0C00000, 0x00000000, 0x5500C0C0, 0xC0000000, 0x00000000, 0x00200000, 0x10300020, 0x80230000, 0x00000000, 0x00000000, 0x00000000, 0x000C03E0, 0xE0008000, 0xFC000000, 0x0000FFFF, 0xFFFE0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFC00E000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00008000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01FC0000, 0x00000000, 0x0000FFC0, 0x00000000, 0x7FFE7FC0, 0xFF800000, 0x80808080, 0x80808080, 0x00000000, 0x00000000, 0xFFFC0000, 0xFFFFFFFF, 0xFFFFFFFF, 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x01800000, 0x00000000, 0x00000000, 0x00000000, 0x0000001F, 0x0001C000, 0x00000000, 0x00000000, 0x00008000, 0xF8000000, 0x00000000, 0x0000FFF0, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000E000, 0x00000000, 0x0000FF80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFF000, 0x00000000, 0x0FF00000, 0xFF000000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFC8000, 0xFFFFFC00, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xFC00F000, 0x00000000, 0xFF000000, 0x00000000, 0x00000000, 0xFC003FE0, 0xF0000000, 0x00000000, 0x00000000, 0x7FF00000, 0xE0000000, 0x00000000, 0x00000000, 0x3C004000, 0xFFFFFFFF, 0x00000000, 0xFF800000, 0x0C00C000, 0xF0000000, 0x00000000, 0x00000000, 0x07FFFFF8, 0xFFFFFFFF, 0xFF818181, 0xFFFF8080, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFC00C000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFF0, 0x00000780, 0xF0000000, 0x00000000, 0x0000C000, 0x00000000, 0x0000C000, 0x00000000, 0x00000000, 0xFC000000, 0xFFFFFFFF, 0x1F07FF80, 0xA0800000, 0x00000024, 0x00000000, 0x00000000, 0x00000000, 0x0007FFFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, 0x00030000, 0x00000000, 0x0000FF00, 0xC0000000, 0xFC000000, 0x0000FF80, 0x00080000, 0x0020F080, 0x00000000, 0x00000000, 0x00000000, 0x60000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xE3030303, 0x01FF8080, 0x00001000, 0x48000080, 0xC000C000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xF8000000, 0x00000078, 0x00700000, 0x00000000, 0x00000000, 0xF000F800, 0xFFFFFFFF, 0x0000FFFF, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xE0000000, 0x00000000, 0xFFFE0000, 0xFFFFFFFF, 0x80000000, 0x0000FFF0, 0xFFFFF800, 0xFFFFFFFF, 0x40000000, 0x00000000, 0xFFC000F0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000002C0, 0x6E400000, 0x00400000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x70000000, 0x7C000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x01100F90, 0x78F00000, 0xFE00FF00, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x01C00000, 0x00C00000, 0x00F80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x0003C000, 0xFFFF0000, 0x00000000, 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFF0FFF8, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFE000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x00000000, 0x00000180, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFF800000, 0xFFFC0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x20000000, 0x1400219B, 0x00000010, 0x00000000, 0x20201840, 0x84000000, 0x000203A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003000, 0x00000000, 0x00000000, 0x0000F000, 0x00000000, 0x00000000, 0xFFF00000, 0x80018000, 0x00010001, 0xFFFFFFFF, 0x0000F800, 0x00008000, 0x00000000, 0x0000FC00, 0xF8000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x0000FFF8, 0xF8000000, 0xFFFCFE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x0040FFFE, 0x00000000, 0xE0000000, 0xFFF00000, 0x00000000, 0xFFFFF820, 0xFFFE0000, 0x00000000, 0x80000000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE1000000, 0x00000000, 0xC0000000, 0x0000FFFF, 0xFFFFFF00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x8AA20001, 0x0010D0C0, 0xFFFF001E, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFE00000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_unified_ideograph.c������������������������������������������0000664�0000000�0000000�00000002275�11671051007�0023420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_unified_ideograph.h������������������������������������������0000664�0000000�0000000�00000027221�11671051007�0023423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[7 << 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0x801AC000, 0x0000039A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_uppercase.c��������������������������������������������������0000664�0000000�0000000�00000002215�11671051007�0021734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_uppercase.h��������������������������������������������������0000664�0000000�0000000�00000015017�11671051007�0021745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, -1, -1, -1, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x7F7FFFFF, 0x00000000, 0x55555555, 0xAA555555, 0x555554AA, 0x2B555555, 0xB1DBCED6, 0x11AED2D5, 0x4AAAA490, 0x55D25555, 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00450000, 0xFFFED740, 0x00000FFB, 0x551C8000, 0xE6905555, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, 0x55555555, 0xFFFE0055, 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x55555555, 0x55555555, 0x55555555, 0x40155555, 0x55555555, 0x55555555, 0x55555555, 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, 0x00000000, 0x0F000000, 0x0F000F00, 0x0F001F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3E273884, 0xC00F3D50, 0x00000020, 0x0000FFFF, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0xC025EA9D, 0x55555555, 0x55555555, 0x55555555, 0x00002805, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55555555, 0x00001555, 0x00555555, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x55545554, 0x55555555, 0x6A005555, 0x00012855, 0x00000155, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03FFFFFF, 0xFFF00000, 0x00003FFF, 0xFFFFFF00, 0xD0000003, 0x003FDE64, 0xFFFF0000, 0x000003FF, 0x1FDFE7B0, 0x7B000000, 0x0001FC5F, 0xFFFFF000, 0x0000003F, 0x03FFFFFF, 0xFFF00000, 0x00003FFF, 0xFFFFFF00, 0xF0000003, 0x003FFFFF, 0xFFFF0000, 0x000003FF, 0xFFFFFF00, 0x00000001, 0x07FFFFFC, 0xF0000000, 0x001FFFFF, 0xFFC00000, 0x00007FFF, 0xFFFF0000, 0x000001FF, 0x00000400, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_variation_selector.c�����������������������������������������0000664�0000000�0000000�00000002303�11671051007�0023637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_variation_selector.h�����������������������������������������0000664�0000000�0000000�00000010250�11671051007�0023644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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 }, { 0x00003800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_white_space.c������������������������������������������������0000664�0000000�0000000�00000002231�11671051007�0022236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_white_space.h������������������������������������������������0000664�0000000�0000000�00000006127�11671051007�0022253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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_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, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -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 }, { 0x00003E00, 0x00000001, 0x00000000, 0x00000000, 0x00000020, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000007FF, 0x00008300, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_xid_continue.c�����������������������������������������������0000664�0000000�0000000�00000002237�11671051007�0022441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_xid_continue.h�����������������������������������������������0000664�0000000�0000000�00000065723�11671051007�0022457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[51 << 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, -1, 16 + 512 * sizeof (short) / sizeof (int) + 544, 16 + 512 * sizeof (short) / sizeof (int) + 560, 16 + 512 * sizeof (short) / sizeof (int) + 576, -1, 16 + 512 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 608, 16 + 512 * sizeof (short) / sizeof (int) + 624, -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) + 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, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * 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, 16 + 512 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 688, 16 + 512 * sizeof (short) / sizeof (int) + 704, 16 + 512 * sizeof (short) / sizeof (int) + 720, 16 + 512 * sizeof (short) / sizeof (int) + 736, -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) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 752, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 768, 16 + 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, 16 + 512 * sizeof (short) / sizeof (int) + 304, 16 + 512 * sizeof (short) / sizeof (int) + 784, -1, -1, 16 + 512 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x03FF0000, 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x04A00400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x38DFFFFF, 0xFFFFD7C0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFCFB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x027FFFFF, 0xFFFFFFFE, 0xFFFE00FF, 0xBFFFFFFF, 0xFFFF00B6, 0x000707FF, 0x07FF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFC3FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x9FEFFFFF, 0x9FFFFDFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFE7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFFFF, 0x043FFFFF, 0xFFFFFFFF, 0x00003FFF, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFEFEFFCF, 0xFFF99FEE, 0xF3C5FDFF, 0xB080799F, 0x0003FFCF, 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x003FFFC0, 0xFFFBBFEE, 0xF3EDFDFF, 0x00013BBF, 0x0000FFCF, 0xFFF99FEE, 0xF3EDFDFF, 0xB0C0399F, 0x0002FFCF, 0xD63DC7EC, 0xC3FFC718, 0x00813DC7, 0x0000FFC0, 0xFFFDDFEE, 0xE3EFFDFF, 0x03603DDF, 0x0000FFCF, 0xFFFDDFEC, 0xF3EFFDFF, 0x40603DDF, 0x0006FFCF, 0xFFFDDFEC, 0xE7FFFFFF, 0x00807DDF, 0xFC00FFCF, 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x000C0000, 0xFFFFFFFE, 0x07FFFFFF, 0x03FF7FFF, 0x00000000, 0xFEF02596, 0x3BFFECAE, 0x33FF3F5F, 0x00000000, 0x03000001, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE1FFF, 0xFEFFFFDF, 0x1FFFFFFF, 0x00000040, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0xE7FFFFFF, 0x0003FE00, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, 0x001FDFFF, 0x001FFFFF, 0x000FFFFF, 0x000DDFFF, 0xFFFFFFFF, 0xFFCFFFFF, 0x308FFFFF, 0x000003FF, 0x03FF3800, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF07FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x0FFF0FFF, 0xFFFFFFC0, 0x001F3FFF, 0xFFFFFFFF, 0xFFFF0FFF, 0x07FF03FF, 0x00000000, 0x0FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0x9FFFFFFF, 0x03FF03FF, 0x00000080, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF0FFF, 0x000FF800, 0xFFFFFFFF, 0x03FFC7FF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFE3FF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0xFFF70000, 0x0007FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF000007F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x80000000, 0x00100001, 0x80020000, 0x1FFF0000, 0x00000000, 0x1FFF0000, 0x0001FFE2, 0x3F2FFC84, 0xF3FFFD50, 0x000043E0, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003F81F, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x8000803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, 0x000000E0, 0x1F3EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, 0xE67FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0x00000FFF, 0xFFFFFFFF, 0xB000FFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000379FF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFFFFF, 0x000000FF, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF001F, 0x08FFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0x000FFFFF, 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF8001, 0x00000000, 0xFFFFFFFF, 0x007FFFFF, 0x03FF3FFF, 0x0C7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x38000007, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x03FF37FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xE0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x03FF0000, 0x0000FFFF, 0x0018007F, 0x0000E000, 0xAA8A0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x03FF0000, 0x87FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEFF06F, 0x870FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000007F, 0x0000FFC0, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000001C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF } }; ���������������������������������������������gnulib-20111211-stable/lib/unictype/pr_xid_start.c��������������������������������������������������0000664�0000000�0000000�00000002215�11671051007�0021746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_xid_start.h��������������������������������������������������0000664�0000000�0000000�00000061242�11671051007�0021760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[48 << 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, -1, 4 + 384 * sizeof (short) / sizeof (int) + 544, 4 + 384 * sizeof (short) / sizeof (int) + 560, 4 + 384 * sizeof (short) / sizeof (int) + 576, -1, 4 + 384 * sizeof (short) / sizeof (int) + 592, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 608, 4 + 384 * sizeof (short) / sizeof (int) + 624, -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) + 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, 4 + 384 * sizeof (short) / sizeof (int) + 304, 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, 4 + 384 * sizeof (short) / sizeof (int) + 672, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4 + 384 * sizeof (short) / sizeof (int) + 688, 4 + 384 * sizeof (short) / sizeof (int) + 704, -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) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 720, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 736, 4 + 384 * 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, 4 + 384 * sizeof (short) / sizeof (int) + 304, 4 + 384 * sizeof (short) / sizeof (int) + 752, -1, -1 }, { 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, 0x00000000, 0x00000000, 0x00000000, 0x38DF0000, 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFE00FF, 0x027FFFFF, 0xFFFFFFFE, 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0xFFFFFFFF, 0x000007FF, 0xFFFEC000, 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C060, 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x043007FF, 0x043FFFFF, 0x00000110, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xFEFE0003, 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x00030003, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x00000003, 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x00000003, 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00060003, 0xFFFDDFE0, 0x27FFFFFF, 0x00004000, 0xFC000003, 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, 0xFFFFFFFE, 0x0005FFFF, 0x0000007F, 0x00000000, 0xFEF02596, 0x2005ECAE, 0x3000005F, 0x00000000, 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, 0x00001F00, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, 0x00004003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, 0x1FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, 0xFFFFFFFF, 0x00000FFF, 0x000000FE, 0x00000000, 0x007FFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, 0xFFFFFFF8, 0x0000C001, 0xFFFFFFFF, 0x0000003F, 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x0003DE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00000000, 0x00000000, 0x80020000, 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, 0x3F2FFC84, 0xF3FFFD50, 0x000043E0, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000781F, 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0x000379FF, 0x000003FF, 0x00000000, 0xFC000000, 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x08FC0000, 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x1FFFFFFF, 0xFFFFFFF0, 0x0007FFFF, 0x00008000, 0x00000000, 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0x047FFFFF, 0xFFFFFFFF, 0x3E62FFFF, 0x38000005, 0x00000000, 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000007, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, 0xAA8A0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, 0x3FFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x00FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFF8, 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/pr_zero_width.c�������������������������������������������������0000664�0000000�0000000�00000002223�11671051007�0022122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unictype/pr_zero_width.h�������������������������������������������������0000664�0000000�0000000�00000015510�11671051007�0022132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ #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[8 << 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, -1, -1, -1, -1, -1, -1, -1, 16 + 384 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, 16 + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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) + 64, -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, 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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00300000, 0x00000000, 0x00000000, 0x0000F800, 0x00007C00, 0x00000000, 0x0000FC1F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0E000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07F80000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/scripts.c�������������������������������������������������������0000664�0000000�0000000�00000004064�11671051007�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Scripts of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/scripts.h�������������������������������������������������������0000664�0000000�0000000�00000520471�11671051007�0020751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Unicode scripts. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ 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 }, { 0x060C, 1, 1 }, { 0x061B, 1, 1 }, { 0x061F, 1, 1 }, { 0x0640, 1, 1 }, { 0x0660, 1, 0 }, { 0x0669, 0, 1 }, { 0x06DD, 1, 1 }, { 0x0964, 1, 0 }, { 0x0965, 0, 1 }, { 0x0970, 1, 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 }, { 0x1CF2, 0, 1 }, { 0x2000, 1, 0 }, { 0x200B, 0, 1 }, { 0x200E, 1, 0 }, { 0x2064, 0, 1 }, { 0x206A, 1, 0 }, { 0x2070, 0, 1 }, { 0x2074, 1, 0 }, { 0x207E, 0, 1 }, { 0x2080, 1, 0 }, { 0x208E, 0, 1 }, { 0x20A0, 1, 0 }, { 0x20B9, 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, 1 }, { 0x2190, 1, 0 }, { 0x23F3, 0, 1 }, { 0x2400, 1, 0 }, { 0x2426, 0, 1 }, { 0x2440, 1, 0 }, { 0x244A, 0, 1 }, { 0x2460, 1, 0 }, { 0x26FF, 0, 1 }, { 0x2701, 1, 0 }, { 0x27CA, 0, 1 }, { 0x27CC, 1, 1 }, { 0x27CE, 1, 0 }, { 0x27FF, 0, 1 }, { 0x2900, 1, 0 }, { 0x2B4C, 0, 1 }, { 0x2B50, 1, 0 }, { 0x2B59, 0, 1 }, { 0x2E00, 1, 0 }, { 0x2E31, 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 }, { 0xFD3E, 1, 0 }, { 0xFD3F, 0, 1 }, { 0xFDFD, 1, 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 }, { 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 }, { 0x1D1DD, 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 }, { 0x1F0BE, 0, 1 }, { 0x1F0C1, 1, 0 }, { 0x1F0CF, 0, 1 }, { 0x1F0D1, 1, 0 }, { 0x1F0DF, 0, 1 }, { 0x1F100, 1, 0 }, { 0x1F10A, 0, 1 }, { 0x1F110, 1, 0 }, { 0x1F12E, 0, 1 }, { 0x1F130, 1, 0 }, { 0x1F169, 0, 1 }, { 0x1F170, 1, 0 }, { 0x1F19A, 0, 1 }, { 0x1F1E6, 1, 0 }, { 0x1F1FF, 0, 1 }, { 0x1F201, 1, 0 }, { 0x1F202, 0, 1 }, { 0x1F210, 1, 0 }, { 0x1F23A, 0, 1 }, { 0x1F240, 1, 0 }, { 0x1F248, 0, 1 }, { 0x1F250, 1, 0 }, { 0x1F251, 0, 1 }, { 0x1F300, 1, 0 }, { 0x1F320, 0, 1 }, { 0x1F330, 1, 0 }, { 0x1F335, 0, 1 }, { 0x1F337, 1, 0 }, { 0x1F37C, 0, 1 }, { 0x1F380, 1, 0 }, { 0x1F393, 0, 1 }, { 0x1F3A0, 1, 0 }, { 0x1F3C4, 0, 1 }, { 0x1F3C6, 1, 0 }, { 0x1F3CA, 0, 1 }, { 0x1F3E0, 1, 0 }, { 0x1F3F0, 0, 1 }, { 0x1F400, 1, 0 }, { 0x1F43E, 0, 1 }, { 0x1F440, 1, 1 }, { 0x1F442, 1, 0 }, { 0x1F4F7, 0, 1 }, { 0x1F4F9, 1, 0 }, { 0x1F4FC, 0, 1 }, { 0x1F500, 1, 0 }, { 0x1F53D, 0, 1 }, { 0x1F550, 1, 0 }, { 0x1F567, 0, 1 }, { 0x1F5FB, 1, 0 }, { 0x1F5FF, 0, 1 }, { 0x1F601, 1, 0 }, { 0x1F610, 0, 1 }, { 0x1F612, 1, 0 }, { 0x1F614, 0, 1 }, { 0x1F616, 1, 1 }, { 0x1F618, 1, 1 }, { 0x1F61A, 1, 1 }, { 0x1F61C, 1, 0 }, { 0x1F61E, 0, 1 }, { 0x1F620, 1, 0 }, { 0x1F625, 0, 1 }, { 0x1F628, 1, 0 }, { 0x1F62B, 0, 1 }, { 0x1F62D, 1, 1 }, { 0x1F630, 1, 0 }, { 0x1F633, 0, 1 }, { 0x1F635, 1, 0 }, { 0x1F640, 0, 1 }, { 0x1F645, 1, 0 }, { 0x1F64F, 0, 1 }, { 0x1F680, 1, 0 }, { 0x1F6C5, 0, 1 }, { 0x1F700, 1, 0 }, { 0x1F773, 0, 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 }, { 0xA78E, 0, 1 }, { 0xA790, 1, 0 }, { 0xA791, 0, 1 }, { 0xA7A0, 1, 0 }, { 0xA7A9, 0, 1 }, { 0xA7FA, 1, 0 }, { 0xA7FF, 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 }, { 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 }, { 0x10140, 1, 0 }, { 0x1018A, 0, 1 }, { 0x1D200, 1, 0 }, { 0x1D245, 0, 1 } }; static const uc_interval_t script_cyrillic_intervals[] = { { 0x0400, 1, 0 }, { 0x0484, 0, 1 }, { 0x0487, 1, 0 }, { 0x0527, 0, 1 }, { 0x1D2B, 1, 1 }, { 0x1D78, 1, 1 }, { 0x2DE0, 1, 0 }, { 0x2DFF, 0, 1 }, { 0xA640, 1, 0 }, { 0xA673, 0, 1 }, { 0xA67C, 1, 0 }, { 0xA697, 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 }, { 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 }, { 0x0603, 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 }, { 0x065E, 0, 1 }, { 0x066A, 1, 0 }, { 0x066F, 0, 1 }, { 0x0671, 1, 0 }, { 0x06DC, 0, 1 }, { 0x06DE, 1, 0 }, { 0x06FF, 0, 1 }, { 0x0750, 1, 0 }, { 0x077F, 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 }, { 0xFDFC, 0, 1 }, { 0xFE70, 1, 0 }, { 0xFE74, 0, 1 }, { 0xFE76, 1, 0 }, { 0xFEFC, 0, 1 }, { 0x10E60, 1, 0 }, { 0x10E7E, 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 }, { 0x096F, 0, 1 }, { 0x0971, 1, 0 }, { 0x0977, 0, 1 }, { 0x0979, 1, 0 }, { 0x097F, 0, 1 }, { 0xA8E0, 1, 0 }, { 0xA8FB, 0, 1 } }; static const uc_interval_t script_bengali_intervals[] = { { 0x0981, 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 }, { 0x0AEF, 0, 1 }, { 0x0AF1, 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[] = { { 0x0C01, 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 }, { 0x0C33, 0, 1 }, { 0x0C35, 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 }, { 0x0C59, 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[] = { { 0x0C82, 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[] = { { 0x0D02, 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 }, { 0x0D4E, 0, 1 }, { 0x0D57, 1, 1 }, { 0x0D60, 1, 0 }, { 0x0D63, 0, 1 }, { 0x0D66, 1, 0 }, { 0x0D75, 0, 1 }, { 0x0D79, 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 }, { 0x0DF2, 1, 0 }, { 0x0DF4, 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 }, { 0x0EDD, 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 }, { 0xAA60, 1, 0 }, { 0xAA7B, 0, 1 } }; static const uc_interval_t script_georgian_intervals[] = { { 0x10A0, 1, 0 }, { 0x10C5, 0, 1 }, { 0x10D0, 1, 0 }, { 0x10FA, 0, 1 }, { 0x10FC, 1, 1 }, { 0x2D00, 1, 0 }, { 0x2D25, 0, 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 }, { 0x13F4, 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 }, { 0x16F0, 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 } }; 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 }, { 0x9FCB, 0, 1 }, { 0xF900, 1, 0 }, { 0xFA2D, 0, 1 }, { 0xFA30, 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 }, { 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 }, { 0x1031E, 0, 1 }, { 0x10320, 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 }, { 0x065F, 1, 1 }, { 0x0670, 1, 1 }, { 0x0951, 1, 0 }, { 0x0952, 0, 1 }, { 0x1CD0, 1, 0 }, { 0x1CD2, 0, 1 }, { 0x1CD4, 1, 0 }, { 0x1CE0, 0, 1 }, { 0x1CE2, 1, 0 }, { 0x1CE8, 0, 1 }, { 0x1CED, 1, 1 }, { 0x1DC0, 1, 0 }, { 0x1DE6, 0, 1 }, { 0x1DFC, 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 }, { 0xFE26, 0, 1 }, { 0x101FD, 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 }, { 0x191C, 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 }, { 0x2CF1, 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 } }; static const uc_interval_t script_tifinagh_intervals[] = { { 0x2D30, 1, 0 }, { 0x2D65, 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 }, { 0x1236E, 0, 1 }, { 0x12400, 1, 0 }, { 0x12462, 0, 1 }, { 0x12470, 1, 0 }, { 0x12473, 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 }, { 0x1BAA, 0, 1 }, { 0x1BAE, 1, 0 }, { 0x1BB9, 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 }, { 0xA8C4, 0, 1 }, { 0xA8CE, 1, 0 }, { 0xA8D9, 0, 1 } }; static const uc_interval_t script_kayah_li_intervals[] = { { 0xA900, 1, 0 }, { 0xA92F, 0, 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 }, { 0xA9CF, 1, 0 }, { 0xA9D9, 0, 1 }, { 0xA9DE, 1, 0 }, { 0xA9DF, 0, 1 } }; static const uc_interval_t script_meetei_mayek_intervals[] = { { 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 } }; static const uc_interval_t script_mandaic_intervals[] = { { 0x0840, 1, 0 }, { 0x085B, 0, 1 }, { 0x085E, 1, 1 } }; static const uc_script_t scripts[95] = { { 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" } }; #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[163 << 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, -1, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, 3968, 4096, 4224, 4352, 4480, 4608, 4608, 4608, 4608, 4608, 4736, 4864, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 6400, 6528, 256, 256, 6656, 6784, 6912, 7040, 7168, 7296, 7424, 7424, 7424, 7552, 7680, 7424, 7424, 7424, 7424, 7424, 7808, 7936, 8064, 8064, 7424, 7424, 7424, 7424, 8192, -1, 8320, 8448, 8576, 8704, 8832, 8960, 9088, 9216, 9344, 9472, 9600, 9728, 9856, 9984, 10112, 7424, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 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, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 3968, 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, -1, -1, -1, -1, -1, -1, 15104, -1, 15232, -1, 15360, -1, 15488, -1, 15616, -1, -1, -1, 15744, -1, -1, -1, 15872, 16000, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16128, 16128, 16128, 16128, 16128, 16128, 16256, -1, 16384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16512, 16512, 16512, 16512, 16512, 16512, 16512, 16512, 16640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16768, 16768, 16768, 16768, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7424, 17152, 17280, 17408, 17536, -1, 17664, -1, 17792, 17920, 18048, 7424, 7424, 18176, 7424, 18304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18432, 18560, 18688, 18816, 18944, -1, 19072, 19200, 19328, 19456, 19584, 19712, 19840, 19968, 7552, -1, -1, -1, -1, -1, -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, 20096, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, 20224, 9088, 20352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 20352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 20480, -1, 20608, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 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, 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, 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, 255, 255, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 255, 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, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 9, 9, 9, 9, 9, 9, 9, 255, 9, 9, 9, 9, 9, 9, 9, 255, 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, 255, 12, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 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, 255, 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, 255, 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, 255, 255, 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, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 17, 255, 255, 255, 255, 255, 255, 255, 255, 17, 17, 17, 17, 255, 255, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 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, 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, 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, 255, 255, 255, 255, 255, 255, 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, 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, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 255, 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, 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, 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, 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, 255, 255, 255, 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, 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, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 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, 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, 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, 255, 1, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 1, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 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, 255, 255, 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, 71, 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, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 255, 255, 255, 255, 84, 84, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 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, 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, 0, 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, 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, 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, 255, 255, 255, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 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, 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, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 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, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 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, 62, 62, 62, 62, 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, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 255, 255, 255, 255, 255, 255, 255, 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, 0, 0, 0, 0, 0, 0, 0, 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, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 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, 255, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 0, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 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-20111211-stable/lib/unictype/scripts_byname.gperf��������������������������������������������0000664�0000000�0000000�00000003143�11671051007�0023150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Unicode scripts. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ 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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/sy_c_ident.c����������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0021364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Syntax properties of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/sy_c_ident.h����������������������������������������������������0000664�0000000�0000000�00000017563�11671051007�0021405�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 6.0.0. */ #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-20111211-stable/lib/unictype/sy_c_whitespace.c�����������������������������������������������0000664�0000000�0000000�00000001737�11671051007�0022425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Syntax properties of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/sy_c_whitespace.h�����������������������������������������������0000664�0000000�0000000�00000004137�11671051007�0022427�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 6.0.0. */ #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 }, { 0x00003E00, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unictype/sy_java_ident.c�������������������������������������������������0000664�0000000�0000000�00000002037�11671051007�0022065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Syntax properties of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/sy_java_ident.h�������������������������������������������������0000664�0000000�0000000�00000057443�11671051007�0022105�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 6.0.0. */ #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[21 << 5]; unsigned short level3[126 * 16]; } u_java_ident = { { 0, 32, 64, 96, 128, 160, 160, 160, 160, 192, 224, 160, 160, 256, -1, 288, 320, 352, 384, 416, -1, -1, 448, -1, -1, -1, -1, 480, -1, 512, -1, -1, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 544, 576, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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 }, { 0, 128, 256, 256, 256, 384, 512, 640, 256, 768, 896, 1024, 1152, 1280, 1408, 1536, 1664, -1, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 256, 256, 3840, 3968, 4096, 4224, 4352, 256, 256, 256, 4480, 4608, 4736, 4864, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 256, 6272, 256, 256, 6400, 6528, 6656, 6784, 6912, 7040, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7168, 7296, 7424, 7552, 7680, -1, -1, -1, 7808, 7936, 8064, 8192, -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, 8320, 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, 8448, 256, 256, 256, 256, 256, 256, 256, 256, 256, 8576, 256, 256, 8704, 8832, 8960, 9088, 9216, 9344, 9472, 9600, 9728, 9856, 9984, 10112, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 10240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 10368, 10496, 10624, 10752, 256, 256, 10880, 11008, 11136, 11264, 11392, 11520, 11648, 11776, 11904, 12032, -1, 12160, 12288, 12416, 256, 12544, -1, -1, -1, -1, -1, -1, 12672, -1, 12800, -1, 12928, -1, 13056, -1, 13184, -1, -1, -1, -1, -1, -1, -1, 13312, 13440, -1, -1, -1, -1, -1, -1, -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, 13568, -1, 13696, -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, 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, 256, 256, 256, 256, 13952, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14080, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14208, 14336, 14464, -1, -1, -1, 14592, 14720, 14848, 256, 256, 14976, 15104, 15232, -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, 15360, 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, 15488, 256, 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, 256, 256, 256, 256, 15616, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15744, -1, 15872, 16000, -1, -1, -1, -1, -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, 0xa00a, 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, 0xaaaa, 0x0002, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaa2, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0x5556, 0x5555, 0x5555, 0x5555, 0x5555, 0x6555, 0x6596, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaa80, 0xaaaa, 0xaaff, 0xaa2a, 0x5555, 0xaa95, 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, 0x0055, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5150, 0x5555, 0x5555, 0x5554, 0x0000, 0x5a50, 0x5555, 0x0002, 0x0002, 0x0256, 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, 0xaaaa, 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, 0x0256, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x52a0, 0x5955, 0xa559, 0x96aa, 0xaaa0, 0x5a50, 0x5555, 0xaaaa, 0xaaaa, 0x025a, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x51a0, 0x5955, 0xa559, 0x96aa, 0x8aaa, 0x5a50, 0x5555, 0xaa82, 0xaaaa, 0x025a, 0x0800, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x5280, 0x5955, 0x8559, 0x6aaa, 0xaaaa, 0x5a50, 0x5555, 0xaaaa, 0x000a, 0x025a, 0x0000, 0x8000, 0x000a, 0x0000, 0x0000, 0x0020, 0xa200, 0x8000, 0x6a9a, 0x9955, 0x5555, 0xaaaa, 0xaaaa, 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, 0xa0a5, 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, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa880, 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, 0xa800, 0xaaaa, 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, 0xaaa8, 0xaaaa, 0x0000, 0x0800, 0xa950, 0xaaaa, 0x0000, 0x0000, 0xa950, 0xaaaa, 0x0000, 0x0000, 0xaa50, 0xaaaa, 0x0000, 0x0800, 0xaa58, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5f00, 0x5555, 0x5555, 0x5555, 0x2a55, 0xa42a, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xa56a, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xa800, 0x5555, 0xaa55, 0x5555, 0xaa55, 0x5aaa, 0x5555, 0x0000, 0x0000, 0x0000, 0xa000, 0xa800, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0x5555, 0x5555, 0x0001, 0xaaa5, 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, 0xaaaa, 0xaaaa, 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, 0x0a95, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x0000, 0x0000, 0x5000, 0x5555, 0xaa55, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, 0x5555, 0xaaaa, 0x5555, 0x02a5, 0x5555, 0x0005, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x5595, 0x5555, 0x5555, 0x0401, 0xaa90, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0x5555, 0x5555, 0x5555, 0x9555, 0xaaaa, 0xaaaa, 0x55aa, 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, 0xabff, 0xfffa, 0xaaa2, 0x2aaa, 0xaaaa, 0xaaaa, 0x0000, 0xa800, 0x0000, 0x0000, 0x0000, 0xaaa0, 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, 0xaaa5, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 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, 0xaa00, 0xaaaa, 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, 0xaaaa, 0x25aa, 0x0000, 0x0000, 0x0000, 0xaaaa, 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, 0x8028, 0xaaa0, 0xaaaa, 0x0000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x000a, 0x1010, 0x0040, 0x0000, 0x0000, 0x5540, 0xaaaa, 0xaaaa, 0xaaa8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, 0xa955, 0xaaaa, 0x5555, 0xaaa5, 0x5555, 0x5555, 0x0005, 0xaa2a, 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, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5554, 0x9555, 0xaaaa, 0x0040, 0xa500, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x8000, 0xaa4a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4151, 0x5001, 0xaa84, 0xaaaa, 0xaaaa, 0xa02a, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x8002, 0x8002, 0x8002, 0xaaaa, 0x8000, 0x8000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 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, 0xa000, 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, 0x9555, 0xaaaa, 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, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0x0000, 0xa002, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xa000, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xa000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x28a8, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaaa0, 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, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0015, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0x9555, 0xaaaa, 0xaaaa, 0xaaaa, 0x5aaa, 0x5555, 0xaaaa, 0xaaaa, 0x0015, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5555, 0xae95, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 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, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 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, 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, 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-20111211-stable/lib/unictype/sy_java_whitespace.c��������������������������������������������0000664�0000000�0000000�00000001762�11671051007�0023122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Syntax properties of Unicode characters. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unictype/sy_java_whitespace.h��������������������������������������������0000664�0000000�0000000�00000004142�11671051007�0023122�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 6.0.0. */ #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 }, { 0x00003600, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unigbrk.in.h�������������������������������������������������������������0000664�0000000�0000000�00000010055�11671051007�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks in Unicode strings. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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" <http://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 }; /* Return the Grapheme_Cluster_Break property of a Unicode character. */ extern int uc_graphemeclusterbreak_property (ucs4_t uc); /* ========================================================================= */ /* 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); /* 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); extern const uint16_t * u16_grapheme_next (const uint16_t *s, const uint16_t *end); extern const uint32_t * u32_grapheme_next (const uint32_t *s, const uint32_t *end); /* 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); extern const uint16_t * u16_grapheme_prev (const uint16_t *s, const uint16_t *start); extern const uint32_t * u32_grapheme_prev (const uint32_t *s, const uint32_t *start); /* 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); /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNIGBRK_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unigbrk/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016701�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unigbrk/gbrkprop.h�������������������������������������������������������0000664�0000000�0000000�00000127010�11671051007�0020701�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 6.0.0. */ #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[(78 << 7) / 2]; } unigbrkprop = { { 0, 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1024 }, { 0, 64, -1, -1, -1, -1, 128, -1, -1, 192, -1, 256, 320, 384, 448, 512, 576, -1, 640, 704, 768, 832, 896, 960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, -1, -1, 1792, -1, -1, -1, -1, -1, -1, -1, 1856, 1920, 1984, 2048, 2112, 2176, 2240, -1, 2304, 2368, 2432, 2496, -1, 2560, -1, -1, -1, -1, 2624, 2688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2752, 2816, 2880, -1, -1, -1, -1, 2944, 3008, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3072, 3136, -1, -1, 3200, 3264, 3328, 3392, 3456, 3520, -1, 3584, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 3648, 3712, 3776, 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, 4160, -1, -1, -1, -1, -1, 4224, 4288, -1, 4352, -1, -1, -1, 4416, -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, 4544, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4672, 4736, 4800, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, 4928, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x40, 0x04, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x34, 0x40, 0x44, 0x44, 0x04, 0x40, 0x04, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x40, 0x44, 0x44, 0x44, 0x44, 0x40, 0x44, 0x40, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x04, 0x66, 0x46, 0x44, 0x44, 0x44, 0x64, 0x66, 0x46, 0x66, 0x40, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x64, 0x46, 0x44, 0x04, 0x60, 0x06, 0x60, 0x46, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x66, 0x46, 0x04, 0x00, 0x40, 0x04, 0x40, 0x44, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x66, 0x46, 0x44, 0x44, 0x40, 0x64, 0x60, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x46, 0x44, 0x04, 0x60, 0x06, 0x60, 0x46, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x64, 0x06, 0x00, 0x66, 0x06, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x66, 0x06, 0x44, 0x04, 0x44, 0x44, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x46, 0x66, 0x64, 0x06, 0x64, 0x06, 0x66, 0x44, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x46, 0x44, 0x04, 0x66, 0x06, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x66, 0x44, 0x04, 0x04, 0x66, 0x66, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x66, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x55, 0x55, 0x65, 0x40, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x66, 0x44, 0x44, 0x44, 0x40, 0x04, 0x00, 0x55, 0x55, 0x05, 0x00, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x64, 0x44, 0x44, 0x04, 0x44, 0x00, 0x00, 0x40, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x46, 0x44, 0x64, 0x44, 0x44, 0x44, 0x46, 0x64, 0x46, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x44, 0x00, 0x00, 0x44, 0x04, 0x66, 0x06, 0x60, 0x66, 0x66, 0x66, 0x00, 0x40, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x46, 0x64, 0x66, 0x66, 0x46, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x46, 0x44, 0x44, 0x44, 0x66, 0x66, 0x66, 0x66, 0x64, 0x46, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x66, 0x46, 0x64, 0x66, 0x00, 0x00, 0x66, 0x64, 0x66, 0x66, 0x46, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x64, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x64, 0x44, 0x44, 0x44, 0x04, 0x64, 0x64, 0x46, 0x44, 0x44, 0x44, 0x64, 0x66, 0x66, 0x46, 0x44, 0x44, 0x44, 0x44, 0x04, 0x40, 0x44, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x44, 0x44, 0x64, 0x64, 0x66, 0x66, 0x64, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x44, 0x44, 0x66, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x44, 0x66, 0x46, 0x46, 0x44, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x44, 0x44, 0x44, 0x44, 0x66, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x64, 0x44, 0x44, 0x44, 0x04, 0x00, 0x40, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x44, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x03, 0x00, 0x00, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x46, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x44, 0x44, 0x44, 0x44, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x07, 0x00, 0x44, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x44, 0x44, 0x66, 0x64, 0x66, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x44, 0x64, 0x46, 0x64, 0x46, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x44, 0x54, 0x45, 0x54, 0x50, 0x05, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x46, 0x66, 0x64, 0x06, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, 0x00, 0x90, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x44, 0x40, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x46, 0x44, 0x64, 0x46, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x46, 0x44, 0x00, 0x60, 0x44, 0x44, 0x34, 0x33, 0x33, 0x33, 0x43, 0x44, 0x44, 0x44, 0x04, 0x40, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unigbrk/u16-grapheme-breaks.c��������������������������������������������0000664�0000000�0000000�00000002334�11671051007�0022515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" void u16_grapheme_breaks (const uint16_t *s, size_t n, char *p) { ucs4_t prev; int mblen; prev = 0; for (; n > 0; s += mblen, p += mblen, n -= mblen) { ucs4_t next; mblen = u16_mbtouc (&next, s, n); p[0] = uc_is_grapheme_break (prev, next); if (mblen > 1) p[1] = 0; prev = next; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unigbrk/u16-grapheme-next.c����������������������������������������������0000664�0000000�0000000�00000002401�11671051007�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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-20111211-stable/lib/unigbrk/u16-grapheme-prev.c����������������������������������������������0000664�0000000�0000000�00000002621�11671051007�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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-20111211-stable/lib/unigbrk/u32-grapheme-breaks.c��������������������������������������������0000664�0000000�0000000�00000002226�11671051007�0022513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" void u32_grapheme_breaks (const uint32_t *s, size_t n, char *p) { ucs4_t prev; size_t i; prev = 0; for (i = 0; i < n; i++) { ucs4_t next; u32_mbtouc (&next, &s[i], 1); p[i] = uc_is_grapheme_break (prev, next); prev = next; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unigbrk/u32-grapheme-next.c����������������������������������������������0000664�0000000�0000000�00000002347�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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-20111211-stable/lib/unigbrk/u32-grapheme-prev.c����������������������������������������������0000664�0000000�0000000�00000002516�11671051007�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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-20111211-stable/lib/unigbrk/u8-grapheme-breaks.c���������������������������������������������0000664�0000000�0000000�00000002500�11671051007�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2001-2003, 2006-2011 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 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unigbrk.h" #include "unistr.h" void u8_grapheme_breaks (const uint8_t *s, size_t n, char *p) { ucs4_t prev; int mblen; prev = 0; for (; n > 0; s += mblen, p += mblen, n -= mblen) { ucs4_t next; int i; mblen = u8_mbtouc (&next, s, n); p[0] = uc_is_grapheme_break (prev, next); for (i = 1; i < mblen; i++) p[i] = 0; prev = next; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unigbrk/u8-grapheme-next.c�����������������������������������������������0000664�0000000�0000000�00000002373�11671051007�0022150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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-20111211-stable/lib/unigbrk/u8-grapheme-prev.c�����������������������������������������������0000664�0000000�0000000�00000002611�11671051007�0022141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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-20111211-stable/lib/unigbrk/uc-gbrk-prop.c���������������������������������������������������0000664�0000000�0000000�00000003040�11671051007�0021352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster break property function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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; unsigned char lookup3 = unigbrkprop.level3[lookup2 + index3 / 2]; return (lookup3 >> ((uc & 1) << 2)) & 0x0f; } } } return GBP_OTHER; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unigbrk/uc-is-grapheme-break.c�������������������������������������������0000664�0000000�0000000�00000012640�11671051007�0022740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster break function. Copyright (C) 2010-2011 Free Software Foundation, Inc. Written by Ben Pfaff <blp@cs.stanford.edu>, 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 <http://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 ? false : \ \ /* GB9a */ \ (B) == GBP_SPACINGMARK ? false : \ \ /* GB9b */ \ (A) == GBP_PREPEND ? false \ \ /* GB10 */ \ : 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)) static const unsigned short int gb_table[12] = { 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 */ }; 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-20111211-stable/lib/unigbrk/ulc-grapheme-breaks.c��������������������������������������������0000664�0000000�0000000�00000010112�11671051007�0022656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks function. Copyright (C) 2001-2003, 2006-2011 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 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 <http://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-20111211-stable/lib/unilbrk.in.h�������������������������������������������������������������0000664�0000000�0000000�00000007720�11671051007�0017472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of Unicode strings. Copyright (C) 2001-2003, 2005-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 *p); extern void u16_possible_linebreaks (const uint16_t *s, size_t n, const char *encoding, char *p); extern void u32_possible_linebreaks (const uint32_t *s, size_t n, const char *encoding, char *p); extern void ulc_possible_linebreaks (const char *s, size_t n, const char *encoding, char *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 *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 *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 *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 *p); #ifdef __cplusplus } #endif #endif /* _UNILBRK_H */ ������������������������������������������������gnulib-20111211-stable/lib/unilbrk/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016706�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unilbrk/lbrkprop1.h������������������������������������������������������0000664�0000000�0000000�00000002233�11671051007�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Line breaking properties of Unicode characters. */ /* Generated automatically by gen-lbrk for Unicode 6.0.0. */ /* Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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[166 << 7]; } lbrkprop_t; extern const lbrkprop_t unilbrkprop; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unilbrk/lbrkprop2.h������������������������������������������������������0000664�0000000�0000000�00000600634�11671051007�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Line breaking properties of Unicode characters. */ /* Generated automatically by gen-lbrk for Unicode 6.0.0. */ /* Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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, -1, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096, 4224, 4352, 4480, 4608, 256, 256, 256, 256, 4736, 4864, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 6272, 256, 6400, 256, 256, 6528, 6656, 6784, 6912, 7040, 7168, 7296, 7424, 7552, 7680, 7808, 7936, 8064, 8192, 8320, 8448, 8576, 8704, 256, 256, 256, 8832, 256, 256, 8960, -1, 9088, 9216, 9344, 9472, 9600, 9728, 9856, 9984, 10112, 10240, 10368, 10496, 10624, 10752, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 10880, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 11008, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 11136, 256, 256, 11264, 11392, 256, 11520, 11648, 11776, 11904, 12032, 12160, 12288, 12416, 12544, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13056, 13184, 13312, 13440, 12672, 12800, 12928, 13568, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9856, 9856, 9856, 9856, 13696, 13824, 256, 256, 13952, 14080, 14208, 14336, 14464, 14592, 14720, 14848, 14976, 15104, -1, 15232, 15360, 15488, 256, 15616, -1, -1, -1, -1, -1, -1, 15744, -1, 15872, -1, 16000, -1, 16128, -1, 16256, -1, -1, -1, 16384, -1, -1, -1, 16512, 16640, -1, -1, -1, -1, -1, -1, -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, 16768, -1, 16896, -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, 17152, 17280, 256, 17408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 17536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17664, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 17792, 17920, 18048, 18176, -1, 18304, -1, 18432, 18560, 18688, 256, 256, 18816, 256, 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, 19072, 19200, 19328, 19456, 19584, -1, 19712, 19840, 19968, 20096, 20224, 20352, 20480, 20608, 7680, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 9856, 20736, 20864, -1, 20992, 21120, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_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_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_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_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_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_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_XX, 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_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_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, 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_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_XX, LBP_PR, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_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_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_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_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_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_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_XX, 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_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_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, 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_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_XX, LBP_XX, LBP_XX, 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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, 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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_XX, LBP_XX, LBP_XX, LBP_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_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, LBP_XX, 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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_XX, LBP_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_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_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_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_CM, 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_XX, LBP_XX, LBP_XX, LBP_XX, 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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, LBP_XX, LBP_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_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_AL, LBP_AL, LBP_AL, LBP_AL, 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_AI, LBP_AI, LBP_AI, LBP_AI, 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_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_AI, 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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_AL, 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_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_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_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_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_AI, LBP_AL, LBP_AL, LBP_AL, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_AL, LBP_AL, LBP_AL, LBP_EX, LBP_EX, 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_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_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_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_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_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, 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_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_ID, 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_ID, 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_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_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_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_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_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_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_XX, 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_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_CM, LBP_CM, LBP_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_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_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, 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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_OP, LBP_CL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_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_AL, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, 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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, 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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_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_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, 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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_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_AL, LBP_AL, LBP_AL, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_AL, 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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_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_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_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_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_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_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_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_XX, 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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_AL, LBP_XX, LBP_AL, LBP_XX, 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_XX, LBP_XX, 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_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_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_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_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_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_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-20111211-stable/lib/unilbrk/lbrktables.c�����������������������������������������������������0000664�0000000�0000000�00000007462�11671051007�0021210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking auxiliary tables. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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[25][25] = { /* 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 */ /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* EX */ { 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* 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, }, /* "" */ /* 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-20111211-stable/lib/unilbrk/lbrktables.h�����������������������������������������������������0000664�0000000�0000000�00000007172�11671051007�0021213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking auxiliary tables. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "unitypes.h" /* Line breaking classification. */ enum { /* Values >= 25 are resolved at run time. */ LBP_BK = 25, /* 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 = 26, /* 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 = 27, /* zero width space */ LBP_GL = 1, /* non-breaking (glue) */ LBP_SP = 28, /* 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 = 29, /* 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 = 30, /* ambiguous (alphabetic or ideograph) */ LBP_AL = 18, /* ordinary alphabetic and symbol characters */ LBP_H2 = 19, /* Hangul LV syllable */ LBP_H3 = 20, /* Hangul LVT syllable */ LBP_ID = 21, /* ideographic */ LBP_JL = 22, /* Hangul L Jamo */ LBP_JV = 23, /* Hangul V Jamo */ LBP_JT = 24, /* Hangul T Jamo */ LBP_SA = 31, /* complex context (South East Asian) */ LBP_XX = 32 /* 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[25][25]; /* We don't support line breaking of complex-context dependent characters (Thai, Lao, Myanmar, Khmer) yet, because it requires dictionary lookup. */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unilbrk/u16-possible-linebreaks.c����������������������������������������0000664�0000000�0000000�00000012426�11671051007�0023425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-16 strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) { 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); while (s < s_end) { 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; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unilbrk/u16-width-linebreaks.c�������������������������������������������0000664�0000000�0000000�00000006035�11671051007�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-16 strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unilbrk/u32-possible-linebreaks.c����������������������������������������0000664�0000000�0000000�00000012123�11671051007�0023415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-32 strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) { 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? */ while (s < s_end) { 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++; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unilbrk/u32-width-linebreaks.c�������������������������������������������0000664�0000000�0000000�00000005700�11671051007�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-32 strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unilbrk/u8-possible-linebreaks.c�����������������������������������������0000664�0000000�0000000�00000016504�11671051007�0023347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-8 strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) { 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); while (s < s_end) { 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; } } #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-20111211-stable/lib/unilbrk/u8-width-linebreaks.c��������������������������������������������0000664�0000000�0000000�00000011635�11671051007�0022646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of UTF-8 strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unilbrk/ulc-common.c�����������������������������������������������������0000664�0000000�0000000�00000002730�11671051007�0021125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking auxiliary functions. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unilbrk/ulc-common.h�����������������������������������������������������0000664�0000000�0000000�00000002156�11671051007�0021134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking auxiliary functions. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unilbrk/ulc-possible-linebreaks.c����������������������������������������0000664�0000000�0000000�00000013574�11671051007�0023602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unilbrk/ulc-width-linebreaks.c�������������������������������������������0000664�0000000�0000000�00000015635�11671051007�0023101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Line breaking of strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniname.in.h�������������������������������������������������������������0000664�0000000�0000000�00000002770�11671051007�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Association between Unicode characters and their names. Copyright (C) 2000-2002, 2005, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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); #define UNINAME_INVALID ((ucs4_t) 0xFFFF) #ifdef __cplusplus } #endif #endif /* _UNINAME_H */ ��������gnulib-20111211-stable/lib/uniname/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016674�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniname/gen-uninames.lisp������������������������������������������������0000775�0000000�0000000�00000032166�11671051007�0022166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/local/bin/clisp -C ;;; Creation of gnulib's uninames.h from the UnicodeData.txt table. ;;; Bruno Haible 2000-12-28 (defparameter add-comments nil) (defstruct unicode-char (code nil :type integer) (name nil :type string) word-indices word-indices-index ) (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) (declare (type string inputfile outputfile)) #+UNICODE (setq *default-file-encoding* charset:utf-8) (let ((all-chars '())) ;; 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)) ; Transform the code so that it fits in 16 bits. In ; Unicode 5.1 the following ranges are used. ; 0x00000..0x04DFF >>12= 0x00..0x04 -> 0x0..0x4 ; 0x0A000..0x0AAFF >>12= 0x0A -> 0x5 ; 0x0F900..0x0FFFF >>12= 0x0F -> 0x6 ; 0x10000..0x10A58 >>12= 0x10 -> 0x7 ; 0x12000..0x12473 >>12= 0x12 -> 0x8 ; 0x1D000..0x1D7FF >>12= 0x1D -> 0x9 ; 0x1F000..0x1F093 >>12= 0x1F -> 0xA ; 0x2F800..0x2FAFF >>12= 0x2F -> 0xB ; 0xE0000..0xE00FF >>12= 0xE0 -> 0xC (flet ((transform (x) (dpb (case (ash x -12) ((#x00 #x01 #x02 #x03 #x04) (ash x -12)) (#x0A 5) (#x0F 6) (#x10 7) (#x12 8) (#x1D 9) (#x1F #xA) (#x2F #xB) (#xE0 #xC) (t (error "Update the transform function for 0x~5,'0X" x)) ) (byte 8 12) x )) ) (push (make-unicode-char :code (transform code) :name name-string) all-chars ) ) ) ) ) ) ) ) ) (setq all-chars (nreverse all-chars)) ;; Split into words. (let ((words-by-length (make-array 0 :adjustable t))) (dolist (name (list* "HANGUL SYLLABLE" "CJK COMPATIBILITY" (mapcar #'unicode-char-name all-chars))) (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 "~%") (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 { uint16_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")) (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) (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 (sort all-chars (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)) ) (let ((i 0)) (dolist (uc all-chars) (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 code; uint32_t name:24; }~%") (format ostream "#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)~%__attribute__((__packed__))~%#endif~%") (format ostream "unicode_name_to_code[~D] = {~%" (length all-chars) ) (dolist (uc all-chars) (format ostream " { 0x~4,'0X, ~D }," (unicode-char-code 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 code; uint32_t name:24; }~%") (format ostream "#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)~%__attribute__((__packed__))~%#endif~%") (format ostream "unicode_code_to_name[~D] = {~%" (length all-chars) ) (dolist (uc (sort (copy-list all-chars) #'< :key #'unicode-char-code)) (format ostream " { 0x~4,'0X, ~D }," (unicode-char-code 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)) ) (format ostream "#define UNICODE_CHARNAME_MAX_WORDS ~D~%" (reduce #'max (mapcar (lambda (uc) (length (unicode-char-word-indices uc))) all-chars)) ) ) ) ) ) (main (first *args*) (second *args*)) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniname/uniname.c��������������������������������������������������������0000664�0000000�0000000�00000043136�11671051007�0020503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Association between Unicode characters and their names. Copyright (C) 2000-2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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> #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 code; uint32_t name:24; } unicode_name_to_code[16626] = ...; static const struct { uint16_t code; uint32_t name:24; } unicode_code_to_name[16626] = ...; #define UNICODE_CHARNAME_MAX_LENGTH 83 #define UNICODE_CHARNAME_MAX_WORDS 13 */ /* 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; unsigned int i; 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; } 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, unsigned int 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; } /* 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 { const uint16_t *words; /* Transform the code so that it fits in 16 bits. */ switch (c >> 12) { case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: break; case 0x0A: c -= 0x05000; break; case 0x0F: c -= 0x09000; break; case 0x10: c -= 0x09000; break; case 0x12: c -= 0x0A000; break; case 0x1D: c -= 0x14000; break; case 0x1F: c -= 0x15000; break; case 0x2F: c -= 0x24000; break; case 0xE0: c -= 0xD4000; break; default: return NULL; } { /* Binary search in unicode_code_to_name. */ unsigned int i1 = 0; unsigned int i2 = SIZEOF (unicode_code_to_name); for (;;) { unsigned int i = (i1 + i2) >> 1; if (unicode_code_to_name[i].code == c) { words = &unicode_names[unicode_code_to_name[i].name]; break; } else if (unicode_code_to_name[i].code < c) { if (i1 == i) { words = NULL; break; } /* Note here: i1 < i < i2. */ i1 = i; } else if (unicode_code_to_name[i].code > c) { if (i2 == i) { words = NULL; break; } /* Note here: i1 <= i < i2. */ i2 = i; } } } if (words != NULL) { /* Found it in unicode_code_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) { unsigned int 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: { /* 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) { unsigned int n1 = p2 - p1; unsigned int n2 = p3 - p2; unsigned int 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; } } } } } if (false) filled_words: { /* Multiply by 2, to simplify later comparisons. */ unsigned int words_length = wordptr - words; { int i = words_length - 1; words[i] = 2 * words[i]; for (; --i >= 0; ) words[i] = 2 * words[i] + 1; } /* Binary search in unicode_name_to_code. */ { unsigned int i1 = 0; unsigned int i2 = SIZEOF (unicode_name_to_code); for (;;) { unsigned int i = (i1 + i2) >> 1; const uint16_t *w = words; const uint16_t *p = &unicode_names[unicode_name_to_code[i].name]; unsigned int 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) { unsigned int c = unicode_name_to_code[i].code; /* Undo the transformation to 16-bit space. */ static const unsigned int offset[13] = { 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x05000, 0x09000, 0x09000, 0x0A000, 0x14000, 0x15000, 0x24000, 0xD4000 }; return c + offset[c >> 12]; } } } } name_not_found: ; } } } return UNINAME_INVALID; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniname/uninames.h�������������������������������������������������������0000664�0000000�0000000�00005445456�11671051007�0020713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* * uninames.h * * Unicode character name table. * Generated automatically by the gen-uninames utility. */ static const char unicode_name_words[39544] = { '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', 'S', 'A', 'T', 'A', 'U', 'A', 'V', 'A', 'X', 'A', 'Y', 'B', 'A', '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', 'M', 'C', 'O', 'C', 'U', 'C', 'Y', 'D', '2', 'D', 'A', 'D', 'B', 'D', 'E', 'D', 'I', 'D', 'L', 'D', 'M', 'D', 'O', 'D', 'U', 'D', 'V', 'D', 'Z', 'E', '2', 'E', 'A', 'E', 'E', 'E', 'F', 'E', 'H', 'E', 'I', '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', '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', 'I', 'G', 'N', 'G', 'O', 'G', 'U', 'G', 'V', 'G', 'Y', 'H', 'A', 'H', 'E', 'H', 'G', 'H', 'I', 'H', 'K', 'H', 'O', 'H', 'P', 'H', 'U', 'H', 'V', 'H', 'Z', 'I', 'B', 'I', 'E', 'I', 'F', 'I', 'G', 'I', 'H', 'I', 'I', 'I', 'J', 'I', 'L', 'I', 'M', 'I', 'N', 'I', 'O', 'I', 'P', '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', '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', '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', 'L', 'O', 'M', 'O', 'N', 'O', 'O', 'O', 'P', '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', 'O', 'Q', 'P', 'Q', 'U', 'Q', 'Y', 'R', 'A', 'R', 'E', 'R', 'I', 'R', 'O', 'R', 'R', 'R', 'U', 'R', 'Y', 'S', 'A', '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', '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', 'U', 'V', 'Y', 'W', 'A', 'W', 'B', 'W', 'E', 'W', 'G', 'W', 'I', 'W', 'O', 'W', 'U', 'W', 'V', 'X', 'A', 'X', 'E', 'X', 'G', 'X', 'I', 'X', 'O', 'X', 'U', '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', 'W', 'A', 'A', 'Y', 'A', 'B', '2', 'A', 'D', 'I', 'A', 'D', 'O', 'A', 'G', 'E', 'A', 'I', 'N', 'A', 'I', 'R', 'A', 'L', 'F', 'A', 'L', 'I', 'A', 'L', 'L', 'A', 'N', 'D', 'A', 'N', 'G', 'A', 'N', 'N', 'A', 'N', 'O', 'A', 'P', 'L', 'A', 'R', 'C', 'A', 'R', 'E', 'A', 'R', 'M', 'A', 'S', 'H', 'A', 'U', 'E', 'A', 'W', 'E', 'A', 'X', 'E', 'A', 'Y', 'B', 'A', 'Z', 'U', 'B', 'A', 'A', 'B', 'A', 'D', 'B', 'A', 'G', 'B', 'A', 'L', 'B', 'A', 'N', 'B', 'A', 'P', 'B', 'A', 'R', 'B', 'A', 'T', 'B', 'A', 'X', 'B', 'B', 'A', 'B', 'B', 'E', 'B', 'B', 'I', 'B', 'B', 'O', 'B', 'B', 'U', 'B', 'B', 'Y', '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', 'O', 'B', 'O', 'P', 'B', 'O', 'T', 'B', 'O', 'W', 'B', 'O', 'X', 'B', 'U', 'O', 'B', 'U', 'P', 'B', 'U', 'R', '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', 'L', 'C', 'A', 'N', 'C', 'A', 'P', 'C', 'A', 'T', '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', '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', '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', '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', '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', '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', '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', 'D', 'D', 'E', 'E', 'N', 'E', 'G', 'G', 'E', 'I', 'E', 'E', 'I', 'S', 'E', 'K', 'S', 'E', 'N', 'D', 'E', 'N', 'G', 'E', 'N', 'N', 'E', 'O', 'H', 'E', 'R', 'A', 'E', 'R', 'G', 'E', 'R', 'R', 'E', 'R', 'S', 'E', 'S', 'H', 'E', 'S', 'O', 'E', 'T', 'A', 'E', 'T', 'H', 'E', 'W', 'E', 'E', 'X', 'O', 'E', 'Y', 'E', 'E', 'Z', 'H', 'F', 'A', 'A', 'F', 'A', 'N', 'F', 'A', 'P', 'F', 'A', 'T', 'F', 'A', 'X', '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', 'O', 'F', 'O', 'P', 'F', 'O', 'R', 'F', 'O', 'X', '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', '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', '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', 'M', 'G', 'I', 'P', 'G', 'I', 'T', 'G', 'I', 'X', 'G', 'J', 'E', 'G', 'L', 'A', 'G', 'O', 'A', 'G', 'O', 'O', 'G', 'O', 'P', 'G', 'O', 'T', 'G', 'O', 'X', 'G', 'P', 'A', 'G', 'R', 'U', 'G', 'U', '2', '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', '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', 'L', 'H', 'A', 'N', 'H', 'A', 'P', 'H', 'A', 'R', 'H', 'A', 'T', 'H', 'A', 'X', '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', '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', 'N', 'H', 'O', 'O', 'H', 'O', 'P', 'H', 'O', 'T', 'H', 'O', 'X', 'H', 'P', 'A', 'H', 'T', 'A', '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', 'Z', 'G', 'H', 'Z', 'T', 'H', 'Z', 'W', 'H', 'Z', 'Z', 'I', '-', 'A', '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', 'N', 'G', 'I', 'N', 'I', 'I', 'N', 'N', 'I', 'N', 'Y', 'I', 'O', 'R', 'I', 'R', 'I', 'I', 'S', 'H', 'I', 'S', 'S', 'J', 'A', 'A', 'J', 'A', 'R', 'J', 'E', 'E', 'J', 'E', 'H', 'J', 'E', 'R', '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', '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', 'F', 'K', 'A', 'H', 'K', 'A', 'I', 'K', 'A', 'K', 'K', 'A', 'L', 'K', 'A', 'N', 'K', 'A', 'P', 'K', 'A', 'T', 'K', 'A', 'X', 'K', 'A', 'Y', 'K', 'E', 'E', 'K', 'E', 'H', 'K', 'E', 'N', 'K', 'E', 'P', 'K', 'E', 'T', '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', 'D', 'K', 'I', 'E', 'K', 'I', 'H', 'K', 'I', 'I', 'K', 'I', 'N', 'K', 'I', 'P', 'K', 'I', 'T', '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', 'H', 'K', 'O', 'N', 'K', 'O', 'O', 'K', 'O', 'P', 'K', 'O', 'T', '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', 'L', 'K', 'U', 'N', 'K', 'U', 'O', 'K', 'U', 'P', 'K', 'U', 'R', 'K', 'U', 'T', 'K', 'U', 'X', 'K', 'V', 'A', 'K', 'W', 'A', 'K', 'W', 'E', 'K', 'W', 'I', 'K', 'W', 'O', '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', 'L', 'L', 'A', 'M', 'L', 'A', 'O', 'L', 'A', 'P', 'L', 'A', 'S', 'L', 'A', 'T', 'L', 'A', 'W', 'L', 'A', 'X', 'L', 'C', 'E', 'L', 'C', 'I', 'L', 'D', '2', 'L', 'E', 'E', 'L', 'E', 'G', 'L', 'E', 'K', 'L', 'E', 'O', 'L', 'E', 'P', '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', 'T', 'L', 'I', 'X', 'L', 'J', 'E', 'L', 'L', 'A', 'L', 'O', 'A', 'L', 'O', 'G', 'L', 'O', 'O', 'L', 'O', 'P', 'L', 'O', 'T', 'L', 'O', 'W', 'L', 'O', 'X', 'L', 'U', '2', 'L', 'U', '3', 'L', 'U', 'E', 'L', 'U', 'H', 'L', 'U', 'L', 'L', 'U', 'M', 'L', 'U', 'O', 'L', 'U', 'P', 'L', 'U', 'R', 'L', 'U', 'T', 'L', 'U', 'X', 'L', 'W', 'A', 'L', 'W', 'E', 'L', 'W', 'I', 'L', 'W', 'O', 'L', 'Y', 'P', 'L', 'Y', 'R', 'L', 'Y', 'T', 'L', 'Y', 'X', 'L', 'Y', 'Y', 'M', 'A', '2', 'M', 'A', 'A', 'M', 'A', 'H', 'M', 'A', 'I', 'M', 'A', 'N', 'M', 'A', 'P', 'M', 'A', 'R', 'M', 'A', 'T', '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', 'G', 'A', 'M', 'G', 'E', 'M', 'G', 'O', 'M', 'G', 'U', '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', 'U', 'E', 'M', 'U', 'G', 'M', 'U', 'M', 'M', 'U', 'O', 'M', 'U', 'P', 'M', 'U', 'R', 'M', 'U', 'T', 'M', 'U', 'X', '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', 'A', 'N', 'A', 'G', 'N', 'A', 'H', 'N', 'A', 'M', 'N', 'A', 'P', 'N', 'A', 'R', 'N', 'A', 'X', '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', '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', 'G', 'N', 'N', 'O', 'N', 'O', 'A', 'N', 'O', 'O', 'N', 'O', 'P', 'N', 'O', 'R', 'N', 'O', 'T', 'N', 'O', 'W', 'N', 'O', 'X', 'N', 'R', 'A', 'N', 'R', 'E', 'N', 'R', 'O', 'N', 'R', 'U', 'N', 'R', 'Y', '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', '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', 'H', 'M', 'O', 'I', 'L', 'O', 'L', 'D', 'O', 'L', 'E', 'O', 'N', 'E', 'O', 'N', 'G', 'O', 'N', 'N', 'O', 'N', 'U', 'O', 'O', 'N', 'O', 'O', 'U', 'O', 'T', 'T', 'O', 'T', 'U', 'O', 'U', 'T', 'P', 'A', 'A', 'P', 'A', 'D', 'P', 'A', 'N', 'P', 'A', 'P', 'P', 'A', 'R', 'P', 'A', 'T', 'P', 'A', 'W', 'P', 'A', 'X', 'P', 'E', 'E', 'P', 'E', 'H', 'P', 'E', 'R', 'P', 'E', 'S', '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', 'P', 'P', 'I', 'T', 'P', 'I', 'X', 'P', 'L', 'A', 'P', 'O', 'A', 'P', 'O', 'O', 'P', 'O', 'P', 'P', 'O', 'T', 'P', 'O', 'X', 'P', 'P', 'A', 'P', 'P', 'M', 'P', 'S', 'I', 'P', 'T', 'E', 'P', 'U', '2', 'P', 'U', 'O', 'P', 'U', 'P', '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', 'E', 'E', 'Q', 'H', 'A', 'Q', 'H', 'E', 'Q', 'H', 'I', 'Q', 'H', 'O', 'Q', 'H', 'U', 'Q', 'I', 'E', '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', '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', 'M', 'R', 'A', 'N', 'R', 'A', 'P', 'R', 'A', 'T', 'R', 'A', 'X', 'R', 'A', 'Y', 'R', 'D', 'O', 'R', 'E', 'D', 'R', 'E', 'E', 'R', 'E', 'H', 'R', 'E', 'P', 'R', 'E', 'X', 'R', 'H', 'A', 'R', 'H', 'O', 'R', 'I', 'I', 'R', 'I', 'N', 'R', 'I', 'P', 'R', 'J', 'E', 'R', 'O', '2', 'R', 'O', 'A', 'R', 'O', 'C', 'R', 'O', 'D', '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', 'M', 'R', 'U', 'N', 'R', 'U', 'O', 'R', 'U', 'P', 'R', 'U', 'R', 'R', 'U', 'T', 'R', 'U', 'X', 'R', 'W', 'A', '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', 'L', 'S', 'A', 'N', 'S', 'A', 'P', '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', 'Y', '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', 'W', 'S', 'N', 'A', 'S', 'O', 'A', 'S', 'O', 'F', 'S', 'O', 'N', 'S', 'O', 'O', 'S', 'O', 'P', 'S', 'O', 'T', 'S', 'O', 'U', 'S', 'O', 'W', 'S', 'O', 'X', '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', 'M', 'S', 'U', 'N', 'S', 'U', 'O', 'S', 'U', 'P', 'S', 'U', 'R', 'S', 'U', 'T', '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', 'G', 'T', 'A', 'H', 'T', 'A', 'I', 'T', 'A', 'K', 'T', 'A', 'M', 'T', 'A', 'N', 'T', 'A', 'O', 'T', 'A', 'P', 'T', 'A', 'R', 'T', 'A', 'T', 'T', 'A', 'U', 'T', 'A', 'V', 'T', 'A', 'W', 'T', 'A', 'X', 'T', 'E', 'E', 'T', 'E', 'H', 'T', 'E', 'N', 'T', 'E', 'P', 'T', 'E', 'T', 'T', 'E', 'X', 'T', 'H', 'A', 'T', 'H', 'E', 'T', 'H', 'I', 'T', 'H', 'O', 'T', 'H', 'U', 'T', 'H', 'Z', 'T', 'I', 'E', 'T', 'I', 'I', 'T', 'I', 'L', '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', 'T', 'T', 'O', 'X', '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', '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', 'E', 'E', 'U', 'E', 'Y', 'U', 'K', 'U', 'U', 'L', 'U', 'U', 'N', 'A', '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', 'U', 'U', 'Z', '3', 'U', 'Z', 'U', 'V', 'A', 'A', 'V', 'A', 'I', 'V', 'A', 'P', 'V', 'A', 'T', 'V', 'A', 'V', 'V', 'A', 'X', 'V', 'E', 'E', 'V', 'E', 'H', 'V', 'E', 'P', 'V', 'E', 'W', 'V', 'E', 'X', 'V', 'I', 'E', 'V', 'I', 'N', 'V', 'I', 'P', 'V', 'I', 'T', 'V', 'I', 'X', 'V', 'O', 'O', 'V', 'O', 'P', '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', 'Y', 'P', 'V', 'Y', 'R', 'V', 'Y', 'T', 'V', 'Y', 'X', 'W', 'A', 'A', 'W', 'A', 'E', 'W', 'A', 'N', 'W', 'A', 'P', 'W', 'A', 'T', 'W', 'A', 'U', 'W', 'A', 'W', 'W', 'A', 'X', 'W', 'E', 'E', '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', 'X', 'W', 'U', 'N', 'W', 'U', 'O', 'X', 'A', 'A', 'X', 'A', 'N', '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', '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', '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', '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', 'T', 'Y', 'O', 'X', 'Y', 'U', 'O', 'Y', 'U', 'P', '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', 'P', 'Y', 'Y', 'R', 'Y', 'Y', 'T', 'Y', 'Y', 'X', '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', 'U', '5', 'Z', 'U', 'M', 'Z', 'U', 'O', 'Z', 'U', 'P', 'Z', 'U', 'R', 'Z', 'U', 'T', 'Z', 'U', 'X', 'Z', 'W', 'A', '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', 'A', 'R', 'U', 'A', 'D', 'A', 'K', 'A', 'D', 'E', 'G', 'A', 'E', 'S', 'C', 'A', 'H', 'A', 'D', 'A', 'H', 'S', 'A', 'A', 'I', 'L', 'M', 'A', 'I', 'N', 'N', 'A', 'I', 'N', 'U', 'A', 'L', 'A', 'N', 'A', 'L', 'E', 'F', 'A', 'L', 'F', 'A', 'A', 'L', 'L', 'I', 'A', 'L', 'L', 'O', 'A', 'L', 'P', 'A', 'A', 'L', 'T', 'A', 'A', 'M', 'A', 'R', 'A', 'M', 'B', 'A', 'A', 'M', 'P', 'S', 'A', 'N', 'H', 'U', 'A', 'N', 'K', 'H', 'A', 'P', 'I', 'N', 'A', 'P', 'L', 'I', 'A', 'R', 'A', 'D', 'A', 'R', 'C', 'H', 'A', 'R', 'G', 'I', 'A', 'R', 'M', 'Y', 'A', 'S', 'A', 'T', 'A', 'S', 'H', '2', 'A', 'S', 'H', '9', 'A', 'T', 'O', 'M', 'A', 'U', 'N', 'N', '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', 'C', 'K', 'B', 'A', 'G', '3', 'B', 'A', 'G', 'A', 'B', 'A', 'H', 'T', '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', 'B', 'A', 'P', 'B', 'B', 'A', 'T', 'B', 'B', 'A', 'X', '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', 'T', 'B', 'E', 'E', 'H', 'B', 'E', 'L', 'L', 'B', 'E', 'L', 'T', 'B', 'E', 'N', 'D', 'B', 'E', 'T', 'A', 'B', 'E', 'T', 'H', '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', 'K', 'A', '-', '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', 'N', 'E', 'B', 'R', 'D', 'A', 'B', 'U', 'K', 'Y', 'B', 'U', 'L', 'L', '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', 'W', 'E', 'E', 'B', 'Y', 'R', 'X', 'B', 'Z', 'H', 'I', 'C', '-', '1', '8', 'C', '-', '3', '9', 'C', 'A', 'A', 'I', 'C', 'A', 'D', 'A', 'C', 'A', 'L', 'C', 'C', 'A', 'L', 'L', 'C', 'A', 'N', 'G', 'C', 'A', 'P', 'O', 'C', 'A', 'R', 'E', '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', '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', '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', 'N', 'C', 'H', 'O', 'A', 'C', 'H', 'O', 'E', 'C', 'H', 'O', 'P', 'C', 'H', 'O', 'T', 'C', 'H', 'O', 'X', 'C', 'H', 'U', 'O', 'C', 'H', 'U', 'P', 'C', 'H', 'U', 'R', 'C', 'H', 'U', 'X', 'C', 'H', 'W', 'A', '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', 'Y', 'C', 'L', 'A', 'N', 'C', 'L', 'A', 'W', 'C', 'L', 'E', 'F', 'C', 'L', 'U', 'B', 'C', 'O', 'D', 'A', 'C', 'O', 'L', 'L', 'C', 'O', 'M', 'B', 'C', 'O', 'P', 'Y', 'C', 'R', 'O', 'P', 'C', 'U', 'B', 'E', 'C', 'U', 'O', 'P', 'C', 'U', 'O', 'X', 'C', 'U', 'R', 'L', 'C', 'U', 'R', 'X', 'C', 'W', 'A', 'A', 'C', 'W', 'I', 'I', 'C', 'W', 'O', 'O', 'C', 'Y', 'R', 'X', 'D', 'A', 'E', 'G', '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', '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', 'O', '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', 'G', 'D', 'E', 'S', 'I', 'D', 'E', 'Z', 'H', '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', 'O', 'O', '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', 'K', 'A', 'R', 'D', 'L', 'E', 'E', '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', 'I', 'L', 'D', 'R', 'U', 'M', 'D', 'U', 'B', '2', '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', 'Y', 'E', 'H', 'D', 'Z', 'E', 'E', 'D', 'Z', 'H', 'A', 'D', 'Z', 'H', 'E', 'D', 'Z', 'J', 'E', 'D', 'Z', 'W', 'E', 'D', 'Z', 'Z', 'E', 'E', 'A', 'S', 'E', 'E', 'A', 'S', 'T', 'E', 'D', 'I', 'N', 'E', 'G', 'I', 'R', 'E', 'N', 'O', 'S', 'E', 'O', '-', 'O', 'E', 'O', '-', 'U', 'E', 'R', 'E', 'N', 'E', 'S', 'H', '2', 'E', 'U', '-', 'U', 'E', 'U', 'R', 'O', 'E', 'V', 'E', 'N', 'E', 'Z', 'E', 'N', 'F', 'A', 'A', 'I', 'F', 'A', 'C', 'E', 'F', 'A', 'N', 'G', 'F', 'E', 'E', 'D', 'F', 'E', 'H', 'U', 'F', 'E', 'N', 'G', 'F', 'E', 'O', 'H', 'F', 'I', 'L', 'E', 'F', 'I', 'L', 'L', 'F', 'I', 'R', 'E', 'F', 'I', 'S', 'H', 'F', 'I', 'T', 'A', 'F', 'I', 'V', 'E', 'F', 'L', 'A', 'G', 'F', 'L', 'A', 'T', 'F', 'L', 'I', 'P', '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', 'L', 'L', 'F', 'U', 'R', 'X', 'F', 'U', 'S', 'A', 'F', 'U', 'S', 'E', 'F', 'W', 'A', 'A', 'F', 'W', 'E', 'E', 'G', 'A', 'B', 'A', 'G', 'A', 'L', 'I', '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', 'O', 'N', 'G', 'B', 'O', 'O', 'G', 'C', 'A', 'N', 'G', 'C', 'I', 'G', 'G', 'D', 'A', 'N', 'G', 'E', 'A', 'R', 'G', 'E', 'B', 'A', 'G', 'E', 'B', 'O', 'G', 'E', 'D', 'E', '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', 'D', 'G', 'H', 'A', 'N', 'G', 'H', 'E', 'E', 'G', 'H', 'H', 'A', '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', 'S', 'H', 'G', 'O', 'A', 'L', 'G', 'O', 'L', 'D', 'G', 'O', 'N', 'G', 'G', 'O', 'R', 'A', 'G', 'O', 'R', 'T', 'G', 'R', 'A', 'M', 'G', 'S', 'U', 'M', 'G', 'T', 'E', 'R', 'G', 'U', 'E', 'H', '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', 'S', 'G', 'Y', 'E', 'E', 'G', 'Y', 'F', 'U', 'G', 'Y', 'O', 'N', 'H', 'A', 'G', 'L', 'H', 'A', 'I', 'R', 'H', 'A', 'L', 'F', 'H', 'A', 'N', 'D', 'H', 'A', 'R', 'D', 'H', 'A', 'T', 'E', 'H', 'A', 'V', 'E', 'H', 'E', 'A', 'D', 'H', 'E', 'L', 'M', 'H', 'E', 'M', 'P', 'H', 'E', 'N', 'G', 'H', 'E', 'R', 'U', 'H', 'E', 'T', 'A', 'H', 'E', 'T', 'H', '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', 'Z', 'B', 'H', 'L', 'A', 'P', 'H', 'L', 'A', 'T', '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', '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', 'O', 'H', 'N', 'U', 'T', 'H', 'O', 'O', 'K', 'H', 'O', 'O', 'N', 'H', 'O', 'R', 'I', 'H', 'O', 'R', 'N', 'H', 'O', 'T', 'A', 'H', 'O', 'U', 'R', 'H', 'P', 'W', 'G', 'H', 'U', 'B', '2', 'H', 'U', 'L', '2', 'H', 'U', 'N', 'G', 'H', 'U', 'O', 'P', 'H', 'U', 'O', 'T', 'H', 'U', 'O', 'X', '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', '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', 'C', 'H', 'I', 'N', 'N', 'N', 'I', 'N', 'T', 'I', 'I', 'O', 'T', 'A', 'I', 'S', 'A', 'Z', 'I', 'S', 'O', 'N', 'I', 'T', 'E', 'M', 'I', 'U', 'J', 'A', 'I', 'W', 'A', 'Z', 'I', 'Z', 'H', 'E', 'J', 'A', 'D', 'E', 'J', 'E', 'E', 'M', 'J', 'E', 'R', 'A', 'J', 'H', 'A', 'N', 'J', 'H', 'E', 'H', 'J', 'I', 'E', 'P', 'J', 'I', 'E', 'T', 'J', 'I', 'E', 'X', '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', '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', 'A', 'A', 'F', 'K', 'A', 'A', 'I', 'K', 'A', 'B', 'A', 'K', 'A', 'D', '2', 'K', 'A', 'D', '3', 'K', 'A', 'D', '4', 'K', 'A', 'D', '5', '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', 'T', 'O', 'K', 'A', 'U', 'N', 'K', 'C', 'A', 'L', 'K', 'H', 'A', 'A', 'K', 'H', 'A', 'H', 'K', 'H', 'A', 'I', 'K', 'H', 'A', 'N', 'K', 'H', 'A', 'R', 'K', 'H', 'E', 'E', 'K', 'H', 'E', 'I', 'K', 'H', 'H', 'A', 'K', 'H', 'O', 'N', 'K', 'H', 'O', 'T', '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', 'K', 'E', 'E', 'K', 'O', 'E', 'T', 'K', 'O', 'M', 'I', 'K', 'O', 'T', 'O', 'K', 'P', 'A', 'N', 'K', 'P', 'E', 'E', 'K', 'P', 'E', 'N', 'K', 'P', 'O', 'O', 'K', 'S', 'S', 'A', 'K', 'U', 'N', 'G', 'K', 'U', 'O', 'P', 'K', 'U', 'O', 'X', 'K', 'U', 'R', 'T', 'K', 'U', 'R', 'X', 'K', 'U', 'U', 'H', 'K', 'W', 'A', 'A', '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', 'A', 'A', 'I', 'L', 'A', 'A', 'N', 'L', 'A', 'C', 'A', 'L', 'A', 'C', 'K', 'L', 'A', 'E', 'V', 'L', 'A', 'G', 'U', 'L', 'A', 'K', 'E', 'L', 'A', 'M', 'D', 'L', 'A', 'M', 'E', 'L', 'A', 'S', 'T', 'L', 'A', 'T', 'E', 'L', 'A', 'Z', 'Y', 'L', 'D', 'A', 'N', 'L', 'E', 'A', 'F', 'L', 'E', 'E', 'K', 'L', 'E', 'F', 'T', 'L', 'E', 'G', 'S', 'L', 'E', 'S', 'S', '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', 'I', 'E', 'P', 'L', 'I', 'E', 'T', 'L', 'I', 'E', 'X', 'L', 'I', 'F', 'E', 'L', 'I', 'L', 'Y', 'L', 'I', 'N', 'E', 'L', 'I', 'N', 'G', 'L', 'I', 'N', 'K', 'L', 'I', 'R', 'A', 'L', 'I', 'S', 'H', 'L', 'I', 'W', 'N', 'L', 'L', 'L', 'A', 'L', 'O', 'G', 'R', 'L', 'O', 'L', 'L', 'L', 'O', 'N', 'G', 'L', 'O', 'O', 'P', 'L', 'O', 'O', 'T', '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', 'R', 'X', 'M', 'A', 'A', 'I', 'M', 'A', 'D', 'U', 'M', 'A', 'L', 'E', 'M', 'A', 'R', 'E', 'M', 'A', 'R', 'K', 'M', 'A', 'S', 'H', 'M', 'A', 'S', 'U', 'M', 'B', 'E', 'E', 'M', 'B', 'O', 'O', 'M', 'C', 'H', 'U', 'M', 'D', 'U', 'N', 'M', 'E', 'A', 'T', 'M', 'E', 'E', 'M', 'M', 'E', 'E', 'T', 'M', 'E', 'G', 'A', 'M', 'E', 'R', 'I', 'M', 'E', 'S', 'H', 'M', 'E', 'S', 'I', 'M', 'E', 'S', 'O', 'M', 'E', 'T', 'A', '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', 'E', 'P', 'M', 'I', 'E', 'X', 'M', 'I', 'I', 'N', 'M', 'I', 'L', 'L', 'M', 'I', 'M', 'E', 'M', 'I', 'N', 'Y', 'M', 'I', 'R', 'I', 'M', 'N', 'A', 'S', 'M', 'O', 'O', 'N', 'M', 'U', 'A', 'N', 'M', 'U', 'C', 'H', 'M', 'U', 'I', 'N', 'M', 'U', 'O', 'P', 'M', 'U', 'O', 'T', 'M', 'U', 'O', 'X', 'M', 'U', 'O', 'Y', 'M', 'U', 'R', 'X', 'M', 'U', 'S', 'H', 'M', 'W', 'A', 'A', 'M', 'W', 'E', 'E', 'M', 'W', 'I', 'I', 'M', 'W', 'O', 'O', 'N', 'A', 'A', 'I', 'N', 'A', 'G', 'A', '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', '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', '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', 'T', 'N', 'D', 'I', 'X', 'N', 'D', 'O', 'O', 'N', 'D', 'O', 'P', 'N', 'D', 'O', 'T', 'N', 'D', 'O', 'X', 'N', 'D', 'U', 'P', 'N', 'D', 'U', 'R', 'N', 'D', 'U', 'T', 'N', 'D', 'U', 'X', 'N', 'E', 'X', 'T', 'N', 'G', 'A', 'A', 'N', 'G', 'A', 'I', 'N', 'G', 'A', 'N', 'N', 'G', 'A', 'P', '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', 'I', 'E', 'N', 'G', 'I', 'I', 'N', 'G', 'K', 'A', 'N', 'G', 'O', 'N', 'N', 'G', 'O', 'O', 'N', 'G', 'O', 'P', 'N', 'G', 'O', 'T', 'N', 'G', 'O', 'X', 'N', 'G', 'U', 'E', 'N', 'G', 'U', 'O', 'N', 'H', 'J', 'A', 'N', 'H', 'U', 'E', 'N', 'I', 'E', 'P', 'N', 'I', 'E', 'X', 'N', 'I', 'N', 'E', 'N', 'I', 'O', 'N', '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', 'N', 'G', 'A', 'N', 'N', 'G', 'I', 'N', 'N', 'G', 'O', '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', 'R', 'A', 'P', 'N', 'R', 'A', 'T', 'N', 'R', 'A', 'X', 'N', 'R', 'E', 'P', 'N', 'R', 'E', 'T', 'N', 'R', 'E', 'X', 'N', 'R', 'O', 'P', 'N', 'R', 'O', 'X', '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', 'U', '1', '1', 'N', 'U', 'L', 'L', 'N', 'U', 'O', 'P', 'N', 'U', 'O', 'X', 'N', 'U', 'R', 'X', 'N', 'U', 'U', 'N', 'N', 'W', 'A', 'A', 'N', 'Y', 'A', 'A', 'N', 'Y', 'C', 'A', 'N', 'Y', 'E', 'E', 'N', 'Y', 'E', 'H', 'N', 'Y', 'E', 'T', 'N', 'Y', 'I', 'E', 'N', 'Y', 'I', 'P', 'N', 'Y', 'I', 'S', 'N', 'Y', 'I', 'T', 'N', 'Y', 'I', 'X', 'N', 'Y', 'J', 'A', 'N', 'Y', 'O', 'A', 'N', 'Y', 'O', 'O', 'N', 'Y', 'O', 'P', 'N', 'Y', 'O', 'T', 'N', 'Y', 'O', 'X', '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', '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', 'O', 'N', 'Z', 'U', 'P', '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', 'E', 'O', 'B', 'O', 'L', 'O', 'K', 'T', 'O', 'O', 'N', 'S', 'U', 'O', 'O', 'M', 'U', 'O', 'O', 'Z', 'E', 'O', 'P', 'E', 'N', 'O', 'V', 'E', 'R', 'O', 'X', 'I', 'A', 'P', 'A', 'A', 'I', 'P', 'A', 'G', 'E', 'P', 'A', 'L', 'M', 'P', 'A', 'N', 'G', 'P', 'A', 'R', 'A', 'P', 'A', 'R', 'T', 'P', 'A', 'T', 'H', 'P', 'A', 'W', 'N', 'P', 'E', 'E', 'P', 'P', 'E', 'S', 'O', 'P', 'H', 'A', 'A', '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', 'X', 'P', 'I', 'K', 'O', 'P', 'I', 'N', 'G', 'P', 'I', 'W', 'R', 'P', 'L', 'A', 'K', 'P', 'L', 'O', 'W', 'P', 'L', 'U', 'K', 'P', 'L', 'U', 'M', 'P', 'L', 'U', 'S', 'P', 'O', 'L', 'E', 'P', 'O', 'L', 'I', 'P', 'R', 'A', 'M', 'P', 'U', 'N', 'G', 'P', 'U', 'O', 'P', 'P', 'U', 'O', 'X', 'P', 'U', 'R', 'X', 'P', 'W', 'A', 'A', 'P', 'W', 'E', 'E', 'P', 'W', 'I', 'I', 'P', 'W', 'O', 'O', 'P', 'Y', 'R', 'X', 'Q', 'A', 'A', 'F', 'Q', 'A', 'A', 'I', 'Q', 'A', 'L', 'A', 'Q', 'A', 'P', 'H', 'Q', 'H', 'A', 'A', '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', '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', 'A', 'A', 'I', 'R', 'A', 'D', 'I', 'R', 'A', 'F', 'E', 'R', 'A', 'I', 'N', 'R', 'A', 'M', 'S', 'R', 'A', 'Y', 'S', 'R', 'D', 'E', 'L', 'R', 'E', 'I', 'D', 'R', 'E', 'M', 'U', 'R', 'E', 'P', 'A', 'R', 'E', 'S', 'H', 'R', 'E', 'S', 'T', 'R', 'G', 'Y', 'A', 'R', 'I', 'A', 'L', 'R', 'I', 'C', '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', 'O', 'F', 'R', 'O', 'O', 'K', 'R', 'O', 'O', 'T', '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', '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', 'O', 'P', 'R', 'U', 'O', 'X', 'R', 'U', 'R', 'X', 'R', 'U', 'S', 'I', 'R', 'W', 'A', 'A', 'R', 'Y', 'R', 'X', 'S', 'A', '-', 'I', 'S', 'A', 'A', 'I', 'S', 'A', 'D', 'E', 'S', 'A', 'G', 'A', 'S', 'A', 'I', 'L', 'S', 'A', 'L', 'A', 'S', 'A', 'L', 'T', 'S', 'A', 'P', 'A', 'S', 'A', 'R', 'A', 'S', 'A', 'R', 'I', 'S', 'B', 'U', 'B', 'S', 'C', 'A', 'N', 'S', 'C', 'W', 'A', 'S', 'E', 'A', 'L', 'S', 'E', 'E', 'N', 'S', 'E', 'L', 'F', 'S', 'E', 'M', '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', 'N', 'S', 'H', 'A', 'P', 'S', 'H', 'A', 'T', 'S', 'H', 'A', 'X', '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', 'R', 'S', 'H', 'O', 'A', 'S', 'H', 'O', 'E', 'S', 'H', 'O', 'G', 'S', 'H', 'O', 'O', 'S', 'H', 'O', 'P', 'S', 'H', 'O', 'T', 'S', 'H', 'O', 'X', 'S', 'H', 'T', 'A', 'S', 'H', 'U', '2', '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', 'P', 'S', 'H', 'Y', 'R', 'S', 'H', 'Y', 'T', 'S', 'H', 'Y', 'X', 'S', 'I', 'B', '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', 'K', 'I', 'N', 'S', 'K', 'W', 'A', 'S', 'L', 'U', 'R', 'S', 'N', 'A', 'P', 'S', 'O', 'F', 'T', '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', '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', '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', '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', 'A', 'A', 'I', 'T', 'A', 'C', 'K', 'T', 'A', 'I', 'L', 'T', 'A', 'K', '4', 'T', 'A', 'K', 'E', 'T', 'A', 'L', 'L', 'T', 'A', 'P', 'E', 'T', 'A', 'W', 'A', 'T', 'C', 'H', 'E', 'T', 'E', '-', 'U', 'T', 'E', 'N', 'S', 'T', 'E', 'N', 'T', 'T', 'E', 'N', 'U', 'T', 'E', 'S', 'H', 'T', 'E', 'T', 'H', 'T', 'E', 'X', 'T', 'T', 'H', 'A', 'A', 'T', 'H', 'A', 'I', 'T', 'H', 'A', 'L', 'T', 'H', 'A', 'N', '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', 'O', 'T', 'H', 'W', 'A', 'T', 'I', 'C', 'K', 'T', 'I', 'E', 'P', 'T', 'I', 'E', 'X', 'T', 'I', 'L', 'E', 'T', 'I', 'M', 'E', 'T', 'I', 'N', 'G', 'T', 'I', 'N', 'Y', 'T', 'I', 'W', 'N', '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', 'R', 'E', 'E', 'T', 'R', 'I', 'A', 'T', 'R', 'U', 'E', 'T', 'S', 'A', 'A', 'T', 'S', 'E', 'E', 'T', 'S', 'H', 'A', 'T', 'S', 'H', 'E', 'T', 'S', 'S', 'E', 'T', 'S', 'W', 'A', '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', 'S', 'A', 'T', 'T', 'S', 'E', 'T', 'T', 'S', 'I', 'T', 'T', 'S', 'O', 'T', 'T', 'S', 'U', 'T', 'U', 'G', '2', 'T', 'U', 'O', 'P', 'T', 'U', 'O', 'T', 'T', 'U', 'O', 'X', 'T', 'U', 'R', 'N', 'T', 'U', 'R', 'X', 'T', 'W', 'A', 'A', 'T', 'W', 'I', 'I', 'T', 'W', 'O', 'O', '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', 'A', 'T', 'H', 'U', 'D', 'U', 'G', 'U', 'M', 'U', 'M', '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', 'A', 'N', 'E', 'V', 'E', 'D', 'E', 'V', 'E', 'N', 'D', 'V', 'E', 'R', 'Y', 'V', 'I', 'D', 'A', 'V', 'I', 'E', 'P', 'V', 'I', 'E', 'T', 'V', 'I', 'E', 'X', 'V', 'I', 'N', 'E', 'V', 'O', 'I', 'D', 'V', 'U', 'R', 'X', 'V', 'Y', 'R', 'X', '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', 'I', 'D', 'E', 'W', 'I', 'N', 'D', 'W', 'I', 'N', 'E', 'W', 'I', 'T', 'H', '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', 'O', 'P', 'W', 'U', 'O', 'X', 'W', 'Y', 'N', 'N', 'X', 'I', 'E', 'P', 'X', 'I', 'E', 'T', 'X', 'I', 'E', 'X', 'X', 'U', 'O', 'X', 'X', 'W', 'A', 'A', 'X', 'W', 'E', 'E', 'X', 'Y', 'A', 'A', 'X', 'Y', 'E', 'E', 'X', 'Y', 'R', 'X', 'Y', 'A', '-', 'O', 'Y', 'A', 'A', 'I', 'Y', 'A', 'B', 'H', 'Y', 'A', 'C', 'H', 'Y', 'A', 'D', 'D', 'Y', 'A', 'D', 'H', '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', 'Z', 'H', 'Y', 'A', 'Z', 'Z', 'Y', 'E', 'A', 'R', 'Y', 'E', 'R', 'I', 'Y', 'E', 'R', 'U', 'Y', 'F', 'E', 'N', 'Y', 'I', '-', 'U', 'Y', 'I', 'E', 'P', 'Y', 'I', 'E', 'T', 'Y', 'I', 'E', 'X', 'Y', 'I', 'N', 'G', 'Y', 'I', 'W', 'N', 'Y', 'O', '-', 'I', 'Y', 'O', '-', 'O', 'Y', 'O', 'G', 'H', 'Y', 'O', 'M', 'O', 'Y', 'O', 'R', 'I', 'Y', 'U', '-', 'A', 'Y', 'U', '-', 'E', 'Y', 'U', '-', 'I', 'Y', 'U', '-', 'U', 'Y', 'U', 'A', 'N', 'Y', 'U', 'D', 'H', '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', 'R', 'X', 'Z', 'A', 'I', 'N', 'Z', 'A', 'M', 'X', 'Z', 'A', 'T', 'A', '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', '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', 'U', 'O', 'P', 'Z', 'U', 'O', 'X', 'Z', 'U', 'R', 'X', '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', 'U', 'P', 'Z', 'Z', 'U', 'R', 'Z', 'Z', 'U', 'X', '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', 'B', 'O', 'V', 'E', 'A', 'C', 'U', 'T', 'E', 'A', 'D', 'D', 'A', 'K', 'A', 'F', 'T', 'E', 'R', 'A', 'G', 'A', 'I', 'N', 'A', 'G', 'O', 'G', 'I', 'A', 'H', 'S', 'D', 'A', 'A', 'K', 'A', 'R', 'A', 'A', 'K', 'B', 'A', 'R', 'A', 'L', 'A', 'P', 'H', 'A', 'L', 'E', 'P', 'H', 'A', 'L', 'E', 'U', 'T', 'A', 'L', 'G', 'I', 'Z', 'A', 'L', 'I', 'F', 'U', 'A', 'L', 'L', 'A', 'H', 'A', 'L', 'P', 'H', 'A', 'A', 'N', 'G', 'L', 'E', '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', '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', 'T', 'N', 'A', 'H', 'A', 'T', 'T', 'A', 'K', 'A', 'T', 'T', 'I', 'C', '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', 'L', 'A', 'G', 'B', 'A', 'R', 'A', '2', 'B', 'A', 'S', 'S', 'A', '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', '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', 'O', 'R', 'C', 'B', 'H', 'E', 'T', 'H', 'B', 'I', 'N', 'D', 'I', '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', 'O', 'C', 'K', 'B', 'L', 'O', 'O', 'D', 'B', 'R', 'A', 'C', 'E', 'B', 'R', 'E', 'V', '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', 'Z', 'U', 'N', 'G', 'C', 'A', 'L', 'Y', 'A', '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', 'E', 'A', 'L', 'C', 'C', 'E', 'C', 'E', 'K', 'C', 'E', 'I', 'R', 'T', 'C', 'E', 'R', 'E', 'S', 'C', 'H', 'A', 'D', 'A', 'C', 'H', 'A', 'I', 'R', 'C', 'H', 'A', 'N', 'G', 'C', 'H', 'E', 'C', 'K', 'C', 'H', 'E', 'S', 'S', 'C', 'H', 'I', 'K', 'I', 'C', 'H', 'I', 'L', 'D', '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', 'E', 'A', 'R', 'C', 'L', 'I', 'C', 'K', 'C', 'L', 'I', 'F', 'F', 'C', 'L', 'O', 'S', 'E', 'C', 'L', 'O', 'T', 'H', 'C', 'L', 'O', 'U', 'D', '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', 'V', 'E', 'R', 'C', 'R', 'O', 'I', 'X', 'C', 'R', 'O', 'S', 'S', 'C', 'U', 'B', 'E', 'D', 'C', 'U', 'R', 'L', 'Y', 'C', 'U', 'R', 'V', 'E', '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', 'D', 'A', 'D', 'A', 'L', 'E', 'T', 'D', 'A', 'M', 'M', 'A', 'D', 'A', 'N', 'D', 'A', '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', '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', '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', 'T', 'T', 'O', 'D', 'J', 'E', 'R', 'V', 'D', 'O', 'B', 'R', 'O', 'D', 'O', 'O', 'N', 'G', 'D', 'O', 'U', 'B', 'T', 'D', 'R', 'I', 'V', 'E', 'D', 'R', 'O', 'P', 'S', 'D', 'U', 'G', 'U', 'D', 'D', 'Z', 'E', 'L', 'O', 'E', 'A', 'G', 'L', 'E', 'E', 'A', 'R', 'L', 'Y', 'E', 'A', 'R', 'T', 'H', 'E', 'E', 'K', 'A', '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', 'P', 'T', 'Y', 'E', 'N', 'D', 'E', 'P', 'E', 'N', 'T', 'E', 'R', 'E', 'O', '-', 'E', 'U', 'E', 'O', 'L', 'H', 'X', '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', 'U', 'E', 'U', 'L', 'E', 'R', 'E', 'X', 'I', 'S', 'T', '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', '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', 'O', 'O', 'R', 'F', 'L', 'U', 'T', 'E', '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', 'T', 'U', 'F', 'R', 'O', 'W', 'N', 'G', 'A', 'A', 'F', 'U', 'G', 'A', 'D', 'O', 'L', 'G', 'A', 'L', 'A', 'M', 'G', 'A', 'M', 'A', 'L', 'G', 'A', 'M', 'L', 'A', 'G', 'A', 'M', 'M', 'A', 'G', 'A', 'N', 'M', 'A', 'G', 'A', 'R', 'O', 'N', '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', 'O', 'S', 'T', 'G', 'I', 'D', 'I', 'M', 'G', 'I', 'M', 'E', 'L', 'G', 'I', 'N', 'I', 'I', 'G', 'I', 'S', 'A', 'L', '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', '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', 'R', 'U', 'N', 'H', 'A', '-', 'H', 'A', 'H', 'A', 'A', 'R', 'U', 'H', 'A', 'E', 'G', 'L', 'H', 'A', 'I', 'T', 'U', 'H', 'A', 'M', 'Z', 'A', 'H', 'A', 'N', 'D', 'S', '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', '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', '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', 'L', 'A', 'M', 'H', 'O', 'O', 'R', 'U', 'H', 'O', 'R', 'S', 'E', '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', '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', 'D', 'E', 'X', 'I', 'N', 'N', 'E', 'R', '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', 'E', 'U', 'I', 'K', 'A', 'A', 'F', 'U', 'K', 'A', 'I', 'R', 'I', 'K', 'A', 'P', 'A', 'L', 'K', 'A', 'P', 'P', 'A', 'K', 'A', 'R', 'E', 'N', 'K', 'A', 'S', 'R', 'A', 'K', 'A', 'U', 'N', 'A', 'K', 'A', 'Y', 'A', 'H', 'K', 'E', 'E', 'N', 'G', 'K', 'E', 'E', 'S', 'U', 'K', 'E', 'H', 'E', 'H', 'K', 'E', 'N', 'A', 'T', 'K', 'E', 'S', 'H', '2', 'K', 'E', 'T', 'T', 'I', 'K', 'H', 'A', 'N', 'G', 'K', 'H', 'A', 'P', 'H', 'K', 'H', 'M', 'E', 'R', 'K', 'H', 'U', 'A', 'T', 'K', 'H', 'W', 'A', 'I', 'K', 'I', 'S', 'A', 'L', 'K', 'N', 'I', 'F', 'E', 'K', 'O', 'M', 'B', 'U', 'K', 'O', 'O', 'P', 'O', 'K', 'O', 'P', 'P', 'A', 'K', 'U', 'S', 'M', 'A', 'K', 'X', 'W', 'A', 'A', 'K', 'X', 'W', 'E', 'E', 'L', 'A', 'A', 'M', 'U', 'L', 'A', 'B', 'O', 'R', 'L', 'A', 'G', 'A', 'B', 'L', 'A', 'G', 'A', 'R', 'L', 'A', 'G', 'U', 'S', 'L', 'A', 'M', 'D', 'A', 'L', 'A', 'M', 'E', 'D', 'L', 'A', 'R', 'G', 'E', 'L', 'A', 'T', 'I', 'K', 'L', 'A', 'T', 'I', 'N', 'L', 'A', 'U', 'L', 'A', 'L', 'E', 'M', 'O', 'I', 'L', 'E', 'N', 'G', 'A', 'L', 'E', 'V', 'E', 'L', 'L', 'I', 'B', 'R', 'A', 'L', 'I', 'G', 'H', 'T', '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', 'O', 'N', 'G', 'A', 'L', 'O', 'T', 'U', 'S', 'L', 'O', 'U', 'R', 'E', 'L', 'O', 'W', '-', '9', 'L', 'O', 'W', 'E', 'R', 'L', 'U', 'G', 'A', 'L', 'M', 'A', 'D', 'D', 'A', 'M', 'A', 'H', 'H', 'A', 'M', 'A', 'I', 'R', 'U', 'M', 'A', 'N', 'N', 'A', 'M', 'A', 'P', 'I', 'Q', 'M', 'A', 'Q', 'A', 'F', 'M', 'A', 'R', 'C', 'H', 'M', 'A', 'S', 'H', '2', 'M', 'E', 'E', 'M', 'U', 'M', 'E', 'I', 'Z', 'I', 'M', 'E', 'L', 'O', 'N', 'M', 'E', 'T', 'A', 'L', 'M', 'E', 'T', 'E', 'G', 'M', 'E', 'Z', 'Z', 'O', 'M', 'G', 'B', 'E', 'E', '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', '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', 'N', 'T', 'H', 'M', 'O', 'U', 'N', 'D', 'M', 'O', 'U', 'T', 'H', 'M', 'O', 'V', 'E', 'D', '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', 'A', 'B', 'L', 'A', 'N', 'A', 'G', 'A', 'R', 'N', 'A', 'G', 'R', 'I', 'N', 'A', 'I', 'R', 'A', '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', 'D', 'I', 'E', 'X', 'N', 'D', 'O', 'L', 'E', 'N', 'D', 'U', 'R', 'X', 'N', 'G', 'A', 'A', 'I', 'N', 'G', 'G', 'E', 'E', 'N', 'G', 'G', 'E', 'N', 'N', 'G', 'G', 'O', 'O', 'N', 'G', 'I', 'E', 'P', 'N', 'G', 'I', 'E', 'X', 'N', 'G', 'O', 'E', 'H', 'N', 'G', 'U', 'O', 'T', 'N', 'G', 'U', 'O', 'X', 'N', 'I', 'E', 'U', 'N', 'N', 'I', 'G', 'H', 'T', 'N', 'I', 'S', 'A', 'G', 'N', 'J', 'I', 'E', 'P', 'N', 'J', 'I', 'E', 'T', 'N', 'J', 'I', 'E', 'X', 'N', 'J', 'U', 'O', 'X', 'N', 'J', 'U', 'R', 'X', 'N', 'J', 'Y', 'R', 'X', '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', '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', 'I', 'E', 'P', 'N', 'Z', 'I', 'E', 'X', 'N', 'Z', 'U', 'O', 'X', 'N', 'Z', 'U', 'R', 'X', 'N', 'Z', 'Y', 'R', 'X', 'O', 'B', 'O', 'L', 'S', 'O', 'G', 'H', 'A', 'M', 'O', 'J', 'E', 'O', 'N', 'O', 'K', 'A', 'R', 'A', 'O', 'L', 'I', 'V', 'E', 'O', 'M', 'E', 'G', 'A', 'O', 'N', 'K', 'A', 'R', 'O', 'R', 'I', 'Y', 'A', 'O', 'T', 'H', 'A', 'L', 'O', 'U', 'N', 'C', 'E', 'O', 'U', 'T', 'E', 'R', 'O', 'X', 'E', 'I', 'A', 'P', 'A', 'A', 'T', 'U', 'P', 'A', 'D', 'M', 'A', 'P', 'A', 'N', 'T', 'I', 'P', 'A', 'P', 'E', 'R', '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', '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', 'U', 'N', 'G', 'P', 'I', 'A', 'N', 'O', 'P', 'I', 'E', 'C', 'E', 'P', 'I', 'E', 'U', 'P', 'P', 'I', 'R', 'I', 'G', 'P', 'L', 'A', 'C', 'E', 'P', 'L', 'A', 'N', 'E', 'P', 'L', 'U', 'T', 'O', 'P', 'O', 'I', 'N', 'T', 'P', 'O', 'N', 'D', 'O', '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', 'Q', 'A', 'A', 'F', 'U', 'Q', 'A', 'D', 'M', 'A', 'Q', 'A', 'T', 'A', 'N', 'Q', 'H', 'W', 'A', 'A', 'Q', 'H', 'W', 'E', 'E', 'Q', 'U', 'E', 'E', 'N', 'Q', 'U', 'I', 'L', 'L', 'Q', 'U', 'O', 'T', 'E', 'R', 'A', 'I', 'D', 'A', 'R', 'A', 'I', 'D', 'O', 'R', 'A', 'N', 'G', 'E', 'R', 'A', 'S', 'H', 'A', 'R', 'A', 'T', 'I', 'O', 'R', 'B', 'A', 'S', 'A', 'R', 'E', 'A', 'C', 'H', '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', 'G', 'H', 'T', 'R', 'I', 'T', 'S', 'I', 'R', 'I', 'V', 'E', 'R', 'R', 'N', 'O', 'O', 'N', 'R', 'O', 'B', 'A', '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', 'M', 'A', 'I', 'R', 'U', 'N', 'I', 'C', 'R', 'U', 'P', 'E', 'E', 'R', 'U', 'P', 'I', 'I', 'R', 'W', 'A', 'H', 'A', 'S', 'A', 'D', 'H', 'E', 'S', 'A', 'F', 'H', 'A', 'S', 'A', 'L', 'A', 'M', 'S', 'A', 'L', 'L', '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', 'B', 'R', 'U', 'L', 'S', 'C', 'H', 'W', 'A', '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', 'V', 'E', 'N', 'S', 'H', 'A', 'B', '6', 'S', 'H', 'A', 'D', 'E', 'S', 'H', 'A', 'N', 'G', 'S', 'H', 'A', 'R', '2', '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', 'V', 'A', 'S', 'H', 'I', 'F', 'T', 'S', 'H', 'I', 'I', 'N', 'S', 'H', 'I', 'M', 'A', 'S', 'H', 'I', 'T', 'A', 'S', 'H', 'O', 'G', 'I', 'S', 'H', 'O', 'O', 'T', 'S', 'H', 'O', 'R', 'T', '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', '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', 'U', 'L', 'L', 'S', 'L', 'A', 'S', 'H', 'S', 'L', 'A', 'V', 'E', 'S', 'L', 'I', 'C', 'E', 'S', 'L', 'I', 'N', 'G', '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', 'K', 'E', 'S', 'N', 'O', 'U', 'T', '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', 'O', 'O', 'N', 'S', 'Q', 'U', 'A', 'T', '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', 'T', 'S', 'T', 'E', 'A', 'M', 'S', 'T', 'I', 'L', 'E', 'S', 'T', 'I', 'L', 'L', 'S', 'T', 'O', 'C', 'K', 'S', 'T', 'O', 'N', 'E', 'S', 'T', 'O', 'V', 'E', 'S', 'T', 'U', 'D', 'Y', 'S', 'U', 'H', 'U', 'R', 'S', 'U', 'K', 'U', 'N', 'S', 'W', 'A', 'S', 'H', 'S', 'W', 'E', 'E', 'T', 'S', 'W', 'O', 'R', 'D', 'S', 'W', 'U', 'N', 'G', 'S', 'Y', 'R', 'M', 'A', 'T', 'A', 'B', 'L', 'E', 'T', 'A', 'M', 'I', 'L', 'T', 'A', 'P', 'E', 'R', 'T', 'C', 'H', 'E', 'H', 'T', 'E', 'G', 'E', 'H', 'T', 'E', 'H', 'E', 'H', 'T', 'E', 'I', 'W', 'S', 'T', 'E', 'V', 'I', 'R', 'T', 'H', 'E', 'M', 'A', 'T', 'H', 'E', 'R', 'E', 'T', 'H', 'E', 'T', 'A', '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', 'N', 'G', 'T', 'H', 'U', 'R', 'S', 'T', 'H', 'W', 'A', 'A', 'T', 'I', 'A', 'R', 'A', 'T', 'I', 'G', 'E', 'R', 'T', 'I', 'G', 'H', 'T', 'T', 'I', 'L', 'D', 'E', 'T', 'I', 'M', 'E', 'S', 'T', 'I', 'N', 'N', 'E', 'T', 'I', 'P', 'P', 'I', 'T', 'I', 'T', 'L', 'O', 'T', 'I', 'W', 'A', 'Z', 'T', 'L', 'H', 'E', 'E', 'T', 'O', 'N', 'A', 'L', 'T', 'O', 'N', 'O', 'S', 'T', 'O', 'O', 'T', 'H', 'T', 'O', 'T', 'A', 'L', 'T', 'R', 'A', 'C', 'K', 'T', 'R', 'A', 'D', 'E', 'T', 'R', 'I', 'O', 'N', 'T', 'R', 'U', 'N', 'K', 'T', 'R', 'U', 'T', 'H', 'T', 'S', 'A', 'D', 'I', 'T', 'S', 'E', 'R', 'E', 'T', 'S', 'H', 'E', 'G', 'T', 'S', 'H', 'E', 'S', 'T', 'T', 'S', 'E', 'E', 'T', 'T', 'T', 'H', 'A', 'T', 'U', 'N', 'N', 'Y', 'T', 'U', 'R', 'O', '2', 'T', 'U', 'U', 'M', 'U', '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', 'U', 'D', 'A', 'U', 'S', 'S', 'U', '3', 'U', 'T', 'U', 'K', 'I', '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', 'R', 'G', 'E', 'V', 'E', 'R', 'S', 'E', 'V', 'E', 'S', 'T', 'A', 'V', 'I', 'R', 'G', 'A', 'V', 'I', 'R', 'G', 'O', 'V', 'O', 'C', 'A', 'L', 'V', 'O', 'W', 'E', 'L', 'V', 'Z', 'M', 'E', 'T', 'W', 'A', 'A', 'V', 'U', 'W', 'A', 'S', 'L', 'A', 'W', 'A', 'T', 'C', 'H', 'W', 'A', 'T', 'E', 'R', 'W', 'A', 'T', 'T', 'O', 'W', 'H', 'E', 'A', 'T', 'W', 'H', 'E', 'E', 'L', 'W', 'H', 'I', 'T', 'E', 'W', 'H', 'O', 'L', 'E', 'W', 'I', 'D', 'T', 'H', 'W', 'I', 'N', 'D', 'U', 'W', 'I', 'N', 'J', 'A', 'W', 'O', 'M', 'A', 'N', 'W', 'R', 'O', 'N', 'G', 'W', 'U', 'N', 'J', 'O', 'X', 'I', 'R', 'O', 'N', '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', 'E', 'O', '-', 'O', 'Y', 'E', 'O', '-', 'U', 'Y', 'E', 'R', 'A', 'H', 'Y', 'E', 'S', 'T', 'U', 'Y', 'E', 'T', 'I', 'V', 'Y', 'I', 'Z', 'E', 'T', 'Y', 'O', '-', 'Y', 'A', 'Y', 'U', '-', 'E', 'O', 'Y', 'U', '-', 'Y', 'E', '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', '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', 'U', 'R', 'X', 'Z', 'Z', 'Y', 'R', 'X', '-', 'K', 'H', 'Y', 'I', 'L', '-', 'K', 'H', 'Y', 'U', 'D', 'A', 'C', 'C', 'E', 'N', 'T', 'A', 'E', 'G', 'E', 'A', 'N', 'A', 'I', 'H', 'V', 'U', 'S', 'A', 'I', 'K', 'A', 'R', 'A', 'A', 'L', 'A', 'Y', 'H', 'E', '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', 'P', 'A', 'A', 'T', 'O', 'A', 'P', 'L', 'O', 'U', 'N', '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', 'U', 'H', 'U', 'A', 'A', 'S', 'C', 'E', 'N', 'T', 'A', 'S', 'H', 'G', 'A', 'B', 'A', 'S', 'Y', 'U', 'R', 'A', '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', 'T', 'O', 'C', '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', 'F', 'O', 'R', 'E', 'B', 'E', 'R', 'B', 'E', 'R', 'B', 'E', 'S', 'I', 'D', 'E', 'B', 'E', 'Y', 'Y', 'A', 'L', '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', 'O', 'M', 'B', 'O', 'W', 'T', 'I', 'E', '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', 'C', 'K', 'L', 'E', 'B', 'U', 'L', 'L', 'E', 'T', 'C', 'A', 'M', 'N', 'U', 'C', 'C', 'A', 'N', 'C', 'E', 'L', 'C', 'A', 'N', 'C', 'E', 'R', 'C', 'A', 'N', 'D', 'R', 'A', 'C', 'A', 'R', 'I', 'A', 'N', 'C', 'A', 'T', 'A', 'W', 'A', 'C', 'E', 'N', 'T', 'R', 'E', 'C', 'E', 'R', '-', 'W', 'A', 'C', 'H', 'A', 'M', 'K', 'O', 'C', 'H', 'A', 'N', 'G', 'E', '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', 'R', 'C', 'L', 'E', 'C', 'L', 'E', 'F', '-', '1', 'C', 'L', 'E', 'F', '-', '2', 'C', 'L', 'I', 'V', 'I', 'S', 'C', 'L', 'O', 'S', 'E', 'D', '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', 'P', 'T', 'I', 'C', 'C', 'O', 'R', 'N', 'E', 'R', 'C', 'O', 'R', 'P', 'S', 'E', 'C', 'R', 'E', 'D', 'I', 'T', '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', 'M', 'A', 'R', 'U', 'D', 'A', 'S', 'E', 'I', 'A', 'D', 'A', 'S', 'H', 'E', 'D', 'D', 'D', 'A', 'H', 'A', 'L', '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', 'V', 'I', 'C', 'E', 'D', 'H', 'A', 'A', 'L', 'U', 'D', 'H', 'A', 'R', 'M', 'A', 'D', 'I', 'E', 'S', 'I', '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', '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', 'U', 'T', 'I', 'E', 'S', 'E', 'I', 'G', 'H', 'T', 'H', 'E', 'I', 'G', 'H', 'T', 'Y', 'E', 'L', 'E', 'V', 'E', 'N', 'E', 'N', 'D', 'I', 'N', 'G', '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', 'I', 'S', 'T', 'S', 'E', 'Y', 'A', 'N', 'N', 'A', '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', 'T', 'O', 'R', 'F', 'A', 'M', 'I', 'L', 'Y', 'F', 'A', 'T', 'H', 'E', 'R', 'F', 'E', 'M', 'A', 'L', 'E', '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', 'I', 'T', 'E', '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', 'U', 'S', 'F', 'L', 'I', 'G', 'H', 'T', 'F', 'L', 'O', 'R', 'A', 'L', 'F', 'L', 'O', 'W', 'E', 'R', 'F', 'O', 'R', 'C', 'E', 'S', 'F', 'O', 'R', 'K', 'E', 'D', 'F', 'O', 'U', 'R', 'T', 'H', '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', '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', 'U', 'N', 'N', 'A', 'G', 'L', 'E', 'I', 'C', 'H', 'G', 'O', 'R', 'G', 'O', 'N', 'G', 'O', 'T', 'H', 'I', 'C', 'G', 'R', 'A', 'M', 'M', 'A', 'G', 'R', 'A', 'T', 'E', 'R', 'G', 'R', 'O', 'U', 'N', 'D', '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', 'G', 'U', 'L', 'H', 'E', 'A', 'D', 'E', 'D', 'H', 'E', 'A', 'V', 'E', 'N', 'H', 'E', 'B', 'R', 'E', 'W', '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', 'D', 'I', 'N', 'G', 'H', 'U', 'I', 'I', 'T', 'O', 'H', 'Y', 'P', 'H', 'E', 'N', 'I', '-', 'B', 'E', 'A', 'M', 'I', 'L', 'I', 'M', 'M', 'U', 'I', 'N', 'G', 'W', 'A', 'Z', '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', 'S', 'H', 'A', 'R', 'I', 'T', 'A', 'L', 'I', 'C', 'I', 'Y', 'A', 'N', 'N', 'A', 'J', 'O', 'I', 'N', 'E', 'D', 'J', 'O', 'I', 'N', 'E', 'R', 'J', 'O', 'Y', 'O', 'U', 'S', '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', 'Y', 'C', 'A', 'P', 'K', 'H', 'A', 'N', 'D', 'A', 'K', 'H', 'O', 'M', 'U', 'T', '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', 'R', 'E', 'A', 'N', 'K', 'O', 'R', 'U', 'N', 'A', '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', 'H', 'S', 'H', 'U', 'L', 'A', 'M', 'A', 'D', 'H', 'L', 'A', 'M', 'B', 'D', 'A', 'L', 'A', 'R', 'G', 'E', 'R', 'L', 'A', 'U', 'K', 'A', 'Z', 'L', 'E', 'A', 'D', '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', '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', 'Q', 'U', 'I', 'D', 'L', 'I', 'T', 'T', 'L', 'E', 'L', 'U', 'N', 'A', 'T', 'E', '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', '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', 'E', 'D', 'I', 'A', 'L', 'M', 'E', 'D', 'I', 'U', 'M', 'M', 'E', 'G', 'A', 'L', 'I', 'M', 'E', 'M', 'B', 'E', 'R', 'M', 'E', 'R', 'K', 'H', 'A', 'M', 'E', 'T', 'R', 'I', 'A', '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', 'D', 'E', 'L', 'S', 'M', 'O', 'D', 'U', 'L', 'O', 'M', 'O', 'R', 'T', 'A', 'R', 'M', 'O', 'T', 'H', 'E', 'R', 'M', 'U', 'C', 'A', 'A', 'D', 'M', 'U', 'N', 'S', 'U', 'B', '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', 'E', 'N', 'A', 'N', 'O', 'N', 'E', 'S', 'T', 'E', 'D', 'N', 'E', 'U', 'T', 'E', 'R', 'N', 'I', 'N', 'D', 'A', '2', 'N', 'I', 'N', 'E', 'T', 'Y', 'N', 'I', 'R', 'U', 'G', 'U', 'N', 'O', 'K', 'H', 'U', 'K', 'N', 'O', 'R', 'M', 'A', 'L', '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', 'G', 'O', 'N', 'E', 'K', 'O', 'L', 'I', 'G', 'O', 'N', 'O', 'M', 'A', 'L', 'O', 'N', 'O', 'P', 'E', 'N', '-', 'P', 'O', 'P', 'P', 'O', 'S', 'E', 'O', 'P', 'T', 'I', 'O', 'N', 'O', 'R', 'C', 'H', 'I', 'D', 'O', 'R', 'I', 'G', 'I', 'N', 'O', 'R', 'N', 'A', 'T', 'E', 'O', 'T', 'T', 'A', 'V', 'A', 'O', 'U', 'N', 'K', 'I', 'A', 'O', 'X', 'E', 'I', 'A', 'I', 'O', 'Y', 'A', 'N', 'N', 'A', 'P', 'A', 'I', 'R', 'E', 'D', 'P', 'A', 'L', 'L', 'A', 'S', 'P', 'A', 'L', 'U', 'T', 'A', 'P', 'A', 'M', 'A', 'D', 'A', 'P', 'A', 'S', 'H', 'T', 'A', 'P', 'E', 'N', 'C', 'I', 'L', 'P', 'E', 'N', 'I', 'H', 'I', 'P', 'E', 'O', 'R', 'T', 'H', 'P', 'E', 'R', 'S', 'O', 'N', 'P', 'E', 'R', 'T', 'H', 'O', 'P', 'E', 'S', 'E', 'T', 'A', 'P', 'H', 'N', 'A', 'E', 'K', 'P', 'H', 'R', 'A', 'S', 'E', 'P', 'I', 'A', 'S', 'M', 'A', 'P', 'I', 'K', 'U', 'R', 'U', 'P', 'I', 'P', 'I', 'N', 'G', 'P', 'I', 'S', 'C', 'E', 'S', 'P', 'L', 'A', 'N', 'C', 'K', 'P', 'L', 'O', 'P', 'H', 'U', 'P', 'L', 'U', 'M', 'E', 'D', 'P', 'O', 'E', 'T', 'I', 'C', 'P', 'O', 'E', 'T', 'R', 'Y', 'P', 'O', 'I', 'N', 'T', 'O', 'P', 'O', 'K', 'O', 'J', 'I', 'P', 'O', 'S', 'T', 'A', 'L', 'P', 'O', 'W', 'E', 'R', 'S', 'P', 'R', 'O', 'T', 'O', 'S', 'P', 'S', 'I', 'L', 'O', 'N', 'P', 'T', 'H', 'A', 'H', 'A', 'P', 'U', 'R', 'I', 'T', 'Y', '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', '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', 'P', 'E', 'A', 'T', 'R', 'E', 'T', 'U', 'R', 'N', 'R', 'H', 'O', 'T', 'I', 'C', 'R', 'I', 'K', 'R', 'I', 'K', 'R', 'I', 'S', 'I', 'N', 'G', 'R', 'I', 'T', 'U', 'A', 'L', 'R', 'N', 'Y', 'I', 'N', 'G', 'R', 'U', 'N', 'O', 'U', 'T', 'S', 'A', 'A', 'D', 'H', 'U', 'S', 'A', 'J', 'D', 'A', 'H', 'S', 'A', 'M', 'E', 'K', 'H', 'S', 'A', 'M', 'Y', 'O', 'K', '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', 'R', 'E', 'E', 'N', 'S', 'C', 'R', 'I', 'P', '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', 'R', 'I', 'F', 'S', 'S', 'E', 'S', 'A', 'M', 'E', 'S', 'H', 'A', 'D', 'D', 'A', 'S', 'H', 'A', 'K', 'T', 'I', 'S', 'H', 'A', 'P', 'E', 'S', 'S', 'H', 'E', 'E', 'N', 'U', 'S', 'H', 'E', 'Q', 'E', 'L', 'S', 'H', 'E', 'S', 'H', '2', 'S', 'H', 'I', 'E', 'L', 'D', 'S', 'H', 'I', 'N', 'I', 'G', 'S', 'H', 'O', 'R', 'T', 'S', 'S', 'H', 'U', 'B', 'U', 'R', 'S', 'I', 'C', 'K', 'L', 'E', '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', 'O', 'W', 'L', 'Y', 'S', 'O', 'U', 'R', 'C', 'E', 'S', 'O', 'W', 'I', 'L', 'O', 'S', 'P', 'A', 'T', 'H', 'I', 'S', 'P', 'E', 'E', 'C', 'H', 'S', 'P', 'I', 'R', 'A', 'L', 'S', 'P', 'I', 'R', 'I', 'T', 'S', 'P', 'O', 'K', 'E', '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', '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', 'O', 'K', 'E', 'S', 'U', 'B', 'I', 'T', 'O', 'S', 'U', 'B', 'S', 'E', 'T', 'S', 'U', 'M', 'A', 'S', 'H', 'S', 'U', 'M', 'M', 'E', 'R', 'S', 'U', 'R', 'A', 'N', 'G', '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', 'N', 'E', 'D', 'T', 'A', 'U', 'R', 'U', 'S', 'T', 'E', 'D', 'U', 'N', 'G', 'T', 'E', 'L', 'E', 'I', 'A', 'T', 'E', 'L', 'O', 'U', 'S', 'T', 'E', 'L', 'U', 'G', 'U', 'T', 'E', 'M', 'P', 'U', 'S', 'T', 'E', 'N', 'U', 'T', 'O', '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', 'Y', 'O', 'O', 'M', 'T', 'I', 'K', 'E', 'U', 'T', 'T', 'I', 'P', 'E', 'H', 'A', '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', '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', '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', 'N', 'E', 'D', 'T', 'U', 'R', 'T', 'L', 'E', 'T', 'V', 'R', 'I', 'D', 'O', 'T', 'W', 'E', 'L', 'V', 'E', 'T', 'W', 'E', 'N', 'T', 'Y', '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', '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', 'E', 'A', 'P', 'O', 'N', 'W', 'E', 'I', 'G', 'H', 'T', 'W', 'I', 'G', 'G', 'L', 'Y', 'W', 'I', 'N', 'T', 'E', 'R', 'W', 'O', 'L', 'O', 'S', 'O', 'W', 'R', 'E', 'A', 'T', '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', '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', 'I', 'G', 'Z', 'A', 'G', 'Z', 'Q', 'A', 'P', 'H', 'A', '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', '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', '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', 'N', 'G', 'U', 'L', 'A', 'R', 'A', 'N', 'N', 'U', 'I', 'T', 'Y', 'A', 'P', 'O', 'T', 'H', 'E', 'S', 'A', 'R', 'A', 'E', 'A', '-', 'I', 'A', 'R', 'A', 'E', 'A', '-', 'U', 'A', 'R', 'C', 'H', 'A', 'I', 'C', 'A', 'R', 'K', 'T', 'I', 'K', 'O', 'A', 'U', 'S', 'T', 'R', 'A', 'L', 'A', 'U', 'Y', 'A', 'N', 'N', 'A', 'A', 'V', 'E', 'R', 'A', 'G', 'E', 'B', 'A', 'A', 'R', 'E', 'R', 'U', 'B', 'A', 'I', 'R', 'K', 'A', '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', 'Y', 'A', 'N', 'N', 'A', 'B', 'E', 'C', 'A', 'U', 'S', 'E', 'B', 'E', 'E', 'H', 'I', 'V', 'E', 'B', 'E', 'N', 'G', 'A', 'L', 'I', 'B', 'E', 'N', 'Z', 'E', 'N', 'E', 'B', 'E', 'T', 'W', 'E', 'E', 'N', 'B', 'I', 'N', 'D', 'I', 'N', 'G', 'B', 'J', 'A', 'R', 'K', 'A', 'N', 'B', 'L', 'E', 'N', 'D', 'E', 'D', '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', 'U', 'M', 'I', 'S', 'H', 'C', 'A', 'E', 'S', 'U', 'R', 'A', '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', 'R', 'I', 'O', 'T', 'C', 'H', 'E', 'V', 'R', 'O', 'N', 'C', 'H', 'I', 'E', 'U', 'C', 'H', 'C', 'H', 'I', 'N', 'E', 'S', 'E', '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', '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', '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', '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', 'O', 'S', 'S', 'E', 'D', 'C', 'U', 'R', 'R', 'E', 'N', 'T', 'C', 'U', 'R', 'V', 'I', 'N', 'G', 'C', 'W', 'E', 'O', 'R', 'T', 'H', 'C', 'Y', 'P', 'E', 'R', 'U', 'S', 'C', 'Y', 'P', 'R', 'I', 'O', 'T', 'D', 'A', 'G', 'A', 'L', 'G', 'A', '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', 'L', 'P', 'H', 'I', 'C', 'D', 'E', 'S', 'E', 'R', 'E', 'T', 'D', 'H', 'A', 'L', 'A', 'T', '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', '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', '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', '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', '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', 'P', 'S', 'I', 'L', 'O', 'N', 'E', 'T', 'N', 'A', 'H', 'T', 'A', 'E', 'V', 'E', 'N', 'I', 'N', 'G', 'F', 'A', 'I', 'L', 'U', 'R', 'E', 'F', 'A', 'L', 'L', 'I', 'N', 'G', 'F', 'A', 'Y', 'A', 'N', 'N', 'A', 'F', 'E', 'A', 'T', 'H', 'E', 'R', 'F', 'E', 'R', 'M', 'A', 'T', 'A', 'F', 'I', 'F', 'T', 'E', 'E', 'N', 'F', 'I', 'S', 'H', 'E', 'Y', 'E', 'F', 'O', 'N', 'G', 'M', 'A', 'N', 'F', 'O', 'R', 'K', 'I', 'N', 'G', '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', 'I', 'R', 'U', 'D', 'A', 'A', 'G', 'L', 'A', 'G', 'O', 'L', 'I', 'G', 'L', 'O', 'T', 'T', 'A', 'L', 'G', 'R', 'E', 'A', 'T', 'E', 'R', 'G', 'U', 'A', 'R', 'A', 'N', 'I', 'H', 'A', 'F', 'U', 'K', 'H', 'A', 'H', 'A', 'L', 'A', 'N', 'T', 'A', 'H', 'A', 'L', 'B', 'E', 'R', 'D', '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', 'O', 'L', 'D', 'I', 'N', 'G', 'H', 'R', 'Y', 'V', 'N', 'I', 'A', 'H', 'U', 'N', 'D', 'R', 'E', 'D', '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', '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', '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', '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', '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', 'H', 'I', 'E', 'U', 'K', 'H', 'K', 'I', 'N', 'S', 'H', 'I', 'P', 'K', 'I', 'R', 'G', 'H', 'I', 'Z', 'K', 'O', 'M', 'B', 'U', 'V', 'A', 'K', 'O', 'O', 'M', 'U', 'U', 'T', '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', 'T', 'E', 'R', 'A', 'L', 'L', 'A', 'Y', 'A', 'N', 'N', 'A', 'L', 'E', 'A', 'T', 'H', 'E', 'R', 'L', 'E', 'G', 'E', 'T', 'O', 'S', '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', 'Z', 'E', 'N', 'G', 'E', 'L', 'Y', 'G', 'I', 'S', 'M', 'A', 'M', 'A', 'H', 'J', 'O', 'N', 'G', 'M', 'A', 'I', 'K', 'U', 'R', 'O', 'M', 'A', 'I', 'M', 'U', 'A', 'N', 'M', 'A', 'K', 'S', 'U', 'R', 'A', 'M', 'A', 'L', 'A', 'K', 'O', 'N', 'M', 'A', 'L', 'T', 'E', 'S', 'E', 'M', 'A', 'N', 'S', 'Y', 'O', 'N', 'M', 'A', 'R', 'B', 'U', 'T', 'A', 'M', 'A', 'R', 'C', 'A', 'T', 'O', 'M', 'A', 'S', 'S', 'I', 'N', 'G', 'M', 'A', 'T', 'T', 'O', 'C', 'K', 'M', 'A', 'Y', 'A', 'N', 'N', 'A', 'M', 'E', 'A', 'S', 'U', 'R', 'E', 'M', 'E', 'E', 'T', 'O', 'R', 'U', 'M', 'E', 'G', 'A', 'T', 'O', 'N', 'M', 'E', 'R', 'C', 'U', 'R', 'Y', 'M', 'I', 'D', 'L', 'I', 'N', 'E', 'M', 'I', 'K', 'U', 'R', 'O', 'N', 'M', 'O', 'D', 'E', 'S', 'T', 'Y', 'M', 'O', 'R', 'N', 'I', 'N', 'G', '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', 'G', 'A', 'T', 'E', 'D', 'N', 'E', 'I', 'T', 'H', 'E', 'R', 'N', 'E', 'P', 'T', 'U', 'N', 'E', 'N', 'E', 'U', 'T', 'R', 'A', 'L', 'N', 'E', 'W', 'L', 'I', 'N', 'E', 'N', 'G', 'E', 'A', 'D', 'A', 'L', 'N', 'I', 'K', 'A', 'H', 'I', 'T', 'N', 'O', 'M', 'I', 'N', 'A', 'L', 'N', 'O', 'T', 'C', 'H', 'E', 'D', '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', 'I', 'N', '-', 'D', 'O', 'O', 'B', 'L', 'I', 'Q', 'U', 'E', 'O', 'B', 'O', 'F', 'I', 'L', 'I', 'O', 'C', 'T', 'O', 'B', 'E', 'R', 'O', 'M', 'I', 'C', 'R', 'O', 'N', 'O', 'N', 'E', 'S', 'E', 'L', 'F', 'O', 'O', 'Y', 'A', 'N', 'N', 'A', 'O', 'P', 'E', 'N', 'I', 'N', 'G', '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', 'Y', 'P', 'A', 'C', 'K', 'I', 'N', 'G', 'P', 'A', 'L', 'A', 'T', 'A', 'L', 'P', 'A', 'L', 'A', 'U', 'N', 'G', 'P', 'A', 'L', 'L', 'A', 'W', 'A', 'P', 'A', 'M', 'A', 'A', 'E', 'H', 'P', 'A', 'M', 'E', 'P', 'E', 'T', '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', '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', 'I', 'E', 'U', 'P', 'H', 'P', 'H', 'I', 'N', 'T', 'H', 'U', 'P', 'H', 'U', 'T', 'H', 'A', 'O', 'P', 'I', 'L', 'C', 'R', 'O', 'W', 'P', 'L', 'A', 'G', 'I', 'O', 'S', 'P', 'O', 'D', 'A', 'T', 'U', 'S', 'P', 'O', 'I', 'N', 'T', 'E', 'D', 'P', 'O', 'I', 'N', 'T', 'E', 'R', 'P', 'R', 'E', 'C', 'E', 'D', 'E', 'P', 'R', 'E', 'F', 'A', 'C', 'E', 'P', 'R', 'I', 'V', 'A', 'T', 'E', 'P', 'R', 'O', 'D', 'U', 'C', 'T', 'P', 'U', 'S', 'H', 'I', 'N', 'G', 'Q', 'U', 'A', 'R', 'T', 'E', 'R', 'R', 'A', 'D', 'I', 'C', 'A', 'L', 'R', 'A', 'K', 'H', 'A', 'N', 'G', 'R', 'A', 'P', 'I', 'S', 'M', 'A', 'R', 'A', 'Y', 'A', 'N', 'N', 'A', 'R', 'E', 'A', 'H', 'M', 'U', 'K', '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', 'T', 'T', 'O', 'R', 'U', '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', 'U', 'U', 'B', 'U', 'R', 'U', 'S', 'A', 'I', 'K', 'U', 'R', 'U', 'S', 'A', 'L', 'T', 'I', 'R', 'E', 'S', 'A', 'M', 'P', 'H', 'A', 'O', 'S', 'A', 'N', 'Y', 'A', 'K', 'A', 'S', 'A', 'Y', 'A', 'N', 'N', 'A', 'S', 'C', 'H', 'O', 'L', 'A', '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', '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', 'P', 'I', 'N', 'G', 'S', 'H', 'A', 'V', 'I', 'A', 'N', 'S', 'H', 'E', 'S', 'H', 'I', 'G', 'S', 'H', 'T', 'A', 'P', 'I', 'C', 'S', 'H', 'U', 'F', 'F', 'L', 'E', 'S', 'I', 'L', 'I', 'Q', 'U', 'A', 'S', 'I', 'M', 'I', 'L', 'A', 'R', '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', 'O', 'P', 'I', 'N', 'G', 'S', 'M', 'A', 'L', 'L', 'E', 'R', 'S', 'M', 'I', 'L', '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', 'P', 'A', 'C', 'I', 'N', 'G', 'S', 'P', 'A', 'R', 'K', 'L', 'E', 'S', 'P', 'E', 'C', 'I', 'A', 'L', 'S', 'P', 'I', 'D', 'E', 'R', 'Y', 'S', 'P', 'I', 'R', 'A', 'N', 'T', 'S', 'P', 'R', 'I', 'N', 'G', 'S', 'S', 'Q', 'U', 'A', 'R', 'E', 'D', 'S', 'Q', 'U', 'A', 'R', 'E', 'S', 'S', 'T', 'A', 'T', 'E', 'R', 'S', 'S', 'T', 'A', 'U', 'R', 'O', 'S', 'S', 'T', 'A', 'V', 'R', 'O', 'S', 'S', 'T', 'A', 'V', 'R', 'O', 'U', 'S', 'T', 'R', 'O', 'K', 'E', 'S', 'S', 'U', 'B', 'J', 'E', 'C', 'T', 'S', 'U', 'B', 'U', 'N', 'I', 'T', 'S', 'U', 'C', 'C', 'E', 'E', 'D', 'S', 'U', 'R', 'F', 'A', 'C', 'E', 'S', 'Y', 'N', 'A', 'G', 'M', 'A', 'S', 'Y', 'N', 'E', 'V', 'M', 'A', 'T', 'A', 'A', 'L', 'U', 'J', 'A', 'T', 'A', 'G', 'A', 'L', 'O', 'G', 'T', 'A', 'I', 'S', 'Y', 'O', 'U', 'T', 'A', 'L', 'E', 'N', 'T', 'S', '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', 'H', '-', 'C', 'R', 'E', 'E', 'T', 'H', 'E', 'S', 'E', 'O', 'S', 'T', 'H', 'I', 'E', 'U', 'T', 'H', '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', 'N', 'A', 'G', 'M', 'A', 'T', 'R', 'I', 'G', 'R', 'A', 'M', 'T', 'R', 'I', 'I', 'S', 'A', 'P', 'T', 'R', 'I', 'S', 'E', 'M', 'E', 'T', 'T', 'U', 'D', 'D', 'A', 'G', 'U', '-', 'E', 'O', '-', 'E', 'U', 'U', 'B', 'A', 'D', 'A', 'M', 'A', 'U', 'B', 'U', 'F', 'I', 'L', 'I', 'U', 'P', 'R', 'I', 'G', 'H', 'T', 'U', 'P', 'S', 'I', 'L', 'O', 'N', 'U', 'P', 'W', 'A', 'R', 'D', 'S', 'U', 'U', 'Y', 'A', 'N', 'N', 'A', 'V', 'A', 'R', 'E', 'I', 'A', 'I', 'V', 'A', 'R', 'I', 'A', 'N', 'T', 'V', 'A', 'Y', 'A', 'N', 'N', 'A', 'V', 'I', 'C', 'T', 'O', 'R', 'Y', 'V', 'I', 'L', 'L', 'A', 'G', 'E', 'V', 'I', 'S', 'A', 'R', 'G', 'A', 'V', 'O', 'C', 'A', 'L', 'I', 'C', 'V', 'O', 'I', 'C', 'I', 'N', 'G', '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', 'S', 'T', 'E', 'R', 'N', 'W', 'H', 'E', 'E', 'L', 'E', 'D', 'W', 'R', 'I', 'T', 'I', 'N', 'G', 'Y', 'A', 'Y', 'A', 'N', 'N', 'A', 'Y', 'I', 'D', 'D', 'I', 'S', 'H', 'Y', 'P', 'O', 'R', 'R', 'O', 'I', 'Z', 'H', 'I', 'V', 'E', 'T', 'E', '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', 'L', 'I', 'A', 'N', 'C', 'E', 'A', 'L', 'V', 'E', 'O', 'L', 'A', 'R', 'A', 'N', 'G', 'S', 'T', 'R', 'O', 'M', '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', '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', 'T', 'H', 'A', 'C', 'A', 'N', 'A', 'V', 'A', 'G', 'R', 'A', 'H', 'A', 'B', 'A', 'L', 'I', 'N', 'E', 'S', 'E', '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', 'D', 'E', 'N', 'T', 'A', 'L', 'B', 'I', 'L', 'A', 'B', 'I', 'A', 'L', 'B', 'O', 'P', 'O', 'M', 'O', 'F', 'O', 'B', 'O', 'U', 'N', 'D', 'A', 'R', 'Y', 'B', 'U', 'G', 'I', 'N', 'E', 'S', 'E', 'B', 'U', 'L', 'L', 'S', 'E', 'Y', 'E', 'B', 'U', 'S', 'S', 'Y', 'E', 'R', 'U', 'C', 'A', 'D', 'U', 'C', 'E', 'U', 'S', 'C', 'A', 'N', 'A', 'D', 'I', 'A', 'N', 'C', 'A', 'R', 'R', 'I', 'A', 'G', 'E', 'C', 'A', 'U', 'L', 'D', 'R', 'O', 'N', 'C', 'H', 'A', 'M', 'I', 'L', 'O', 'N', 'C', 'H', 'A', 'T', 'T', 'A', 'W', 'A', 'C', 'H', 'E', 'R', 'O', 'K', 'E', 'E', 'C', 'H', 'O', 'R', 'E', 'V', 'M', 'A', 'C', 'H', 'O', 'S', 'E', 'O', 'N', 'G', 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'R', 'C', 'I', 'V', 'I', 'L', 'I', 'A', 'N', 'C', 'L', 'I', 'M', 'A', 'C', 'U', 'S', 'C', 'L', 'I', 'N', 'G', 'I', 'N', 'G', 'C', 'O', 'N', 'F', 'L', 'I', 'C', 'T', 'C', 'O', 'N', 'S', 'T', 'A', 'N', 'T', 'C', 'O', 'N', 'T', 'A', 'I', 'N', 'S', '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', 'Z', 'E', 'I', 'R', 'O', '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', 'N', 'A', 'R', 'I', 'U', 'S', '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', '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', 'V', 'I', 'S', 'I', 'O', 'N', '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', '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', 'U', 'R', 'A', 'T', 'I', 'O', 'N', 'D', 'V', 'I', 'S', 'V', 'A', 'R', 'A', 'E', 'I', 'G', 'H', 'T', 'E', 'E', 'N', 'E', 'L', 'E', 'C', 'T', 'R', 'I', 'C', 'E', 'L', 'L', 'I', 'P', 'S', 'I', 'S', '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', 'X', 'T', 'E', 'N', 'D', 'E', 'D', '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', 'N', 'G', 'E', 'R', 'E', 'D', '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', 'N', 'O', 'T', 'E', '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', 'N', 'I', 'T', 'I', 'V', 'E', 'G', 'E', 'O', 'R', 'G', 'I', 'A', 'N', 'G', 'R', 'A', 'P', 'H', 'E', 'M', 'E', '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', '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', 'E', 'A', 'V', 'E', 'N', 'L', 'Y', 'H', 'E', 'X', 'A', 'G', 'R', 'A', 'M', 'H', 'I', 'R', 'A', 'G', 'A', 'N', 'A', 'H', 'U', 'A', 'R', 'A', 'D', 'D', 'O', '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', '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', 'I', 'Y', 'A', 'N', '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', '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', 'I', 'G', 'A', 'T', 'U', 'R', 'E', 'L', 'O', 'C', 'A', 'T', 'I', 'O', 'N', 'L', 'O', 'C', 'A', 'T', 'I', 'V', 'E', 'L', 'O', 'G', 'O', 'T', 'Y', 'P', 'E', 'L', 'O', 'R', 'R', 'A', 'I', 'N', 'E', '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', 'E', 'A', 'S', 'U', 'R', 'E', 'D', 'M', 'E', 'D', 'I', 'C', 'I', 'N', 'E', 'M', 'E', 'T', 'R', 'E', 'T', 'E', 'S', 'M', 'E', 'T', 'R', 'I', 'C', 'A', 'L', 'M', 'I', 'L', 'L', 'I', 'O', 'N', 'S', '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', 'U', 'N', 'T', 'A', 'I', 'N', 'M', 'U', 'L', 'T', 'I', 'M', 'A', 'P', 'M', 'U', 'L', 'T', 'I', 'P', 'L', 'E', 'M', 'U', 'L', 'T', 'I', 'S', 'E', 'T', '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', 'I', 'K', 'H', 'A', 'H', 'I', 'T', 'N', 'I', 'N', 'E', 'T', 'E', 'E', 'N', 'N', 'O', '-', 'B', 'R', 'E', 'A', 'K', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', 'N', 'O', 'T', 'E', 'H', 'E', 'A', 'D', 'N', 'O', 'V', 'E', 'M', 'B', 'E', 'R', 'O', 'M', 'I', 'S', 'S', 'I', 'O', 'N', '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', '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', 'G', 'H', 'U', 'L', 'U', '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', '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', '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', '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', 'S', 'I', 'T', 'I', 'O', 'N', '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', 'V', 'I', 'O', 'U', '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', 'Q', 'A', 'I', 'R', 'T', 'H', 'R', 'A', 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', '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', 'O', 'R', 'D', 'E', 'R', 'R', 'E', 'C', 'Y', 'C', 'L', 'E', 'D', 'R', 'E', 'L', 'A', 'T', 'I', 'O', 'N', 'R', 'E', 'L', 'I', 'G', 'I', 'O', 'N', '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', 'V', 'E', 'R', 'S', 'E', 'D', 'R', 'U', 'K', 'K', 'A', 'K', 'H', 'A', 'S', '-', 'S', 'H', 'A', 'P', 'E', 'D', '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', 'U', 'S', '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', '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', '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', 'X', '-', 'L', 'I', 'N', 'E', 'S', 'L', 'A', 'V', 'O', 'N', 'I', 'C', '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', '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', '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', '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', 'T', 'T', 'O', 'O', 'E', 'D', 'T', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', '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', 'R', 'T', 'E', 'E', 'N', 'T', 'H', 'O', 'U', 'S', 'A', 'N', 'D', 'T', 'H', 'U', 'R', 'I', 'S', 'A', 'Z', 'T', 'I', 'F', 'I', 'N', 'A', 'G', 'H', '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', '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', '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', 'O', '-', 'L', 'I', 'N', 'E', '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', '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', 'I', 'E', 'W', 'D', 'A', 'T', 'A', 'W', 'A', 'N', 'D', 'E', 'R', 'E', 'R', 'W', 'A', 'S', 'A', 'L', 'L', 'A', 'M', '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', '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', 'P', 'E', 'R', 'S', 'A', 'N', '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', 'B', 'A', 'C', 'K', 'S', 'L', 'A', 'S', 'H', 'B', 'A', 'C', 'K', 'S', 'P', 'A', 'C', 'E', 'B', 'E', 'G', 'I', 'N', 'N', 'I', 'N', 'G', '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', 'N', 'C', 'H', 'I', 'N', 'G', 'B', 'Y', 'Z', 'A', 'N', 'T', 'I', 'N', 'E', 'C', 'A', 'P', 'R', 'I', 'C', 'O', 'R', 'N', 'C', 'A', 'R', 'P', 'E', 'N', 'T', 'R', 'Y', 'C', 'A', 'R', 'Y', 'S', 'T', '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', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', 'C', 'L', 'O', 'S', 'E', 'N', 'E', 'S', 'S', 'C', 'O', 'M', 'B', 'I', 'N', 'I', 'N', 'G', 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'E', 'D', 'C', 'O', 'N', 'G', 'R', 'U', 'E', 'N', 'T', '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', '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', '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', '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', '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', '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', 'Y', 'B', 'E', 'Y', 'F', 'I', 'L', 'I', 'F', 'A', 'C', 'S', 'I', 'M', 'I', 'L', 'E', 'F', 'A', 'N', 'E', 'R', 'O', 'S', 'I', 'S', 'F', 'I', 'N', 'A', 'N', 'C', 'I', 'A', 'L', 'F', 'I', 'V', 'E', '-', 'L', 'I', 'N', 'E', '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', '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', 'E', 'A', 'T', 'N', 'E', 'S', 'S', 'G', 'R', 'E', 'G', 'O', 'R', 'I', 'A', 'N', 'G', 'U', 'R', 'A', 'M', 'U', 'T', 'O', 'N', 'H', 'A', 'L', 'F', 'W', 'I', 'D', 'T', 'H', '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', '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', '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', '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', 'I', 'R', 'O', 'W', 'A', 'T', 'T', 'O', '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', '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', 'S', 'C', 'U', 'L', 'I', 'N', 'E', 'M', 'A', 'T', 'E', 'R', 'I', 'A', 'L', 'S', 'M', 'E', 'S', 'S', 'E', 'N', 'I', 'A', 'N', 'M', 'E', 'T', 'O', 'B', 'E', 'L', 'U', 'S', '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', 'U', 'K', 'P', 'H', 'R', 'E', 'N', 'G', 'M', 'U', 'U', 'R', 'D', 'H', 'A', 'J', 'A', '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', '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', 'O', 'B', 'O', 'O', 'F', 'I', 'L', 'I', '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', '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', 'R', 'A', 'G', 'R', 'A', 'P', 'H', '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', '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', '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', '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', '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', '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', 'P', 'R', 'E', 'S', 'E', 'N', 'T', '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', 'I', 'G', 'H', 'T', 'H', 'A', 'N', 'D', 'S', 'A', 'M', 'A', 'R', 'I', 'T', 'A', 'N', 'S', 'C', 'A', 'N', 'D', 'I', 'C', 'U', 'S', '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', 'O', 'R', 'T', 'E', 'N', 'E', 'R', 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'T', 'H', 'S', 'N', 'O', 'W', 'F', 'L', 'A', 'K', 'E', 'S', 'P', 'H', 'E', 'R', 'I', 'C', 'A', 'L', 'S', 'P', 'L', 'I', 'T', 'T', 'I', 'N', 'G', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', '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', 'U', 'B', 'J', 'O', 'I', 'N', 'E', 'D', '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', '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', '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', 'E', 'L', 'E', 'G', 'R', 'A', 'P', 'H', 'T', 'E', 'L', 'E', 'P', 'H', 'O', 'N', 'E', 'T', 'E', 'T', 'R', 'A', 'G', 'R', 'A', 'M', 'T', 'E', 'T', 'R', 'A', 'S', 'E', 'M', 'E', 'T', 'H', 'E', 'R', 'E', 'F', 'O', 'R', 'E', 'T', 'H', 'O', 'U', 'S', 'A', 'N', 'D', 'S', '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', 'U', 'N', 'C', 'A', 'T', 'E', 'D', 'T', 'U', 'R', 'N', 'S', 'T', 'I', 'L', 'E', 'T', 'U', 'T', 'E', 'Y', 'A', 'S', 'A', 'T', 'U', 'K', 'R', 'A', 'I', 'N', 'I', 'A', 'N', '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', 'I', 'S', 'A', 'R', 'G', 'A', 'Y', 'A', 'V', 'O', 'I', 'C', 'E', 'L', 'E', 'S', 'S', 'W', 'A', 'S', 'S', 'A', 'L', 'L', 'A', 'M', 'W', 'E', 'S', 'T', '-', 'C', 'R', 'E', 'E', 'W', 'O', 'R', 'D', 'S', 'P', 'A', 'C', 'E', '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', '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', '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', 'R', 'P', 'E', 'G', 'G', 'I', 'A', 'T', 'O', 'A', 'R', 'R', 'O', 'W', '-', 'T', 'A', 'I', 'L', 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'C', 'U', 'S', 'A', 'T', 'H', 'A', 'P', 'A', 'S', 'C', 'A', 'N', 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', 'B', 'A', 'R', 'I', 'Y', 'O', 'O', 'S', 'A', 'N', 'B', 'A', 'T', 'H', 'A', 'M', 'A', 'S', 'A', 'T', 'B', 'I', 'B', 'L', 'E', '-', 'C', 'R', 'E', 'E', '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', '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', 'O', 'U', 'S', 'C', 'R', 'O', 'S', 'S', 'B', 'O', 'N', 'E', 'S', 'C', 'R', 'O', 'S', 'S', 'H', 'A', 'T', 'C', 'H', 'D', 'A', 'G', 'B', 'A', 'S', 'I', 'N', 'N', 'A', 'D', 'E', 'F', 'I', 'N', 'I', 'T', 'I', 'O', 'N', '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', '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', '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', 'O', 'U', 'N', 'T', 'E', 'R', 'S', 'E', 'N', 'T', 'E', 'R', 'P', 'R', 'I', 'S', 'E', 'E', 'N', 'T', 'H', 'U', 'S', 'I', 'A', 'S', 'M', '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', 'H', 'A', 'U', 'S', 'T', 'I', 'O', 'N', 'E', 'X', 'T', 'R', 'A', '-', 'H', 'I', 'G', 'H', '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', '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', 'H', 'E', 'R', 'M', 'I', 'O', 'N', 'I', 'A', 'N', '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', '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', 'I', 'M', 'I', 'T', 'A', 'T', 'I', 'O', 'N', 'M', 'E', 'M', 'B', 'E', 'R', 'S', 'H', 'I', 'P', 'M', 'I', 'E', 'U', 'M', '-', 'S', 'I', 'O', 'S', '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', 'U', '-', 'G', 'A', 'A', 'H', 'L', 'A', 'A', 'N', 'A', 'A', 'S', 'I', 'K', 'Y', 'A', 'Y', 'A', 'N', 'A', 'N', 'G', 'M', 'O', 'N', 'T', 'H', 'O', 'N', 'I', 'E', 'U', 'N', '-', 'S', 'I', 'O', 'S', 'N', 'O', 'N', '-', 'J', 'O', 'I', 'N', 'E', 'R', 'N', 'O', 'N', 'F', 'O', 'R', 'K', 'I', 'N', 'G', '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', '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', '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', 'R', 'C', 'U', 'S', 'S', 'I', 'V', 'E', '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', 'L', 'U', 'S', '-', 'M', 'I', 'N', 'U', 'S', 'P', 'O', 'S', 'S', 'E', 'S', 'S', 'I', 'O', 'N', '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', 'G', 'I', 'S', 'T', 'E', 'R', 'E', 'D', 'R', 'E', 'L', 'A', 'T', 'I', 'O', 'N', 'A', 'L', 'R', 'E', 'S', 'I', 'S', 'T', 'A', 'N', 'C', 'E', 'R', 'E', 'S', 'O', 'L', 'U', 'T', 'I', 'O', 'N', 'R', 'E', 'V', 'O', 'L', 'U', 'T', 'I', 'O', 'N', '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', 'U', 'R', 'A', 'S', 'H', 'T', 'R', 'A', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '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', 'S', 'T', 'E', 'R', 'T', 'I', 'U', 'S', 'S', 'H', 'A', 'L', 'S', 'H', 'E', 'L', 'E', 'T', 'S', 'H', 'O', 'U', 'L', 'D', 'E', 'R', 'E', 'D', 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', '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', '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', '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', 'U', 'B', 'P', 'U', 'N', 'C', 'T', 'I', 'S', 'S', 'U', 'B', 'S', 'T', 'I', 'T', 'U', 'T', 'E', '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', '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', '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', '-', 'H', 'E', 'A', 'D', 'E', 'D', 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', 'L', 'Y', 'V', 'I', 'S', 'I', 'G', 'O', 'T', 'H', 'I', 'C', 'W', 'H', 'E', 'E', 'L', 'C', 'H', 'A', 'I', 'R', 'W', 'O', 'O', 'D', 'S', '-', 'C', 'R', 'E', 'E', 'A', 'C', 'K', 'N', 'O', 'W', 'L', 'E', 'D', 'G', 'E', 'A', 'E', 'S', 'C', 'U', 'L', 'A', 'P', 'I', 'U', 'S', 'A', 'G', 'G', 'R', 'A', 'V', 'A', 'T', 'I', 'O', 'N', 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'O', 'N', 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'V', 'E', 'A', 'P', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', 'A', 'P', 'P', 'R', 'O', 'X', 'I', 'M', 'A', 'T', 'E', 'B', 'A', 'C', 'K', '-', 'T', 'I', 'L', 'T', 'E', 'D', 'C', 'A', 'N', 'D', 'R', 'A', 'B', 'I', 'N', 'D', 'U', 'C', 'I', 'E', 'U', 'C', '-', 'I', 'E', 'U', 'N', 'G', 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'T', 'I', 'O', 'N', 'C', 'L', 'U', 'B', '-', 'S', 'P', 'O', 'K', 'E', 'D', 'C', 'O', 'M', 'P', 'O', 'S', 'I', 'T', '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', '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', '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', 'Q', 'U', 'I', 'A', 'N', 'G', 'U', 'L', 'A', 'R', 'E', 'X', 'C', 'L', 'A', 'M', 'A', 'T', 'I', 'O', 'N', 'F', 'I', 'N', 'G', 'E', 'R', 'N', 'A', 'I', 'L', 'S', 'F', 'O', 'U', 'R', '-', 'P', 'E', 'R', '-', 'E', 'M', 'F', 'O', 'U', 'R', '-', 'S', 'T', 'R', 'I', 'N', 'G', 'G', 'A', 'Y', 'A', 'N', 'U', 'K', 'I', 'T', 'T', 'A', 'G', 'U', 'A', 'R', 'D', 'E', 'D', 'N', 'E', 'S', 'S', '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', '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', '-', 'M', 'I', 'E', 'U', 'M', 'I', 'E', 'U', 'N', 'G', '-', 'P', 'I', 'E', 'U', 'P', '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', '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', '-', 'S', 'H', 'A', 'D', 'E', 'D', 'M', 'A', 'H', 'A', 'A', 'P', 'R', 'A', 'A', 'N', 'A', 'M', 'I', 'E', 'U', 'M', '-', 'H', 'I', 'E', 'U', 'H', 'M', 'I', 'E', 'U', 'M', '-', 'P', 'I', 'E', 'U', 'P', 'M', 'I', 'E', 'U', 'M', '-', 'R', 'I', 'E', 'U', 'L', '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', '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', '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', 'I', 'S', 'P', 'A', 'R', 'T', 'N', 'E', 'R', 'S', 'H', 'I', 'P', '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', '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', '-', 'N', 'I', 'E', 'U', 'N', 'P', 'I', 'E', 'U', 'P', '-', 'R', 'I', 'E', 'U', 'L', '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', '-', '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', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '9', 'S', 'E', 'M', 'I', '-', 'V', 'O', 'I', 'C', 'E', 'D', 'S', 'E', 'M', 'I', 'S', 'E', 'X', 'T', 'I', 'L', 'E', 'S', 'I', 'N', 'G', 'L', 'E', '-', 'L', 'I', 'N', 'E', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', 'S', 'S', 'A', 'N', 'G', 'T', 'I', 'K', 'E', 'U', 'T', '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', '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', 'P', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', 'U', 'P', 'A', 'D', 'H', 'M', 'A', 'N', 'I', 'Y', 'A', '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', 'R', 'A', 'B', 'I', 'C', '-', 'I', 'N', 'D', 'I', 'C', 'A', 'S', 'T', 'R', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', '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', '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', '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', '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', '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', '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', '-', 'T', 'I', 'L', 'T', 'E', 'D', 'G', 'A', 'E', 'T', 'T', 'A', '-', 'P', 'I', 'L', 'L', 'A', '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', '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', 'Y', 'E', 'O', 'K', '-', 'R', 'I', 'E', 'U', 'L', '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', 'I', 'D', 'D', 'L', 'E', '-', 'W', 'E', 'L', 'S', 'H', 'M', 'I', 'E', 'U', 'M', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'N', 'A', 'S', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', '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', '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', 'Q', 'U', 'I', 'N', 'D', 'I', 'C', 'E', 'S', 'I', 'M', 'A', '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', '-', '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', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '6', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '7', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '8', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '9', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '0', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '1', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '2', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '3', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '4', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '5', 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '6', 'S', 'E', 'M', 'I', 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'R', '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', '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', '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', '-', 'P', 'E', 'R', '-', 'E', 'M', 'T', 'H', 'U', 'N', 'D', 'E', 'R', 'S', 'T', 'O', 'R', 'M', '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', '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', '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', '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', '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', 'M', 'B', 'E', 'L', 'L', 'I', 'S', 'H', 'M', 'E', 'N', 'T', 'E', 'U', 'R', 'O', '-', 'C', 'U', 'R', 'R', 'E', 'N', 'C', 'Y', 'G', 'E', 'O', 'M', 'E', 'T', 'R', 'I', 'C', 'A', 'L', 'L', 'Y', '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', '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', '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', '-', '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', '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', '-', 'P', 'I', 'E', 'U', 'P', 'P', 'I', 'E', 'U', 'P', '-', 'C', 'H', 'I', 'E', 'U', 'C', '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', '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', '-', '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', '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', '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', 'N', 'T', 'Y', '-', 'E', 'I', 'G', 'H', 'T', 'H', 'V', 'O', 'W', 'E', 'L', '-', 'C', 'A', 'R', 'R', 'I', 'E', 'R', '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', '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', 'O', 'N', 'G', 'R', 'A', 'T', 'U', 'L', 'A', 'T', 'I', 'O', 'N', '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', 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'A', 'R', 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'Y', 'R', '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', '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', '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', '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', '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', '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', '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', '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', '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', 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'S', 'H', 'A', 'N', 'K', 'E', 'D', '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', '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', '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', '-', 'P', 'I', 'E', 'U', 'P', '-', 'H', 'I', 'E', 'U', 'H', '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', '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', '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', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'H', 'A', 'G', 'A', 'L', 'L', 'P', 'A', 'R', 'T', 'I', 'A', 'L', 'L', 'Y', '-', 'R', 'E', 'C', 'Y', 'C', 'L', 'E', 'D', 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'K', 'I', 'Y', 'E', 'O', 'K', 'R', 'I', 'E', 'U', 'L', '-', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'H', 'I', 'E', 'U', 'H', 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'B', 'J', 'A', 'R', 'K', 'A', 'N', 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', 'O', 'P', 'E', 'N', '-', 'C', 'I', 'R', 'C', 'U', 'I', 'T', '-', 'O', 'U', 'T', 'P', 'U', 'T', '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', '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', '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', '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 6710 static const struct { uint16_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[26] = { { 0, 0 }, { 0, 0 }, { 26, 26 }, { 658, 342 }, { 4468, 1612 }, { 10756, 3184 }, { 14596, 3952 }, { 17782, 4483 }, { 20883, 4926 }, { 24251, 5347 }, { 27446, 5702 }, { 29846, 5942 }, { 32629, 6195 }, { 35689, 6450 }, { 36599, 6520 }, { 37607, 6592 }, { 38012, 6619 }, { 38956, 6678 }, { 39177, 6691 }, { 39357, 6701 }, { 39414, 6704 }, { 39434, 6705 }, { 39476, 6707 }, { 39520, 6709 }, { 39520, 6709 }, { 39544, 6710 } }; #define UNICODE_CHARNAME_WORD_HANGUL 4143 #define UNICODE_CHARNAME_WORD_SYLLABLE 5292 #define UNICODE_CHARNAME_WORD_CJK 454 #define UNICODE_CHARNAME_WORD_COMPATIBILITY 6457 static const uint16_t unicode_names[75152] = { 23, 3, 761, 8774, 37, 275, 10642, 47, 275, 1, 11203, 826, 51, 10365, 753, 11680, 51, 10365, 4849, 6989, 9050, 51, 10365, 4849, 9045, 9050, 51, 10365, 5782, 51, 10365, 6031, 6610, 51, 10365, 7421, 13188, 51, 10365, 7443, 6989, 9050, 51, 10365, 7443, 9045, 9050, 51, 10365, 8131, 13188, 51, 10365, 8675, 8590, 51, 10365, 8675, 11734, 51, 10365, 8675, 11908, 51, 10365, 11751, 11908, 63, 9128, 175, 3992, 175, 5496, 175, 7608, 177, 3992, 177, 5496, 177, 7608, 435, 6573, 385, 9798, 435, 6573, 3232, 435, 6573, 6689, 2170, 435, 6573, 6689, 2540, 435, 6573, 6689, 2778, 435, 6573, 6689, 4200, 435, 6573, 6689, 4214, 435, 6573, 6689, 5190, 435, 6573, 6689, 6260, 435, 6573, 6689, 6722, 435, 6573, 6689, 7508, 435, 6573, 6689, 7694, 435, 6573, 7430, 435, 6573, 8405, 68, 435, 6573, 8405, 76, 435, 6573, 8405, 90, 435, 6573, 8405, 176, 435, 6573, 8405, 180, 435, 6573, 8405, 264, 435, 6573, 8405, 280, 435, 6573, 8405, 282, 435, 6573, 8405, 332, 435, 6573, 8405, 336, 435, 6573, 8405, 340, 435, 6573, 8405, 350, 435, 6573, 8405, 354, 435, 6573, 8405, 424, 435, 6573, 8405, 430, 435, 6573, 8405, 452, 435, 6573, 8405, 586, 435, 6573, 8405, 588, 435, 6573, 8405, 608, 435, 6573, 8405, 692, 435, 6573, 8405, 694, 435, 6573, 8405, 696, 435, 6573, 8405, 698, 435, 6573, 8405, 722, 435, 6573, 8405, 1096, 435, 6573, 8405, 1120, 435, 6573, 8405, 1492, 435, 6573, 8405, 1732, 435, 6573, 8405, 2182, 435, 6573, 8405, 2814, 435, 6573, 9299, 10654, 435, 6573, 10426, 435, 6573, 11691, 10654, 435, 6573, 12133, 8153, 8488, 435, 6573, 12133, 8488, 445, 6121, 1045, 8318, 601, 3713, 4849, 4117, 3713, 4849, 9326, 601, 3713, 4849, 4117, 3713, 7443, 9326, 601, 3713, 7443, 4117, 3713, 4849, 9326, 601, 3713, 7443, 4117, 3713, 7443, 9326, 601, 4117, 6434, 601, 4117, 6435, 6121, 3716, 601, 4117, 6505, 6434, 601, 4117, 7821, 6434, 601, 4117, 8153, 6434, 601, 4197, 5878, 601, 5876, 601, 5877, 6121, 8057, 6376, 601, 6435, 9785, 8056, 601, 7443, 10001, 10154, 601, 10716, 601, 10717, 9043, 2779, 11649, 3714, 657, 9617, 134, 657, 9617, 152, 657, 9617, 216, 657, 9617, 298, 657, 9617, 310, 657, 9617, 340, 657, 9617, 374, 657, 9617, 442, 657, 9617, 576, 657, 9617, 632, 657, 9617, 660, 657, 9617, 670, 657, 9617, 832, 657, 9617, 886, 657, 9617, 902, 657, 9617, 946, 657, 9617, 950, 657, 9617, 1242, 657, 9617, 1294, 657, 9617, 1406, 657, 9617, 1538, 657, 9617, 1636, 657, 9617, 1782, 657, 9617, 1844, 657, 9617, 1940, 657, 9617, 2262, 657, 9617, 2278, 657, 9617, 2324, 657, 9617, 2526, 657, 9617, 2570, 657, 9617, 2656, 657, 9617, 2860, 657, 9617, 2890, 657, 9617, 3074, 657, 9617, 3182, 657, 9617, 3194, 657, 9617, 3196, 657, 9617, 3748, 657, 9617, 3962, 657, 9617, 4040, 657, 9617, 4292, 657, 9617, 4298, 657, 9617, 4572, 657, 9617, 4576, 657, 9617, 4582, 657, 9617, 4646, 657, 9617, 4666, 657, 9617, 5064, 657, 9617, 5304, 657, 9617, 5318, 657, 9617, 5356, 657, 9617, 5674, 657, 9617, 5712, 657, 9617, 5726, 657, 9617, 7896, 657, 10585, 0, 657, 10585, 8, 657, 10585, 16, 657, 10585, 28, 657, 10585, 84, 657, 10585, 90, 657, 10585, 96, 657, 10585, 100, 657, 10585, 102, 657, 10585, 106, 657, 10585, 108, 657, 10585, 112, 657, 10585, 114, 657, 10585, 116, 657, 10585, 122, 657, 10585, 126, 657, 10585, 130, 657, 10585, 132, 657, 10585, 134, 657, 10585, 138, 657, 10585, 142, 657, 10585, 144, 657, 10585, 150, 657, 10585, 152, 657, 10585, 194, 657, 10585, 196, 657, 10585, 202, 657, 10585, 208, 657, 10585, 210, 657, 10585, 212, 657, 10585, 216, 657, 10585, 220, 657, 10585, 224, 657, 10585, 228, 657, 10585, 230, 657, 10585, 236, 657, 10585, 238, 657, 10585, 246, 657, 10585, 258, 657, 10585, 278, 657, 10585, 284, 657, 10585, 288, 657, 10585, 296, 657, 10585, 298, 657, 10585, 300, 657, 10585, 302, 657, 10585, 306, 657, 10585, 310, 657, 10585, 314, 657, 10585, 322, 657, 10585, 326, 657, 10585, 332, 657, 10585, 336, 657, 10585, 340, 657, 10585, 350, 657, 10585, 354, 657, 10585, 360, 657, 10585, 364, 657, 10585, 368, 657, 10585, 374, 657, 10585, 380, 657, 10585, 384, 657, 10585, 390, 657, 10585, 392, 657, 10585, 396, 657, 10585, 404, 657, 10585, 412, 657, 10585, 416, 657, 10585, 442, 657, 10585, 448, 657, 10585, 456, 657, 10585, 462, 657, 10585, 476, 657, 10585, 480, 657, 10585, 486, 657, 10585, 492, 657, 10585, 500, 657, 10585, 502, 657, 10585, 506, 657, 10585, 508, 657, 10585, 510, 657, 10585, 512, 657, 10585, 516, 657, 10585, 520, 657, 10585, 522, 657, 10585, 524, 657, 10585, 526, 657, 10585, 532, 657, 10585, 536, 657, 10585, 546, 657, 10585, 552, 657, 10585, 556, 657, 10585, 560, 657, 10585, 564, 657, 10585, 568, 657, 10585, 576, 657, 10585, 598, 657, 10585, 610, 657, 10585, 614, 657, 10585, 616, 657, 10585, 618, 657, 10585, 620, 657, 10585, 622, 657, 10585, 626, 657, 10585, 632, 657, 10585, 634, 657, 10585, 644, 657, 10585, 646, 657, 10585, 650, 657, 10585, 656, 657, 10585, 660, 657, 10585, 664, 657, 10585, 668, 657, 10585, 670, 657, 10585, 672, 657, 10585, 676, 657, 10585, 678, 657, 10585, 680, 657, 10585, 682, 657, 10585, 758, 657, 10585, 762, 657, 10585, 764, 657, 10585, 766, 657, 10585, 768, 657, 10585, 770, 657, 10585, 772, 657, 10585, 774, 657, 10585, 776, 657, 10585, 786, 657, 10585, 790, 657, 10585, 804, 657, 10585, 808, 657, 10585, 810, 657, 10585, 812, 657, 10585, 820, 657, 10585, 822, 657, 10585, 826, 657, 10585, 828, 657, 10585, 830, 657, 10585, 832, 657, 10585, 834, 657, 10585, 836, 657, 10585, 846, 657, 10585, 848, 657, 10585, 850, 657, 10585, 852, 657, 10585, 860, 657, 10585, 862, 657, 10585, 864, 657, 10585, 880, 657, 10585, 882, 657, 10585, 884, 657, 10585, 886, 657, 10585, 890, 657, 10585, 892, 657, 10585, 894, 657, 10585, 896, 657, 10585, 902, 657, 10585, 904, 657, 10585, 906, 657, 10585, 916, 657, 10585, 918, 657, 10585, 922, 657, 10585, 926, 657, 10585, 928, 657, 10585, 930, 657, 10585, 932, 657, 10585, 934, 657, 10585, 946, 657, 10585, 948, 657, 10585, 950, 657, 10585, 952, 657, 10585, 964, 657, 10585, 968, 657, 10585, 970, 657, 10585, 974, 657, 10585, 976, 657, 10585, 978, 657, 10585, 980, 657, 10585, 982, 657, 10585, 992, 657, 10585, 994, 657, 10585, 1008, 657, 10585, 1014, 657, 10585, 1016, 657, 10585, 1018, 657, 10585, 1042, 657, 10585, 1044, 657, 10585, 1046, 657, 10585, 1062, 657, 10585, 1064, 657, 10585, 1066, 657, 10585, 1068, 657, 10585, 1070, 657, 10585, 1144, 657, 10585, 1146, 657, 10585, 1148, 657, 10585, 1162, 657, 10585, 1164, 657, 10585, 1166, 657, 10585, 1174, 657, 10585, 1178, 657, 10585, 1180, 657, 10585, 1182, 657, 10585, 1184, 657, 10585, 1186, 657, 10585, 1196, 657, 10585, 1198, 657, 10585, 1200, 657, 10585, 1218, 657, 10585, 1222, 657, 10585, 1224, 657, 10585, 1242, 657, 10585, 1246, 657, 10585, 1248, 657, 10585, 1250, 657, 10585, 1252, 657, 10585, 1254, 657, 10585, 1256, 657, 10585, 1258, 657, 10585, 1274, 657, 10585, 1278, 657, 10585, 1280, 657, 10585, 1282, 657, 10585, 1292, 657, 10585, 1294, 657, 10585, 1296, 657, 10585, 1312, 657, 10585, 1314, 657, 10585, 1316, 657, 10585, 1318, 657, 10585, 1320, 657, 10585, 1348, 657, 10585, 1352, 657, 10585, 1354, 657, 10585, 1364, 657, 10585, 1368, 657, 10585, 1380, 657, 10585, 1388, 657, 10585, 1390, 657, 10585, 1392, 657, 10585, 1394, 657, 10585, 1396, 657, 10585, 1398, 657, 10585, 1400, 657, 10585, 1402, 657, 10585, 1404, 657, 10585, 1406, 657, 10585, 1408, 657, 10585, 1410, 657, 10585, 1412, 657, 10585, 1414, 657, 10585, 1416, 657, 10585, 1426, 657, 10585, 1428, 657, 10585, 1430, 657, 10585, 1438, 657, 10585, 1450, 657, 10585, 1452, 657, 10585, 1454, 657, 10585, 1456, 657, 10585, 1476, 657, 10585, 1478, 657, 10585, 1480, 657, 10585, 1518, 657, 10585, 1522, 657, 10585, 1524, 657, 10585, 1526, 657, 10585, 1532, 657, 10585, 1534, 657, 10585, 1536, 657, 10585, 1538, 657, 10585, 1544, 657, 10585, 1546, 657, 10585, 1548, 657, 10585, 1552, 657, 10585, 1554, 657, 10585, 1556, 657, 10585, 1558, 657, 10585, 1560, 657, 10585, 1564, 657, 10585, 1566, 657, 10585, 1568, 657, 10585, 1570, 657, 10585, 1590, 657, 10585, 1592, 657, 10585, 1594, 657, 10585, 1604, 657, 10585, 1606, 657, 10585, 1608, 657, 10585, 1626, 657, 10585, 1634, 657, 10585, 1636, 657, 10585, 1638, 657, 10585, 1662, 657, 10585, 1664, 657, 10585, 1666, 657, 10585, 1692, 657, 10585, 1694, 657, 10585, 1696, 657, 10585, 1698, 657, 10585, 1700, 657, 10585, 1742, 657, 10585, 1746, 657, 10585, 1750, 657, 10585, 1766, 657, 10585, 1768, 657, 10585, 1782, 657, 10585, 1788, 657, 10585, 1790, 657, 10585, 1792, 657, 10585, 1804, 657, 10585, 1806, 657, 10585, 1810, 657, 10585, 1824, 657, 10585, 1826, 657, 10585, 1828, 657, 10585, 1830, 657, 10585, 1832, 657, 10585, 1842, 657, 10585, 1844, 657, 10585, 1846, 657, 10585, 1848, 657, 10585, 1862, 657, 10585, 1866, 657, 10585, 1868, 657, 10585, 1898, 657, 10585, 1900, 657, 10585, 1902, 657, 10585, 1904, 657, 10585, 1906, 657, 10585, 1912, 657, 10585, 1924, 657, 10585, 1926, 657, 10585, 1928, 657, 10585, 1940, 657, 10585, 1942, 657, 10585, 1944, 657, 10585, 1954, 657, 10585, 1956, 657, 10585, 1958, 657, 10585, 1960, 657, 10585, 1962, 657, 10585, 1974, 657, 10585, 1976, 657, 10585, 1978, 657, 10585, 1990, 657, 10585, 1994, 657, 10585, 1996, 657, 10585, 1998, 657, 10585, 2000, 657, 10585, 2002, 657, 10585, 2004, 657, 10585, 2006, 657, 10585, 2008, 657, 10585, 2010, 657, 10585, 2012, 657, 10585, 2014, 657, 10585, 2022, 657, 10585, 2028, 657, 10585, 2030, 657, 10585, 2032, 657, 10585, 2038, 657, 10585, 2050, 657, 10585, 2056, 657, 10585, 2058, 657, 10585, 2060, 657, 10585, 2066, 657, 10585, 2068, 657, 10585, 2070, 657, 10585, 2072, 657, 10585, 2086, 657, 10585, 2090, 657, 10585, 2094, 657, 10585, 2096, 657, 10585, 2098, 657, 10585, 2100, 657, 10585, 2102, 657, 10585, 2104, 657, 10585, 2112, 657, 10585, 2114, 657, 10585, 2116, 657, 10585, 2118, 657, 10585, 2120, 657, 10585, 2132, 657, 10585, 2134, 657, 10585, 2136, 657, 10585, 2138, 657, 10585, 2140, 657, 10585, 2142, 657, 10585, 2144, 657, 10585, 2146, 657, 10585, 2194, 657, 10585, 2198, 657, 10585, 2202, 657, 10585, 2222, 657, 10585, 2228, 657, 10585, 2230, 657, 10585, 2232, 657, 10585, 2240, 657, 10585, 2242, 657, 10585, 2244, 657, 10585, 2256, 657, 10585, 2258, 657, 10585, 2260, 657, 10585, 2262, 657, 10585, 2264, 657, 10585, 2274, 657, 10585, 2276, 657, 10585, 2278, 657, 10585, 2280, 657, 10585, 2306, 657, 10585, 2310, 657, 10585, 2312, 657, 10585, 2314, 657, 10585, 2322, 657, 10585, 2324, 657, 10585, 2326, 657, 10585, 2336, 657, 10585, 2338, 657, 10585, 2340, 657, 10585, 2342, 657, 10585, 2348, 657, 10585, 2364, 657, 10585, 2366, 657, 10585, 2368, 657, 10585, 2372, 657, 10585, 2390, 657, 10585, 2392, 657, 10585, 2394, 657, 10585, 2406, 657, 10585, 2408, 657, 10585, 2432, 657, 10585, 2434, 657, 10585, 2436, 657, 10585, 2438, 657, 10585, 2440, 657, 10585, 2442, 657, 10585, 2444, 657, 10585, 2446, 657, 10585, 2456, 657, 10585, 2458, 657, 10585, 2460, 657, 10585, 2462, 657, 10585, 2464, 657, 10585, 2470, 657, 10585, 2472, 657, 10585, 2474, 657, 10585, 2476, 657, 10585, 2492, 657, 10585, 2496, 657, 10585, 2500, 657, 10585, 2508, 657, 10585, 2512, 657, 10585, 2516, 657, 10585, 2518, 657, 10585, 2522, 657, 10585, 2524, 657, 10585, 2526, 657, 10585, 2528, 657, 10585, 2536, 657, 10585, 2538, 657, 10585, 2540, 657, 10585, 2556, 657, 10585, 2558, 657, 10585, 2564, 657, 10585, 2566, 657, 10585, 2568, 657, 10585, 2570, 657, 10585, 2572, 657, 10585, 2574, 657, 10585, 2576, 657, 10585, 2588, 657, 10585, 2590, 657, 10585, 2592, 657, 10585, 2594, 657, 10585, 2596, 657, 10585, 2612, 657, 10585, 2614, 657, 10585, 2616, 657, 10585, 2618, 657, 10585, 2652, 657, 10585, 2656, 657, 10585, 2664, 657, 10585, 2672, 657, 10585, 2676, 657, 10585, 2690, 657, 10585, 2696, 657, 10585, 2700, 657, 10585, 2702, 657, 10585, 2724, 657, 10585, 2726, 657, 10585, 2728, 657, 10585, 2762, 657, 10585, 2764, 657, 10585, 2766, 657, 10585, 2768, 657, 10585, 2770, 657, 10585, 2818, 657, 10585, 2820, 657, 10585, 2848, 657, 10585, 2850, 657, 10585, 2854, 657, 10585, 2860, 657, 10585, 2864, 657, 10585, 2866, 657, 10585, 2870, 657, 10585, 2872, 657, 10585, 2874, 657, 10585, 2878, 657, 10585, 2880, 657, 10585, 2886, 657, 10585, 2888, 657, 10585, 2890, 657, 10585, 2892, 657, 10585, 2894, 657, 10585, 2898, 657, 10585, 2900, 657, 10585, 2902, 657, 10585, 2904, 657, 10585, 2912, 657, 10585, 2914, 657, 10585, 2920, 657, 10585, 2928, 657, 10585, 2930, 657, 10585, 2944, 657, 10585, 2946, 657, 10585, 2950, 657, 10585, 2960, 657, 10585, 2962, 657, 10585, 2964, 657, 10585, 2966, 657, 10585, 2970, 657, 10585, 2974, 657, 10585, 2976, 657, 10585, 2978, 657, 10585, 2996, 657, 10585, 2998, 657, 10585, 3000, 657, 10585, 3004, 657, 10585, 3064, 657, 10585, 3072, 657, 10585, 3074, 657, 10585, 3076, 657, 10585, 3084, 657, 10585, 3086, 657, 10585, 3088, 657, 10585, 3090, 657, 10585, 3092, 657, 10585, 3094, 657, 10585, 3098, 657, 10585, 3100, 657, 10585, 3112, 657, 10585, 3114, 657, 10585, 3116, 657, 10585, 3118, 657, 10585, 3130, 657, 10585, 3132, 657, 10585, 3134, 657, 10585, 3142, 657, 10585, 3144, 657, 10585, 3146, 657, 10585, 3148, 657, 10585, 3152, 657, 10585, 3154, 657, 10585, 3156, 657, 10585, 3162, 657, 10585, 3166, 657, 10585, 3168, 657, 10585, 3170, 657, 10585, 3180, 657, 10585, 3182, 657, 10585, 3184, 657, 10585, 3192, 657, 10585, 3194, 657, 10585, 3196, 657, 10585, 3198, 657, 10585, 3200, 657, 10585, 3204, 657, 10585, 3206, 657, 10585, 3208, 657, 10585, 3210, 657, 10585, 3212, 657, 10585, 3214, 657, 10585, 3216, 657, 10585, 3218, 657, 10585, 3220, 657, 10585, 3222, 657, 10585, 3718, 657, 10585, 3720, 657, 10585, 3722, 657, 10585, 3724, 657, 10585, 3726, 657, 10585, 3728, 657, 10585, 3730, 657, 10585, 3732, 657, 10585, 3734, 657, 10585, 3736, 657, 10585, 3738, 657, 10585, 3740, 657, 10585, 3742, 657, 10585, 3744, 657, 10585, 3746, 657, 10585, 3748, 657, 10585, 3750, 657, 10585, 3752, 657, 10585, 3754, 657, 10585, 3756, 657, 10585, 3782, 657, 10585, 3784, 657, 10585, 3786, 657, 10585, 3816, 657, 10585, 3818, 657, 10585, 3824, 657, 10585, 3828, 657, 10585, 3882, 657, 10585, 3886, 657, 10585, 3888, 657, 10585, 3896, 657, 10585, 3898, 657, 10585, 3900, 657, 10585, 3910, 657, 10585, 3912, 657, 10585, 3914, 657, 10585, 3916, 657, 10585, 3918, 657, 10585, 3920, 657, 10585, 3922, 657, 10585, 3926, 657, 10585, 3928, 657, 10585, 3930, 657, 10585, 3932, 657, 10585, 3934, 657, 10585, 3936, 657, 10585, 3938, 657, 10585, 3962, 657, 10585, 3964, 657, 10585, 3968, 657, 10585, 3976, 657, 10585, 4002, 657, 10585, 4004, 657, 10585, 4006, 657, 10585, 4012, 657, 10585, 4014, 657, 10585, 4020, 657, 10585, 4022, 657, 10585, 4024, 657, 10585, 4026, 657, 10585, 4030, 657, 10585, 4032, 657, 10585, 4034, 657, 10585, 4036, 657, 10585, 4038, 657, 10585, 4040, 657, 10585, 4042, 657, 10585, 4044, 657, 10585, 4082, 657, 10585, 4084, 657, 10585, 4130, 657, 10585, 4134, 657, 10585, 4224, 657, 10585, 4272, 657, 10585, 4274, 657, 10585, 4276, 657, 10585, 4280, 657, 10585, 4282, 657, 10585, 4284, 657, 10585, 4286, 657, 10585, 4288, 657, 10585, 4290, 657, 10585, 4292, 657, 10585, 4294, 657, 10585, 4296, 657, 10585, 4298, 657, 10585, 4300, 657, 10585, 4302, 657, 10585, 4304, 657, 10585, 4306, 657, 10585, 4326, 657, 10585, 4328, 657, 10585, 4330, 657, 10585, 4360, 657, 10585, 4362, 657, 10585, 4364, 657, 10585, 4368, 657, 10585, 4420, 657, 10585, 4426, 657, 10585, 4428, 657, 10585, 4430, 657, 10585, 4432, 657, 10585, 4434, 657, 10585, 4436, 657, 10585, 4438, 657, 10585, 4440, 657, 10585, 4442, 657, 10585, 4444, 657, 10585, 4446, 657, 10585, 4448, 657, 10585, 4450, 657, 10585, 4452, 657, 10585, 4454, 657, 10585, 4456, 657, 10585, 4458, 657, 10585, 4460, 657, 10585, 4462, 657, 10585, 4464, 657, 10585, 4466, 657, 10585, 4468, 657, 10585, 4470, 657, 10585, 4472, 657, 10585, 4474, 657, 10585, 4476, 657, 10585, 4478, 657, 10585, 4480, 657, 10585, 4482, 657, 10585, 4484, 657, 10585, 4486, 657, 10585, 4488, 657, 10585, 4490, 657, 10585, 4492, 657, 10585, 4494, 657, 10585, 4496, 657, 10585, 4498, 657, 10585, 4500, 657, 10585, 4502, 657, 10585, 4504, 657, 10585, 4506, 657, 10585, 4508, 657, 10585, 4510, 657, 10585, 4512, 657, 10585, 4514, 657, 10585, 4516, 657, 10585, 4518, 657, 10585, 4520, 657, 10585, 4522, 657, 10585, 4524, 657, 10585, 4526, 657, 10585, 4528, 657, 10585, 4550, 657, 10585, 4552, 657, 10585, 4554, 657, 10585, 4558, 657, 10585, 4560, 657, 10585, 4562, 657, 10585, 4564, 657, 10585, 4566, 657, 10585, 4568, 657, 10585, 4570, 657, 10585, 4572, 657, 10585, 4574, 657, 10585, 4576, 657, 10585, 4578, 657, 10585, 4580, 657, 10585, 4582, 657, 10585, 4638, 657, 10585, 4640, 657, 10585, 4642, 657, 10585, 4646, 657, 10585, 4648, 657, 10585, 4650, 657, 10585, 4652, 657, 10585, 4654, 657, 10585, 4656, 657, 10585, 4658, 657, 10585, 4660, 657, 10585, 4662, 657, 10585, 4664, 657, 10585, 4666, 657, 10585, 4668, 657, 10585, 4670, 657, 10585, 4672, 657, 10585, 4674, 657, 10585, 4688, 657, 10585, 4690, 657, 10585, 4692, 657, 10585, 4694, 657, 10585, 4696, 657, 10585, 4756, 657, 10585, 4758, 657, 10585, 4786, 657, 10585, 4788, 657, 10585, 4792, 657, 10585, 4866, 657, 10585, 4868, 657, 10585, 4870, 657, 10585, 4902, 657, 10585, 4904, 657, 10585, 4906, 657, 10585, 4908, 657, 10585, 4916, 657, 10585, 4958, 657, 10585, 4960, 657, 10585, 4962, 657, 10585, 4974, 657, 10585, 4976, 657, 10585, 4978, 657, 10585, 4980, 657, 10585, 4982, 657, 10585, 4984, 657, 10585, 4986, 657, 10585, 4988, 657, 10585, 4990, 657, 10585, 4992, 657, 10585, 4994, 657, 10585, 4996, 657, 10585, 4998, 657, 10585, 5020, 657, 10585, 5022, 657, 10585, 5024, 657, 10585, 5028, 657, 10585, 5058, 657, 10585, 5060, 657, 10585, 5062, 657, 10585, 5064, 657, 10585, 5066, 657, 10585, 5068, 657, 10585, 5070, 657, 10585, 5072, 657, 10585, 5074, 657, 10585, 5076, 657, 10585, 5078, 657, 10585, 5080, 657, 10585, 5082, 657, 10585, 5084, 657, 10585, 5086, 657, 10585, 5088, 657, 10585, 5090, 657, 10585, 5092, 657, 10585, 5094, 657, 10585, 5096, 657, 10585, 5098, 657, 10585, 5102, 657, 10585, 5104, 657, 10585, 5106, 657, 10585, 5108, 657, 10585, 5110, 657, 10585, 5112, 657, 10585, 5116, 657, 10585, 5118, 657, 10585, 5120, 657, 10585, 5122, 657, 10585, 5124, 657, 10585, 5126, 657, 10585, 5128, 657, 10585, 5138, 657, 10585, 5142, 657, 10585, 5144, 657, 10585, 5148, 657, 10585, 5150, 657, 10585, 5162, 657, 10585, 5172, 657, 10585, 5174, 657, 10585, 5176, 657, 10585, 5180, 657, 10585, 5186, 657, 10585, 5188, 657, 10585, 5196, 657, 10585, 5198, 657, 10585, 5200, 657, 10585, 5202, 657, 10585, 5206, 657, 10585, 5208, 657, 10585, 5210, 657, 10585, 5212, 657, 10585, 5214, 657, 10585, 5216, 657, 10585, 5218, 657, 10585, 5220, 657, 10585, 5222, 657, 10585, 5224, 657, 10585, 5226, 657, 10585, 5246, 657, 10585, 5248, 657, 10585, 5250, 657, 10585, 5252, 657, 10585, 5254, 657, 10585, 5256, 657, 10585, 5258, 657, 10585, 5260, 657, 10585, 5262, 657, 10585, 5264, 657, 10585, 5266, 657, 10585, 5268, 657, 10585, 5270, 657, 10585, 5272, 657, 10585, 5274, 657, 10585, 5276, 657, 10585, 5282, 657, 10585, 5284, 657, 10585, 5286, 657, 10585, 5302, 657, 10585, 5304, 657, 10585, 5308, 657, 10585, 5310, 657, 10585, 5318, 657, 10585, 5320, 657, 10585, 5322, 657, 10585, 5324, 657, 10585, 5326, 657, 10585, 5328, 657, 10585, 5330, 657, 10585, 5334, 657, 10585, 5336, 657, 10585, 5338, 657, 10585, 5340, 657, 10585, 5342, 657, 10585, 5344, 657, 10585, 5346, 657, 10585, 5348, 657, 10585, 5350, 657, 10585, 5352, 657, 10585, 5354, 657, 10585, 5356, 657, 10585, 5358, 657, 10585, 5360, 657, 10585, 5362, 657, 10585, 5364, 657, 10585, 5366, 657, 10585, 5368, 657, 10585, 5426, 657, 10585, 5428, 657, 10585, 5454, 657, 10585, 5456, 657, 10585, 5458, 657, 10585, 5468, 657, 10585, 5488, 657, 10585, 5490, 657, 10585, 5492, 657, 10585, 5498, 657, 10585, 5500, 657, 10585, 5502, 657, 10585, 5504, 657, 10585, 5516, 657, 10585, 5570, 657, 10585, 5574, 657, 10585, 5576, 657, 10585, 5578, 657, 10585, 5580, 657, 10585, 5582, 657, 10585, 5584, 657, 10585, 5586, 657, 10585, 5588, 657, 10585, 5590, 657, 10585, 5592, 657, 10585, 5594, 657, 10585, 5596, 657, 10585, 5598, 657, 10585, 5600, 657, 10585, 5602, 657, 10585, 5608, 657, 10585, 5610, 657, 10585, 5612, 657, 10585, 5618, 657, 10585, 5672, 657, 10585, 5674, 657, 10585, 5676, 657, 10585, 5684, 657, 10585, 5686, 657, 10585, 5688, 657, 10585, 5712, 657, 10585, 5714, 657, 10585, 5716, 657, 10585, 5722, 657, 10585, 5724, 657, 10585, 5726, 657, 10585, 5728, 657, 10585, 5730, 657, 10585, 5742, 657, 10585, 5744, 657, 10585, 5746, 657, 10585, 5748, 657, 10585, 5752, 657, 10585, 5754, 657, 10585, 5788, 657, 10585, 5790, 657, 10585, 5792, 657, 10585, 5796, 657, 10585, 5798, 657, 10585, 5800, 657, 10585, 5802, 657, 10585, 5804, 657, 10585, 5806, 657, 10585, 5808, 657, 10585, 5810, 657, 10585, 5812, 657, 10585, 5814, 657, 10585, 5816, 657, 10585, 5818, 657, 10585, 5820, 657, 10585, 5822, 657, 10585, 5824, 657, 10585, 5826, 657, 10585, 5848, 657, 10585, 5850, 657, 10585, 5856, 657, 10585, 5864, 657, 10585, 5936, 657, 10585, 5938, 657, 10585, 6014, 657, 10585, 6016, 657, 10585, 6018, 657, 10585, 6022, 657, 10585, 6084, 657, 10585, 6086, 657, 10585, 6088, 657, 10585, 6094, 657, 10585, 6096, 657, 10585, 6134, 657, 10585, 6136, 657, 10585, 6140, 657, 10585, 6142, 657, 10585, 6144, 657, 10585, 6146, 657, 10585, 6156, 657, 10585, 6206, 657, 10585, 6208, 657, 10585, 6210, 657, 10585, 6238, 657, 10585, 6240, 657, 10585, 6242, 657, 10585, 6244, 657, 10585, 6252, 657, 10585, 6266, 657, 10585, 6270, 657, 10585, 6272, 657, 10585, 6276, 657, 10585, 6278, 657, 10585, 6280, 657, 10585, 6284, 657, 10585, 6286, 657, 10585, 6288, 657, 10585, 6290, 657, 10585, 6292, 657, 10585, 6294, 657, 10585, 6296, 657, 10585, 6298, 657, 10585, 6304, 657, 10585, 6306, 657, 10585, 6308, 657, 10585, 6310, 657, 10585, 6314, 657, 10585, 6316, 657, 10585, 6320, 657, 10585, 6322, 657, 10585, 6324, 657, 10585, 6326, 657, 10585, 6330, 657, 10585, 6332, 657, 10585, 6334, 657, 10585, 6338, 657, 10585, 6340, 657, 10585, 6342, 657, 10585, 6344, 657, 10585, 6346, 657, 10585, 6348, 657, 10585, 6350, 657, 10585, 6352, 657, 10585, 6354, 657, 10585, 6356, 657, 10585, 6358, 657, 10585, 6360, 657, 10585, 6362, 657, 10585, 6364, 657, 10585, 6366, 657, 10585, 6470, 657, 10585, 6472, 657, 10585, 6474, 657, 10585, 6476, 657, 10585, 6478, 657, 10585, 6480, 657, 10585, 6584, 657, 10585, 6586, 657, 10585, 6588, 657, 10585, 6590, 657, 10585, 6592, 657, 10585, 6660, 657, 10585, 6662, 657, 10585, 6664, 657, 10585, 6666, 657, 10585, 6668, 657, 10585, 6834, 657, 10585, 6836, 657, 10585, 6838, 657, 10585, 6840, 657, 10585, 6842, 657, 10585, 6844, 657, 10585, 6916, 657, 10585, 6918, 657, 10585, 6920, 657, 10585, 6922, 657, 10585, 6924, 657, 10585, 6926, 657, 10585, 6928, 657, 10585, 6930, 657, 10585, 6932, 657, 10585, 6934, 657, 10585, 6936, 657, 10585, 6938, 657, 10585, 6940, 657, 10585, 6942, 657, 10585, 6944, 657, 10585, 6946, 657, 10585, 6962, 657, 10585, 6964, 657, 10585, 6966, 657, 10585, 6968, 657, 10585, 6970, 657, 10585, 6972, 657, 10585, 6998, 657, 10585, 7000, 657, 10585, 7002, 657, 10585, 7004, 657, 10585, 7006, 657, 10585, 7008, 657, 10585, 7156, 657, 10585, 7158, 657, 10585, 7160, 657, 10585, 7162, 657, 10585, 7212, 657, 10585, 7214, 657, 10585, 7216, 657, 10585, 7218, 657, 10585, 7220, 657, 10585, 7224, 657, 10585, 7234, 657, 10585, 7236, 657, 10585, 7240, 657, 10585, 7242, 657, 10585, 7250, 657, 10585, 7252, 657, 10585, 7254, 657, 10585, 7256, 657, 10585, 7258, 657, 10585, 7260, 657, 10585, 7278, 657, 10585, 7280, 657, 10585, 7286, 657, 10585, 7288, 657, 10585, 7290, 657, 10585, 7292, 657, 10585, 7294, 657, 10585, 7296, 657, 10585, 7298, 657, 10585, 7300, 657, 10585, 7302, 657, 10585, 7304, 657, 10585, 7456, 657, 10585, 7458, 657, 10585, 7460, 657, 10585, 7552, 657, 10585, 7554, 657, 10585, 7556, 657, 10585, 7564, 657, 10585, 7620, 657, 10585, 7622, 657, 10585, 7624, 657, 10585, 7876, 657, 10585, 7878, 657, 10585, 7880, 657, 10585, 7882, 657, 10585, 7894, 657, 10585, 7896, 657, 10585, 7898, 657, 10585, 7900, 657, 10585, 7902, 705, 8694, 719, 6741, 568, 719, 13042, 721, 6121, 1044, 729, 11635, 8775, 601, 5707, 1546, 729, 11635, 8775, 601, 5877, 1546, 729, 11635, 8775, 601, 5877, 9546, 729, 11635, 8775, 601, 5877, 10804, 729, 11635, 8775, 601, 6543, 7708, 729, 11635, 8775, 991, 7636, 729, 11635, 8775, 991, 7708, 729, 11635, 8775, 991, 10804, 729, 11635, 8775, 1547, 10666, 729, 11635, 8775, 1547, 10804, 729, 11635, 8775, 2412, 729, 11635, 8775, 4117, 5707, 7636, 729, 11635, 8775, 4117, 5877, 1546, 729, 11635, 8775, 4117, 5877, 10666, 729, 11635, 8775, 4117, 6543, 7708, 729, 11635, 8775, 4614, 729, 11635, 8775, 4615, 10666, 729, 11635, 8775, 4849, 5707, 7636, 729, 11635, 8775, 5496, 729, 11635, 8775, 5497, 601, 6542, 729, 11635, 8775, 5497, 990, 729, 11635, 8775, 5497, 1546, 729, 11635, 8775, 5497, 2091, 6740, 729, 11635, 8775, 5497, 4117, 6542, 729, 11635, 8775, 5497, 6610, 729, 11635, 8775, 5497, 6674, 729, 11635, 8775, 5497, 6740, 729, 11635, 8775, 5497, 7580, 729, 11635, 8775, 5497, 8056, 729, 11635, 8775, 5497, 8122, 729, 11635, 8775, 5497, 9158, 729, 11635, 8775, 5497, 9811, 6434, 729, 11635, 8775, 5497, 10468, 729, 11635, 8775, 5497, 10728, 729, 11635, 8775, 5497, 10959, 6434, 729, 11635, 8775, 5497, 11097, 6434, 729, 11635, 8775, 5497, 11098, 729, 11635, 8775, 5497, 11765, 6434, 729, 11635, 8775, 5497, 12472, 729, 11635, 8775, 5831, 10804, 729, 11635, 8775, 6406, 729, 11635, 8775, 6407, 10666, 729, 11635, 8775, 6617, 760, 729, 11635, 8775, 6675, 7636, 729, 11635, 8775, 6675, 10666, 729, 11635, 8775, 7316, 729, 11635, 8775, 7317, 10666, 729, 11635, 8775, 7415, 5496, 729, 11635, 8775, 7415, 10666, 729, 11635, 8775, 7581, 760, 729, 11635, 8775, 7637, 7708, 729, 11635, 8775, 7709, 10804, 729, 11635, 8775, 7884, 729, 11635, 8775, 8057, 1546, 729, 11635, 8775, 8057, 5830, 729, 11635, 8775, 8057, 7636, 729, 11635, 8775, 8057, 10666, 729, 11635, 8775, 8057, 10728, 729, 11635, 8775, 8057, 10804, 729, 11635, 8775, 8308, 729, 11635, 8775, 8747, 5496, 729, 11635, 8775, 9159, 10666, 729, 11635, 8775, 9271, 10666, 729, 11635, 8775, 9811, 6074, 729, 11635, 8775, 10729, 760, 729, 11635, 8775, 10959, 6074, 729, 11635, 8775, 11097, 6074, 729, 11635, 8775, 11225, 10666, 729, 11635, 8775, 11765, 6074, 729, 11635, 8775, 12473, 10804, 730, 789, 8774, 807, 9633, 9718, 807, 9718, 827, 10145, 601, 6909, 721, 4117, 11649, 7100, 827, 10145, 601, 6909, 721, 4849, 4117, 7100, 827, 10145, 601, 6909, 721, 4849, 7100, 827, 10145, 601, 6909, 721, 7443, 4117, 7100, 827, 10145, 601, 6909, 721, 7443, 7100, 827, 10145, 601, 6909, 721, 11649, 7100, 827, 10145, 601, 7101, 721, 4117, 11649, 6908, 827, 10145, 601, 7101, 721, 4849, 4117, 6908, 827, 10145, 601, 7101, 721, 4849, 6908, 827, 10145, 601, 7101, 721, 7443, 4117, 6908, 827, 10145, 601, 7101, 721, 7443, 6908, 827, 10145, 601, 7101, 721, 11649, 6908, 827, 10145, 601, 8153, 721, 4849, 8716, 827, 10145, 601, 8153, 721, 7443, 8716, 827, 10145, 601, 8153, 721, 11649, 8716, 827, 10145, 601, 8717, 721, 4849, 8152, 827, 10145, 601, 8717, 721, 7443, 8152, 827, 10145, 601, 8717, 721, 11649, 8152, 827, 10145, 4117, 6909, 721, 601, 11649, 7100, 827, 10145, 4117, 6909, 721, 4849, 601, 7100, 827, 10145, 4117, 6909, 721, 4849, 7100, 827, 10145, 4117, 6909, 721, 7443, 601, 7100, 827, 10145, 4117, 6909, 721, 7443, 7100, 827, 10145, 4117, 6909, 721, 11649, 7100, 827, 10145, 4117, 7101, 721, 601, 11649, 6908, 827, 10145, 4117, 7101, 721, 4849, 601, 6908, 827, 10145, 4117, 7101, 721, 4849, 6908, 827, 10145, 4117, 7101, 721, 7443, 601, 6908, 827, 10145, 4117, 7101, 721, 7443, 6908, 827, 10145, 4117, 7101, 721, 11649, 6908, 827, 10145, 4117, 8153, 721, 4849, 8716, 827, 10145, 4117, 8153, 721, 7443, 8716, 827, 10145, 4117, 8153, 721, 11649, 8716, 827, 10145, 4117, 8717, 721, 4849, 8152, 827, 10145, 4117, 8717, 721, 7443, 8152, 827, 10145, 4117, 8717, 721, 11649, 8152, 827, 10145, 4849, 601, 6909, 721, 7443, 4117, 7100, 827, 10145, 4849, 4117, 6909, 721, 7443, 601, 7100, 827, 10145, 4849, 6909, 721, 7443, 601, 7100, 827, 10145, 4849, 6909, 721, 7443, 4117, 7100, 827, 10145, 4849, 6909, 721, 7443, 10677, 7100, 827, 10145, 4849, 7101, 721, 7443, 601, 6908, 827, 10145, 4849, 7101, 721, 7443, 4117, 6908, 827, 10145, 4849, 7101, 721, 7443, 10677, 6908, 827, 10145, 6909, 600, 827, 10145, 6909, 601, 721, 4848, 827, 10145, 6909, 601, 721, 7101, 4116, 827, 10145, 6909, 601, 721, 7442, 827, 10145, 6909, 601, 721, 11648, 827, 10145, 6909, 4116, 827, 10145, 6909, 4117, 721, 4848, 827, 10145, 6909, 4117, 721, 7442, 827, 10145, 6909, 4117, 721, 11648, 827, 10145, 6909, 4848, 827, 10145, 6909, 4849, 721, 7101, 7442, 827, 10145, 6909, 7442, 827, 10145, 6909, 8153, 3993, 10676, 827, 10145, 6909, 8153, 3993, 11648, 827, 10145, 6909, 8849, 3993, 10676, 827, 10145, 6909, 8849, 3993, 11648, 827, 10145, 6909, 10676, 827, 10145, 6909, 10677, 721, 4848, 827, 10145, 6909, 10677, 721, 7442, 827, 10145, 6909, 10677, 721, 11648, 827, 10145, 6909, 11191, 3993, 10676, 827, 10145, 6909, 11191, 3993, 11648, 827, 10145, 6909, 11648, 827, 10145, 7101, 600, 827, 10145, 7101, 601, 721, 4848, 827, 10145, 7101, 601, 721, 6909, 4116, 827, 10145, 7101, 601, 721, 7442, 827, 10145, 7101, 601, 721, 11648, 827, 10145, 7101, 731, 601, 721, 4848, 827, 10145, 7101, 731, 601, 721, 7442, 827, 10145, 7101, 731, 4117, 721, 4848, 827, 10145, 7101, 731, 4117, 721, 7442, 827, 10145, 7101, 4116, 827, 10145, 7101, 4117, 721, 4848, 827, 10145, 7101, 4117, 721, 7442, 827, 10145, 7101, 4117, 721, 11648, 827, 10145, 7101, 4848, 827, 10145, 7101, 4849, 721, 6909, 7442, 827, 10145, 7101, 7442, 827, 10145, 7101, 8153, 3993, 10676, 827, 10145, 7101, 8153, 3993, 11648, 827, 10145, 7101, 8849, 3993, 10676, 827, 10145, 7101, 8849, 3993, 11648, 827, 10145, 7101, 10001, 6622, 827, 10145, 7101, 10001, 7773, 4849, 569, 7121, 7442, 827, 10145, 7101, 10001, 7773, 7443, 569, 7121, 4848, 827, 10145, 7101, 10676, 827, 10145, 7101, 10677, 721, 4848, 827, 10145, 7101, 10677, 721, 7442, 827, 10145, 7101, 10677, 721, 11648, 827, 10145, 7101, 11191, 3993, 10676, 827, 10145, 7101, 11191, 3993, 11648, 827, 10145, 7101, 11648, 827, 10145, 7443, 601, 6909, 721, 4849, 4117, 7100, 827, 10145, 7443, 4117, 6909, 721, 4849, 601, 7100, 827, 10145, 7443, 6909, 721, 4849, 601, 7100, 827, 10145, 7443, 6909, 721, 4849, 4117, 7100, 827, 10145, 7443, 6909, 721, 4849, 10677, 7100, 827, 10145, 7443, 7101, 721, 4849, 601, 6908, 827, 10145, 7443, 7101, 721, 4849, 4117, 6908, 827, 10145, 7443, 7101, 721, 4849, 10677, 6908, 827, 10145, 8153, 601, 721, 4848, 827, 10145, 8153, 601, 721, 7442, 827, 10145, 8153, 601, 721, 11648, 827, 10145, 8153, 4117, 721, 4848, 827, 10145, 8153, 4117, 721, 7442, 827, 10145, 8153, 4117, 721, 11648, 827, 10145, 8153, 10676, 827, 10145, 8153, 10677, 721, 4848, 827, 10145, 8153, 10677, 721, 7442, 827, 10145, 8153, 10677, 721, 11648, 827, 10145, 8153, 11648, 827, 10145, 10677, 6909, 721, 4849, 7100, 827, 10145, 10677, 6909, 721, 7443, 7100, 827, 10145, 10677, 6909, 721, 11649, 7100, 827, 10145, 10677, 7101, 721, 4849, 6908, 827, 10145, 10677, 7101, 721, 7443, 6908, 827, 10145, 10677, 7101, 721, 11649, 6908, 827, 10145, 10677, 8153, 721, 4849, 8716, 827, 10145, 10677, 8153, 721, 7443, 8716, 827, 10145, 10677, 8153, 721, 11649, 8716, 827, 10145, 10677, 8717, 721, 4849, 8152, 827, 10145, 10677, 8717, 721, 7443, 8152, 827, 10145, 10677, 8717, 721, 11649, 8152, 889, 2412, 909, 8759, 6, 909, 8759, 14, 909, 8759, 26, 909, 8759, 30, 909, 8759, 32, 909, 8759, 36, 909, 8759, 38, 909, 8759, 240, 909, 8759, 248, 909, 8759, 254, 909, 8759, 466, 909, 8759, 472, 909, 8759, 494, 909, 8759, 528, 909, 8759, 538, 909, 8759, 544, 909, 8759, 550, 909, 8759, 554, 909, 8759, 566, 909, 8759, 628, 909, 8759, 642, 909, 8759, 844, 909, 8759, 1458, 909, 8759, 1460, 909, 8759, 1462, 909, 8759, 1464, 909, 8759, 2602, 909, 8759, 2608, 909, 8759, 2630, 909, 8759, 4542, 909, 8759, 4584, 909, 8759, 4586, 909, 8759, 4588, 909, 8759, 4590, 909, 8759, 5872, 909, 8759, 6974, 909, 9617, 826, 909, 9617, 920, 909, 9617, 1036, 909, 9617, 1093, 2170, 909, 9617, 1093, 2778, 909, 9617, 1093, 7694, 909, 9617, 1132, 909, 9617, 1136, 909, 9617, 2025, 2170, 909, 9617, 2025, 2778, 909, 9617, 2025, 4214, 909, 9617, 2025, 7694, 909, 9617, 2166, 909, 9617, 2201, 2170, 909, 9617, 2201, 2778, 909, 9617, 2386, 909, 9617, 2390, 909, 9617, 2586, 909, 9617, 3794, 909, 9617, 3805, 429, 6604, 909, 9617, 3806, 909, 9617, 3940, 909, 9617, 4194, 909, 9617, 4208, 909, 9617, 4390, 909, 9617, 4398, 909, 9617, 4536, 909, 9617, 4628, 909, 9617, 4835, 2170, 909, 9617, 4835, 2778, 909, 9617, 4835, 4214, 909, 9617, 4835, 7694, 909, 9617, 4895, 2170, 909, 9617, 4895, 2778, 909, 9617, 4940, 909, 9617, 4950, 909, 9617, 5012, 909, 9617, 5524, 909, 9617, 5646, 909, 9617, 5764, 909, 9617, 6101, 2170, 909, 9617, 6101, 2778, 909, 9617, 6113, 2170, 909, 9617, 6113, 2778, 909, 9617, 6521, 2170, 909, 9617, 6521, 2778, 909, 9617, 6578, 909, 9617, 6600, 909, 9617, 6670, 909, 9617, 6852, 909, 9617, 6873, 2170, 909, 9617, 6873, 2778, 909, 9617, 6873, 7694, 909, 9617, 6907, 2170, 909, 9617, 6907, 2778, 909, 9617, 7057, 2170, 909, 9617, 7057, 2778, 909, 9617, 7185, 2170, 909, 9617, 7185, 2778, 909, 9617, 7526, 909, 9617, 7593, 2170, 909, 9617, 7593, 2778, 909, 9617, 7600, 909, 9617, 7603, 2170, 909, 9617, 7603, 2778, 909, 9617, 7662, 909, 9617, 7704, 909, 9617, 7813, 2170, 909, 9617, 7813, 2778, 909, 9617, 7974, 909, 9617, 8484, 909, 9617, 8486, 909, 9617, 8576, 909, 9617, 8640, 909, 9617, 8681, 2170, 909, 9617, 8681, 2778, 909, 9617, 8681, 7694, 909, 9617, 8735, 2170, 909, 9617, 8735, 2778, 909, 9617, 8824, 909, 9617, 8870, 909, 9617, 9102, 909, 9617, 9948, 909, 9617, 11488, 909, 9617, 11803, 4389, 5969, 7736, 909, 9617, 11803, 4536, 909, 9617, 11803, 6100, 909, 9617, 11803, 7816, 909, 9617, 11803, 8946, 909, 9617, 12419, 1092, 909, 9617, 12419, 1170, 909, 9617, 12419, 2504, 909, 9617, 12419, 3788, 909, 9617, 12419, 3850, 909, 9617, 12419, 4172, 909, 9617, 12419, 4196, 909, 9617, 12419, 4218, 909, 9617, 12419, 4244, 909, 9617, 12419, 4342, 909, 9617, 12419, 4844, 909, 9617, 12419, 4894, 909, 9617, 12419, 5632, 909, 9617, 12419, 5764, 909, 9617, 12419, 6116, 909, 9617, 12419, 6952, 909, 9617, 12419, 7532, 909, 9617, 12419, 7726, 909, 9617, 12419, 8154, 909, 9617, 12419, 8730, 909, 9617, 12419, 8793, 9426, 909, 9617, 12419, 8870, 909, 9617, 12495, 4172, 909, 9617, 12495, 7726, 909, 9617, 12495, 8154, 909, 9617, 12495, 8870, 1009, 8178, 1009, 8180, 1009, 8182, 1009, 8184, 1009, 8186, 1009, 8188, 1045, 5444, 1045, 6376, 1045, 7172, 1045, 10374, 1109, 429, 7394, 1177, 718, 1429, 9730, 1429, 9912, 1635, 5758, 1741, 247, 380, 1741, 247, 412, 1741, 323, 332, 1741, 5965, 1859, 170, 1741, 5965, 1859, 564, 1741, 5965, 1859, 2684, 1741, 5965, 1859, 8034, 1741, 6689, 2170, 1741, 6689, 2540, 1741, 6689, 2778, 1741, 6689, 4200, 1741, 6689, 4214, 1741, 6689, 5190, 1741, 6689, 6260, 1741, 6689, 6722, 1741, 6689, 7508, 1741, 6689, 7694, 1741, 7803, 5759, 0, 1741, 7803, 5759, 8, 1741, 7803, 5759, 16, 1741, 7803, 5759, 28, 1741, 7803, 5759, 40, 1741, 7803, 5759, 48, 1741, 7803, 5759, 58, 1741, 7803, 5759, 72, 1741, 7803, 5759, 78, 1741, 7803, 5759, 98, 1741, 7803, 5759, 168, 1741, 7803, 5759, 266, 1741, 7803, 5759, 606, 1741, 7803, 5759, 668, 1741, 7803, 5759, 1859, 1588, 1741, 7803, 5759, 1859, 1658, 1741, 8405, 28, 1741, 8405, 108, 1741, 8405, 130, 1741, 8405, 150, 1741, 8405, 209, 2646, 1741, 8405, 209, 5846, 1741, 8405, 247, 2646, 1741, 8405, 247, 5846, 1741, 8405, 322, 1741, 8405, 351, 4878, 1741, 8405, 351, 4898, 1741, 8405, 380, 1741, 8405, 412, 1741, 8405, 480, 1741, 8405, 537, 2646, 1741, 8405, 537, 5846, 1741, 8405, 568, 1741, 8405, 632, 1741, 8405, 660, 1741, 8405, 1619, 2646, 1741, 8405, 1619, 5846, 1741, 8405, 2038, 1741, 8405, 2134, 1741, 8405, 2219, 2646, 1741, 8405, 2219, 5846, 1741, 8405, 2685, 2646, 1741, 8405, 2685, 5846, 1741, 10154, 1741, 11134, 1741, 11227, 5759, 350, 1741, 11227, 5759, 2134, 1741, 12421, 4926, 1764, 1809, 4876, 1809, 8153, 7391, 11195, 4926, 1809, 9898, 2027, 2643, 1817, 5759, 1734, 2027, 2643, 1817, 5759, 4826, 2027, 2643, 1817, 5965, 8442, 2027, 2643, 1817, 5965, 8444, 2027, 2643, 1817, 6689, 2170, 2027, 2643, 1817, 6689, 2540, 2027, 2643, 1817, 6689, 2778, 2027, 2643, 1817, 6689, 4200, 2027, 2643, 1817, 6689, 4214, 2027, 2643, 1817, 6689, 5190, 2027, 2643, 1817, 6689, 6260, 2027, 2643, 1817, 6689, 6722, 2027, 2643, 1817, 6689, 7508, 2027, 2643, 1817, 6689, 7694, 2027, 2643, 1817, 7803, 5759, 8, 2027, 2643, 1817, 7803, 5759, 28, 2027, 2643, 1817, 7803, 5759, 40, 2027, 2643, 1817, 7803, 5759, 58, 2027, 2643, 1817, 7803, 5759, 66, 2027, 2643, 1817, 7803, 5759, 98, 2027, 2643, 1817, 7803, 5759, 266, 2027, 2643, 1817, 7803, 5759, 290, 2027, 2643, 1817, 7803, 5759, 422, 2027, 2643, 1817, 7803, 5759, 458, 2027, 2643, 1817, 7803, 5759, 590, 2027, 2643, 1817, 7803, 5759, 606, 2027, 2643, 1817, 7803, 5759, 608, 2027, 2643, 1817, 7803, 5759, 700, 2027, 2643, 1817, 7803, 5759, 2156, 2027, 2643, 1817, 7803, 5759, 2806, 2027, 2643, 1817, 7803, 5759, 7803, 11238, 2027, 2643, 1817, 8405, 1809, 100, 2027, 2643, 1817, 8405, 1809, 138, 2027, 2643, 1817, 8405, 1809, 196, 2027, 2643, 1817, 8405, 1809, 236, 2027, 2643, 1817, 8405, 1809, 306, 2027, 2643, 1817, 8405, 1809, 332, 2027, 2643, 1817, 8405, 1809, 364, 2027, 2643, 1817, 8405, 1809, 392, 2027, 2643, 1817, 8405, 1809, 462, 2027, 2643, 1817, 8405, 1809, 496, 2027, 2643, 1817, 8405, 1809, 524, 2027, 2643, 1817, 8405, 1809, 556, 2027, 2643, 1817, 8405, 1809, 610, 2027, 2643, 1817, 8405, 1809, 638, 2027, 2643, 1817, 8405, 1809, 652, 2027, 2643, 1817, 8405, 1809, 1702, 2027, 2643, 1817, 8405, 1809, 2030, 2027, 2643, 1817, 8405, 1809, 2212, 2027, 2643, 1817, 8405, 1809, 2678, 2027, 2643, 1817, 8405, 1809, 2732, 2027, 2643, 1817, 8405, 1809, 2980, 2027, 2643, 1817, 8405, 4423, 100, 2027, 2643, 1817, 8405, 4423, 138, 2027, 2643, 1817, 8405, 4423, 196, 2027, 2643, 1817, 8405, 4423, 236, 2027, 2643, 1817, 8405, 4423, 306, 2027, 2643, 1817, 8405, 4423, 332, 2027, 2643, 1817, 8405, 4423, 364, 2027, 2643, 1817, 8405, 4423, 392, 2027, 2643, 1817, 8405, 4423, 462, 2027, 2643, 1817, 8405, 4423, 496, 2027, 2643, 1817, 8405, 4423, 524, 2027, 2643, 1817, 8405, 4423, 556, 2027, 2643, 1817, 8405, 4423, 610, 2027, 2643, 1817, 8405, 4423, 638, 2027, 2643, 1817, 8405, 4423, 652, 2027, 2643, 1817, 8405, 4423, 1702, 2027, 2643, 1817, 8405, 4423, 2030, 2027, 2643, 1817, 8405, 4423, 2212, 2027, 2643, 1817, 8405, 4423, 2678, 2027, 2643, 1817, 8405, 4423, 2732, 2027, 2643, 1817, 8405, 4423, 2980, 2027, 2643, 1817, 8405, 6789, 2, 2027, 2643, 1817, 8405, 6789, 6, 2027, 2643, 1817, 8405, 6789, 20, 2027, 2643, 1817, 8405, 6789, 24, 2027, 2643, 1817, 8405, 6789, 26, 2027, 2643, 1817, 8405, 6789, 42, 2027, 2643, 1817, 8405, 6789, 400, 2027, 8701, 5758, 2075, 1809, 5965, 11424, 2075, 4423, 5965, 11424, 2075, 6616, 2075, 6689, 2170, 2075, 6689, 2540, 2075, 6689, 2778, 2075, 6689, 4200, 2075, 6689, 4214, 2075, 6689, 5190, 2075, 6689, 6260, 2075, 6689, 6722, 2075, 6689, 7508, 2075, 6689, 7694, 2075, 8405, 0, 2075, 8405, 8, 2075, 8405, 16, 2075, 8405, 26, 2075, 8405, 28, 2075, 8405, 40, 2075, 8405, 100, 2075, 8405, 138, 2075, 8405, 162, 2075, 8405, 196, 2075, 8405, 236, 2075, 8405, 292, 2075, 8405, 306, 2075, 8405, 332, 2075, 8405, 364, 2075, 8405, 392, 2075, 8405, 393, 8936, 2075, 8405, 440, 2075, 8405, 462, 2075, 8405, 510, 2075, 8405, 524, 2075, 8405, 556, 2075, 8405, 622, 2075, 8405, 652, 2075, 8405, 884, 2075, 8405, 1228, 2075, 8405, 2126, 2075, 8405, 2127, 8936, 2075, 8405, 2438, 2075, 8405, 4679, 292, 2075, 8405, 4679, 510, 2075, 8405, 4679, 884, 2075, 8405, 11470, 2075, 8775, 441, 8104, 2075, 8775, 11636, 2075, 10767, 4895, 1809, 5964, 2075, 10767, 4895, 4423, 5964, 2075, 10767, 4895, 8649, 5964, 2075, 10767, 4895, 11475, 5964, 2075, 10767, 7551, 1809, 5964, 2075, 10767, 7551, 4423, 5964, 2075, 10767, 7551, 8649, 5964, 2075, 10767, 8153, 1045, 6376, 2075, 10767, 12511, 4926, 2075, 11672, 2075, 12017, 4926, 2088, 2091, 1, 8763, 428, 2091, 1, 10579, 428, 2091, 81, 9263, 428, 2091, 5758, 2091, 5972, 2091, 6569, 4926, 2091, 6741, 568, 2091, 7708, 2091, 7919, 6741, 568, 2091, 8521, 10573, 428, 2091, 8521, 10573, 429, 445, 6741, 568, 2091, 8745, 6989, 429, 445, 6741, 568, 2091, 8745, 10379, 429, 445, 6741, 568, 2091, 10411, 568, 2091, 11041, 568, 2091, 11098, 2091, 11621, 568, 2091, 12472, 2091, 13045, 6741, 568, 2159, 825, 2690, 2159, 3771, 8020, 2159, 3992, 2159, 4210, 2159, 4530, 2159, 6564, 2159, 7921, 429, 6568, 2159, 8009, 3711, 13054, 2159, 8153, 10728, 2159, 9973, 8975, 8524, 2159, 10267, 4210, 2163, 5758, 2167, 8325, 8405, 0, 2167, 8325, 8405, 8, 2167, 8325, 8405, 16, 2167, 8325, 8405, 28, 2167, 8325, 8405, 40, 2167, 8325, 8405, 102, 2167, 8325, 8405, 142, 2167, 8325, 8405, 164, 2167, 8325, 8405, 172, 2167, 8325, 8405, 174, 2167, 8325, 8405, 176, 2167, 8325, 8405, 182, 2167, 8325, 8405, 184, 2167, 8325, 8405, 238, 2167, 8325, 8405, 266, 2167, 8325, 8405, 306, 2167, 8325, 8405, 310, 2167, 8325, 8405, 326, 2167, 8325, 8405, 468, 2167, 8325, 8405, 560, 2167, 8325, 8405, 606, 2167, 8325, 8405, 612, 2167, 8325, 8405, 672, 2167, 8325, 8405, 886, 2167, 8325, 8405, 1106, 2167, 8325, 8405, 1122, 2167, 8325, 8405, 1124, 2167, 8325, 8405, 1614, 2167, 8325, 8405, 2214, 2167, 8325, 8405, 2518, 2167, 8325, 8405, 2680, 2167, 8325, 9513, 2170, 2167, 8325, 9513, 2670, 2167, 8325, 9513, 4200, 2167, 8325, 9513, 6784, 2167, 9583, 5759, 0, 2167, 9583, 5759, 16, 2167, 9583, 5759, 40, 2167, 9583, 5759, 100, 2167, 9583, 5759, 116, 2167, 9583, 5759, 138, 2167, 9583, 5759, 144, 2167, 9583, 5759, 152, 2167, 9583, 5759, 196, 2167, 9583, 5759, 216, 2167, 9583, 5759, 230, 2167, 9583, 5759, 236, 2167, 9583, 5759, 292, 2167, 9583, 5759, 296, 2167, 9583, 5759, 306, 2167, 9583, 5759, 326, 2167, 9583, 5759, 332, 2167, 9583, 5759, 364, 2167, 9583, 5759, 374, 2167, 9583, 5759, 384, 2167, 9583, 5759, 392, 2167, 9583, 5759, 416, 2167, 9583, 5759, 462, 2167, 9583, 5759, 510, 2167, 9583, 5759, 520, 2167, 9583, 5759, 524, 2167, 9583, 5759, 556, 2167, 9583, 5759, 576, 2167, 9583, 5759, 610, 2167, 9583, 5759, 614, 2167, 9583, 5759, 638, 2167, 9583, 5759, 652, 2167, 9583, 5759, 670, 2167, 9583, 5759, 2516, 2167, 9583, 5759, 2566, 2167, 9583, 5759, 2678, 2167, 9583, 5759, 3700, 2167, 9583, 5759, 9058, 2167, 9583, 5759, 10790, 2167, 9583, 5759, 11436, 2167, 9583, 5759, 11926, 2167, 9583, 5759, 12408, 2167, 9583, 5759, 12410, 2167, 9583, 5759, 12896, 2167, 9583, 6129, 9178, 2167, 9583, 8525, 2170, 2167, 9583, 8525, 2670, 2167, 9583, 8525, 2778, 2167, 9583, 8525, 8876, 2167, 9583, 8525, 9344, 2171, 1045, 5387, 2779, 4113, 12132, 2171, 1045, 8392, 2209, 2671, 10625, 5758, 2209, 5758, 2209, 7171, 5758, 2241, 11945, 11632, 2511, 7172, 2541, 9601, 6505, 5830, 2541, 10425, 6505, 721, 7821, 10194, 2586, 2639, 1809, 4876, 2639, 4223, 5836, 2639, 4849, 6627, 9050, 2639, 4849, 8745, 9050, 2639, 4849, 12114, 2639, 5445, 5758, 2639, 6610, 2639, 6616, 2639, 6689, 2170, 2639, 6689, 2540, 2639, 6689, 2778, 2639, 6689, 4200, 2639, 6689, 4214, 2639, 6689, 5190, 2639, 6689, 6260, 2639, 6689, 6722, 2639, 6689, 7508, 2639, 6689, 7694, 2639, 6875, 7908, 2639, 7089, 7593, 8405, 0, 2639, 7089, 7593, 8405, 2, 2639, 7089, 7593, 8405, 4, 2639, 7089, 7593, 8405, 6, 2639, 7089, 7593, 8405, 8, 2639, 7089, 7593, 8405, 10, 2639, 7089, 7593, 8405, 12, 2639, 7089, 7593, 8405, 14, 2639, 7089, 7593, 8405, 16, 2639, 7089, 7593, 8405, 18, 2639, 7089, 7593, 8405, 20, 2639, 7089, 7593, 8405, 22, 2639, 7089, 7593, 8405, 24, 2639, 7089, 7593, 8405, 26, 2639, 7089, 7593, 8405, 28, 2639, 7089, 7593, 8405, 30, 2639, 7089, 7593, 8405, 32, 2639, 7089, 7593, 8405, 34, 2639, 7089, 7593, 8405, 36, 2639, 7089, 7593, 8405, 38, 2639, 7089, 7593, 8405, 40, 2639, 7089, 7593, 8405, 42, 2639, 7089, 7593, 8405, 44, 2639, 7089, 7593, 8405, 46, 2639, 7089, 7593, 8405, 48, 2639, 7089, 7593, 8405, 50, 2639, 7089, 9063, 8405, 0, 2639, 7089, 9063, 8405, 2, 2639, 7089, 9063, 8405, 4, 2639, 7089, 9063, 8405, 6, 2639, 7089, 9063, 8405, 8, 2639, 7089, 9063, 8405, 10, 2639, 7089, 9063, 8405, 12, 2639, 7089, 9063, 8405, 14, 2639, 7089, 9063, 8405, 16, 2639, 7089, 9063, 8405, 18, 2639, 7089, 9063, 8405, 20, 2639, 7089, 9063, 8405, 22, 2639, 7089, 9063, 8405, 24, 2639, 7089, 9063, 8405, 26, 2639, 7089, 9063, 8405, 28, 2639, 7089, 9063, 8405, 30, 2639, 7089, 9063, 8405, 32, 2639, 7089, 9063, 8405, 34, 2639, 7089, 9063, 8405, 36, 2639, 7089, 9063, 8405, 38, 2639, 7089, 9063, 8405, 40, 2639, 7089, 9063, 8405, 42, 2639, 7089, 9063, 8405, 44, 2639, 7089, 9063, 8405, 46, 2639, 7089, 9063, 8405, 48, 2639, 7089, 9063, 8405, 50, 2639, 7443, 6627, 9050, 2639, 7443, 8745, 9050, 2639, 7443, 12114, 2639, 7608, 2639, 7708, 2639, 8129, 5758, 2639, 8167, 5758, 2639, 8525, 5758, 2639, 9581, 5758, 2639, 9633, 9718, 2639, 9718, 2639, 9898, 2639, 10469, 4926, 2639, 10677, 4876, 2639, 10708, 2639, 11099, 5758, 2639, 11195, 4926, 2639, 11224, 2639, 11424, 2639, 11449, 7908, 2639, 11451, 90, 2639, 12017, 4926, 2639, 12473, 5758, 2639, 12478, 2643, 337, 8405, 0, 2643, 337, 8405, 8, 2643, 337, 8405, 16, 2643, 337, 8405, 28, 2643, 337, 8405, 40, 2643, 337, 8405, 72, 2643, 337, 8405, 162, 2643, 337, 8405, 166, 2643, 337, 8405, 196, 2643, 337, 8405, 236, 2643, 337, 8405, 306, 2643, 337, 8405, 332, 2643, 337, 8405, 364, 2643, 337, 8405, 392, 2643, 337, 8405, 440, 2643, 337, 8405, 462, 2643, 337, 8405, 496, 2643, 337, 8405, 524, 2643, 337, 8405, 556, 2643, 337, 8405, 590, 2643, 337, 8405, 610, 2643, 337, 8405, 638, 2643, 337, 8405, 652, 2643, 337, 8405, 738, 2643, 337, 8405, 1612, 2643, 337, 8405, 2030, 2643, 337, 8405, 2212, 2643, 337, 8405, 2678, 2643, 337, 8405, 2732, 2643, 337, 8405, 5978, 2643, 337, 8405, 8834, 2643, 337, 8405, 8836, 2643, 337, 8405, 8838, 2643, 337, 8405, 8840, 2643, 337, 8405, 8842, 2691, 5387, 10256, 2725, 731, 10763, 6435, 6121, 7172, 2725, 731, 12901, 6434, 2725, 731, 12901, 6435, 6121, 5444, 2725, 4389, 10260, 2725, 4849, 3958, 2725, 4849, 4389, 9050, 2725, 4849, 8076, 2725, 6627, 9050, 2725, 7443, 3958, 2725, 7443, 4389, 9050, 2725, 7443, 8076, 2725, 8745, 9050, 2725, 10637, 7533, 9050, 2725, 12114, 2779, 1045, 8392, 2779, 1045, 12132, 2779, 4113, 5387, 2171, 1045, 12132, 2779, 8329, 9734, 2779, 9437, 445, 10374, 2779, 9437, 721, 10374, 2779, 10725, 8993, 11876, 2779, 11913, 8167, 7570, 2779, 12491, 9437, 444, 2779, 12491, 9437, 720, 2847, 4223, 5836, 2847, 6616, 2847, 6689, 2170, 2847, 6689, 2540, 2847, 6689, 2778, 2847, 6689, 4200, 2847, 6689, 4214, 2847, 6689, 5190, 2847, 6689, 6260, 2847, 6689, 6722, 2847, 6689, 7508, 2847, 6689, 7694, 2847, 8775, 1140, 2847, 8775, 2052, 2847, 8775, 2634, 2847, 8775, 3708, 2847, 8775, 3986, 2847, 8775, 4100, 2847, 8775, 4680, 2847, 8775, 4784, 2847, 8775, 5944, 2847, 8775, 5966, 2847, 8775, 6700, 2847, 8775, 6776, 2847, 8775, 7032, 2847, 10469, 4926, 2847, 10585, 0, 2847, 10585, 8, 2847, 10585, 16, 2847, 10585, 28, 2847, 10585, 40, 2847, 10585, 80, 2847, 10585, 100, 2847, 10585, 102, 2847, 10585, 106, 2847, 10585, 108, 2847, 10585, 112, 2847, 10585, 116, 2847, 10585, 122, 2847, 10585, 126, 2847, 10585, 130, 2847, 10585, 132, 2847, 10585, 138, 2847, 10585, 142, 2847, 10585, 144, 2847, 10585, 150, 2847, 10585, 152, 2847, 10585, 162, 2847, 10585, 176, 2847, 10585, 196, 2847, 10585, 198, 2847, 10585, 202, 2847, 10585, 208, 2847, 10585, 210, 2847, 10585, 216, 2847, 10585, 220, 2847, 10585, 224, 2847, 10585, 228, 2847, 10585, 230, 2847, 10585, 236, 2847, 10585, 238, 2847, 10585, 242, 2847, 10585, 246, 2847, 10585, 250, 2847, 10585, 274, 2847, 10585, 292, 2847, 10585, 294, 2847, 10585, 296, 2847, 10585, 298, 2847, 10585, 300, 2847, 10585, 306, 2847, 10585, 310, 2847, 10585, 314, 2847, 10585, 322, 2847, 10585, 326, 2847, 10585, 332, 2847, 10585, 336, 2847, 10585, 340, 2847, 10585, 350, 2847, 10585, 354, 2847, 10585, 364, 2847, 10585, 368, 2847, 10585, 374, 2847, 10585, 380, 2847, 10585, 384, 2847, 10585, 392, 2847, 10585, 396, 2847, 10585, 400, 2847, 10585, 404, 2847, 10585, 412, 2847, 10585, 416, 2847, 10585, 438, 2847, 10585, 440, 2847, 10585, 462, 2847, 10585, 468, 2847, 10585, 476, 2847, 10585, 480, 2847, 10585, 486, 2847, 10585, 510, 2847, 10585, 512, 2847, 10585, 514, 2847, 10585, 516, 2847, 10585, 520, 2847, 10585, 524, 2847, 10585, 526, 2847, 10585, 532, 2847, 10585, 536, 2847, 10585, 546, 2847, 10585, 556, 2847, 10585, 560, 2847, 10585, 564, 2847, 10585, 568, 2847, 10585, 576, 2847, 10585, 596, 2847, 10585, 610, 2847, 10585, 612, 2847, 10585, 614, 2847, 10585, 616, 2847, 10585, 618, 2847, 10585, 622, 2847, 10585, 626, 2847, 10585, 630, 2847, 10585, 632, 2847, 10585, 634, 2847, 10585, 652, 2847, 10585, 654, 2847, 10585, 656, 2847, 10585, 660, 2847, 10585, 664, 2847, 10585, 670, 2847, 10585, 672, 2847, 10585, 676, 2847, 10585, 678, 2847, 10585, 680, 2847, 10585, 778, 2847, 10585, 792, 2847, 10585, 794, 2847, 10585, 796, 2847, 10585, 798, 2847, 10585, 800, 2847, 10585, 818, 2847, 10585, 876, 2847, 10585, 914, 2847, 10585, 984, 2847, 10585, 996, 2847, 10585, 998, 2847, 10585, 1000, 2847, 10585, 1002, 2847, 10585, 1004, 2847, 10585, 1040, 2847, 10585, 1098, 2847, 10585, 1150, 2847, 10585, 1172, 2847, 10585, 1228, 2847, 10585, 1230, 2847, 10585, 1232, 2847, 10585, 1234, 2847, 10585, 1236, 2847, 10585, 1238, 2847, 10585, 1240, 2847, 10585, 1290, 2847, 10585, 1346, 2847, 10585, 1356, 2847, 10585, 1362, 2847, 10585, 1384, 2847, 10585, 1422, 2847, 10585, 1424, 2847, 10585, 1436, 2847, 10585, 1506, 2847, 10585, 1542, 2847, 10585, 1588, 2847, 10585, 1598, 2847, 10585, 1660, 2847, 10585, 1668, 2847, 10585, 1670, 2847, 10585, 1672, 2847, 10585, 1674, 2847, 10585, 1676, 2847, 10585, 1758, 2847, 10585, 1802, 2847, 10585, 1878, 2847, 10585, 1880, 2847, 10585, 1882, 2847, 10585, 1884, 2847, 10585, 1886, 2847, 10585, 1890, 2847, 10585, 1938, 2847, 10585, 2006, 2847, 10585, 2008, 2847, 10585, 2010, 2847, 10585, 2012, 2847, 10585, 2014, 2847, 10585, 2016, 2847, 10585, 2062, 2847, 10585, 2064, 2847, 10585, 2066, 2847, 10585, 2068, 2847, 10585, 2070, 2847, 10585, 2084, 2847, 10585, 2126, 2847, 10585, 2130, 2847, 10585, 2132, 2847, 10585, 2134, 2847, 10585, 2136, 2847, 10585, 2178, 2847, 10585, 2204, 2847, 10585, 2238, 2847, 10585, 2402, 2847, 10585, 2430, 2847, 10585, 2504, 2847, 10585, 2516, 2847, 10585, 2518, 2847, 10585, 2520, 2847, 10585, 2522, 2847, 10585, 2524, 2847, 10585, 2554, 2847, 10585, 2666, 2847, 10585, 2678, 2847, 10585, 2680, 2847, 10585, 2682, 2847, 10585, 2684, 2847, 10585, 2686, 2847, 10585, 2722, 2847, 10585, 2856, 2847, 10585, 2876, 2847, 10585, 2910, 2847, 10585, 2922, 2847, 10585, 2924, 2847, 10585, 2934, 2847, 10585, 2940, 2847, 10585, 2942, 2847, 10585, 2948, 2847, 10585, 3050, 2847, 10585, 3082, 2847, 10585, 3138, 2847, 10585, 3146, 2847, 10585, 3148, 2847, 10585, 3150, 2847, 10585, 3152, 2847, 10585, 3154, 2847, 10585, 3178, 2847, 10585, 3778, 2847, 10585, 3780, 2847, 10585, 4068, 2847, 10585, 4070, 2847, 10585, 4072, 2847, 10585, 4074, 2847, 10585, 4076, 2847, 10585, 4078, 2847, 10585, 4080, 2847, 10585, 4246, 2847, 10585, 4248, 2847, 10585, 4250, 2847, 10585, 4252, 2847, 10585, 4774, 2847, 10585, 4776, 2847, 10585, 4778, 2847, 10585, 4780, 2847, 10585, 4932, 2847, 10585, 4934, 2847, 10585, 4964, 2847, 10585, 4966, 2847, 10585, 4968, 2847, 10585, 4970, 2847, 10585, 4972, 2847, 10585, 5100, 2847, 10585, 5114, 2847, 10585, 5136, 2847, 10585, 5146, 2847, 10585, 5152, 2847, 10585, 5154, 2847, 10585, 5156, 2847, 10585, 5158, 2847, 10585, 5160, 2847, 10585, 5168, 2847, 10585, 5194, 2847, 10585, 5204, 2847, 10585, 5296, 2847, 10585, 5316, 2847, 10585, 5678, 2847, 10585, 5710, 2847, 10585, 5914, 2847, 10585, 5930, 2847, 10585, 6108, 2847, 10585, 6126, 2847, 10585, 6274, 2847, 10585, 6282, 2847, 10585, 6682, 2847, 10585, 6684, 2847, 10585, 7152, 2847, 10585, 7154, 2847, 10585, 7223, 150, 2847, 10585, 7223, 196, 2847, 10585, 7223, 306, 2847, 10585, 7223, 364, 2847, 10585, 7223, 2554, 2847, 10585, 7228, 2847, 10585, 7230, 2847, 10585, 7232, 2847, 10585, 11674, 2941, 5758, 2972, 3055, 5758, 3071, 6178, 3245, 8774, 3264, 3285, 8774, 3769, 8774, 3839, 2812, 3849, 428, 3871, 5758, 3873, 5758, 3879, 6689, 2170, 3879, 6689, 2540, 3879, 6689, 2778, 3879, 6689, 4200, 3879, 6689, 4214, 3879, 6689, 5190, 3879, 6689, 6260, 3879, 6689, 6722, 3879, 6689, 7508, 3879, 6689, 7694, 3879, 7803, 5759, 16, 3879, 7803, 5759, 28, 3879, 7803, 5759, 40, 3879, 7803, 5759, 58, 3879, 7803, 5759, 72, 3879, 7803, 5759, 92, 3879, 7803, 5759, 168, 3879, 7803, 5759, 266, 3879, 7803, 5759, 426, 3879, 7803, 5759, 590, 3879, 8405, 0, 3879, 8405, 8, 3879, 8405, 16, 3879, 8405, 28, 3879, 8405, 40, 3879, 8405, 72, 3879, 8405, 100, 3879, 8405, 138, 3879, 8405, 216, 3879, 8405, 236, 3879, 8405, 292, 3879, 8405, 306, 3879, 8405, 332, 3879, 8405, 364, 3879, 8405, 392, 3879, 8405, 462, 3879, 8405, 510, 3879, 8405, 524, 3879, 8405, 556, 3879, 8405, 610, 3879, 8405, 652, 3879, 8405, 766, 3879, 8405, 792, 3879, 8405, 884, 3879, 8405, 974, 3879, 8405, 996, 3879, 8405, 1260, 3879, 8405, 1512, 3879, 8405, 1612, 3879, 8405, 1948, 3879, 8405, 2030, 3879, 8405, 2042, 3879, 8405, 2106, 3879, 8405, 2212, 3879, 8405, 2246, 3879, 8405, 2566, 3879, 8405, 2678, 3879, 8405, 3902, 3879, 8405, 5178, 3879, 8405, 5182, 3879, 8405, 5184, 3879, 8405, 6789, 12, 3879, 8405, 6789, 20, 3879, 8405, 6789, 22, 3879, 8405, 6789, 26, 3879, 8405, 6789, 30, 3879, 8405, 6789, 34, 3879, 8405, 6789, 38, 3879, 8405, 6789, 48, 3879, 8405, 6789, 124, 3879, 8405, 6789, 400, 3879, 8405, 6789, 542, 3879, 10775, 5759, 332, 3879, 10775, 5759, 510, 3879, 10775, 5759, 622, 3879, 10775, 5759, 652, 3879, 10775, 5759, 6789, 14, 3879, 10775, 5759, 6789, 24, 3879, 10775, 5759, 6789, 400, 3879, 12133, 6646, 3879, 12133, 8153, 6646, 3879, 12133, 8732, 3879, 12133, 8849, 6646, 3961, 5566, 3989, 7512, 4103, 2091, 6798, 4103, 2091, 7396, 4103, 2091, 8122, 4103, 2091, 8123, 6121, 10489, 10355, 7580, 4103, 2091, 9113, 89, 8466, 4103, 2091, 9113, 89, 8521, 10572, 4103, 2091, 9113, 89, 8521, 10573, 445, 6740, 4103, 2091, 9604, 4103, 2091, 9605, 445, 6740, 4103, 2091, 9750, 4103, 2091, 9751, 445, 6740, 4107, 5758, 4117, 4197, 5878, 4117, 5876, 4117, 5877, 6121, 8057, 6490, 4117, 7443, 10001, 10154, 4117, 10716, 4153, 8781, 6622, 4171, 5758, 4201, 1045, 4926, 4201, 1045, 12132, 4215, 1045, 4926, 4215, 1045, 12132, 4215, 11907, 9898, 4215, 13047, 9898, 4215, 13233, 9898, 4223, 5836, 4223, 6510, 4223, 7327, 4676, 4228, 4260, 4269, 4926, 4387, 7608, 4401, 8774, 4423, 9831, 5758, 4676, 4686, 4837, 9615, 5012, 4849, 721, 7443, 5876, 4849, 721, 7443, 8153, 11378, 4849, 731, 11099, 9050, 4849, 1809, 11715, 9050, 4849, 2171, 8159, 6510, 4849, 2171, 9615, 6510, 4849, 3713, 601, 7443, 3713, 601, 9326, 4849, 3713, 601, 7443, 3713, 4117, 9326, 4849, 3713, 4117, 7443, 3713, 601, 9326, 4849, 3713, 4117, 7443, 3713, 4117, 9326, 4849, 4197, 5878, 4849, 4201, 9259, 6510, 4849, 4389, 6505, 8056, 4849, 4389, 6510, 4849, 5876, 4849, 6409, 9050, 4849, 6409, 9051, 6121, 1044, 4849, 6435, 6121, 7593, 8056, 4849, 6435, 6121, 9095, 5444, 4849, 6505, 10637, 7533, 9050, 4849, 6505, 11677, 9050, 4849, 6627, 9050, 4849, 6627, 9051, 7121, 4530, 4849, 6627, 9051, 7773, 4530, 4849, 6627, 9051, 8473, 7370, 4849, 6792, 4849, 7327, 4676, 4849, 7443, 6105, 6434, 4849, 7443, 6434, 4849, 7443, 6435, 6121, 8153, 10677, 8758, 4849, 7443, 6435, 6121, 8758, 4849, 7443, 6435, 6121, 10677, 8758, 4849, 7443, 6435, 9785, 7593, 8056, 4849, 7443, 6505, 6434, 4849, 7443, 7821, 6434, 4849, 7443, 8153, 6434, 4849, 7443, 8153, 6435, 6121, 8758, 4849, 7443, 8153, 6435, 6121, 10677, 8758, 4849, 7443, 12103, 6434, 4849, 7509, 9259, 6510, 4849, 7695, 9259, 6510, 4849, 7695, 10467, 6510, 4849, 7821, 6627, 9050, 4849, 7821, 8077, 9050, 4849, 7821, 8745, 9050, 4849, 7821, 10637, 7533, 9050, 4849, 7821, 11677, 9050, 4849, 7821, 12114, 4849, 8077, 9050, 4849, 8151, 12877, 9050, 4849, 8153, 6409, 9050, 4849, 8153, 8933, 6778, 4849, 8153, 11195, 4926, 4849, 8153, 12114, 4849, 8521, 8191, 11793, 9610, 4849, 8631, 10371, 9050, 4849, 8717, 11195, 4926, 4849, 8745, 9050, 4849, 8745, 9051, 6121, 5935, 275, 2725, 8076, 4849, 8745, 9051, 6121, 5935, 275, 8005, 8076, 4849, 8745, 9051, 6121, 7412, 4849, 8745, 9051, 6121, 10666, 4849, 8745, 9051, 7121, 8076, 4849, 8745, 9051, 7773, 8076, 4849, 8745, 9051, 10982, 4849, 8933, 6778, 4849, 9074, 4849, 10346, 4849, 10493, 753, 10794, 4849, 10523, 41, 9050, 4849, 10637, 7533, 9050, 4849, 10643, 7991, 10677, 760, 4849, 10677, 761, 6121, 7412, 4849, 10677, 827, 4876, 4849, 11793, 9610, 4849, 12114, 4849, 12115, 7121, 4530, 4849, 12115, 7773, 4530, 4849, 12115, 10982, 4849, 12877, 9050, 4849, 13029, 9050, 4877, 11228, 4877, 12057, 2091, 11049, 2681, 5446, 4877, 12057, 6121, 12139, 5403, 7939, 5446, 4877, 12057, 6121, 12857, 5403, 7939, 5446, 4883, 5758, 4895, 3993, 4221, 4849, 8467, 429, 8153, 10676, 4895, 4849, 5876, 4895, 4849, 7443, 6434, 4895, 4849, 7443, 8153, 6434, 4895, 7443, 5876, 4895, 10016, 4895, 11097, 6434, 4895, 11097, 6435, 4221, 760, 4895, 11097, 8153, 6434, 4895, 11097, 8153, 6435, 4221, 760, 4895, 11097, 10531, 6434, 4895, 11765, 6434, 4895, 11765, 6435, 4221, 760, 4895, 11765, 8153, 6434, 4895, 11765, 8153, 6435, 4221, 760, 4895, 11765, 10531, 6434, 4923, 721, 8197, 5758, 4923, 5758, 4923, 6121, 8759, 721, 4923, 721, 8197, 5758, 4923, 6121, 8759, 5758, 4931, 4926, 5003, 5758, 5006, 5017, 11098, 5017, 12472, 5050, 5131, 5392, 5385, 826, 5385, 8037, 6505, 5830, 5385, 8037, 6622, 5385, 8037, 9898, 5385, 8037, 13233, 9898, 5385, 8762, 5385, 10578, 5395, 8008, 5401, 11891, 4926, 5409, 5758, 5445, 5758, 5445, 5759, 275, 4849, 4389, 8056, 5445, 5759, 275, 7443, 4389, 8056, 5445, 5759, 275, 10642, 5445, 5759, 6121, 1045, 6490, 5445, 5759, 6121, 6505, 10642, 5445, 5759, 6121, 7593, 8057, 6376, 5445, 5759, 6121, 7709, 6376, 5445, 5759, 6121, 7709, 6490, 5445, 5759, 6121, 11261, 2778, 5445, 5759, 6121, 11449, 7909, 6376, 5445, 5759, 6377, 8167, 5758, 5545, 5758, 5551, 275, 6741, 568, 5551, 6376, 5551, 6741, 568, 5551, 7382, 5551, 10374, 5769, 6104, 5781, 8306, 5831, 429, 6656, 5831, 721, 9964, 5831, 8166, 5831, 10374, 5887, 6704, 5909, 6689, 2170, 5909, 6689, 2540, 5909, 6689, 2778, 5909, 6689, 4200, 5909, 6689, 4214, 5909, 6689, 5190, 5909, 6689, 6260, 5909, 6689, 6722, 5909, 6689, 7508, 5909, 6689, 7694, 5909, 9971, 8775, 3702, 5909, 10759, 29, 722, 5909, 10759, 109, 7968, 5909, 10759, 151, 988, 5909, 10759, 151, 6562, 5909, 10759, 209, 196, 5909, 10759, 209, 1142, 5909, 10759, 247, 1386, 5909, 10759, 247, 8518, 5909, 10759, 323, 1582, 5909, 10759, 351, 4878, 5909, 10759, 351, 6582, 5909, 10759, 354, 5909, 10759, 381, 364, 5909, 10759, 413, 416, 5909, 10759, 413, 2018, 5909, 10759, 481, 2234, 5909, 10759, 517, 2448, 5909, 10759, 520, 5909, 10759, 537, 536, 5909, 10759, 537, 2580, 5909, 10759, 537, 5614, 5909, 10759, 537, 5630, 5909, 10759, 569, 2650, 5909, 10759, 569, 7344, 5909, 10759, 633, 6098, 5909, 10759, 661, 3022, 5909, 10759, 661, 6212, 5909, 10759, 891, 3880, 5909, 10759, 891, 3908, 5909, 10759, 891, 6566, 5909, 10759, 891, 6576, 5909, 10759, 1619, 4738, 5909, 10759, 1619, 4750, 5909, 10759, 1619, 7050, 5909, 10759, 1619, 7052, 5909, 10759, 1619, 9618, 5909, 10759, 1859, 170, 5909, 10759, 1859, 2684, 5909, 10759, 1859, 2730, 5909, 10759, 1859, 9938, 5909, 10759, 1859, 10228, 5909, 10759, 2039, 2040, 5909, 10759, 2219, 5412, 5909, 10759, 2219, 7366, 5909, 10759, 2219, 9652, 5909, 10759, 2685, 5912, 5909, 10759, 2685, 7690, 5909, 10759, 2685, 7696, 5909, 10759, 2685, 8812, 5909, 10759, 2685, 9592, 5909, 10759, 2685, 11694, 5909, 10759, 5637, 0, 5909, 10759, 5637, 8, 5909, 10759, 5637, 16, 5909, 10759, 5637, 28, 5909, 10759, 5637, 40, 5909, 10759, 5637, 58, 5909, 10759, 5637, 66, 5909, 10759, 5637, 73, 9446, 5909, 10759, 5637, 73, 10312, 5909, 10759, 5637, 78, 5909, 10759, 5637, 266, 5909, 10759, 5637, 590, 5909, 10759, 5637, 606, 5909, 10759, 5637, 2804, 5909, 10759, 8358, 5909, 10759, 9290, 5909, 10759, 9590, 5909, 10759, 10314, 5909, 10759, 10358, 5909, 10759, 10684, 5909, 10759, 11108, 5909, 10759, 11152, 5909, 10759, 11412, 5909, 10759, 12072, 5909, 10759, 12362, 5927, 7608, 5946, 5972, 6051, 8774, 6081, 5017, 11098, 6081, 5017, 12472, 6105, 3992, 6105, 6435, 10441, 10015, 4848, 6105, 6435, 10441, 10015, 7442, 6107, 1809, 4876, 6107, 3992, 6107, 4876, 6107, 10388, 6113, 8781, 6622, 6129, 8330, 6261, 7825, 7608, 6261, 7825, 8330, 6261, 7825, 10363, 7608, 6261, 7825, 11698, 6379, 6408, 6379, 7908, 6408, 6409, 6121, 37, 8318, 6409, 6121, 10666, 6428, 6435, 10441, 10959, 5919, 9131, 11096, 6435, 10441, 10959, 5919, 9131, 11764, 6435, 10441, 11765, 5919, 9131, 9810, 6435, 10441, 11765, 5919, 9131, 10958, 6505, 2048, 6505, 2587, 6121, 5528, 6505, 3949, 5842, 6505, 4202, 6505, 4215, 9601, 5830, 6505, 4849, 10441, 6992, 6505, 5013, 8406, 6505, 5830, 6505, 6081, 7593, 8744, 6505, 6571, 4760, 6505, 6571, 5404, 6505, 6571, 5564, 6505, 6571, 7410, 6505, 6571, 7996, 6505, 6571, 8368, 6505, 6907, 5842, 6505, 7085, 8056, 6505, 7085, 8744, 6505, 7121, 4849, 10642, 6505, 7121, 7443, 10642, 6505, 7443, 10441, 6992, 6505, 7547, 7370, 6505, 7593, 5830, 6505, 7593, 8744, 6505, 7593, 9158, 6505, 7593, 9438, 6505, 7611, 5842, 6505, 7773, 4849, 10642, 6505, 7773, 7443, 10642, 6505, 8006, 6505, 8037, 7821, 5830, 6505, 8056, 6505, 8057, 6121, 2779, 7821, 4112, 6505, 8057, 6121, 4117, 6434, 6505, 8057, 6121, 7821, 1045, 7442, 6505, 8463, 7593, 8744, 6505, 8463, 8744, 6505, 8463, 9158, 6505, 8463, 9438, 6505, 8744, 6505, 9158, 6505, 9159, 5842, 6505, 9159, 6121, 4117, 6434, 6505, 9159, 7173, 7821, 46, 6505, 9338, 6505, 9438, 6505, 9711, 4178, 6505, 10143, 1860, 6505, 10143, 4760, 6505, 10194, 6505, 10420, 6505, 10502, 6505, 10677, 9264, 6505, 10677, 11202, 6505, 11036, 6505, 11097, 8022, 6505, 11202, 6505, 11354, 6505, 11387, 11205, 8774, 6505, 11649, 9264, 6505, 11765, 6434, 6505, 11765, 8022, 6505, 11765, 10716, 6505, 12383, 7593, 10642, 6505, 12383, 10642, 6505, 12931, 7593, 10642, 6505, 12931, 10642, 6505, 12967, 7593, 10642, 6505, 12967, 9602, 6505, 12967, 10642, 6505, 12984, 6505, 13067, 7593, 10642, 6505, 13067, 9602, 6505, 13067, 10420, 6505, 13067, 10642, 6509, 8774, 6516, 6531, 7803, 5759, 16, 6531, 7803, 5759, 40, 6531, 8405, 0, 6531, 8405, 16, 6531, 8405, 40, 6531, 8405, 100, 6531, 8405, 138, 6531, 8405, 216, 6531, 8405, 236, 6531, 8405, 306, 6531, 8405, 332, 6531, 8405, 364, 6531, 8405, 392, 6531, 8405, 462, 6531, 8405, 510, 6531, 8405, 524, 6531, 8405, 556, 6531, 8405, 622, 6531, 8405, 652, 6531, 8405, 2030, 6542, 6543, 11061, 7382, 6546, 6560, 6569, 4926, 6597, 8677, 8774, 6603, 600, 6606, 6610, 6611, 5758, 6611, 8166, 6614, 6616, 6623, 429, 10308, 6623, 429, 11068, 6627, 9051, 10982, 6627, 9437, 444, 6627, 9437, 720, 6643, 8774, 6675, 6741, 568, 6689, 2170, 6689, 2171, 4223, 5836, 6689, 2540, 6689, 2541, 4223, 5836, 6689, 2778, 6689, 2779, 4223, 5836, 6689, 4200, 6689, 4201, 4223, 5836, 6689, 4214, 6689, 4215, 4223, 5836, 6689, 5190, 6689, 5191, 4223, 5836, 6689, 6260, 6689, 6722, 6689, 6723, 4223, 5836, 6689, 7508, 6689, 7509, 4223, 5836, 6689, 7694, 6689, 7695, 4223, 5836, 6695, 4926, 6716, 6717, 8272, 6723, 8737, 9898, 6723, 9601, 6505, 5830, 6723, 9601, 10433, 5830, 6723, 9601, 12141, 6505, 5830, 6723, 10425, 10385, 6505, 10194, 6723, 13233, 11187, 9898, 6725, 8774, 6731, 2510, 6731, 2511, 6121, 4849, 6435, 6376, 6731, 2511, 6121, 7443, 6435, 6376, 6731, 2511, 6121, 7593, 8057, 6376, 6731, 2511, 6121, 9546, 6735, 8774, 6741, 569, 115, 11472, 6741, 569, 445, 10452, 6741, 569, 445, 10574, 6741, 569, 445, 11098, 6741, 569, 445, 12472, 6741, 721, 10411, 568, 6745, 569, 2681, 4848, 6745, 569, 2681, 7442, 6763, 9956, 6771, 8774, 6791, 9615, 5012, 6812, 6857, 8774, 6875, 7908, 6879, 477, 8774, 6879, 727, 8798, 6879, 1583, 8774, 6879, 2171, 4389, 5758, 6879, 2171, 4389, 5759, 10707, 4212, 6879, 2217, 8774, 6879, 2413, 6121, 8759, 8774, 6879, 2413, 8774, 6879, 2779, 7307, 5758, 6879, 2779, 8819, 5758, 6879, 3775, 8774, 6879, 4201, 7307, 5758, 6879, 4215, 7307, 5758, 6879, 5375, 5758, 6879, 5388, 6879, 6197, 5758, 6879, 6261, 5758, 6879, 6654, 6879, 6655, 721, 5388, 6879, 6655, 721, 7782, 6879, 6655, 721, 12120, 6879, 7023, 8774, 6879, 7111, 5758, 6879, 7121, 9513, 5758, 6879, 7398, 6879, 7399, 721, 5388, 6879, 7399, 721, 7782, 6879, 7399, 721, 12120, 6879, 7593, 8151, 8427, 7569, 8774, 6879, 7593, 8405, 384, 6879, 7593, 8405, 416, 6879, 7593, 8405, 476, 6879, 7593, 8405, 644, 6879, 7593, 8405, 888, 6879, 7593, 8405, 1128, 6879, 7593, 8405, 1129, 6121, 5388, 6879, 7593, 8405, 1129, 6121, 5389, 721, 13036, 6879, 7593, 8405, 1129, 6121, 6654, 6879, 7593, 8405, 1129, 6121, 6655, 721, 5388, 6879, 7593, 8405, 1129, 6121, 6655, 721, 5389, 721, 13036, 6879, 7593, 8405, 1129, 6121, 6655, 721, 7782, 6879, 7593, 8405, 1129, 6121, 6655, 721, 7783, 721, 13036, 6879, 7593, 8405, 1129, 6121, 6655, 721, 12120, 6879, 7593, 8405, 1129, 6121, 6655, 721, 12121, 721, 13036, 6879, 7593, 8405, 1129, 6121, 6655, 721, 13036, 6879, 7593, 8405, 1129, 6121, 7398, 6879, 7593, 8405, 1129, 6121, 7399, 721, 5388, 6879, 7593, 8405, 1129, 6121, 7399, 721, 5389, 721, 13036, 6879, 7593, 8405, 1129, 6121, 7399, 721, 7782, 6879, 7593, 8405, 1129, 6121, 7399, 721, 7783, 721, 13036, 6879, 7593, 8405, 1129, 6121, 7399, 721, 12120, 6879, 7593, 8405, 1129, 6121, 7399, 721, 12121, 721, 13036, 6879, 7593, 8405, 1129, 6121, 7399, 721, 13036, 6879, 7593, 8405, 1129, 6121, 7724, 6879, 7593, 8405, 1129, 6121, 7782, 6879, 7593, 8405, 1129, 6121, 7783, 721, 13036, 6879, 7593, 8405, 1129, 6121, 12120, 6879, 7593, 8405, 1129, 6121, 12121, 721, 13036, 6879, 7593, 8405, 1129, 6121, 13036, 6879, 7593, 8405, 2216, 6879, 7593, 8405, 2250, 6879, 7593, 8405, 2412, 6879, 7593, 8405, 2413, 6121, 6654, 6879, 7593, 8405, 2413, 6121, 7398, 6879, 7593, 8405, 2490, 6879, 7593, 8405, 2522, 6879, 7593, 8405, 2658, 6879, 7593, 8405, 3774, 6879, 7593, 8405, 4408, 6879, 7593, 8405, 4614, 6879, 7593, 8405, 4615, 6121, 5388, 6879, 7593, 8405, 4615, 6121, 6654, 6879, 7593, 8405, 4615, 6121, 6655, 721, 5388, 6879, 7593, 8405, 4615, 6121, 6655, 721, 7782, 6879, 7593, 8405, 4615, 6121, 6655, 721, 12120, 6879, 7593, 8405, 4615, 6121, 7398, 6879, 7593, 8405, 4615, 6121, 7399, 721, 5388, 6879, 7593, 8405, 4615, 6121, 7399, 721, 7782, 6879, 7593, 8405, 4615, 6121, 7399, 721, 12120, 6879, 7593, 8405, 4615, 6121, 7724, 6879, 7593, 8405, 4615, 6121, 7782, 6879, 7593, 8405, 4615, 6121, 8432, 6879, 7593, 8405, 4615, 6121, 8924, 6879, 7593, 8405, 4615, 6121, 10808, 6879, 7593, 8405, 4615, 6121, 10809, 721, 5388, 6879, 7593, 8405, 4615, 6121, 10809, 721, 7724, 6879, 7593, 8405, 4615, 6121, 10809, 721, 7782, 6879, 7593, 8405, 4615, 6121, 10809, 721, 12120, 6879, 7593, 8405, 4615, 6121, 12120, 6879, 7593, 8405, 6262, 6879, 7593, 8405, 6406, 6879, 7593, 8405, 6407, 6121, 5388, 6879, 7593, 8405, 6407, 6121, 5389, 721, 13036, 6879, 7593, 8405, 6407, 6121, 6654, 6879, 7593, 8405, 6407, 6121, 6655, 721, 5388, 6879, 7593, 8405, 6407, 6121, 6655, 721, 5389, 721, 13036, 6879, 7593, 8405, 6407, 6121, 6655, 721, 7782, 6879, 7593, 8405, 6407, 6121, 6655, 721, 7783, 721, 13036, 6879, 7593, 8405, 6407, 6121, 6655, 721, 12120, 6879, 7593, 8405, 6407, 6121, 6655, 721, 12121, 721, 13036, 6879, 7593, 8405, 6407, 6121, 6655, 721, 13036, 6879, 7593, 8405, 6407, 6121, 7398, 6879, 7593, 8405, 6407, 6121, 7399, 721, 5388, 6879, 7593, 8405, 6407, 6121, 7399, 721, 5389, 721, 13036, 6879, 7593, 8405, 6407, 6121, 7399, 721, 7782, 6879, 7593, 8405, 6407, 6121, 7399, 721, 7783, 721, 13036, 6879, 7593, 8405, 6407, 6121, 7399, 721, 12120, 6879, 7593, 8405, 6407, 6121, 7399, 721, 12121, 721, 13036, 6879, 7593, 8405, 6407, 6121, 7399, 721, 13036, 6879, 7593, 8405, 6407, 6121, 7724, 6879, 7593, 8405, 6407, 6121, 7782, 6879, 7593, 8405, 6407, 6121, 7783, 721, 13036, 6879, 7593, 8405, 6407, 6121, 8432, 6879, 7593, 8405, 6407, 6121, 8924, 6879, 7593, 8405, 6407, 6121, 12120, 6879, 7593, 8405, 6407, 6121, 12121, 721, 13036, 6879, 7593, 8405, 6407, 6121, 13036, 6879, 7593, 8405, 6674, 6879, 7593, 8405, 6789, 7568, 6879, 7593, 8405, 6824, 6879, 7593, 8405, 7022, 6879, 7593, 8405, 7062, 6879, 7593, 8405, 7080, 6879, 7593, 8405, 7316, 6879, 7593, 8405, 7317, 6121, 5388, 6879, 7593, 8405, 7317, 6121, 5389, 721, 13036, 6879, 7593, 8405, 7317, 6121, 6654, 6879, 7593, 8405, 7317, 6121, 6655, 721, 5388, 6879, 7593, 8405, 7317, 6121, 6655, 721, 5389, 721, 13036, 6879, 7593, 8405, 7317, 6121, 6655, 721, 7782, 6879, 7593, 8405, 7317, 6121, 6655, 721, 7783, 721, 13036, 6879, 7593, 8405, 7317, 6121, 6655, 721, 12120, 6879, 7593, 8405, 7317, 6121, 6655, 721, 12121, 721, 13036, 6879, 7593, 8405, 7317, 6121, 6655, 721, 13036, 6879, 7593, 8405, 7317, 6121, 7398, 6879, 7593, 8405, 7317, 6121, 7399, 721, 5388, 6879, 7593, 8405, 7317, 6121, 7399, 721, 5389, 721, 13036, 6879, 7593, 8405, 7317, 6121, 7399, 721, 7782, 6879, 7593, 8405, 7317, 6121, 7399, 721, 7783, 721, 13036, 6879, 7593, 8405, 7317, 6121, 7399, 721, 12120, 6879, 7593, 8405, 7317, 6121, 7399, 721, 12121, 721, 13036, 6879, 7593, 8405, 7317, 6121, 7399, 721, 13036, 6879, 7593, 8405, 7317, 6121, 7724, 6879, 7593, 8405, 7317, 6121, 7782, 6879, 7593, 8405, 7317, 6121, 7783, 721, 13036, 6879, 7593, 8405, 7317, 6121, 12120, 6879, 7593, 8405, 7317, 6121, 12121, 721, 13036, 6879, 7593, 8405, 7317, 6121, 13036, 6879, 7593, 8405, 7484, 6879, 7593, 8405, 7568, 6879, 7593, 8405, 7682, 6879, 7593, 8405, 8748, 6879, 7593, 8405, 9007, 7062, 6879, 7593, 8405, 9007, 7484, 6879, 7593, 8405, 9162, 6879, 7593, 8405, 9270, 6879, 7593, 8405, 9271, 6121, 5388, 6879, 7593, 8405, 9271, 6121, 6654, 6879, 7593, 8405, 9271, 6121, 6655, 721, 5388, 6879, 7593, 8405, 9271, 6121, 6655, 721, 7782, 6879, 7593, 8405, 9271, 6121, 7398, 6879, 7593, 8405, 9271, 6121, 7399, 721, 5388, 6879, 7593, 8405, 9271, 6121, 7399, 721, 7782, 6879, 7593, 8405, 9271, 6121, 7724, 6879, 7593, 8405, 9271, 6121, 7782, 6879, 7593, 8405, 9530, 6879, 7593, 8405, 9531, 6121, 5388, 6879, 7593, 8405, 9531, 6121, 6654, 6879, 7593, 8405, 9531, 6121, 6655, 721, 5388, 6879, 7593, 8405, 9531, 6121, 6655, 721, 7782, 6879, 7593, 8405, 9531, 6121, 7398, 6879, 7593, 8405, 9531, 6121, 7399, 721, 5388, 6879, 7593, 8405, 9531, 6121, 7399, 721, 7782, 6879, 7593, 8405, 9531, 6121, 7724, 6879, 7593, 8405, 9531, 6121, 7782, 6879, 7593, 8405, 9808, 6879, 7593, 8405, 9809, 6121, 5388, 6879, 7593, 8405, 9809, 6121, 6654, 6879, 7593, 8405, 9809, 6121, 6655, 721, 5388, 6879, 7593, 8405, 9809, 6121, 6655, 721, 7782, 6879, 7593, 8405, 9809, 6121, 6655, 721, 12120, 6879, 7593, 8405, 9809, 6121, 7398, 6879, 7593, 8405, 9809, 6121, 7399, 721, 5388, 6879, 7593, 8405, 9809, 6121, 7399, 721, 7782, 6879, 7593, 8405, 9809, 6121, 7399, 721, 12120, 6879, 7593, 8405, 9809, 6121, 7724, 6879, 7593, 8405, 9809, 6121, 7782, 6879, 7593, 8405, 9809, 6121, 8432, 6879, 7593, 8405, 9809, 6121, 8924, 6879, 7593, 8405, 9809, 6121, 10808, 6879, 7593, 8405, 9809, 6121, 10809, 721, 5388, 6879, 7593, 8405, 9809, 6121, 10809, 721, 7724, 6879, 7593, 8405, 9809, 6121, 10809, 721, 7782, 6879, 7593, 8405, 9809, 6121, 10809, 721, 12120, 6879, 7593, 8405, 9809, 6121, 12120, 6879, 7593, 8405, 11709, 9162, 6879, 7593, 10489, 8151, 8427, 7569, 8774, 6879, 7593, 10489, 8427, 7569, 8774, 6879, 7683, 8774, 6879, 7695, 7307, 5758, 6879, 7695, 10467, 5758, 6879, 7724, 6879, 7782, 6879, 7801, 10365, 10586, 6879, 7801, 10365, 10588, 6879, 7801, 10365, 10590, 6879, 7801, 10365, 10592, 6879, 7801, 10365, 10594, 6879, 7801, 10365, 10596, 6879, 7801, 10365, 10598, 6879, 7801, 10365, 10600, 6879, 7801, 10365, 10602, 6879, 7801, 10365, 11270, 6879, 7801, 10365, 11272, 6879, 7801, 10365, 11274, 6879, 7801, 10365, 11276, 6879, 7801, 10365, 11278, 6879, 7801, 10365, 11280, 6879, 7801, 10365, 11282, 6879, 7801, 10365, 11284, 6879, 7801, 10365, 11286, 6879, 7801, 10365, 11288, 6879, 7801, 10365, 11290, 6879, 7801, 10365, 11292, 6879, 7801, 10365, 11294, 6879, 7801, 10365, 11296, 6879, 7801, 10365, 11298, 6879, 7801, 10365, 11334, 6879, 7801, 10365, 11336, 6879, 7801, 10365, 11338, 6879, 7801, 10365, 11340, 6879, 7801, 10365, 11342, 6879, 7941, 5758, 6879, 7949, 5758, 6879, 8269, 5758, 6879, 8405, 3086, 6879, 8405, 7062, 6879, 8405, 7484, 6879, 8405, 7593, 9063, 476, 6879, 8405, 7593, 9063, 2250, 6879, 8405, 7593, 9063, 2412, 6879, 8405, 7593, 9063, 6824, 6879, 8405, 7593, 9063, 7080, 6879, 8405, 8748, 6879, 8405, 9007, 7062, 6879, 8405, 9162, 6879, 8427, 7569, 8774, 6879, 8427, 9271, 8774, 6879, 8555, 5758, 6879, 8787, 5758, 6879, 8941, 5758, 6879, 9063, 1583, 8774, 6879, 9063, 7683, 8774, 6879, 9063, 8151, 8427, 7569, 8774, 6879, 9063, 8405, 384, 6879, 9063, 8405, 416, 6879, 9063, 8405, 476, 6879, 9063, 8405, 644, 6879, 9063, 8405, 888, 6879, 9063, 8405, 1128, 6879, 9063, 8405, 1129, 6121, 5388, 6879, 9063, 8405, 1129, 6121, 6654, 6879, 9063, 8405, 1129, 6121, 6655, 721, 5388, 6879, 9063, 8405, 1129, 6121, 6655, 721, 5389, 721, 13064, 6879, 9063, 8405, 1129, 6121, 6655, 721, 7782, 6879, 9063, 8405, 1129, 6121, 6655, 721, 7783, 721, 13064, 6879, 9063, 8405, 1129, 6121, 6655, 721, 12120, 6879, 9063, 8405, 1129, 6121, 6655, 721, 12121, 721, 13064, 6879, 9063, 8405, 1129, 6121, 6655, 721, 13064, 6879, 9063, 8405, 1129, 6121, 7398, 6879, 9063, 8405, 1129, 6121, 7399, 721, 5388, 6879, 9063, 8405, 1129, 6121, 7399, 721, 5389, 721, 13064, 6879, 9063, 8405, 1129, 6121, 7399, 721, 7782, 6879, 9063, 8405, 1129, 6121, 7399, 721, 7783, 721, 13064, 6879, 9063, 8405, 1129, 6121, 7399, 721, 12120, 6879, 9063, 8405, 1129, 6121, 7399, 721, 12121, 721, 13064, 6879, 9063, 8405, 1129, 6121, 7399, 721, 13064, 6879, 9063, 8405, 1129, 6121, 7724, 6879, 9063, 8405, 1129, 6121, 7782, 6879, 9063, 8405, 1129, 6121, 13064, 6879, 9063, 8405, 2216, 6879, 9063, 8405, 2250, 6879, 9063, 8405, 2412, 6879, 9063, 8405, 2413, 6121, 6654, 6879, 9063, 8405, 2490, 6879, 9063, 8405, 2522, 6879, 9063, 8405, 2658, 6879, 9063, 8405, 3774, 6879, 9063, 8405, 4408, 6879, 9063, 8405, 4614, 6879, 9063, 8405, 4615, 6121, 5388, 6879, 9063, 8405, 4615, 6121, 6654, 6879, 9063, 8405, 4615, 6121, 6655, 721, 5388, 6879, 9063, 8405, 4615, 6121, 6655, 721, 7782, 6879, 9063, 8405, 4615, 6121, 6655, 721, 12120, 6879, 9063, 8405, 4615, 6121, 7398, 6879, 9063, 8405, 4615, 6121, 7399, 721, 5388, 6879, 9063, 8405, 4615, 6121, 7399, 721, 7782, 6879, 9063, 8405, 4615, 6121, 7399, 721, 12120, 6879, 9063, 8405, 4615, 6121, 7724, 6879, 9063, 8405, 4615, 6121, 7782, 6879, 9063, 8405, 4615, 6121, 8432, 6879, 9063, 8405, 4615, 6121, 8924, 6879, 9063, 8405, 4615, 6121, 10808, 6879, 9063, 8405, 6262, 6879, 9063, 8405, 6406, 6879, 9063, 8405, 6407, 6121, 5388, 6879, 9063, 8405, 6407, 6121, 6654, 6879, 9063, 8405, 6407, 6121, 6655, 721, 5388, 6879, 9063, 8405, 6407, 6121, 6655, 721, 5389, 721, 13064, 6879, 9063, 8405, 6407, 6121, 6655, 721, 7782, 6879, 9063, 8405, 6407, 6121, 6655, 721, 7783, 721, 13064, 6879, 9063, 8405, 6407, 6121, 6655, 721, 12120, 6879, 9063, 8405, 6407, 6121, 6655, 721, 12121, 721, 13064, 6879, 9063, 8405, 6407, 6121, 6655, 721, 13064, 6879, 9063, 8405, 6407, 6121, 7398, 6879, 9063, 8405, 6407, 6121, 7399, 721, 5388, 6879, 9063, 8405, 6407, 6121, 7399, 721, 5389, 721, 13064, 6879, 9063, 8405, 6407, 6121, 7399, 721, 7782, 6879, 9063, 8405, 6407, 6121, 7399, 721, 7783, 721, 13064, 6879, 9063, 8405, 6407, 6121, 7399, 721, 12120, 6879, 9063, 8405, 6407, 6121, 7399, 721, 12121, 721, 13064, 6879, 9063, 8405, 6407, 6121, 7399, 721, 13064, 6879, 9063, 8405, 6407, 6121, 7724, 6879, 9063, 8405, 6407, 6121, 7782, 6879, 9063, 8405, 6407, 6121, 8432, 6879, 9063, 8405, 6407, 6121, 8924, 6879, 9063, 8405, 6407, 6121, 13064, 6879, 9063, 8405, 6674, 6879, 9063, 8405, 6824, 6879, 9063, 8405, 7022, 6879, 9063, 8405, 7080, 6879, 9063, 8405, 7316, 6879, 9063, 8405, 7317, 6121, 5388, 6879, 9063, 8405, 7317, 6121, 6654, 6879, 9063, 8405, 7317, 6121, 6655, 721, 5388, 6879, 9063, 8405, 7317, 6121, 6655, 721, 5389, 721, 13064, 6879, 9063, 8405, 7317, 6121, 6655, 721, 7782, 6879, 9063, 8405, 7317, 6121, 6655, 721, 7783, 721, 13064, 6879, 9063, 8405, 7317, 6121, 6655, 721, 12120, 6879, 9063, 8405, 7317, 6121, 6655, 721, 12121, 721, 13064, 6879, 9063, 8405, 7317, 6121, 6655, 721, 13064, 6879, 9063, 8405, 7317, 6121, 7398, 6879, 9063, 8405, 7317, 6121, 7399, 721, 5388, 6879, 9063, 8405, 7317, 6121, 7399, 721, 5389, 721, 13064, 6879, 9063, 8405, 7317, 6121, 7399, 721, 7782, 6879, 9063, 8405, 7317, 6121, 7399, 721, 7783, 721, 13064, 6879, 9063, 8405, 7317, 6121, 7399, 721, 12120, 6879, 9063, 8405, 7317, 6121, 7399, 721, 12121, 721, 13064, 6879, 9063, 8405, 7317, 6121, 7399, 721, 13064, 6879, 9063, 8405, 7317, 6121, 7724, 6879, 9063, 8405, 7317, 6121, 7782, 6879, 9063, 8405, 7317, 6121, 13064, 6879, 9063, 8405, 7568, 6879, 9063, 8405, 7682, 6879, 9063, 8405, 9007, 7484, 6879, 9063, 8405, 9270, 6879, 9063, 8405, 9271, 6121, 5388, 6879, 9063, 8405, 9271, 6121, 6654, 6879, 9063, 8405, 9271, 6121, 6655, 721, 5388, 6879, 9063, 8405, 9271, 6121, 6655, 721, 7782, 6879, 9063, 8405, 9271, 6121, 7398, 6879, 9063, 8405, 9271, 6121, 7399, 721, 5388, 6879, 9063, 8405, 9271, 6121, 7399, 721, 7782, 6879, 9063, 8405, 9271, 6121, 7724, 6879, 9063, 8405, 9271, 6121, 7782, 6879, 9063, 8405, 9530, 6879, 9063, 8405, 9531, 6121, 5388, 6879, 9063, 8405, 9531, 6121, 6654, 6879, 9063, 8405, 9531, 6121, 6655, 721, 5388, 6879, 9063, 8405, 9531, 6121, 6655, 721, 7782, 6879, 9063, 8405, 9531, 6121, 7398, 6879, 9063, 8405, 9531, 6121, 7399, 721, 5388, 6879, 9063, 8405, 9531, 6121, 7399, 721, 7782, 6879, 9063, 8405, 9531, 6121, 7724, 6879, 9063, 8405, 9531, 6121, 7782, 6879, 9063, 8405, 9808, 6879, 9063, 8405, 9809, 6121, 5388, 6879, 9063, 8405, 9809, 6121, 6654, 6879, 9063, 8405, 9809, 6121, 6655, 721, 5388, 6879, 9063, 8405, 9809, 6121, 6655, 721, 7782, 6879, 9063, 8405, 9809, 6121, 6655, 721, 12120, 6879, 9063, 8405, 9809, 6121, 7724, 6879, 9063, 8405, 9809, 6121, 7782, 6879, 9063, 8405, 9809, 6121, 8432, 6879, 9063, 8405, 9809, 6121, 8924, 6879, 9063, 8405, 9809, 6121, 10808, 6879, 9063, 8405, 11709, 9162, 6879, 9063, 8427, 7569, 8774, 6879, 9063, 10489, 8151, 8427, 7569, 8774, 6879, 9063, 10489, 8427, 7569, 8774, 6879, 9245, 5758, 6879, 9412, 6879, 9419, 3717, 5758, 6879, 9483, 8396, 6879, 9513, 5758, 6879, 9809, 6121, 4531, 8774, 6879, 9809, 6121, 6379, 721, 4531, 8774, 6879, 9809, 6121, 10805, 721, 4531, 8774, 6879, 10331, 5758, 6879, 10469, 4926, 6879, 10489, 8427, 9271, 8774, 6879, 10651, 3717, 5758, 6879, 10809, 721, 5388, 6879, 10809, 721, 7782, 6879, 10809, 721, 12120, 6879, 10809, 7724, 6879, 11261, 7593, 8405, 888, 6879, 11261, 7593, 8405, 2216, 6879, 11261, 7593, 8405, 2412, 6879, 11261, 7593, 8405, 3774, 6879, 11261, 7593, 8405, 6824, 6879, 11405, 6443, 2171, 4388, 6879, 11405, 6443, 2171, 9244, 6879, 11405, 6443, 2171, 9345, 9736, 6879, 11405, 6443, 2171, 9345, 9764, 6879, 11405, 6443, 2171, 9614, 6879, 11405, 6443, 2171, 10625, 9736, 6879, 11405, 6443, 2171, 10625, 9764, 6879, 11405, 6443, 2671, 5010, 6879, 11405, 6443, 2671, 9736, 6879, 11405, 6443, 2671, 9764, 6879, 11405, 6443, 2671, 10625, 9736, 6879, 11405, 6443, 4200, 6879, 11405, 6443, 4201, 9344, 6879, 11405, 6443, 4201, 9345, 9736, 6879, 11405, 6443, 4201, 9345, 9764, 6879, 11405, 6443, 4201, 9736, 6879, 11405, 6443, 4201, 9764, 6879, 11405, 6443, 4201, 10624, 6879, 11405, 6443, 4201, 10625, 9764, 6879, 11405, 6443, 6784, 6879, 11405, 6443, 6785, 9736, 6879, 11405, 6443, 6785, 9764, 6879, 11405, 6443, 6785, 10624, 6879, 11405, 6443, 6785, 10625, 9736, 6879, 11405, 8505, 4201, 9344, 6879, 11405, 9153, 4201, 5010, 6879, 11405, 9337, 2171, 10436, 6879, 11405, 9975, 2779, 10138, 6879, 11405, 10549, 6785, 5010, 6879, 11405, 10621, 2170, 6879, 11405, 10621, 2171, 9344, 6879, 11405, 10621, 2171, 10624, 6879, 11405, 10621, 2670, 6879, 11405, 10621, 2778, 6879, 11405, 10621, 4201, 9344, 6879, 11405, 10621, 4201, 10624, 6879, 11405, 10621, 6784, 6879, 11405, 10621, 7695, 9344, 6879, 11405, 10621, 8820, 6879, 11405, 10755, 4201, 9344, 6879, 11405, 11117, 2670, 6879, 11405, 11617, 2778, 6879, 11405, 11617, 2779, 10138, 6879, 11405, 11617, 4201, 9344, 6879, 11405, 11645, 2170, 6879, 11405, 11645, 2670, 6879, 11405, 11645, 6784, 6879, 11405, 11865, 2670, 6879, 11405, 11865, 2671, 10707, 4212, 6879, 11405, 11865, 4200, 6879, 11405, 11865, 4201, 9344, 6879, 11405, 11865, 6784, 6879, 11405, 11865, 6785, 10707, 4212, 6879, 12120, 6879, 12489, 10365, 10586, 6879, 12489, 10365, 10588, 6879, 12489, 10365, 10592, 6879, 12489, 10365, 10594, 6879, 12489, 10365, 10598, 6879, 12489, 10365, 10600, 6879, 12489, 10365, 11272, 6879, 12489, 10365, 11274, 6879, 12489, 10365, 11276, 6879, 12489, 10365, 11278, 6879, 12489, 10365, 11284, 6879, 12489, 10365, 11286, 6879, 12489, 10365, 11288, 6879, 12489, 10365, 11296, 6879, 12489, 10365, 11298, 6879, 12489, 10365, 11300, 6879, 12489, 10365, 11302, 6879, 12489, 10365, 11304, 6879, 12489, 10365, 11306, 6879, 12489, 10365, 11308, 6879, 12489, 10365, 11310, 6879, 12489, 10365, 11312, 6879, 12489, 10365, 11314, 6879, 12489, 10365, 11316, 6879, 12489, 10365, 11318, 6879, 12489, 10365, 11320, 6879, 12489, 10365, 11322, 6879, 12489, 10365, 11324, 6879, 12489, 10365, 11326, 6879, 12489, 10365, 11328, 6879, 12489, 10365, 11330, 6879, 12489, 10365, 11332, 6879, 12489, 10365, 11334, 6879, 12489, 10365, 11336, 6879, 12489, 10365, 11338, 6879, 12489, 10365, 11340, 6879, 12489, 10365, 11342, 6879, 13036, 6879, 13064, 6909, 4215, 13047, 9898, 6909, 5385, 8037, 6622, 6909, 6505, 6906, 6909, 6505, 8083, 9811, 721, 11765, 6434, 6909, 6505, 8083, 10959, 721, 11765, 6434, 6909, 6569, 4926, 6909, 6723, 9601, 12141, 6505, 5830, 6909, 6723, 13233, 11187, 9898, 6909, 6879, 6622, 6909, 6907, 12017, 4927, 10380, 6909, 7121, 13069, 7821, 11765, 6434, 6909, 7271, 4153, 6434, 6909, 7607, 4153, 6434, 6909, 7773, 13069, 7821, 11765, 6434, 6909, 7971, 46, 6909, 8097, 13235, 11765, 6434, 6909, 8153, 6617, 11195, 4927, 10380, 6909, 8153, 8869, 6617, 11195, 4927, 10380, 6909, 8717, 6617, 11195, 4927, 10380, 6909, 8717, 8869, 6617, 11195, 4927, 10380, 6909, 9085, 11242, 6909, 9722, 6909, 9898, 6909, 10385, 6505, 5830, 6909, 10677, 760, 6909, 11765, 6434, 6909, 12017, 4927, 10380, 6909, 12387, 11765, 6434, 6909, 12539, 11765, 6434, 6909, 12895, 11765, 6434, 6909, 12967, 6409, 9051, 10380, 6909, 12967, 6409, 11195, 4927, 10380, 6909, 13061, 46, 6909, 13067, 6409, 9051, 10380, 6909, 13067, 6409, 11195, 4927, 10380, 6909, 13191, 7271, 4153, 6434, 6909, 13191, 7607, 4153, 6434, 6909, 13191, 11765, 6434, 6909, 13199, 6505, 11765, 6434, 6909, 13233, 9898, 6909, 13233, 10433, 9898, 6909, 13235, 11765, 6434, 6909, 13351, 11765, 6434, 6954, 6989, 428, 6989, 429, 445, 12903, 6741, 568, 7031, 341, 5759, 940, 7031, 341, 5759, 5740, 7031, 341, 5965, 6540, 7031, 341, 5965, 6541, 8596, 7031, 341, 5965, 8596, 7031, 341, 6689, 2170, 7031, 341, 6689, 2540, 7031, 341, 6689, 2778, 7031, 341, 6689, 4200, 7031, 341, 6689, 4214, 7031, 341, 6689, 5190, 7031, 341, 6689, 6260, 7031, 341, 6689, 6722, 7031, 341, 6689, 7508, 7031, 341, 6689, 7694, 7031, 341, 7803, 8, 7031, 341, 7803, 28, 7031, 341, 7803, 40, 7031, 341, 7803, 162, 7031, 341, 7803, 590, 7031, 341, 8405, 0, 7031, 341, 8405, 16, 7031, 341, 8405, 100, 7031, 341, 8405, 116, 7031, 341, 8405, 138, 7031, 341, 8405, 216, 7031, 341, 8405, 236, 7031, 341, 8405, 306, 7031, 341, 8405, 332, 7031, 341, 8405, 364, 7031, 341, 8405, 392, 7031, 341, 8405, 426, 7031, 341, 8405, 440, 7031, 341, 8405, 462, 7031, 341, 8405, 510, 7031, 341, 8405, 524, 7031, 341, 8405, 556, 7031, 341, 8405, 610, 7031, 341, 8405, 622, 7031, 341, 8405, 652, 7031, 341, 8405, 670, 7031, 341, 8405, 1434, 7031, 341, 8405, 1612, 7031, 341, 8405, 2030, 7031, 341, 8405, 2126, 7031, 341, 8405, 2212, 7031, 341, 8405, 2516, 7031, 341, 8405, 2678, 7049, 5759, 1763, 2722, 7049, 5759, 4740, 7049, 5759, 6388, 7049, 5759, 6608, 7049, 5759, 7450, 7049, 5759, 7976, 7049, 5759, 7992, 7049, 5759, 8025, 2227, 4794, 7049, 5759, 8583, 5014, 7049, 5759, 8663, 8666, 7049, 5759, 8918, 7049, 5759, 9382, 7049, 5759, 9408, 7049, 5759, 9506, 7049, 5759, 9624, 7049, 5759, 9794, 7049, 5759, 9902, 7049, 5759, 11438, 7049, 5759, 11440, 7049, 5759, 12088, 7049, 5759, 12366, 7049, 5759, 12906, 7049, 5759, 13038, 7049, 6689, 2170, 7049, 6689, 2540, 7049, 6689, 2778, 7049, 6689, 4200, 7049, 6689, 4214, 7049, 6689, 5190, 7049, 6689, 6260, 7049, 6689, 6722, 7049, 6689, 7508, 7049, 6689, 7694, 7049, 7803, 5759, 8, 7049, 7803, 5759, 16, 7049, 7803, 5759, 40, 7049, 7803, 5759, 48, 7049, 7803, 5759, 58, 7049, 7803, 5759, 66, 7049, 7803, 5759, 72, 7049, 7803, 5759, 92, 7049, 7803, 5759, 258, 7049, 7803, 5759, 266, 7049, 7803, 5759, 426, 7049, 7803, 5759, 440, 7049, 7803, 5759, 582, 7049, 7803, 5759, 606, 7049, 7803, 5759, 652, 7049, 7803, 5759, 668, 7049, 7803, 10259, 58, 7049, 7803, 10259, 86, 7049, 8405, 100, 7049, 8405, 116, 7049, 8405, 130, 7049, 8405, 138, 7049, 8405, 150, 7049, 8405, 236, 7049, 8405, 306, 7049, 8405, 322, 7049, 8405, 332, 7049, 8405, 350, 7049, 8405, 380, 7049, 8405, 412, 7049, 8405, 480, 7049, 8405, 496, 7049, 8405, 516, 7049, 8405, 524, 7049, 8405, 556, 7049, 8405, 568, 7049, 8405, 616, 7049, 8405, 660, 7049, 8405, 884, 7049, 8405, 890, 7049, 8405, 1612, 7049, 8405, 1618, 7049, 8405, 2038, 7049, 8405, 2080, 7049, 8405, 2134, 7049, 8405, 2212, 7049, 8405, 2218, 7049, 8405, 2516, 7049, 8405, 2572, 7049, 8405, 2678, 7049, 8405, 2684, 7049, 8405, 5994, 7049, 8405, 6000, 7049, 8775, 783, 2426, 7049, 8775, 783, 4768, 7049, 8775, 965, 2426, 7049, 8775, 965, 4768, 7049, 8775, 1763, 6441, 782, 7049, 8775, 1763, 6441, 2226, 7049, 8775, 1763, 6441, 2552, 7049, 8775, 1763, 6441, 3814, 7049, 8775, 1763, 6441, 5026, 7049, 8775, 1763, 6441, 5450, 7049, 8775, 1763, 6441, 10446, 7049, 8775, 1763, 6441, 10448, 7049, 8775, 1763, 6441, 11178, 7049, 8775, 1763, 6441, 11180, 7049, 8775, 2227, 2426, 7049, 8775, 2227, 4768, 7049, 8775, 3815, 2426, 7049, 8775, 3815, 4768, 7049, 8775, 5027, 2426, 7049, 8775, 5027, 4768, 7049, 8775, 5451, 2426, 7049, 8775, 5451, 4768, 7049, 8775, 9143, 2426, 7049, 8775, 9143, 4768, 7049, 8775, 9145, 2426, 7049, 8775, 9145, 4768, 7049, 8775, 9981, 2426, 7049, 8775, 9981, 4768, 7049, 8775, 9983, 2426, 7049, 8775, 9983, 4768, 7049, 8775, 9985, 2426, 7049, 8775, 9985, 4768, 7049, 8775, 10447, 2426, 7049, 8775, 10447, 4768, 7049, 8775, 10449, 2426, 7049, 8775, 10449, 4768, 7049, 8775, 11179, 2426, 7049, 8775, 11179, 4768, 7049, 8775, 11181, 2426, 7049, 8775, 11181, 4768, 7049, 8775, 11380, 7049, 8775, 11716, 7049, 9971, 8775, 5548, 7049, 12053, 7803, 360, 7049, 12053, 7803, 498, 7049, 12053, 7803, 500, 7049, 12053, 7803, 506, 7049, 12053, 7803, 522, 7049, 12053, 7803, 1850, 7049, 12053, 7803, 2282, 7049, 12053, 7803, 2286, 7049, 12053, 7803, 2288, 7049, 12053, 7803, 2292, 7049, 12053, 7803, 2308, 7049, 12053, 7803, 2321, 6031, 2170, 7049, 12053, 7803, 2321, 6031, 2778, 7049, 12053, 7803, 2334, 7049, 12053, 7803, 2344, 7049, 12053, 7803, 2478, 7049, 12053, 7803, 5506, 7085, 601, 5876, 7085, 4117, 5876, 7085, 4849, 10643, 10374, 7085, 8056, 7085, 8849, 10677, 761, 10374, 7089, 6622, 7089, 7593, 8405, 0, 7089, 7593, 8405, 1, 6121, 1045, 6376, 7089, 7593, 8405, 1, 6121, 1045, 6377, 721, 8432, 7089, 7593, 8405, 1, 6121, 1045, 6490, 7089, 7593, 8405, 1, 6121, 4531, 6376, 7089, 7593, 8405, 1, 6121, 5551, 6376, 7089, 7593, 8405, 1, 6121, 5551, 6377, 721, 6378, 7089, 7593, 8405, 1, 6121, 5551, 6490, 7089, 7593, 8405, 1, 6121, 6378, 7089, 7593, 8405, 1, 6121, 6516, 7089, 7593, 8405, 1, 6121, 6517, 721, 1045, 6490, 7089, 7593, 8405, 1, 6121, 6517, 721, 4531, 6376, 7089, 7593, 8405, 1, 6121, 6517, 721, 6378, 7089, 7593, 8405, 1, 6121, 6517, 721, 6874, 7089, 7593, 8405, 1, 6121, 6517, 721, 7708, 7089, 7593, 8405, 1, 6121, 6546, 7089, 7593, 8405, 1, 6121, 6874, 7089, 7593, 8405, 1, 6121, 7443, 4389, 5550, 7089, 7593, 8405, 1, 6121, 7708, 7089, 7593, 8405, 1, 6121, 8153, 6874, 7089, 7593, 8405, 1, 6121, 8432, 7089, 7593, 8405, 1, 6121, 8534, 7089, 7593, 8405, 1, 6121, 8758, 7089, 7593, 8405, 1, 6121, 10267, 6516, 7089, 7593, 8405, 1, 6121, 10804, 7089, 7593, 8405, 1, 6121, 10805, 721, 8432, 7089, 7593, 8405, 1, 6121, 11215, 4530, 7089, 7593, 8405, 1, 6121, 11448, 7089, 7593, 8405, 1, 6121, 11449, 721, 1045, 6490, 7089, 7593, 8405, 1, 6121, 11449, 721, 4531, 6376, 7089, 7593, 8405, 1, 6121, 11449, 721, 6378, 7089, 7593, 8405, 1, 6121, 11449, 721, 6874, 7089, 7593, 8405, 1, 6121, 11449, 721, 7708, 7089, 7593, 8405, 2, 7089, 7593, 8405, 3, 6121, 1045, 6376, 7089, 7593, 8405, 3, 6121, 1045, 6490, 7089, 7593, 8405, 3, 6121, 4530, 7089, 7593, 8405, 3, 6121, 4877, 6490, 7089, 7593, 8405, 3, 6121, 8473, 7708, 7089, 7593, 8405, 3, 6121, 8758, 7089, 7593, 8405, 3, 6121, 8846, 7089, 7593, 8405, 3, 6121, 9553, 4530, 7089, 7593, 8405, 4, 7089, 7593, 8405, 5, 6121, 1045, 6376, 7089, 7593, 8405, 5, 6121, 3966, 7089, 7593, 8405, 5, 6121, 4530, 7089, 7593, 8405, 5, 6121, 6378, 7089, 7593, 8405, 5, 6121, 6546, 7089, 7593, 8405, 5, 6121, 8758, 7089, 7593, 8405, 5, 6121, 9072, 7089, 7593, 8405, 5, 6121, 9073, 721, 6378, 7089, 7593, 8405, 5, 6121, 11448, 7089, 7593, 8405, 6, 7089, 7593, 8405, 7, 6121, 1045, 6376, 7089, 7593, 8405, 7, 6121, 1045, 6490, 7089, 7593, 8405, 7, 6121, 3966, 7089, 7593, 8405, 7, 6121, 4530, 7089, 7593, 8405, 7, 6121, 4531, 721, 5878, 7089, 7593, 8405, 7, 6121, 4877, 6490, 7089, 7593, 8405, 7, 6121, 5878, 7089, 7593, 8405, 7, 6121, 6546, 7089, 7593, 8405, 7, 6121, 8473, 7708, 7089, 7593, 8405, 7, 6121, 8758, 7089, 7593, 8405, 7, 6121, 8846, 7089, 7593, 8405, 7, 6121, 9072, 7089, 7593, 8405, 7, 6121, 9553, 4530, 7089, 7593, 8405, 7, 6121, 11449, 6490, 7089, 7593, 8405, 8, 7089, 7593, 8405, 9, 6121, 1045, 6376, 7089, 7593, 8405, 9, 6121, 1045, 6490, 7089, 7593, 8405, 9, 6121, 4531, 6376, 7089, 7593, 8405, 9, 6121, 6378, 7089, 7593, 8405, 9, 6121, 6516, 7089, 7593, 8405, 9, 6121, 6546, 7089, 7593, 8405, 9, 6121, 6874, 7089, 7593, 8405, 9, 6121, 7272, 7089, 7593, 8405, 9, 6121, 7708, 7089, 7593, 8405, 9, 6121, 7709, 6490, 7089, 7593, 8405, 9, 6121, 8153, 6874, 7089, 7593, 8405, 9, 6121, 8432, 7089, 7593, 8405, 9, 6121, 8433, 721, 6378, 7089, 7593, 8405, 9, 6121, 8433, 721, 6874, 7089, 7593, 8405, 9, 6121, 8534, 7089, 7593, 8405, 9, 6121, 8758, 7089, 7593, 8405, 9, 6121, 9072, 7089, 7593, 8405, 9, 6121, 9073, 721, 6516, 7089, 7593, 8405, 9, 6121, 10267, 6516, 7089, 7593, 8405, 9, 6121, 10804, 7089, 7593, 8405, 9, 6121, 11215, 4530, 7089, 7593, 8405, 9, 6121, 11448, 7089, 7593, 8405, 9, 6121, 11449, 721, 1045, 6490, 7089, 7593, 8405, 9, 6121, 11449, 721, 4531, 6376, 7089, 7593, 8405, 9, 6121, 11449, 721, 6378, 7089, 7593, 8405, 9, 6121, 11449, 721, 6874, 7089, 7593, 8405, 9, 6121, 11449, 721, 7708, 7089, 7593, 8405, 9, 6121, 11449, 6490, 7089, 7593, 8405, 10, 7089, 7593, 8405, 11, 6121, 1045, 6376, 7089, 7593, 8405, 11, 6121, 4530, 7089, 7593, 8405, 11, 6121, 8473, 7708, 7089, 7593, 8405, 11, 6121, 9553, 4530, 7089, 7593, 8405, 12, 7089, 7593, 8405, 13, 6121, 1045, 6376, 7089, 7593, 8405, 13, 6121, 4530, 7089, 7593, 8405, 13, 6121, 6378, 7089, 7593, 8405, 13, 6121, 6516, 7089, 7593, 8405, 13, 6121, 6546, 7089, 7593, 8405, 13, 6121, 8432, 7089, 7593, 8405, 13, 6121, 8758, 7089, 7593, 8405, 13, 6121, 9072, 7089, 7593, 8405, 13, 6121, 9553, 4530, 7089, 7593, 8405, 13, 6121, 11448, 7089, 7593, 8405, 14, 7089, 7593, 8405, 15, 6121, 1045, 6376, 7089, 7593, 8405, 15, 6121, 1045, 6490, 7089, 7593, 8405, 15, 6121, 4530, 7089, 7593, 8405, 15, 6121, 4877, 6490, 7089, 7593, 8405, 15, 6121, 6517, 6490, 7089, 7593, 8405, 15, 6121, 6546, 7089, 7593, 8405, 15, 6121, 8758, 7089, 7593, 8405, 15, 6121, 9072, 7089, 7593, 8405, 15, 6121, 10802, 7089, 7593, 8405, 15, 6121, 10804, 7089, 7593, 8405, 15, 6121, 11448, 7089, 7593, 8405, 16, 7089, 7593, 8405, 17, 6121, 1045, 6490, 7089, 7593, 8405, 17, 6121, 4531, 6376, 7089, 7593, 8405, 17, 6121, 6378, 7089, 7593, 8405, 17, 6121, 6516, 7089, 7593, 8405, 17, 6121, 6546, 7089, 7593, 8405, 17, 6121, 6874, 7089, 7593, 8405, 17, 6121, 7708, 7089, 7593, 8405, 17, 6121, 7709, 6490, 7089, 7593, 8405, 17, 6121, 8153, 6874, 7089, 7593, 8405, 17, 6121, 8432, 7089, 7593, 8405, 17, 6121, 8534, 7089, 7593, 8405, 17, 6121, 8758, 7089, 7593, 8405, 17, 6121, 10267, 6516, 7089, 7593, 8405, 17, 6121, 10804, 7089, 7593, 8405, 17, 6121, 10805, 721, 6378, 7089, 7593, 8405, 17, 6121, 11215, 4530, 7089, 7593, 8405, 17, 6121, 11448, 7089, 7593, 8405, 18, 7089, 7593, 8405, 19, 6121, 6546, 7089, 7593, 8405, 19, 6121, 8758, 7089, 7593, 8405, 19, 6121, 11448, 7089, 7593, 8405, 19, 6121, 12426, 7089, 7593, 8405, 20, 7089, 7593, 8405, 21, 6121, 1045, 6490, 7089, 7593, 8405, 21, 6121, 4530, 7089, 7593, 8405, 21, 6121, 4877, 6490, 7089, 7593, 8405, 21, 6121, 6378, 7089, 7593, 8405, 21, 6121, 6546, 7089, 7593, 8405, 21, 6121, 8758, 7089, 7593, 8405, 21, 6121, 8759, 721, 10001, 8758, 7089, 7593, 8405, 21, 6121, 9072, 7089, 7593, 8405, 21, 6121, 9553, 4530, 7089, 7593, 8405, 21, 6121, 10001, 8758, 7089, 7593, 8405, 21, 6121, 10802, 7089, 7593, 8405, 22, 7089, 7593, 8405, 23, 6121, 760, 7089, 7593, 8405, 23, 6121, 1045, 6490, 7089, 7593, 8405, 23, 6121, 1045, 6491, 721, 8432, 7089, 7593, 8405, 23, 6121, 3770, 7089, 7593, 8405, 23, 6121, 3966, 7089, 7593, 8405, 23, 6121, 4423, 8758, 7089, 7593, 8405, 23, 6121, 4877, 6490, 7089, 7593, 8405, 23, 6121, 6378, 7089, 7593, 8405, 23, 6121, 6546, 7089, 7593, 8405, 23, 6121, 8153, 760, 7089, 7593, 8405, 23, 6121, 8473, 1044, 7089, 7593, 8405, 23, 6121, 8473, 7708, 7089, 7593, 8405, 23, 6121, 8758, 7089, 7593, 8405, 23, 6121, 9072, 7089, 7593, 8405, 23, 6121, 9553, 4530, 7089, 7593, 8405, 23, 6121, 11215, 4530, 7089, 7593, 8405, 23, 6121, 11449, 6490, 7089, 7593, 8405, 24, 7089, 7593, 8405, 25, 6121, 1045, 6376, 7089, 7593, 8405, 25, 6121, 1045, 6490, 7089, 7593, 8405, 25, 6121, 4530, 7089, 7593, 8405, 25, 6121, 6378, 7089, 7593, 8405, 25, 6121, 8473, 7708, 7089, 7593, 8405, 25, 6121, 9553, 4530, 7089, 7593, 8405, 26, 7089, 7593, 8405, 27, 6121, 1045, 6376, 7089, 7593, 8405, 27, 6121, 1045, 6490, 7089, 7593, 8405, 27, 6121, 3966, 7089, 7593, 8405, 27, 6121, 4849, 4530, 7089, 7593, 8405, 27, 6121, 4877, 6490, 7089, 7593, 8405, 27, 6121, 4895, 7443, 1760, 7089, 7593, 8405, 27, 6121, 6378, 7089, 7593, 8405, 27, 6121, 6546, 7089, 7593, 8405, 27, 6121, 6874, 7089, 7593, 8405, 27, 6121, 7708, 7089, 7593, 8405, 27, 6121, 8473, 7708, 7089, 7593, 8405, 27, 6121, 9072, 7089, 7593, 8405, 27, 6121, 9553, 4530, 7089, 7593, 8405, 27, 6121, 11215, 4530, 7089, 7593, 8405, 27, 6121, 11449, 6490, 7089, 7593, 8405, 27, 10451, 115, 11424, 7089, 7593, 8405, 28, 7089, 7593, 8405, 29, 6121, 1045, 6376, 7089, 7593, 8405, 29, 6121, 1045, 6377, 721, 8432, 7089, 7593, 8405, 29, 6121, 1045, 6490, 7089, 7593, 8405, 29, 6121, 1809, 5551, 8318, 7089, 7593, 8405, 29, 6121, 4531, 6376, 7089, 7593, 8405, 29, 6121, 4536, 7089, 7593, 8405, 29, 6121, 4537, 721, 1045, 6490, 7089, 7593, 8405, 29, 6121, 4537, 721, 4531, 6376, 7089, 7593, 8405, 29, 6121, 4537, 721, 6378, 7089, 7593, 8405, 29, 6121, 4537, 721, 6874, 7089, 7593, 8405, 29, 6121, 4537, 721, 7708, 7089, 7593, 8405, 29, 6121, 4895, 8759, 9548, 7089, 7593, 8405, 29, 6121, 4896, 7089, 7593, 8405, 29, 6121, 6378, 7089, 7593, 8405, 29, 6121, 6516, 7089, 7593, 8405, 29, 6121, 6546, 7089, 7593, 8405, 29, 6121, 6874, 7089, 7593, 8405, 29, 6121, 7708, 7089, 7593, 8405, 29, 6121, 7709, 721, 6378, 7089, 7593, 8405, 29, 6121, 7709, 721, 8432, 7089, 7593, 8405, 29, 6121, 7709, 721, 10804, 7089, 7593, 8405, 29, 6121, 8153, 6378, 7089, 7593, 8405, 29, 6121, 8153, 6874, 7089, 7593, 8405, 29, 6121, 8432, 7089, 7593, 8405, 29, 6121, 8433, 721, 6378, 7089, 7593, 8405, 29, 6121, 8433, 721, 6874, 7089, 7593, 8405, 29, 6121, 8534, 7089, 7593, 8405, 29, 6121, 8535, 721, 8432, 7089, 7593, 8405, 29, 6121, 8758, 7089, 7593, 8405, 29, 6121, 8759, 721, 6378, 7089, 7593, 8405, 29, 6121, 10267, 6516, 7089, 7593, 8405, 29, 6121, 10804, 7089, 7593, 8405, 29, 6121, 10805, 721, 8432, 7089, 7593, 8405, 29, 6121, 11448, 7089, 7593, 8405, 29, 6121, 11449, 721, 1045, 6490, 7089, 7593, 8405, 29, 6121, 11449, 721, 4531, 6376, 7089, 7593, 8405, 29, 6121, 11449, 721, 6378, 7089, 7593, 8405, 29, 6121, 11449, 721, 6874, 7089, 7593, 8405, 29, 6121, 11449, 721, 7708, 7089, 7593, 8405, 30, 7089, 7593, 8405, 31, 6121, 1045, 6376, 7089, 7593, 8405, 31, 6121, 4530, 7089, 7593, 8405, 31, 6121, 6378, 7089, 7593, 8405, 31, 6121, 8473, 7708, 7089, 7593, 8405, 31, 6121, 8758, 7089, 7593, 8405, 31, 6121, 8759, 9785, 10802, 7089, 7593, 8405, 31, 6121, 9553, 4530, 7089, 7593, 8405, 31, 6121, 10196, 7089, 7593, 8405, 31, 6121, 10533, 5878, 7089, 7593, 8405, 32, 7089, 7593, 8405, 33, 6121, 4530, 7089, 7593, 8405, 33, 6121, 4531, 5878, 7089, 7593, 8405, 33, 6121, 8759, 9785, 10802, 7089, 7593, 8405, 33, 6121, 10001, 8758, 7089, 7593, 8405, 34, 7089, 7593, 8405, 35, 6121, 1045, 6376, 7089, 7593, 8405, 35, 6121, 1045, 6490, 7089, 7593, 8405, 35, 6121, 1045, 6491, 721, 8432, 7089, 7593, 8405, 35, 6121, 4877, 6490, 7089, 7593, 8405, 35, 6121, 4895, 1760, 7089, 7593, 8405, 35, 6121, 5878, 7089, 7593, 8405, 35, 6121, 6378, 7089, 7593, 8405, 35, 6121, 6546, 7089, 7593, 8405, 35, 6121, 8153, 6874, 7089, 7593, 8405, 35, 6121, 8473, 7708, 7089, 7593, 8405, 35, 6121, 8758, 7089, 7593, 8405, 35, 6121, 9072, 7089, 7593, 8405, 35, 6121, 9553, 4530, 7089, 7593, 8405, 35, 6121, 10190, 7089, 7593, 8405, 35, 6121, 10191, 721, 8473, 7708, 7089, 7593, 8405, 35, 6121, 10267, 6516, 7089, 7593, 8405, 35, 9642, 7089, 7593, 8405, 36, 7089, 7593, 8405, 37, 6121, 1045, 6376, 7089, 7593, 8405, 37, 6121, 1045, 6490, 7089, 7593, 8405, 37, 6121, 1045, 6491, 721, 1045, 6376, 7089, 7593, 8405, 37, 6121, 4530, 7089, 7593, 8405, 37, 6121, 6378, 7089, 7593, 8405, 37, 6121, 6379, 721, 1045, 6376, 7089, 7593, 8405, 37, 6121, 6546, 7089, 7593, 8405, 37, 6121, 6547, 721, 1045, 6376, 7089, 7593, 8405, 37, 6121, 6617, 6490, 7089, 7593, 8405, 37, 6121, 7653, 5878, 7089, 7593, 8405, 37, 6121, 8473, 7708, 7089, 7593, 8405, 37, 6121, 9072, 7089, 7593, 8405, 37, 6121, 9553, 4530, 7089, 7593, 8405, 37, 6121, 11448, 7089, 7593, 8405, 38, 7089, 7593, 8405, 39, 6121, 1045, 6376, 7089, 7593, 8405, 39, 6121, 1045, 6490, 7089, 7593, 8405, 39, 6121, 3966, 7089, 7593, 8405, 39, 6121, 4530, 7089, 7593, 8405, 39, 6121, 4877, 6490, 7089, 7593, 8405, 39, 6121, 6546, 7089, 7593, 8405, 39, 6121, 6617, 6490, 7089, 7593, 8405, 39, 6121, 8473, 7708, 7089, 7593, 8405, 39, 6121, 8758, 7089, 7593, 8405, 39, 6121, 9072, 7089, 7593, 8405, 39, 6121, 9553, 4530, 7089, 7593, 8405, 39, 6121, 10001, 8758, 7089, 7593, 8405, 39, 6121, 10804, 7089, 7593, 8405, 39, 6121, 11215, 4530, 7089, 7593, 8405, 39, 6121, 11449, 6490, 7089, 7593, 8405, 40, 7089, 7593, 8405, 41, 760, 7089, 7593, 8405, 41, 6121, 1045, 6490, 7089, 7593, 8405, 41, 6121, 4531, 6376, 7089, 7593, 8405, 41, 6121, 4536, 7089, 7593, 8405, 41, 6121, 4537, 721, 1045, 6490, 7089, 7593, 8405, 41, 6121, 4537, 721, 4531, 6376, 7089, 7593, 8405, 41, 6121, 4537, 721, 6378, 7089, 7593, 8405, 41, 6121, 4537, 721, 6874, 7089, 7593, 8405, 41, 6121, 4537, 721, 7708, 7089, 7593, 8405, 41, 6121, 5551, 6376, 7089, 7593, 8405, 41, 6121, 6378, 7089, 7593, 8405, 41, 6121, 6516, 7089, 7593, 8405, 41, 6121, 6546, 7089, 7593, 8405, 41, 6121, 6874, 7089, 7593, 8405, 41, 6121, 7708, 7089, 7593, 8405, 41, 6121, 7709, 721, 6378, 7089, 7593, 8405, 41, 6121, 7709, 6490, 7089, 7593, 8405, 41, 6121, 8153, 6378, 7089, 7593, 8405, 41, 6121, 8153, 6874, 7089, 7593, 8405, 41, 6121, 8432, 7089, 7593, 8405, 41, 6121, 8433, 721, 10804, 7089, 7593, 8405, 41, 6121, 8534, 7089, 7593, 8405, 41, 6121, 10267, 6516, 7089, 7593, 8405, 41, 6121, 10804, 7089, 7593, 8405, 41, 6121, 10805, 721, 6378, 7089, 7593, 8405, 41, 6121, 10805, 721, 6546, 7089, 7593, 8405, 41, 6121, 10805, 721, 6874, 7089, 7593, 8405, 41, 6121, 10805, 721, 8432, 7089, 7593, 8405, 41, 6121, 10805, 6490, 7089, 7593, 8405, 41, 6121, 11215, 4530, 7089, 7593, 8405, 41, 6121, 11448, 7089, 7593, 8405, 41, 6121, 11449, 6490, 7089, 7593, 8405, 42, 7089, 7593, 8405, 43, 6121, 1045, 6490, 7089, 7593, 8405, 43, 6121, 3966, 7089, 7593, 8405, 43, 6121, 4530, 7089, 7593, 8405, 43, 6121, 7443, 4530, 7089, 7593, 8405, 43, 6121, 7708, 7089, 7593, 8405, 43, 6121, 9553, 4530, 7089, 7593, 8405, 43, 6121, 10001, 8758, 7089, 7593, 8405, 44, 7089, 7593, 8405, 45, 6121, 1045, 6376, 7089, 7593, 8405, 45, 6121, 1045, 6490, 7089, 7593, 8405, 45, 6121, 4530, 7089, 7593, 8405, 45, 6121, 5551, 6376, 7089, 7593, 8405, 45, 6121, 6378, 7089, 7593, 8405, 45, 6121, 6874, 7089, 7593, 8405, 45, 6121, 10804, 7089, 7593, 8405, 45, 6121, 11448, 7089, 7593, 8405, 46, 7089, 7593, 8405, 47, 6121, 1045, 6376, 7089, 7593, 8405, 47, 6121, 9553, 4530, 7089, 7593, 8405, 47, 6121, 10804, 7089, 7593, 8405, 48, 7089, 7593, 8405, 49, 6121, 1045, 6376, 7089, 7593, 8405, 49, 6121, 1045, 6490, 7089, 7593, 8405, 49, 6121, 4530, 7089, 7593, 8405, 49, 6121, 4531, 6376, 7089, 7593, 8405, 49, 6121, 4896, 7089, 7593, 8405, 49, 6121, 5551, 6376, 7089, 7593, 8405, 49, 6121, 6378, 7089, 7593, 8405, 49, 6121, 6874, 7089, 7593, 8405, 49, 6121, 7708, 7089, 7593, 8405, 49, 6121, 8432, 7089, 7593, 8405, 49, 6121, 8758, 7089, 7593, 8405, 49, 6121, 10804, 7089, 7593, 8405, 49, 6121, 11448, 7089, 7593, 8405, 50, 7089, 7593, 8405, 51, 6121, 1045, 6376, 7089, 7593, 8405, 51, 6121, 1045, 6490, 7089, 7593, 8405, 51, 6121, 3966, 7089, 7593, 8405, 51, 6121, 4530, 7089, 7593, 8405, 51, 6121, 4877, 6490, 7089, 7593, 8405, 51, 6121, 6378, 7089, 7593, 8405, 51, 6121, 6546, 7089, 7593, 8405, 51, 6121, 7653, 5878, 7089, 7593, 8405, 51, 6121, 8473, 7708, 7089, 7593, 8405, 51, 6121, 8758, 7089, 7593, 8405, 51, 6121, 9553, 4530, 7089, 7593, 8405, 51, 6121, 10802, 7089, 7593, 8405, 51, 6121, 11215, 4530, 7089, 7593, 8405, 51, 6121, 11448, 7089, 7593, 8405, 58, 7089, 7593, 8405, 66, 7089, 7593, 8405, 67, 6121, 6378, 7089, 7593, 8405, 67, 6121, 8432, 7089, 7593, 8405, 82, 7089, 7593, 8405, 92, 7089, 7593, 8405, 94, 7089, 7593, 8405, 95, 6121, 11649, 760, 7089, 7593, 8405, 98, 7089, 7593, 8405, 141, 9164, 7089, 7593, 8405, 156, 7089, 7593, 8405, 157, 6121, 6546, 7089, 7593, 8405, 157, 9164, 7089, 7593, 8405, 157, 9165, 6121, 3966, 7089, 7593, 8405, 186, 7089, 7593, 8405, 252, 7089, 7593, 8405, 282, 7089, 7593, 8405, 342, 7089, 7593, 8405, 353, 9164, 7089, 7593, 8405, 363, 9164, 7089, 7593, 8405, 406, 7089, 7593, 8405, 432, 7089, 7593, 8405, 440, 7089, 7593, 8405, 450, 7089, 7593, 8405, 505, 9164, 7089, 7593, 8405, 559, 9165, 6121, 3966, 7089, 7593, 8405, 563, 6121, 13018, 7089, 7593, 8405, 573, 9164, 7089, 7593, 8405, 578, 7089, 7593, 8405, 590, 7089, 7593, 8405, 594, 7089, 7593, 8405, 620, 7089, 7593, 8405, 912, 7089, 7593, 8405, 1058, 7089, 7593, 8405, 1110, 7089, 7593, 8405, 1124, 7089, 7593, 8405, 1125, 6121, 3966, 7089, 7593, 8405, 1125, 6121, 9553, 4530, 7089, 7593, 8405, 1125, 6121, 11215, 4530, 7089, 7593, 8405, 1130, 7089, 7593, 8405, 1138, 7089, 7593, 8405, 1139, 6121, 3966, 7089, 7593, 8405, 1139, 6121, 5878, 7089, 7593, 8405, 1139, 6121, 6546, 7089, 7593, 8405, 1139, 6121, 11215, 4530, 7089, 7593, 8405, 1139, 10488, 7089, 7593, 8405, 1678, 7089, 7593, 8405, 1822, 7089, 7593, 8405, 1952, 7089, 7593, 8405, 2108, 7089, 7593, 8405, 2216, 7089, 7593, 8405, 2452, 7089, 7593, 8405, 2453, 9642, 7089, 7593, 8405, 2725, 4389, 28, 7089, 7593, 8405, 2760, 7089, 7593, 8405, 4065, 9164, 7089, 7593, 8405, 4187, 9164, 7089, 7593, 8405, 4389, 14, 7089, 7593, 8405, 4404, 7089, 7593, 8405, 4405, 6121, 4530, 7089, 7593, 8405, 4614, 7089, 7593, 8405, 4615, 6121, 8758, 7089, 7593, 8405, 4854, 7089, 7593, 8405, 4895, 36, 7089, 7593, 8405, 4895, 37, 6121, 1045, 6376, 7089, 7593, 8405, 4895, 37, 6121, 4423, 8758, 7089, 7593, 8405, 4895, 37, 6121, 10001, 8758, 7089, 7593, 8405, 5385, 8, 7089, 7593, 8405, 5385, 9, 6121, 11215, 4530, 7089, 7593, 8405, 5385, 28, 7089, 7593, 8405, 5385, 29, 6121, 11215, 4530, 7089, 7593, 8405, 5527, 4536, 7089, 7593, 8405, 5901, 9164, 7089, 7593, 8405, 5965, 2540, 7089, 7593, 8405, 5965, 2778, 7089, 7593, 8405, 5965, 4200, 7089, 7593, 8405, 6078, 7089, 7593, 8405, 6220, 7089, 7593, 8405, 6406, 7089, 7593, 8405, 6407, 6121, 11215, 4530, 7089, 7593, 8405, 6674, 7089, 7593, 8405, 6824, 7089, 7593, 8405, 7494, 7089, 7593, 8405, 7495, 6121, 4530, 7089, 7593, 8405, 7495, 6121, 11215, 4530, 7089, 7593, 8405, 7519, 36, 7089, 7593, 8405, 7619, 10489, 1124, 7089, 7593, 8405, 7692, 7089, 7593, 8405, 7693, 6121, 8758, 7089, 7593, 8405, 7693, 6121, 8759, 9785, 10802, 7089, 7593, 8405, 7981, 28, 7089, 7593, 8405, 8005, 4389, 28, 7089, 7593, 8405, 8017, 22, 7089, 7593, 8405, 8065, 5385, 8, 7089, 7593, 8405, 8065, 7316, 7089, 7593, 8405, 8065, 10489, 5385, 8, 7089, 7593, 8405, 8387, 6121, 8758, 7089, 7593, 8405, 8679, 12, 7089, 7593, 8405, 8869, 0, 7089, 7593, 8405, 8869, 8, 7089, 7593, 8405, 8869, 12, 7089, 7593, 8405, 8869, 14, 7089, 7593, 8405, 8869, 15, 6121, 10190, 7089, 7593, 8405, 8869, 15, 6121, 10191, 721, 5878, 7089, 7593, 8405, 8869, 16, 7089, 7593, 8405, 8869, 20, 7089, 7593, 8405, 8869, 22, 7089, 7593, 8405, 8869, 24, 7089, 7593, 8405, 8869, 25, 6121, 4895, 1760, 7089, 7593, 8405, 8869, 34, 7089, 7593, 8405, 8869, 35, 6121, 4530, 7089, 7593, 8405, 8869, 35, 6121, 4895, 1760, 7089, 7593, 8405, 8869, 35, 6121, 5878, 7089, 7593, 8405, 8869, 38, 7089, 7593, 8405, 8869, 42, 7089, 7593, 8405, 8869, 44, 7089, 7593, 8405, 8869, 48, 7089, 7593, 8405, 8869, 66, 7089, 7593, 8405, 8869, 426, 7089, 7593, 8405, 8869, 5385, 8, 7089, 7593, 8405, 8869, 6406, 7089, 7593, 8405, 8869, 6674, 7089, 7593, 8405, 8869, 9365, 12, 7089, 7593, 8405, 9185, 16, 7089, 7593, 8405, 9185, 18, 7089, 7593, 8405, 9185, 19, 6121, 8758, 7089, 7593, 8405, 9185, 19, 6121, 8759, 721, 4530, 7089, 7593, 8405, 9313, 5836, 7089, 7593, 8405, 9365, 6, 7089, 7593, 8405, 9365, 10, 7089, 7593, 8405, 9365, 12, 7089, 7593, 8405, 9365, 34, 7089, 7593, 8405, 9365, 36, 7089, 7593, 8405, 9365, 38, 7089, 7593, 8405, 9808, 7089, 7593, 8405, 9809, 6121, 8758, 7089, 7593, 8405, 10489, 4, 7089, 7593, 8405, 10489, 5, 6121, 1044, 7089, 7593, 8405, 10489, 8, 7089, 7593, 8405, 10489, 35, 6121, 10190, 7089, 7593, 8405, 10489, 5385, 8, 7089, 7593, 8405, 10489, 5385, 9, 6121, 4530, 7089, 7593, 8405, 10489, 5385, 9, 6121, 11215, 4530, 7089, 7593, 8405, 10494, 7089, 7593, 8405, 10523, 28, 7089, 7593, 8405, 10523, 29, 6121, 8758, 7089, 7593, 8405, 10523, 40, 7089, 7593, 8405, 10523, 5385, 28, 7089, 7593, 8405, 10523, 8869, 24, 7089, 7593, 8405, 10523, 11941, 40, 7089, 7593, 8405, 10609, 2216, 7089, 7593, 8405, 10640, 7089, 7593, 8405, 10786, 7089, 7593, 8405, 10787, 6121, 6616, 7089, 7593, 8405, 11879, 50, 7089, 7593, 8405, 12507, 42, 7089, 7593, 8405, 12507, 344, 7089, 7593, 8405, 12935, 710, 7089, 7593, 8405, 12935, 3244, 7089, 7593, 9063, 8405, 17, 6121, 8758, 7089, 7593, 9063, 8405, 41, 6121, 8758, 7089, 7593, 10301, 200, 7089, 7593, 10301, 202, 7089, 7593, 10301, 204, 7089, 7593, 10301, 268, 7089, 7593, 10301, 426, 7089, 7593, 10301, 544, 7089, 7593, 10301, 1156, 7089, 7593, 10301, 1158, 7089, 7593, 10301, 4895, 37, 38, 7089, 8405, 662, 7089, 8405, 710, 7089, 8405, 2779, 6121, 8758, 7089, 8405, 6138, 7089, 8405, 7593, 9063, 0, 7089, 8405, 7593, 9063, 2, 7089, 8405, 7593, 9063, 4, 7089, 8405, 7593, 9063, 6, 7089, 8405, 7593, 9063, 8, 7089, 8405, 7593, 9063, 10, 7089, 8405, 7593, 9063, 12, 7089, 8405, 7593, 9063, 13, 6121, 4530, 7089, 8405, 7593, 9063, 14, 7089, 8405, 7593, 9063, 16, 7089, 8405, 7593, 9063, 18, 7089, 8405, 7593, 9063, 20, 7089, 8405, 7593, 9063, 22, 7089, 8405, 7593, 9063, 23, 6121, 8758, 7089, 8405, 7593, 9063, 24, 7089, 8405, 7593, 9063, 26, 7089, 8405, 7593, 9063, 28, 7089, 8405, 7593, 9063, 30, 7089, 8405, 7593, 9063, 34, 7089, 8405, 7593, 9063, 36, 7089, 8405, 7593, 9063, 38, 7089, 8405, 7593, 9063, 40, 7089, 8405, 7593, 9063, 42, 7089, 8405, 7593, 9063, 44, 7089, 8405, 7593, 9063, 48, 7089, 8405, 7593, 9063, 50, 7089, 8405, 7593, 9063, 66, 7089, 8405, 7593, 9063, 426, 7089, 8405, 7593, 9063, 450, 7089, 8405, 7593, 9063, 1130, 7089, 8405, 7593, 9063, 1138, 7089, 8405, 7593, 9063, 2452, 7089, 8405, 7593, 9063, 5385, 28, 7089, 8405, 7593, 9063, 7981, 2, 7089, 8405, 7593, 9063, 8869, 8, 7089, 8405, 7593, 9063, 8869, 34, 7089, 8405, 7593, 9063, 10267, 34, 7089, 8405, 7593, 9063, 10489, 26, 7089, 8405, 7593, 9063, 10489, 34, 7089, 8405, 8107, 6598, 7089, 8405, 8921, 11089, 9728, 7089, 8405, 9313, 5836, 7089, 8405, 9313, 5837, 6121, 8758, 7089, 8405, 9423, 6598, 7089, 8405, 9865, 6598, 7089, 8405, 9915, 11720, 7089, 8405, 9917, 6598, 7089, 8405, 9917, 11720, 7089, 8405, 10267, 9313, 5836, 7089, 8405, 10267, 9313, 5837, 6121, 8758, 7089, 8405, 10489, 1125, 4896, 7089, 8405, 10489, 9313, 5837, 6121, 8758, 7089, 8405, 11215, 6598, 7089, 8405, 11251, 4, 7089, 8405, 11723, 8921, 11008, 7089, 9063, 8405, 0, 7089, 9063, 8405, 1, 6121, 1045, 6376, 7089, 9063, 8405, 1, 6121, 1045, 6377, 721, 8432, 7089, 9063, 8405, 1, 6121, 1045, 6490, 7089, 9063, 8405, 1, 6121, 4531, 6376, 7089, 9063, 8405, 1, 6121, 5551, 6376, 7089, 9063, 8405, 1, 6121, 5551, 6377, 721, 6378, 7089, 9063, 8405, 1, 6121, 5551, 6490, 7089, 9063, 8405, 1, 6121, 6378, 7089, 9063, 8405, 1, 6121, 6516, 7089, 9063, 8405, 1, 6121, 6517, 721, 1045, 6490, 7089, 9063, 8405, 1, 6121, 6517, 721, 4531, 6376, 7089, 9063, 8405, 1, 6121, 6517, 721, 6378, 7089, 9063, 8405, 1, 6121, 6517, 721, 6874, 7089, 9063, 8405, 1, 6121, 6517, 721, 7708, 7089, 9063, 8405, 1, 6121, 6546, 7089, 9063, 8405, 1, 6121, 6874, 7089, 9063, 8405, 1, 6121, 7708, 7089, 9063, 8405, 1, 6121, 8153, 6874, 7089, 9063, 8405, 1, 6121, 8432, 7089, 9063, 8405, 1, 6121, 8534, 7089, 9063, 8405, 1, 6121, 8758, 7089, 9063, 8405, 1, 6121, 10267, 6516, 7089, 9063, 8405, 1, 6121, 10804, 7089, 9063, 8405, 1, 6121, 10805, 721, 8432, 7089, 9063, 8405, 1, 6121, 11448, 7089, 9063, 8405, 1, 6121, 11449, 721, 1045, 6490, 7089, 9063, 8405, 1, 6121, 11449, 721, 4531, 6376, 7089, 9063, 8405, 1, 6121, 11449, 721, 6378, 7089, 9063, 8405, 1, 6121, 11449, 721, 6874, 7089, 9063, 8405, 1, 6121, 11449, 721, 7708, 7089, 9063, 8405, 2, 7089, 9063, 8405, 3, 6121, 1045, 6376, 7089, 9063, 8405, 3, 6121, 1045, 6490, 7089, 9063, 8405, 3, 6121, 4530, 7089, 9063, 8405, 3, 6121, 4877, 6490, 7089, 9063, 8405, 3, 6121, 8758, 7089, 9063, 8405, 3, 6121, 8846, 7089, 9063, 8405, 4, 7089, 9063, 8405, 5, 6121, 1045, 6376, 7089, 9063, 8405, 5, 6121, 4530, 7089, 9063, 8405, 5, 6121, 6378, 7089, 9063, 8405, 5, 6121, 6546, 7089, 9063, 8405, 5, 6121, 8758, 7089, 9063, 8405, 5, 6121, 9072, 7089, 9063, 8405, 5, 6121, 9073, 721, 6378, 7089, 9063, 8405, 5, 6121, 11448, 7089, 9063, 8405, 6, 7089, 9063, 8405, 7, 6121, 1045, 6376, 7089, 9063, 8405, 7, 6121, 1045, 6490, 7089, 9063, 8405, 7, 6121, 4530, 7089, 9063, 8405, 7, 6121, 4877, 6490, 7089, 9063, 8405, 7, 6121, 6546, 7089, 9063, 8405, 7, 6121, 7593, 8405, 50, 7089, 9063, 8405, 7, 6121, 7593, 8405, 51, 6121, 6546, 7089, 9063, 8405, 7, 6121, 8758, 7089, 9063, 8405, 7, 6121, 8846, 7089, 9063, 8405, 7, 6121, 9072, 7089, 9063, 8405, 7, 6121, 11449, 6490, 7089, 9063, 8405, 8, 7089, 9063, 8405, 9, 6121, 1045, 6376, 7089, 9063, 8405, 9, 6121, 1045, 6490, 7089, 9063, 8405, 9, 6121, 4531, 6376, 7089, 9063, 8405, 9, 6121, 6378, 7089, 9063, 8405, 9, 6121, 6516, 7089, 9063, 8405, 9, 6121, 6546, 7089, 9063, 8405, 9, 6121, 6874, 7089, 9063, 8405, 9, 6121, 7708, 7089, 9063, 8405, 9, 6121, 7709, 6490, 7089, 9063, 8405, 9, 6121, 8153, 6874, 7089, 9063, 8405, 9, 6121, 8432, 7089, 9063, 8405, 9, 6121, 8433, 721, 6378, 7089, 9063, 8405, 9, 6121, 8433, 721, 6874, 7089, 9063, 8405, 9, 6121, 8534, 7089, 9063, 8405, 9, 6121, 8758, 7089, 9063, 8405, 9, 6121, 9072, 7089, 9063, 8405, 9, 6121, 9073, 721, 6516, 7089, 9063, 8405, 9, 6121, 10267, 6516, 7089, 9063, 8405, 9, 6121, 10804, 7089, 9063, 8405, 9, 6121, 11448, 7089, 9063, 8405, 9, 6121, 11449, 721, 1045, 6490, 7089, 9063, 8405, 9, 6121, 11449, 721, 4531, 6376, 7089, 9063, 8405, 9, 6121, 11449, 721, 6378, 7089, 9063, 8405, 9, 6121, 11449, 721, 6874, 7089, 9063, 8405, 9, 6121, 11449, 721, 7708, 7089, 9063, 8405, 9, 6121, 11449, 6490, 7089, 9063, 8405, 10, 7089, 9063, 8405, 11, 6121, 1045, 6376, 7089, 9063, 8405, 11, 6121, 4530, 7089, 9063, 8405, 12, 7089, 9063, 8405, 13, 6121, 1045, 6376, 7089, 9063, 8405, 13, 6121, 4530, 7089, 9063, 8405, 13, 6121, 6378, 7089, 9063, 8405, 13, 6121, 6516, 7089, 9063, 8405, 13, 6121, 6546, 7089, 9063, 8405, 13, 6121, 8432, 7089, 9063, 8405, 13, 6121, 8758, 7089, 9063, 8405, 13, 6121, 9072, 7089, 9063, 8405, 13, 6121, 11448, 7089, 9063, 8405, 14, 7089, 9063, 8405, 15, 6121, 1045, 6376, 7089, 9063, 8405, 15, 6121, 1045, 6490, 7089, 9063, 8405, 15, 6121, 6517, 6490, 7089, 9063, 8405, 15, 6121, 6546, 7089, 9063, 8405, 15, 6121, 8758, 7089, 9063, 8405, 15, 6121, 9072, 7089, 9063, 8405, 15, 6121, 10802, 7089, 9063, 8405, 15, 6121, 10804, 7089, 9063, 8405, 15, 6121, 11448, 7089, 9063, 8405, 16, 7089, 9063, 8405, 17, 6121, 1045, 6376, 7089, 9063, 8405, 17, 6121, 1045, 6490, 7089, 9063, 8405, 17, 6121, 4531, 6376, 7089, 9063, 8405, 17, 6121, 6378, 7089, 9063, 8405, 17, 6121, 6516, 7089, 9063, 8405, 17, 6121, 6546, 7089, 9063, 8405, 17, 6121, 6874, 7089, 9063, 8405, 17, 6121, 7708, 7089, 9063, 8405, 17, 6121, 7709, 6490, 7089, 9063, 8405, 17, 6121, 8153, 6874, 7089, 9063, 8405, 17, 6121, 8432, 7089, 9063, 8405, 17, 6121, 8534, 7089, 9063, 8405, 17, 6121, 8758, 7089, 9063, 8405, 17, 6121, 10267, 6516, 7089, 9063, 8405, 17, 6121, 10804, 7089, 9063, 8405, 17, 6121, 10805, 721, 6378, 7089, 9063, 8405, 17, 6121, 11448, 7089, 9063, 8405, 18, 7089, 9063, 8405, 19, 6121, 8758, 7089, 9063, 8405, 19, 6121, 11448, 7089, 9063, 8405, 20, 7089, 9063, 8405, 21, 6121, 1045, 6490, 7089, 9063, 8405, 21, 6121, 4530, 7089, 9063, 8405, 21, 6121, 4877, 6490, 7089, 9063, 8405, 21, 6121, 6378, 7089, 9063, 8405, 21, 6121, 6546, 7089, 9063, 8405, 21, 6121, 8758, 7089, 9063, 8405, 21, 6121, 8759, 721, 10001, 8758, 7089, 9063, 8405, 21, 6121, 9072, 7089, 9063, 8405, 21, 6121, 10001, 8758, 7089, 9063, 8405, 21, 6121, 10802, 7089, 9063, 8405, 22, 7089, 9063, 8405, 23, 6121, 760, 7089, 9063, 8405, 23, 6121, 1045, 6490, 7089, 9063, 8405, 23, 6121, 1045, 6491, 721, 8432, 7089, 9063, 8405, 23, 6121, 4423, 8758, 7089, 9063, 8405, 23, 6121, 4877, 6490, 7089, 9063, 8405, 23, 6121, 6378, 7089, 9063, 8405, 23, 6121, 6546, 7089, 9063, 8405, 23, 6121, 7593, 8405, 18, 7089, 9063, 8405, 23, 6121, 8153, 760, 7089, 9063, 8405, 23, 6121, 8473, 1044, 7089, 9063, 8405, 23, 6121, 8473, 7708, 7089, 9063, 8405, 23, 6121, 8758, 7089, 9063, 8405, 23, 6121, 9072, 7089, 9063, 8405, 23, 6121, 11449, 6490, 7089, 9063, 8405, 24, 7089, 9063, 8405, 25, 6121, 1045, 6376, 7089, 9063, 8405, 25, 6121, 1045, 6490, 7089, 9063, 8405, 25, 6121, 4530, 7089, 9063, 8405, 25, 6121, 6378, 7089, 9063, 8405, 26, 7089, 9063, 8405, 27, 6121, 1045, 6376, 7089, 9063, 8405, 27, 6121, 1045, 6490, 7089, 9063, 8405, 27, 6121, 4849, 4530, 7089, 9063, 8405, 27, 6121, 4877, 6490, 7089, 9063, 8405, 27, 6121, 4895, 7443, 1760, 7089, 9063, 8405, 27, 6121, 6378, 7089, 9063, 8405, 27, 6121, 6546, 7089, 9063, 8405, 27, 6121, 6874, 7089, 9063, 8405, 27, 6121, 7593, 8405, 18, 7089, 9063, 8405, 27, 6121, 7708, 7089, 9063, 8405, 27, 6121, 9072, 7089, 9063, 8405, 27, 6121, 11449, 6490, 7089, 9063, 8405, 28, 7089, 9063, 8405, 29, 6121, 1045, 6376, 7089, 9063, 8405, 29, 6121, 1045, 6377, 721, 8432, 7089, 9063, 8405, 29, 6121, 1045, 6490, 7089, 9063, 8405, 29, 6121, 4531, 6376, 7089, 9063, 8405, 29, 6121, 4536, 7089, 9063, 8405, 29, 6121, 4537, 721, 1045, 6490, 7089, 9063, 8405, 29, 6121, 4537, 721, 4531, 6376, 7089, 9063, 8405, 29, 6121, 4537, 721, 6378, 7089, 9063, 8405, 29, 6121, 4537, 721, 6874, 7089, 9063, 8405, 29, 6121, 4537, 721, 7708, 7089, 9063, 8405, 29, 6121, 4895, 8759, 9548, 7089, 9063, 8405, 29, 6121, 4896, 7089, 9063, 8405, 29, 6121, 6378, 7089, 9063, 8405, 29, 6121, 6516, 7089, 9063, 8405, 29, 6121, 6546, 7089, 9063, 8405, 29, 6121, 6874, 7089, 9063, 8405, 29, 6121, 7708, 7089, 9063, 8405, 29, 6121, 7709, 721, 6378, 7089, 9063, 8405, 29, 6121, 7709, 721, 8432, 7089, 9063, 8405, 29, 6121, 7709, 721, 10804, 7089, 9063, 8405, 29, 6121, 8153, 6378, 7089, 9063, 8405, 29, 6121, 8153, 6874, 7089, 9063, 8405, 29, 6121, 8432, 7089, 9063, 8405, 29, 6121, 8433, 721, 6378, 7089, 9063, 8405, 29, 6121, 8433, 721, 6874, 7089, 9063, 8405, 29, 6121, 8473, 7708, 7089, 9063, 8405, 29, 6121, 8534, 7089, 9063, 8405, 29, 6121, 8535, 721, 8432, 7089, 9063, 8405, 29, 6121, 8758, 7089, 9063, 8405, 29, 6121, 8759, 721, 6378, 7089, 9063, 8405, 29, 6121, 10267, 6516, 7089, 9063, 8405, 29, 6121, 10804, 7089, 9063, 8405, 29, 6121, 10805, 721, 8432, 7089, 9063, 8405, 29, 6121, 11448, 7089, 9063, 8405, 29, 6121, 11449, 721, 1045, 6490, 7089, 9063, 8405, 29, 6121, 11449, 721, 4531, 6376, 7089, 9063, 8405, 29, 6121, 11449, 721, 6378, 7089, 9063, 8405, 29, 6121, 11449, 721, 6874, 7089, 9063, 8405, 29, 6121, 11449, 721, 7708, 7089, 9063, 8405, 30, 7089, 9063, 8405, 31, 6121, 1045, 6376, 7089, 9063, 8405, 31, 6121, 4530, 7089, 9063, 8405, 31, 6121, 6378, 7089, 9063, 8405, 31, 6121, 8758, 7089, 9063, 8405, 31, 6121, 8759, 9785, 10802, 7089, 9063, 8405, 31, 6121, 10196, 7089, 9063, 8405, 31, 6121, 10533, 5878, 7089, 9063, 8405, 32, 7089, 9063, 8405, 33, 6121, 8759, 9785, 10802, 7089, 9063, 8405, 33, 6121, 10001, 8758, 7089, 9063, 8405, 34, 7089, 9063, 8405, 35, 6121, 1045, 6376, 7089, 9063, 8405, 35, 6121, 1045, 6490, 7089, 9063, 8405, 35, 6121, 1045, 6491, 721, 8432, 7089, 9063, 8405, 35, 6121, 4877, 6490, 7089, 9063, 8405, 35, 6121, 5878, 7089, 9063, 8405, 35, 6121, 6378, 7089, 9063, 8405, 35, 6121, 6546, 7089, 9063, 8405, 35, 6121, 8153, 6874, 7089, 9063, 8405, 35, 6121, 8758, 7089, 9063, 8405, 35, 6121, 9072, 7089, 9063, 8405, 35, 6121, 10267, 6516, 7089, 9063, 8405, 35, 9642, 7089, 9063, 8405, 36, 7089, 9063, 8405, 37, 6121, 1045, 6376, 7089, 9063, 8405, 37, 6121, 1045, 6490, 7089, 9063, 8405, 37, 6121, 1045, 6491, 721, 1045, 6376, 7089, 9063, 8405, 37, 6121, 6378, 7089, 9063, 8405, 37, 6121, 6379, 721, 1045, 6376, 7089, 9063, 8405, 37, 6121, 6546, 7089, 9063, 8405, 37, 6121, 6547, 721, 1045, 6376, 7089, 9063, 8405, 37, 6121, 6617, 6490, 7089, 9063, 8405, 37, 6121, 9072, 7089, 9063, 8405, 37, 6121, 11448, 7089, 9063, 8405, 38, 7089, 9063, 8405, 39, 6121, 1045, 6376, 7089, 9063, 8405, 39, 6121, 1045, 6490, 7089, 9063, 8405, 39, 6121, 4530, 7089, 9063, 8405, 39, 6121, 4877, 6490, 7089, 9063, 8405, 39, 6121, 6546, 7089, 9063, 8405, 39, 6121, 6617, 6490, 7089, 9063, 8405, 39, 6121, 8758, 7089, 9063, 8405, 39, 6121, 9072, 7089, 9063, 8405, 39, 6121, 10001, 8758, 7089, 9063, 8405, 39, 6121, 11215, 4530, 7089, 9063, 8405, 39, 6121, 11449, 6490, 7089, 9063, 8405, 40, 7089, 9063, 8405, 41, 760, 7089, 9063, 8405, 41, 6121, 1045, 6490, 7089, 9063, 8405, 41, 6121, 4531, 6376, 7089, 9063, 8405, 41, 6121, 4536, 7089, 9063, 8405, 41, 6121, 4537, 721, 1045, 6490, 7089, 9063, 8405, 41, 6121, 4537, 721, 4531, 6376, 7089, 9063, 8405, 41, 6121, 4537, 721, 6378, 7089, 9063, 8405, 41, 6121, 4537, 721, 6874, 7089, 9063, 8405, 41, 6121, 4537, 721, 7708, 7089, 9063, 8405, 41, 6121, 5551, 6376, 7089, 9063, 8405, 41, 6121, 6378, 7089, 9063, 8405, 41, 6121, 6516, 7089, 9063, 8405, 41, 6121, 6546, 7089, 9063, 8405, 41, 6121, 6874, 7089, 9063, 8405, 41, 6121, 7708, 7089, 9063, 8405, 41, 6121, 7709, 721, 6378, 7089, 9063, 8405, 41, 6121, 7709, 6490, 7089, 9063, 8405, 41, 6121, 8153, 6378, 7089, 9063, 8405, 41, 6121, 8153, 6874, 7089, 9063, 8405, 41, 6121, 8432, 7089, 9063, 8405, 41, 6121, 8433, 721, 10804, 7089, 9063, 8405, 41, 6121, 8534, 7089, 9063, 8405, 41, 6121, 10267, 6516, 7089, 9063, 8405, 41, 6121, 10804, 7089, 9063, 8405, 41, 6121, 10805, 721, 6378, 7089, 9063, 8405, 41, 6121, 10805, 721, 6546, 7089, 9063, 8405, 41, 6121, 10805, 721, 6874, 7089, 9063, 8405, 41, 6121, 10805, 721, 8432, 7089, 9063, 8405, 41, 6121, 10805, 6490, 7089, 9063, 8405, 41, 6121, 11448, 7089, 9063, 8405, 41, 6121, 11449, 6490, 7089, 9063, 8405, 42, 7089, 9063, 8405, 43, 6121, 1045, 6490, 7089, 9063, 8405, 43, 6121, 4530, 7089, 9063, 8405, 43, 6121, 7708, 7089, 9063, 8405, 43, 6121, 10001, 8758, 7089, 9063, 8405, 44, 7089, 9063, 8405, 45, 6121, 1045, 6376, 7089, 9063, 8405, 45, 6121, 1045, 6490, 7089, 9063, 8405, 45, 6121, 4530, 7089, 9063, 8405, 45, 6121, 6378, 7089, 9063, 8405, 45, 6121, 6874, 7089, 9063, 8405, 45, 6121, 10804, 7089, 9063, 8405, 45, 6121, 11448, 7089, 9063, 8405, 46, 7089, 9063, 8405, 47, 6121, 1045, 6376, 7089, 9063, 8405, 47, 6121, 10804, 7089, 9063, 8405, 48, 7089, 9063, 8405, 49, 6121, 1045, 6376, 7089, 9063, 8405, 49, 6121, 1045, 6490, 7089, 9063, 8405, 49, 6121, 4530, 7089, 9063, 8405, 49, 6121, 4531, 6376, 7089, 9063, 8405, 49, 6121, 4896, 7089, 9063, 8405, 49, 6121, 6378, 7089, 9063, 8405, 49, 6121, 6874, 7089, 9063, 8405, 49, 6121, 7708, 7089, 9063, 8405, 49, 6121, 8432, 7089, 9063, 8405, 49, 6121, 8758, 7089, 9063, 8405, 49, 6121, 10804, 7089, 9063, 8405, 49, 6121, 11448, 7089, 9063, 8405, 50, 7089, 9063, 8405, 51, 6121, 1045, 6376, 7089, 9063, 8405, 51, 6121, 1045, 6490, 7089, 9063, 8405, 51, 6121, 4530, 7089, 9063, 8405, 51, 6121, 4877, 6490, 7089, 9063, 8405, 51, 6121, 6378, 7089, 9063, 8405, 51, 6121, 6546, 7089, 9063, 8405, 51, 6121, 8758, 7089, 9063, 8405, 51, 6121, 10802, 7089, 9063, 8405, 51, 6121, 11448, 7089, 9063, 8405, 58, 7089, 9063, 8405, 66, 7089, 9063, 8405, 67, 6121, 6378, 7089, 9063, 8405, 67, 6121, 8432, 7089, 9063, 8405, 82, 7089, 9063, 8405, 92, 7089, 9063, 8405, 94, 7089, 9063, 8405, 95, 6121, 11649, 760, 7089, 9063, 8405, 98, 7089, 9063, 8405, 156, 7089, 9063, 8405, 157, 6121, 6546, 7089, 9063, 8405, 186, 7089, 9063, 8405, 282, 7089, 9063, 8405, 342, 7089, 9063, 8405, 406, 7089, 9063, 8405, 432, 7089, 9063, 8405, 440, 7089, 9063, 8405, 450, 7089, 9063, 8405, 578, 7089, 9063, 8405, 620, 7089, 9063, 8405, 912, 7089, 9063, 8405, 1110, 7089, 9063, 8405, 1124, 7089, 9063, 8405, 1130, 7089, 9063, 8405, 1138, 7089, 9063, 8405, 1139, 6121, 6546, 7089, 9063, 8405, 1139, 10488, 7089, 9063, 8405, 2453, 9642, 7089, 9063, 8405, 4389, 14, 7089, 9063, 8405, 4404, 7089, 9063, 8405, 4614, 7089, 9063, 8405, 5385, 8, 7089, 9063, 8405, 5385, 28, 7089, 9063, 8405, 5965, 2540, 7089, 9063, 8405, 5965, 2778, 7089, 9063, 8405, 5965, 4200, 7089, 9063, 8405, 6078, 7089, 9063, 8405, 6138, 7089, 9063, 8405, 6220, 7089, 9063, 8405, 6406, 7089, 9063, 8405, 6824, 7089, 9063, 8405, 6960, 7089, 9063, 8405, 7494, 7089, 9063, 8405, 7519, 36, 7089, 9063, 8405, 7593, 33, 6121, 4531, 5878, 7089, 9063, 8405, 7692, 7089, 9063, 8405, 7693, 6121, 8758, 7089, 9063, 8405, 7693, 6121, 8759, 9785, 10802, 7089, 9063, 8405, 8017, 22, 7089, 9063, 8405, 8869, 0, 7089, 9063, 8405, 8869, 22, 7089, 9063, 8405, 8869, 24, 7089, 9063, 8405, 8869, 42, 7089, 9063, 8405, 8869, 9365, 12, 7089, 9063, 8405, 8983, 6, 7089, 9063, 8405, 9313, 5836, 7089, 9063, 8405, 9365, 6, 7089, 9063, 8405, 9365, 10, 7089, 9063, 8405, 9365, 12, 7089, 9063, 8405, 9365, 34, 7089, 9063, 8405, 9365, 36, 7089, 9063, 8405, 9365, 38, 7089, 9063, 8405, 9808, 7089, 9063, 8405, 10489, 5, 6121, 1044, 7089, 9063, 8405, 10489, 8, 7089, 9063, 8405, 10494, 7089, 9063, 8405, 10640, 7089, 9063, 8405, 10786, 7089, 9063, 8405, 10787, 6121, 6616, 7089, 9063, 8405, 11879, 50, 7089, 9063, 8405, 12507, 42, 7089, 9063, 8405, 12507, 344, 7089, 9063, 8405, 12935, 710, 7089, 9063, 8405, 12935, 3244, 7089, 9063, 10301, 268, 7089, 9063, 10301, 426, 7089, 11261, 7593, 8405, 0, 7089, 11261, 7593, 8405, 8, 7089, 11261, 7593, 8405, 16, 7089, 11261, 7593, 8405, 18, 7089, 11261, 7593, 8405, 28, 7089, 11261, 7593, 8405, 34, 7089, 11261, 7593, 8405, 40, 7089, 11261, 7593, 8405, 42, 7089, 11261, 7593, 8405, 46, 7089, 11261, 7593, 8405, 7494, 7089, 11619, 8405, 17, 7112, 7089, 11619, 8405, 9007, 24, 7089, 11619, 8405, 10267, 24, 7089, 11619, 8405, 10489, 10, 7089, 11619, 8405, 10489, 30, 7098, 7101, 4849, 10637, 7533, 9051, 10380, 7101, 7443, 10637, 7533, 9051, 10380, 7101, 7512, 7101, 10677, 760, 7103, 5759, 1802, 7103, 5759, 5620, 7103, 5759, 11076, 7103, 5759, 11130, 7103, 6689, 2170, 7103, 6689, 2540, 7103, 6689, 2778, 7103, 6689, 4200, 7103, 6689, 4214, 7103, 6689, 5190, 7103, 6689, 6260, 7103, 6689, 6722, 7103, 6689, 7508, 7103, 6689, 7694, 7103, 7593, 8405, 306, 7103, 7593, 8405, 332, 7103, 7593, 8405, 364, 7103, 7593, 8405, 392, 7103, 7593, 8405, 462, 7103, 7593, 8405, 510, 7103, 7593, 8405, 556, 7103, 7593, 8405, 2030, 7103, 7593, 8405, 9870, 7103, 7803, 5759, 0, 7103, 7803, 5759, 8, 7103, 7803, 5759, 16, 7103, 7803, 5759, 28, 7103, 7803, 5759, 40, 7103, 7803, 5759, 72, 7103, 7803, 5759, 92, 7103, 7803, 5759, 162, 7103, 7803, 5759, 440, 7103, 8405, 100, 7103, 8405, 116, 7103, 8405, 138, 7103, 8405, 216, 7103, 8405, 236, 7103, 8405, 292, 7103, 8405, 306, 7103, 8405, 332, 7103, 8405, 364, 7103, 8405, 392, 7103, 8405, 462, 7103, 8405, 510, 7103, 8405, 524, 7103, 8405, 556, 7103, 8405, 622, 7103, 8405, 652, 7103, 8405, 792, 7103, 8405, 884, 7103, 8405, 996, 7103, 8405, 1260, 7103, 8405, 1512, 7103, 8405, 1612, 7103, 8405, 2030, 7103, 8405, 2212, 7103, 8405, 2516, 7103, 8405, 2566, 7103, 8405, 2678, 7103, 8405, 3028, 7103, 10469, 4926, 7103, 11257, 8405, 510, 7103, 11257, 8405, 622, 7103, 11257, 8405, 652, 7103, 12017, 4926, 7103, 13033, 8404, 7121, 2171, 8159, 6510, 7121, 2171, 9615, 6510, 7121, 4201, 9259, 6510, 7121, 4389, 6510, 7121, 4389, 8056, 7121, 4389, 9367, 7821, 8056, 7121, 4849, 10465, 9947, 730, 7121, 4849, 10642, 7121, 4849, 12857, 12901, 6434, 7121, 6507, 10502, 7121, 7443, 8077, 6121, 1044, 7121, 7443, 8570, 7121, 7443, 10465, 9947, 730, 7121, 7443, 10513, 7821, 8744, 7121, 7443, 10642, 7121, 7443, 12857, 10763, 6434, 7121, 7443, 12933, 7821, 8744, 7121, 7509, 9259, 6510, 7121, 7695, 9259, 6510, 7121, 7695, 10467, 6510, 7165, 5758, 7173, 5758, 7173, 5759, 275, 10642, 7173, 5759, 6121, 1045, 6490, 7173, 5759, 6121, 6617, 6376, 7173, 5759, 6121, 8649, 4112, 7173, 5759, 6121, 9279, 4112, 7173, 7708, 7199, 4205, 5758, 7199, 7519, 5758, 7199, 9491, 5758, 7201, 7711, 10374, 7201, 7768, 7201, 7769, 10375, 6121, 1044, 7201, 7769, 10375, 6121, 5444, 7201, 7821, 10677, 760, 7201, 8745, 7769, 10374, 7201, 8745, 12493, 10374, 7201, 9095, 1045, 10374, 7201, 9095, 5445, 10374, 7201, 9095, 7711, 10374, 7201, 9437, 444, 7201, 9437, 720, 7201, 9610, 7201, 10780, 7201, 11262, 7201, 12492, 7202, 7209, 5758, 7271, 4153, 721, 7607, 6113, 6434, 7271, 4153, 6434, 7271, 4153, 6435, 721, 7607, 4153, 6434, 7271, 4153, 6435, 6121, 4530, 7271, 4153, 6435, 9967, 7271, 6113, 6434, 7271, 4153, 6435, 9967, 7607, 4153, 6434, 7271, 4153, 6505, 6434, 7271, 4153, 7821, 6434, 7271, 4153, 8153, 6434, 7271, 6113, 721, 7607, 4153, 6434, 7271, 6113, 6434, 7271, 6113, 6435, 569, 4895, 760, 7271, 6113, 6435, 569, 8076, 7271, 6113, 6435, 721, 7271, 4153, 6434, 7271, 6113, 6435, 6121, 4530, 7271, 6113, 6435, 9967, 7271, 4153, 6434, 7271, 6113, 6505, 6434, 7271, 6113, 7821, 6434, 7271, 6113, 8153, 6434, 7309, 7609, 4926, 7309, 8405, 444, 7309, 8405, 602, 7309, 8405, 2174, 7309, 8405, 3236, 7309, 8405, 3952, 7309, 8405, 3982, 7309, 8405, 4348, 7309, 8405, 4600, 7309, 8405, 4900, 7309, 8405, 5018, 7309, 8405, 5192, 7309, 8405, 5604, 7309, 8405, 5628, 7309, 8405, 6044, 7309, 8405, 6488, 7309, 8405, 6558, 7309, 8405, 6774, 7309, 8405, 7356, 7309, 8405, 7712, 7309, 8405, 8752, 7309, 8405, 9246, 7309, 8405, 9248, 7309, 8405, 9368, 7309, 8405, 9504, 7309, 8405, 10662, 7309, 8405, 12008, 7309, 9283, 4926, 7309, 10489, 9283, 4926, 7321, 73, 8399, 4926, 7321, 93, 8399, 4926, 7321, 5759, 7282, 7321, 5759, 8916, 7321, 5759, 9824, 7321, 5759, 9870, 7321, 5759, 9904, 7321, 5759, 11900, 7321, 6689, 2170, 7321, 6689, 2540, 7321, 6689, 2778, 7321, 6689, 4200, 7321, 6689, 4214, 7321, 6689, 5190, 7321, 6689, 6260, 7321, 6689, 6722, 7321, 6689, 7508, 7321, 6689, 7694, 7321, 7803, 5759, 8, 7321, 7803, 5759, 16, 7321, 7803, 5759, 28, 7321, 7803, 5759, 40, 7321, 7803, 5759, 58, 7321, 7803, 5759, 72, 7321, 7803, 5759, 92, 7321, 7803, 5759, 266, 7321, 7803, 5759, 606, 7321, 7803, 5759, 9827, 22, 7321, 7803, 5759, 9827, 34, 7321, 7803, 5759, 9827, 344, 7321, 7803, 5759, 9827, 518, 7321, 8322, 7321, 8405, 0, 7321, 8405, 8, 7321, 8405, 16, 7321, 8405, 28, 7321, 8405, 40, 7321, 8405, 58, 7321, 8405, 72, 7321, 8405, 92, 7321, 8405, 100, 7321, 8405, 116, 7321, 8405, 138, 7321, 8405, 216, 7321, 8405, 236, 7321, 8405, 266, 7321, 8405, 292, 7321, 8405, 306, 7321, 8405, 332, 7321, 8405, 364, 7321, 8405, 392, 7321, 8405, 462, 7321, 8405, 510, 7321, 8405, 524, 7321, 8405, 556, 7321, 8405, 606, 7321, 8405, 610, 7321, 8405, 622, 7321, 8405, 652, 7321, 8405, 792, 7321, 8405, 884, 7321, 8405, 974, 7321, 8405, 996, 7321, 8405, 1260, 7321, 8405, 1512, 7321, 8405, 1612, 7321, 8405, 1796, 7321, 8405, 2030, 7321, 8405, 2076, 7321, 8405, 2126, 7321, 8405, 2212, 7321, 8405, 2410, 7321, 8405, 2438, 7321, 8405, 2516, 7321, 8405, 2566, 7321, 8405, 2678, 7321, 8405, 2746, 7321, 8405, 3110, 7321, 8405, 4016, 7321, 8405, 5994, 7321, 8405, 9827, 22, 7321, 8405, 9827, 34, 7321, 8405, 9827, 344, 7321, 8405, 9827, 518, 7325, 5758, 7349, 8774, 7377, 429, 10263, 5758, 7380, 7387, 5758, 7390, 7393, 8677, 8774, 7424, 7443, 731, 12473, 9050, 7443, 1809, 11715, 9050, 7443, 2171, 8159, 6510, 7443, 4197, 5878, 7443, 4389, 6505, 8056, 7443, 4389, 6510, 7443, 5876, 7443, 6408, 7443, 6409, 6121, 730, 7443, 6409, 6121, 10959, 8963, 6434, 7443, 6409, 8151, 12877, 8450, 7443, 6409, 9050, 7443, 6409, 9051, 6121, 1044, 7443, 6409, 9817, 6121, 8744, 7443, 6409, 12877, 8450, 7443, 6435, 6121, 7593, 8056, 7443, 6435, 6121, 9095, 5444, 7443, 6505, 10637, 7533, 9050, 7443, 6505, 11677, 9050, 7443, 6627, 9050, 7443, 6627, 9051, 7121, 4530, 7443, 6627, 9051, 7773, 4530, 7443, 6627, 9051, 8473, 7370, 7443, 6792, 7443, 7327, 4676, 7443, 7821, 6627, 9050, 7443, 7821, 8077, 9050, 7443, 7821, 8745, 9050, 7443, 7821, 10637, 7533, 9050, 7443, 7821, 11677, 9050, 7443, 7821, 12114, 7443, 8077, 9050, 7443, 8151, 12877, 9050, 7443, 8153, 6409, 9050, 7443, 8153, 6435, 6121, 9645, 4398, 7443, 8153, 8933, 6778, 7443, 8153, 11195, 4926, 7443, 8153, 12114, 7443, 8521, 8191, 11793, 9610, 7443, 8631, 10371, 9050, 7443, 8717, 11195, 4926, 7443, 8745, 9050, 7443, 8745, 9051, 6121, 5935, 275, 2725, 8076, 7443, 8745, 9051, 6121, 5935, 275, 8005, 8076, 7443, 8745, 9051, 6121, 7412, 7443, 8745, 9051, 6121, 10666, 7443, 8745, 9051, 7121, 8076, 7443, 8745, 9051, 7773, 8076, 7443, 8745, 9051, 10982, 7443, 8933, 6778, 7443, 9074, 7443, 10493, 753, 10794, 7443, 10523, 41, 9050, 7443, 10637, 7533, 9050, 7443, 10642, 7443, 10643, 6377, 4849, 10642, 7443, 10677, 761, 6121, 7412, 7443, 10677, 827, 4876, 7443, 11793, 9610, 7443, 12114, 7443, 12115, 7121, 4530, 7443, 12115, 7773, 4530, 7443, 12115, 10982, 7443, 12877, 9050, 7443, 13029, 9050, 7453, 89, 5758, 7453, 7765, 5758, 7453, 9167, 9679, 5758, 7453, 9513, 2170, 7453, 9513, 2171, 9344, 7453, 9513, 2171, 9345, 10624, 7453, 9513, 2171, 10624, 7453, 9513, 2171, 10625, 5, 6, 7453, 9513, 2540, 7453, 9513, 2541, 4839, 4212, 7453, 9513, 2670, 7453, 9513, 2671, 10624, 7453, 9513, 2778, 7453, 9513, 4200, 7453, 9513, 4201, 9344, 7453, 9513, 4201, 10624, 7453, 9513, 4214, 7453, 9513, 5190, 7453, 9513, 6722, 7453, 9513, 6784, 7453, 9513, 6785, 6715, 4212, 7453, 9513, 6785, 10624, 7453, 9513, 7508, 7453, 9513, 7694, 7453, 9513, 8162, 7453, 9513, 8874, 7453, 9513, 10489, 2171, 9344, 7453, 9675, 5758, 7453, 9679, 5758, 7453, 9691, 5758, 7453, 9995, 5758, 7453, 10511, 5758, 7453, 10757, 5758, 7453, 10961, 5758, 7453, 11193, 5758, 7453, 11797, 5758, 7467, 6623, 12132, 7467, 7935, 8774, 7467, 8405, 4, 7467, 8405, 6, 7467, 8405, 8, 7467, 8405, 12, 7467, 8405, 28, 7467, 8405, 32, 7467, 8405, 42, 7467, 8405, 44, 7467, 8405, 46, 7467, 8405, 48, 7467, 8405, 50, 7467, 8405, 63, 0, 7467, 8405, 426, 7467, 8405, 438, 7467, 8405, 447, 28, 7467, 8405, 662, 7467, 8405, 878, 7467, 8405, 1090, 7467, 8405, 1110, 7467, 8405, 1130, 7467, 8405, 1220, 7467, 8405, 1244, 7467, 8405, 1486, 7467, 8405, 1494, 7467, 8405, 3230, 7467, 8405, 3840, 7467, 8405, 4185, 4189, 199, 10, 7467, 8405, 4265, 4381, 12, 7467, 8405, 4617, 283, 1501, 16, 7467, 8405, 4625, 1114, 7467, 8405, 4731, 20, 7467, 8405, 5828, 7467, 8405, 6059, 603, 40, 7467, 8405, 6401, 6738, 7467, 8405, 6415, 0, 7467, 8405, 6554, 7467, 8405, 6635, 3979, 6, 7467, 8405, 6721, 167, 8, 7467, 8405, 6891, 14, 7467, 8405, 6997, 18, 7467, 8405, 7028, 7467, 8405, 7419, 2383, 5533, 34, 7467, 8405, 7567, 13213, 36, 7467, 8405, 7719, 2699, 2789, 38, 7467, 8405, 7835, 6139, 44, 7467, 8405, 8283, 14, 7467, 8405, 8312, 7467, 8405, 8391, 4829, 4891, 22, 7467, 8405, 8441, 1861, 24, 7467, 8405, 8501, 2129, 5057, 26, 7467, 8405, 8540, 7467, 8405, 8579, 8575, 30, 7467, 8405, 8727, 36, 7467, 8405, 9132, 7467, 8405, 9543, 6759, 28, 7467, 8405, 9911, 6495, 9047, 2, 7467, 8405, 10132, 7467, 8405, 10134, 7467, 8405, 10136, 7467, 8405, 10627, 7699, 7692, 7467, 8405, 12482, 7467, 8405, 13013, 0, 7467, 8405, 13014, 7467, 8405, 13057, 66, 7467, 8405, 13058, 7467, 8405, 13073, 28, 7467, 8405, 13075, 36, 7467, 8405, 13077, 38, 7467, 8405, 13211, 28, 7467, 8405, 13227, 24, 7467, 8405, 13229, 26, 7467, 8405, 13339, 24, 7467, 8405, 13377, 14, 7467, 8405, 13391, 14, 7467, 8405, 13399, 2, 7467, 8717, 12132, 7467, 9909, 8774, 7467, 10349, 12132, 7467, 10657, 8774, 7469, 5758, 7551, 601, 5876, 7551, 601, 5877, 6121, 10666, 7551, 601, 5877, 6377, 7551, 4117, 5876, 7551, 4117, 5876, 7551, 4117, 5877, 6121, 9546, 7551, 4849, 5876, 7551, 11765, 6435, 6377, 11097, 6434, 7579, 721, 11466, 7588, 7593, 175, 3992, 7593, 2857, 6121, 10666, 7593, 4223, 5836, 7593, 4849, 6627, 9050, 7593, 4849, 10637, 7533, 9050, 7593, 4849, 12114, 7593, 5445, 5758, 7593, 6610, 7593, 6616, 7593, 7443, 6627, 9050, 7593, 7443, 10637, 7533, 9050, 7593, 7443, 12114, 7593, 7453, 9513, 2170, 7593, 7453, 9513, 2171, 9344, 7593, 7453, 9513, 2171, 10624, 7593, 7453, 9513, 2540, 7593, 7453, 9513, 2670, 7593, 7453, 9513, 2778, 7593, 7453, 9513, 4200, 7593, 7453, 9513, 4201, 9344, 7593, 7453, 9513, 4214, 7593, 7453, 9513, 5190, 7593, 7453, 9513, 6722, 7593, 7453, 9513, 6784, 7593, 7453, 9513, 7508, 7593, 7453, 9513, 7694, 7593, 7453, 9513, 8162, 7593, 7453, 9513, 8874, 7593, 7708, 7593, 8129, 5758, 7593, 8167, 5758, 7593, 8525, 5758, 7593, 9263, 428, 7593, 9263, 429, 6121, 9546, 7593, 9263, 429, 6121, 10677, 761, 91, 1109, 429, 11649, 8758, 7593, 9581, 5758, 7593, 9633, 9718, 7593, 9898, 7593, 9959, 89, 8466, 7593, 9959, 6121, 9546, 7593, 9959, 6121, 10677, 761, 91, 1109, 429, 11649, 8758, 7593, 10469, 4926, 7593, 10708, 7593, 11099, 5758, 7593, 11224, 7593, 11451, 90, 7593, 12017, 4926, 7593, 12043, 6616, 7593, 12473, 5758, 7593, 12478, 7595, 9610, 7598, 7605, 11201, 10782, 7607, 4153, 6434, 7607, 4153, 6435, 569, 8076, 7607, 4153, 6435, 721, 7607, 6113, 6434, 7607, 4153, 6435, 6121, 4530, 7607, 4153, 6435, 9967, 7271, 4153, 6434, 7607, 4153, 6505, 6434, 7607, 4153, 7821, 6434, 7607, 4153, 8153, 6434, 7607, 6113, 6434, 7607, 6113, 6435, 721, 7271, 6113, 6434, 7607, 6113, 6435, 6121, 4530, 7607, 6113, 6505, 6434, 7607, 6113, 7821, 6434, 7607, 6113, 8153, 6434, 7608, 7619, 6505, 11765, 6434, 7627, 429, 8298, 7627, 429, 11886, 7659, 3992, 7665, 89, 6377, 5758, 7665, 93, 8399, 4926, 7665, 436, 7665, 973, 5758, 7665, 5759, 8916, 7665, 5759, 9824, 7665, 5759, 9870, 7665, 6197, 5758, 7665, 6673, 5758, 7665, 6689, 2170, 7665, 6689, 2540, 7665, 6689, 2778, 7665, 6689, 4200, 7665, 6689, 4214, 7665, 6689, 5190, 7665, 6689, 6260, 7665, 6689, 6722, 7665, 6689, 7508, 7665, 6689, 7694, 7665, 7183, 5758, 7665, 7469, 5758, 7665, 7803, 5759, 8, 7665, 7803, 5759, 16, 7665, 7803, 5759, 28, 7665, 7803, 5759, 40, 7665, 7803, 5759, 58, 7665, 7803, 5759, 72, 7665, 7803, 5759, 92, 7665, 7803, 5759, 162, 7665, 7803, 5759, 266, 7665, 7803, 5759, 440, 7665, 7803, 5759, 606, 7665, 8081, 5758, 7665, 8405, 0, 7665, 8405, 8, 7665, 8405, 16, 7665, 8405, 28, 7665, 8405, 40, 7665, 8405, 58, 7665, 8405, 72, 7665, 8405, 92, 7665, 8405, 116, 7665, 8405, 162, 7665, 8405, 236, 7665, 8405, 266, 7665, 8405, 292, 7665, 8405, 306, 7665, 8405, 332, 7665, 8405, 364, 7665, 8405, 392, 7665, 8405, 440, 7665, 8405, 462, 7665, 8405, 510, 7665, 8405, 524, 7665, 8405, 556, 7665, 8405, 606, 7665, 8405, 610, 7665, 8405, 652, 7665, 8405, 1796, 7665, 8405, 2030, 7665, 8405, 2076, 7665, 8405, 2126, 7665, 8405, 2438, 7665, 8405, 2516, 7665, 8405, 2566, 7665, 8405, 2746, 7665, 8405, 4888, 7665, 8405, 5234, 7665, 8525, 2171, 9344, 7665, 8525, 2171, 10624, 7665, 8525, 2670, 7665, 8525, 5758, 7681, 4103, 2091, 6764, 7681, 8174, 7695, 1045, 12132, 7695, 11097, 7944, 7695, 11765, 7944, 7695, 11913, 8167, 7570, 7695, 11943, 6408, 7707, 11861, 11242, 7708, 7709, 6121, 1045, 6376, 7709, 6121, 1045, 6490, 7709, 6121, 5551, 6376, 7709, 10374, 7709, 10375, 6121, 1045, 6376, 7709, 10375, 6121, 8649, 4112, 7709, 10375, 6377, 11097, 6434, 7709, 10375, 6377, 11765, 6434, 7711, 6121, 4849, 4389, 6504, 7711, 6121, 7443, 4389, 6504, 7729, 8654, 7733, 4927, 5758, 7768, 7769, 6121, 7173, 5758, 7769, 6121, 9437, 444, 7769, 6121, 9546, 7769, 6377, 761, 6377, 12492, 7769, 6377, 12492, 7769, 7991, 721, 8329, 6121, 7768, 7773, 2171, 8159, 6510, 7773, 4389, 6510, 7773, 4389, 8056, 7773, 4389, 9367, 7821, 8056, 7773, 4849, 445, 7121, 7443, 6627, 9051, 9664, 7773, 4849, 8077, 6121, 1044, 7773, 4849, 10465, 9947, 730, 7773, 4849, 10642, 7773, 6507, 10502, 7773, 7443, 445, 7121, 4849, 6627, 9051, 9664, 7773, 7443, 8570, 7773, 7443, 10465, 9947, 730, 7773, 7443, 10513, 7821, 8744, 7773, 7443, 10642, 7773, 7443, 12933, 7821, 8744, 7794, 7798, 7810, 7819, 429, 8112, 7821, 601, 10441, 6992, 7821, 2048, 7821, 2587, 6121, 5528, 7821, 3949, 5842, 7821, 4117, 10441, 6992, 7821, 4202, 7821, 4215, 9601, 5830, 7821, 4849, 10441, 6992, 7821, 5830, 7821, 6081, 7593, 8744, 7821, 6571, 4760, 7821, 6571, 5404, 7821, 6571, 5564, 7821, 6571, 7410, 7821, 6571, 7996, 7821, 6571, 8368, 7821, 6907, 5842, 7821, 7085, 8744, 7821, 7443, 10441, 6992, 7821, 7547, 7370, 7821, 7593, 5830, 7821, 7593, 8744, 7821, 7593, 9438, 7821, 7611, 5842, 7821, 8022, 7821, 8056, 7821, 8057, 6121, 1045, 7442, 7821, 8057, 6121, 2779, 4112, 7821, 8057, 6121, 4117, 6434, 7821, 8057, 6121, 7121, 4849, 10464, 7821, 8057, 6121, 7121, 7443, 10464, 7821, 8057, 6121, 7773, 4849, 10464, 7821, 8057, 6121, 7773, 7443, 10464, 7821, 8463, 5830, 7821, 8463, 7593, 8744, 7821, 8463, 8744, 7821, 8463, 9158, 7821, 8463, 9438, 7821, 8691, 1044, 7821, 8744, 7821, 8745, 6121, 7121, 4849, 10464, 7821, 8745, 6121, 7121, 7443, 10464, 7821, 8745, 6121, 7773, 4849, 10464, 7821, 8745, 6121, 7773, 7443, 10464, 7821, 8745, 6121, 8037, 10677, 4876, 7821, 8745, 6121, 9645, 9118, 7821, 8745, 6121, 10677, 10739, 4876, 7821, 8745, 6121, 11097, 5934, 7821, 8745, 6121, 11765, 5934, 7821, 8745, 11461, 6505, 7593, 8744, 7821, 9158, 7821, 9159, 5842, 7821, 9159, 6121, 9079, 1044, 7821, 9159, 11461, 6505, 7593, 9158, 7821, 9338, 7821, 9711, 4178, 7821, 10143, 1860, 7821, 10143, 4760, 7821, 10194, 7821, 10209, 4178, 7821, 10420, 7821, 10502, 7821, 10643, 11461, 7593, 7821, 10642, 7821, 10677, 760, 7821, 10677, 9264, 7821, 10677, 11202, 7821, 11036, 7821, 11202, 7821, 11354, 7821, 11364, 7821, 11649, 9264, 7821, 12383, 7593, 10642, 7821, 12383, 10642, 7821, 12383, 10643, 6121, 1044, 7821, 12917, 9158, 7821, 12917, 9159, 6121, 11097, 5934, 7821, 12917, 9159, 6121, 11765, 5934, 7821, 12931, 7593, 10642, 7821, 12931, 10642, 7821, 12967, 7593, 10642, 7821, 12967, 9602, 7821, 12967, 10642, 7821, 12984, 7821, 13067, 7593, 10642, 7821, 13067, 9602, 7821, 13067, 10420, 7821, 13067, 10642, 7911, 1049, 9467, 6791, 9748, 7911, 6129, 11229, 1044, 7911, 6129, 11229, 4876, 7911, 6569, 4926, 7911, 8423, 9467, 6791, 9748, 7911, 8525, 2170, 7911, 8525, 2171, 9344, 7911, 8525, 2171, 10624, 7911, 8525, 2540, 7911, 8525, 2541, 9344, 7911, 8525, 2541, 10624, 7911, 8525, 2670, 7911, 8525, 2671, 10624, 7911, 8525, 2778, 7911, 8525, 2779, 9344, 7911, 8525, 2779, 10624, 7911, 8525, 4200, 7911, 8525, 4201, 9344, 7911, 8525, 4201, 10624, 7911, 8525, 4214, 7911, 8525, 4215, 9344, 7911, 8525, 4215, 10624, 7911, 8525, 5190, 7911, 8525, 5191, 9344, 7911, 8525, 5191, 10624, 7911, 8525, 6722, 7911, 8525, 6723, 9344, 7911, 8525, 6723, 10624, 7911, 8525, 6784, 7911, 8525, 6785, 10624, 7911, 8525, 6804, 7911, 8525, 6805, 10624, 7911, 8525, 7508, 7911, 8525, 7509, 9344, 7911, 8525, 7509, 10624, 7911, 8525, 7576, 7911, 8525, 7577, 10624, 7911, 8525, 7694, 7911, 8525, 7695, 9344, 7911, 8525, 7695, 10624, 7911, 8525, 8160, 7911, 8525, 8161, 10624, 7911, 8525, 8514, 7911, 8525, 8515, 10624, 7911, 8525, 8820, 7911, 8525, 8821, 10624, 7911, 8525, 8876, 7911, 8525, 8877, 10624, 7911, 8525, 9672, 7911, 8525, 9673, 10624, 7911, 8931, 3717, 6052, 7911, 8931, 6791, 9748, 7911, 8931, 7687, 9748, 7911, 8931, 8233, 9748, 7911, 8931, 8681, 9748, 7911, 9467, 7687, 9748, 7911, 9467, 8681, 9748, 7919, 6741, 445, 6741, 568, 7919, 6741, 568, 7919, 6741, 569, 6121, 11449, 7908, 7922, 7931, 1109, 429, 3288, 7931, 2396, 7931, 3997, 11228, 7931, 4201, 9601, 5830, 7931, 4223, 5836, 7931, 4927, 5241, 8260, 7931, 5759, 5521, 8995, 3262, 7931, 5759, 7176, 7931, 5759, 7476, 7931, 5759, 7486, 7931, 5759, 7917, 9894, 7931, 5759, 8715, 10708, 7931, 5759, 8715, 12523, 1894, 7931, 5759, 11350, 7931, 5759, 12137, 7916, 7931, 5759, 12159, 7917, 11396, 7931, 5879, 10204, 7931, 6616, 7931, 6644, 7931, 6645, 8461, 4212, 7931, 6645, 10275, 4212, 7931, 6731, 8037, 1809, 5836, 7931, 6731, 8037, 4423, 5836, 7931, 6772, 7931, 6773, 6121, 2779, 4112, 7931, 6773, 8461, 4212, 7931, 6773, 10275, 4212, 7931, 6895, 6376, 7931, 6895, 6490, 7931, 7026, 7931, 7027, 8461, 4212, 7931, 7027, 10275, 4212, 7931, 7377, 429, 8658, 7931, 7593, 1809, 4942, 7931, 7593, 1809, 5648, 7931, 7593, 2918, 7931, 7593, 3052, 7931, 7593, 4423, 1739, 3244, 7931, 7593, 4423, 2640, 7931, 7593, 4423, 3052, 7931, 7593, 4423, 4630, 7931, 7593, 4423, 4943, 9363, 4212, 7931, 7593, 4423, 4943, 10275, 4212, 7931, 7593, 4423, 5240, 7931, 7593, 4423, 5648, 7931, 7593, 4423, 6254, 7931, 7593, 4423, 7124, 7931, 7593, 4423, 7695, 4112, 7931, 7593, 4423, 9185, 4399, 429, 4736, 7931, 7593, 4423, 9645, 6260, 7931, 7593, 4423, 9807, 12139, 6260, 7931, 7593, 4423, 10301, 2285, 6121, 1739, 6121, 3245, 9448, 7931, 7593, 4423, 10301, 2485, 6121, 1739, 6121, 3245, 9448, 7931, 7593, 4423, 10301, 3245, 6121, 1739, 6121, 3052, 7931, 7593, 6644, 7931, 7593, 6772, 7931, 7593, 7026, 7931, 7633, 429, 2451, 173, 4424, 7931, 7650, 7931, 7651, 8461, 4212, 7931, 7651, 10275, 4212, 7931, 7803, 5759, 1045, 6490, 7931, 7803, 5759, 7593, 43, 6376, 7931, 7803, 5759, 10267, 7593, 43, 6376, 7931, 8405, 8, 7931, 8405, 9, 6789, 4212, 7931, 8405, 9, 8461, 4212, 7931, 8405, 9, 9363, 4212, 7931, 8405, 9, 10275, 4212, 7931, 8405, 40, 7931, 8405, 41, 6121, 6895, 6376, 7931, 8405, 41, 6121, 6895, 6377, 10275, 4212, 7931, 8405, 41, 6789, 4212, 7931, 8405, 41, 10275, 4212, 7931, 8405, 66, 7931, 8405, 400, 7931, 8405, 401, 6789, 4212, 7931, 8405, 401, 8461, 4212, 7931, 8405, 401, 9363, 4212, 7931, 8405, 401, 10275, 4212, 7931, 8405, 426, 7931, 8405, 427, 6789, 4212, 7931, 8405, 427, 10275, 4212, 7931, 8405, 612, 7931, 8405, 613, 6789, 4212, 7931, 8405, 613, 10275, 4212, 7931, 8405, 664, 7931, 8405, 665, 6789, 4212, 7931, 8405, 665, 10275, 4212, 7931, 8405, 710, 7931, 8405, 711, 6121, 2779, 4113, 6376, 7931, 8405, 711, 6121, 2779, 4113, 11877, 6376, 7931, 8405, 711, 6121, 7695, 4113, 6376, 7931, 8405, 711, 6121, 7695, 4113, 10441, 10959, 6376, 7931, 8405, 711, 6789, 4212, 7931, 8405, 711, 8461, 4212, 7931, 8405, 711, 9363, 4212, 7931, 8405, 711, 10275, 4212, 7931, 8405, 780, 7931, 8405, 781, 6121, 1045, 6491, 721, 7695, 4113, 6376, 7931, 8405, 781, 6121, 2779, 4113, 6491, 721, 1045, 6376, 7931, 8405, 781, 6121, 7593, 42, 7931, 8405, 781, 6121, 7695, 4113, 10441, 9811, 6490, 7931, 8405, 781, 6121, 7695, 4113, 10441, 9811, 6491, 721, 2779, 4113, 6376, 7931, 8405, 781, 6121, 7695, 4113, 12477, 6490, 7931, 8405, 781, 6121, 10267, 7593, 43, 6490, 7931, 8405, 781, 6789, 4212, 7931, 8405, 781, 8461, 4212, 7931, 8405, 781, 9363, 4212, 7931, 8405, 781, 10275, 4212, 7931, 8405, 956, 7931, 8405, 957, 6121, 1045, 6490, 7931, 8405, 957, 6789, 4212, 7931, 8405, 957, 8461, 4212, 7931, 8405, 957, 9363, 4212, 7931, 8405, 957, 10275, 4212, 7931, 8405, 960, 7931, 8405, 961, 6121, 1045, 6490, 7931, 8405, 961, 6121, 1045, 6491, 721, 7593, 2640, 7931, 8405, 961, 6121, 2779, 4113, 11877, 6491, 721, 7593, 2640, 7931, 8405, 961, 6121, 4215, 4113, 6376, 7931, 8405, 961, 6121, 5550, 7931, 8405, 961, 6121, 7695, 4113, 6377, 10958, 7931, 8405, 961, 6121, 10267, 42, 7931, 8405, 961, 6121, 10267, 7593, 43, 6490, 7931, 8405, 961, 6789, 4212, 7931, 8405, 961, 10275, 4212, 7931, 8405, 1056, 7931, 8405, 1057, 6789, 4212, 7931, 8405, 1057, 10275, 4212, 7931, 8405, 1152, 7931, 8405, 1153, 6121, 1045, 6490, 7931, 8405, 1153, 6121, 1045, 7189, 6490, 7931, 8405, 1153, 6121, 2779, 4113, 6490, 7931, 8405, 1153, 6121, 7695, 4113, 6490, 7931, 8405, 1153, 6121, 7695, 4113, 10441, 9811, 6490, 7931, 8405, 1153, 6789, 4212, 7931, 8405, 1153, 8461, 4212, 7931, 8405, 1153, 9363, 4212, 7931, 8405, 1153, 10275, 4212, 7931, 8405, 1208, 7931, 8405, 1209, 6121, 2779, 4113, 6490, 7931, 8405, 1209, 6121, 5550, 7931, 8405, 1209, 6121, 7695, 4113, 6376, 7931, 8405, 1209, 6789, 4212, 7931, 8405, 1209, 8461, 4212, 7931, 8405, 1209, 9363, 4212, 7931, 8405, 1209, 10275, 4212, 7931, 8405, 1342, 7931, 8405, 1343, 6121, 2779, 4113, 6376, 7931, 8405, 1343, 6121, 2779, 4113, 10677, 6376, 7931, 8405, 1343, 6121, 6895, 6376, 7931, 8405, 1343, 6121, 7593, 7931, 8405, 2641, 721, 2779, 4112, 7931, 8405, 1343, 6121, 7593, 7931, 8405, 2641, 6376, 7931, 8405, 1343, 6121, 7593, 7931, 8405, 2641, 6490, 7931, 8405, 1343, 6121, 7695, 4113, 6376, 7931, 8405, 1343, 6121, 7695, 4113, 10441, 9811, 6490, 7931, 8405, 1343, 6121, 10173, 12403, 6689, 4215, 6490, 7931, 8405, 1343, 6789, 4212, 7931, 8405, 1343, 8461, 4212, 7931, 8405, 1343, 9363, 4212, 7931, 8405, 1343, 10275, 4212, 7931, 8405, 1358, 7931, 8405, 1359, 4340, 7931, 8405, 1359, 4341, 6121, 6895, 6376, 7931, 8405, 1359, 4341, 6789, 4212, 7931, 8405, 1359, 4341, 8461, 4212, 7931, 8405, 1359, 4341, 9363, 4212, 7931, 8405, 1359, 4341, 10275, 4212, 7931, 8405, 1359, 6121, 3053, 6376, 7931, 8405, 1359, 6121, 3053, 6377, 6789, 4212, 7931, 8405, 1359, 6121, 3053, 6377, 10275, 4212, 7931, 8405, 1359, 6121, 10267, 42, 7931, 8405, 1359, 6789, 4212, 7931, 8405, 1359, 8461, 4212, 7931, 8405, 1359, 9363, 4212, 7931, 8405, 1359, 10275, 4212, 7931, 8405, 1359, 11948, 7931, 8405, 1359, 11949, 6789, 4212, 7931, 8405, 1359, 11949, 8461, 4212, 7931, 8405, 1359, 11949, 9363, 4212, 7931, 8405, 1359, 11949, 10275, 4212, 7931, 8405, 1508, 7931, 8405, 1509, 6789, 4212, 7931, 8405, 1509, 10275, 4212, 7931, 8405, 1578, 7931, 8405, 1579, 6121, 1045, 6376, 7931, 8405, 1579, 6121, 2779, 4113, 6376, 7931, 8405, 1579, 6121, 5550, 7931, 8405, 1579, 6121, 7695, 4113, 6490, 7931, 8405, 1579, 6789, 4212, 7931, 8405, 1579, 8461, 4212, 7931, 8405, 1579, 9363, 4212, 7931, 8405, 1579, 10275, 4212, 7931, 8405, 1738, 7931, 8405, 1739, 6121, 760, 7931, 8405, 1739, 6121, 1045, 6376, 7931, 8405, 1739, 6121, 7593, 42, 7931, 8405, 1739, 6121, 7695, 4113, 6376, 7931, 8405, 1739, 6121, 7695, 4113, 6490, 7931, 8405, 1739, 6789, 4212, 7931, 8405, 1739, 8461, 4212, 7931, 8405, 1739, 9363, 4212, 7931, 8405, 1739, 10275, 4212, 7931, 8405, 2206, 7931, 8405, 2207, 6789, 4212, 7931, 8405, 2207, 8461, 4212, 7931, 8405, 2207, 9363, 4212, 7931, 8405, 2207, 10275, 4212, 7931, 8405, 2284, 7931, 8405, 2285, 6121, 1045, 6376, 7931, 8405, 2285, 6121, 7695, 4113, 6376, 7931, 8405, 2285, 6789, 4212, 7931, 8405, 2285, 8461, 4212, 7931, 8405, 2285, 9363, 4212, 7931, 8405, 2285, 10275, 4212, 7931, 8405, 2404, 7931, 8405, 2405, 6121, 1045, 6490, 7931, 8405, 2405, 6121, 1045, 6491, 721, 1045, 6376, 7931, 8405, 2405, 6121, 2779, 4113, 6376, 7931, 8405, 2405, 6121, 2779, 4113, 11877, 6376, 7931, 8405, 2405, 6121, 4215, 4113, 6376, 7931, 8405, 2405, 6121, 5550, 7931, 8405, 2405, 6121, 6895, 6376, 7931, 8405, 2405, 6121, 7593, 42, 7931, 8405, 2405, 6121, 7593, 43, 6490, 7931, 8405, 2405, 6121, 7593, 7931, 8405, 2641, 721, 2779, 4112, 7931, 8405, 2405, 6121, 8758, 7931, 8405, 2405, 6121, 10267, 42, 7931, 8405, 2405, 6789, 4212, 7931, 8405, 2405, 10275, 4212, 7931, 8405, 2484, 7931, 8405, 2485, 6121, 2779, 4113, 6490, 7931, 8405, 2485, 6121, 7695, 4113, 6376, 7931, 8405, 2485, 6789, 4212, 7931, 8405, 2485, 8461, 4212, 7931, 8405, 2485, 9363, 4212, 7931, 8405, 2485, 10275, 4212, 7931, 8405, 2640, 7931, 8405, 2641, 6121, 7695, 4113, 6376, 7931, 8405, 2641, 6789, 4212, 7931, 8405, 2641, 8461, 4212, 7931, 8405, 2641, 9363, 4212, 7931, 8405, 2641, 10275, 4212, 7931, 8405, 2668, 7931, 8405, 2669, 6121, 5550, 7931, 8405, 2669, 6121, 7695, 4113, 6377, 10958, 7931, 8405, 2669, 6789, 4212, 7931, 8405, 2669, 8461, 4212, 7931, 8405, 2669, 9363, 4212, 7931, 8405, 2669, 9456, 7931, 8405, 2669, 9457, 4340, 7931, 8405, 2669, 9457, 6789, 4212, 7931, 8405, 2669, 9457, 10275, 4212, 7931, 8405, 2669, 10275, 4212, 7931, 8405, 2858, 7931, 8405, 2859, 6789, 4212, 7931, 8405, 2859, 8461, 4212, 7931, 8405, 2859, 9363, 4212, 7931, 8405, 2859, 10275, 4212, 7931, 8405, 2918, 7931, 8405, 2919, 6121, 1045, 6376, 7931, 8405, 2919, 6121, 2779, 4113, 6376, 7931, 8405, 2919, 6121, 5550, 7931, 8405, 2919, 6121, 6895, 6376, 7931, 8405, 2919, 6121, 6895, 6377, 6789, 4212, 7931, 8405, 2919, 6121, 6895, 6377, 10275, 4212, 7931, 8405, 2919, 6121, 10173, 12403, 6689, 2779, 6376, 7931, 8405, 2919, 6121, 10173, 12403, 6689, 7695, 6376, 7931, 8405, 2919, 6789, 4212, 7931, 8405, 2919, 10275, 4212, 7931, 8405, 3052, 7931, 8405, 3053, 6121, 5878, 7931, 8405, 3053, 6121, 6895, 6376, 7931, 8405, 3053, 6121, 6895, 6377, 6789, 4212, 7931, 8405, 3053, 6121, 6895, 6377, 8461, 4212, 7931, 8405, 3053, 6121, 6895, 6377, 9363, 4212, 7931, 8405, 3053, 6121, 6895, 6377, 10275, 4212, 7931, 8405, 3053, 6121, 7593, 42, 7931, 8405, 3053, 6121, 7695, 4113, 6490, 7931, 8405, 3053, 6789, 4212, 7931, 8405, 3053, 7982, 7931, 8405, 3053, 7983, 6121, 6895, 6376, 7931, 8405, 3053, 7983, 6121, 6895, 6377, 6789, 4212, 7931, 8405, 3053, 7983, 6121, 6895, 6377, 10275, 4212, 7931, 8405, 3053, 7983, 6121, 10173, 12403, 6689, 2779, 6376, 7931, 8405, 3053, 7983, 6121, 10173, 12403, 6689, 7695, 6376, 7931, 8405, 3053, 7983, 6789, 4212, 7931, 8405, 3053, 7983, 10275, 4212, 7931, 8405, 3053, 8461, 4212, 7931, 8405, 3053, 9363, 4212, 7931, 8405, 3053, 10275, 4212, 7931, 8405, 3124, 7931, 8405, 3125, 6789, 4212, 7931, 8405, 3125, 8461, 4212, 7931, 8405, 3125, 9363, 4212, 7931, 8405, 3125, 10275, 4212, 7931, 8405, 3244, 7931, 8405, 3245, 6121, 6107, 6895, 6376, 7931, 8405, 3245, 6121, 6107, 6895, 6490, 7931, 8405, 3245, 6121, 6895, 6376, 7931, 8405, 3245, 6121, 6895, 6377, 6789, 4212, 7931, 8405, 3245, 6121, 6895, 6377, 10275, 4212, 7931, 8405, 3245, 6121, 6895, 6490, 7931, 8405, 3245, 6121, 6895, 6491, 6789, 4212, 7931, 8405, 3245, 6121, 6895, 6491, 10275, 4212, 7931, 8405, 3245, 6121, 7125, 6376, 7931, 8405, 3245, 6121, 7125, 6377, 6789, 4212, 7931, 8405, 3245, 6121, 7125, 6377, 10275, 4212, 7931, 8405, 3245, 6121, 10173, 12403, 6689, 2779, 6376, 7931, 8405, 3245, 6121, 10173, 12403, 6689, 7695, 6376, 7931, 8405, 3245, 6789, 4212, 7931, 8405, 3245, 7808, 7931, 8405, 3245, 7809, 6789, 4212, 7931, 8405, 3245, 7809, 10275, 4212, 7931, 8405, 3245, 9448, 7931, 8405, 3245, 9449, 6789, 4212, 7931, 8405, 3245, 9449, 10275, 4212, 7931, 8405, 3245, 10275, 4212, 7931, 8405, 3766, 7931, 8405, 3767, 6789, 4212, 7931, 8405, 3767, 8461, 4212, 7931, 8405, 3767, 9363, 4212, 7931, 8405, 3767, 10275, 4212, 7931, 8405, 4000, 7931, 8405, 4001, 6789, 4212, 7931, 8405, 4001, 10275, 4212, 7931, 8405, 4136, 7931, 8405, 4137, 6789, 4212, 7931, 8405, 4137, 8461, 4212, 7931, 8405, 4137, 9363, 4212, 7931, 8405, 4137, 10275, 4212, 7931, 8405, 4356, 7931, 8405, 4357, 6789, 4212, 7931, 8405, 4357, 8461, 4212, 7931, 8405, 4357, 9363, 4212, 7931, 8405, 4357, 10275, 4212, 7931, 8405, 4423, 6894, 7931, 8405, 4423, 6895, 2918, 7931, 8405, 4423, 6895, 3052, 7931, 8405, 4423, 6895, 3244, 7931, 8405, 4630, 7931, 8405, 4631, 6789, 4212, 7931, 8405, 4631, 8461, 4212, 7931, 8405, 4631, 9363, 4212, 7931, 8405, 4631, 10275, 4212, 7931, 8405, 4736, 7931, 8405, 4737, 6789, 4212, 7931, 8405, 4737, 8461, 4212, 7931, 8405, 4737, 9363, 4212, 7931, 8405, 4737, 10275, 4212, 7931, 8405, 4942, 7931, 8405, 4943, 6121, 1045, 6376, 7931, 8405, 4943, 6121, 1045, 6490, 7931, 8405, 4943, 6789, 4212, 7931, 8405, 4943, 8461, 4212, 7931, 8405, 4943, 9363, 4212, 7931, 8405, 4943, 10275, 4212, 7931, 8405, 5240, 7931, 8405, 5241, 6121, 1045, 6490, 7931, 8405, 5241, 6121, 2779, 4113, 6490, 7931, 8405, 5241, 6121, 5550, 7931, 8405, 5241, 6121, 7593, 42, 7931, 8405, 5241, 6121, 7593, 2640, 7931, 8405, 5241, 6121, 7695, 4113, 6376, 7931, 8405, 5241, 6789, 4212, 7931, 8405, 5241, 8260, 7931, 8405, 5241, 8261, 6789, 4212, 7931, 8405, 5241, 8261, 10275, 4212, 7931, 8405, 5241, 8461, 4212, 7931, 8405, 5241, 9363, 4212, 7931, 8405, 5241, 10275, 4212, 7931, 8405, 5298, 7931, 8405, 5299, 6789, 4212, 7931, 8405, 5299, 8461, 4212, 7931, 8405, 5299, 9363, 4212, 7931, 8405, 5299, 10275, 4212, 7931, 8405, 5572, 7931, 8405, 5573, 6789, 4212, 7931, 8405, 5573, 10275, 4212, 7931, 8405, 5648, 7931, 8405, 5649, 6121, 1045, 6491, 721, 1045, 6376, 7931, 8405, 5649, 6121, 2779, 4113, 11877, 6376, 7931, 8405, 5649, 6121, 4215, 4113, 6376, 7931, 8405, 5649, 6121, 7593, 7931, 8405, 2641, 721, 2779, 4112, 7931, 8405, 5649, 6121, 7695, 4113, 6490, 7931, 8405, 5649, 6121, 7695, 4113, 6491, 721, 7695, 4113, 6376, 7931, 8405, 5649, 6121, 10173, 12403, 6689, 4215, 6376, 7931, 8405, 5649, 6121, 10267, 42, 7931, 8405, 5649, 6789, 4212, 7931, 8405, 5649, 8461, 4212, 7931, 8405, 5649, 9363, 4212, 7931, 8405, 5649, 10275, 4212, 7931, 8405, 5910, 7931, 8405, 5911, 6789, 4212, 7931, 8405, 5911, 10275, 4212, 7931, 8405, 5916, 7931, 8405, 5917, 6789, 4212, 7931, 8405, 5917, 8461, 4212, 7931, 8405, 5917, 9363, 4212, 7931, 8405, 5917, 10275, 4212, 7931, 8405, 5992, 7931, 8405, 5993, 6789, 4212, 7931, 8405, 5993, 8461, 4212, 7931, 8405, 5993, 9363, 4212, 7931, 8405, 5993, 10275, 4212, 7931, 8405, 6254, 7931, 8405, 6255, 6789, 4212, 7931, 8405, 6255, 10275, 4212, 7931, 8405, 6486, 7931, 8405, 6487, 6789, 4212, 7931, 8405, 6487, 8461, 4212, 7931, 8405, 6487, 9363, 4212, 7931, 8405, 6487, 10275, 4212, 7931, 8405, 6636, 7931, 8405, 6637, 6789, 4212, 7931, 8405, 6637, 10275, 4212, 7931, 8405, 6771, 3052, 7931, 8405, 6771, 3053, 6121, 2779, 4113, 6376, 7931, 8405, 6771, 3053, 6121, 7695, 4113, 6376, 7931, 8405, 6771, 3053, 6121, 10173, 12403, 6689, 2779, 6376, 7931, 8405, 6771, 3053, 6121, 10173, 12403, 6689, 4215, 6490, 7931, 8405, 6771, 3053, 6121, 10173, 12403, 6689, 7695, 6376, 7931, 8405, 6771, 3053, 6121, 10267, 42, 7931, 8405, 6771, 3053, 6789, 4212, 7931, 8405, 6771, 3053, 8461, 4212, 7931, 8405, 6771, 3053, 9363, 4212, 7931, 8405, 6771, 3053, 10275, 4212, 7931, 8405, 6850, 7931, 8405, 6851, 6121, 1045, 6490, 7931, 8405, 6851, 6789, 4212, 7931, 8405, 6851, 8461, 4212, 7931, 8405, 6851, 9363, 4212, 7931, 8405, 6851, 10275, 4212, 7931, 8405, 6894, 7931, 8405, 6895, 10275, 4212, 7931, 8405, 7036, 7931, 8405, 7037, 6121, 1045, 6376, 7931, 8405, 7037, 6121, 2779, 4113, 6376, 7931, 8405, 7037, 6121, 7695, 4113, 6376, 7931, 8405, 7037, 6121, 7695, 4113, 6490, 7931, 8405, 7037, 6121, 7695, 4113, 10441, 9811, 6490, 7931, 8405, 7037, 6789, 4212, 7931, 8405, 7037, 8461, 4212, 7931, 8405, 7037, 9363, 4212, 7931, 8405, 7037, 10275, 4212, 7931, 8405, 7238, 7931, 8405, 7239, 6789, 4212, 7931, 8405, 7239, 8461, 4212, 7931, 8405, 7239, 9363, 4212, 7931, 8405, 7239, 10275, 4212, 7931, 8405, 7354, 7931, 8405, 7355, 6789, 4212, 7931, 8405, 7355, 8461, 4212, 7931, 8405, 7355, 9363, 4212, 7931, 8405, 7355, 10275, 4212, 7931, 8405, 7448, 7931, 8405, 7449, 6789, 4212, 7931, 8405, 7449, 8461, 4212, 7931, 8405, 7449, 9363, 4212, 7931, 8405, 7449, 10275, 4212, 7931, 8405, 7524, 7931, 8405, 7525, 6121, 1045, 6490, 7931, 8405, 7525, 6789, 4212, 7931, 8405, 7525, 8461, 4212, 7931, 8405, 7525, 9363, 4212, 7931, 8405, 7525, 10275, 4212, 7931, 8405, 7653, 1578, 7931, 8405, 7668, 7931, 8405, 7669, 6121, 1045, 6376, 7931, 8405, 7669, 6789, 4212, 7931, 8405, 7669, 8461, 4212, 7931, 8405, 7669, 9363, 4212, 7931, 8405, 7669, 10275, 4212, 7931, 8405, 7672, 7931, 8405, 7673, 6789, 4212, 7931, 8405, 7673, 8461, 4212, 7931, 8405, 7673, 9363, 4212, 7931, 8405, 7673, 10275, 4212, 7931, 8405, 8098, 7931, 8405, 8099, 6789, 4212, 7931, 8405, 8099, 10275, 4212, 7931, 8405, 8860, 7931, 8405, 8861, 6789, 4212, 7931, 8405, 8861, 8461, 4212, 7931, 8405, 8861, 9363, 4212, 7931, 8405, 8861, 10275, 4212, 7931, 8405, 8895, 8345, 9405, 3245, 9449, 8461, 4212, 7931, 8405, 8895, 8345, 9405, 3245, 9449, 9363, 4212, 7931, 8405, 9185, 780, 7931, 8405, 9185, 1152, 7931, 8405, 9185, 2284, 7931, 8405, 9405, 426, 7931, 8405, 9405, 427, 6789, 4212, 7931, 8405, 9405, 427, 10275, 4212, 7931, 8405, 9405, 664, 7931, 8405, 9405, 665, 6789, 4212, 7931, 8405, 9405, 665, 10275, 4212, 7931, 8405, 9770, 7931, 8405, 9771, 6789, 4212, 7931, 8405, 9771, 8461, 4212, 7931, 8405, 9771, 9363, 4212, 7931, 8405, 9771, 10275, 4212, 7931, 8405, 12355, 3244, 7931, 8435, 6376, 7931, 8525, 5758, 7931, 8601, 7793, 5758, 7931, 8692, 7931, 8693, 8461, 4212, 7931, 8693, 10275, 4212, 7931, 8849, 1045, 12133, 4926, 7931, 9151, 11228, 7931, 9581, 5758, 7931, 9645, 4423, 5837, 6121, 8205, 8036, 7931, 9766, 7931, 9767, 6121, 10175, 6376, 7931, 9978, 7931, 9979, 10275, 4212, 7931, 10174, 7931, 10175, 10275, 4212, 7931, 10199, 8450, 7931, 10267, 6644, 7931, 10280, 7931, 10281, 10275, 4212, 7931, 10301, 711, 6121, 3053, 6789, 4212, 7931, 10301, 711, 6121, 3053, 10275, 4212, 7931, 10301, 711, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 711, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 711, 6121, 4631, 6121, 4943, 6789, 4212, 7931, 10301, 711, 6121, 4631, 6121, 4943, 9363, 4212, 7931, 10301, 711, 6121, 4631, 9363, 4212, 7931, 10301, 711, 6121, 4631, 10275, 4212, 7931, 10301, 711, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 711, 6121, 4943, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 711, 6121, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 711, 6121, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 711, 6121, 4943, 9363, 4212, 7931, 10301, 711, 6121, 4943, 10275, 4212, 7931, 10301, 781, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 781, 6121, 1343, 9363, 4212, 7931, 10301, 781, 6121, 1343, 10275, 4212, 7931, 10301, 781, 6121, 1359, 8461, 4212, 7931, 10301, 781, 6121, 1359, 9363, 4212, 7931, 10301, 781, 6121, 2405, 6789, 4212, 7931, 10301, 781, 6121, 3053, 6789, 4212, 7931, 10301, 781, 6121, 3053, 10275, 4212, 7931, 10301, 781, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 781, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 781, 6121, 4631, 9363, 4212, 7931, 10301, 781, 6121, 4631, 10275, 4212, 7931, 10301, 781, 6121, 4737, 6121, 3053, 6789, 4212, 7931, 10301, 781, 6121, 4737, 9363, 4212, 7931, 10301, 781, 6121, 4737, 10275, 4212, 7931, 10301, 781, 6121, 4943, 6789, 4212, 7931, 10301, 781, 6121, 4943, 8461, 4212, 7931, 10301, 781, 6121, 4943, 9363, 4212, 7931, 10301, 781, 6121, 4943, 10275, 4212, 7931, 10301, 781, 6121, 5241, 6789, 4212, 7931, 10301, 781, 6121, 6255, 6789, 4212, 7931, 10301, 957, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 957, 6121, 1343, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 957, 6121, 1343, 9363, 4212, 7931, 10301, 957, 6121, 1343, 10275, 4212, 7931, 10301, 957, 6121, 2405, 6789, 4212, 7931, 10301, 957, 6121, 2405, 10275, 4212, 7931, 10301, 957, 6121, 3053, 6789, 4212, 7931, 10301, 957, 6121, 3053, 10275, 4212, 7931, 10301, 957, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 957, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 957, 6121, 4631, 9363, 4212, 7931, 10301, 957, 6121, 4631, 10275, 4212, 7931, 10301, 957, 6121, 4737, 6121, 4943, 6789, 4212, 7931, 10301, 957, 6121, 4737, 6121, 4943, 9363, 4212, 7931, 10301, 957, 6121, 4737, 9363, 4212, 7931, 10301, 957, 6121, 4737, 10275, 4212, 7931, 10301, 957, 6121, 4943, 9363, 4212, 7931, 10301, 957, 6121, 4943, 10275, 4212, 7931, 10301, 1153, 6121, 1343, 9363, 4212, 7931, 10301, 1153, 6121, 1343, 10275, 4212, 7931, 10301, 1153, 6121, 3053, 6789, 4212, 7931, 10301, 1153, 6121, 3053, 10275, 4212, 7931, 10301, 1153, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 1153, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 1153, 6121, 4631, 9363, 4212, 7931, 10301, 1153, 6121, 4631, 10275, 4212, 7931, 10301, 1153, 6121, 4737, 6121, 4943, 6789, 4212, 7931, 10301, 1153, 6121, 4737, 6121, 4943, 9363, 4212, 7931, 10301, 1153, 6121, 4737, 9363, 4212, 7931, 10301, 1153, 6121, 4737, 10275, 4212, 7931, 10301, 1153, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 1153, 6121, 4943, 9363, 4212, 7931, 10301, 1153, 6121, 4943, 10275, 4212, 7931, 10301, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 1343, 6121, 3053, 10275, 4212, 7931, 10301, 1343, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 1343, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 1343, 6121, 4631, 6121, 3053, 6789, 4212, 7931, 10301, 1343, 6121, 4631, 9363, 4212, 7931, 10301, 1343, 6121, 4631, 10275, 4212, 7931, 10301, 1343, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 1343, 6121, 4943, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 1343, 6121, 4943, 9363, 4212, 7931, 10301, 1343, 6121, 4943, 10275, 4212, 7931, 10301, 1359, 6121, 3053, 10275, 4212, 7931, 10301, 1359, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 1359, 6121, 4631, 9363, 4212, 7931, 10301, 1359, 6121, 4631, 10275, 4212, 7931, 10301, 1359, 6121, 4943, 6121, 4631, 9363, 4212, 7931, 10301, 1359, 6121, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 1359, 6121, 4943, 9363, 4212, 7931, 10301, 1359, 6121, 4943, 10275, 4212, 7931, 10301, 1359, 6121, 12355, 3245, 9363, 4212, 7931, 10301, 1579, 6121, 1343, 9363, 4212, 7931, 10301, 1579, 6121, 1343, 10275, 4212, 7931, 10301, 1579, 6121, 1739, 6789, 4212, 7931, 10301, 1579, 6121, 1739, 8461, 4212, 7931, 10301, 1579, 6121, 1739, 9363, 4212, 7931, 10301, 1579, 6121, 1739, 10275, 4212, 7931, 10301, 1579, 6121, 3053, 6789, 4212, 7931, 10301, 1579, 6121, 3053, 10275, 4212, 7931, 10301, 1579, 6121, 3245, 6789, 4212, 7931, 10301, 1579, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 1579, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 1579, 6121, 3245, 10275, 4212, 7931, 10301, 1579, 6121, 4631, 9363, 4212, 7931, 10301, 1579, 6121, 4631, 10275, 4212, 7931, 10301, 1579, 6121, 4737, 9363, 4212, 7931, 10301, 1579, 6121, 4737, 10275, 4212, 7931, 10301, 1579, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 1579, 6121, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 1579, 6121, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 1579, 6121, 4943, 6789, 4212, 7931, 10301, 1579, 6121, 4943, 8461, 4212, 7931, 10301, 1579, 6121, 4943, 9363, 4212, 7931, 10301, 1579, 6121, 4943, 10275, 4212, 7931, 10301, 1739, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 1739, 6121, 1343, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 1739, 6121, 1343, 6121, 4943, 6789, 4212, 7931, 10301, 1739, 6121, 1343, 6121, 4943, 9363, 4212, 7931, 10301, 1739, 6121, 1343, 9363, 4212, 7931, 10301, 1739, 6121, 1343, 10275, 4212, 7931, 10301, 1739, 6121, 1359, 9363, 4212, 7931, 10301, 1739, 6121, 3053, 6789, 4212, 7931, 10301, 1739, 6121, 3053, 10275, 4212, 7931, 10301, 1739, 6121, 3245, 6121, 6895, 6377, 6789, 4212, 7931, 10301, 1739, 6121, 3245, 6121, 6895, 6377, 10275, 4212, 7931, 10301, 1739, 6121, 3245, 6121, 6895, 6491, 6789, 4212, 7931, 10301, 1739, 6121, 3245, 6121, 6895, 6491, 10275, 4212, 7931, 10301, 1739, 6121, 3245, 6121, 7125, 6377, 6789, 4212, 7931, 10301, 1739, 6121, 3245, 6121, 7125, 6377, 10275, 4212, 7931, 10301, 1739, 6121, 3245, 6789, 4212, 7931, 10301, 1739, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 1739, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 1739, 6121, 3245, 10275, 4212, 7931, 10301, 1739, 6121, 4631, 6121, 3053, 6789, 4212, 7931, 10301, 1739, 6121, 4631, 6121, 4631, 6789, 4212, 7931, 10301, 1739, 6121, 4631, 6121, 4631, 9363, 4212, 7931, 10301, 1739, 6121, 4631, 6121, 4943, 6789, 4212, 7931, 10301, 1739, 6121, 4631, 6121, 4943, 9363, 4212, 7931, 10301, 1739, 6121, 4631, 9363, 4212, 7931, 10301, 1739, 6121, 4631, 10275, 4212, 7931, 10301, 1739, 6121, 4737, 6121, 4943, 6789, 4212, 7931, 10301, 1739, 6121, 4737, 6121, 4943, 9363, 4212, 7931, 10301, 1739, 6121, 4737, 9363, 4212, 7931, 10301, 1739, 6121, 4737, 10275, 4212, 7931, 10301, 1739, 6121, 4943, 6121, 1343, 6789, 4212, 7931, 10301, 1739, 6121, 4943, 6121, 1343, 9363, 4212, 7931, 10301, 1739, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 1739, 6121, 4943, 6789, 4212, 7931, 10301, 1739, 6121, 4943, 8461, 4212, 7931, 10301, 1739, 6121, 4943, 9363, 4212, 7931, 10301, 1739, 6121, 4943, 10275, 4212, 7931, 10301, 2285, 6121, 1343, 9363, 4212, 7931, 10301, 2285, 6121, 1343, 10275, 4212, 7931, 10301, 2285, 6121, 3053, 6789, 4212, 7931, 10301, 2285, 6121, 3053, 10275, 4212, 7931, 10301, 2285, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 2285, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 2285, 6121, 4943, 6121, 1343, 6789, 4212, 7931, 10301, 2285, 6121, 4943, 6121, 1343, 9363, 4212, 7931, 10301, 2285, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 2285, 6121, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 2285, 6121, 4943, 9363, 4212, 7931, 10301, 2285, 6121, 4943, 10275, 4212, 7931, 10301, 2405, 6121, 12355, 3245, 10275, 4212, 7931, 10301, 2485, 6121, 1343, 6121, 1343, 6789, 4212, 7931, 10301, 2485, 6121, 1343, 6121, 1343, 9363, 4212, 7931, 10301, 2485, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 2485, 6121, 1343, 9363, 4212, 7931, 10301, 2485, 6121, 1343, 10275, 4212, 7931, 10301, 2485, 6121, 2405, 6789, 4212, 7931, 10301, 2485, 6121, 2405, 10275, 4212, 7931, 10301, 2485, 6121, 3053, 6789, 4212, 7931, 10301, 2485, 6121, 3053, 10275, 4212, 7931, 10301, 2485, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 2485, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 2485, 6121, 4737, 9363, 4212, 7931, 10301, 2485, 6121, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 2485, 6121, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 2485, 6121, 4943, 9363, 4212, 7931, 10301, 2485, 6121, 4943, 10275, 4212, 7931, 10301, 2641, 6121, 1343, 9363, 4212, 7931, 10301, 2641, 6121, 1343, 10275, 4212, 7931, 10301, 2641, 6121, 3053, 6789, 4212, 7931, 10301, 2641, 6121, 3053, 10275, 4212, 7931, 10301, 2641, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 2641, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 2641, 6121, 4943, 6121, 1343, 6789, 4212, 7931, 10301, 2641, 6121, 4943, 6121, 1343, 9363, 4212, 7931, 10301, 2641, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 2641, 6121, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 2641, 6121, 4943, 8461, 4212, 7931, 10301, 2641, 6121, 4943, 9363, 4212, 7931, 10301, 2641, 6121, 4943, 10275, 4212, 7931, 10301, 2669, 6121, 1343, 6121, 4631, 6789, 4212, 7931, 10301, 2669, 6121, 1343, 6121, 4631, 9363, 4212, 7931, 10301, 2669, 6121, 1343, 6121, 4943, 9363, 4212, 7931, 10301, 2669, 6121, 1343, 9363, 4212, 7931, 10301, 2669, 6121, 1343, 10275, 4212, 7931, 10301, 2669, 6121, 1359, 8461, 4212, 7931, 10301, 2669, 6121, 1359, 9363, 4212, 7931, 10301, 2669, 6121, 2405, 6789, 4212, 7931, 10301, 2669, 6121, 3053, 6789, 4212, 7931, 10301, 2669, 6121, 3053, 10275, 4212, 7931, 10301, 2669, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 2669, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 2669, 6121, 4631, 6121, 3053, 6789, 4212, 7931, 10301, 2669, 6121, 4631, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 2669, 6121, 4631, 6121, 4943, 9363, 4212, 7931, 10301, 2669, 6121, 4631, 9363, 4212, 7931, 10301, 2669, 6121, 4631, 10275, 4212, 7931, 10301, 2669, 6121, 4737, 6121, 3053, 6789, 4212, 7931, 10301, 2669, 6121, 4737, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 2669, 6121, 4737, 6121, 4943, 9363, 4212, 7931, 10301, 2669, 6121, 4737, 9363, 4212, 7931, 10301, 2669, 6121, 4737, 10275, 4212, 7931, 10301, 2669, 6121, 4943, 6121, 1343, 9363, 4212, 7931, 10301, 2669, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 2669, 6121, 4943, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 2669, 6121, 4943, 6121, 4631, 9363, 4212, 7931, 10301, 2669, 6121, 4943, 6121, 4737, 9363, 4212, 7931, 10301, 2669, 6121, 4943, 6789, 4212, 7931, 10301, 2669, 6121, 4943, 8461, 4212, 7931, 10301, 2669, 6121, 4943, 9363, 4212, 7931, 10301, 2669, 6121, 4943, 10275, 4212, 7931, 10301, 2669, 6121, 5241, 6789, 4212, 7931, 10301, 2669, 6121, 6255, 6789, 4212, 7931, 10301, 3053, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 3053, 6121, 1343, 9363, 4212, 7931, 10301, 3053, 6121, 1343, 10275, 4212, 7931, 10301, 3053, 6121, 1359, 8461, 4212, 7931, 10301, 3053, 6121, 1359, 9363, 4212, 7931, 10301, 3053, 6121, 2405, 6789, 4212, 7931, 10301, 3053, 6121, 3053, 6789, 4212, 7931, 10301, 3053, 6121, 3053, 10275, 4212, 7931, 10301, 3053, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 3053, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 3053, 6121, 4631, 6121, 3053, 6789, 4212, 7931, 10301, 3053, 6121, 4631, 9363, 4212, 7931, 10301, 3053, 6121, 4631, 10275, 4212, 7931, 10301, 3053, 6121, 4737, 9363, 4212, 7931, 10301, 3053, 6121, 4737, 10275, 4212, 7931, 10301, 3053, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 3053, 6121, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 3053, 6121, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 3053, 6121, 4943, 6789, 4212, 7931, 10301, 3053, 6121, 4943, 8461, 4212, 7931, 10301, 3053, 6121, 4943, 9363, 4212, 7931, 10301, 3053, 6121, 4943, 10275, 4212, 7931, 10301, 3053, 6121, 5241, 6789, 4212, 7931, 10301, 3053, 6121, 6255, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 9, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 9, 9363, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 9, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 41, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 41, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 67, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 67, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 427, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 427, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 665, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 665, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 1343, 9363, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 1343, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 1359, 8461, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 1359, 9363, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 2405, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 2919, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 2919, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3053, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3053, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3245, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3245, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4631, 9363, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4631, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4737, 9363, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4943, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4943, 8461, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4943, 9363, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4943, 10275, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 5241, 6789, 4212, 7931, 10301, 3053, 6121, 6895, 6377, 6121, 6255, 6789, 4212, 7931, 10301, 3125, 6121, 4943, 8461, 4212, 7931, 10301, 3125, 6121, 4943, 9363, 4212, 7931, 10301, 3125, 6121, 4943, 10275, 4212, 7931, 10301, 3245, 6121, 10175, 6789, 4212, 7931, 10301, 3245, 6121, 10175, 10275, 4212, 7931, 10301, 3245, 9449, 6121, 12355, 3245, 6789, 4212, 7931, 10301, 3245, 9449, 6121, 12355, 3245, 10275, 4212, 7931, 10301, 4631, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 4631, 6121, 1343, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 4631, 6121, 1343, 9363, 4212, 7931, 10301, 4631, 6121, 1343, 10275, 4212, 7931, 10301, 4631, 6121, 3053, 6789, 4212, 7931, 10301, 4631, 6121, 3053, 10275, 4212, 7931, 10301, 4631, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 4631, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 4631, 6121, 4943, 6121, 1343, 6789, 4212, 7931, 10301, 4631, 6121, 4943, 6121, 1343, 9363, 4212, 7931, 10301, 4631, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 4631, 6121, 4943, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 4631, 6121, 4943, 9363, 4212, 7931, 10301, 4631, 6121, 4943, 10275, 4212, 7931, 10301, 4737, 6121, 1343, 10275, 4212, 7931, 10301, 4737, 6121, 3053, 6789, 4212, 7931, 10301, 4737, 6121, 3053, 10275, 4212, 7931, 10301, 4737, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 4737, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 4737, 6121, 4631, 9363, 4212, 7931, 10301, 4737, 6121, 4631, 10275, 4212, 7931, 10301, 4737, 6121, 4943, 9363, 4212, 7931, 10301, 4737, 6121, 4943, 10275, 4212, 7931, 10301, 4943, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 4943, 6121, 1343, 6121, 4631, 9363, 4212, 7931, 10301, 4943, 6121, 1343, 6121, 4943, 9363, 4212, 7931, 10301, 4943, 6121, 1343, 9363, 4212, 7931, 10301, 4943, 6121, 1343, 10275, 4212, 7931, 10301, 4943, 6121, 3053, 10275, 4212, 7931, 10301, 4943, 6121, 3245, 6789, 4212, 7931, 10301, 4943, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 4943, 6121, 4631, 6121, 1343, 9363, 4212, 7931, 10301, 4943, 6121, 4631, 6121, 3053, 6789, 4212, 7931, 10301, 4943, 6121, 4631, 6121, 4737, 9363, 4212, 7931, 10301, 4943, 6121, 4631, 6121, 4943, 9363, 4212, 7931, 10301, 4943, 6121, 4631, 9363, 4212, 7931, 10301, 4943, 6121, 4631, 10275, 4212, 7931, 10301, 4943, 6121, 4737, 6121, 3053, 6789, 4212, 7931, 10301, 4943, 6121, 4737, 6121, 4631, 9363, 4212, 7931, 10301, 4943, 6121, 4737, 6121, 4943, 9363, 4212, 7931, 10301, 4943, 6121, 4737, 9363, 4212, 7931, 10301, 4943, 6121, 4737, 10275, 4212, 7931, 10301, 4943, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 4943, 6121, 4943, 10275, 4212, 7931, 10301, 5241, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 5241, 6121, 1343, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 5241, 6121, 1343, 6121, 4943, 9363, 4212, 7931, 10301, 5241, 6121, 1343, 9363, 4212, 7931, 10301, 5241, 6121, 1343, 10275, 4212, 7931, 10301, 5241, 6121, 1359, 8461, 4212, 7931, 10301, 5241, 6121, 1359, 9363, 4212, 7931, 10301, 5241, 6121, 2405, 6789, 4212, 7931, 10301, 5241, 6121, 3053, 6789, 4212, 7931, 10301, 5241, 6121, 3053, 10275, 4212, 7931, 10301, 5241, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 5241, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 5241, 6121, 4631, 6121, 1343, 6789, 4212, 7931, 10301, 5241, 6121, 4631, 6121, 1343, 9363, 4212, 7931, 10301, 5241, 6121, 4631, 6121, 3053, 6789, 4212, 7931, 10301, 5241, 6121, 4631, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 5241, 6121, 4631, 6121, 4943, 6789, 4212, 7931, 10301, 5241, 6121, 4631, 6121, 4943, 9363, 4212, 7931, 10301, 5241, 6121, 4631, 9363, 4212, 7931, 10301, 5241, 6121, 4631, 10275, 4212, 7931, 10301, 5241, 6121, 4737, 9363, 4212, 7931, 10301, 5241, 6121, 4737, 10275, 4212, 7931, 10301, 5241, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 5241, 6121, 4943, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 5241, 6121, 4943, 6789, 4212, 7931, 10301, 5241, 6121, 4943, 8461, 4212, 7931, 10301, 5241, 6121, 4943, 9363, 4212, 7931, 10301, 5241, 6121, 4943, 10275, 4212, 7931, 10301, 5241, 6121, 5241, 6789, 4212, 7931, 10301, 5241, 6121, 6255, 6789, 4212, 7931, 10301, 5475, 6061, 89, 9411, 5837, 5759, 10275, 4212, 7931, 10301, 5649, 6121, 1343, 6121, 4631, 9363, 4212, 7931, 10301, 5649, 6121, 1343, 8461, 4212, 7931, 10301, 5649, 6121, 1343, 9363, 4212, 7931, 10301, 5649, 6121, 1343, 10275, 4212, 7931, 10301, 5649, 6121, 1359, 8461, 4212, 7931, 10301, 5649, 6121, 1359, 9363, 4212, 7931, 10301, 5649, 6121, 2405, 6789, 4212, 7931, 10301, 5649, 6121, 2405, 10275, 4212, 7931, 10301, 5649, 6121, 3053, 6789, 4212, 7931, 10301, 5649, 6121, 3053, 10275, 4212, 7931, 10301, 5649, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 5649, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 5649, 6121, 4631, 6121, 1343, 9363, 4212, 7931, 10301, 5649, 6121, 4631, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 5649, 6121, 4631, 8461, 4212, 7931, 10301, 5649, 6121, 4631, 9363, 4212, 7931, 10301, 5649, 6121, 4631, 10275, 4212, 7931, 10301, 5649, 6121, 4737, 6121, 3053, 6789, 4212, 7931, 10301, 5649, 6121, 4737, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 5649, 6121, 4737, 8461, 4212, 7931, 10301, 5649, 6121, 4737, 9363, 4212, 7931, 10301, 5649, 6121, 4737, 10275, 4212, 7931, 10301, 5649, 6121, 4943, 6121, 1343, 6789, 4212, 7931, 10301, 5649, 6121, 4943, 6121, 1343, 9363, 4212, 7931, 10301, 5649, 6121, 4943, 6121, 4631, 9363, 4212, 7931, 10301, 5649, 6121, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 5649, 6121, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 5649, 6121, 4943, 8461, 4212, 7931, 10301, 5649, 6121, 4943, 9363, 4212, 7931, 10301, 5649, 6121, 4943, 10275, 4212, 7931, 10301, 5911, 6121, 12355, 3245, 10275, 4212, 7931, 10301, 5917, 6121, 1359, 8461, 4212, 7931, 10301, 5917, 6121, 2405, 6789, 4212, 7931, 10301, 5917, 6121, 3053, 6789, 4212, 7931, 10301, 5917, 6121, 3053, 10275, 4212, 7931, 10301, 5917, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 5917, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 5917, 6121, 4631, 10275, 4212, 7931, 10301, 5917, 6121, 4943, 6789, 4212, 7931, 10301, 5917, 6121, 4943, 8461, 4212, 7931, 10301, 5917, 6121, 4943, 9363, 4212, 7931, 10301, 5917, 6121, 4943, 10275, 4212, 7931, 10301, 5917, 6121, 5241, 6789, 4212, 7931, 10301, 5917, 6121, 6255, 6789, 4212, 7931, 10301, 6393, 10275, 4212, 7931, 10301, 6405, 10275, 4212, 7931, 10301, 6851, 6121, 3053, 6789, 4212, 7931, 10301, 6851, 6121, 3053, 10275, 4212, 7931, 10301, 6851, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 6851, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 6851, 6121, 4631, 9363, 4212, 7931, 10301, 6851, 6121, 4631, 10275, 4212, 7931, 10301, 6851, 6121, 4943, 6121, 3053, 6789, 4212, 7931, 10301, 6851, 6121, 4943, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 6851, 6121, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 6851, 6121, 4943, 9363, 4212, 7931, 10301, 6851, 6121, 4943, 10275, 4212, 7931, 10301, 7479, 10275, 4212, 7931, 10301, 7481, 6061, 89, 9411, 5837, 5759, 10275, 4212, 7931, 10301, 7481, 10275, 4212, 7931, 10301, 7525, 6121, 1343, 6121, 3053, 6789, 4212, 7931, 10301, 7525, 6121, 1343, 6121, 4943, 6789, 4212, 7931, 10301, 7525, 6121, 1343, 6121, 4943, 9363, 4212, 7931, 10301, 7525, 6121, 1343, 6789, 4212, 7931, 10301, 7525, 6121, 1343, 8461, 4212, 7931, 10301, 7525, 6121, 1343, 9363, 4212, 7931, 10301, 7525, 6121, 1343, 10275, 4212, 7931, 10301, 7525, 6121, 1359, 8461, 4212, 7931, 10301, 7525, 6121, 1359, 9363, 4212, 7931, 10301, 7525, 6121, 2405, 6789, 4212, 7931, 10301, 7525, 6121, 2405, 10275, 4212, 7931, 10301, 7525, 6121, 3053, 6789, 4212, 7931, 10301, 7525, 6121, 3053, 10275, 4212, 7931, 10301, 7525, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 7525, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 7525, 6121, 4631, 6121, 3053, 6789, 4212, 7931, 10301, 7525, 6121, 4631, 6789, 4212, 7931, 10301, 7525, 6121, 4631, 8461, 4212, 7931, 10301, 7525, 6121, 4631, 9363, 4212, 7931, 10301, 7525, 6121, 4631, 10275, 4212, 7931, 10301, 7525, 6121, 4737, 6789, 4212, 7931, 10301, 7525, 6121, 4737, 8461, 4212, 7931, 10301, 7525, 6121, 4737, 9363, 4212, 7931, 10301, 7525, 6121, 4737, 10275, 4212, 7931, 10301, 7525, 6121, 4943, 6121, 4737, 6789, 4212, 7931, 10301, 7525, 6121, 4943, 6121, 4737, 9363, 4212, 7931, 10301, 7525, 6121, 4943, 6121, 4943, 6789, 4212, 7931, 10301, 7525, 6121, 4943, 6121, 4943, 9363, 4212, 7931, 10301, 7525, 6121, 4943, 6789, 4212, 7931, 10301, 7525, 6121, 4943, 8461, 4212, 7931, 10301, 7525, 6121, 4943, 9363, 4212, 7931, 10301, 7525, 6121, 4943, 10275, 4212, 7931, 10301, 7917, 10275, 4212, 7931, 10301, 8635, 10275, 4212, 7931, 10301, 8693, 6121, 6645, 8461, 4212, 7931, 10301, 8693, 6121, 6645, 10275, 4212, 7931, 10301, 8693, 6121, 6773, 8461, 4212, 7931, 10301, 8693, 6121, 6773, 10275, 4212, 7931, 10301, 8693, 6121, 7027, 8461, 4212, 7931, 10301, 8693, 6121, 7027, 10275, 4212, 7931, 10301, 8693, 6121, 9979, 10275, 4212, 7931, 10301, 8693, 6121, 10281, 10275, 4212, 7931, 10301, 8693, 6121, 12355, 3245, 10275, 4212, 7931, 10301, 8895, 9405, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 6789, 4212, 7931, 10301, 8895, 9405, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 9363, 4212, 7931, 10301, 8895, 9405, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 10275, 4212, 7931, 10301, 10341, 10275, 4212, 7931, 10301, 10683, 10275, 4212, 7931, 10301, 10741, 10715, 10712, 7931, 10301, 12159, 7917, 10682, 7931, 10301, 13202, 7931, 10469, 4926, 7931, 10489, 6644, 7931, 10692, 7931, 11224, 7931, 11261, 3244, 7931, 11363, 11228, 7971, 46, 7971, 826, 7971, 827, 6121, 46, 7971, 827, 6121, 6568, 7985, 8159, 7274, 7985, 11241, 7274, 8005, 731, 12901, 6434, 8005, 4389, 10260, 8005, 4849, 3958, 8005, 4849, 4389, 9050, 8005, 4849, 8076, 8005, 6627, 9050, 8005, 7443, 3958, 8005, 7443, 4389, 9050, 8005, 7443, 8076, 8005, 8745, 9050, 8005, 8745, 9051, 5387, 2725, 8745, 9050, 8005, 10637, 7533, 9050, 8005, 12114, 8006, 8007, 6121, 4849, 4389, 6504, 8007, 6121, 7443, 4389, 6504, 8017, 760, 8017, 8057, 6121, 11141, 6434, 8022, 8023, 10374, 8027, 2638, 8028, 8033, 8405, 0, 8033, 8405, 2, 8033, 8405, 6, 8033, 8405, 8, 8033, 8405, 12, 8033, 8405, 16, 8033, 8405, 20, 8033, 8405, 22, 8033, 8405, 24, 8033, 8405, 26, 8033, 8405, 28, 8033, 8405, 30, 8033, 8405, 32, 8033, 8405, 34, 8033, 8405, 36, 8033, 8405, 38, 8033, 8405, 40, 8033, 8405, 46, 8033, 8405, 54, 8033, 8405, 136, 8033, 8405, 158, 8033, 8405, 214, 8033, 8405, 266, 8033, 8405, 304, 8033, 8405, 334, 8033, 8405, 366, 8033, 8405, 394, 8033, 8405, 400, 8033, 8405, 410, 8033, 8405, 460, 8033, 8405, 518, 8033, 8405, 530, 8033, 8405, 542, 8033, 8405, 544, 8033, 8405, 574, 8033, 8405, 606, 8033, 8405, 1756, 8033, 8405, 1872, 8033, 8405, 1874, 8033, 8405, 1876, 8033, 8405, 2514, 8033, 8405, 2578, 8033, 8405, 2744, 8033, 8405, 2838, 8033, 8405, 3832, 8033, 8405, 3834, 8033, 8405, 6068, 8033, 8405, 6070, 8033, 8405, 6072, 8037, 4877, 8774, 8048, 8057, 6121, 719, 835, 7773, 4849, 10465, 6504, 8057, 6121, 2779, 11649, 9745, 569, 2681, 7442, 8057, 6121, 4849, 4389, 6504, 8057, 6121, 7121, 4389, 6504, 8057, 6121, 7443, 4389, 6504, 8057, 6121, 7593, 8057, 569, 2681, 7442, 8057, 6121, 7773, 4389, 6504, 8057, 6121, 7773, 7443, 10465, 6504, 8057, 6121, 10677, 4192, 8057, 6121, 11649, 760, 8057, 6121, 12879, 46, 8057, 9177, 115, 11649, 761, 721, 2725, 4389, 9177, 115, 10677, 760, 8065, 7769, 6121, 8688, 8065, 7769, 6121, 8689, 721, 7595, 9610, 8065, 8762, 8065, 8763, 445, 6741, 568, 8065, 10578, 8065, 10579, 445, 6741, 568, 8065, 12493, 6121, 8688, 8066, 8075, 2167, 8523, 4223, 5836, 8075, 2167, 8523, 7793, 9178, 8075, 2167, 8523, 8121, 10469, 4926, 8075, 2167, 8523, 10255, 10469, 4926, 8075, 4223, 5836, 8075, 7593, 8405, 28, 8075, 7593, 8405, 202, 8075, 7593, 8405, 374, 8075, 7593, 8405, 404, 8075, 7593, 8405, 476, 8075, 7593, 8405, 516, 8075, 7593, 8405, 582, 8075, 7593, 8405, 986, 8075, 7593, 8405, 1102, 8075, 7593, 8405, 1154, 8075, 7593, 8405, 1616, 8075, 7593, 8405, 1680, 8075, 7593, 8405, 2167, 8075, 236, 8075, 7593, 8405, 2167, 8075, 710, 8075, 7593, 8405, 2167, 8075, 1020, 8075, 7593, 8405, 2167, 8075, 1124, 8075, 7593, 8405, 2167, 8075, 1352, 8075, 7593, 8405, 2167, 8075, 1360, 8075, 7593, 8405, 2167, 8075, 2180, 8075, 7593, 8405, 2167, 8075, 4534, 8075, 7593, 8405, 2167, 8075, 5680, 8075, 7593, 8405, 2167, 8075, 7542, 8075, 7593, 8405, 2167, 8075, 8238, 8075, 7593, 8405, 2167, 8523, 2036, 8075, 7593, 8405, 2167, 8523, 2132, 8075, 7593, 8405, 2167, 8523, 2916, 8075, 7593, 8405, 2167, 8523, 7542, 8075, 7593, 8405, 2180, 8075, 7593, 8405, 2250, 8075, 7593, 8405, 2560, 8075, 7593, 8405, 2658, 8075, 7593, 8405, 3246, 8075, 7593, 8405, 4394, 8075, 7593, 8405, 4534, 8075, 7593, 8405, 4722, 8075, 7593, 8405, 4746, 8075, 7593, 8405, 5680, 8075, 7593, 8405, 5766, 8075, 7593, 8405, 6082, 8075, 7593, 8405, 6258, 8075, 7593, 8405, 6640, 8075, 7593, 8405, 6824, 8075, 7593, 8405, 6976, 8075, 7593, 8405, 7090, 8075, 7593, 8405, 7484, 8075, 7593, 8405, 7542, 8075, 7593, 8405, 8238, 8075, 7593, 8405, 8816, 8075, 7593, 8405, 9127, 5680, 8075, 7593, 8405, 9861, 4746, 8075, 7593, 8405, 10295, 236, 8075, 7593, 8405, 10807, 404, 8075, 7593, 8405, 10807, 3244, 8075, 7593, 8405, 10807, 4534, 8075, 7593, 8405, 10807, 4722, 8075, 7593, 8405, 12921, 404, 8075, 7593, 8405, 12921, 1102, 8075, 8775, 375, 516, 8075, 8775, 477, 516, 8075, 8775, 1582, 8075, 8775, 1617, 516, 8075, 8775, 2659, 516, 8075, 8775, 7543, 5766, 8075, 8775, 9738, 8075, 9063, 8405, 28, 8075, 9063, 8405, 202, 8075, 9063, 8405, 374, 8075, 9063, 8405, 404, 8075, 9063, 8405, 476, 8075, 9063, 8405, 516, 8075, 9063, 8405, 582, 8075, 9063, 8405, 986, 8075, 9063, 8405, 1102, 8075, 9063, 8405, 1154, 8075, 9063, 8405, 1616, 8075, 9063, 8405, 1680, 8075, 9063, 8405, 2167, 8075, 236, 8075, 9063, 8405, 2167, 8075, 710, 8075, 9063, 8405, 2167, 8075, 1020, 8075, 9063, 8405, 2167, 8075, 1124, 8075, 9063, 8405, 2167, 8075, 1352, 8075, 9063, 8405, 2167, 8075, 1360, 8075, 9063, 8405, 2167, 8075, 2180, 8075, 9063, 8405, 2167, 8075, 4534, 8075, 9063, 8405, 2167, 8075, 5680, 8075, 9063, 8405, 2167, 8075, 7542, 8075, 9063, 8405, 2167, 8075, 8238, 8075, 9063, 8405, 2167, 8523, 2036, 8075, 9063, 8405, 2167, 8523, 2132, 8075, 9063, 8405, 2167, 8523, 2916, 8075, 9063, 8405, 2167, 8523, 7542, 8075, 9063, 8405, 2180, 8075, 9063, 8405, 2250, 8075, 9063, 8405, 2560, 8075, 9063, 8405, 2658, 8075, 9063, 8405, 3246, 8075, 9063, 8405, 4394, 8075, 9063, 8405, 4534, 8075, 9063, 8405, 4722, 8075, 9063, 8405, 4746, 8075, 9063, 8405, 5680, 8075, 9063, 8405, 5766, 8075, 9063, 8405, 6082, 8075, 9063, 8405, 6258, 8075, 9063, 8405, 6640, 8075, 9063, 8405, 6824, 8075, 9063, 8405, 6976, 8075, 9063, 8405, 7090, 8075, 9063, 8405, 7484, 8075, 9063, 8405, 7542, 8075, 9063, 8405, 8238, 8075, 9063, 8405, 8816, 8075, 9063, 8405, 9127, 5680, 8075, 9063, 8405, 9861, 4746, 8075, 9063, 8405, 10295, 236, 8075, 9063, 8405, 10807, 404, 8075, 9063, 8405, 10807, 3244, 8075, 9063, 8405, 10807, 4534, 8075, 9063, 8405, 10807, 4722, 8075, 9063, 8405, 12921, 404, 8075, 9063, 8405, 12921, 1102, 8075, 10203, 2171, 4388, 8075, 12977, 9178, 8083, 5833, 11163, 5759, 10380, 8088, 8097, 1809, 4876, 8097, 10388, 8097, 13235, 11765, 6434, 8101, 5758, 8101, 9076, 8101, 11626, 8117, 1177, 6716, 8117, 1177, 6957, 6716, 8117, 1177, 8403, 3070, 8117, 1177, 8403, 6178, 8117, 1177, 9251, 6956, 8117, 1177, 9251, 8290, 8117, 1177, 9315, 3070, 8117, 1177, 9315, 6178, 8117, 1177, 10239, 6716, 8121, 9129, 8775, 4213, 2778, 8129, 5758, 8133, 5941, 10677, 3696, 8133, 5941, 11649, 3696, 8133, 5941, 13086, 8133, 5941, 13088, 8133, 5941, 13090, 8133, 5941, 13092, 8133, 5941, 13094, 8133, 5941, 13096, 8133, 5941, 13098, 8133, 5941, 13100, 8133, 5941, 13102, 8133, 5941, 13104, 8133, 5941, 13106, 8133, 5941, 13108, 8133, 5941, 13110, 8133, 5941, 13112, 8133, 5941, 13114, 8133, 5941, 13116, 8133, 5941, 13118, 8133, 5941, 13120, 8133, 5941, 13122, 8133, 5941, 13124, 8133, 5941, 13126, 8133, 5941, 13128, 8133, 5941, 13130, 8133, 5941, 13132, 8133, 5941, 13134, 8133, 5941, 13136, 8133, 5941, 13138, 8133, 5941, 13140, 8133, 5941, 13142, 8133, 5941, 13144, 8133, 5941, 13146, 8133, 5941, 13148, 8133, 5941, 13150, 8133, 5941, 13152, 8133, 5941, 13154, 8133, 5941, 13156, 8133, 5941, 13158, 8133, 5941, 13160, 8133, 5941, 13162, 8133, 5941, 13164, 8133, 5941, 13166, 8133, 5941, 13168, 8133, 5941, 13170, 8133, 5941, 13172, 8133, 5941, 13174, 8133, 5941, 13176, 8133, 5941, 13178, 8133, 5941, 13180, 8133, 5941, 13182, 8133, 5941, 13240, 8133, 5941, 13242, 8133, 5941, 13244, 8133, 5941, 13246, 8133, 5941, 13248, 8133, 5941, 13250, 8133, 5941, 13252, 8133, 5941, 13254, 8133, 5941, 13256, 8133, 5941, 13258, 8133, 5941, 13260, 8133, 5941, 13262, 8133, 5941, 13264, 8133, 5941, 13266, 8133, 5941, 13268, 8133, 5941, 13270, 8133, 5941, 13272, 8133, 5941, 13274, 8133, 5941, 13276, 8133, 5941, 13278, 8133, 5941, 13280, 8133, 5941, 13282, 8133, 5941, 13284, 8133, 5941, 13286, 8133, 5941, 13288, 8133, 5941, 13290, 8133, 5941, 13292, 8133, 5941, 13294, 8133, 5941, 13296, 8133, 5941, 13298, 8133, 5941, 13300, 8133, 5941, 13302, 8133, 5941, 13304, 8133, 5941, 13306, 8133, 5941, 13308, 8133, 5941, 13310, 8133, 5941, 13312, 8133, 5941, 13314, 8133, 5941, 13316, 8133, 5941, 13318, 8133, 5941, 13320, 8133, 5941, 13322, 8133, 5941, 13324, 8133, 5941, 13326, 8133, 5941, 13328, 8133, 5941, 13330, 8133, 5941, 13332, 8133, 5941, 13334, 8133, 5941, 13336, 8151, 6622, 8151, 6778, 8151, 8056, 8151, 8528, 8151, 8744, 8151, 13029, 8450, 8151, 13067, 6408, 8153, 601, 5876, 8153, 1809, 4876, 8153, 4117, 5876, 8153, 4849, 731, 12473, 9050, 8153, 5444, 8153, 6107, 10388, 8153, 6379, 7908, 8153, 6611, 6740, 8153, 7119, 11195, 4926, 8153, 7390, 8153, 7391, 11195, 4926, 8153, 7443, 731, 11099, 9050, 8153, 7768, 8153, 8088, 8153, 8509, 11098, 8153, 8509, 11099, 6121, 10666, 8153, 8509, 12472, 8153, 8745, 7768, 8153, 8745, 12492, 8153, 8759, 2091, 5758, 8153, 8762, 8153, 9095, 6689, 2170, 8153, 9095, 6689, 2540, 8153, 9095, 6689, 2778, 8153, 9095, 6689, 4200, 8153, 9095, 6689, 4214, 8153, 9095, 6689, 5190, 8153, 9095, 6689, 6722, 8153, 9095, 6689, 7508, 8153, 9095, 6689, 7694, 8153, 9095, 8525, 2670, 8153, 9437, 444, 8153, 9437, 720, 8153, 9525, 8306, 8153, 9719, 10374, 8153, 10260, 8153, 10452, 8153, 10469, 4926, 8153, 10574, 8153, 10578, 8153, 10677, 761, 4849, 11378, 8153, 10677, 761, 8153, 4849, 11378, 8153, 10677, 761, 8153, 7443, 11378, 8153, 10677, 4876, 8153, 12017, 4926, 8153, 12492, 8153, 13201, 11195, 4926, 8159, 5244, 8167, 5758, 8167, 5759, 721, 9705, 10410, 8167, 5759, 721, 9705, 10411, 6121, 7709, 6376, 8167, 5759, 6121, 1045, 6490, 8167, 5759, 6121, 2779, 4113, 6377, 721, 2779, 4113, 6490, 8167, 5759, 6121, 6537, 6376, 8167, 5759, 6377, 5445, 5758, 8167, 5759, 6377, 7709, 10374, 8167, 5759, 6377, 11097, 6434, 8167, 5759, 6377, 11765, 6434, 8167, 6121, 9898, 8167, 6610, 8172, 8197, 5758, 8203, 3992, 8203, 7608, 8209, 5401, 10260, 8225, 6906, 8226, 8227, 12133, 4926, 8228, 8231, 12108, 8233, 5566, 8235, 6809, 5758, 8246, 8255, 7359, 5758, 8263, 7630, 8267, 8405, 1104, 8267, 8405, 1510, 8267, 8405, 3234, 8267, 8405, 3980, 8267, 8405, 4324, 8267, 8405, 4384, 8267, 8405, 4622, 8267, 8405, 5191, 9344, 8267, 8405, 6056, 8267, 8405, 6768, 8267, 8405, 6960, 8267, 8405, 6984, 8267, 8405, 7064, 8267, 8405, 7078, 8267, 8405, 7130, 8267, 8405, 7322, 8267, 8405, 7416, 8267, 8405, 7490, 8267, 8405, 7674, 8267, 8405, 7828, 8267, 8405, 7912, 8267, 8405, 8502, 8267, 8405, 8514, 8267, 8405, 8822, 8267, 8405, 9018, 8267, 8405, 10394, 8267, 8405, 10462, 8285, 721, 5424, 8285, 721, 8712, 8287, 8153, 1045, 5965, 4926, 8287, 8206, 8287, 8405, 0, 8287, 8405, 8, 8287, 8405, 16, 8287, 8405, 28, 8287, 8405, 40, 8287, 8405, 66, 8287, 8405, 178, 8287, 8405, 188, 8287, 8405, 426, 8287, 8405, 622, 8287, 8405, 626, 8287, 8405, 630, 8287, 8405, 652, 8287, 8405, 654, 8287, 8405, 656, 8287, 8405, 660, 8287, 8405, 664, 8287, 8405, 2908, 8287, 8405, 2926, 8287, 8405, 3012, 8287, 8405, 3056, 8287, 8405, 5770, 8287, 8405, 6216, 8287, 8405, 6230, 8287, 8405, 6422, 8287, 8405, 6594, 8287, 8405, 6912, 8287, 8405, 6982, 8287, 8405, 7166, 8287, 8405, 7244, 8287, 8405, 7372, 8287, 8405, 7440, 8287, 8405, 7862, 8287, 8405, 7866, 8287, 8405, 7932, 8287, 8405, 8362, 8287, 8405, 8828, 8287, 8405, 8950, 8287, 8405, 8956, 8287, 8405, 9086, 8287, 8405, 9400, 8287, 8405, 9562, 8287, 8405, 9588, 8287, 8405, 9780, 8287, 8405, 10686, 8287, 8405, 11248, 8287, 8405, 11682, 8287, 8405, 11696, 8287, 8405, 11728, 8287, 8405, 11758, 8287, 8405, 11804, 8287, 8405, 11812, 8287, 8405, 11814, 8287, 8405, 11824, 8287, 8405, 11826, 8287, 8405, 11828, 8287, 8405, 11830, 8287, 8405, 11832, 8287, 8405, 12070, 8287, 8405, 12080, 8287, 8405, 12094, 8287, 8405, 12096, 8287, 8405, 12124, 8287, 8405, 12144, 8287, 8405, 12146, 8287, 8405, 12150, 8287, 8405, 12346, 8287, 8405, 12348, 8287, 8405, 12350, 8287, 8405, 12352, 8287, 8405, 12388, 8287, 8405, 12514, 8287, 8405, 12518, 8287, 8405, 12520, 8287, 8405, 12532, 8287, 8405, 12534, 8287, 8405, 12958, 8287, 8405, 12960, 8287, 8405, 12972, 8287, 8405, 12978, 8287, 8405, 12998, 8287, 8405, 13004, 8287, 8405, 13006, 8287, 8405, 13008, 8287, 8405, 13034, 8287, 8405, 13204, 8287, 8405, 13348, 8287, 8405, 13354, 8287, 8405, 13366, 8287, 8405, 13368, 8287, 8405, 13370, 8287, 8405, 13374, 8287, 8405, 13386, 8287, 8717, 1045, 5965, 4926, 8287, 9945, 5770, 8287, 9945, 6594, 8287, 9945, 6912, 8287, 9945, 6982, 8287, 9945, 7166, 8287, 9945, 7244, 8287, 9945, 7372, 8287, 9945, 7440, 8287, 9945, 8206, 8287, 9945, 8362, 8287, 9945, 8828, 8287, 9945, 9086, 8287, 9945, 9400, 8287, 9945, 9562, 8287, 9945, 9588, 8287, 9945, 9780, 8287, 9945, 10686, 8287, 9945, 11248, 8287, 9945, 11652, 8287, 9945, 11728, 8287, 9945, 11804, 8287, 9945, 11806, 8287, 9945, 11808, 8287, 9945, 11810, 8287, 9945, 11812, 8287, 9945, 11814, 8287, 9945, 11816, 8287, 9945, 11824, 8287, 9945, 11826, 8287, 9945, 11828, 8287, 9945, 11830, 8287, 9945, 11832, 8287, 9945, 11834, 8287, 9945, 11902, 8287, 9945, 12044, 8287, 9945, 12046, 8287, 9945, 12048, 8287, 9945, 12080, 8287, 9945, 12098, 8287, 9945, 12124, 8287, 9945, 12128, 8287, 9945, 12144, 8287, 9945, 12148, 8287, 9945, 12346, 8287, 9945, 12348, 8287, 9945, 12350, 8287, 9945, 12352, 8287, 9945, 12388, 8287, 9945, 12424, 8287, 9945, 12484, 8287, 9945, 12486, 8287, 9945, 12512, 8287, 9945, 12514, 8287, 9945, 12518, 8287, 9945, 12520, 8287, 9945, 12858, 8287, 9945, 12860, 8287, 9945, 12862, 8287, 9945, 12864, 8287, 9945, 12908, 8287, 9945, 12910, 8287, 9945, 12942, 8287, 9945, 12946, 8287, 9945, 12948, 8287, 9945, 12950, 8287, 9945, 12958, 8287, 9945, 12960, 8287, 9945, 12962, 8287, 9945, 12992, 8287, 9945, 12994, 8287, 9945, 12996, 8287, 9945, 12998, 8287, 9945, 13026, 8287, 9945, 13078, 8287, 9945, 13192, 8287, 9945, 13194, 8287, 9945, 13196, 8287, 9945, 13204, 8287, 9945, 13218, 8287, 9945, 13238, 8287, 9945, 13342, 8287, 9945, 13344, 8287, 9945, 13358, 8287, 9945, 13366, 8287, 9945, 13368, 8287, 9945, 13378, 8287, 9945, 13382, 8287, 9945, 13384, 8287, 9945, 13386, 8287, 9945, 13408, 8287, 9945, 13412, 8287, 11071, 5770, 8287, 11071, 6594, 8287, 11071, 6912, 8287, 11071, 6982, 8287, 11071, 7166, 8287, 11071, 7244, 8287, 11071, 7372, 8287, 11071, 7440, 8287, 11071, 8362, 8287, 11071, 8828, 8287, 11071, 9086, 8287, 11071, 9400, 8287, 11071, 9562, 8287, 11071, 9588, 8287, 11071, 9780, 8287, 11071, 10686, 8287, 11071, 11248, 8287, 11071, 11682, 8287, 11071, 11696, 8287, 11071, 11728, 8287, 11071, 11758, 8287, 11071, 11814, 8287, 11071, 11816, 8287, 11071, 11828, 8287, 11071, 11834, 8287, 11071, 12032, 8287, 11071, 12034, 8287, 11071, 12036, 8287, 11071, 12038, 8287, 11071, 12070, 8287, 11071, 12078, 8287, 11071, 12080, 8287, 11071, 12082, 8287, 11071, 12094, 8287, 11071, 12096, 8287, 11071, 12126, 8287, 11071, 12130, 8287, 11071, 12144, 8287, 11071, 12146, 8287, 11071, 12148, 8287, 11071, 12150, 8287, 11071, 12346, 8287, 11071, 12348, 8287, 11071, 12350, 8287, 11071, 12388, 8287, 11071, 12484, 8287, 11071, 12496, 8287, 11071, 12508, 8287, 11071, 12512, 8287, 11071, 12514, 8287, 11071, 12532, 8287, 11071, 12534, 8287, 11071, 12884, 8287, 11071, 12944, 8287, 11071, 12958, 8287, 11071, 12960, 8287, 11071, 12970, 8287, 11071, 12972, 8287, 11071, 12978, 8287, 11071, 12980, 8287, 11071, 12992, 8287, 11071, 12996, 8287, 11071, 13002, 8287, 11071, 13004, 8287, 11071, 13006, 8287, 11071, 13008, 8287, 11071, 13026, 8287, 11071, 13034, 8287, 11071, 13204, 8287, 11071, 13214, 8287, 11071, 13224, 8287, 11071, 13346, 8287, 11071, 13348, 8287, 11071, 13354, 8287, 11071, 13362, 8287, 11071, 13370, 8287, 11071, 13372, 8287, 11071, 13374, 8287, 11071, 13388, 8287, 11071, 13394, 8287, 11071, 13396, 8287, 11071, 13406, 8287, 11073, 0, 8287, 11073, 8, 8287, 11073, 16, 8287, 11073, 28, 8287, 11073, 40, 8287, 11073, 66, 8287, 11073, 178, 8287, 11073, 188, 8287, 11073, 426, 8287, 11073, 622, 8287, 11073, 626, 8287, 11073, 630, 8287, 11073, 652, 8287, 11073, 654, 8287, 11073, 656, 8287, 11073, 660, 8287, 11073, 664, 8287, 11073, 686, 8287, 11073, 688, 8287, 11073, 1466, 8287, 11073, 1468, 8287, 11073, 1470, 8287, 11073, 2148, 8287, 11073, 2150, 8287, 11073, 2152, 8287, 11073, 2800, 8287, 11073, 2802, 8287, 11073, 2908, 8287, 11073, 2926, 8287, 11073, 3012, 8287, 11073, 3056, 8287, 11073, 4160, 8287, 11073, 4162, 8287, 11073, 4168, 8287, 11073, 4592, 8287, 11073, 4594, 8287, 11073, 5370, 8287, 11073, 5372, 8287, 11073, 6040, 8287, 11073, 6042, 8287, 11073, 6158, 8287, 11073, 6204, 8287, 11073, 6216, 8287, 11073, 6218, 8287, 11073, 6226, 8287, 11073, 6228, 8287, 11073, 6230, 8287, 11073, 6232, 8287, 11073, 6422, 8287, 11073, 6736, 8287, 11073, 6760, 8287, 11073, 7838, 8287, 11073, 7850, 8287, 11073, 7852, 8287, 11073, 7862, 8287, 11073, 7864, 8287, 11073, 7866, 8287, 11073, 8206, 8287, 11073, 8950, 8287, 11073, 8952, 8287, 11073, 8956, 8287, 11073, 9002, 8287, 11073, 9004, 8287, 11073, 9346, 8287, 11073, 9800, 8287, 11073, 9882, 8287, 11073, 11822, 8293, 4927, 7121, 1044, 8293, 4927, 7773, 1044, 8293, 4927, 8455, 8056, 8293, 7383, 2535, 1044, 8293, 7383, 5522, 8293, 7383, 5699, 1044, 8293, 7383, 6901, 7342, 8293, 7383, 6901, 7502, 8293, 7383, 6901, 8620, 8293, 7383, 6914, 8293, 7383, 6948, 8293, 7383, 6949, 6899, 1177, 2852, 8293, 7383, 7148, 8293, 7383, 7342, 8293, 7383, 7502, 8293, 7383, 7536, 8293, 7383, 7742, 8293, 7383, 8087, 445, 7132, 8293, 7383, 8620, 8293, 7383, 8621, 7404, 8293, 7383, 8626, 8293, 7383, 12957, 8910, 8293, 7909, 2168, 8293, 7909, 4054, 8293, 7909, 4604, 8293, 7909, 6439, 8280, 8293, 7909, 6652, 8293, 7909, 7192, 8293, 7909, 7346, 8293, 7909, 7402, 8293, 7909, 7432, 8293, 7909, 7502, 8293, 7909, 7676, 8293, 7909, 7855, 785, 6222, 8293, 7909, 7858, 8293, 7909, 7869, 6816, 8293, 7909, 7869, 7404, 8293, 7909, 7870, 8293, 7909, 7886, 8293, 7909, 8252, 8293, 7909, 8253, 8492, 8293, 7909, 8468, 8293, 7909, 8469, 8346, 8293, 7909, 8568, 8293, 7909, 8623, 5398, 8293, 7909, 8830, 8293, 7909, 9272, 8293, 7909, 9773, 8244, 8293, 7909, 9773, 8624, 8293, 7909, 10310, 8293, 7909, 11016, 8293, 7909, 11798, 8293, 8405, 238, 8293, 8405, 239, 6121, 7132, 8293, 8405, 468, 8293, 8405, 469, 6121, 5522, 8293, 8405, 469, 6121, 8086, 8293, 8405, 788, 8293, 8405, 789, 6121, 5522, 8293, 8405, 789, 6121, 8086, 8293, 8405, 1366, 8293, 8405, 1578, 8293, 8405, 1579, 6121, 5522, 8293, 8405, 1579, 6121, 8086, 8293, 8405, 1892, 8293, 8405, 1893, 6121, 8086, 8293, 8405, 2110, 8293, 8405, 2111, 6121, 8086, 8293, 8405, 2318, 8293, 8405, 2319, 6121, 8086, 8293, 8405, 2660, 8293, 8405, 2661, 6121, 8086, 8293, 8405, 2674, 8293, 8405, 2675, 6121, 8086, 8293, 8405, 2852, 8293, 8405, 2853, 6121, 6948, 8293, 8405, 2853, 6121, 8086, 8293, 8405, 3080, 8293, 8405, 3081, 6121, 6914, 8293, 8405, 3081, 6121, 8086, 8293, 8405, 3244, 8293, 8405, 3245, 6121, 7132, 8293, 8405, 3245, 6121, 7342, 8293, 8405, 3245, 6121, 8620, 8293, 8405, 3292, 8293, 8405, 5538, 8293, 8405, 5539, 6121, 8086, 8293, 8405, 5698, 8293, 8405, 5699, 6121, 2535, 1044, 8293, 8405, 5699, 6121, 5699, 1044, 8293, 8405, 5699, 6121, 8086, 8293, 8405, 5699, 6121, 8087, 721, 2535, 1044, 8293, 8405, 5699, 6121, 8087, 721, 5699, 1044, 8293, 8405, 6115, 238, 8293, 8405, 6115, 1578, 8293, 8405, 6115, 2660, 8293, 8405, 6115, 3244, 8293, 8405, 6115, 5538, 8293, 8405, 6115, 6642, 8293, 8405, 6115, 6789, 1892, 8293, 8405, 6115, 7082, 8293, 8405, 6642, 8293, 8405, 6643, 6121, 8086, 8293, 8405, 6789, 468, 8293, 8405, 6789, 469, 6121, 8086, 8293, 8405, 6789, 1578, 8293, 8405, 6789, 1579, 6121, 8086, 8293, 8405, 6789, 1892, 8293, 8405, 6789, 2110, 8293, 8405, 6789, 7740, 8293, 8405, 6856, 8293, 8405, 6857, 6121, 8086, 8293, 8405, 7082, 8293, 8405, 7083, 6121, 8086, 8293, 8405, 7740, 8293, 8405, 7741, 6121, 8086, 8293, 8405, 7872, 8293, 8405, 7873, 6121, 8086, 8293, 8405, 8660, 8293, 8405, 8661, 6121, 8086, 8293, 8405, 11893, 3292, 8293, 8405, 11893, 5445, 5758, 8293, 10301, 3245, 7082, 8293, 10301, 9847, 2853, 3080, 8293, 10301, 9847, 3081, 3081, 7342, 8293, 10301, 9847, 8153, 2852, 8293, 10301, 9847, 8153, 3080, 8293, 12133, 2111, 9318, 8293, 12133, 2551, 7340, 8293, 12133, 7134, 8293, 12133, 7338, 8293, 12133, 8252, 8293, 12133, 11016, 8306, 8307, 6121, 10804, 8307, 8022, 8337, 9617, 151, 2090, 8337, 9617, 228, 8337, 9617, 229, 8722, 8337, 9617, 720, 8337, 9617, 742, 8337, 9617, 806, 8337, 9617, 824, 8337, 9617, 920, 8337, 9617, 1036, 8337, 9617, 1044, 8337, 9617, 1048, 8337, 9617, 1090, 8337, 9617, 1092, 8337, 9617, 1136, 8337, 9617, 1170, 8337, 9617, 1182, 8337, 9617, 1474, 8337, 9617, 1504, 8337, 9617, 1780, 8337, 9617, 1860, 8337, 9617, 2024, 8337, 9617, 2090, 8337, 9617, 2166, 8337, 9617, 2170, 8337, 9617, 2224, 8337, 9617, 2390, 8337, 9617, 2392, 8337, 9617, 2400, 8337, 9617, 2454, 8337, 9617, 2502, 8337, 9617, 2504, 8337, 9617, 2586, 8337, 9617, 2670, 8337, 9617, 2778, 8337, 9617, 2779, 6896, 8337, 9617, 2834, 8337, 9617, 3762, 8337, 9617, 3788, 8337, 9617, 3794, 8337, 9617, 3798, 8337, 9617, 3800, 8337, 9617, 3805, 429, 6604, 8337, 9617, 3806, 8337, 9617, 3850, 8337, 9617, 3852, 8337, 9617, 3940, 8337, 9617, 3942, 8337, 9617, 3944, 8337, 9617, 4052, 8337, 9617, 4094, 8337, 9617, 4108, 8337, 9617, 4117, 826, 8337, 9617, 4120, 8337, 9617, 4172, 8337, 9617, 4178, 8337, 9617, 4180, 8337, 9617, 4194, 8337, 9617, 4196, 8337, 9617, 4208, 8337, 9617, 4218, 8337, 9617, 4244, 8337, 9617, 4342, 8337, 9617, 4386, 8337, 9617, 4389, 5969, 7736, 8337, 9617, 4390, 8337, 9617, 4398, 8337, 9617, 4402, 8337, 9617, 4530, 8337, 9617, 4536, 8337, 9617, 4608, 8337, 9617, 4628, 8337, 9617, 4824, 8337, 9617, 4834, 8337, 9617, 4844, 8337, 9617, 4846, 8337, 9617, 4850, 8337, 9617, 4872, 8337, 9617, 4876, 8337, 9617, 4894, 8337, 9617, 4895, 8756, 8337, 9617, 4940, 8337, 9617, 5012, 8337, 9617, 5242, 8337, 9617, 5385, 826, 8337, 9617, 5438, 8337, 9617, 5524, 8337, 9617, 5546, 8337, 9617, 5562, 8337, 9617, 5632, 8337, 9617, 5646, 8337, 9617, 5650, 8337, 9617, 5764, 8337, 9617, 5772, 8337, 9617, 5834, 8337, 9617, 5836, 8337, 9617, 5884, 8337, 9617, 5940, 8337, 9617, 5968, 8337, 9617, 6100, 8337, 9617, 6101, 10970, 8337, 9617, 6112, 8337, 9617, 6116, 8337, 9617, 6118, 8337, 9617, 6130, 8337, 9617, 6132, 8337, 9617, 6384, 8337, 9617, 6434, 8337, 9617, 6504, 8337, 9617, 6512, 8337, 9617, 6520, 8337, 9617, 6574, 8337, 9617, 6600, 8337, 9617, 6612, 8337, 9617, 6618, 8337, 9617, 6670, 8337, 9617, 6716, 8337, 9617, 6722, 8337, 9617, 6734, 8337, 9617, 6780, 8337, 9617, 6786, 8337, 9617, 6794, 8337, 9617, 6852, 8337, 9617, 6870, 8337, 9617, 6872, 8337, 9617, 6906, 8337, 9617, 6952, 8337, 9617, 7056, 8337, 9617, 7144, 8337, 9617, 7184, 8337, 9617, 7186, 8337, 9617, 7388, 8337, 9617, 7443, 5385, 826, 8337, 9617, 7446, 8337, 9617, 7526, 8337, 9617, 7532, 8337, 9617, 7548, 8337, 9617, 7551, 8785, 3788, 8337, 9617, 7551, 8824, 8337, 9617, 7580, 8337, 9617, 7582, 8337, 9617, 7584, 8337, 9617, 7592, 8337, 9617, 7602, 8337, 9617, 7604, 8337, 9617, 7612, 8337, 9617, 7616, 8337, 9617, 7628, 8337, 9617, 7634, 8337, 9617, 7642, 8337, 9617, 7654, 8337, 9617, 7662, 8337, 9617, 7704, 8337, 9617, 7726, 8337, 9617, 7730, 8337, 9617, 7812, 8337, 9617, 7816, 8337, 9617, 7820, 8337, 9617, 7830, 8337, 9617, 7832, 8337, 9617, 7942, 8337, 9617, 7964, 8337, 9617, 7974, 8337, 9617, 8000, 8337, 9617, 8008, 8337, 9617, 8078, 8337, 9617, 8118, 8337, 9617, 8151, 5896, 8337, 9617, 8151, 6600, 8337, 9617, 8153, 46, 8337, 9617, 8154, 8337, 9617, 8194, 8337, 9617, 8303, 10970, 8337, 9617, 8316, 8337, 9617, 8476, 8337, 9617, 8484, 8337, 9617, 8542, 8337, 9617, 8678, 8337, 9617, 8680, 8337, 9617, 8730, 8337, 9617, 8734, 8337, 9617, 8740, 8337, 9617, 8744, 8337, 9617, 8793, 9426, 8337, 9617, 8844, 8337, 9617, 8852, 8337, 9617, 8866, 8337, 9617, 8870, 8337, 9617, 8906, 8337, 9617, 8928, 8337, 9617, 8946, 8337, 9617, 9056, 8337, 9617, 9102, 8337, 9617, 9106, 8337, 9617, 9274, 8337, 9617, 9282, 8337, 9617, 9322, 8337, 9617, 9426, 8337, 9617, 9480, 8337, 9617, 9532, 8337, 9617, 9608, 8337, 9617, 9658, 8337, 9617, 9822, 8337, 9617, 9934, 8337, 9617, 10206, 8337, 9617, 10336, 8337, 9617, 10344, 8337, 9617, 10456, 8337, 9617, 10520, 8337, 9617, 10542, 8337, 9617, 10970, 8337, 9617, 11488, 8337, 9617, 11606, 8337, 9617, 11946, 8337, 9617, 12155, 6118, 8349, 5758, 8371, 10539, 8774, 8389, 5912, 8389, 5913, 445, 6741, 568, 8401, 5759, 2388, 8401, 5759, 7282, 8401, 6689, 2170, 8401, 6689, 2540, 8401, 6689, 2778, 8401, 6689, 4200, 8401, 6689, 4214, 8401, 6689, 5190, 8401, 6689, 6260, 8401, 6689, 6722, 8401, 6689, 7508, 8401, 6689, 7694, 8401, 7803, 5759, 8, 8401, 7803, 5759, 16, 8401, 7803, 5759, 28, 8401, 7803, 5759, 40, 8401, 7803, 5759, 58, 8401, 7803, 5759, 440, 8401, 7803, 5759, 606, 8401, 8405, 0, 8401, 8405, 100, 8401, 8405, 116, 8401, 8405, 138, 8401, 8405, 196, 8401, 8405, 216, 8401, 8405, 236, 8401, 8405, 292, 8401, 8405, 306, 8401, 8405, 332, 8401, 8405, 364, 8401, 8405, 392, 8401, 8405, 462, 8401, 8405, 510, 8401, 8405, 524, 8401, 8405, 556, 8401, 8405, 610, 8401, 8405, 622, 8401, 8405, 652, 8401, 8405, 814, 8401, 8405, 884, 8401, 8405, 974, 8401, 8405, 1080, 8401, 8405, 1168, 8401, 8405, 1286, 8401, 8405, 1390, 8401, 8405, 1612, 8401, 8405, 1652, 8401, 8405, 1930, 8401, 8405, 2030, 8401, 8405, 2126, 8401, 8405, 2212, 8401, 8405, 2234, 8401, 8405, 2516, 8401, 8405, 2678, 8401, 8405, 2732, 8401, 8405, 2746, 8401, 8405, 5978, 8401, 8405, 5994, 8401, 10775, 5759, 20, 8401, 10775, 5759, 22, 8401, 10775, 5759, 24, 8401, 10775, 5759, 26, 8401, 10775, 5759, 30, 8401, 10775, 5759, 34, 8401, 10775, 5759, 38, 8401, 10775, 5759, 4720, 8401, 10775, 5759, 9522, 8401, 11257, 8405, 510, 8401, 11257, 8405, 652, 8401, 12133, 5301, 8827, 8782, 8401, 12133, 8038, 8401, 12133, 8782, 8401, 12133, 8856, 8401, 12133, 8857, 8038, 8421, 3, 8775, 3328, 8421, 3, 8775, 3330, 8421, 3, 8775, 3336, 8421, 3, 8775, 3360, 8421, 3, 8775, 3384, 8421, 3, 8775, 3388, 8421, 3, 8775, 3402, 8421, 3, 8775, 3416, 8421, 3, 8775, 3418, 8421, 3, 8775, 3448, 8421, 3, 8775, 3454, 8421, 3, 8775, 3456, 8421, 3, 8775, 3460, 8421, 3, 8775, 3464, 8421, 3, 10247, 3471, 1860, 8421, 3, 10247, 3473, 7830, 8421, 3, 10247, 3475, 4052, 8421, 3, 10247, 3477, 6742, 8421, 3, 10247, 3479, 7816, 8421, 3, 10247, 3481, 7978, 8421, 3, 10247, 3483, 7314, 8421, 3, 10247, 3485, 7614, 8421, 3, 10247, 3487, 9134, 8421, 3, 10247, 3493, 2164, 8421, 3, 10247, 3495, 6118, 8421, 3, 10247, 3496, 8421, 3, 10247, 3503, 8018, 8421, 3, 10247, 3505, 4342, 8421, 3, 10247, 3506, 8421, 3, 10247, 3509, 6124, 8421, 3, 10247, 3510, 8421, 3, 10247, 3512, 8421, 3, 10247, 3515, 4536, 8421, 3, 10247, 3516, 8421, 3, 10247, 3518, 8421, 3, 10247, 3520, 8421, 3, 10247, 3526, 8421, 3, 10247, 3528, 8421, 3, 10247, 3531, 6604, 8421, 3, 10247, 3532, 8421, 3, 10247, 3534, 8421, 3, 10247, 3537, 9300, 8421, 3, 10247, 3539, 7936, 8421, 3, 10247, 3540, 8421, 3, 10247, 3542, 8421, 3, 10247, 3544, 8421, 3, 10247, 3546, 8421, 3, 10247, 3548, 8421, 3, 10247, 3550, 8421, 3, 10247, 3552, 8421, 3, 10247, 3554, 8421, 3, 10247, 3556, 8421, 3, 10247, 3559, 7182, 8421, 3, 10247, 3560, 8421, 3, 10247, 3563, 5968, 8421, 3, 10247, 3564, 8421, 3, 10247, 3566, 8421, 3, 10247, 3568, 8421, 3, 10247, 3570, 8421, 3, 10247, 3572, 8421, 3, 10247, 3574, 8421, 3, 10247, 3576, 8421, 3, 10247, 3578, 8421, 3, 10247, 3580, 8421, 3, 10247, 3582, 8421, 3, 10247, 3584, 8421, 3, 10247, 3587, 8296, 8421, 3, 10247, 3629, 11000, 8421, 3, 10247, 3635, 9030, 8421, 3, 10247, 3645, 7612, 8421, 3, 10247, 3647, 6434, 8421, 3, 10247, 3648, 8421, 3, 10247, 3651, 7656, 8421, 3, 10247, 3652, 8421, 3, 10247, 3654, 8421, 3, 10247, 3657, 9841, 9082, 8421, 3, 10247, 3659, 9082, 8421, 3, 10247, 3661, 9083, 6806, 8421, 3, 10247, 3663, 7818, 8421, 3, 10247, 3664, 8421, 3, 10247, 3666, 8421, 3, 10247, 3670, 8421, 3, 10247, 3672, 8421, 3, 10247, 3676, 8421, 3, 10247, 3678, 8421, 3, 10247, 3680, 8421, 3, 10247, 3683, 3990, 8421, 3, 10247, 3684, 8421, 3, 10247, 3686, 8421, 3, 10247, 3688, 8421, 3, 10247, 3690, 8421, 3, 10247, 3692, 8421, 3, 10247, 6445, 4924, 8421, 3, 10247, 6447, 10536, 8421, 3, 10247, 6449, 1132, 8421, 3, 10247, 6451, 2386, 8421, 3, 10247, 6453, 10516, 8421, 3, 10247, 6455, 9332, 8421, 3, 10247, 6457, 2562, 8421, 3, 10247, 6459, 3796, 8421, 3, 10247, 6461, 920, 8421, 3, 10247, 6463, 3812, 8421, 3, 10247, 8915, 3522, 8421, 3, 10247, 8915, 3588, 8421, 3, 10247, 8915, 3590, 8421, 3, 10247, 8915, 3592, 8421, 3, 10247, 8915, 3594, 8421, 3, 10247, 8915, 3596, 8421, 3, 10247, 8915, 3598, 8421, 3, 10247, 8915, 3600, 8421, 3, 10247, 8915, 3602, 8421, 3, 10247, 8915, 3604, 8421, 3, 10247, 8915, 3606, 8421, 3, 10247, 8915, 3608, 8421, 3, 10247, 8915, 3610, 8421, 3, 10247, 8915, 3612, 8421, 3, 10247, 8915, 3614, 8421, 3, 10247, 8915, 3616, 8421, 3, 10247, 8915, 3618, 8421, 3, 10247, 8915, 3620, 8421, 3, 10247, 8915, 3622, 8421, 3, 10247, 8915, 3624, 8421, 3, 10247, 8915, 3626, 8421, 3, 10247, 8915, 3630, 8421, 3, 10247, 8915, 3632, 8421, 3, 10247, 8915, 3636, 8421, 3, 10247, 8915, 3638, 8421, 3, 10247, 8915, 3640, 8421, 3, 10247, 8915, 3642, 8421, 3, 10247, 8915, 3674, 8421, 3, 10247, 8915, 3694, 8421, 3, 10343, 3489, 4726, 8421, 3, 10343, 3491, 8334, 8421, 3, 10343, 3499, 6424, 8421, 3, 10343, 3501, 4948, 8421, 3, 10343, 3525, 7754, 8421, 3, 10343, 3669, 6692, 8421, 3, 10585, 3295, 138, 8421, 3, 10585, 3297, 516, 8421, 3, 10585, 3299, 462, 8421, 3, 10585, 3301, 560, 8421, 3, 10585, 3303, 568, 8421, 3, 10585, 3305, 392, 8421, 3, 10585, 3307, 144, 8421, 3, 10585, 3309, 0, 8421, 3, 10585, 3311, 526, 8421, 3, 10585, 3313, 40, 8421, 3, 10585, 3315, 480, 8421, 3, 10585, 3317, 536, 8421, 3, 10585, 3319, 368, 8421, 3, 10585, 3321, 150, 8421, 3, 10585, 3323, 380, 8421, 3, 10585, 3325, 496, 8421, 3, 10585, 3327, 670, 8421, 3, 10585, 3333, 678, 8421, 3, 10585, 3335, 500, 8421, 3, 10585, 3339, 384, 8421, 3, 10585, 3341, 396, 8421, 3, 10585, 3343, 54, 8421, 3, 10585, 3345, 520, 8421, 3, 10585, 3347, 512, 8421, 3, 10585, 3349, 16, 8421, 3, 10585, 3351, 2254, 8421, 3, 10585, 3353, 404, 8421, 3, 10585, 3355, 524, 8421, 3, 10585, 3357, 502, 8421, 3, 10585, 3359, 2376, 8421, 3, 10585, 3363, 298, 8421, 3, 10585, 3365, 564, 8421, 3, 10585, 3367, 8, 8421, 3, 10585, 3369, 476, 8421, 3, 10585, 3371, 630, 8421, 3, 10585, 3373, 532, 8421, 3, 10585, 3375, 632, 8421, 3, 10585, 3377, 56, 8421, 3, 10585, 3379, 310, 8421, 3, 10585, 3381, 142, 8421, 3, 10585, 3383, 294, 8421, 3, 10585, 3387, 2122, 8421, 3, 10585, 3391, 486, 8421, 3, 10585, 3393, 152, 8421, 3, 10585, 3395, 412, 8421, 3, 10585, 3397, 514, 8421, 3, 10585, 3399, 622, 8421, 3, 10585, 3401, 416, 8421, 3, 10585, 3405, 292, 8421, 3, 10585, 3407, 546, 8421, 3, 10585, 3409, 556, 8421, 3, 10585, 3411, 510, 8421, 3, 10585, 3413, 28, 8421, 3, 10585, 3415, 2252, 8421, 3, 10585, 3421, 300, 8421, 3, 10585, 3423, 2632, 8421, 3, 10585, 3425, 314, 8421, 3, 10585, 3427, 2422, 8421, 3, 10585, 3429, 576, 8421, 3, 10585, 3431, 322, 8421, 3, 10585, 3433, 1074, 8421, 3, 10585, 3435, 468, 8421, 3, 10585, 3437, 374, 8421, 3, 10585, 3439, 672, 8421, 3, 10585, 3441, 626, 8421, 3, 10585, 3443, 2374, 8421, 3, 10585, 3445, 306, 8421, 3, 10585, 3447, 498, 8421, 3, 10585, 3451, 364, 8421, 3, 10585, 3453, 326, 8421, 3, 10585, 3459, 92, 8421, 3, 10585, 3463, 2774, 8421, 3, 10585, 3467, 1076, 8421, 3, 10585, 3469, 2778, 8429, 8405, 0, 8429, 8405, 2, 8429, 8405, 6, 8429, 8405, 8, 8429, 8405, 12, 8429, 8405, 14, 8429, 8405, 16, 8429, 8405, 18, 8429, 8405, 20, 8429, 8405, 22, 8429, 8405, 24, 8429, 8405, 26, 8429, 8405, 30, 8429, 8405, 32, 8429, 8405, 34, 8429, 8405, 36, 8429, 8405, 38, 8429, 8405, 40, 8429, 8405, 44, 8429, 8405, 46, 8429, 8405, 50, 8429, 8405, 80, 8429, 8405, 104, 8429, 8405, 176, 8429, 8405, 316, 8429, 8405, 378, 8429, 8405, 410, 8429, 8405, 562, 8429, 8405, 574, 8431, 8405, 0, 8431, 8405, 2, 8431, 8405, 4, 8431, 8405, 6, 8431, 8405, 8, 8431, 8405, 10, 8431, 8405, 12, 8431, 8405, 16, 8431, 8405, 20, 8431, 8405, 22, 8431, 8405, 24, 8431, 8405, 26, 8431, 8405, 28, 8431, 8405, 32, 8431, 8405, 34, 8431, 8405, 36, 8431, 8405, 38, 8431, 8405, 40, 8431, 8405, 42, 8431, 8405, 48, 8431, 8405, 80, 8431, 8405, 176, 8431, 8405, 360, 8431, 8405, 410, 8431, 8405, 542, 8431, 8405, 574, 8431, 11859, 4926, 8432, 8463, 4849, 6627, 9051, 10380, 8463, 4849, 12115, 10380, 8463, 6505, 8056, 8463, 7443, 6627, 9051, 10380, 8463, 7443, 12115, 10380, 8463, 7512, 8463, 7593, 7821, 8056, 8463, 7821, 8056, 8463, 10677, 760, 8463, 10997, 4849, 12115, 10380, 8463, 10997, 7443, 12115, 10380, 8463, 12505, 7608, 8463, 12967, 6409, 9051, 10380, 8463, 13067, 6409, 9051, 10380, 8473, 1044, 8480, 8483, 2779, 2584, 8499, 10363, 7608, 8510, 8521, 10573, 428, 8521, 10573, 429, 445, 6741, 568, 8525, 2671, 4223, 5836, 8525, 5758, 8525, 8163, 4223, 5836, 8525, 8875, 4223, 5836, 8525, 8877, 4223, 5836, 8525, 9287, 4223, 5836, 8525, 9701, 4223, 5836, 8525, 10151, 4223, 5836, 8525, 10201, 4223, 5836, 8525, 10361, 4223, 5836, 8525, 10623, 4223, 5836, 8525, 11233, 4223, 5836, 8527, 5758, 8533, 12143, 10758, 8534, 8545, 1610, 8551, 4849, 12114, 8551, 7443, 12114, 8562, 8570, 8581, 5758, 8592, 8595, 9956, 8595, 9957, 5387, 2779, 476, 8609, 4926, 8609, 4927, 4178, 8631, 8151, 12953, 8450, 8631, 8744, 8631, 12953, 8450, 8639, 7803, 5759, 8, 8639, 7803, 5759, 16, 8639, 7803, 5759, 28, 8639, 7803, 5759, 40, 8639, 7803, 5759, 72, 8639, 7803, 5759, 92, 8639, 7803, 5759, 160, 8639, 7803, 5759, 188, 8639, 8405, 0, 8639, 8405, 100, 8639, 8405, 116, 8639, 8405, 138, 8639, 8405, 216, 8639, 8405, 236, 8639, 8405, 292, 8639, 8405, 306, 8639, 8405, 332, 8639, 8405, 364, 8639, 8405, 392, 8639, 8405, 462, 8639, 8405, 510, 8639, 8405, 524, 8639, 8405, 556, 8639, 8405, 622, 8639, 8405, 652, 8639, 8405, 1878, 8639, 8405, 2006, 8639, 8405, 2030, 8639, 8405, 2126, 8639, 8405, 5152, 8639, 8405, 5312, 8639, 8916, 8639, 9665, 4926, 8639, 10775, 5759, 14, 8639, 10775, 5759, 26, 8639, 10775, 5759, 34, 8639, 10775, 5759, 400, 8643, 8774, 8649, 10001, 9967, 7607, 4153, 6434, 8649, 10001, 9967, 9279, 10000, 8668, 8672, 8679, 7593, 8, 8679, 7593, 12, 8679, 7593, 22, 8679, 7593, 28, 8679, 9063, 2, 8679, 9063, 8, 8679, 9063, 10, 8679, 9063, 14, 8679, 9063, 16, 8679, 9063, 22, 8679, 9063, 24, 8679, 9063, 30, 8679, 9063, 34, 8684, 8691, 1044, 8717, 7119, 11195, 4926, 8717, 12967, 6409, 11195, 4926, 8717, 13067, 6409, 11195, 4926, 8717, 13201, 11195, 4926, 8745, 1, 5387, 24, 8745, 5, 5387, 312, 8745, 21, 2162, 8745, 25, 2162, 8745, 25, 5387, 36, 8745, 25, 5387, 37, 9732, 8745, 25, 6624, 8745, 25, 9732, 8745, 43, 5387, 24, 8745, 78, 8745, 92, 8745, 110, 8745, 118, 8745, 120, 8745, 128, 8745, 129, 6624, 8745, 129, 9732, 8745, 130, 8745, 138, 8745, 140, 8745, 146, 8745, 148, 8745, 149, 6624, 8745, 149, 9732, 8745, 190, 8745, 206, 8745, 218, 8745, 234, 8745, 236, 8745, 240, 8745, 248, 8745, 254, 8745, 274, 8745, 286, 8745, 306, 8745, 308, 8745, 312, 8745, 316, 8745, 318, 8745, 320, 8745, 321, 6624, 8745, 321, 9062, 8745, 321, 9732, 8745, 324, 8745, 328, 8745, 330, 8745, 346, 8745, 348, 8745, 358, 8745, 364, 8745, 366, 8745, 367, 7592, 8745, 370, 8745, 376, 8745, 378, 8745, 379, 6624, 8745, 379, 9732, 8745, 382, 8745, 385, 0, 8745, 385, 10, 8745, 385, 12, 8745, 385, 22, 8745, 385, 24, 8745, 385, 36, 8745, 385, 42, 8745, 385, 44, 8745, 386, 8745, 387, 4946, 8745, 388, 8745, 389, 4946, 8745, 392, 8745, 398, 8745, 408, 8745, 414, 8745, 418, 8745, 420, 8745, 452, 8745, 462, 8745, 463, 3260, 8745, 464, 8745, 470, 8745, 474, 8745, 478, 8745, 482, 8745, 484, 8745, 488, 8745, 490, 8745, 540, 8745, 548, 8745, 624, 8745, 760, 8745, 856, 8745, 860, 8745, 928, 8745, 1117, 5047, 7142, 8745, 1117, 5047, 8294, 8745, 1117, 5047, 8778, 8745, 1117, 5047, 9762, 8745, 1118, 8745, 1212, 8745, 1270, 8745, 1298, 8745, 1422, 8745, 1432, 8745, 1622, 8745, 1668, 8745, 1800, 8745, 1908, 8745, 1918, 8745, 1934, 8745, 1946, 8745, 2248, 8745, 2382, 8745, 2383, 5387, 36, 8745, 2383, 5387, 37, 9732, 8745, 2688, 8745, 2720, 8745, 2816, 8745, 3224, 8745, 3790, 8745, 4062, 8745, 4110, 8745, 4208, 8745, 4332, 8745, 4532, 8745, 4612, 8745, 4732, 8745, 4762, 8745, 4849, 5385, 827, 10374, 8745, 4946, 8745, 5008, 8745, 5052, 8745, 5378, 8745, 5380, 8745, 5408, 8745, 5430, 8745, 5534, 8745, 5552, 8745, 5566, 8745, 6121, 2725, 4389, 6504, 8745, 6121, 4849, 4389, 6504, 8745, 6121, 7121, 4849, 10001, 4389, 6504, 8745, 6121, 7121, 7443, 10001, 4389, 6504, 8745, 6121, 7443, 4389, 6504, 8745, 6121, 7773, 4849, 569, 7121, 7443, 4192, 8745, 6121, 7773, 4849, 10001, 4389, 6504, 8745, 6121, 7773, 7443, 569, 7121, 4849, 4192, 8745, 6121, 7773, 7443, 10001, 4389, 6504, 8745, 6121, 8005, 4389, 6504, 8745, 6121, 10001, 11469, 4192, 8745, 6121, 10677, 4192, 8745, 6121, 10779, 9544, 8745, 6121, 11649, 4192, 8745, 6121, 11707, 11469, 4192, 8745, 6234, 8745, 6410, 8745, 6482, 8745, 6630, 8745, 6718, 8745, 6826, 8745, 6828, 8745, 6858, 8745, 6892, 8745, 6950, 8745, 6958, 8745, 6989, 428, 8745, 6989, 429, 445, 2091, 6741, 568, 8745, 6989, 429, 445, 6741, 568, 8745, 7018, 8745, 7034, 8745, 7060, 8745, 7126, 8745, 7128, 8745, 7276, 8745, 7330, 8745, 7352, 8745, 7360, 8745, 7384, 8745, 7443, 5385, 827, 10374, 8745, 7470, 8745, 7504, 8745, 7506, 8745, 7814, 8745, 7840, 8745, 7842, 8745, 7926, 8745, 7950, 8745, 8002, 8745, 8274, 8745, 8300, 8745, 8304, 8745, 8314, 8745, 8372, 8745, 8378, 8745, 8452, 8745, 8572, 8745, 8588, 8745, 8604, 8745, 9016, 8745, 9308, 8745, 9388, 8745, 9390, 8745, 9416, 8745, 9438, 8745, 9444, 8745, 9454, 8745, 9468, 8745, 9470, 8745, 9476, 8745, 9636, 8745, 9646, 8745, 9648, 8745, 9698, 8745, 9926, 8745, 10166, 8745, 10244, 8745, 10379, 428, 8745, 10379, 429, 445, 2091, 6741, 568, 8745, 10379, 429, 445, 6741, 568, 8745, 10392, 8745, 10480, 8745, 10496, 8745, 11028, 8745, 11032, 8745, 11080, 8745, 11084, 8745, 11120, 8745, 11170, 8745, 11668, 8745, 11918, 8745, 12068, 8755, 10385, 7821, 5830, 8763, 428, 8763, 429, 445, 6741, 568, 8763, 429, 445, 6741, 569, 6121, 1045, 6376, 8763, 429, 6121, 2091, 6741, 568, 8763, 429, 6377, 2091, 6741, 568, 8763, 429, 6377, 7709, 10374, 8763, 429, 6377, 7919, 6741, 568, 8763, 429, 6377, 8167, 5758, 8763, 6121, 1044, 8763, 6121, 5445, 5759, 6490, 8763, 6121, 13061, 5759, 6490, 8763, 6377, 8762, 8763, 6377, 10578, 8763, 6377, 11765, 6434, 8773, 7207, 5759, 9328, 8773, 7207, 5759, 9870, 8773, 7207, 5759, 10148, 8773, 7207, 7803, 5759, 0, 8773, 7207, 7803, 5759, 8, 8773, 7207, 7803, 5759, 16, 8773, 7207, 7803, 5759, 40, 8773, 7207, 7803, 5759, 440, 8773, 7207, 8405, 0, 8773, 7207, 8405, 8, 8773, 7207, 8405, 16, 8773, 7207, 8405, 28, 8773, 7207, 8405, 40, 8773, 7207, 8405, 108, 8773, 7207, 8405, 130, 8773, 7207, 8405, 150, 8773, 7207, 8405, 228, 8773, 7207, 8405, 246, 8773, 7207, 8405, 298, 8773, 7207, 8405, 322, 8773, 7207, 8405, 350, 8773, 7207, 8405, 380, 8773, 7207, 8405, 412, 8773, 7207, 8405, 480, 8773, 7207, 8405, 516, 8773, 7207, 8405, 536, 8773, 7207, 8405, 568, 8773, 7207, 8405, 798, 8773, 7207, 8405, 890, 8773, 7207, 8405, 980, 8773, 7207, 8405, 1002, 8773, 7207, 8405, 1266, 8773, 7207, 8405, 1514, 8773, 7207, 8405, 1618, 8773, 7207, 8405, 2218, 8773, 7207, 8405, 2442, 8773, 7207, 8405, 2684, 8773, 7207, 8405, 2754, 8773, 7207, 8405, 4018, 8773, 7207, 8405, 6000, 8773, 7207, 8603, 8442, 8773, 7207, 8603, 8444, 8773, 7207, 8603, 8446, 8773, 7207, 8603, 8448, 8775, 1177, 1109, 429, 5904, 8775, 1177, 1109, 429, 8462, 8775, 1177, 1109, 429, 12886, 8775, 1177, 1109, 429, 12887, 6510, 8775, 1177, 3768, 8775, 1177, 3995, 4881, 8168, 8775, 1177, 4191, 11228, 8775, 1177, 4213, 4182, 8775, 1177, 4877, 4182, 8775, 1177, 5280, 8775, 1177, 6053, 11228, 8775, 1177, 6883, 11228, 8775, 1177, 7539, 274, 8775, 1177, 7539, 2186, 8775, 1177, 7608, 8775, 1177, 7633, 429, 5904, 8775, 1177, 7633, 429, 9334, 8775, 1177, 8026, 8775, 1177, 8102, 8775, 1177, 8103, 4213, 2778, 8775, 1177, 8109, 9117, 2170, 8775, 1177, 8109, 9117, 2778, 8775, 1177, 8109, 9117, 4214, 8775, 1177, 8109, 9117, 7694, 8775, 1177, 8168, 8775, 1177, 8637, 11228, 8775, 1177, 9268, 8775, 1177, 9502, 8775, 1177, 9933, 8642, 8775, 1177, 10357, 11884, 8775, 1177, 10677, 11846, 8775, 1177, 10730, 8775, 1177, 11219, 8724, 8775, 1177, 11649, 11846, 8775, 1177, 11840, 8775, 1177, 11841, 4213, 2778, 8775, 1177, 11884, 8775, 1177, 12359, 4598, 8781, 1109, 429, 11162, 8781, 2779, 10677, 4113, 6376, 8781, 2779, 10677, 4113, 6490, 8781, 6611, 8721, 4848, 8781, 6611, 8721, 7442, 8781, 6751, 6376, 8781, 6751, 6490, 8781, 6905, 6376, 8781, 6905, 6490, 8781, 7198, 8781, 7427, 6376, 8781, 7427, 6490, 8781, 7472, 8781, 7695, 4113, 6376, 8781, 7695, 4113, 6490, 8781, 8151, 7889, 8996, 8781, 8151, 7889, 11648, 8781, 8405, 8, 8781, 8405, 238, 8781, 8405, 468, 8781, 8405, 1920, 8781, 8405, 2110, 8781, 8405, 2662, 8781, 8405, 2918, 8781, 8405, 3776, 8781, 8405, 4410, 8781, 8405, 4724, 8781, 8405, 5476, 8781, 8405, 5554, 8781, 8405, 5698, 8781, 8405, 5902, 8781, 8405, 5903, 10214, 8781, 8405, 6236, 8781, 8405, 6237, 238, 8781, 8405, 6254, 8781, 8405, 6394, 8781, 8405, 6789, 9668, 8781, 8405, 6820, 8781, 8405, 6821, 10214, 8781, 8405, 7474, 8781, 8405, 8090, 8781, 8405, 8384, 8781, 8405, 9185, 8091, 5554, 8781, 8405, 9583, 6496, 8781, 8405, 9583, 8258, 8781, 8405, 9583, 9156, 8781, 8405, 9668, 8781, 8405, 9717, 198, 8781, 8405, 9717, 7046, 8781, 8405, 9717, 7874, 8781, 8405, 10489, 468, 8781, 8405, 12355, 6394, 8781, 8617, 6376, 8781, 8617, 6490, 8781, 8617, 8150, 8781, 8965, 6376, 8781, 8965, 6490, 8781, 8965, 8150, 8781, 9024, 8781, 9525, 4877, 6376, 8781, 9525, 4877, 6490, 8781, 10179, 1044, 8781, 10235, 8530, 8781, 10235, 11118, 8781, 10235, 11432, 8781, 10490, 8781, 11196, 8781, 11259, 4223, 5836, 8781, 11259, 6610, 8781, 11259, 6611, 8721, 7442, 8781, 11649, 6610, 8781, 11914, 8781, 12031, 8150, 8781, 12357, 4223, 5836, 8781, 12357, 6610, 8781, 12357, 6611, 8721, 4848, 8781, 12391, 4926, 8794, 8803, 73, 8399, 4926, 8803, 5759, 7756, 8803, 5759, 8916, 8803, 5759, 9824, 8803, 5759, 9870, 8803, 5759, 9904, 8803, 5759, 11900, 8803, 6689, 2170, 8803, 6689, 2540, 8803, 6689, 2778, 8803, 6689, 4200, 8803, 6689, 4214, 8803, 6689, 5190, 8803, 6689, 6260, 8803, 6689, 6722, 8803, 6689, 7508, 8803, 6689, 7694, 8803, 7803, 5759, 8, 8803, 7803, 5759, 16, 8803, 7803, 5759, 28, 8803, 7803, 5759, 40, 8803, 7803, 5759, 58, 8803, 7803, 5759, 72, 8803, 7803, 5759, 92, 8803, 7803, 5759, 162, 8803, 7803, 5759, 266, 8803, 7803, 5759, 440, 8803, 7803, 5759, 606, 8803, 7803, 5759, 9827, 22, 8803, 7803, 5759, 9827, 34, 8803, 7803, 5759, 9827, 344, 8803, 7803, 5759, 9827, 518, 8803, 8399, 4926, 8803, 8405, 0, 8803, 8405, 8, 8803, 8405, 16, 8803, 8405, 28, 8803, 8405, 40, 8803, 8405, 58, 8803, 8405, 72, 8803, 8405, 92, 8803, 8405, 100, 8803, 8405, 116, 8803, 8405, 138, 8803, 8405, 162, 8803, 8405, 216, 8803, 8405, 236, 8803, 8405, 266, 8803, 8405, 292, 8803, 8405, 306, 8803, 8405, 332, 8803, 8405, 364, 8803, 8405, 392, 8803, 8405, 440, 8803, 8405, 462, 8803, 8405, 510, 8803, 8405, 524, 8803, 8405, 556, 8803, 8405, 606, 8803, 8405, 610, 8803, 8405, 652, 8803, 8405, 792, 8803, 8405, 884, 8803, 8405, 974, 8803, 8405, 996, 8803, 8405, 1080, 8803, 8405, 1260, 8803, 8405, 1512, 8803, 8405, 1612, 8803, 8405, 1796, 8803, 8405, 2030, 8803, 8405, 2076, 8803, 8405, 2126, 8803, 8405, 2212, 8803, 8405, 2438, 8803, 8405, 2516, 8803, 8405, 2566, 8803, 8405, 2678, 8803, 8405, 2732, 8803, 8405, 2746, 8803, 8405, 4016, 8803, 8405, 5994, 8803, 8405, 9827, 22, 8803, 8405, 9827, 34, 8803, 8405, 9827, 344, 8803, 8405, 9827, 518, 8803, 10203, 6689, 2171, 1177, 2161, 8611, 429, 4214, 8803, 10203, 6689, 2171, 1177, 4173, 8611, 429, 4214, 8803, 10203, 6689, 2779, 1177, 2161, 8611, 429, 4214, 8803, 10203, 6689, 2779, 1177, 4173, 8611, 429, 4214, 8803, 10203, 6689, 6261, 1177, 2161, 8611, 429, 4214, 8803, 10203, 6689, 7695, 1177, 2161, 8611, 429, 4214, 8803, 10203, 6689, 7695, 1177, 4173, 8611, 429, 4214, 8811, 7650, 8811, 8405, 568, 8811, 8405, 678, 8811, 8405, 748, 8811, 8405, 1338, 8811, 8405, 1982, 8811, 8405, 2378, 8811, 8405, 3006, 8811, 8405, 3120, 8811, 8405, 3240, 8811, 8405, 4412, 8811, 8405, 4734, 8811, 8405, 5906, 8811, 8405, 5988, 8811, 8405, 6402, 8811, 8405, 6766, 8811, 8405, 6814, 8811, 8405, 7016, 8811, 8405, 7070, 8811, 8405, 7140, 8811, 8405, 7268, 8811, 8405, 7400, 8811, 8405, 7498, 8811, 8405, 7780, 8811, 8405, 7806, 8811, 8405, 8084, 8811, 8405, 8110, 8811, 8405, 8256, 8811, 8405, 8656, 8811, 8405, 8698, 8811, 8405, 8808, 8811, 8405, 9986, 8811, 8405, 10278, 8811, 8405, 10414, 8811, 8405, 10612, 8811, 8405, 10690, 8811, 8405, 10760, 8811, 8405, 11020, 8811, 8405, 11100, 8811, 8405, 11236, 8811, 8968, 8811, 9254, 8811, 9348, 8811, 9526, 8811, 9804, 8811, 10694, 8811, 10964, 8811, 10986, 8811, 11144, 8811, 11146, 8849, 5444, 8849, 6611, 10374, 8849, 7390, 8849, 7708, 8849, 8509, 11098, 8849, 8509, 12472, 8849, 9719, 7995, 10476, 8849, 10260, 8849, 10677, 761, 6121, 11649, 8758, 8849, 10677, 761, 7443, 11378, 8849, 10677, 761, 7995, 10476, 8849, 10677, 761, 10794, 8849, 11649, 761, 6121, 8153, 10677, 8758, 8849, 11649, 761, 6121, 8849, 10677, 8758, 8865, 5758, 8869, 2091, 5758, 8869, 6408, 8869, 6879, 7593, 8405, 4614, 8869, 7593, 10, 8869, 9063, 10, 8869, 10708, 8869, 11767, 9063, 12, 8869, 11767, 9063, 22, 8869, 11767, 9063, 48, 8875, 9601, 6505, 5830, 8900, 8913, 445, 6623, 9610, 8923, 10260, 8927, 10203, 2171, 4388, 8927, 10203, 2171, 6782, 8927, 10203, 2171, 7574, 8927, 10203, 2171, 7686, 8927, 10203, 2171, 8158, 8927, 10203, 2171, 9614, 8927, 10203, 2779, 8200, 8927, 10203, 2779, 8818, 8927, 10203, 4201, 8718, 8927, 10203, 4201, 9258, 8927, 10203, 4215, 8200, 8927, 10203, 7509, 9258, 8927, 10203, 7695, 8200, 8927, 10203, 7695, 9258, 8927, 10203, 7695, 10466, 8939, 9610, 8975, 428, 8981, 5758, 8990, 9011, 5758, 9034, 9039, 93, 8399, 4926, 9039, 5759, 7282, 9039, 5759, 8916, 9039, 5759, 9824, 9039, 5759, 9870, 9039, 5759, 9904, 9039, 5759, 11900, 9039, 6689, 2170, 9039, 6689, 2540, 9039, 6689, 2778, 9039, 6689, 4200, 9039, 6689, 4214, 9039, 6689, 5190, 9039, 6689, 6260, 9039, 6689, 6722, 9039, 6689, 7508, 9039, 6689, 7694, 9039, 7469, 4926, 9039, 7469, 5758, 9039, 7803, 5759, 8, 9039, 7803, 5759, 16, 9039, 7803, 5759, 28, 9039, 7803, 5759, 40, 9039, 7803, 5759, 58, 9039, 7803, 5759, 72, 9039, 7803, 5759, 92, 9039, 7803, 5759, 266, 9039, 7803, 5759, 606, 9039, 7803, 5759, 9827, 22, 9039, 7803, 5759, 9827, 34, 9039, 7803, 5759, 9827, 344, 9039, 7803, 5759, 9827, 518, 9039, 8322, 9039, 8405, 0, 9039, 8405, 8, 9039, 8405, 16, 9039, 8405, 28, 9039, 8405, 40, 9039, 8405, 58, 9039, 8405, 72, 9039, 8405, 92, 9039, 8405, 100, 9039, 8405, 116, 9039, 8405, 138, 9039, 8405, 216, 9039, 8405, 236, 9039, 8405, 266, 9039, 8405, 292, 9039, 8405, 306, 9039, 8405, 332, 9039, 8405, 364, 9039, 8405, 392, 9039, 8405, 462, 9039, 8405, 510, 9039, 8405, 511, 6121, 7121, 10000, 9039, 8405, 511, 6121, 8473, 10000, 9039, 8405, 524, 9039, 8405, 556, 9039, 8405, 606, 9039, 8405, 652, 9039, 8405, 792, 9039, 8405, 884, 9039, 8405, 974, 9039, 8405, 996, 9039, 8405, 1260, 9039, 8405, 1512, 9039, 8405, 1612, 9039, 8405, 2030, 9039, 8405, 2076, 9039, 8405, 2126, 9039, 8405, 2212, 9039, 8405, 2410, 9039, 8405, 2438, 9039, 8405, 2516, 9039, 8405, 2566, 9039, 8405, 2678, 9039, 8405, 2746, 9039, 8405, 3110, 9039, 8405, 4016, 9039, 8405, 5994, 9039, 8405, 8357, 556, 9039, 8405, 9827, 22, 9039, 8405, 9827, 34, 9039, 8405, 9827, 344, 9039, 8405, 9827, 518, 9039, 9971, 11143, 2170, 9039, 9971, 11143, 2171, 4853, 5913, 2681, 11932, 9039, 9971, 11143, 2778, 9039, 9971, 11143, 4214, 9039, 9971, 11143, 7694, 9039, 9971, 11933, 9700, 9041, 5550, 9041, 5551, 6121, 8056, 9042, 9053, 9575, 6508, 9053, 9575, 8134, 9053, 9575, 8136, 9053, 9575, 8138, 9053, 9575, 8140, 9053, 9575, 8142, 9053, 9575, 8144, 9053, 9575, 8146, 9053, 9575, 8148, 9053, 9575, 9186, 9053, 9575, 9188, 9053, 9575, 9190, 9053, 9575, 9192, 9053, 9575, 9194, 9053, 9575, 9196, 9053, 9575, 9198, 9053, 9575, 9200, 9053, 9575, 9202, 9053, 9575, 9204, 9053, 9575, 9206, 9053, 9575, 9208, 9053, 9575, 9210, 9053, 9575, 9212, 9053, 9575, 9214, 9053, 9575, 9216, 9053, 9575, 9218, 9053, 9575, 9220, 9053, 9575, 9222, 9053, 9575, 9224, 9053, 9575, 9226, 9053, 9575, 9228, 9053, 9575, 9230, 9053, 9575, 9232, 9053, 9575, 9234, 9053, 9575, 9236, 9053, 9575, 9238, 9053, 9575, 9240, 9053, 9575, 10020, 9053, 9575, 10022, 9053, 9575, 10024, 9053, 9575, 10026, 9053, 9575, 10028, 9053, 9575, 10030, 9053, 9575, 10032, 9053, 9575, 10034, 9053, 9575, 10036, 9053, 9575, 10038, 9053, 9575, 10040, 9053, 9575, 10042, 9053, 9575, 10044, 9053, 9575, 10046, 9053, 9575, 10048, 9053, 9575, 10050, 9053, 9575, 10052, 9053, 9575, 10054, 9053, 9575, 10056, 9053, 9575, 10058, 9053, 9575, 10060, 9053, 9575, 10062, 9053, 9575, 10064, 9053, 9575, 10066, 9053, 9575, 10068, 9053, 9575, 10070, 9053, 9575, 10072, 9053, 9575, 10074, 9053, 9575, 10076, 9053, 9575, 10078, 9053, 9575, 10080, 9053, 9575, 10082, 9053, 9575, 10084, 9053, 9575, 10086, 9053, 9575, 10088, 9053, 9575, 10090, 9053, 9575, 10092, 9053, 9575, 10094, 9053, 9575, 10096, 9053, 9575, 10098, 9053, 9575, 10100, 9053, 9575, 10102, 9053, 9575, 10104, 9053, 9575, 10106, 9053, 9575, 10108, 9053, 9575, 10110, 9053, 9575, 10112, 9053, 9575, 10114, 9053, 9575, 10116, 9053, 9575, 10118, 9053, 9575, 10120, 9053, 9575, 10122, 9053, 9575, 10124, 9053, 9575, 10126, 9053, 9575, 10128, 9053, 9575, 10130, 9053, 9575, 10818, 9053, 9575, 10820, 9053, 9575, 10822, 9053, 9575, 10824, 9053, 9575, 10826, 9053, 9575, 10828, 9053, 9575, 10830, 9053, 9575, 10832, 9053, 9575, 10834, 9053, 9575, 10836, 9053, 9575, 10838, 9053, 9575, 10840, 9053, 9575, 10842, 9053, 9575, 10844, 9053, 9575, 10846, 9053, 9575, 10848, 9053, 9575, 10850, 9053, 9575, 10852, 9053, 9575, 10854, 9053, 9575, 10856, 9053, 9575, 10858, 9053, 9575, 10860, 9053, 9575, 10862, 9053, 9575, 10864, 9053, 9575, 10866, 9053, 9575, 10868, 9053, 9575, 10870, 9053, 9575, 10872, 9053, 9575, 10874, 9053, 9575, 10876, 9053, 9575, 10878, 9053, 9575, 10880, 9053, 9575, 10882, 9053, 9575, 10884, 9053, 9575, 10886, 9053, 9575, 10888, 9053, 9575, 10890, 9053, 9575, 10892, 9053, 9575, 10894, 9053, 9575, 10896, 9053, 9575, 10898, 9053, 9575, 10900, 9053, 9575, 10902, 9053, 9575, 10904, 9053, 9575, 10906, 9053, 9575, 10908, 9053, 9575, 10910, 9053, 9575, 10912, 9053, 9575, 10914, 9053, 9575, 10916, 9053, 9575, 10918, 9053, 9575, 10920, 9053, 9575, 10922, 9053, 9575, 10924, 9053, 9575, 10926, 9053, 9575, 10928, 9053, 9575, 10930, 9053, 9575, 10932, 9053, 9575, 10934, 9053, 9575, 10936, 9053, 9575, 10938, 9053, 9575, 10940, 9053, 9575, 10942, 9053, 9575, 10944, 9053, 9575, 10946, 9053, 9575, 10948, 9053, 9575, 10950, 9053, 9575, 10952, 9053, 9575, 10954, 9053, 9575, 10956, 9053, 9575, 11490, 9053, 9575, 11492, 9053, 9575, 11494, 9053, 9575, 11496, 9053, 9575, 11498, 9053, 9575, 11500, 9053, 9575, 11502, 9053, 9575, 11504, 9053, 9575, 11506, 9053, 9575, 11508, 9053, 9575, 11510, 9053, 9575, 11512, 9053, 9575, 11514, 9053, 9575, 11516, 9053, 9575, 11518, 9053, 9575, 11520, 9053, 9575, 11522, 9053, 9575, 11524, 9053, 9575, 11526, 9053, 9575, 11528, 9053, 9575, 11530, 9053, 9575, 11532, 9053, 9575, 11534, 9053, 9575, 11536, 9053, 9575, 11538, 9053, 9575, 11540, 9053, 9575, 11542, 9053, 9575, 11544, 9053, 9575, 11546, 9053, 9575, 11548, 9053, 9575, 11550, 9053, 9575, 11552, 9053, 9575, 11554, 9053, 9575, 11556, 9053, 9575, 11558, 9053, 9575, 11560, 9053, 9575, 11562, 9053, 9575, 11564, 9053, 9575, 11566, 9053, 9575, 11568, 9053, 9575, 11570, 9053, 9575, 11572, 9053, 9575, 11574, 9053, 9575, 11576, 9053, 9575, 11578, 9053, 9575, 11580, 9053, 9575, 11582, 9053, 9575, 11584, 9053, 9575, 11586, 9053, 9575, 11588, 9053, 9575, 11590, 9053, 9575, 11592, 9053, 9575, 11594, 9053, 9575, 11596, 9053, 9575, 11598, 9053, 9575, 11600, 9053, 9575, 11950, 9053, 9575, 11952, 9053, 9575, 11954, 9053, 9575, 11956, 9053, 9575, 11958, 9053, 9575, 11960, 9053, 9575, 11962, 9053, 9575, 11964, 9053, 9575, 11966, 9053, 9575, 11968, 9053, 9575, 11970, 9053, 9575, 11972, 9053, 9575, 11974, 9053, 9575, 11976, 9053, 9575, 11978, 9053, 9575, 11980, 9053, 9575, 11982, 9053, 9575, 11984, 9053, 9575, 11986, 9053, 9575, 11988, 9053, 9575, 11990, 9053, 9575, 11992, 9053, 9575, 11994, 9053, 9575, 11996, 9053, 9575, 11998, 9053, 9575, 12000, 9053, 9575, 12002, 9053, 9575, 12004, 9053, 9575, 12444, 9053, 9575, 12446, 9053, 9575, 12448, 9053, 9575, 12450, 9053, 9575, 12452, 9053, 9575, 12454, 9053, 9575, 12456, 9053, 9575, 12458, 9053, 9575, 12926, 9069, 5758, 9072, 9095, 1045, 10374, 9095, 3992, 9095, 5385, 8037, 6723, 9601, 5830, 9095, 5444, 9095, 5551, 10374, 9095, 6689, 2170, 9095, 6689, 2540, 9095, 6689, 2778, 9095, 6689, 4200, 9095, 6689, 4214, 9095, 6689, 5190, 9095, 6689, 6260, 9095, 6689, 6722, 9095, 6689, 7508, 9095, 6689, 7694, 9095, 6909, 7821, 11765, 6434, 9095, 7089, 7593, 8405, 0, 9095, 7089, 7593, 8405, 2, 9095, 7089, 7593, 8405, 4, 9095, 7089, 7593, 8405, 6, 9095, 7089, 7593, 8405, 8, 9095, 7089, 7593, 8405, 10, 9095, 7089, 7593, 8405, 12, 9095, 7089, 7593, 8405, 14, 9095, 7089, 7593, 8405, 16, 9095, 7089, 7593, 8405, 18, 9095, 7089, 7593, 8405, 20, 9095, 7089, 7593, 8405, 22, 9095, 7089, 7593, 8405, 24, 9095, 7089, 7593, 8405, 26, 9095, 7089, 7593, 8405, 28, 9095, 7089, 7593, 8405, 30, 9095, 7089, 7593, 8405, 32, 9095, 7089, 7593, 8405, 34, 9095, 7089, 7593, 8405, 36, 9095, 7089, 7593, 8405, 38, 9095, 7089, 7593, 8405, 40, 9095, 7089, 7593, 8405, 42, 9095, 7089, 7593, 8405, 44, 9095, 7089, 7593, 8405, 46, 9095, 7089, 7593, 8405, 48, 9095, 7089, 7593, 8405, 50, 9095, 7089, 9063, 8405, 0, 9095, 7089, 9063, 8405, 2, 9095, 7089, 9063, 8405, 4, 9095, 7089, 9063, 8405, 6, 9095, 7089, 9063, 8405, 8, 9095, 7089, 9063, 8405, 10, 9095, 7089, 9063, 8405, 12, 9095, 7089, 9063, 8405, 14, 9095, 7089, 9063, 8405, 16, 9095, 7089, 9063, 8405, 18, 9095, 7089, 9063, 8405, 20, 9095, 7089, 9063, 8405, 22, 9095, 7089, 9063, 8405, 24, 9095, 7089, 9063, 8405, 26, 9095, 7089, 9063, 8405, 28, 9095, 7089, 9063, 8405, 30, 9095, 7089, 9063, 8405, 32, 9095, 7089, 9063, 8405, 34, 9095, 7089, 9063, 8405, 36, 9095, 7089, 9063, 8405, 38, 9095, 7089, 9063, 8405, 40, 9095, 7089, 9063, 8405, 42, 9095, 7089, 9063, 8405, 44, 9095, 7089, 9063, 8405, 46, 9095, 7089, 9063, 8405, 48, 9095, 7089, 9063, 8405, 50, 9095, 7172, 9095, 7710, 9095, 7821, 5830, 9095, 7821, 8022, 9095, 8022, 9095, 8166, 9095, 8287, 5770, 9095, 8287, 5771, 0, 9095, 8287, 6594, 9095, 8287, 6595, 0, 9095, 8287, 6912, 9095, 8287, 6913, 0, 9095, 8287, 6982, 9095, 8287, 6983, 0, 9095, 8287, 6983, 40, 9095, 8287, 7166, 9095, 8287, 7167, 0, 9095, 8287, 7244, 9095, 8287, 7245, 0, 9095, 8287, 7372, 9095, 8287, 7373, 0, 9095, 8287, 7440, 9095, 8287, 7441, 0, 9095, 8287, 8362, 9095, 8287, 8363, 0, 9095, 8287, 8828, 9095, 8287, 8829, 0, 9095, 8287, 9086, 9095, 8287, 9087, 0, 9095, 8287, 9400, 9095, 8287, 9401, 0, 9095, 8287, 9588, 9095, 8287, 9589, 0, 9095, 8287, 9780, 9095, 8287, 9781, 0, 9095, 8371, 10759, 7014, 9095, 8371, 10759, 8040, 9095, 8525, 2670, 9095, 8525, 6784, 9095, 8525, 6804, 9095, 8525, 6805, 2170, 9095, 8525, 6805, 2540, 9095, 8525, 6805, 2778, 9095, 8525, 6805, 4200, 9095, 8525, 6805, 4214, 9095, 8525, 6805, 5190, 9095, 8525, 6805, 6722, 9095, 8525, 6805, 7508, 9095, 8525, 6805, 7694, 9095, 8525, 8162, 9095, 8525, 8820, 9095, 8525, 8821, 2170, 9095, 8525, 8821, 2540, 9095, 8525, 8821, 2778, 9095, 8525, 8821, 4200, 9095, 8525, 8821, 4214, 9095, 8525, 8821, 5190, 9095, 8525, 8821, 6722, 9095, 8525, 8821, 7508, 9095, 8525, 8821, 7694, 9095, 8525, 8874, 9095, 8525, 8876, 9095, 8525, 8877, 2170, 9095, 8525, 8877, 2540, 9095, 8525, 8877, 2778, 9095, 8525, 8877, 4200, 9095, 8525, 8877, 4214, 9095, 8525, 8877, 5190, 9095, 8525, 8877, 6722, 9095, 8525, 8877, 7508, 9095, 8525, 8877, 7694, 9095, 8525, 9286, 9095, 8525, 9700, 9095, 8525, 10150, 9095, 8525, 10200, 9095, 8525, 10360, 9095, 8525, 10622, 9095, 8525, 11232, 9095, 8609, 4926, 9095, 9633, 9718, 9095, 9899, 10374, 9095, 10017, 5758, 9095, 10017, 7580, 9095, 10283, 0, 9095, 10283, 8, 9095, 10283, 16, 9095, 10283, 28, 9095, 10283, 40, 9095, 10283, 236, 9095, 10283, 238, 9095, 10283, 242, 9095, 10283, 246, 9095, 10283, 250, 9095, 10283, 306, 9095, 10283, 310, 9095, 10283, 314, 9095, 10283, 322, 9095, 10283, 326, 9095, 10283, 364, 9095, 10283, 368, 9095, 10283, 374, 9095, 10283, 380, 9095, 10283, 384, 9095, 10283, 392, 9095, 10283, 396, 9095, 10283, 404, 9095, 10283, 412, 9095, 10283, 416, 9095, 10283, 510, 9095, 10283, 512, 9095, 10283, 514, 9095, 10283, 516, 9095, 10283, 520, 9095, 10283, 524, 9095, 10283, 526, 9095, 10283, 532, 9095, 10283, 536, 9095, 10283, 546, 9095, 10283, 556, 9095, 10283, 560, 9095, 10283, 564, 9095, 10283, 568, 9095, 10283, 576, 9095, 10283, 622, 9095, 10283, 626, 9095, 10283, 630, 9095, 10283, 632, 9095, 10283, 652, 9095, 10283, 660, 9095, 10283, 664, 9095, 10410, 9095, 10643, 4116, 9095, 10677, 760, 9095, 11043, 1808, 9095, 11043, 2170, 9095, 11043, 2540, 9095, 11043, 2586, 9095, 11043, 2670, 9095, 11043, 2778, 9095, 11043, 3956, 9095, 11043, 4194, 9095, 11043, 4200, 9095, 11043, 4214, 9095, 11043, 4396, 9095, 11043, 4422, 9095, 11043, 4620, 9095, 11043, 4848, 9095, 11043, 4922, 9095, 11043, 5012, 9095, 11043, 5046, 9095, 11043, 5190, 9095, 11043, 5540, 9095, 11043, 6122, 9095, 11043, 6716, 9095, 11043, 6722, 9095, 11043, 7072, 9095, 11043, 7146, 9095, 11043, 7246, 9095, 11043, 7392, 9095, 11043, 7442, 9095, 11043, 7508, 9095, 11043, 7640, 9095, 11043, 7646, 9095, 11043, 7694, 9095, 11043, 7812, 9095, 11043, 8036, 9095, 11043, 8196, 9095, 11043, 8682, 9095, 11043, 9122, 9095, 11043, 9714, 9095, 11043, 9724, 9095, 11043, 9862, 9095, 11043, 10328, 9095, 11043, 10478, 9095, 11043, 10484, 9095, 11043, 10576, 9095, 11043, 10726, 9095, 11043, 10980, 9095, 11043, 10992, 9095, 11043, 11266, 9095, 11043, 11612, 9095, 11043, 13050, 9095, 11098, 9095, 11649, 761, 6121, 7272, 9095, 12472, 9095, 12990, 9095, 13061, 5759, 6121, 11449, 7908, 9095, 13411, 10017, 5758, 9109, 7666, 9115, 10260, 9127, 8770, 9137, 10585, 0, 9137, 10585, 8, 9137, 10585, 16, 9137, 10585, 28, 9137, 10585, 40, 9137, 10585, 292, 9137, 10585, 298, 9137, 10585, 306, 9137, 10585, 310, 9137, 10585, 314, 9137, 10585, 322, 9137, 10585, 326, 9137, 10585, 332, 9137, 10585, 336, 9137, 10585, 340, 9137, 10585, 350, 9137, 10585, 354, 9137, 10585, 364, 9137, 10585, 368, 9137, 10585, 374, 9137, 10585, 380, 9137, 10585, 384, 9137, 10585, 392, 9137, 10585, 396, 9137, 10585, 404, 9137, 10585, 412, 9137, 10585, 416, 9137, 10585, 462, 9137, 10585, 468, 9137, 10585, 476, 9137, 10585, 480, 9137, 10585, 486, 9137, 10585, 510, 9137, 10585, 512, 9137, 10585, 514, 9137, 10585, 516, 9137, 10585, 520, 9137, 10585, 524, 9137, 10585, 526, 9137, 10585, 532, 9137, 10585, 536, 9137, 10585, 546, 9137, 10585, 556, 9137, 10585, 560, 9137, 10585, 564, 9137, 10585, 568, 9137, 10585, 576, 9137, 10585, 622, 9137, 10585, 626, 9137, 10585, 630, 9137, 10585, 632, 9137, 10585, 638, 9137, 10585, 640, 9137, 10585, 670, 9137, 10585, 678, 9151, 11229, 1611, 8774, 9155, 7593, 8405, 14, 9155, 7593, 8405, 98, 9155, 7593, 8405, 164, 9155, 7593, 8405, 172, 9155, 7593, 8405, 174, 9155, 7593, 8405, 176, 9155, 7593, 8405, 182, 9155, 7593, 8405, 184, 9155, 7593, 8405, 192, 9155, 7593, 8405, 432, 9155, 7593, 8405, 454, 9155, 7593, 8405, 634, 9155, 7593, 8405, 778, 9155, 7593, 8405, 984, 9155, 7593, 8405, 1110, 9155, 7593, 8405, 1124, 9155, 7593, 8405, 1130, 9155, 7593, 8405, 1226, 9155, 7593, 8405, 1506, 9155, 7593, 8405, 1596, 9155, 7593, 8405, 2204, 9155, 7593, 8405, 2666, 9155, 7593, 8405, 2856, 9155, 7593, 8405, 3050, 9155, 7593, 8405, 3138, 9155, 7593, 8405, 3890, 9155, 7593, 8405, 4895, 0, 9155, 7593, 8405, 4895, 8, 9155, 7593, 8405, 4895, 16, 9155, 7593, 8405, 4895, 28, 9155, 7593, 8405, 4895, 70, 9155, 7593, 8405, 4895, 440, 9155, 7593, 8405, 5914, 9155, 7593, 8405, 6274, 9155, 7593, 8405, 7551, 0, 9155, 7593, 8405, 7551, 8, 9155, 7593, 8405, 7551, 16, 9155, 7593, 8405, 7551, 28, 9155, 7593, 8405, 7551, 70, 9155, 7593, 8405, 7551, 440, 9155, 9063, 8405, 14, 9155, 9063, 8405, 98, 9155, 9063, 8405, 164, 9155, 9063, 8405, 172, 9155, 9063, 8405, 174, 9155, 9063, 8405, 176, 9155, 9063, 8405, 182, 9155, 9063, 8405, 184, 9155, 9063, 8405, 192, 9155, 9063, 8405, 432, 9155, 9063, 8405, 454, 9155, 9063, 8405, 634, 9155, 9063, 8405, 778, 9155, 9063, 8405, 984, 9155, 9063, 8405, 1110, 9155, 9063, 8405, 1124, 9155, 9063, 8405, 1130, 9155, 9063, 8405, 1226, 9155, 9063, 8405, 1506, 9155, 9063, 8405, 1596, 9155, 9063, 8405, 2204, 9155, 9063, 8405, 2666, 9155, 9063, 8405, 2856, 9155, 9063, 8405, 3050, 9155, 9063, 8405, 3138, 9155, 9063, 8405, 3890, 9155, 9063, 8405, 4895, 0, 9155, 9063, 8405, 4895, 8, 9155, 9063, 8405, 4895, 16, 9155, 9063, 8405, 4895, 28, 9155, 9063, 8405, 4895, 70, 9155, 9063, 8405, 4895, 440, 9155, 9063, 8405, 5914, 9155, 9063, 8405, 6274, 9155, 9063, 8405, 7551, 0, 9155, 9063, 8405, 7551, 8, 9155, 9063, 8405, 7551, 16, 9155, 9063, 8405, 7551, 28, 9155, 9063, 8405, 7551, 70, 9155, 9063, 8405, 7551, 440, 9159, 6121, 2725, 4389, 6504, 9159, 6121, 4849, 4389, 6504, 9159, 6121, 7443, 4389, 6504, 9159, 6121, 8005, 4389, 6504, 9159, 10374, 9171, 9095, 11767, 6689, 2170, 9171, 9095, 11767, 6689, 2540, 9171, 9095, 11767, 6689, 2778, 9171, 9095, 11767, 6689, 4200, 9171, 9095, 11767, 6689, 4214, 9171, 9095, 11767, 6689, 5190, 9171, 9095, 11767, 6689, 6722, 9171, 9095, 11767, 6689, 7508, 9171, 9095, 11767, 6689, 7694, 9171, 9095, 11767, 8525, 2670, 9171, 10357, 9095, 6689, 2170, 9171, 10357, 9095, 6689, 2540, 9171, 10357, 9095, 6689, 2778, 9171, 10357, 9095, 6689, 4200, 9171, 10357, 9095, 6689, 4214, 9171, 10357, 9095, 6689, 5190, 9171, 10357, 9095, 6689, 6722, 9171, 10357, 9095, 6689, 7508, 9171, 10357, 9095, 6689, 7694, 9171, 10357, 9095, 8525, 2670, 9171, 10357, 9095, 11767, 6689, 2170, 9171, 10357, 9095, 11767, 6689, 2540, 9171, 10357, 9095, 11767, 6689, 2778, 9171, 10357, 9095, 11767, 6689, 4200, 9171, 10357, 9095, 11767, 6689, 4214, 9171, 10357, 9095, 11767, 6689, 5190, 9171, 10357, 9095, 11767, 6689, 6722, 9171, 10357, 9095, 11767, 6689, 7508, 9171, 10357, 9095, 11767, 6689, 7694, 9171, 10357, 9095, 11767, 8525, 2670, 9180, 9183, 8774, 9243, 4923, 5758, 9243, 8197, 5758, 9245, 5758, 9263, 428, 9263, 429, 6121, 1045, 6376, 9263, 429, 6121, 2779, 11649, 9744, 9263, 429, 6121, 4895, 11649, 8758, 9263, 429, 6121, 9546, 9263, 429, 6121, 10666, 9263, 429, 6121, 10677, 761, 91, 1109, 429, 11649, 8758, 9263, 429, 9537, 9810, 9263, 429, 9537, 10958, 9279, 10001, 9967, 7271, 4153, 6434, 9279, 10001, 9967, 8649, 10000, 9288, 9292, 9297, 2830, 9317, 5758, 9325, 5759, 10400, 9325, 7803, 5759, 16, 9325, 7803, 5759, 40, 9325, 8405, 0, 9325, 8405, 16, 9325, 8405, 40, 9325, 8405, 100, 9325, 8405, 138, 9325, 8405, 216, 9325, 8405, 236, 9325, 8405, 306, 9325, 8405, 332, 9325, 8405, 364, 9325, 8405, 392, 9325, 8405, 462, 9325, 8405, 510, 9325, 8405, 524, 9325, 8405, 556, 9325, 8405, 622, 9325, 8405, 652, 9325, 8405, 2030, 9343, 5758, 9361, 7931, 4213, 9680, 9361, 11345, 10582, 9367, 7821, 8056, 9367, 8022, 9380, 9385, 73, 8399, 4926, 9385, 5759, 7282, 9385, 5759, 8916, 9385, 5759, 9824, 9385, 5759, 9870, 9385, 5759, 9904, 9385, 5759, 12066, 9385, 5759, 12384, 9385, 6689, 2170, 9385, 6689, 2540, 9385, 6689, 2778, 9385, 6689, 4200, 9385, 6689, 4214, 9385, 6689, 5190, 9385, 6689, 6260, 9385, 6689, 6722, 9385, 6689, 7508, 9385, 6689, 7694, 9385, 7803, 5759, 8, 9385, 7803, 5759, 16, 9385, 7803, 5759, 28, 9385, 7803, 5759, 40, 9385, 7803, 5759, 58, 9385, 7803, 5759, 72, 9385, 7803, 5759, 92, 9385, 7803, 5759, 162, 9385, 7803, 5759, 266, 9385, 7803, 5759, 440, 9385, 7803, 5759, 606, 9385, 7803, 5759, 9827, 22, 9385, 7803, 5759, 9827, 34, 9385, 7803, 5759, 9827, 344, 9385, 7803, 5759, 9827, 518, 9385, 8399, 4926, 9385, 8405, 0, 9385, 8405, 8, 9385, 8405, 16, 9385, 8405, 28, 9385, 8405, 40, 9385, 8405, 58, 9385, 8405, 72, 9385, 8405, 92, 9385, 8405, 100, 9385, 8405, 116, 9385, 8405, 138, 9385, 8405, 162, 9385, 8405, 196, 9385, 8405, 216, 9385, 8405, 236, 9385, 8405, 266, 9385, 8405, 292, 9385, 8405, 306, 9385, 8405, 332, 9385, 8405, 364, 9385, 8405, 392, 9385, 8405, 440, 9385, 8405, 462, 9385, 8405, 510, 9385, 8405, 524, 9385, 8405, 556, 9385, 8405, 606, 9385, 8405, 610, 9385, 8405, 652, 9385, 8405, 792, 9385, 8405, 884, 9385, 8405, 974, 9385, 8405, 996, 9385, 8405, 1260, 9385, 8405, 1512, 9385, 8405, 1612, 9385, 8405, 1796, 9385, 8405, 2030, 9385, 8405, 2076, 9385, 8405, 2126, 9385, 8405, 2212, 9385, 8405, 2438, 9385, 8405, 2516, 9385, 8405, 2566, 9385, 8405, 2678, 9385, 8405, 2746, 9385, 8405, 4016, 9385, 8405, 5994, 9385, 8405, 9827, 22, 9385, 8405, 9827, 34, 9385, 8405, 9827, 344, 9385, 8405, 9827, 518, 9431, 11103, 5758, 9437, 444, 9437, 445, 6121, 1045, 6376, 9437, 445, 6121, 8153, 9546, 9437, 445, 6121, 8153, 10666, 9437, 445, 6121, 8473, 5832, 9437, 445, 6121, 11649, 3992, 9437, 445, 12105, 9437, 720, 9437, 720, 9437, 721, 6121, 1045, 6376, 9437, 721, 6121, 8153, 9546, 9437, 721, 6121, 8153, 10666, 9437, 721, 6121, 8473, 5832, 9437, 721, 6121, 10666, 9437, 721, 6121, 11649, 3992, 9438, 9439, 9177, 115, 11649, 5606, 9443, 5941, 2171, 429, 9020, 9443, 5941, 2171, 429, 9096, 9443, 5941, 2171, 429, 11446, 9443, 5941, 2401, 8154, 9443, 5941, 2541, 429, 9020, 9443, 5941, 2541, 429, 9096, 9443, 5941, 2541, 429, 11446, 9443, 5941, 2779, 429, 9020, 9443, 5941, 2779, 429, 9096, 9443, 5941, 2779, 429, 11446, 9443, 5941, 3696, 9443, 5941, 4153, 6116, 9443, 5941, 4201, 429, 9020, 9443, 5941, 4201, 429, 9096, 9443, 5941, 4201, 429, 11446, 9443, 5941, 4215, 429, 9020, 9443, 5941, 4215, 429, 9096, 9443, 5941, 4215, 429, 11446, 9443, 5941, 5191, 429, 9020, 9443, 5941, 5191, 429, 9096, 9443, 5941, 5191, 429, 11446, 9443, 5941, 5442, 9443, 5941, 6113, 6116, 9443, 5941, 6723, 429, 9020, 9443, 5941, 6723, 429, 9096, 9443, 5941, 6723, 429, 11446, 9443, 5941, 6881, 8154, 9443, 5941, 7010, 9443, 5941, 7271, 6116, 9443, 5941, 7509, 429, 9020, 9443, 5941, 7509, 429, 9096, 9443, 5941, 7509, 429, 11446, 9443, 5941, 7607, 6116, 9443, 5941, 7695, 429, 9020, 9443, 5941, 7695, 429, 9096, 9443, 5941, 7695, 429, 11446, 9443, 5941, 7821, 8154, 9443, 5941, 7960, 9443, 5941, 7974, 9443, 5941, 8546, 9443, 5941, 8738, 9443, 5941, 8766, 9443, 5941, 8934, 9443, 5941, 12912, 9453, 6622, 9472, 9475, 11649, 10154, 9483, 8775, 5, 3946, 9483, 8775, 11, 3946, 9483, 8775, 11, 3947, 8553, 3254, 9483, 8775, 11, 3947, 8553, 6468, 9483, 8775, 13, 3946, 9483, 8775, 13, 3947, 8553, 3254, 9483, 8775, 13, 3947, 8553, 6468, 9483, 8775, 47, 10366, 9483, 8775, 50, 9483, 8775, 139, 3846, 9483, 8775, 570, 9483, 8775, 933, 5942, 9483, 8775, 961, 7500, 9483, 8775, 1109, 429, 8750, 9483, 8775, 1109, 2690, 9483, 8775, 1109, 3760, 9483, 8775, 1109, 5776, 9483, 8775, 1109, 8584, 9483, 8775, 2171, 9345, 13031, 5244, 9483, 8775, 2171, 9345, 13031, 5540, 9483, 8775, 2211, 11838, 9483, 8775, 3950, 9483, 8775, 3984, 9483, 8775, 3985, 718, 9483, 8775, 4121, 8058, 9483, 8775, 4121, 8060, 9483, 8775, 4205, 600, 9483, 8775, 4205, 4116, 9483, 8775, 4227, 6504, 9483, 8775, 4227, 7820, 9483, 8775, 4389, 5244, 9483, 8775, 4389, 5540, 9483, 8775, 4389, 7351, 4926, 9483, 8775, 4849, 8641, 5758, 9483, 8775, 5013, 10367, 6504, 9483, 8775, 5013, 10367, 7820, 9483, 8775, 5281, 10366, 9483, 8775, 5445, 10366, 9483, 8775, 6020, 9483, 8775, 6021, 600, 9483, 8775, 6021, 7580, 9483, 8775, 6093, 10366, 9483, 8775, 6121, 12018, 9483, 8775, 6485, 2690, 9483, 8775, 6485, 3760, 9483, 8775, 6485, 5776, 9483, 8775, 6485, 8584, 9483, 8775, 6514, 9483, 8775, 6516, 9483, 8775, 6620, 9483, 8775, 6789, 9022, 9483, 8775, 6802, 9483, 8775, 6869, 5245, 413, 7580, 9483, 8775, 6869, 5245, 7580, 9483, 8775, 7112, 9483, 8775, 7113, 10423, 5540, 9483, 8775, 7113, 11659, 5540, 9483, 8775, 7150, 9483, 8775, 7191, 5540, 9483, 8775, 7351, 601, 4926, 9483, 8775, 7351, 4926, 9483, 8775, 7368, 9483, 8775, 7443, 8641, 5758, 9483, 8775, 7500, 9483, 8775, 7519, 600, 9483, 8775, 7519, 4116, 9483, 8775, 7551, 9022, 9483, 8775, 7796, 9483, 8775, 7823, 5244, 9483, 8775, 7823, 5540, 9483, 8775, 8011, 4926, 9483, 8775, 8012, 9483, 8775, 8013, 5540, 9483, 8775, 8057, 47, 10366, 9483, 8775, 8062, 9483, 8775, 8073, 5942, 9483, 8775, 8097, 9022, 9483, 8775, 8101, 7580, 9483, 8775, 8153, 4204, 9483, 8775, 8153, 7518, 9483, 8775, 8153, 9022, 9483, 8775, 8159, 5244, 9483, 8775, 8159, 5540, 9483, 8775, 8458, 9483, 8775, 8478, 9483, 8775, 8479, 5540, 9483, 8775, 8479, 6504, 9483, 8775, 8553, 3254, 9483, 8775, 8553, 6468, 9483, 8775, 8641, 4112, 9483, 8775, 8717, 9022, 9483, 8775, 8745, 2, 9483, 8775, 8745, 10367, 6504, 9483, 8775, 8745, 10367, 7820, 9483, 8775, 8760, 9483, 8775, 8805, 11167, 925, 11739, 10422, 9483, 8775, 8805, 11167, 925, 11739, 10423, 12438, 9483, 8775, 8805, 11167, 925, 11739, 11658, 9483, 8775, 8805, 12051, 925, 11739, 10422, 9483, 8775, 8805, 12051, 925, 11739, 11658, 9483, 8775, 8805, 12051, 925, 11739, 11659, 12438, 9483, 8775, 8805, 12051, 925, 11739, 11659, 12440, 9483, 8775, 8805, 12051, 925, 11739, 11659, 12442, 9483, 8775, 9050, 9483, 8775, 9060, 9483, 8775, 9105, 10367, 6504, 9483, 8775, 9105, 10367, 7820, 9483, 8775, 9284, 9483, 8775, 9285, 6490, 9483, 8775, 9491, 600, 9483, 8775, 9491, 4116, 9483, 8775, 9598, 9483, 8775, 9615, 5244, 9483, 8775, 9615, 5540, 9483, 8775, 9615, 5965, 4204, 9483, 8775, 9615, 5965, 7518, 9483, 8775, 9633, 6789, 9022, 9483, 8775, 9950, 9483, 8775, 10189, 11366, 9483, 8775, 10189, 11368, 9483, 8775, 10189, 11370, 9483, 8775, 10267, 6020, 9483, 8775, 10349, 9467, 5540, 9483, 8775, 10367, 6504, 9483, 8775, 10373, 7626, 9483, 8775, 10381, 10554, 9483, 8775, 10381, 10556, 9483, 8775, 10381, 10558, 9483, 8775, 10381, 10560, 9483, 8775, 10381, 10562, 9483, 8775, 10381, 10564, 9483, 8775, 10381, 10566, 9483, 8775, 10381, 10568, 9483, 8775, 10381, 10570, 9483, 8775, 10381, 11252, 9483, 8775, 10381, 11254, 9483, 8775, 10483, 10182, 9483, 8775, 10483, 10184, 9483, 8775, 10483, 10186, 9483, 8775, 10527, 7626, 9483, 8775, 10634, 9483, 8775, 10635, 11212, 9483, 8775, 10643, 10367, 601, 6504, 9483, 8775, 10643, 10367, 601, 7443, 6504, 9483, 8775, 10643, 10367, 601, 7443, 7820, 9483, 8775, 10643, 10367, 601, 7820, 9483, 8775, 10643, 10367, 4117, 6504, 9483, 8775, 10643, 10367, 4117, 7820, 9483, 8775, 10643, 10367, 4849, 6504, 9483, 8775, 10643, 10367, 4849, 7820, 9483, 8775, 10643, 10367, 7443, 6504, 9483, 8775, 10643, 10367, 7443, 7820, 9483, 8775, 10659, 7626, 9483, 8775, 10767, 601, 824, 9483, 8775, 10767, 2418, 9483, 8775, 10767, 3772, 9483, 8775, 10767, 4104, 9483, 8775, 10767, 4117, 824, 9483, 8775, 10767, 4206, 9483, 8775, 10767, 5779, 11174, 9483, 8775, 10767, 5832, 9483, 8775, 10767, 7116, 9483, 8775, 10767, 7596, 9483, 8775, 10767, 7908, 9483, 8775, 10767, 8153, 8844, 9483, 8775, 10767, 8210, 9483, 8775, 10767, 8212, 9483, 8775, 10767, 8214, 9483, 8775, 10767, 8216, 9483, 8775, 10767, 8218, 9483, 8775, 10767, 8806, 9483, 8775, 10767, 8849, 8844, 9483, 8775, 10767, 9458, 9483, 8775, 10767, 10236, 9483, 8775, 10767, 10534, 9483, 8775, 10767, 11366, 9483, 8775, 10767, 11368, 9483, 8775, 10767, 11370, 9483, 8775, 10767, 12407, 1044, 9483, 8775, 10767, 12871, 5832, 9483, 8775, 10767, 13016, 9483, 8775, 10767, 13184, 9483, 8775, 10767, 13340, 9483, 8775, 10784, 9483, 8775, 10995, 7626, 9483, 8775, 11005, 7626, 9483, 8775, 11019, 600, 9483, 8775, 11019, 4116, 9483, 8775, 11027, 5, 3946, 9483, 8775, 11027, 11, 3946, 9483, 8775, 11176, 9483, 8775, 11177, 8220, 9483, 8775, 11220, 9483, 8775, 11221, 8220, 9483, 8775, 11241, 5244, 9483, 8775, 11241, 5540, 9483, 8775, 11429, 600, 9483, 8775, 11429, 4116, 9483, 8775, 11789, 5540, 9483, 8775, 11789, 6504, 9483, 8775, 11789, 7820, 9483, 8775, 11795, 5540, 9483, 8775, 11795, 6504, 9483, 8775, 11795, 7820, 9483, 8775, 11821, 11006, 9483, 8775, 11857, 7626, 9483, 8775, 11928, 9483, 8775, 12023, 11006, 9483, 8775, 12028, 9483, 8775, 12092, 9483, 8775, 12115, 10366, 9483, 8775, 12152, 9483, 8775, 12531, 3254, 9483, 8775, 12531, 6468, 9483, 8775, 12867, 5244, 9483, 8775, 12867, 5540, 9483, 8775, 13025, 5244, 9483, 8775, 13025, 5540, 9483, 8775, 13081, 10367, 4117, 6504, 9483, 8775, 13081, 10367, 4117, 7820, 9485, 5671, 6689, 2170, 9485, 5671, 6689, 2540, 9485, 5671, 6689, 2778, 9485, 5671, 6689, 4200, 9485, 5671, 6689, 4214, 9485, 5671, 6689, 5190, 9485, 5671, 6689, 6260, 9485, 5671, 6689, 6722, 9485, 5671, 6689, 7508, 9485, 5671, 6689, 7694, 9485, 5759, 1045, 6490, 9485, 5759, 3278, 9485, 5759, 5671, 8834, 9485, 5759, 5671, 8836, 9485, 5759, 5671, 8840, 9485, 5759, 5671, 8842, 9485, 5759, 5671, 9125, 8834, 9485, 5759, 5671, 9125, 8836, 9485, 5759, 5671, 9125, 10159, 5964, 9485, 5759, 7465, 9555, 8840, 9485, 5759, 8425, 9664, 9485, 5759, 8916, 9485, 5759, 9664, 9485, 5759, 9824, 9485, 5759, 9839, 2273, 7025, 8832, 9485, 5759, 9839, 2273, 7025, 8834, 9485, 5759, 9839, 2273, 7025, 8836, 9485, 5759, 9839, 2273, 7025, 8838, 9485, 5759, 9839, 2273, 7025, 8840, 9485, 5759, 9870, 9485, 5965, 4927, 5657, 7025, 311, 2218, 9485, 5965, 4927, 5657, 7025, 6902, 9485, 6689, 2170, 9485, 6689, 2540, 9485, 6689, 2778, 9485, 6689, 4200, 9485, 6689, 4214, 9485, 6689, 5190, 9485, 6689, 6260, 9485, 6689, 6722, 9485, 6689, 7508, 9485, 6689, 7694, 9485, 7803, 5759, 8, 9485, 7803, 5759, 9, 6376, 9485, 7803, 5759, 16, 9485, 7803, 5759, 40, 9485, 7803, 5759, 58, 9485, 7803, 5759, 72, 9485, 7803, 5759, 266, 9485, 7803, 5759, 606, 9485, 7803, 5759, 1937, 28, 9485, 7803, 5759, 1937, 266, 9485, 7803, 5759, 4263, 7025, 16, 9485, 7803, 5759, 5657, 7025, 188, 9485, 7803, 5759, 5671, 8, 9485, 7803, 5759, 5671, 9, 6376, 9485, 7803, 5759, 5671, 58, 9485, 7803, 5759, 5671, 6789, 48, 9485, 7803, 5759, 5885, 58, 9485, 7803, 5759, 7031, 40, 9485, 7803, 5759, 7031, 162, 9485, 7803, 5759, 7031, 426, 9485, 7803, 5759, 9827, 22, 9485, 7803, 5759, 9827, 34, 9485, 7803, 5759, 9827, 344, 9485, 7803, 5759, 9827, 518, 9485, 7803, 5759, 9839, 2273, 7025, 188, 9485, 7803, 5759, 9839, 2273, 7025, 590, 9485, 8405, 0, 9485, 8405, 8, 9485, 8405, 16, 9485, 8405, 28, 9485, 8405, 40, 9485, 8405, 92, 9485, 8405, 100, 9485, 8405, 116, 9485, 8405, 138, 9485, 8405, 216, 9485, 8405, 236, 9485, 8405, 266, 9485, 8405, 292, 9485, 8405, 306, 9485, 8405, 332, 9485, 8405, 364, 9485, 8405, 392, 9485, 8405, 462, 9485, 8405, 510, 9485, 8405, 524, 9485, 8405, 556, 9485, 8405, 606, 9485, 8405, 622, 9485, 8405, 652, 9485, 8405, 792, 9485, 8405, 884, 9485, 8405, 974, 9485, 8405, 996, 9485, 8405, 1260, 9485, 8405, 1512, 9485, 8405, 1612, 9485, 8405, 1796, 9485, 8405, 1937, 8, 9485, 8405, 1937, 766, 9485, 8405, 1937, 768, 9485, 8405, 1937, 1512, 9485, 8405, 1937, 2030, 9485, 8405, 2030, 9485, 8405, 2076, 9485, 8405, 2126, 9485, 8405, 2212, 9485, 8405, 2516, 9485, 8405, 2566, 9485, 8405, 2678, 9485, 8405, 2746, 9485, 8405, 4016, 9485, 8405, 5236, 9485, 8405, 5657, 7025, 2516, 9485, 8405, 5671, 0, 9485, 8405, 5671, 100, 9485, 8405, 5671, 116, 9485, 8405, 5671, 138, 9485, 8405, 5671, 196, 9485, 8405, 5671, 216, 9485, 8405, 5671, 236, 9485, 8405, 5671, 306, 9485, 8405, 5671, 392, 9485, 8405, 5671, 670, 9485, 8405, 5671, 1612, 9485, 8405, 5671, 2126, 9485, 8405, 5671, 2212, 9485, 8405, 5671, 2678, 9485, 8405, 5994, 9485, 8405, 6877, 524, 9485, 8405, 7465, 9555, 196, 9485, 8405, 9253, 2273, 7025, 2076, 9485, 8405, 9253, 2273, 7025, 3102, 9485, 8405, 9253, 2273, 7025, 4322, 9485, 8405, 9827, 22, 9485, 8405, 9827, 34, 9485, 8405, 9827, 344, 9485, 8405, 9827, 518, 9485, 8405, 9839, 2273, 7025, 2266, 9485, 8405, 9839, 2273, 7025, 2678, 9485, 8775, 5671, 2170, 9485, 8775, 5671, 12016, 9485, 8775, 10218, 9485, 8775, 10304, 9485, 8775, 10768, 9485, 8775, 13040, 9485, 10775, 5759, 1937, 8461, 332, 9485, 10775, 5759, 1937, 8461, 364, 9485, 10775, 5759, 1937, 8461, 392, 9485, 10775, 5759, 5671, 8461, 622, 9485, 10775, 5759, 8461, 236, 9485, 10775, 5759, 8461, 510, 9485, 10775, 5759, 8461, 622, 9485, 10775, 5759, 8461, 652, 9495, 8153, 10677, 761, 8153, 7443, 11378, 9497, 1, 8763, 429, 2089, 6741, 568, 9497, 1, 10579, 429, 2089, 6741, 568, 9497, 11099, 2089, 6741, 568, 9497, 11099, 2089, 11621, 568, 9497, 11099, 2089, 12472, 9497, 12473, 2089, 6741, 568, 9497, 12473, 2089, 11098, 9497, 12473, 2089, 11621, 568, 9497, 12903, 2089, 9855, 6741, 568, 9498, 9509, 6689, 8696, 9511, 7121, 13069, 7821, 11765, 6434, 9511, 7773, 13069, 7821, 11765, 6434, 9525, 6409, 9537, 600, 9525, 6409, 9537, 4116, 9541, 6689, 2170, 9541, 6689, 2540, 9541, 6689, 2778, 9541, 6689, 4200, 9541, 6689, 4214, 9541, 6689, 5190, 9541, 6689, 6260, 9541, 6689, 6722, 9541, 6689, 7508, 9541, 6689, 7694, 9541, 8405, 0, 9541, 8405, 8, 9541, 8405, 16, 9541, 8405, 28, 9541, 8405, 40, 9541, 8405, 58, 9541, 8405, 100, 9541, 8405, 162, 9541, 8405, 196, 9541, 8405, 216, 9541, 8405, 236, 9541, 8405, 292, 9541, 8405, 440, 9541, 8405, 510, 9541, 8405, 524, 9541, 8405, 556, 9541, 8405, 638, 9541, 8405, 652, 9541, 8405, 996, 9541, 8405, 1612, 9541, 8405, 2918, 9541, 8405, 3244, 9541, 8405, 3854, 9541, 8405, 4050, 9541, 8405, 4698, 9541, 8405, 4820, 9541, 8405, 5000, 9541, 8405, 5288, 9541, 8405, 5470, 9541, 8405, 7540, 9573, 12432, 9581, 5758, 9595, 5758, 9615, 5244, 9617, 8775, 8004, 9633, 7709, 10375, 6377, 11097, 6434, 9633, 7709, 10375, 6377, 11765, 6434, 9633, 9718, 9633, 9719, 6121, 11649, 8758, 9633, 9719, 10374, 9633, 9719, 11183, 8762, 9641, 6909, 6505, 6907, 8022, 9641, 8225, 6907, 8022, 9641, 9063, 32, 9650, 9660, 9665, 5758, 9666, 9671, 4926, 9676, 9683, 8405, 70, 9683, 8405, 260, 9683, 8405, 438, 9683, 8405, 444, 9683, 8405, 536, 9683, 8405, 600, 9683, 8405, 706, 9683, 8405, 708, 9683, 8405, 712, 9683, 8405, 732, 9683, 8405, 736, 9683, 8405, 740, 9683, 8405, 802, 9683, 8405, 1090, 9683, 8405, 1092, 9683, 8405, 1100, 9683, 8405, 1120, 9683, 8405, 1150, 9683, 8405, 1210, 9683, 8405, 1472, 9683, 8405, 1474, 9683, 8405, 2110, 9683, 8405, 2154, 9683, 8405, 2164, 9683, 8405, 2186, 9683, 8405, 2726, 9683, 8405, 2884, 9683, 8405, 2938, 9683, 8405, 3048, 9683, 8405, 3060, 9683, 8405, 3178, 9683, 8405, 4048, 9683, 8405, 4548, 9683, 8405, 4754, 9683, 8405, 4892, 9683, 8405, 5004, 9683, 8405, 5382, 9683, 8405, 5406, 9683, 8405, 5560, 9683, 8405, 5854, 9683, 8405, 5922, 9683, 8405, 6124, 9683, 8405, 6432, 9683, 8405, 6886, 9683, 8405, 7012, 9683, 8405, 7684, 9683, 8405, 8054, 9683, 8405, 9466, 9689, 9610, 9693, 445, 11098, 9693, 445, 12472, 9693, 6377, 11099, 6377, 8167, 5758, 9693, 6377, 12473, 6377, 8167, 5758, 9693, 7173, 9692, 9695, 5759, 10702, 9695, 5759, 11392, 9695, 5759, 11418, 9695, 7803, 5759, 4087, 9406, 9695, 7803, 5759, 4087, 10272, 9695, 7803, 5759, 4087, 11150, 9695, 7803, 5759, 4087, 11406, 9695, 7803, 5759, 4087, 12024, 9695, 7803, 5759, 4087, 12468, 9695, 7803, 5759, 7043, 10272, 9695, 7803, 5759, 7043, 11150, 9695, 7803, 5759, 7043, 11406, 9695, 7803, 5759, 7059, 4056, 9695, 7803, 5759, 9406, 9695, 7803, 5759, 9407, 1339, 4087, 11408, 9695, 7803, 5759, 9407, 1339, 11408, 9695, 7803, 5759, 9407, 1339, 12024, 9695, 7803, 5759, 11408, 9695, 7803, 5759, 12024, 9695, 7803, 5759, 12468, 9695, 8405, 3259, 9032, 9695, 8405, 7962, 9695, 8405, 8176, 9695, 8405, 8326, 9695, 8405, 8558, 9695, 8405, 8904, 9695, 8405, 8966, 9695, 8405, 8978, 9695, 8405, 8988, 9695, 8405, 9012, 9695, 8405, 9141, 9424, 9695, 8405, 9141, 9492, 9695, 8405, 9141, 9656, 9695, 8405, 9256, 9695, 8405, 9280, 9695, 8405, 9330, 9695, 8405, 9352, 9695, 8405, 9387, 11692, 9695, 8405, 9464, 9695, 8405, 9534, 9695, 8405, 9622, 9695, 8405, 9655, 9146, 9695, 8405, 9655, 9302, 9695, 8405, 9655, 9376, 9695, 8405, 9655, 9988, 9695, 8405, 9759, 9656, 9695, 8405, 9759, 10499, 12090, 9695, 8405, 9759, 11692, 9695, 8405, 9812, 9695, 8405, 9818, 9695, 8405, 9844, 9695, 8405, 9856, 9695, 8405, 10248, 9695, 8405, 10270, 9695, 8405, 11044, 9695, 8405, 11064, 9695, 8405, 11133, 9424, 9695, 8405, 11133, 9492, 9695, 8405, 11133, 9656, 9695, 8405, 11411, 9032, 9695, 8405, 11411, 9070, 9695, 8405, 11411, 9146, 9695, 8405, 11411, 9302, 9695, 8405, 11411, 9376, 9695, 8405, 11411, 9392, 9695, 8405, 11411, 9576, 9695, 8405, 11411, 9768, 9695, 8405, 11411, 9988, 9695, 8405, 11411, 10652, 9695, 8405, 12077, 9032, 9695, 8405, 12077, 9070, 9695, 8405, 12077, 9146, 9695, 8405, 12077, 9302, 9695, 8405, 12077, 9376, 9695, 8405, 12077, 9392, 9695, 8405, 12077, 9576, 9695, 8405, 12077, 9768, 9695, 8405, 12077, 9988, 9695, 8405, 12077, 10652, 9695, 12133, 11670, 9701, 9601, 9898, 9705, 6741, 569, 445, 11098, 9705, 6741, 569, 445, 11099, 6121, 1045, 8318, 9705, 6741, 569, 445, 12472, 9705, 6741, 569, 445, 12473, 6121, 1045, 8318, 9707, 7085, 444, 9707, 7085, 720, 9709, 5912, 9709, 5913, 445, 6741, 568, 9712, 9718, 9719, 6121, 9546, 9722, 9733, 1045, 10374, 9733, 4215, 1045, 12132, 9733, 5444, 9733, 7172, 9733, 7593, 8056, 9733, 7710, 9733, 8649, 10001, 7580, 9733, 8744, 9733, 9279, 10001, 7580, 9733, 9898, 9753, 10260, 9761, 5759, 8916, 9761, 7803, 5759, 16, 9761, 7803, 5759, 40, 9761, 8405, 0, 9761, 8405, 16, 9761, 8405, 40, 9761, 8405, 100, 9761, 8405, 138, 9761, 8405, 216, 9761, 8405, 236, 9761, 8405, 306, 9761, 8405, 332, 9761, 8405, 364, 9761, 8405, 392, 9761, 8405, 462, 9761, 8405, 524, 9761, 8405, 556, 9761, 8405, 622, 9761, 8405, 652, 9761, 8405, 2030, 9783, 12369, 11765, 10716, 9783, 13049, 11765, 10716, 9789, 327, 521, 1612, 9789, 327, 521, 1613, 3831, 1915, 858, 9789, 4927, 723, 7045, 4376, 9789, 4927, 723, 7045, 4382, 9789, 4927, 887, 1904, 9789, 4927, 1307, 7463, 4376, 9789, 4927, 1307, 7463, 4382, 9789, 4927, 2417, 3895, 8743, 5668, 9789, 4927, 2733, 6374, 9789, 4927, 3067, 1905, 7745, 5669, 364, 9789, 4927, 3793, 5709, 3067, 1904, 9789, 4927, 4355, 3067, 1905, 685, 4355, 7745, 364, 9789, 4927, 4355, 3067, 1905, 685, 5559, 3759, 364, 9789, 4927, 4355, 3067, 1905, 11377, 0, 9789, 4927, 4355, 7744, 9789, 4927, 5141, 6539, 2133, 3174, 9789, 4927, 5141, 6539, 5659, 7462, 9789, 4927, 5307, 5668, 9789, 4927, 5307, 7744, 9789, 4927, 5307, 7745, 5668, 9789, 4927, 5543, 4351, 5668, 9789, 4927, 5668, 9789, 4927, 6523, 7462, 9789, 4927, 6525, 5709, 225, 1905, 7436, 9789, 4927, 6527, 3067, 1904, 9789, 4927, 6543, 3067, 1905, 5421, 5669, 364, 9789, 4927, 6543, 6373, 7463, 369, 4895, 858, 9789, 4927, 6543, 6373, 7463, 3831, 1915, 858, 9789, 4927, 7179, 3067, 225, 1905, 7436, 9789, 4927, 7493, 5668, 9789, 4927, 7745, 5668, 9789, 4927, 8564, 9789, 4927, 9099, 3067, 1905, 5655, 364, 9789, 4927, 9099, 3809, 8653, 3067, 1905, 5655, 364, 9789, 4927, 9320, 9789, 4927, 9363, 3067, 1905, 4939, 364, 9789, 4927, 9363, 3809, 8653, 3067, 1905, 4939, 364, 9789, 4927, 10795, 7745, 6528, 9789, 4927, 12955, 7744, 9789, 5759, 1301, 859, 9634, 9789, 5759, 1301, 1889, 9634, 9789, 5759, 1753, 2733, 858, 9789, 5759, 1755, 7462, 9789, 5759, 1865, 7746, 9789, 5759, 2133, 3175, 1983, 138, 9789, 5759, 2547, 4842, 9789, 5759, 3035, 7746, 9789, 5759, 4937, 858, 9789, 5759, 5531, 1985, 4256, 9789, 5759, 5531, 1985, 4352, 9789, 5759, 5531, 1985, 5531, 4096, 9789, 5759, 5531, 1985, 6862, 9789, 5759, 5531, 4097, 4256, 9789, 5759, 5531, 4097, 4352, 9789, 5759, 5531, 4097, 5531, 1984, 9789, 5759, 5531, 4097, 6862, 9789, 5759, 5557, 547, 2031, 516, 9789, 5759, 5559, 3758, 9789, 5759, 6179, 7462, 9789, 6689, 2170, 9789, 6689, 2540, 9789, 6689, 2778, 9789, 6689, 4200, 9789, 6689, 4214, 9789, 6689, 4389, 2170, 9789, 6689, 4389, 2540, 9789, 6689, 4389, 2778, 9789, 6689, 4389, 4200, 9789, 6689, 4389, 4214, 9789, 6689, 4389, 5190, 9789, 6689, 4389, 6260, 9789, 6689, 4389, 6722, 9789, 6689, 4389, 7508, 9789, 6689, 4389, 7694, 9789, 6689, 5190, 9789, 6689, 6260, 9789, 6689, 6722, 9789, 6689, 7508, 9789, 6689, 7694, 9789, 7803, 5759, 8, 9789, 7803, 5759, 16, 9789, 7803, 5759, 28, 9789, 7803, 5759, 40, 9789, 7803, 5759, 58, 9789, 7803, 5759, 162, 9789, 7803, 5759, 266, 9789, 7803, 5759, 440, 9789, 7803, 5759, 606, 9789, 7803, 5759, 9827, 22, 9789, 7803, 5759, 9827, 34, 9789, 7803, 5759, 9827, 344, 9789, 7803, 5759, 9827, 518, 9789, 7803, 5759, 10489, 16, 9789, 7803, 5759, 10489, 266, 9789, 8405, 0, 9789, 8405, 52, 9789, 8405, 100, 9789, 8405, 116, 9789, 8405, 138, 9789, 8405, 216, 9789, 8405, 236, 9789, 8405, 292, 9789, 8405, 306, 9789, 8405, 332, 9789, 8405, 364, 9789, 8405, 392, 9789, 8405, 462, 9789, 8405, 510, 9789, 8405, 524, 9789, 8405, 556, 9789, 8405, 622, 9789, 8405, 652, 9789, 8405, 670, 9789, 8405, 792, 9789, 8405, 884, 9789, 8405, 974, 9789, 8405, 996, 9789, 8405, 1080, 9789, 8405, 1260, 9789, 8405, 1612, 9789, 8405, 1642, 9789, 8405, 2030, 9789, 8405, 2076, 9789, 8405, 2126, 9789, 8405, 2212, 9789, 8405, 2438, 9789, 8405, 2516, 9789, 8405, 2566, 9789, 8405, 2678, 9789, 8405, 2732, 9789, 8405, 2746, 9789, 8405, 3146, 9789, 8405, 4016, 9789, 8405, 4140, 9789, 8405, 4782, 9789, 8405, 5978, 9789, 8405, 5994, 9789, 8405, 11631, 510, 9789, 8775, 2089, 112, 9789, 8775, 2089, 113, 3831, 7904, 9789, 8775, 2089, 113, 4353, 7904, 9789, 8775, 2089, 113, 5307, 7904, 9789, 8775, 2399, 2420, 9789, 8775, 2399, 2421, 5543, 4350, 9789, 8775, 4119, 112, 9789, 8775, 5421, 462, 9789, 8775, 7333, 4258, 9789, 10307, 5759, 3877, 7462, 9789, 10307, 5759, 4859, 7462, 9789, 10585, 436, 9789, 11257, 8405, 0, 9789, 11257, 8405, 52, 9789, 11257, 8405, 100, 9789, 11257, 8405, 116, 9789, 11257, 8405, 138, 9789, 11257, 8405, 216, 9789, 11257, 8405, 236, 9789, 11257, 8405, 292, 9789, 11257, 8405, 306, 9789, 11257, 8405, 332, 9789, 11257, 8405, 364, 9789, 11257, 8405, 392, 9789, 11257, 8405, 462, 9789, 11257, 8405, 510, 9789, 11257, 8405, 524, 9789, 11257, 8405, 556, 9789, 11257, 8405, 622, 9789, 11257, 8405, 652, 9789, 11257, 8405, 670, 9789, 11257, 8405, 792, 9789, 11257, 8405, 884, 9789, 11257, 8405, 974, 9789, 11257, 8405, 996, 9789, 11257, 8405, 1080, 9789, 11257, 8405, 1260, 9789, 11257, 8405, 1612, 9789, 11257, 8405, 2030, 9789, 11257, 8405, 2076, 9789, 11257, 8405, 2126, 9789, 11257, 8405, 2212, 9789, 11257, 8405, 2516, 9789, 11257, 8405, 2566, 9789, 11257, 8405, 2678, 9789, 11257, 8405, 2732, 9789, 11257, 8405, 2746, 9789, 11257, 8405, 3146, 9789, 11257, 8405, 4016, 9789, 11257, 8405, 4140, 9789, 11257, 8405, 4782, 9789, 11257, 8405, 5978, 9789, 11257, 8405, 5994, 9789, 11257, 8405, 11631, 510, 9789, 11257, 8405, 11631, 622, 9789, 11257, 8405, 11631, 652, 9789, 12405, 5759, 5661, 4255, 6371, 7462, 9789, 12405, 5759, 7497, 8858, 9789, 12405, 5759, 7907, 462, 9789, 12423, 5759, 3845, 5892, 9789, 12423, 5759, 5641, 6368, 9789, 12423, 5759, 6909, 3764, 9789, 12423, 5759, 7101, 3764, 9793, 1177, 4194, 9793, 1177, 4830, 9793, 1177, 6116, 9793, 1177, 6716, 9793, 1177, 7812, 9793, 1177, 8290, 9793, 1177, 9786, 9793, 1177, 10344, 9811, 2779, 8289, 6434, 9811, 6434, 9811, 6435, 569, 760, 9811, 6435, 4221, 760, 9811, 6435, 6121, 2697, 11096, 9811, 6435, 6121, 2697, 11764, 9811, 6435, 6121, 8153, 8758, 9811, 6435, 6121, 11649, 8758, 9811, 6435, 11097, 429, 10959, 6434, 9811, 6505, 6434, 9811, 7821, 6434, 9811, 7821, 6435, 439, 10416, 9811, 7821, 6435, 439, 10417, 6121, 10677, 760, 9811, 7821, 6435, 439, 10417, 6121, 11649, 760, 9811, 7821, 6435, 4221, 760, 9811, 7821, 8153, 6434, 9811, 7821, 8153, 6435, 439, 10416, 9811, 7924, 9811, 8097, 6434, 9811, 8153, 6434, 9811, 8561, 7944, 9811, 8849, 6434, 9811, 9327, 6121, 3713, 4849, 569, 760, 9811, 9327, 6121, 3713, 4849, 4221, 760, 9811, 9327, 6121, 3713, 4849, 7991, 9811, 9327, 6121, 3713, 7442, 9811, 9327, 6121, 3713, 4849, 7991, 10959, 9327, 6121, 3713, 7442, 9811, 9327, 6121, 3713, 7443, 569, 760, 9811, 9327, 6121, 3713, 7443, 4221, 760, 9811, 9327, 6121, 3713, 11096, 9811, 9327, 6121, 3713, 11764, 9811, 11191, 6434, 9811, 11875, 6435, 4221, 7593, 8056, 9821, 4390, 9835, 5758, 9843, 4390, 9853, 7931, 4213, 9680, 9853, 11345, 10582, 9858, 9867, 5758, 9880, 9891, 4223, 5836, 9891, 6616, 9891, 7593, 8405, 116, 9891, 7593, 8405, 130, 9891, 7593, 8405, 138, 9891, 7593, 8405, 166, 9891, 7593, 8405, 186, 9891, 7593, 8405, 246, 9891, 7593, 8405, 292, 9891, 7593, 8405, 430, 9891, 7593, 8405, 510, 9891, 7593, 8405, 568, 9891, 7593, 8405, 616, 9891, 7593, 8405, 656, 9891, 7593, 8405, 670, 9891, 7593, 8405, 744, 9891, 7593, 8405, 784, 9891, 7593, 8405, 884, 9891, 7593, 8405, 1094, 9891, 7593, 8405, 1152, 9891, 7593, 8405, 1276, 9891, 7593, 8405, 1488, 9891, 7593, 8405, 1600, 9891, 7593, 8405, 1602, 9891, 7593, 8405, 1894, 9891, 7593, 8405, 2092, 9891, 7593, 8405, 2206, 9891, 7593, 8405, 2404, 9891, 7593, 8405, 2506, 9891, 7593, 8405, 2516, 9891, 7593, 8405, 2862, 9891, 7593, 8405, 2958, 9891, 7593, 8405, 3148, 9891, 7593, 8405, 3892, 9891, 7593, 8405, 4314, 9891, 7593, 8405, 4636, 9891, 7593, 8405, 4886, 9891, 7593, 8405, 5434, 9891, 7593, 8405, 5948, 9891, 7593, 8405, 6214, 9891, 7593, 10301, 1095, 6214, 9891, 7593, 10301, 1895, 1094, 9891, 7593, 10301, 1895, 1488, 9891, 7593, 10301, 1895, 2092, 9891, 7593, 10301, 1895, 2958, 9891, 7593, 10301, 2863, 2092, 9891, 8306, 9891, 9063, 8405, 116, 9891, 9063, 8405, 130, 9891, 9063, 8405, 138, 9891, 9063, 8405, 166, 9891, 9063, 8405, 186, 9891, 9063, 8405, 246, 9891, 9063, 8405, 292, 9891, 9063, 8405, 430, 9891, 9063, 8405, 510, 9891, 9063, 8405, 568, 9891, 9063, 8405, 616, 9891, 9063, 8405, 656, 9891, 9063, 8405, 670, 9891, 9063, 8405, 744, 9891, 9063, 8405, 784, 9891, 9063, 8405, 884, 9891, 9063, 8405, 1094, 9891, 9063, 8405, 1152, 9891, 9063, 8405, 1276, 9891, 9063, 8405, 1488, 9891, 9063, 8405, 1600, 9891, 9063, 8405, 1602, 9891, 9063, 8405, 1894, 9891, 9063, 8405, 2092, 9891, 9063, 8405, 2206, 9891, 9063, 8405, 2404, 9891, 9063, 8405, 2506, 9891, 9063, 8405, 2516, 9891, 9063, 8405, 2862, 9891, 9063, 8405, 2958, 9891, 9063, 8405, 3148, 9891, 9063, 8405, 3892, 9891, 9063, 8405, 4314, 9891, 9063, 8405, 4636, 9891, 9063, 8405, 4886, 9891, 9063, 8405, 5434, 9891, 9063, 8405, 5948, 9891, 9063, 8405, 6214, 9891, 10157, 4926, 9891, 10339, 8405, 4849, 4389, 5550, 9891, 10469, 4926, 9891, 11424, 9891, 12017, 4926, 9891, 12391, 4926, 9898, 9899, 10374, 9900, 9907, 3229, 3228, 9907, 5759, 2811, 7438, 9907, 5759, 2811, 8030, 9907, 5759, 6502, 9907, 5759, 6556, 9907, 5759, 8768, 9907, 5759, 9628, 9907, 6545, 5762, 9907, 6545, 9570, 9907, 6545, 11156, 9907, 6689, 2170, 9907, 6689, 2540, 9907, 6689, 2778, 9907, 6689, 4200, 9907, 6689, 4214, 9907, 6689, 5190, 9907, 6689, 6260, 9907, 6689, 6722, 9907, 6689, 7508, 9907, 6689, 7694, 9907, 7334, 9907, 7803, 5759, 333, 7094, 9907, 7803, 5759, 333, 7095, 8796, 9907, 7803, 5759, 511, 5536, 9907, 7803, 5759, 511, 5537, 8796, 9907, 7803, 5759, 2810, 9907, 7803, 5759, 2811, 5638, 9907, 7803, 5759, 5844, 9907, 7803, 5759, 5845, 4602, 9907, 7803, 5759, 7362, 9907, 7803, 5759, 7363, 8796, 9907, 7803, 5759, 8788, 9907, 7803, 5759, 8789, 5536, 9907, 7803, 5759, 8789, 5537, 8796, 9907, 7803, 5759, 8789, 8796, 9907, 7803, 5759, 8796, 9907, 7826, 9907, 8405, 100, 9907, 8405, 101, 9396, 9907, 8405, 116, 9907, 8405, 117, 4822, 9907, 8405, 138, 9907, 8405, 139, 4920, 9907, 8405, 139, 7195, 10704, 9907, 8405, 139, 7195, 11106, 9907, 8405, 165, 7488, 9907, 8405, 216, 9907, 8405, 217, 4346, 9907, 8405, 236, 9907, 8405, 292, 9907, 8405, 293, 4632, 9907, 8405, 306, 9907, 8405, 307, 11106, 9907, 8405, 332, 9907, 8405, 333, 7094, 9907, 8405, 333, 7095, 8796, 9907, 8405, 364, 9907, 8405, 392, 9907, 8405, 393, 8632, 9907, 8405, 462, 9907, 8405, 463, 7020, 9907, 8405, 510, 9907, 8405, 511, 5536, 9907, 8405, 511, 5537, 8796, 9907, 8405, 524, 9907, 8405, 525, 5626, 9907, 8405, 525, 5634, 9907, 8405, 556, 9907, 8405, 557, 5888, 9907, 8405, 557, 7086, 9907, 8405, 557, 7195, 11106, 9907, 8405, 613, 7488, 9907, 8405, 622, 9907, 8405, 652, 9907, 8405, 1579, 7488, 9907, 8405, 2030, 9907, 8405, 2126, 9907, 8405, 3129, 7488, 9907, 8405, 4753, 7488, 9907, 8405, 6037, 7488, 9907, 8405, 6390, 9907, 8405, 6391, 8796, 9907, 8405, 6726, 9907, 8405, 6986, 9907, 8405, 6987, 8796, 9907, 8405, 7312, 9907, 8405, 7313, 8796, 9907, 8405, 7760, 9907, 8405, 7761, 8796, 9907, 8405, 7914, 9907, 8405, 7957, 7488, 9907, 8566, 9907, 9483, 8775, 3986, 9907, 9483, 8775, 3987, 4266, 9907, 9483, 8775, 3987, 8768, 9907, 9483, 8775, 4060, 9907, 9483, 8775, 4090, 9907, 9483, 8775, 4106, 9907, 9483, 8775, 4128, 9907, 9483, 8775, 6632, 9907, 9483, 8775, 6638, 9907, 9483, 8775, 6678, 9907, 9483, 8775, 10767, 4344, 9907, 9483, 8775, 10767, 6492, 9907, 9483, 8775, 10767, 6732, 9907, 9483, 8775, 10767, 7670, 9907, 9483, 8775, 10767, 8350, 9907, 9483, 8775, 10767, 8351, 6121, 9378, 9907, 9483, 8775, 10767, 8352, 9907, 9483, 8775, 10767, 8353, 6121, 9378, 9907, 9483, 8775, 10767, 9378, 9907, 9483, 8775, 11091, 5385, 5396, 9907, 9483, 8775, 11091, 5385, 5432, 9907, 9483, 8775, 11091, 5385, 5452, 9907, 9483, 8775, 11091, 8065, 5436, 9907, 9483, 8775, 11091, 8065, 5440, 9907, 9483, 8775, 11761, 5385, 958, 9907, 9483, 8775, 11761, 5385, 1052, 9907, 9483, 8775, 11761, 8065, 2644, 9907, 9483, 8775, 11761, 8065, 2758, 9907, 10398, 9919, 6789, 8405, 14, 9919, 6789, 8405, 20, 9919, 6789, 8405, 30, 9919, 6789, 8405, 38, 9919, 8405, 0, 9919, 8405, 2, 9919, 8405, 4, 9919, 8405, 6, 9919, 8405, 8, 9919, 8405, 10, 9919, 8405, 12, 9919, 8405, 14, 9919, 8405, 16, 9919, 8405, 18, 9919, 8405, 20, 9919, 8405, 22, 9919, 8405, 24, 9919, 8405, 26, 9919, 8405, 28, 9919, 8405, 30, 9919, 8405, 32, 9919, 8405, 34, 9919, 8405, 36, 9919, 8405, 38, 9919, 8405, 40, 9919, 8405, 42, 9919, 8405, 46, 9919, 8405, 50, 9919, 8405, 72, 9919, 8405, 78, 9919, 8405, 80, 9919, 8405, 92, 9919, 8405, 112, 9919, 8405, 124, 9919, 8405, 162, 9919, 8405, 166, 9919, 8405, 168, 9919, 8405, 176, 9919, 8405, 182, 9919, 8405, 226, 9919, 8405, 230, 9919, 8405, 264, 9919, 8405, 272, 9919, 8405, 280, 9919, 8405, 286, 9919, 8405, 296, 9919, 8405, 400, 9919, 8405, 436, 9919, 8405, 440, 9919, 8405, 450, 9919, 8405, 530, 9919, 8405, 674, 9919, 8405, 676, 9919, 8405, 722, 9919, 8405, 724, 9919, 8405, 1110, 9919, 8405, 1112, 9919, 8405, 1490, 9919, 8405, 2034, 9919, 8405, 2172, 9919, 8405, 2174, 9919, 8405, 2814, 9919, 8405, 3238, 9919, 8405, 3286, 9919, 8405, 4610, 9923, 1109, 429, 9664, 9923, 7803, 5759, 8, 9923, 7803, 5759, 16, 9923, 7803, 5759, 28, 9923, 7803, 5759, 40, 9923, 7803, 5759, 66, 9923, 8405, 0, 9923, 8405, 100, 9923, 8405, 116, 9923, 8405, 138, 9923, 8405, 216, 9923, 8405, 236, 9923, 8405, 292, 9923, 8405, 306, 9923, 8405, 332, 9923, 8405, 364, 9923, 8405, 392, 9923, 8405, 462, 9923, 8405, 510, 9923, 8405, 524, 9923, 8405, 556, 9923, 8405, 610, 9923, 8405, 652, 9923, 8405, 1946, 9923, 8405, 2030, 9923, 8405, 2096, 9923, 8405, 2126, 9923, 8405, 5166, 9923, 8405, 5294, 9923, 9556, 9924, 9928, 9931, 11269, 0, 9931, 11269, 4, 9931, 11269, 8, 9931, 11269, 10, 9931, 11269, 16, 9931, 11269, 20, 9931, 11269, 22, 9931, 11269, 24, 9931, 11269, 26, 9931, 11269, 28, 9931, 11269, 30, 9931, 11269, 32, 9931, 11269, 34, 9931, 11269, 36, 9931, 11269, 38, 9931, 11269, 48, 9931, 11269, 58, 9931, 11269, 72, 9931, 11269, 80, 9931, 11269, 116, 9931, 11269, 122, 9931, 11269, 126, 9931, 11269, 130, 9931, 11269, 176, 9931, 11269, 196, 9931, 11269, 198, 9931, 11269, 202, 9931, 11269, 208, 9931, 11269, 244, 9931, 11269, 266, 9931, 11269, 274, 9931, 11269, 306, 9931, 11269, 310, 9931, 11269, 314, 9931, 11269, 322, 9931, 11269, 330, 9931, 11269, 332, 9931, 11269, 336, 9931, 11269, 338, 9931, 11269, 340, 9931, 11269, 350, 9931, 11269, 364, 9931, 11269, 368, 9931, 11269, 372, 9931, 11269, 374, 9931, 11269, 380, 9931, 11269, 392, 9931, 11269, 396, 9931, 11269, 400, 9931, 11269, 402, 9931, 11269, 404, 9931, 11269, 412, 9931, 11269, 438, 9931, 11269, 440, 9931, 11269, 462, 9931, 11269, 468, 9931, 11269, 476, 9931, 11269, 480, 9931, 11269, 496, 9931, 11269, 500, 9931, 11269, 502, 9931, 11269, 510, 9931, 11269, 512, 9931, 11269, 514, 9931, 11269, 516, 9931, 11269, 524, 9931, 11269, 526, 9931, 11269, 530, 9931, 11269, 532, 9931, 11269, 536, 9931, 11269, 550, 9931, 11269, 556, 9931, 11269, 560, 9931, 11269, 562, 9931, 11269, 564, 9931, 11269, 568, 9931, 11269, 622, 9931, 11269, 626, 9931, 11269, 630, 9931, 11269, 632, 9931, 11269, 652, 9931, 11269, 654, 9931, 11269, 656, 9931, 11269, 660, 9931, 11269, 690, 9931, 11269, 854, 9931, 11269, 889, 5758, 9931, 11269, 898, 9931, 11269, 914, 9931, 11269, 936, 9931, 11269, 938, 9931, 11269, 940, 9931, 11269, 942, 9931, 11269, 1140, 9931, 11269, 1160, 9931, 11269, 1172, 9931, 11269, 1574, 9931, 11269, 1630, 9931, 11269, 1660, 9931, 11269, 1704, 9931, 11269, 1706, 9931, 11269, 1708, 9931, 11269, 1710, 9931, 11269, 1732, 9931, 11269, 1770, 9931, 11269, 1774, 9931, 11269, 1776, 9931, 11269, 1784, 9931, 11269, 1802, 9931, 11269, 1834, 9931, 11269, 1836, 9931, 11269, 1838, 9931, 11269, 1840, 9931, 11269, 1854, 9931, 11269, 1916, 9931, 11269, 1938, 9931, 11269, 1964, 9931, 11269, 1966, 9931, 11269, 1968, 9931, 11269, 1970, 9931, 11269, 1982, 9931, 11269, 2030, 9931, 11269, 2036, 9931, 11269, 2038, 9931, 11269, 2052, 9931, 11269, 2078, 9931, 11269, 2084, 9931, 11269, 2122, 9931, 11269, 2124, 9931, 11269, 2188, 9931, 11269, 2226, 9931, 11269, 2238, 9931, 11269, 2266, 9931, 11269, 2268, 9931, 11269, 2270, 9931, 11269, 2272, 9931, 11269, 2282, 9931, 11269, 2286, 9931, 11269, 2308, 9931, 11269, 2320, 9931, 11269, 2378, 9931, 11269, 2414, 9931, 11269, 2430, 9931, 11269, 2482, 9931, 11269, 2516, 9931, 11269, 2518, 9931, 11269, 2520, 9931, 11269, 2522, 9931, 11269, 2532, 9931, 11269, 2554, 9931, 11269, 2598, 9931, 11269, 2600, 9931, 11269, 2604, 9931, 11269, 2606, 9931, 11269, 2634, 9931, 11269, 2678, 9931, 11269, 2680, 9931, 11269, 2682, 9931, 11269, 2684, 9931, 11269, 2692, 9931, 11269, 2722, 9931, 11269, 2746, 9931, 11269, 2748, 9931, 11269, 2750, 9931, 11269, 2752, 9931, 11269, 2754, 9931, 11269, 2772, 9931, 11269, 2774, 9931, 11269, 2776, 9931, 11269, 2778, 9931, 11269, 2780, 9931, 11269, 2782, 9931, 11269, 2784, 9931, 11269, 2786, 9931, 11269, 2906, 9931, 11269, 2932, 9931, 11269, 2942, 9931, 11269, 3006, 9931, 11269, 3068, 9931, 11269, 3082, 9931, 11269, 3102, 9931, 11269, 3104, 9931, 11269, 3106, 9931, 11269, 3108, 9931, 11269, 3836, 9931, 11269, 3970, 9931, 11269, 3972, 9931, 11269, 3974, 9931, 11269, 4176, 9931, 11269, 4223, 5836, 9931, 11269, 4230, 9931, 11269, 4700, 9931, 11269, 4796, 9931, 11269, 4800, 9931, 11269, 4802, 9931, 11269, 4818, 9931, 11269, 4856, 9931, 11269, 4862, 9931, 11269, 4864, 9931, 11269, 4910, 9931, 11269, 4912, 9931, 11269, 4914, 9931, 11269, 4918, 9931, 11269, 5032, 9931, 11269, 5036, 9931, 11269, 5038, 9931, 11269, 5040, 9931, 11269, 5132, 9931, 11269, 5134, 9931, 11269, 5164, 9931, 11269, 5170, 9931, 11269, 5228, 9931, 11269, 5230, 9931, 11269, 5232, 9931, 11269, 5290, 9931, 11269, 5390, 9931, 11269, 5460, 9931, 11269, 5464, 9931, 11269, 5466, 9931, 11269, 5472, 9931, 11269, 5518, 9931, 11269, 5616, 9931, 11269, 5622, 9931, 11269, 5666, 9931, 11269, 5694, 9931, 11269, 5710, 9931, 11269, 5732, 9931, 11269, 5734, 9931, 11269, 5736, 9931, 11269, 5738, 9931, 11269, 5858, 9931, 11269, 5860, 9931, 11269, 5862, 9931, 11269, 5874, 9931, 11269, 5906, 9931, 11269, 5924, 9931, 11269, 5930, 9931, 11269, 5952, 9931, 11269, 5954, 9931, 11269, 5956, 9931, 11269, 5958, 9931, 11269, 5994, 9931, 11269, 5996, 9931, 11269, 5998, 9931, 11269, 6000, 9931, 11269, 6024, 9931, 11269, 6026, 9931, 11269, 6028, 9931, 11269, 6160, 9931, 11269, 6246, 9931, 11269, 6248, 9931, 11269, 6250, 9931, 11269, 6789, 2725, 4389, 5550, 9931, 11269, 6789, 4117, 5876, 9931, 11269, 6789, 5444, 9931, 11269, 6789, 5550, 9931, 11269, 6789, 6378, 9931, 11269, 6789, 6874, 9931, 11269, 6789, 7443, 4389, 5550, 9931, 11269, 6789, 7551, 11649, 8758, 9931, 11269, 6789, 8005, 4389, 5550, 9931, 11269, 6789, 8153, 6378, 9931, 11269, 6789, 8153, 7551, 10677, 9744, 9931, 11269, 6789, 8473, 1044, 9931, 11269, 7226, 9931, 11269, 7262, 9931, 11269, 7264, 9931, 11269, 7266, 9931, 11269, 7558, 9931, 11269, 7560, 9931, 11269, 7562, 9931, 11269, 7700, 9931, 11269, 8461, 22, 9931, 11269, 8461, 34, 9931, 11269, 8497, 2680, 9931, 11269, 8497, 2682, 9931, 11269, 8497, 5924, 9931, 11269, 8629, 512, 9931, 11269, 8671, 24, 9931, 11269, 8671, 236, 9931, 11269, 8671, 238, 9931, 11269, 8671, 242, 9931, 11269, 8671, 246, 9931, 11269, 8671, 296, 9931, 11269, 8671, 300, 9931, 11269, 8671, 562, 9931, 11269, 8671, 656, 9931, 11269, 8671, 2516, 9931, 11269, 8671, 2518, 9931, 11269, 8671, 2520, 9931, 11269, 8671, 2522, 9931, 11269, 8943, 44, 9931, 11269, 8943, 440, 9931, 11269, 8943, 914, 9931, 11269, 8943, 1660, 9931, 11269, 8943, 1802, 9931, 11269, 8943, 1938, 9931, 11269, 8943, 2084, 9931, 11269, 8943, 2238, 9931, 11269, 8943, 2554, 9931, 11269, 8943, 2722, 9931, 11269, 8943, 3082, 9931, 11269, 8943, 5460, 9931, 11269, 8987, 2, 9931, 11269, 9067, 14, 9931, 11269, 9067, 16, 9931, 11269, 9067, 30, 9931, 11269, 9067, 50, 9931, 11269, 9067, 144, 9931, 11269, 9067, 162, 9931, 11269, 9067, 216, 9931, 11269, 9067, 220, 9931, 11269, 9067, 224, 9931, 11269, 9067, 228, 9931, 11269, 9067, 230, 9931, 11269, 9067, 242, 9931, 11269, 9067, 292, 9931, 11269, 9067, 294, 9931, 11269, 9067, 296, 9931, 11269, 9067, 298, 9931, 11269, 9067, 300, 9931, 11269, 9067, 316, 9931, 11269, 9067, 332, 9931, 11269, 9067, 336, 9931, 11269, 9067, 340, 9931, 11269, 9067, 350, 9931, 11269, 9067, 354, 9931, 11269, 9067, 364, 9931, 11269, 9067, 368, 9931, 11269, 9067, 374, 9931, 11269, 9067, 380, 9931, 11269, 9067, 384, 9931, 11269, 9067, 392, 9931, 11269, 9067, 396, 9931, 11269, 9067, 400, 9931, 11269, 9067, 404, 9931, 11269, 9067, 412, 9931, 11269, 9067, 416, 9931, 11269, 9067, 462, 9931, 11269, 9067, 468, 9931, 11269, 9067, 476, 9931, 11269, 9067, 480, 9931, 11269, 9067, 486, 9931, 11269, 9067, 510, 9931, 11269, 9067, 512, 9931, 11269, 9067, 514, 9931, 11269, 9067, 516, 9931, 11269, 9067, 520, 9931, 11269, 9067, 524, 9931, 11269, 9067, 526, 9931, 11269, 9067, 530, 9931, 11269, 9067, 532, 9931, 11269, 9067, 536, 9931, 11269, 9067, 546, 9931, 11269, 9067, 622, 9931, 11269, 9067, 626, 9931, 11269, 9067, 630, 9931, 11269, 9067, 632, 9931, 11269, 9067, 634, 9931, 11269, 9067, 652, 9931, 11269, 9067, 654, 9931, 11269, 9067, 656, 9931, 11269, 9067, 660, 9931, 11269, 9067, 664, 9931, 11269, 9067, 670, 9931, 11269, 9067, 672, 9931, 11269, 9067, 676, 9931, 11269, 9067, 678, 9931, 11269, 9067, 680, 9931, 11269, 9067, 884, 9931, 11269, 9067, 886, 9931, 11269, 9067, 888, 9931, 11269, 9067, 890, 9931, 11269, 9067, 892, 9931, 11269, 9067, 984, 9931, 11269, 9067, 1024, 9931, 11269, 9067, 1026, 9931, 11269, 9067, 1028, 9931, 11269, 9067, 1030, 9931, 11269, 9067, 1032, 9931, 11269, 9067, 1080, 9931, 11269, 9067, 1082, 9931, 11269, 9067, 1084, 9931, 11269, 9067, 1086, 9931, 11269, 9067, 1088, 9931, 11269, 9067, 1238, 9931, 11269, 9067, 1260, 9931, 11269, 9067, 1262, 9931, 11269, 9067, 1264, 9931, 11269, 9067, 1266, 9931, 11269, 9067, 1268, 9931, 11269, 9067, 1356, 9931, 11269, 9067, 1440, 9931, 11269, 9067, 1442, 9931, 11269, 9067, 1444, 9931, 11269, 9067, 1446, 9931, 11269, 9067, 1448, 9931, 11269, 9067, 1506, 9931, 11269, 9067, 1528, 9931, 11269, 9067, 1530, 9931, 11269, 9067, 1532, 9931, 11269, 9067, 1534, 9931, 11269, 9067, 1536, 9931, 11269, 9067, 1612, 9931, 11269, 9067, 1614, 9931, 11269, 9067, 1616, 9931, 11269, 9067, 1618, 9931, 11269, 9067, 1620, 9931, 11269, 9067, 1642, 9931, 11269, 9067, 1644, 9931, 11269, 9067, 1646, 9931, 11269, 9067, 1648, 9931, 11269, 9067, 1650, 9931, 11269, 9067, 1758, 9931, 11269, 9067, 1770, 9931, 11269, 9067, 1772, 9931, 11269, 9067, 1774, 9931, 11269, 9067, 1776, 9931, 11269, 9067, 1778, 9931, 11269, 9067, 1890, 9931, 11269, 9067, 2016, 9931, 11269, 9067, 2204, 9931, 11269, 9067, 2402, 9931, 11269, 9067, 2504, 9931, 11269, 9067, 2516, 9931, 11269, 9067, 2518, 9931, 11269, 9067, 2520, 9931, 11269, 9067, 2522, 9931, 11269, 9067, 2524, 9931, 11269, 9067, 2678, 9931, 11269, 9067, 2680, 9931, 11269, 9067, 2682, 9931, 11269, 9067, 2684, 9931, 11269, 9067, 2686, 9931, 11269, 9067, 2706, 9931, 11269, 9067, 2708, 9931, 11269, 9067, 2710, 9931, 11269, 9067, 2712, 9931, 11269, 9067, 2714, 9931, 11269, 9067, 2732, 9931, 11269, 9067, 2734, 9931, 11269, 9067, 2736, 9931, 11269, 9067, 2738, 9931, 11269, 9067, 2740, 9931, 11269, 9067, 2746, 9931, 11269, 9067, 2748, 9931, 11269, 9067, 2752, 9931, 11269, 9067, 2754, 9931, 11269, 9067, 2756, 9931, 11269, 9067, 2922, 9931, 11269, 9067, 3050, 9931, 11269, 9067, 3138, 9931, 11269, 9067, 3890, 9931, 11269, 9067, 4098, 9931, 11269, 9067, 4138, 9931, 11269, 9067, 4318, 9931, 11269, 9067, 4556, 9931, 11269, 9067, 4644, 9931, 11269, 9067, 4744, 9931, 11269, 9067, 4766, 9931, 11269, 9067, 4860, 9931, 11269, 9067, 5678, 9931, 11269, 9067, 5914, 9931, 11269, 9067, 5950, 9931, 11269, 9067, 5952, 9931, 11269, 9067, 5954, 9931, 11269, 9067, 5956, 9931, 11269, 9067, 5958, 9931, 11269, 9067, 5960, 9931, 11269, 9067, 5976, 9931, 11269, 9067, 5990, 9931, 11269, 9067, 6002, 9931, 11269, 9067, 6004, 9931, 11269, 9067, 6006, 9931, 11269, 9067, 6008, 9931, 11269, 9067, 6010, 9931, 11269, 9067, 7720, 9931, 11269, 9067, 7748, 9931, 11269, 9067, 9363, 50, 9931, 11269, 9313, 5836, 9931, 11269, 9489, 2480, 9931, 11269, 9489, 2544, 9931, 11269, 9489, 2906, 9931, 11269, 9489, 2942, 9931, 11269, 9489, 3970, 9931, 11269, 9489, 4796, 9931, 11269, 9489, 5032, 9931, 11269, 9489, 5290, 9931, 11269, 9489, 5644, 9931, 11269, 9489, 5774, 9931, 11269, 9489, 5784, 9931, 11269, 9489, 5838, 9931, 11269, 9489, 5858, 9931, 11269, 9489, 6024, 9931, 11269, 9489, 6246, 9931, 11269, 9517, 14, 9931, 11269, 9517, 236, 9931, 11269, 9517, 238, 9931, 11269, 9517, 242, 9931, 11269, 9517, 246, 9931, 11269, 9517, 1338, 9931, 11269, 9517, 1382, 9931, 11269, 9517, 1424, 9931, 11269, 9519, 14, 9931, 11269, 9777, 562, 9931, 11269, 9777, 2678, 9931, 11269, 9777, 2680, 9931, 11269, 9777, 2682, 9931, 11269, 9777, 2684, 9931, 11269, 9777, 5906, 9931, 11269, 9777, 5924, 9931, 11269, 9777, 5930, 9931, 11269, 10743, 0, 9931, 11269, 10743, 8, 9931, 11269, 10743, 16, 9931, 11269, 10743, 28, 9931, 11269, 10743, 36, 9931, 11269, 10743, 306, 9931, 11269, 10743, 310, 9931, 11269, 10743, 314, 9931, 11269, 10743, 322, 9931, 11269, 10743, 392, 9931, 11269, 10743, 396, 9931, 11269, 10743, 404, 9931, 11269, 10743, 412, 9931, 11269, 10743, 622, 9931, 11269, 10743, 626, 9931, 11269, 10743, 630, 9931, 11269, 10743, 632, 9931, 11269, 11399, 22, 9931, 11269, 11399, 24, 9931, 11269, 11399, 30, 9931, 11269, 11399, 34, 9931, 11269, 11399, 48, 9931, 11269, 11399, 332, 9931, 11269, 11399, 336, 9931, 11269, 11399, 350, 9931, 11269, 11399, 510, 9931, 11269, 11399, 512, 9931, 11269, 11399, 514, 9931, 11269, 11399, 516, 9931, 11269, 11399, 622, 9931, 11269, 11399, 626, 9931, 11269, 11399, 630, 9931, 11269, 11399, 632, 9931, 11269, 11399, 936, 9931, 11269, 11399, 938, 9931, 11269, 11399, 940, 9931, 11269, 11399, 942, 9931, 11269, 11399, 1704, 9931, 11269, 11399, 1706, 9931, 11269, 11399, 1708, 9931, 11269, 11399, 1710, 9931, 11269, 11399, 1834, 9931, 11269, 11399, 1836, 9931, 11269, 11399, 1838, 9931, 11269, 11399, 1840, 9931, 11269, 11399, 1964, 9931, 11269, 11399, 1966, 9931, 11269, 11399, 1968, 9931, 11269, 11399, 1970, 9931, 11269, 11399, 2122, 9931, 11269, 11399, 2124, 9931, 11269, 11399, 2266, 9931, 11269, 11399, 2268, 9931, 11269, 11399, 2270, 9931, 11269, 11399, 2272, 9931, 11269, 11399, 2598, 9931, 11269, 11399, 2600, 9931, 11269, 11399, 2604, 9931, 11269, 11399, 2606, 9931, 11269, 11399, 2772, 9931, 11269, 11399, 2774, 9931, 11269, 11399, 2776, 9931, 11269, 11399, 2778, 9931, 11269, 11399, 2906, 9931, 11269, 11399, 2932, 9931, 11269, 11399, 2942, 9931, 11269, 11399, 3102, 9931, 11269, 11399, 3104, 9931, 11269, 11399, 3106, 9931, 11269, 11399, 3108, 9931, 11269, 11399, 3970, 9931, 11269, 11399, 3972, 9931, 11269, 11399, 3974, 9931, 11269, 11399, 4230, 9931, 11269, 11399, 4796, 9931, 11269, 11399, 4800, 9931, 11269, 11399, 4802, 9931, 11269, 11399, 4910, 9931, 11269, 11399, 4912, 9931, 11269, 11399, 4914, 9931, 11269, 11399, 5032, 9931, 11269, 11399, 5036, 9931, 11269, 11399, 5038, 9931, 11269, 11399, 5290, 9931, 11269, 11399, 5460, 9931, 11269, 11399, 5464, 9931, 11269, 11399, 5466, 9931, 11269, 11399, 5616, 9931, 11269, 11399, 5732, 9931, 11269, 11399, 5734, 9931, 11269, 11399, 5736, 9931, 11269, 11399, 5738, 9931, 11269, 11399, 5858, 9931, 11269, 11399, 5860, 9931, 11269, 11399, 5862, 9931, 11269, 11399, 6024, 9931, 11269, 11399, 6026, 9931, 11269, 11399, 6028, 9931, 11269, 11399, 6246, 9931, 11269, 11399, 6248, 9931, 11269, 11399, 6250, 9931, 11269, 11399, 7558, 9931, 11269, 11399, 7560, 9931, 11269, 11399, 7562, 9931, 11269, 11399, 7700, 9931, 11269, 11435, 24, 9931, 11269, 11435, 36, 9931, 11269, 11443, 48, 9931, 11269, 11689, 534, 9931, 11269, 11883, 562, 9931, 11269, 11883, 2678, 9931, 11269, 11883, 2680, 9931, 11269, 11883, 2682, 9931, 11269, 11883, 2684, 9931, 11269, 12869, 1580, 9931, 11269, 12869, 1600, 9931, 11269, 12869, 1628, 9931, 11269, 12869, 1656, 9941, 8405, 0, 9941, 8405, 8, 9941, 8405, 16, 9941, 8405, 28, 9941, 8405, 36, 9941, 8405, 40, 9941, 8405, 42, 9941, 8405, 138, 9941, 8405, 142, 9941, 8405, 144, 9941, 8405, 150, 9941, 8405, 152, 9941, 8405, 154, 9941, 8405, 216, 9941, 8405, 220, 9941, 8405, 224, 9941, 8405, 228, 9941, 8405, 230, 9941, 8405, 232, 9941, 8405, 236, 9941, 8405, 238, 9941, 8405, 242, 9941, 8405, 246, 9941, 8405, 250, 9941, 8405, 252, 9941, 8405, 306, 9941, 8405, 332, 9941, 8405, 336, 9941, 8405, 340, 9941, 8405, 350, 9941, 8405, 354, 9941, 8405, 356, 9941, 8405, 364, 9941, 8405, 368, 9941, 8405, 374, 9941, 8405, 380, 9941, 8405, 384, 9941, 8405, 392, 9941, 8405, 396, 9941, 8405, 404, 9941, 8405, 412, 9941, 8405, 416, 9941, 8405, 418, 9941, 8405, 524, 9941, 8405, 526, 9941, 8405, 532, 9941, 8405, 536, 9941, 8405, 546, 9941, 8405, 548, 9941, 8405, 556, 9941, 8405, 560, 9941, 8405, 564, 9941, 8405, 622, 9941, 8405, 626, 9941, 8405, 630, 9941, 8405, 632, 9941, 8405, 634, 9941, 8405, 636, 9941, 8405, 652, 9941, 8405, 654, 9941, 8405, 656, 9941, 8405, 660, 9941, 8405, 664, 9941, 8405, 666, 9941, 8405, 1024, 9941, 8405, 1412, 9941, 8405, 1986, 9941, 8405, 2328, 9941, 8405, 2330, 9941, 8405, 2332, 9941, 8405, 2336, 9941, 8405, 2344, 9941, 8405, 2346, 9941, 8405, 2706, 9941, 8405, 2708, 9941, 8405, 2710, 9941, 8405, 2712, 9941, 8405, 2714, 9941, 8405, 2716, 9941, 8405, 2732, 9941, 8405, 2734, 9941, 8405, 2736, 9941, 8405, 2738, 9941, 8405, 2740, 9941, 8405, 2742, 9959, 89, 8466, 9959, 89, 8521, 10572, 9959, 89, 8521, 10573, 445, 6741, 568, 9959, 6121, 4895, 11649, 8758, 9959, 6121, 9546, 9959, 6121, 10677, 761, 91, 1109, 429, 11649, 8758, 9961, 2429, 5895, 6689, 2170, 9961, 2429, 5895, 6689, 2540, 9961, 2429, 5895, 6689, 2778, 9961, 2429, 5895, 6689, 4200, 9961, 2429, 5895, 6689, 4214, 9961, 2429, 5895, 6689, 5190, 9961, 2429, 5895, 6689, 6722, 9961, 2429, 5895, 6689, 7508, 9961, 2429, 5895, 6689, 7694, 9961, 2429, 6053, 6689, 2170, 9961, 2429, 6053, 6689, 2540, 9961, 2429, 6053, 6689, 2778, 9961, 2429, 6053, 6689, 4200, 9961, 2429, 6053, 6689, 4214, 9961, 2429, 6053, 6689, 5190, 9961, 2429, 6053, 6689, 6722, 9961, 2429, 6053, 6689, 7508, 9961, 2429, 6053, 6689, 7694, 9969, 5758, 9971, 5758, 9977, 7593, 8405, 0, 9977, 7593, 8405, 1, 6121, 6516, 9977, 7593, 8405, 1, 6121, 10804, 9977, 7593, 8405, 8, 9977, 7593, 8405, 9, 6121, 10804, 9977, 7593, 8405, 16, 9977, 7593, 8405, 17, 6121, 6874, 9977, 7593, 8405, 17, 6121, 8432, 9977, 7593, 8405, 17, 6121, 10804, 9977, 7593, 8405, 28, 9977, 7593, 8405, 29, 6121, 10804, 9977, 7593, 8405, 40, 9977, 7593, 8405, 41, 6121, 8153, 6378, 9977, 7593, 8405, 41, 6121, 8432, 9977, 7593, 8405, 41, 6121, 10804, 9977, 7593, 8405, 102, 9977, 7593, 8405, 142, 9977, 7593, 8405, 164, 9977, 7593, 8405, 172, 9977, 7593, 8405, 173, 6121, 4530, 9977, 7593, 8405, 173, 6121, 5878, 9977, 7593, 8405, 173, 6121, 8473, 4530, 9977, 7593, 8405, 174, 9977, 7593, 8405, 175, 6121, 5878, 9977, 7593, 8405, 176, 9977, 7593, 8405, 177, 6121, 4530, 9977, 7593, 8405, 177, 6121, 5878, 9977, 7593, 8405, 177, 6121, 8473, 4530, 9977, 7593, 8405, 177, 6121, 10802, 9977, 7593, 8405, 182, 9977, 7593, 8405, 183, 6121, 5934, 9977, 7593, 8405, 184, 9977, 7593, 8405, 185, 6121, 10802, 9977, 7593, 8405, 236, 9977, 7593, 8405, 237, 6121, 4530, 9977, 7593, 8405, 237, 6121, 8758, 9977, 7593, 8405, 237, 6121, 10802, 9977, 7593, 8405, 258, 9977, 7593, 8405, 259, 6121, 6516, 9977, 7593, 8405, 259, 6121, 6874, 9977, 7593, 8405, 276, 9977, 7593, 8405, 294, 9977, 7593, 8405, 306, 9977, 7593, 8405, 307, 6121, 4530, 9977, 7593, 8405, 307, 6121, 8758, 9977, 7593, 8405, 307, 6121, 10677, 8758, 9977, 7593, 8405, 307, 6121, 10802, 9977, 7593, 8405, 448, 9977, 7593, 8405, 468, 9977, 7593, 8405, 469, 6121, 8473, 4530, 9977, 7593, 8405, 496, 9977, 7593, 8405, 560, 9977, 7593, 8405, 561, 6121, 8473, 4530, 9977, 7593, 8405, 561, 6121, 10802, 9977, 7593, 8405, 592, 9977, 7593, 8405, 612, 9977, 7593, 8405, 626, 9977, 7593, 8405, 652, 9977, 7593, 8405, 656, 9977, 7593, 8405, 658, 9977, 7593, 8405, 664, 9977, 7593, 8405, 672, 9977, 7593, 8405, 673, 6121, 10802, 9977, 7593, 8405, 673, 6121, 10804, 9977, 7593, 8405, 807, 3096, 9977, 7593, 8405, 886, 9977, 7593, 8405, 887, 6121, 10677, 8758, 9977, 7593, 8405, 887, 6121, 10802, 9977, 7593, 8405, 887, 6121, 10804, 9977, 7593, 8405, 1022, 9977, 7593, 8405, 1074, 9977, 7593, 8405, 1082, 9977, 7593, 8405, 1262, 9977, 7593, 8405, 1263, 6121, 8473, 4530, 9977, 7593, 8405, 1263, 6121, 8758, 9977, 7593, 8405, 1263, 6121, 8759, 721, 4530, 9977, 7593, 8405, 1263, 6121, 8896, 9977, 7593, 8405, 1263, 6121, 10802, 9977, 7593, 8405, 1284, 9977, 7593, 8405, 1442, 9977, 7593, 8405, 1640, 9977, 7593, 8405, 1680, 9977, 7593, 8405, 1770, 9977, 7593, 8405, 1794, 9977, 7593, 8405, 2064, 9977, 7593, 8405, 2250, 9977, 7593, 8405, 2410, 9977, 7593, 8405, 2516, 9977, 7593, 8405, 2734, 9977, 7593, 8405, 2774, 9977, 7593, 8405, 3012, 9977, 7593, 8405, 3038, 9977, 7593, 8405, 3148, 9977, 7593, 8405, 3149, 6121, 6516, 9977, 7593, 8405, 3149, 6121, 10802, 9977, 7593, 8405, 3149, 6121, 10804, 9977, 7593, 8405, 3862, 9977, 7593, 8405, 4142, 9977, 7593, 8405, 4146, 9977, 7593, 8405, 4148, 9977, 7593, 8405, 4198, 9977, 7593, 8405, 4393, 5758, 9977, 7593, 8405, 4614, 9977, 7593, 8405, 4771, 142, 9977, 7593, 8405, 4771, 1022, 9977, 7593, 8405, 4771, 1794, 9977, 7593, 8405, 4771, 2064, 9977, 7593, 8405, 4771, 2542, 9977, 7593, 8405, 4771, 2704, 9977, 7593, 8405, 4771, 3172, 9977, 7593, 8405, 4771, 4144, 9977, 7593, 8405, 5690, 9977, 7593, 8405, 5734, 9977, 7593, 8405, 5781, 142, 9977, 7593, 8405, 5781, 172, 9977, 7593, 8405, 5781, 174, 9977, 7593, 8405, 5781, 5758, 9977, 7593, 8405, 5890, 9977, 7593, 8405, 5980, 9977, 7593, 8405, 5982, 9977, 7593, 8405, 5986, 9977, 7593, 8405, 6200, 9977, 7593, 8405, 6201, 6121, 3697, 3058, 9977, 7593, 8405, 6201, 6121, 10804, 9977, 7593, 8405, 6302, 9977, 7593, 8405, 6399, 306, 9977, 7593, 8405, 6519, 7316, 9977, 7593, 8405, 6696, 9977, 7593, 8405, 6710, 9977, 7593, 8405, 7062, 9977, 7593, 8405, 7316, 9977, 7593, 8405, 7317, 6121, 7716, 9977, 7593, 8405, 7455, 7316, 9977, 7593, 8405, 7494, 9977, 7593, 8405, 7495, 6121, 10804, 9977, 7593, 8405, 7522, 9977, 7593, 8405, 7551, 16, 9977, 7593, 8405, 7551, 17, 6121, 5878, 9977, 7593, 8405, 7551, 40, 9977, 7593, 8405, 7981, 28, 9977, 7593, 8405, 7981, 29, 6121, 10804, 9977, 7593, 8405, 8065, 8425, 3096, 9977, 7593, 8405, 8153, 11125, 28, 9977, 7593, 8405, 8425, 3096, 9977, 7593, 8405, 8960, 9977, 7593, 8405, 9029, 306, 9977, 7593, 8405, 9049, 3096, 9977, 7593, 8405, 9372, 9977, 7593, 8405, 9373, 6121, 8153, 6875, 7908, 9977, 7593, 8405, 9501, 3058, 9977, 7593, 8405, 10269, 0, 9977, 7593, 8405, 10269, 8, 9977, 7593, 8405, 10269, 807, 3096, 9977, 7593, 8405, 10269, 3038, 9977, 7593, 8405, 10269, 8065, 8425, 3096, 9977, 7593, 8405, 10269, 8425, 3096, 9977, 7593, 8405, 10396, 9977, 7593, 8405, 10489, 664, 9977, 7593, 8405, 10489, 672, 9977, 7593, 8405, 10489, 1082, 9977, 7593, 8405, 10509, 5758, 9977, 7593, 8405, 10545, 40, 9977, 7593, 8405, 10545, 41, 6121, 8758, 9977, 7593, 8405, 10697, 236, 9977, 7593, 8405, 10697, 886, 9977, 7593, 8405, 10697, 887, 6121, 10802, 9977, 7593, 8405, 10697, 1082, 9977, 7593, 8405, 10735, 28, 9977, 7593, 8405, 11125, 28, 9977, 7593, 8405, 11127, 592, 9977, 7593, 8405, 11383, 258, 9977, 7593, 8405, 11665, 886, 9977, 7593, 8405, 13415, 16, 9977, 7593, 10301, 1, 258, 9977, 7593, 10301, 177, 1262, 9977, 7593, 10301, 561, 2734, 9977, 8342, 9977, 8405, 7593, 9063, 172, 9977, 8405, 10396, 9977, 8405, 12087, 28, 9977, 9063, 8405, 0, 9977, 9063, 8405, 1, 6121, 6516, 9977, 9063, 8405, 1, 6121, 10804, 9977, 9063, 8405, 8, 9977, 9063, 8405, 9, 6121, 10804, 9977, 9063, 8405, 16, 9977, 9063, 8405, 17, 6121, 6874, 9977, 9063, 8405, 17, 6121, 8432, 9977, 9063, 8405, 17, 6121, 10804, 9977, 9063, 8405, 28, 9977, 9063, 8405, 29, 6121, 10804, 9977, 9063, 8405, 40, 9977, 9063, 8405, 41, 6121, 8153, 6378, 9977, 9063, 8405, 41, 6121, 8432, 9977, 9063, 8405, 41, 6121, 10804, 9977, 9063, 8405, 102, 9977, 9063, 8405, 142, 9977, 9063, 8405, 164, 9977, 9063, 8405, 172, 9977, 9063, 8405, 173, 6121, 4530, 9977, 9063, 8405, 173, 6121, 5878, 9977, 9063, 8405, 173, 6121, 8473, 4530, 9977, 9063, 8405, 174, 9977, 9063, 8405, 175, 6121, 5878, 9977, 9063, 8405, 176, 9977, 9063, 8405, 177, 6121, 4530, 9977, 9063, 8405, 177, 6121, 5878, 9977, 9063, 8405, 177, 6121, 8473, 4530, 9977, 9063, 8405, 177, 6121, 10802, 9977, 9063, 8405, 182, 9977, 9063, 8405, 183, 6121, 5934, 9977, 9063, 8405, 184, 9977, 9063, 8405, 185, 6121, 10802, 9977, 9063, 8405, 236, 9977, 9063, 8405, 237, 6121, 4530, 9977, 9063, 8405, 237, 6121, 8758, 9977, 9063, 8405, 237, 6121, 10802, 9977, 9063, 8405, 258, 9977, 9063, 8405, 259, 6121, 6516, 9977, 9063, 8405, 259, 6121, 6874, 9977, 9063, 8405, 276, 9977, 9063, 8405, 294, 9977, 9063, 8405, 306, 9977, 9063, 8405, 307, 6121, 4530, 9977, 9063, 8405, 307, 6121, 8758, 9977, 9063, 8405, 307, 6121, 10677, 8758, 9977, 9063, 8405, 307, 6121, 10802, 9977, 9063, 8405, 448, 9977, 9063, 8405, 468, 9977, 9063, 8405, 469, 6121, 8473, 4530, 9977, 9063, 8405, 496, 9977, 9063, 8405, 560, 9977, 9063, 8405, 561, 6121, 8473, 4530, 9977, 9063, 8405, 561, 6121, 10802, 9977, 9063, 8405, 592, 9977, 9063, 8405, 612, 9977, 9063, 8405, 626, 9977, 9063, 8405, 652, 9977, 9063, 8405, 656, 9977, 9063, 8405, 658, 9977, 9063, 8405, 664, 9977, 9063, 8405, 672, 9977, 9063, 8405, 673, 6121, 10802, 9977, 9063, 8405, 673, 6121, 10804, 9977, 9063, 8405, 807, 3096, 9977, 9063, 8405, 886, 9977, 9063, 8405, 887, 6121, 10677, 8758, 9977, 9063, 8405, 887, 6121, 10802, 9977, 9063, 8405, 887, 6121, 10804, 9977, 9063, 8405, 1022, 9977, 9063, 8405, 1074, 9977, 9063, 8405, 1082, 9977, 9063, 8405, 1262, 9977, 9063, 8405, 1263, 6121, 8473, 4530, 9977, 9063, 8405, 1263, 6121, 8758, 9977, 9063, 8405, 1263, 6121, 8759, 721, 4530, 9977, 9063, 8405, 1263, 6121, 8896, 9977, 9063, 8405, 1263, 6121, 10802, 9977, 9063, 8405, 1284, 9977, 9063, 8405, 1442, 9977, 9063, 8405, 1640, 9977, 9063, 8405, 1680, 9977, 9063, 8405, 1770, 9977, 9063, 8405, 1794, 9977, 9063, 8405, 2064, 9977, 9063, 8405, 2250, 9977, 9063, 8405, 2410, 9977, 9063, 8405, 2516, 9977, 9063, 8405, 2734, 9977, 9063, 8405, 2774, 9977, 9063, 8405, 3012, 9977, 9063, 8405, 3038, 9977, 9063, 8405, 3148, 9977, 9063, 8405, 3149, 6121, 6516, 9977, 9063, 8405, 3149, 6121, 10802, 9977, 9063, 8405, 3149, 6121, 10804, 9977, 9063, 8405, 3862, 9977, 9063, 8405, 4142, 9977, 9063, 8405, 4146, 9977, 9063, 8405, 4148, 9977, 9063, 8405, 4198, 9977, 9063, 8405, 4393, 5758, 9977, 9063, 8405, 4614, 9977, 9063, 8405, 4771, 142, 9977, 9063, 8405, 4771, 1022, 9977, 9063, 8405, 4771, 1794, 9977, 9063, 8405, 4771, 2064, 9977, 9063, 8405, 4771, 2542, 9977, 9063, 8405, 4771, 2704, 9977, 9063, 8405, 4771, 3172, 9977, 9063, 8405, 4771, 4144, 9977, 9063, 8405, 5690, 9977, 9063, 8405, 5734, 9977, 9063, 8405, 5781, 142, 9977, 9063, 8405, 5781, 172, 9977, 9063, 8405, 5781, 174, 9977, 9063, 8405, 5781, 5758, 9977, 9063, 8405, 5890, 9977, 9063, 8405, 5980, 9977, 9063, 8405, 5982, 9977, 9063, 8405, 5986, 9977, 9063, 8405, 6200, 9977, 9063, 8405, 6201, 6121, 3697, 3058, 9977, 9063, 8405, 6201, 6121, 10804, 9977, 9063, 8405, 6302, 9977, 9063, 8405, 6399, 306, 9977, 9063, 8405, 6519, 7316, 9977, 9063, 8405, 6696, 9977, 9063, 8405, 6710, 9977, 9063, 8405, 7062, 9977, 9063, 8405, 7316, 9977, 9063, 8405, 7317, 6121, 7716, 9977, 9063, 8405, 7455, 7316, 9977, 9063, 8405, 7494, 9977, 9063, 8405, 7495, 6121, 10804, 9977, 9063, 8405, 7522, 9977, 9063, 8405, 7551, 16, 9977, 9063, 8405, 7551, 17, 6121, 5878, 9977, 9063, 8405, 7551, 40, 9977, 9063, 8405, 7981, 28, 9977, 9063, 8405, 7981, 29, 6121, 10804, 9977, 9063, 8405, 8065, 8425, 3096, 9977, 9063, 8405, 8153, 11125, 28, 9977, 9063, 8405, 8425, 3096, 9977, 9063, 8405, 8960, 9977, 9063, 8405, 9029, 306, 9977, 9063, 8405, 9049, 3096, 9977, 9063, 8405, 9372, 9977, 9063, 8405, 9373, 6121, 8153, 6875, 7908, 9977, 9063, 8405, 9501, 3058, 9977, 9063, 8405, 10269, 0, 9977, 9063, 8405, 10269, 8, 9977, 9063, 8405, 10269, 807, 3096, 9977, 9063, 8405, 10269, 3038, 9977, 9063, 8405, 10269, 8065, 8425, 3096, 9977, 9063, 8405, 10269, 8425, 3096, 9977, 9063, 8405, 10489, 664, 9977, 9063, 8405, 10489, 672, 9977, 9063, 8405, 10489, 1082, 9977, 9063, 8405, 10509, 5758, 9977, 9063, 8405, 10545, 40, 9977, 9063, 8405, 10545, 41, 6121, 8758, 9977, 9063, 8405, 10697, 236, 9977, 9063, 8405, 10697, 886, 9977, 9063, 8405, 10697, 887, 6121, 10802, 9977, 9063, 8405, 10697, 1082, 9977, 9063, 8405, 10735, 28, 9977, 9063, 8405, 11125, 28, 9977, 9063, 8405, 11127, 592, 9977, 9063, 8405, 11383, 258, 9977, 9063, 8405, 11665, 886, 9977, 9063, 8405, 13415, 16, 9977, 9063, 10301, 1, 258, 9977, 9063, 10301, 177, 1262, 9977, 9063, 10301, 561, 2734, 9977, 9578, 9977, 11363, 5758, 10003, 5758, 10017, 5758, 10017, 7580, 10017, 7710, 10141, 7383, 11765, 6434, 10153, 6434, 10157, 8774, 10162, 10171, 4223, 5836, 10171, 6610, 10171, 6616, 10171, 6689, 2170, 10171, 6689, 2540, 10171, 6689, 2778, 10171, 6689, 4200, 10171, 6689, 4214, 10171, 6689, 5190, 10171, 6689, 6722, 10171, 6689, 7508, 10171, 6689, 7694, 10171, 7723, 4927, 4790, 10171, 7723, 4927, 6676, 10171, 7723, 4927, 6686, 10171, 7723, 4927, 6910, 10171, 7723, 4927, 7038, 10171, 7723, 4927, 7551, 8646, 10171, 7723, 4927, 7860, 10171, 7723, 4927, 8046, 10171, 7723, 4927, 8646, 10171, 7723, 4927, 11934, 10171, 8525, 2670, 10171, 8525, 2671, 10624, 10171, 8525, 6784, 10171, 8525, 6804, 10171, 8525, 7576, 10171, 8525, 8160, 10171, 8525, 8514, 10171, 8525, 8820, 10171, 8525, 8876, 10171, 8525, 9344, 10171, 8525, 9672, 10171, 9607, 6610, 10171, 9665, 4926, 10171, 10469, 4926, 10171, 10585, 100, 10171, 10585, 102, 10171, 10585, 106, 10171, 10585, 108, 10171, 10585, 112, 10171, 10585, 116, 10171, 10585, 122, 10171, 10585, 126, 10171, 10585, 130, 10171, 10585, 132, 10171, 10585, 138, 10171, 10585, 142, 10171, 10585, 144, 10171, 10585, 150, 10171, 10585, 152, 10171, 10585, 196, 10171, 10585, 198, 10171, 10585, 202, 10171, 10585, 208, 10171, 10585, 210, 10171, 10585, 216, 10171, 10585, 220, 10171, 10585, 224, 10171, 10585, 228, 10171, 10585, 230, 10171, 10585, 236, 10171, 10585, 238, 10171, 10585, 242, 10171, 10585, 246, 10171, 10585, 250, 10171, 10585, 292, 10171, 10585, 294, 10171, 10585, 296, 10171, 10585, 298, 10171, 10585, 300, 10171, 10585, 306, 10171, 10585, 310, 10171, 10585, 314, 10171, 10585, 322, 10171, 10585, 326, 10171, 10585, 332, 10171, 10585, 336, 10171, 10585, 340, 10171, 10585, 350, 10171, 10585, 354, 10171, 10585, 364, 10171, 10585, 368, 10171, 10585, 374, 10171, 10585, 380, 10171, 10585, 384, 10171, 10585, 392, 10171, 10585, 396, 10171, 10585, 404, 10171, 10585, 412, 10171, 10585, 416, 10171, 10585, 462, 10171, 10585, 468, 10171, 10585, 476, 10171, 10585, 480, 10171, 10585, 486, 10171, 10585, 496, 10171, 10585, 498, 10171, 10585, 500, 10171, 10585, 502, 10171, 10585, 506, 10171, 10585, 510, 10171, 10585, 512, 10171, 10585, 514, 10171, 10585, 516, 10171, 10585, 520, 10171, 10585, 524, 10171, 10585, 526, 10171, 10585, 532, 10171, 10585, 536, 10171, 10585, 546, 10171, 10585, 556, 10171, 10585, 560, 10171, 10585, 564, 10171, 10585, 568, 10171, 10585, 576, 10171, 10585, 610, 10171, 10585, 612, 10171, 10585, 614, 10171, 10585, 616, 10171, 10585, 618, 10171, 10585, 622, 10171, 10585, 626, 10171, 10585, 630, 10171, 10585, 632, 10171, 10585, 634, 10171, 10585, 638, 10171, 10585, 640, 10171, 10585, 644, 10171, 10585, 646, 10171, 10585, 648, 10171, 10585, 652, 10171, 10585, 654, 10171, 10585, 656, 10171, 10585, 660, 10171, 10585, 664, 10171, 10585, 670, 10171, 10585, 672, 10171, 10585, 676, 10171, 10585, 678, 10171, 10585, 680, 10171, 10585, 748, 10171, 10585, 778, 10171, 10585, 816, 10171, 10585, 838, 10171, 10585, 840, 10171, 10585, 842, 10171, 10585, 854, 10171, 10585, 866, 10171, 10585, 868, 10171, 10585, 870, 10171, 10585, 872, 10171, 10585, 874, 10171, 10585, 876, 10171, 10585, 884, 10171, 10585, 886, 10171, 10585, 888, 10171, 10585, 890, 10171, 10585, 892, 10171, 10585, 910, 10171, 10585, 936, 10171, 10585, 954, 10171, 10585, 974, 10171, 10585, 976, 10171, 10585, 978, 10171, 10585, 980, 10171, 10585, 982, 10171, 10585, 984, 10171, 10585, 1034, 10171, 10585, 1072, 10171, 10585, 1140, 10171, 10585, 1150, 10171, 10585, 1188, 10171, 10585, 1190, 10171, 10585, 1192, 10171, 10585, 1194, 10171, 10585, 1204, 10171, 10585, 1238, 10171, 10585, 1250, 10171, 10585, 1252, 10171, 10585, 1254, 10171, 10585, 1256, 10171, 10585, 1258, 10171, 10585, 1288, 10171, 10585, 1322, 10171, 10585, 1324, 10171, 10585, 1326, 10171, 10585, 1328, 10171, 10585, 1330, 10171, 10585, 1332, 10171, 10585, 1334, 10171, 10585, 1336, 10171, 10585, 1338, 10171, 10585, 1356, 10171, 10585, 1370, 10171, 10585, 1372, 10171, 10585, 1374, 10171, 10585, 1376, 10171, 10585, 1378, 10171, 10585, 1418, 10171, 10585, 1502, 10171, 10585, 1506, 10171, 10585, 1540, 10171, 10585, 1562, 10171, 10585, 1574, 10171, 10585, 1598, 10171, 10585, 1654, 10171, 10585, 1704, 10171, 10585, 1706, 10171, 10585, 1708, 10171, 10585, 1712, 10171, 10585, 1714, 10171, 10585, 1716, 10171, 10585, 1718, 10171, 10585, 1720, 10171, 10585, 1722, 10171, 10585, 1724, 10171, 10585, 1726, 10171, 10585, 1728, 10171, 10585, 1730, 10171, 10585, 1732, 10171, 10585, 1758, 10171, 10585, 1798, 10171, 10585, 1834, 10171, 10585, 1854, 10171, 10585, 1890, 10171, 10585, 1932, 10171, 10585, 1964, 10171, 10585, 1966, 10171, 10585, 1968, 10171, 10585, 1972, 10171, 10585, 1982, 10171, 10585, 2016, 10171, 10585, 2082, 10171, 10585, 2122, 10171, 10585, 2126, 10171, 10585, 2130, 10171, 10585, 2132, 10171, 10585, 2134, 10171, 10585, 2136, 10171, 10585, 2188, 10171, 10585, 2204, 10171, 10585, 2212, 10171, 10585, 2214, 10171, 10585, 2216, 10171, 10585, 2218, 10171, 10585, 2220, 10171, 10585, 2236, 10171, 10585, 2266, 10171, 10585, 2268, 10171, 10585, 2270, 10171, 10585, 2282, 10171, 10585, 2294, 10171, 10585, 2296, 10171, 10585, 2298, 10171, 10585, 2300, 10171, 10585, 2302, 10171, 10585, 2304, 10171, 10585, 2316, 10171, 10585, 2350, 10171, 10585, 2352, 10171, 10585, 2354, 10171, 10585, 2356, 10171, 10585, 2358, 10171, 10585, 2360, 10171, 10585, 2362, 10171, 10585, 2370, 10171, 10585, 2378, 10171, 10585, 2402, 10171, 10585, 2424, 10171, 10585, 2466, 10171, 10585, 2468, 10171, 10585, 2482, 10171, 10585, 2504, 10171, 10585, 2516, 10171, 10585, 2518, 10171, 10585, 2520, 10171, 10585, 2522, 10171, 10585, 2524, 10171, 10585, 2548, 10171, 10585, 2566, 10171, 10585, 2568, 10171, 10585, 2570, 10171, 10585, 2572, 10171, 10585, 2574, 10171, 10585, 2598, 10171, 10585, 2620, 10171, 10585, 2622, 10171, 10585, 2624, 10171, 10585, 2626, 10171, 10585, 2628, 10171, 10585, 2634, 10171, 10585, 2666, 10171, 10585, 2678, 10171, 10585, 2680, 10171, 10585, 2682, 10171, 10585, 2684, 10171, 10585, 2686, 10171, 10585, 2718, 10171, 10585, 2732, 10171, 10585, 2734, 10171, 10585, 2736, 10171, 10585, 2738, 10171, 10585, 2740, 10171, 10585, 2772, 10171, 10585, 2790, 10171, 10585, 2792, 10171, 10585, 2794, 10171, 10585, 2796, 10171, 10585, 2798, 10171, 10585, 2844, 10171, 10585, 2856, 10171, 10585, 2896, 10171, 10585, 2906, 10171, 10585, 2922, 10171, 10585, 2936, 10171, 10585, 2952, 10171, 10585, 2956, 10171, 10585, 2968, 10171, 10585, 2982, 10171, 10585, 2984, 10171, 10585, 2986, 10171, 10585, 2988, 10171, 10585, 2990, 10171, 10585, 2992, 10171, 10585, 2994, 10171, 10585, 3002, 10171, 10585, 3006, 10171, 10585, 3050, 10171, 10585, 3078, 10171, 10585, 3120, 10171, 10585, 3138, 10171, 10585, 3146, 10171, 10585, 3148, 10171, 10585, 3150, 10171, 10585, 3152, 10171, 10585, 3154, 10171, 10585, 3176, 10171, 10585, 3202, 10171, 10585, 3212, 10171, 10585, 3214, 10171, 10585, 3216, 10171, 10585, 3218, 10171, 10585, 3220, 10171, 10585, 3826, 10171, 10585, 3856, 10171, 10585, 3858, 10171, 10585, 3860, 10171, 10585, 3862, 10171, 10585, 3864, 10171, 10585, 3866, 10171, 10585, 3868, 10171, 10585, 3874, 10171, 10585, 3890, 10171, 10585, 3906, 10171, 10585, 3924, 10171, 10585, 3998, 10171, 10585, 4010, 10171, 10585, 4028, 10171, 10585, 4046, 10171, 10585, 4232, 10171, 10585, 4270, 10171, 10585, 4278, 10171, 10585, 4308, 10171, 10585, 4310, 10171, 10585, 4312, 10171, 10585, 4370, 10171, 10585, 4372, 10171, 10585, 4374, 10171, 10585, 4378, 10171, 10585, 4412, 10171, 10585, 4414, 10171, 10585, 4416, 10171, 10585, 4796, 10171, 10585, 4798, 10171, 10585, 4804, 10171, 10585, 4806, 10171, 10585, 4808, 10171, 10585, 4810, 10171, 10585, 4812, 10171, 10585, 4814, 10171, 10585, 4816, 10171, 10585, 5034, 10171, 10585, 5292, 10171, 10585, 5296, 10171, 10585, 5314, 10171, 10585, 5332, 10171, 10585, 5410, 10171, 10585, 5416, 10171, 10585, 5418, 10171, 10585, 5422, 10171, 10585, 5462, 10171, 10585, 5478, 10171, 10585, 5480, 10171, 10585, 5482, 10171, 10585, 5484, 10171, 10585, 5486, 10171, 10585, 5508, 10171, 10585, 5510, 10171, 10585, 5512, 10171, 10585, 5514, 10171, 10585, 5666, 10171, 10585, 5678, 10171, 10585, 5704, 10171, 10585, 5732, 10171, 10585, 5786, 10171, 10585, 5794, 10171, 10585, 5866, 10171, 10585, 5868, 10171, 10585, 5870, 10171, 10585, 5906, 10171, 10585, 5914, 10171, 10585, 5928, 10171, 10585, 5932, 10171, 10585, 5974, 10171, 10585, 5976, 10171, 10585, 5984, 10171, 10585, 6032, 10171, 10585, 6034, 10171, 10585, 6038, 10171, 10585, 6148, 10171, 10585, 6150, 10171, 10585, 6152, 10171, 10585, 6154, 10171, 10585, 6264, 10171, 10585, 6274, 10171, 10585, 6300, 10171, 10585, 6328, 10171, 10585, 6336, 10171, 10585, 6550, 10171, 10585, 6552, 10171, 10585, 6846, 10171, 10585, 6848, 10171, 10585, 7066, 10171, 10585, 7068, 10171, 10585, 7406, 10171, 10585, 7408, 10171, 10585, 9313, 0, 10171, 10585, 9313, 8, 10171, 10585, 9313, 16, 10171, 10585, 9313, 28, 10171, 10585, 9313, 40, 10171, 10585, 9313, 58, 10171, 10585, 9313, 162, 10171, 10585, 9313, 422, 10171, 10585, 9313, 622, 10171, 10585, 11223, 838, 10171, 10585, 11223, 1188, 10171, 10585, 11223, 1964, 10171, 10585, 11223, 2266, 10171, 10585, 11723, 0, 10171, 10585, 11723, 8, 10171, 10585, 11723, 16, 10171, 10585, 11723, 28, 10171, 10585, 11723, 40, 10171, 10585, 11723, 58, 10171, 10585, 11723, 162, 10171, 10767, 11639, 4926, 10171, 11163, 11228, 10171, 11224, 10171, 11400, 10173, 12403, 6689, 2170, 10173, 12403, 6689, 2540, 10173, 12403, 6689, 2778, 10173, 12403, 6689, 4200, 10173, 12403, 6689, 4214, 10173, 12403, 6689, 5190, 10173, 12403, 6689, 6260, 10173, 12403, 6689, 6722, 10173, 12403, 6689, 7508, 10173, 12403, 6689, 7694, 10179, 9539, 11054, 10192, 10203, 7580, 10203, 11143, 2170, 10213, 11894, 10221, 7593, 8405, 80, 10221, 7593, 8405, 176, 10221, 7593, 8405, 238, 10221, 7593, 8405, 274, 10221, 7593, 8405, 438, 10221, 7593, 8405, 596, 10221, 7593, 8405, 626, 10221, 7593, 8405, 756, 10221, 7593, 8405, 858, 10221, 7593, 8405, 900, 10221, 7593, 8405, 1038, 10221, 7593, 8405, 1216, 10221, 7593, 8405, 1340, 10221, 7593, 8405, 1350, 10221, 7593, 8405, 1380, 10221, 7593, 8405, 1420, 10221, 7593, 8405, 1520, 10221, 7593, 8405, 1588, 10221, 7593, 8405, 1744, 10221, 7593, 8405, 1860, 10221, 7593, 8405, 1992, 10221, 7593, 8405, 2196, 10221, 7593, 8405, 2290, 10221, 7593, 8405, 2384, 10221, 7593, 8405, 2490, 10221, 7593, 8405, 2648, 10221, 7593, 8405, 2654, 10221, 7593, 8405, 2868, 10221, 7593, 8405, 2954, 10221, 7593, 8405, 3140, 10221, 7593, 8405, 3884, 10221, 7593, 8405, 3904, 10221, 7593, 8405, 4316, 10221, 7593, 8405, 4634, 10221, 7593, 8405, 4742, 10221, 7593, 8405, 5414, 10221, 7593, 8405, 5698, 10221, 7593, 8405, 6268, 10221, 8405, 80, 10221, 8405, 176, 10221, 8405, 202, 10221, 8405, 238, 10221, 8405, 274, 10221, 8405, 438, 10221, 8405, 596, 10221, 8405, 626, 10221, 8405, 658, 10221, 8405, 710, 10221, 8405, 756, 10221, 8405, 858, 10221, 8405, 900, 10221, 8405, 1038, 10221, 8405, 1216, 10221, 8405, 1340, 10221, 8405, 1350, 10221, 8405, 1380, 10221, 8405, 1420, 10221, 8405, 1520, 10221, 8405, 1588, 10221, 8405, 1744, 10221, 8405, 1860, 10221, 8405, 1992, 10221, 8405, 2196, 10221, 8405, 2290, 10221, 8405, 2384, 10221, 8405, 2490, 10221, 8405, 2648, 10221, 8405, 2654, 10221, 8405, 2868, 10221, 8405, 2954, 10221, 8405, 3140, 10221, 8405, 3884, 10221, 8405, 3904, 10221, 8405, 4316, 10221, 8405, 4634, 10221, 8405, 4742, 10221, 8405, 5414, 10221, 8405, 5698, 10221, 8405, 6268, 10221, 8405, 6728, 10221, 8405, 8869, 1216, 10221, 9063, 8405, 80, 10221, 9063, 8405, 176, 10221, 9063, 8405, 238, 10221, 9063, 8405, 274, 10221, 9063, 8405, 438, 10221, 9063, 8405, 596, 10221, 9063, 8405, 626, 10221, 9063, 8405, 756, 10221, 9063, 8405, 858, 10221, 9063, 8405, 900, 10221, 9063, 8405, 1038, 10221, 9063, 8405, 1216, 10221, 9063, 8405, 1340, 10221, 9063, 8405, 1350, 10221, 9063, 8405, 1380, 10221, 9063, 8405, 1420, 10221, 9063, 8405, 1520, 10221, 9063, 8405, 1588, 10221, 9063, 8405, 1744, 10221, 9063, 8405, 1860, 10221, 9063, 8405, 1992, 10221, 9063, 8405, 2196, 10221, 9063, 8405, 2290, 10221, 9063, 8405, 2384, 10221, 9063, 8405, 2490, 10221, 9063, 8405, 2648, 10221, 9063, 8405, 2654, 10221, 9063, 8405, 2868, 10221, 9063, 8405, 2954, 10221, 9063, 8405, 3140, 10221, 9063, 8405, 3884, 10221, 9063, 8405, 3904, 10221, 9063, 8405, 4316, 10221, 9063, 8405, 4634, 10221, 9063, 8405, 4742, 10221, 9063, 8405, 5414, 10221, 9063, 8405, 5698, 10221, 9063, 8405, 6268, 10221, 11163, 11228, 10225, 436, 10225, 5759, 7282, 10225, 5759, 8916, 10225, 5759, 9824, 10225, 5759, 9870, 10225, 5759, 9904, 10225, 5759, 11900, 10225, 6689, 2170, 10225, 6689, 2540, 10225, 6689, 2778, 10225, 6689, 4200, 10225, 6689, 4214, 10225, 6689, 5190, 10225, 6689, 6260, 10225, 6689, 6722, 10225, 6689, 7508, 10225, 6689, 7694, 10225, 7469, 5758, 10225, 7803, 5759, 8, 10225, 7803, 5759, 16, 10225, 7803, 5759, 28, 10225, 7803, 5759, 40, 10225, 7803, 5759, 58, 10225, 7803, 5759, 72, 10225, 7803, 5759, 92, 10225, 7803, 5759, 266, 10225, 7803, 5759, 606, 10225, 7803, 5759, 8031, 8, 10225, 7803, 5759, 8031, 28, 10225, 7803, 5759, 9827, 22, 10225, 7803, 5759, 9827, 34, 10225, 7803, 5759, 9827, 344, 10225, 7803, 5759, 9827, 518, 10225, 7803, 8031, 8, 10225, 7803, 8031, 28, 10225, 8405, 0, 10225, 8405, 8, 10225, 8405, 16, 10225, 8405, 28, 10225, 8405, 40, 10225, 8405, 58, 10225, 8405, 72, 10225, 8405, 92, 10225, 8405, 100, 10225, 8405, 116, 10225, 8405, 138, 10225, 8405, 216, 10225, 8405, 236, 10225, 8405, 266, 10225, 8405, 292, 10225, 8405, 306, 10225, 8405, 332, 10225, 8405, 364, 10225, 8405, 392, 10225, 8405, 462, 10225, 8405, 510, 10225, 8405, 524, 10225, 8405, 556, 10225, 8405, 606, 10225, 8405, 610, 10225, 8405, 652, 10225, 8405, 792, 10225, 8405, 884, 10225, 8405, 974, 10225, 8405, 996, 10225, 8405, 1260, 10225, 8405, 1512, 10225, 8405, 1612, 10225, 8405, 1796, 10225, 8405, 2030, 10225, 8405, 2076, 10225, 8405, 2126, 10225, 8405, 2212, 10225, 8405, 2516, 10225, 8405, 2566, 10225, 8405, 2678, 10225, 8405, 2746, 10225, 8405, 4016, 10225, 8405, 5994, 10225, 8405, 9827, 22, 10225, 8405, 9827, 34, 10225, 8405, 9827, 344, 10225, 8405, 9827, 518, 10227, 171, 7318, 10227, 1496, 10227, 2826, 10227, 5759, 3227, 6498, 10227, 5759, 6498, 10227, 5759, 7282, 10227, 5759, 7758, 10227, 5759, 8916, 10227, 5759, 8944, 10227, 5759, 9824, 10227, 6380, 10227, 6689, 2170, 10227, 6689, 2540, 10227, 6689, 2778, 10227, 6689, 4200, 10227, 6689, 4214, 10227, 6689, 5190, 10227, 6689, 6260, 10227, 6689, 6722, 10227, 6689, 7508, 10227, 6689, 7694, 10227, 7714, 10227, 7803, 5759, 16, 10227, 7803, 5759, 40, 10227, 7803, 5759, 58, 10227, 7803, 5759, 72, 10227, 7803, 5759, 92, 10227, 7803, 5759, 162, 10227, 7803, 5759, 266, 10227, 7803, 5759, 440, 10227, 7803, 5759, 606, 10227, 8405, 0, 10227, 8405, 16, 10227, 8405, 40, 10227, 8405, 58, 10227, 8405, 72, 10227, 8405, 92, 10227, 8405, 100, 10227, 8405, 116, 10227, 8405, 138, 10227, 8405, 162, 10227, 8405, 196, 10227, 8405, 216, 10227, 8405, 236, 10227, 8405, 266, 10227, 8405, 292, 10227, 8405, 306, 10227, 8405, 332, 10227, 8405, 364, 10227, 8405, 392, 10227, 8405, 440, 10227, 8405, 462, 10227, 8405, 510, 10227, 8405, 524, 10227, 8405, 556, 10227, 8405, 606, 10227, 8405, 610, 10227, 8405, 652, 10227, 8405, 670, 10227, 8405, 792, 10227, 8405, 884, 10227, 8405, 974, 10227, 8405, 996, 10227, 8405, 1260, 10227, 8405, 1512, 10227, 8405, 1612, 10227, 8405, 1796, 10227, 8405, 2030, 10227, 8405, 2076, 10227, 8405, 2126, 10227, 8405, 2212, 10227, 8405, 2438, 10227, 8405, 2516, 10227, 8405, 2678, 10227, 8405, 2746, 10227, 8405, 4016, 10227, 8405, 4320, 10227, 8405, 4748, 10227, 8405, 5994, 10231, 9513, 2170, 10231, 9513, 2540, 10231, 9513, 2670, 10231, 9513, 2778, 10231, 9513, 4200, 10231, 9513, 4214, 10231, 9513, 5190, 10231, 9513, 6722, 10231, 9513, 7508, 10231, 9513, 7694, 10231, 9513, 8820, 10231, 9513, 8876, 10241, 1177, 2681, 3276, 10241, 1177, 2681, 6110, 10241, 1177, 2681, 8192, 10241, 1177, 2681, 8251, 6116, 10241, 1177, 2681, 8333, 4830, 10241, 1177, 2681, 8971, 7812, 10241, 1177, 2681, 9395, 7639, 10344, 10241, 1177, 2681, 9893, 9786, 10241, 1177, 2681, 9934, 10241, 1177, 2681, 9953, 4194, 10241, 1177, 2681, 9963, 8290, 10241, 1177, 2681, 10323, 8436, 10241, 1177, 2681, 10680, 10241, 1177, 2681, 11199, 6716, 10241, 1177, 6131, 439, 2681, 9148, 10241, 1177, 6383, 11454, 10241, 1177, 6868, 10241, 1177, 6877, 7388, 10241, 1177, 6877, 8790, 10241, 1177, 6877, 11732, 10241, 1177, 6877, 13000, 10241, 1177, 6995, 7738, 10241, 1177, 7187, 9118, 10241, 1177, 7348, 10241, 1177, 7593, 8790, 10241, 1177, 7593, 13000, 10241, 1177, 7987, 11454, 10241, 1177, 7999, 9784, 10241, 1177, 8071, 569, 4944, 10241, 1177, 8642, 10241, 1177, 9341, 10632, 10241, 1177, 9478, 10241, 1177, 9613, 8898, 10241, 1177, 9630, 10241, 1177, 9832, 10241, 1177, 9878, 10241, 1177, 9954, 10241, 1177, 9992, 10241, 1177, 10146, 10241, 1177, 10252, 10241, 1177, 10458, 10241, 1177, 10638, 10241, 1177, 10689, 6796, 10241, 1177, 10698, 10241, 1177, 10793, 429, 2681, 7100, 10241, 1177, 10998, 10241, 1177, 11013, 10632, 10241, 1177, 11056, 10241, 1177, 11058, 10241, 1177, 11247, 6416, 10241, 1177, 11481, 91, 2681, 10732, 10241, 1177, 11482, 10241, 1177, 11614, 10241, 1177, 11628, 10241, 1177, 11678, 10241, 1177, 11702, 10241, 1177, 11704, 10241, 1177, 11756, 10241, 1177, 11836, 10241, 1177, 11930, 10241, 1177, 11938, 10241, 1177, 12100, 10241, 1177, 12414, 10241, 1177, 12918, 10243, 8405, 0, 10243, 8405, 8, 10243, 8405, 16, 10243, 8405, 26, 10243, 8405, 28, 10243, 8405, 40, 10243, 8405, 100, 10243, 8405, 102, 10243, 8405, 106, 10243, 8405, 108, 10243, 8405, 112, 10243, 8405, 138, 10243, 8405, 142, 10243, 8405, 144, 10243, 8405, 150, 10243, 8405, 152, 10243, 8405, 216, 10243, 8405, 220, 10243, 8405, 224, 10243, 8405, 228, 10243, 8405, 230, 10243, 8405, 236, 10243, 8405, 238, 10243, 8405, 242, 10243, 8405, 246, 10243, 8405, 250, 10243, 8405, 306, 10243, 8405, 310, 10243, 8405, 314, 10243, 8405, 322, 10243, 8405, 326, 10243, 8405, 364, 10243, 8405, 368, 10243, 8405, 374, 10243, 8405, 380, 10243, 8405, 384, 10243, 8405, 392, 10243, 8405, 396, 10243, 8405, 404, 10243, 8405, 412, 10243, 8405, 416, 10243, 8405, 462, 10243, 8405, 468, 10243, 8405, 476, 10243, 8405, 480, 10243, 8405, 486, 10243, 8405, 510, 10243, 8405, 512, 10243, 8405, 514, 10243, 8405, 516, 10243, 8405, 520, 10243, 8405, 524, 10243, 8405, 526, 10243, 8405, 532, 10243, 8405, 536, 10243, 8405, 546, 10243, 8405, 556, 10243, 8405, 560, 10243, 8405, 564, 10243, 8405, 568, 10243, 8405, 576, 10243, 8405, 618, 10243, 8405, 622, 10243, 8405, 626, 10243, 8405, 630, 10243, 8405, 632, 10243, 8405, 652, 10243, 8405, 660, 10243, 8405, 664, 10243, 8405, 670, 10243, 8405, 672, 10243, 8405, 676, 10243, 8405, 678, 10243, 8405, 680, 10243, 8405, 7593, 0, 10243, 8405, 7593, 8, 10243, 8405, 7593, 16, 10243, 8405, 7593, 28, 10243, 8405, 7593, 40, 10243, 8405, 7593, 306, 10243, 8405, 7593, 310, 10243, 8405, 7593, 576, 10243, 8405, 7593, 622, 10243, 8405, 7593, 652, 10243, 8405, 7593, 660, 10243, 8405, 7593, 664, 10243, 8921, 11067, 4926, 10243, 9165, 6224, 10243, 11067, 4926, 10256, 10257, 9495, 6121, 10677, 760, 10260, 10261, 6121, 7711, 5758, 10261, 6121, 7768, 10261, 6121, 8153, 8758, 10261, 6121, 9546, 10261, 6121, 10666, 10261, 6121, 11097, 6435, 6121, 4530, 10261, 6121, 12492, 10261, 7939, 1, 7383, 10374, 10261, 9015, 6121, 7580, 10261, 10982, 10265, 9610, 10267, 2163, 5758, 10267, 4841, 36, 10267, 10469, 4926, 10267, 10670, 10267, 12017, 4926, 10267, 12064, 10277, 11663, 10539, 8774, 10283, 8405, 0, 10283, 8405, 8, 10283, 8405, 16, 10283, 8405, 26, 10283, 8405, 28, 10283, 8405, 40, 10283, 8405, 100, 10283, 8405, 102, 10283, 8405, 106, 10283, 8405, 108, 10283, 8405, 112, 10283, 8405, 138, 10283, 8405, 142, 10283, 8405, 144, 10283, 8405, 150, 10283, 8405, 152, 10283, 8405, 216, 10283, 8405, 220, 10283, 8405, 224, 10283, 8405, 228, 10283, 8405, 230, 10283, 8405, 236, 10283, 8405, 238, 10283, 8405, 242, 10283, 8405, 246, 10283, 8405, 250, 10283, 8405, 306, 10283, 8405, 310, 10283, 8405, 314, 10283, 8405, 322, 10283, 8405, 326, 10283, 8405, 364, 10283, 8405, 368, 10283, 8405, 374, 10283, 8405, 380, 10283, 8405, 384, 10283, 8405, 392, 10283, 8405, 396, 10283, 8405, 404, 10283, 8405, 412, 10283, 8405, 416, 10283, 8405, 462, 10283, 8405, 468, 10283, 8405, 476, 10283, 8405, 480, 10283, 8405, 486, 10283, 8405, 510, 10283, 8405, 512, 10283, 8405, 514, 10283, 8405, 516, 10283, 8405, 520, 10283, 8405, 524, 10283, 8405, 526, 10283, 8405, 532, 10283, 8405, 536, 10283, 8405, 546, 10283, 8405, 556, 10283, 8405, 560, 10283, 8405, 564, 10283, 8405, 568, 10283, 8405, 576, 10283, 8405, 610, 10283, 8405, 612, 10283, 8405, 614, 10283, 8405, 616, 10283, 8405, 618, 10283, 8405, 622, 10283, 8405, 626, 10283, 8405, 630, 10283, 8405, 632, 10283, 8405, 652, 10283, 8405, 660, 10283, 8405, 664, 10283, 8405, 670, 10283, 8405, 672, 10283, 8405, 676, 10283, 8405, 678, 10283, 8405, 680, 10283, 8405, 7593, 0, 10283, 8405, 7593, 8, 10283, 8405, 7593, 16, 10283, 8405, 7593, 28, 10283, 8405, 7593, 40, 10283, 8405, 7593, 236, 10283, 8405, 7593, 238, 10283, 8405, 7593, 242, 10283, 8405, 7593, 246, 10283, 8405, 7593, 250, 10283, 8405, 7593, 306, 10283, 8405, 7593, 310, 10283, 8405, 7593, 326, 10283, 8405, 7593, 384, 10283, 8405, 7593, 416, 10283, 8405, 7593, 510, 10283, 8405, 7593, 512, 10283, 8405, 7593, 514, 10283, 8405, 7593, 516, 10283, 8405, 7593, 520, 10283, 8405, 7593, 532, 10283, 8405, 7593, 546, 10283, 8405, 7593, 568, 10283, 8405, 7593, 576, 10283, 8405, 7593, 622, 10283, 8405, 7593, 652, 10283, 8405, 7593, 660, 10283, 8405, 7593, 664, 10283, 8473, 1044, 10283, 8921, 11067, 4926, 10283, 9165, 4772, 10283, 11067, 4926, 10286, 10297, 2638, 10321, 8774, 10327, 114, 10327, 6408, 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 601, 721, 4848, 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 601, 721, 7442, 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 4117, 721, 4848, 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 4117, 721, 7442, 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 4849, 721, 600, 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 4849, 721, 4116, 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 7443, 721, 600, 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 7443, 721, 4116, 10327, 6409, 9537, 4848, 10327, 7443, 6409, 6121, 1044, 10333, 2779, 8709, 5387, 4894, 10333, 2779, 8709, 8328, 10333, 4895, 5387, 2779, 8708, 10333, 4895, 5387, 7550, 10333, 6516, 10333, 7551, 5387, 4894, 10333, 9796, 10333, 11164, 10333, 11358, 10339, 8405, 601, 5876, 10339, 8405, 601, 10716, 10339, 8405, 604, 10339, 8405, 1045, 7580, 10339, 8405, 1045, 10677, 760, 10339, 8405, 1045, 11649, 760, 10339, 8405, 1109, 1809, 5964, 10339, 8405, 1109, 4423, 5964, 10339, 8405, 1809, 601, 10716, 10339, 8405, 1809, 4117, 10716, 10339, 8405, 1809, 4849, 6434, 10339, 8405, 1809, 4849, 10716, 10339, 8405, 1809, 5550, 10339, 8405, 1809, 5965, 760, 10339, 8405, 1809, 6379, 7908, 10339, 8405, 1809, 6875, 7908, 10339, 8405, 1809, 7443, 10716, 10339, 8405, 1809, 7708, 10339, 8405, 1809, 8151, 5965, 760, 10339, 8405, 1809, 8151, 11095, 5965, 760, 10339, 8405, 1809, 8432, 10339, 8405, 1809, 10267, 12017, 4926, 10339, 8405, 1809, 10677, 4876, 10339, 8405, 1809, 11095, 5965, 760, 10339, 8405, 1809, 11449, 7908, 10339, 8405, 1911, 5965, 760, 10339, 8405, 1911, 8151, 5965, 760, 10339, 8405, 1911, 8151, 11095, 5965, 760, 10339, 8405, 1911, 11095, 5965, 760, 10339, 8405, 3071, 10799, 5965, 4926, 10339, 8405, 4117, 5876, 10339, 8405, 4117, 10716, 10339, 8405, 4389, 11859, 6610, 10339, 8405, 4423, 5965, 760, 10339, 8405, 4423, 8151, 5965, 760, 10339, 8405, 4423, 8151, 11095, 5965, 760, 10339, 8405, 4423, 11095, 5965, 760, 10339, 8405, 4849, 4389, 5550, 10339, 8405, 4849, 10716, 10339, 8405, 5385, 7530, 10339, 8405, 5445, 5758, 10339, 8405, 6179, 10799, 5965, 4926, 10339, 8405, 6379, 7908, 10339, 8405, 6485, 1809, 5964, 10339, 8405, 6485, 4423, 5964, 10339, 8405, 6610, 10339, 8405, 6623, 7908, 10339, 8405, 6875, 7908, 10339, 8405, 7121, 7443, 8077, 6408, 10339, 8405, 7173, 5758, 10339, 8405, 7390, 10339, 8405, 7443, 4389, 5550, 10339, 8405, 7443, 10716, 10339, 8405, 7530, 10339, 8405, 7551, 8167, 5758, 10339, 8405, 7593, 0, 10339, 8405, 7593, 2, 10339, 8405, 7593, 4, 10339, 8405, 7593, 5, 6121, 3966, 10339, 8405, 7593, 6, 10339, 8405, 7593, 8, 10339, 8405, 7593, 10, 10339, 8405, 7593, 12, 10339, 8405, 7593, 14, 10339, 8405, 7593, 15, 6121, 4530, 10339, 8405, 7593, 17, 6121, 8758, 10339, 8405, 7593, 18, 10339, 8405, 7593, 19, 6121, 12426, 10339, 8405, 7593, 20, 10339, 8405, 7593, 22, 10339, 8405, 7593, 23, 6121, 9553, 4530, 10339, 8405, 7593, 23, 6121, 11215, 4530, 10339, 8405, 7593, 24, 10339, 8405, 7593, 25, 6121, 4530, 10339, 8405, 7593, 27, 6121, 4849, 4530, 10339, 8405, 7593, 27, 6121, 11215, 4530, 10339, 8405, 7593, 28, 10339, 8405, 7593, 30, 10339, 8405, 7593, 34, 10339, 8405, 7593, 36, 10339, 8405, 7593, 37, 6121, 4530, 10339, 8405, 7593, 38, 10339, 8405, 7593, 39, 6121, 9553, 4530, 10339, 8405, 7593, 40, 10339, 8405, 7593, 41, 760, 10339, 8405, 7593, 42, 10339, 8405, 7593, 43, 6121, 4530, 10339, 8405, 7593, 44, 10339, 8405, 7593, 46, 10339, 8405, 7593, 48, 10339, 8405, 7593, 50, 10339, 8405, 7593, 51, 6121, 3966, 10339, 8405, 7593, 51, 6121, 11215, 4530, 10339, 8405, 7593, 710, 10339, 8405, 7593, 888, 10339, 8405, 7593, 1110, 10339, 8405, 7593, 1124, 10339, 8405, 7593, 1130, 10339, 8405, 7593, 1138, 10339, 8405, 7593, 2216, 10339, 8405, 7593, 2725, 4389, 28, 10339, 8405, 7593, 3774, 10339, 8405, 7593, 4614, 10339, 8405, 7593, 5385, 8, 10339, 8405, 7593, 5385, 28, 10339, 8405, 7593, 6406, 10339, 8405, 7593, 6674, 10339, 8405, 7593, 6824, 10339, 8405, 7593, 6879, 2216, 10339, 8405, 7593, 6879, 6824, 10339, 8405, 7593, 7494, 10339, 8405, 7593, 7682, 10339, 8405, 7593, 7981, 28, 10339, 8405, 7593, 8005, 4389, 28, 10339, 8405, 7593, 8679, 12, 10339, 8405, 7593, 8869, 0, 10339, 8405, 7593, 8869, 14, 10339, 8405, 7593, 8869, 16, 10339, 8405, 7593, 8869, 24, 10339, 8405, 7593, 8869, 25, 6121, 4895, 1760, 10339, 8405, 7593, 8869, 34, 10339, 8405, 7593, 8869, 35, 6121, 4530, 10339, 8405, 7593, 8869, 42, 10339, 8405, 7593, 8869, 66, 10339, 8405, 7593, 8869, 5385, 8, 10339, 8405, 7593, 8869, 6406, 10339, 8405, 7593, 9063, 16, 10339, 8405, 7593, 9063, 17, 6121, 8758, 10339, 8405, 7593, 9063, 22, 10339, 8405, 7593, 9063, 26, 10339, 8405, 7593, 9063, 40, 10339, 8405, 7593, 9063, 10267, 34, 10339, 8405, 7593, 9185, 19, 6121, 8758, 10339, 8405, 7593, 9808, 10339, 8405, 7593, 10489, 5385, 8, 10339, 8405, 7593, 10489, 9313, 5836, 10339, 8405, 7593, 10523, 40, 10339, 8405, 8153, 7390, 10339, 8405, 8153, 11424, 10339, 8405, 8432, 10339, 8405, 8473, 6875, 7908, 10339, 8405, 8473, 8153, 6379, 7908, 10339, 8405, 8473, 8153, 6875, 7908, 10339, 8405, 8631, 601, 6434, 10339, 8405, 8631, 4117, 6434, 10339, 8405, 8631, 6610, 10339, 8405, 8631, 10267, 12017, 4926, 10339, 8405, 8631, 12017, 4926, 10339, 8405, 8645, 4530, 10339, 8405, 8755, 721, 1809, 5964, 10339, 8405, 8755, 721, 4423, 5964, 10339, 8405, 8869, 6616, 10339, 8405, 9063, 0, 10339, 8405, 9063, 2, 10339, 8405, 9063, 6, 10339, 8405, 9063, 8, 10339, 8405, 9063, 12, 10339, 8405, 9063, 14, 10339, 8405, 9063, 16, 10339, 8405, 9063, 18, 10339, 8405, 9063, 20, 10339, 8405, 9063, 22, 10339, 8405, 9063, 24, 10339, 8405, 9063, 26, 10339, 8405, 9063, 28, 10339, 8405, 9063, 30, 10339, 8405, 9063, 34, 10339, 8405, 9063, 38, 10339, 8405, 9063, 40, 10339, 8405, 9063, 42, 10339, 8405, 9063, 44, 10339, 8405, 9063, 66, 10339, 8405, 9063, 450, 10339, 8405, 9063, 7981, 2, 10339, 8405, 9063, 10489, 8, 10339, 8405, 9063, 10489, 26, 10339, 8405, 9079, 4849, 4389, 5550, 10339, 8405, 9079, 7443, 4389, 5550, 10339, 8405, 9089, 5965, 3071, 506, 10339, 8405, 9089, 5965, 3071, 520, 10339, 8405, 9089, 5965, 3071, 5432, 10339, 8405, 9089, 5965, 3071, 7514, 10339, 8405, 9089, 5965, 6179, 506, 10339, 8405, 9089, 5965, 6179, 520, 10339, 8405, 9089, 5965, 6179, 5432, 10339, 8405, 9089, 5965, 6179, 7514, 10339, 8405, 9313, 5836, 10339, 8405, 9828, 10339, 8405, 9977, 176, 10339, 8405, 10221, 1992, 10339, 8405, 10489, 6616, 10339, 8405, 10489, 9313, 5836, 10339, 8405, 10677, 4876, 10339, 8405, 10985, 5965, 760, 10339, 8405, 10985, 8151, 5965, 760, 10339, 8405, 10985, 8151, 11095, 5965, 760, 10339, 8405, 10985, 11095, 5965, 760, 10339, 8405, 11424, 10339, 8405, 11449, 7908, 10339, 8405, 11625, 5965, 760, 10339, 8405, 11625, 8151, 5965, 760, 10339, 8405, 11625, 8151, 11095, 5965, 760, 10339, 8405, 11625, 11095, 5965, 760, 10339, 8405, 11859, 6610, 10339, 8405, 12380, 10343, 1177, 3070, 10343, 1177, 6178, 10343, 1177, 6716, 10346, 10350, 10351, 7768, 10351, 13060, 10353, 6689, 8696, 10357, 9095, 6689, 6260, 10357, 9095, 8525, 8162, 10357, 9095, 8525, 8874, 10357, 9095, 8525, 8876, 10357, 9095, 8525, 9286, 10357, 9095, 8525, 9700, 10357, 9095, 8525, 10150, 10357, 9095, 8525, 10200, 10357, 9095, 8525, 10360, 10357, 9095, 8525, 10622, 10357, 9095, 8525, 11232, 10363, 7608, 10379, 428, 10383, 6622, 10385, 6505, 5830, 10385, 6879, 6622, 10385, 7089, 6622, 10385, 7821, 5830, 10388, 10411, 568, 10411, 6121, 7709, 10374, 10411, 6121, 11649, 8758, 10429, 4927, 5668, 10429, 4927, 8153, 5668, 10429, 8153, 4399, 4926, 10429, 8405, 0, 10429, 8405, 8, 10429, 8405, 16, 10429, 8405, 28, 10429, 8405, 40, 10429, 8405, 100, 10429, 8405, 116, 10429, 8405, 138, 10429, 8405, 162, 10429, 8405, 196, 10429, 8405, 216, 10429, 8405, 236, 10429, 8405, 292, 10429, 8405, 306, 10429, 8405, 332, 10429, 8405, 364, 10429, 8405, 392, 10429, 8405, 462, 10429, 8405, 496, 10429, 8405, 510, 10429, 8405, 524, 10429, 8405, 556, 10429, 8405, 622, 10429, 8405, 638, 10429, 8405, 652, 10429, 8405, 670, 10429, 8405, 884, 10429, 8405, 974, 10429, 8405, 1080, 10429, 8405, 1250, 10429, 8405, 1612, 10429, 8405, 2030, 10429, 8405, 2076, 10429, 8405, 2126, 10429, 8405, 2212, 10429, 8405, 2516, 10429, 8405, 2678, 10429, 8405, 2732, 10429, 8405, 2746, 10429, 8405, 3146, 10429, 8405, 5978, 10429, 8405, 5994, 10429, 8405, 7593, 0, 10429, 8405, 8921, 236, 10429, 8405, 10707, 652, 10429, 8405, 10721, 196, 10429, 8405, 11395, 2516, 10429, 8405, 11900, 10429, 8717, 4399, 4926, 10429, 11257, 8405, 510, 10429, 11257, 8405, 622, 10429, 11257, 8405, 652, 10429, 11843, 8405, 510, 10431, 4093, 5759, 457, 3696, 10431, 4093, 5759, 778, 10431, 4093, 5759, 824, 10431, 4093, 5759, 862, 10431, 4093, 5759, 1780, 10431, 4093, 5759, 2386, 10431, 4093, 5759, 2498, 10431, 4093, 5759, 3948, 10431, 4093, 5759, 3954, 10431, 4093, 5759, 4114, 10431, 4093, 5759, 4418, 10431, 4093, 5759, 4536, 10431, 4093, 5759, 4874, 10431, 4093, 5759, 5700, 10431, 4093, 5759, 6090, 10431, 4093, 5759, 6107, 3706, 10431, 4093, 5759, 6434, 10431, 4093, 5759, 6533, 1760, 10431, 4093, 5759, 6574, 10431, 4093, 5759, 6712, 10431, 4093, 5759, 6794, 10431, 4093, 5759, 7379, 5968, 10431, 4093, 5759, 7586, 10431, 4093, 5759, 7593, 742, 10431, 4093, 5759, 7702, 10431, 4093, 5759, 7752, 10431, 4093, 5759, 7830, 10431, 4093, 5759, 8068, 10431, 4093, 5759, 8126, 10431, 4093, 5759, 8270, 10431, 4093, 5759, 8296, 10431, 4093, 5759, 8599, 4398, 10431, 4093, 5759, 8704, 10431, 4093, 5759, 9036, 10431, 4093, 5759, 9064, 10431, 4093, 5759, 9462, 10431, 4093, 5759, 9568, 10431, 4093, 5759, 9638, 10431, 4093, 5759, 10216, 10431, 4093, 5759, 10316, 10431, 4093, 5759, 10546, 10431, 4093, 5759, 10611, 4398, 10431, 4093, 5759, 10744, 10431, 4093, 5759, 10753, 7378, 10431, 4093, 5759, 10767, 9525, 8758, 10431, 4093, 5759, 11718, 10433, 5830, 10445, 11054, 10452, 10453, 445, 6741, 568, 10453, 445, 11621, 568, 10453, 835, 2091, 11621, 568, 10453, 6377, 2091, 6741, 568, 10453, 6377, 2091, 7919, 6741, 568, 10453, 6377, 7919, 6741, 568, 10453, 6377, 8167, 5758, 10453, 6377, 12345, 2091, 6741, 568, 10453, 6377, 12345, 8167, 5758, 10453, 7767, 10476, 10455, 5392, 10461, 4876, 10465, 7121, 4848, 10465, 7121, 7442, 10465, 7773, 4848, 10465, 7773, 4849, 721, 7121, 4849, 721, 7121, 7442, 10465, 7773, 4849, 721, 7121, 7442, 10465, 7773, 4849, 721, 7773, 7443, 721, 7121, 4848, 10465, 7773, 4849, 721, 7773, 7443, 721, 7121, 7442, 10465, 7773, 7442, 10465, 7773, 7443, 721, 7121, 4848, 10465, 7773, 7443, 721, 7121, 4849, 721, 7121, 7442, 10469, 4926, 10469, 12017, 4926, 10470, 10475, 7337, 8774, 10486, 10489, 2091, 5758, 10489, 6408, 10489, 6409, 6121, 10666, 10489, 6731, 2510, 10489, 7390, 10489, 7708, 10489, 7709, 8166, 10489, 8153, 7390, 10489, 8153, 7391, 11195, 4926, 10489, 8153, 8759, 2091, 5758, 10489, 8231, 12108, 10489, 8849, 7390, 10489, 9595, 5758, 10489, 9641, 8225, 6907, 8022, 10489, 10469, 4926, 10489, 11224, 10489, 11767, 9063, 22, 10504, 10513, 7821, 5830, 10513, 7821, 7089, 6622, 10513, 7821, 8056, 10514, 10529, 9898, 10553, 11621, 568, 10574, 10575, 445, 6741, 568, 10575, 445, 11621, 568, 10575, 835, 2091, 11621, 568, 10575, 6377, 2091, 6741, 568, 10575, 6377, 2091, 7919, 6741, 568, 10575, 6377, 7919, 6741, 568, 10575, 6377, 8167, 5758, 10575, 6377, 12345, 2091, 6741, 568, 10575, 6377, 12345, 8167, 5758, 10575, 7767, 10476, 10579, 428, 10579, 429, 445, 6741, 568, 10579, 429, 445, 6741, 569, 6121, 1045, 6376, 10579, 429, 6121, 2091, 6741, 568, 10579, 429, 6377, 2091, 6741, 568, 10579, 429, 6377, 7709, 10374, 10579, 429, 6377, 7919, 6741, 568, 10579, 429, 6377, 8167, 5758, 10579, 6121, 1044, 10579, 6121, 5445, 5759, 6490, 10579, 6121, 13061, 5759, 6490, 10579, 6377, 8762, 10579, 6377, 10578, 10579, 6377, 11097, 6434, 10579, 7991, 721, 8329, 115, 3993, 6121, 8762, 10579, 7991, 8762, 10579, 11183, 9718, 10604, 10607, 7803, 5759, 16, 10607, 7803, 5759, 40, 10607, 8405, 0, 10607, 8405, 16, 10607, 8405, 40, 10607, 8405, 100, 10607, 8405, 138, 10607, 8405, 216, 10607, 8405, 306, 10607, 8405, 332, 10607, 8405, 364, 10607, 8405, 392, 10607, 8405, 462, 10607, 8405, 524, 10607, 8405, 556, 10607, 8405, 622, 10607, 8405, 652, 10607, 8405, 2030, 10629, 8405, 652, 10629, 8405, 656, 10629, 8405, 664, 10629, 8405, 3006, 10629, 8405, 3008, 10629, 8405, 3010, 10629, 8405, 3014, 10629, 8405, 3016, 10629, 8405, 3018, 10629, 8405, 3020, 10629, 8405, 3022, 10629, 8405, 3024, 10629, 8405, 3026, 10629, 8405, 3028, 10629, 8405, 3030, 10629, 8405, 3032, 10629, 8405, 3034, 10629, 8405, 3036, 10629, 8405, 3038, 10629, 8405, 3040, 10629, 8405, 3042, 10629, 8405, 3044, 10629, 8405, 3046, 10629, 8405, 3062, 10629, 8405, 3291, 6170, 10629, 8405, 6162, 10629, 8405, 6164, 10629, 8405, 6166, 10629, 8405, 6168, 10629, 8405, 6170, 10629, 8405, 6174, 10629, 8405, 6176, 10629, 8405, 6180, 10629, 8405, 6182, 10629, 8405, 6184, 10629, 8405, 6186, 10629, 8405, 6190, 10629, 8405, 6192, 10629, 8405, 6194, 10629, 8405, 7844, 10629, 8405, 7846, 10629, 8405, 7848, 10629, 8405, 7989, 8973, 3018, 10629, 8405, 7989, 8973, 3020, 10629, 8405, 8863, 3018, 10629, 8405, 8863, 3022, 10629, 8405, 8863, 3032, 10629, 8405, 8863, 6170, 10629, 8405, 8863, 6172, 10629, 8405, 8863, 6176, 10629, 8405, 8863, 6178, 10629, 8405, 8863, 6192, 10629, 8405, 8985, 6192, 10629, 8405, 11849, 3046, 10629, 10339, 8405, 12965, 4926, 10631, 5759, 186, 10643, 6121, 1045, 6376, 10643, 6121, 8689, 91, 8004, 10643, 6121, 10666, 10644, 10661, 6129, 9178, 10661, 8405, 16, 10661, 8405, 40, 10661, 8405, 246, 10661, 8405, 486, 10661, 8405, 568, 10661, 8405, 632, 10661, 8405, 680, 10661, 8405, 710, 10661, 8405, 1578, 10661, 8405, 1612, 10661, 8405, 1892, 10661, 8405, 2110, 10661, 8405, 2574, 10661, 8405, 2674, 10661, 8405, 3080, 10661, 8405, 3252, 10661, 8405, 3774, 10661, 8405, 4066, 10661, 8405, 4538, 10661, 8405, 5494, 10661, 8405, 5624, 10661, 8405, 5698, 10661, 8405, 6262, 10661, 8405, 6674, 10661, 8405, 6822, 10661, 8405, 6850, 10661, 8405, 7080, 10661, 8405, 7422, 10661, 8405, 7482, 10661, 8405, 8814, 10664, 10665, 6121, 5525, 6706, 10670, 10674, 10677, 761, 6121, 11649, 8758, 10677, 761, 7991, 7443, 10642, 10677, 761, 8153, 4849, 11378, 10677, 761, 8849, 7443, 11378, 10677, 4215, 4112, 10677, 4719, 8641, 4926, 10677, 4719, 8641, 4927, 7121, 4388, 10677, 4719, 8641, 4927, 7773, 4388, 10677, 4719, 8641, 6121, 8921, 7605, 4926, 10677, 4719, 8641, 6121, 8921, 7605, 4927, 7773, 4388, 10677, 4876, 10677, 4877, 6121, 8057, 6376, 10677, 4877, 6121, 8057, 6490, 10677, 4877, 6121, 8473, 1044, 10677, 4877, 10982, 10677, 4923, 6121, 8759, 5758, 10677, 7708, 10677, 8963, 4876, 10677, 10154, 10677, 12043, 11067, 4926, 10679, 8744, 10701, 569, 2681, 9746, 10708, 10719, 5238, 10722, 10737, 5758, 10749, 9483, 8775, 1078, 10749, 9483, 8775, 1135, 12010, 10749, 9483, 8775, 3268, 10749, 9483, 8775, 4619, 2020, 10749, 9483, 8775, 4619, 9884, 10749, 9483, 8775, 5048, 10749, 9483, 8775, 5921, 1583, 9000, 10749, 9483, 8775, 5970, 10749, 9483, 8775, 6203, 726, 10749, 9483, 8775, 6203, 4728, 10749, 9483, 8775, 6387, 3274, 10749, 9483, 8775, 6387, 4952, 10749, 9483, 8775, 6387, 5449, 3274, 10749, 9483, 8775, 6387, 5449, 6866, 10749, 9483, 8775, 6387, 6866, 10749, 9483, 8775, 6387, 8470, 10749, 9483, 8775, 6387, 9886, 10749, 9483, 8775, 6387, 11022, 10749, 9483, 8775, 6419, 1135, 2020, 10749, 9483, 8775, 6419, 12010, 10749, 9483, 8775, 6426, 10749, 9483, 8775, 6581, 7892, 10749, 9483, 8775, 6581, 8366, 10749, 9483, 8775, 6581, 8728, 10749, 9483, 8775, 6690, 10749, 9483, 8775, 6691, 9884, 10749, 9483, 8775, 7092, 10749, 9483, 8775, 7329, 2020, 10749, 9483, 8775, 7329, 6690, 10749, 9483, 8775, 7329, 12010, 10749, 9483, 8775, 7398, 10749, 9483, 8775, 7434, 10749, 9483, 8775, 7660, 10749, 9483, 8775, 7678, 10749, 9483, 8775, 7679, 7928, 10749, 9483, 8775, 7688, 10749, 9483, 8775, 7788, 10749, 9483, 8775, 7837, 8364, 10749, 9483, 8775, 8094, 10749, 9483, 8775, 8115, 3269, 1079, 10018, 10749, 9483, 8775, 8115, 10815, 195, 10018, 10749, 9483, 8775, 8115, 11863, 5377, 10018, 10749, 9483, 8775, 8115, 12085, 9775, 10018, 10749, 9483, 8775, 8115, 12372, 10749, 9483, 8775, 8115, 13020, 10749, 9483, 8775, 8171, 12110, 10749, 9483, 8775, 8171, 12904, 10749, 9483, 8775, 8199, 9703, 8053, 7786, 10749, 9483, 8775, 8237, 17, 8949, 13020, 10749, 9483, 8775, 8237, 5055, 6978, 10749, 9483, 8775, 8237, 8506, 10749, 9483, 8775, 8237, 9451, 8053, 10008, 10749, 9483, 8775, 8237, 9451, 8053, 11684, 10749, 9483, 8775, 8237, 9703, 8053, 8776, 10749, 9483, 8775, 8237, 9703, 10007, 144, 10749, 9483, 8775, 8237, 9884, 10749, 9483, 8775, 8237, 9885, 9999, 6980, 10749, 9483, 8775, 8237, 10811, 144, 10749, 9483, 8775, 8237, 10811, 310, 10749, 9483, 8775, 8237, 10811, 405, 726, 10749, 9483, 8775, 8237, 10811, 405, 4728, 10749, 9483, 8775, 8237, 10811, 462, 10749, 9483, 8775, 8237, 10811, 678, 10749, 9483, 8775, 8237, 10811, 5048, 10749, 9483, 8775, 8237, 11609, 10710, 10749, 9483, 8775, 8249, 8114, 10749, 9483, 8775, 8249, 8948, 10749, 9483, 8775, 8265, 2021, 726, 10749, 9483, 8775, 8265, 2021, 4728, 10749, 9483, 8775, 8265, 9884, 10749, 9483, 8775, 8265, 12989, 6680, 10749, 9483, 8775, 8265, 12989, 9888, 10749, 9483, 8775, 8321, 8801, 11038, 10749, 9483, 8775, 8341, 10648, 10749, 9483, 8775, 8364, 10749, 9483, 8775, 8365, 726, 10749, 9483, 8775, 8365, 4728, 10749, 9483, 8775, 8397, 1079, 9090, 10749, 9483, 8775, 8397, 4159, 9092, 10749, 9483, 8775, 8397, 7735, 9090, 10749, 9483, 8775, 8397, 9359, 9092, 10749, 9483, 8775, 8397, 10615, 9090, 10749, 9483, 8775, 8475, 4618, 10749, 9483, 8775, 8537, 2020, 10749, 9483, 8775, 8537, 9884, 10749, 9483, 8775, 8538, 10749, 9483, 8775, 8557, 9884, 10749, 9483, 8775, 8587, 2020, 10749, 9483, 8775, 8587, 9884, 10749, 9483, 8775, 8614, 10749, 9483, 8775, 8686, 10749, 9483, 8775, 8687, 2020, 10749, 9483, 8775, 8748, 10749, 9483, 8775, 8798, 10749, 9483, 8775, 8850, 10749, 9483, 8775, 8909, 2020, 10749, 9483, 8775, 8909, 6690, 10749, 9483, 8775, 8909, 12010, 10749, 9483, 8775, 8949, 3269, 1079, 10018, 10749, 9483, 8775, 8949, 10815, 195, 10018, 10749, 9483, 8775, 8949, 11863, 5377, 10018, 10749, 9483, 8775, 8949, 12085, 9775, 10018, 10749, 9483, 8775, 8949, 12372, 10749, 9483, 8775, 8954, 10749, 9483, 8775, 9009, 144, 10749, 9483, 8775, 9009, 216, 10749, 9483, 8775, 9009, 310, 10749, 9483, 8775, 9009, 404, 10749, 9483, 8775, 9009, 462, 10749, 9483, 8775, 9009, 678, 10749, 9483, 8775, 9009, 2882, 10749, 9483, 8775, 9080, 10749, 9483, 8775, 9160, 10749, 9483, 8775, 9260, 10749, 9483, 8775, 9267, 1583, 8237, 2882, 10749, 9483, 8775, 9350, 10749, 9483, 8775, 9399, 2021, 726, 10749, 9483, 8775, 9399, 2021, 4728, 10749, 9483, 8775, 9399, 2021, 4954, 10749, 9483, 8775, 9399, 9884, 10749, 9483, 8775, 9412, 10749, 9483, 8775, 9415, 2020, 10749, 9483, 8775, 9415, 3250, 10749, 9483, 8775, 9415, 9884, 10749, 9483, 8775, 9420, 10749, 9483, 8775, 9440, 10749, 9483, 8775, 9584, 10749, 9483, 8775, 9586, 10749, 9483, 8775, 9620, 10749, 9483, 8775, 9740, 10749, 9483, 8775, 9741, 9874, 10749, 9483, 8775, 9755, 2020, 10749, 9483, 8775, 9755, 4957, 9742, 10749, 9483, 8775, 9755, 9884, 10749, 9483, 8775, 9756, 10749, 9483, 8775, 9774, 10749, 9483, 8775, 9790, 10749, 9483, 8775, 9815, 9884, 10749, 9483, 8775, 9848, 10749, 9483, 8775, 9873, 2020, 10749, 9483, 8775, 9873, 9884, 10749, 9483, 8775, 9876, 10749, 9483, 8775, 9936, 10749, 9483, 8775, 9943, 2020, 10749, 9483, 8775, 9943, 9884, 10749, 9483, 8775, 10005, 3269, 7168, 10749, 9483, 8775, 10005, 3269, 8464, 10749, 9483, 8775, 10005, 6690, 10749, 9483, 8775, 10005, 9778, 10749, 9483, 8775, 10010, 10749, 9483, 8775, 10011, 12989, 6680, 10749, 9483, 8775, 10011, 12989, 9889, 726, 10749, 9483, 8775, 10011, 12989, 9889, 4728, 10749, 9483, 8775, 10013, 222, 10749, 9483, 8775, 10164, 10749, 9483, 8775, 10250, 10749, 9483, 8775, 10284, 10749, 9483, 8775, 10288, 10749, 9483, 8775, 10289, 3250, 10749, 9483, 8775, 10290, 10749, 9483, 8775, 10292, 10749, 9483, 8775, 10325, 3249, 8613, 6978, 10749, 9483, 8775, 10325, 3249, 9997, 6978, 10749, 9483, 8775, 10325, 7785, 6978, 10749, 9483, 8775, 10325, 8613, 6978, 10749, 9483, 8775, 10325, 8855, 6978, 10749, 9483, 8775, 10325, 9429, 6978, 10749, 9483, 8775, 10325, 9597, 6978, 10749, 9483, 8775, 10325, 9597, 10617, 6978, 10749, 9483, 8775, 10325, 9997, 6978, 10749, 9483, 8775, 10325, 10617, 6978, 10749, 9483, 8775, 10325, 10617, 9429, 6978, 10749, 9483, 8775, 10325, 11372, 10749, 9483, 8775, 10325, 11743, 6978, 10749, 9483, 8775, 10412, 10749, 9483, 8775, 10418, 10749, 9483, 8775, 10419, 2020, 10749, 9483, 8775, 10500, 10749, 9483, 8775, 10525, 7946, 10749, 9483, 8775, 10525, 7947, 9174, 10749, 9483, 8775, 10525, 7947, 10646, 10749, 9483, 8775, 10525, 7947, 11852, 10749, 9483, 8775, 10525, 9778, 10749, 9483, 8775, 10525, 9779, 9174, 10749, 9483, 8775, 10525, 9779, 10646, 10749, 9483, 8775, 10525, 9779, 11852, 10749, 9483, 8775, 10618, 10749, 9483, 8775, 10649, 2020, 10749, 9483, 8775, 10649, 3250, 10749, 9483, 8775, 10649, 9884, 10749, 9483, 8775, 10813, 450, 10749, 9483, 8775, 10974, 10749, 9483, 8775, 10991, 10008, 10749, 9483, 8775, 10991, 11684, 10749, 9483, 8775, 10991, 12360, 10749, 9483, 8775, 11046, 10749, 9483, 8775, 11074, 10749, 9483, 8775, 11078, 10749, 9483, 8775, 11079, 2021, 726, 10749, 9483, 8775, 11079, 2021, 4728, 10749, 9483, 8775, 11079, 2021, 4954, 10749, 9483, 8775, 11079, 9884, 10749, 9483, 8775, 11082, 10749, 9483, 8775, 11149, 2020, 10749, 9483, 8775, 11149, 9884, 10749, 9483, 8775, 11188, 10749, 9483, 8775, 11189, 2020, 10749, 9483, 8775, 11348, 10749, 9483, 8775, 11374, 10749, 9483, 8775, 11402, 10749, 9483, 8775, 11403, 6690, 10749, 9483, 8775, 11416, 10749, 9483, 8775, 11421, 8801, 11038, 10749, 9483, 8775, 11421, 11347, 2020, 10749, 9483, 8775, 11422, 10749, 9483, 8775, 11423, 2020, 10749, 9483, 8775, 11423, 6690, 10749, 9483, 8775, 11602, 10749, 9483, 8775, 11643, 27, 7928, 10749, 9483, 8775, 11643, 27, 9172, 10749, 9483, 8775, 11654, 10749, 9483, 8775, 11656, 10749, 9483, 8775, 12111, 2020, 10749, 9483, 8775, 12111, 9884, 10749, 9483, 8775, 12112, 10749, 9483, 8775, 12113, 2020, 10749, 9483, 8775, 12113, 9884, 10749, 9483, 8775, 12120, 10749, 9483, 8775, 12365, 1126, 10749, 9483, 8775, 12365, 1134, 10749, 9483, 8775, 12400, 10749, 9483, 8775, 12474, 10749, 9483, 8775, 12872, 10749, 9483, 8775, 12904, 10749, 9483, 8775, 13052, 10749, 9483, 8775, 13082, 10749, 9483, 8775, 13084, 10749, 9483, 8775, 13186, 10749, 9483, 8775, 13206, 10749, 9483, 8775, 13208, 10749, 9483, 8775, 13216, 10749, 9483, 8775, 13220, 10749, 9483, 8775, 13222, 10749, 9483, 8775, 13352, 10749, 9483, 8775, 13400, 10749, 9483, 8775, 13404, 10750, 10759, 2690, 10763, 2725, 11791, 6434, 10763, 5385, 8057, 6434, 10763, 8065, 8057, 6434, 10763, 8241, 8057, 6434, 10763, 9115, 10260, 10763, 10260, 10767, 47, 6376, 10767, 47, 6490, 10767, 283, 6490, 10767, 601, 5877, 6490, 10767, 603, 6376, 10767, 605, 6376, 10767, 1045, 6376, 10767, 1045, 6377, 7442, 10767, 1045, 6490, 10767, 1809, 4876, 10767, 2091, 7709, 6376, 10767, 4117, 5877, 6490, 10767, 4215, 4113, 6376, 10767, 4531, 6376, 10767, 4536, 10767, 4849, 4389, 5551, 6376, 10767, 4849, 4389, 5551, 6490, 10767, 4849, 5877, 6490, 10767, 4849, 6409, 6376, 10767, 4849, 6409, 6490, 10767, 4849, 6435, 6376, 10767, 4849, 6435, 6490, 10767, 4849, 7443, 6435, 6376, 10767, 4849, 7443, 6435, 6490, 10767, 4849, 9327, 6376, 10767, 4849, 10717, 6376, 10767, 4849, 10717, 6490, 10767, 4895, 8153, 9719, 9548, 10767, 4895, 8759, 9548, 10767, 4895, 9719, 9548, 10767, 4895, 10677, 4877, 9548, 10767, 5445, 5759, 6490, 10767, 5551, 6376, 10767, 5551, 6490, 10767, 5551, 9548, 10767, 6115, 8015, 6376, 10767, 6379, 5965, 4926, 10767, 6379, 7908, 10767, 6379, 7909, 6490, 10767, 6516, 10767, 6517, 6490, 10767, 6546, 10767, 6547, 6490, 10767, 6617, 6376, 10767, 6617, 6377, 7442, 10767, 6617, 6490, 10767, 6875, 5965, 4926, 10767, 6875, 7908, 10767, 6875, 7909, 6490, 10767, 6879, 9412, 10767, 6879, 9483, 9796, 10767, 6879, 9483, 11164, 10767, 6879, 9483, 11358, 10767, 6879, 10809, 7724, 10767, 6879, 12120, 10767, 6879, 13036, 10767, 7089, 7593, 8405, 0, 10767, 7089, 7593, 8405, 4, 10767, 7089, 7593, 8405, 5, 9072, 10767, 7089, 7593, 8405, 6, 10767, 7089, 7593, 8405, 8, 10767, 7089, 7593, 8405, 12, 10767, 7089, 7593, 8405, 14, 10767, 7089, 7593, 8405, 16, 10767, 7089, 7593, 8405, 20, 10767, 7089, 7593, 8405, 22, 10767, 7089, 7593, 8405, 24, 10767, 7089, 7593, 8405, 26, 10767, 7089, 7593, 8405, 28, 10767, 7089, 7593, 8405, 34, 10767, 7089, 7593, 8405, 35, 6490, 10767, 7089, 7593, 8405, 35, 9642, 10767, 7089, 7593, 8405, 36, 10767, 7089, 7593, 8405, 38, 10767, 7089, 7593, 8405, 40, 10767, 7089, 7593, 8405, 42, 10767, 7089, 7593, 8405, 46, 10767, 7089, 7593, 8405, 50, 10767, 7089, 7593, 8405, 66, 10767, 7089, 7593, 8405, 82, 10767, 7089, 7593, 8405, 94, 10767, 7089, 7593, 8405, 1130, 10767, 7089, 7593, 8405, 4895, 36, 10767, 7089, 7593, 8405, 9365, 6, 10767, 7089, 7593, 8405, 10997, 5385, 1, 6376, 10767, 7089, 8405, 7593, 9063, 12, 10767, 7089, 8405, 7593, 9063, 22, 10767, 7089, 8405, 7593, 9063, 24, 10767, 7089, 8405, 7593, 9063, 26, 10767, 7089, 8405, 7593, 9063, 34, 10767, 7173, 5759, 6490, 10767, 7443, 4389, 5551, 6376, 10767, 7443, 4389, 5551, 6490, 10767, 7443, 5877, 6490, 10767, 7443, 6435, 6376, 10767, 7443, 6435, 6490, 10767, 7443, 9327, 6376, 10767, 7443, 10717, 721, 601, 10717, 6490, 10767, 7443, 10717, 721, 4117, 10717, 6490, 10767, 7443, 10717, 6376, 10767, 7443, 10717, 6490, 10767, 7551, 8759, 9548, 10767, 7551, 9719, 9548, 10767, 7551, 10677, 4877, 9548, 10767, 7601, 6490, 10767, 7695, 4113, 6376, 10767, 7708, 10767, 7709, 6490, 10767, 7709, 9548, 10767, 7919, 6741, 569, 6376, 10767, 8015, 6376, 10767, 8015, 6490, 10767, 8151, 6379, 7908, 10767, 8151, 6875, 7908, 10767, 8153, 1809, 4876, 10767, 8153, 5551, 6490, 10767, 8153, 6379, 7908, 10767, 8153, 6516, 10767, 8153, 6517, 6490, 10767, 8153, 6875, 7908, 10767, 8153, 7708, 10767, 8153, 7709, 4849, 4388, 10767, 8153, 7709, 7443, 4388, 10767, 8153, 8432, 10767, 8153, 8433, 6490, 10767, 8153, 10267, 6516, 10767, 8153, 10388, 10767, 8153, 10677, 4877, 6376, 10767, 8153, 10677, 4877, 6490, 10767, 8153, 10677, 8759, 9548, 10767, 8153, 11449, 6376, 10767, 8153, 11765, 6435, 6490, 10767, 8167, 5759, 6490, 10767, 8432, 10767, 8433, 4849, 4388, 10767, 8433, 6490, 10767, 8433, 7443, 4388, 10767, 8534, 10767, 8535, 6376, 10767, 8745, 6490, 10767, 8849, 10668, 10767, 8869, 6617, 6376, 10767, 8963, 6376, 10767, 8963, 6490, 10767, 8999, 8774, 10767, 9072, 10767, 9284, 10767, 9633, 9719, 9548, 10767, 9663, 6490, 10767, 9811, 6435, 6490, 10767, 9899, 6376, 10767, 9899, 6490, 10767, 9977, 2671, 10335, 5758, 10767, 9977, 6655, 10438, 10767, 9977, 7399, 10438, 10767, 9977, 7716, 10767, 9977, 7804, 10767, 9977, 8342, 10767, 9977, 8405, 0, 10767, 9977, 8405, 28, 10767, 9977, 8405, 102, 10767, 9977, 8405, 142, 10767, 9977, 8405, 172, 10767, 9977, 8405, 174, 10767, 9977, 8405, 176, 10767, 9977, 8405, 182, 10767, 9977, 8405, 184, 10767, 9977, 8405, 236, 10767, 9977, 8405, 258, 10767, 9977, 8405, 306, 10767, 9977, 8405, 468, 10767, 9977, 8405, 560, 10767, 9977, 8405, 612, 10767, 9977, 8405, 664, 10767, 9977, 8405, 672, 10767, 9977, 8405, 807, 3096, 10767, 9977, 8405, 886, 10767, 9977, 8405, 1262, 10767, 9977, 8405, 2516, 10767, 9977, 8405, 2734, 10767, 9977, 8405, 3038, 10767, 9977, 8405, 3148, 10767, 9977, 8405, 4198, 10767, 9977, 8405, 6696, 10767, 9977, 8405, 6748, 10767, 9977, 8405, 7522, 10767, 9977, 8405, 8425, 3096, 10767, 9977, 8405, 10269, 0, 10767, 9977, 8405, 10269, 807, 3096, 10767, 9977, 8405, 11127, 592, 10767, 9977, 9345, 10335, 5758, 10767, 9977, 9345, 11363, 5758, 10767, 9977, 9578, 10767, 9977, 10335, 5758, 10767, 9977, 10442, 10767, 9977, 10625, 10335, 5758, 10767, 9977, 13062, 10767, 10223, 8330, 10767, 10267, 6516, 10767, 10267, 6517, 6490, 10767, 10267, 8015, 6490, 10767, 10267, 8153, 3273, 6490, 10767, 10301, 4849, 4388, 10767, 10301, 7443, 4388, 10767, 10388, 10767, 10489, 6617, 6376, 10767, 10677, 4877, 6376, 10767, 10677, 4877, 6490, 10767, 10677, 7708, 10767, 10763, 5551, 9548, 10767, 10763, 6435, 6376, 10767, 10804, 10767, 10805, 6490, 10767, 10969, 8056, 10767, 10969, 8057, 10728, 10767, 10969, 8354, 10767, 10969, 8676, 10767, 10969, 8744, 10767, 10969, 8899, 10441, 10642, 10767, 10969, 9158, 10767, 11097, 6435, 9548, 10767, 11097, 9327, 6121, 3713, 10958, 10767, 11215, 4531, 6490, 10767, 11449, 7908, 10767, 11449, 7909, 6490, 10767, 11459, 8432, 10767, 11647, 6376, 10767, 11765, 9327, 6121, 3713, 10958, 10767, 11845, 4926, 10767, 11900, 10767, 12107, 4531, 6490, 10767, 12394, 10767, 12416, 10767, 12470, 10767, 12498, 10767, 12500, 10767, 12502, 10767, 12901, 5551, 9548, 10767, 12901, 6435, 6376, 10767, 13356, 10767, 13360, 10767, 13365, 8921, 7605, 4926, 10767, 13365, 12341, 7605, 4926, 10771, 6121, 1045, 6376, 10783, 5758, 10789, 5759, 0, 10789, 5759, 1, 7711, 0, 10789, 5759, 1, 7711, 236, 10789, 5759, 1, 7711, 750, 10789, 5759, 1, 7711, 1482, 10789, 5759, 1, 7711, 2486, 10789, 5759, 1, 7711, 4241, 5898, 10789, 5759, 1, 7711, 5030, 10789, 5759, 1, 7711, 7077, 4358, 10789, 5759, 8, 10789, 5759, 9, 5387, 9, 2111, 5387, 2110, 10789, 5759, 9, 7711, 2194, 10789, 5759, 16, 10789, 5759, 17, 0, 10789, 5759, 40, 10789, 5759, 41, 41, 40, 10789, 5759, 41, 1304, 10789, 5759, 41, 5387, 41, 41, 10489, 5387, 41, 10488, 10789, 5759, 41, 5387, 41, 463, 5387, 463, 1221, 5387, 1220, 10789, 5759, 41, 5387, 41, 2593, 5387, 2592, 10789, 5759, 54, 10789, 5759, 60, 10789, 5759, 61, 4358, 10789, 5759, 61, 7711, 41, 5445, 41, 5445, 40, 10789, 5759, 61, 7711, 236, 10789, 5759, 61, 7711, 1212, 10789, 5759, 61, 7711, 1483, 4358, 10789, 5759, 61, 7711, 3280, 10789, 5759, 61, 7711, 4125, 4358, 10789, 5759, 61, 7711, 4241, 5898, 10789, 5759, 61, 7711, 4606, 10789, 5759, 61, 7711, 7074, 10789, 5759, 61, 7711, 7534, 10789, 5759, 64, 10789, 5759, 74, 10789, 5759, 75, 7711, 6746, 10789, 5759, 75, 7711, 7545, 5445, 4338, 10789, 5759, 76, 10789, 5759, 77, 7711, 76, 10789, 5759, 77, 7711, 236, 10789, 5759, 77, 7711, 314, 10789, 5759, 77, 7711, 2518, 10789, 5759, 77, 7711, 2836, 10789, 5759, 77, 7711, 4088, 10789, 5759, 77, 7711, 4338, 10789, 5759, 77, 7711, 4706, 10789, 5759, 80, 10789, 5759, 81, 5387, 80, 10789, 5759, 81, 5445, 5043, 9732, 10789, 5759, 81, 5445, 5043, 10377, 81, 5445, 5042, 10789, 5759, 81, 7695, 7710, 10789, 5759, 100, 10789, 5759, 106, 10789, 5759, 107, 7711, 0, 10789, 5759, 107, 7711, 1220, 10789, 5759, 107, 7711, 1483, 4358, 10789, 5759, 112, 10789, 5759, 113, 5387, 113, 60, 10789, 5759, 113, 5387, 113, 596, 10789, 5759, 113, 9967, 112, 10789, 5759, 138, 10789, 5759, 144, 10789, 5759, 152, 10789, 5759, 153, 4358, 10789, 5759, 153, 5387, 152, 10789, 5759, 153, 9684, 10789, 5759, 158, 10789, 5759, 159, 7711, 1, 5445, 237, 5445, 138, 10789, 5759, 159, 7711, 40, 10789, 5759, 159, 7711, 374, 10789, 5759, 159, 7711, 1220, 10789, 5759, 159, 7711, 2488, 10789, 5759, 159, 7711, 2518, 10789, 5759, 172, 10789, 5759, 176, 10789, 5759, 177, 7711, 368, 10789, 5759, 177, 7711, 4240, 10789, 5759, 177, 7711, 4241, 5898, 10789, 5759, 177, 9732, 10789, 5759, 177, 9967, 176, 10789, 5759, 177, 10377, 176, 10789, 5759, 216, 10789, 5759, 217, 4358, 10789, 5759, 224, 10789, 5759, 225, 7711, 8, 10789, 5759, 225, 7711, 40, 10789, 5759, 225, 9967, 224, 10789, 5759, 230, 10789, 5759, 231, 9967, 230, 10789, 5759, 236, 10789, 5759, 237, 4358, 10789, 5759, 237, 5898, 10789, 5759, 242, 10789, 5759, 243, 7711, 40, 10789, 5759, 243, 7711, 736, 10789, 5759, 243, 7711, 750, 10789, 5759, 243, 7711, 1206, 10789, 5759, 243, 7711, 1632, 10789, 5759, 243, 7711, 2110, 10789, 5759, 243, 7711, 2518, 10789, 5759, 243, 7711, 3280, 10789, 5759, 243, 7711, 4094, 10789, 5759, 250, 10789, 5759, 256, 10789, 5759, 262, 10789, 5759, 270, 10789, 5759, 271, 7711, 4241, 5898, 10789, 5759, 272, 10789, 5759, 273, 7711, 5880, 10789, 5759, 273, 9732, 10789, 5759, 273, 9967, 272, 10789, 5759, 273, 10377, 272, 10789, 5759, 274, 10789, 5759, 280, 10789, 5759, 306, 10789, 5759, 307, 7711, 0, 10789, 5759, 307, 7711, 40, 10789, 5759, 307, 7711, 64, 10789, 5759, 307, 7711, 65, 5445, 1682, 10789, 5759, 307, 7711, 106, 10789, 5759, 307, 7711, 216, 10789, 5759, 307, 7711, 224, 10789, 5759, 307, 7711, 230, 10789, 5759, 307, 7711, 272, 10789, 5759, 307, 7711, 314, 10789, 5759, 307, 7711, 340, 10789, 5759, 307, 7711, 354, 10789, 5759, 307, 7711, 368, 10789, 5759, 307, 7711, 369, 5445, 152, 10789, 5759, 307, 7711, 369, 5445, 224, 10789, 5759, 307, 7711, 369, 5445, 560, 10789, 5759, 307, 7711, 374, 10789, 5759, 307, 7711, 375, 5445, 7284, 10789, 5759, 307, 7711, 396, 10789, 5759, 307, 7711, 476, 10789, 5759, 307, 7711, 520, 10789, 5759, 307, 7711, 524, 10789, 5759, 307, 7711, 580, 10789, 5759, 307, 7711, 588, 10789, 5759, 307, 7711, 676, 10789, 5759, 307, 7711, 750, 10789, 5759, 307, 7711, 760, 10789, 5759, 307, 7711, 1212, 10789, 5759, 307, 7711, 1220, 10789, 5759, 307, 7711, 1221, 5445, 5663, 5445, 0, 10789, 5759, 307, 7711, 1482, 10789, 5759, 307, 7711, 1584, 10789, 5759, 307, 7711, 1624, 10789, 5759, 307, 7711, 2110, 10789, 5759, 307, 7711, 2494, 10789, 5759, 307, 7711, 2516, 10789, 5759, 307, 7711, 2518, 10789, 5759, 307, 7711, 2524, 10789, 5759, 307, 7711, 2530, 10789, 5759, 307, 7711, 2654, 10789, 5759, 307, 7711, 2836, 10789, 5759, 307, 7711, 3280, 10789, 5759, 307, 7711, 4166, 10789, 5759, 307, 7711, 4241, 5898, 10789, 5759, 307, 7711, 4334, 10789, 5759, 307, 7711, 4339, 5445, 2494, 10789, 5759, 307, 7711, 4339, 9967, 4338, 10789, 5759, 307, 7711, 4366, 10789, 5759, 307, 7711, 5692, 10789, 5759, 307, 7711, 6049, 7711, 462, 10789, 5759, 307, 7711, 6464, 10789, 5759, 307, 7711, 6746, 10789, 5759, 307, 7711, 7648, 10789, 5759, 314, 10789, 5759, 315, 7711, 40, 10789, 5759, 315, 7711, 588, 10789, 5759, 315, 7711, 750, 10789, 5759, 326, 10789, 5759, 327, 5387, 243, 7711, 3281, 327, 5387, 243, 7711, 3280, 10789, 5759, 332, 10789, 5759, 340, 10789, 5759, 354, 10789, 5759, 355, 7711, 750, 10789, 5759, 364, 10789, 5759, 365, 4358, 10789, 5759, 365, 7711, 5880, 10789, 5759, 368, 10789, 5759, 374, 10789, 5759, 384, 10789, 5759, 385, 5387, 384, 10789, 5759, 392, 10789, 5759, 396, 10789, 5759, 397, 7711, 0, 10789, 5759, 397, 7711, 588, 10789, 5759, 397, 9684, 10789, 5759, 404, 10789, 5759, 405, 7711, 8, 10789, 5759, 416, 10789, 5759, 462, 10789, 5759, 476, 10789, 5759, 477, 7711, 0, 10789, 5759, 477, 7711, 8, 10789, 5759, 477, 7711, 16, 10789, 5759, 477, 7711, 40, 10789, 5759, 477, 7711, 60, 10789, 5759, 477, 7711, 106, 10789, 5759, 477, 7711, 112, 10789, 5759, 477, 7711, 256, 10789, 5759, 477, 7711, 580, 10789, 5759, 477, 9967, 476, 10789, 5759, 510, 10789, 5759, 514, 10789, 5759, 520, 10789, 5759, 524, 10789, 5759, 532, 10789, 5759, 533, 4358, 10789, 5759, 546, 10789, 5759, 547, 5387, 546, 10789, 5759, 556, 10789, 5759, 557, 4358, 10789, 5759, 557, 7711, 242, 10789, 5759, 557, 7711, 374, 10789, 5759, 557, 9898, 10789, 5759, 560, 10789, 5759, 561, 4358, 10789, 5759, 564, 10789, 5759, 565, 5898, 10789, 5759, 576, 10789, 5759, 580, 10789, 5759, 584, 10789, 5759, 588, 10789, 5759, 589, 4358, 10789, 5759, 589, 7711, 41, 5445, 41, 5445, 40, 10789, 5759, 589, 7711, 41, 5445, 41, 5445, 41, 4358, 10789, 5759, 589, 7711, 374, 10789, 5759, 589, 7711, 750, 10789, 5759, 589, 8374, 10789, 5759, 589, 9684, 10789, 5759, 589, 9685, 7711, 750, 10789, 5759, 594, 10789, 5759, 595, 7711, 40, 10789, 5759, 595, 7711, 369, 5445, 138, 10789, 5759, 595, 7711, 5662, 10789, 5759, 595, 7711, 7074, 10789, 5759, 596, 10789, 5759, 597, 4358, 10789, 5759, 602, 10789, 5759, 603, 9684, 10789, 5759, 603, 9967, 602, 10789, 5759, 670, 10789, 5759, 671, 5898, 10789, 5759, 671, 9733, 7711, 1696, 10789, 5759, 676, 10789, 5759, 677, 5387, 676, 10789, 5759, 680, 10789, 5759, 702, 10789, 5759, 703, 7711, 369, 5445, 176, 10789, 5759, 703, 7711, 4241, 5898, 10789, 5759, 703, 7711, 5662, 10789, 5759, 703, 7711, 5880, 10789, 5759, 703, 7711, 6464, 10789, 5759, 736, 10789, 5759, 737, 4703, 5898, 10789, 5759, 737, 5387, 737, 5387, 736, 10789, 5759, 737, 5387, 737, 5387, 737, 9967, 737, 5387, 737, 5387, 736, 10789, 5759, 737, 5387, 737, 6013, 5387, 6013, 6013, 5387, 6013, 2194, 10789, 5759, 737, 6313, 5898, 10789, 5759, 750, 10789, 5759, 754, 10789, 5759, 755, 5387, 754, 10789, 5759, 760, 10789, 5759, 832, 10789, 5759, 958, 10789, 5759, 959, 8361, 7711, 1, 5445, 4928, 10789, 5759, 959, 8361, 7711, 106, 10789, 5759, 959, 8361, 7711, 216, 10789, 5759, 959, 8361, 7711, 217, 5445, 4928, 10789, 5759, 959, 8361, 7711, 224, 10789, 5759, 959, 8361, 7711, 236, 10789, 5759, 959, 8361, 7711, 280, 10789, 5759, 959, 8361, 7711, 281, 5445, 354, 10789, 5759, 959, 8361, 7711, 332, 10789, 5759, 959, 8361, 7711, 354, 10789, 5759, 959, 8361, 7711, 355, 5445, 7138, 10789, 5759, 959, 8361, 7711, 396, 10789, 5759, 959, 8361, 7711, 532, 10789, 5759, 959, 8361, 7711, 581, 5445, 4334, 10789, 5759, 959, 8361, 7711, 1304, 10789, 5759, 959, 8361, 7711, 1584, 10789, 5759, 959, 8361, 7711, 1822, 10789, 5759, 959, 8361, 7711, 2195, 5445, 2194, 10789, 5759, 959, 8361, 7711, 2836, 10789, 5759, 959, 8361, 7711, 3256, 10789, 5759, 959, 8361, 7711, 4334, 10789, 5759, 959, 8361, 7711, 5880, 10789, 5759, 959, 8361, 7711, 6464, 10789, 5759, 962, 10789, 5759, 966, 10789, 5759, 1006, 10789, 5759, 1010, 10789, 5759, 1011, 7711, 2518, 10789, 5759, 1012, 10789, 5759, 1013, 8339, 41, 4359, 4094, 10789, 5759, 1050, 10789, 5759, 1051, 7711, 4166, 10789, 5759, 1052, 10789, 5759, 1054, 10789, 5759, 1060, 10789, 5759, 1202, 10789, 5759, 1203, 5387, 1202, 10789, 5759, 1203, 7711, 1, 5445, 139, 5445, 236, 10789, 5759, 1203, 7711, 1, 5445, 236, 10789, 5759, 1203, 7711, 1, 5445, 1482, 10789, 5759, 1203, 7711, 40, 10789, 5759, 1203, 7711, 80, 10789, 5759, 1203, 7711, 138, 10789, 5759, 1203, 7711, 144, 10789, 5759, 1203, 7711, 172, 10789, 5759, 1203, 7711, 173, 5445, 332, 10789, 5759, 1203, 7711, 176, 10789, 5759, 1203, 7711, 177, 7711, 4241, 5898, 10789, 5759, 1203, 7711, 224, 10789, 5759, 1203, 7711, 237, 5445, 355, 5445, 4166, 10789, 5759, 1203, 7711, 243, 5445, 340, 10789, 5759, 1203, 7711, 332, 10789, 5759, 1203, 7711, 369, 5445, 176, 10789, 5759, 1203, 7711, 374, 10789, 5759, 1203, 7711, 462, 10789, 5759, 1203, 7711, 588, 10789, 5759, 1203, 7711, 589, 5445, 152, 10789, 5759, 1203, 7711, 703, 5899, 5445, 2636, 10789, 5759, 1203, 7711, 736, 10789, 5759, 1203, 7711, 750, 10789, 5759, 1203, 7711, 761, 5445, 510, 10789, 5759, 1203, 7711, 832, 10789, 5759, 1203, 7711, 833, 5445, 510, 10789, 5759, 1203, 7711, 1011, 7711, 2518, 10789, 5759, 1203, 7711, 1050, 10789, 5759, 1203, 7711, 1220, 10789, 5759, 1203, 7711, 1272, 10789, 5759, 1203, 7711, 1273, 5445, 0, 10789, 5759, 1203, 7711, 1344, 10789, 5759, 1203, 7711, 1345, 5445, 332, 10789, 5759, 1203, 7711, 1483, 4358, 10789, 5759, 1203, 7711, 1499, 5445, 251, 5445, 736, 10789, 5759, 1203, 7711, 1584, 10789, 5759, 1203, 7711, 1624, 10789, 5759, 1203, 7711, 1625, 5445, 1736, 10789, 5759, 1203, 7711, 1683, 5445, 80, 10789, 5759, 1203, 7711, 2110, 10789, 5759, 1203, 7711, 2111, 5387, 2110, 10789, 5759, 1203, 7711, 2488, 10789, 5759, 1203, 7711, 2494, 10789, 5759, 1203, 7711, 2518, 10789, 5759, 1203, 7711, 2519, 5445, 2766, 10789, 5759, 1203, 7711, 2584, 10789, 5759, 1203, 7711, 3281, 5445, 1212, 10789, 5759, 1203, 7711, 4241, 5898, 10789, 5759, 1203, 7711, 4335, 5445, 546, 10789, 5759, 1203, 7711, 4544, 10789, 5759, 1203, 7711, 5692, 10789, 5759, 1203, 7711, 5880, 10789, 5759, 1203, 7711, 8338, 10789, 5759, 1206, 10789, 5759, 1207, 5387, 1207, 1221, 5387, 1220, 10789, 5759, 1212, 10789, 5759, 1213, 1207, 5387, 1207, 1221, 5387, 1220, 10789, 5759, 1214, 10789, 5759, 1216, 10789, 5759, 1220, 10789, 5759, 1272, 10789, 5759, 1273, 5387, 1272, 10789, 5759, 1273, 9967, 1272, 10789, 5759, 1302, 10789, 5759, 1303, 4358, 10789, 5759, 1303, 7711, 1584, 10789, 5759, 1303, 7711, 1585, 7711, 1483, 4358, 10789, 5759, 1303, 7711, 2110, 10789, 5759, 1303, 7711, 2489, 5445, 6012, 10789, 5759, 1304, 10789, 5759, 1305, 5387, 1305, 7122, 10789, 5759, 1305, 7711, 1, 5445, 1696, 10789, 5759, 1305, 7711, 1696, 10789, 5759, 1308, 10789, 5759, 1310, 10789, 5759, 1311, 7711, 2518, 10789, 5759, 1316, 10789, 5759, 1344, 10789, 5759, 1482, 10789, 5759, 1483, 514, 10789, 5759, 1483, 1006, 10789, 5759, 1483, 4358, 10789, 5759, 1483, 5387, 1483, 5703, 5387, 5703, 589, 5387, 588, 10789, 5759, 1484, 10789, 5759, 1498, 10789, 5759, 1572, 10789, 5759, 1573, 9967, 1572, 10789, 5759, 1576, 10789, 5759, 1584, 10789, 5759, 1585, 7711, 1483, 4358, 10789, 5759, 1586, 10789, 5759, 1587, 7711, 750, 10789, 5759, 1587, 9967, 1586, 10789, 5759, 1624, 10789, 5759, 1632, 10789, 5759, 1682, 10789, 5759, 1684, 10789, 5759, 1685, 9817, 4212, 10789, 5759, 1686, 10789, 5759, 1688, 10789, 5759, 1689, 4358, 10789, 5759, 1690, 10789, 5759, 1696, 10789, 5759, 1697, 10377, 1696, 10789, 5759, 1736, 10789, 5759, 1737, 7711, 1736, 10789, 5759, 1738, 10789, 5759, 1739, 7711, 1696, 10789, 5759, 1739, 7711, 1697, 5445, 520, 10789, 5759, 1786, 10789, 5759, 1812, 10789, 5759, 1813, 5898, 10789, 5759, 1813, 7711, 76, 10789, 5759, 1813, 7711, 243, 7711, 750, 10789, 5759, 1813, 7711, 272, 10789, 5759, 1813, 7711, 314, 10789, 5759, 1813, 7711, 333, 5445, 736, 10789, 5759, 1813, 7711, 369, 5445, 176, 10789, 5759, 1813, 7711, 396, 10789, 5759, 1813, 7711, 416, 10789, 5759, 1813, 7711, 533, 5445, 736, 10789, 5759, 1813, 7711, 750, 10789, 5759, 1813, 7711, 4166, 10789, 5759, 1813, 7711, 4167, 5898, 10789, 5759, 1813, 7711, 4241, 5898, 10789, 5759, 1813, 7711, 4704, 10789, 5759, 1813, 7711, 4706, 10789, 5759, 1813, 7711, 4707, 5445, 736, 10789, 5759, 1813, 7711, 5761, 5445, 112, 10789, 5759, 1813, 7711, 6012, 10789, 5759, 1813, 7711, 7074, 10789, 5759, 1813, 9684, 10789, 5759, 1813, 9732, 10789, 5759, 1813, 9967, 1812, 10789, 5759, 1813, 10377, 1812, 10789, 5759, 1814, 10789, 5759, 1818, 10789, 5759, 1820, 10789, 5759, 1822, 10789, 5759, 1823, 5387, 1822, 10789, 5759, 1823, 5387, 1823, 1221, 5387, 1220, 10789, 5759, 1852, 10789, 5759, 1856, 10789, 5759, 1864, 10789, 5759, 1896, 10789, 5759, 1922, 10789, 5759, 1950, 10789, 5759, 1951, 4358, 10789, 5759, 1980, 10789, 5759, 1988, 10789, 5759, 1989, 9520, 10789, 5759, 2044, 10789, 5759, 2054, 10789, 5759, 2055, 7711, 1221, 5445, 4241, 5898, 10789, 5759, 2055, 7711, 4241, 5898, 10789, 5759, 2110, 10789, 5759, 2111, 5387, 2110, 10789, 5759, 2111, 5898, 10789, 5759, 2111, 7077, 7711, 1220, 10789, 5759, 2111, 7077, 7711, 2488, 10789, 5759, 2111, 7077, 7711, 2489, 5387, 2111, 7077, 7711, 2488, 10789, 5759, 2111, 7077, 7711, 2836, 10789, 5759, 2111, 7077, 7711, 4928, 10789, 5759, 2111, 9967, 2110, 10789, 5759, 2111, 9967, 2111, 7077, 5387, 7076, 10789, 5759, 2190, 10789, 5759, 2192, 10789, 5759, 2194, 10789, 5759, 2380, 10789, 5759, 2486, 10789, 5759, 2487, 4358, 10789, 5759, 2487, 5387, 2486, 10789, 5759, 2487, 7711, 0, 10789, 5759, 2487, 7711, 152, 10789, 5759, 2487, 7711, 236, 10789, 5759, 2487, 7711, 374, 10789, 5759, 2487, 7711, 580, 10789, 5759, 2487, 7711, 584, 10789, 5759, 2487, 7711, 594, 10789, 5759, 2487, 7711, 602, 10789, 5759, 2487, 7711, 1050, 10789, 5759, 2487, 7711, 1584, 10789, 5759, 2487, 7711, 1696, 10789, 5759, 2487, 7711, 1822, 10789, 5759, 2487, 7711, 2110, 10789, 5759, 2487, 7711, 2488, 10789, 5759, 2487, 7711, 2636, 10789, 5759, 2487, 7711, 2836, 10789, 5759, 2487, 7711, 5692, 10789, 5759, 2487, 9520, 10789, 5759, 2488, 10789, 5759, 2489, 7075, 7711, 3280, 10789, 5759, 2494, 10789, 5759, 2516, 10789, 5759, 2518, 10789, 5759, 2519, 250, 10789, 5759, 2519, 5387, 2519, 1207, 5387, 1207, 1221, 5387, 1220, 10789, 5759, 2519, 5387, 2519, 2637, 5387, 2637, 1221, 5387, 1220, 10789, 5759, 2524, 10789, 5759, 2525, 5387, 10267, 2524, 10789, 5759, 2530, 10789, 5759, 2582, 10789, 5759, 2584, 10789, 5759, 2592, 10789, 5759, 2636, 10789, 5759, 2637, 5387, 2637, 405, 5387, 405, 4095, 5387, 4094, 10789, 5759, 2637, 9732, 10789, 5759, 2638, 10789, 5759, 2639, 7711, 106, 10789, 5759, 2639, 7711, 588, 10789, 5759, 2639, 7711, 1304, 10789, 5759, 2639, 7711, 2518, 10789, 5759, 2639, 7711, 2524, 10789, 5759, 2639, 7711, 6012, 10789, 5759, 2654, 10789, 5759, 2694, 10789, 5759, 2698, 10789, 5759, 2699, 5387, 2698, 10789, 5759, 2699, 5387, 2699, 1207, 5387, 1207, 1221, 5387, 1220, 10789, 5759, 2699, 7711, 5880, 10789, 5759, 2758, 10789, 5759, 2760, 10789, 5759, 2766, 10789, 5759, 2767, 5387, 2767, 671, 5387, 670, 10789, 5759, 2822, 10789, 5759, 2823, 7711, 1, 5445, 236, 10789, 5759, 2823, 7711, 1, 5445, 392, 10789, 5759, 2823, 7711, 76, 10789, 5759, 2823, 7711, 236, 10789, 5759, 2823, 7711, 580, 10789, 5759, 2823, 7711, 581, 5445, 106, 10789, 5759, 2823, 7711, 581, 5445, 736, 10789, 5759, 2823, 7711, 2110, 10789, 5759, 2824, 10789, 5759, 2828, 10789, 5759, 2832, 10789, 5759, 2833, 7711, 0, 10789, 5759, 2833, 7711, 41, 5445, 1304, 10789, 5759, 2833, 7711, 216, 10789, 5759, 2833, 7711, 230, 10789, 5759, 2833, 7711, 236, 10789, 5759, 2833, 7711, 272, 10789, 5759, 2833, 7711, 314, 10789, 5759, 2833, 7711, 462, 10789, 5759, 2833, 7711, 576, 10789, 5759, 2833, 7711, 588, 10789, 5759, 2833, 7711, 760, 10789, 5759, 2833, 7711, 1060, 10789, 5759, 2833, 7711, 1212, 10789, 5759, 2833, 7711, 1220, 10789, 5759, 2833, 7711, 1482, 10789, 5759, 2833, 7711, 1498, 10789, 5759, 2833, 7711, 1822, 10789, 5759, 2833, 7711, 1922, 10789, 5759, 2833, 7711, 2518, 10789, 5759, 2833, 7711, 4241, 5898, 10789, 5759, 2833, 7711, 5756, 10789, 5759, 2833, 7711, 7774, 10789, 5759, 2833, 7711, 7954, 10789, 5759, 2836, 10789, 5759, 2837, 7711, 0, 10789, 5759, 2837, 7711, 326, 10789, 5759, 2837, 7711, 1696, 10789, 5759, 2837, 7711, 5880, 10789, 5759, 2840, 10789, 5759, 2841, 7711, 8338, 10789, 5759, 2842, 10789, 5759, 3122, 10789, 5759, 3136, 10789, 5759, 3158, 10789, 5759, 3160, 10789, 5759, 3161, 4703, 5898, 10789, 5759, 3164, 10789, 5759, 3188, 10789, 5759, 3189, 7711, 0, 10789, 5759, 3190, 10789, 5759, 3242, 10789, 5759, 3256, 10789, 5759, 3257, 7711, 2518, 10789, 5759, 3266, 10789, 5759, 3270, 10789, 5759, 3271, 7711, 1696, 10789, 5759, 3280, 10789, 5759, 3698, 10789, 5759, 3820, 10789, 5759, 4088, 10789, 5759, 4094, 10789, 5759, 4122, 10789, 5759, 4124, 10789, 5759, 4125, 4358, 10789, 5759, 4125, 4359, 4358, 10789, 5759, 4126, 10789, 5759, 4132, 10789, 5759, 4154, 10789, 5759, 4156, 10789, 5759, 4164, 10789, 5759, 4166, 10789, 5759, 4174, 10789, 5759, 4175, 7711, 0, 10789, 5759, 4175, 7711, 1, 5445, 1736, 10789, 5759, 4175, 7711, 1, 5445, 1737, 7711, 1736, 10789, 5759, 4175, 7711, 80, 10789, 5759, 4175, 7711, 236, 10789, 5759, 4175, 7711, 237, 4358, 10789, 5759, 4175, 7711, 332, 10789, 5759, 4175, 7711, 340, 10789, 5759, 4175, 7711, 354, 10789, 5759, 4175, 7711, 580, 10789, 5759, 4175, 7711, 588, 10789, 5759, 4175, 7711, 750, 10789, 5759, 4175, 7711, 1483, 4358, 10789, 5759, 4175, 7711, 1682, 10789, 5759, 4175, 7711, 1737, 7711, 1736, 10789, 5759, 4175, 7711, 4125, 4358, 10789, 5759, 4175, 7711, 4125, 4359, 4358, 10789, 5759, 4175, 7711, 8338, 10789, 5759, 4175, 7711, 8339, 9732, 10789, 5759, 4234, 10789, 5759, 4235, 9967, 4234, 10789, 5759, 4240, 10789, 5759, 4241, 5387, 4240, 10789, 5759, 4241, 5898, 10789, 5759, 4241, 9967, 4240, 10789, 5759, 4242, 10789, 5759, 4334, 10789, 5759, 4335, 4358, 10789, 5759, 4336, 10789, 5759, 4337, 7711, 1, 5445, 1482, 10789, 5759, 4337, 7711, 355, 5445, 1482, 10789, 5759, 4337, 7711, 462, 10789, 5759, 4337, 7711, 1482, 10789, 5759, 4337, 7711, 4241, 5898, 10789, 5759, 4338, 10789, 5759, 4339, 5898, 10789, 5759, 4339, 7711, 750, 10789, 5759, 4339, 7711, 5880, 10789, 5759, 4339, 9967, 4338, 10789, 5759, 4366, 10789, 5759, 4544, 10789, 5759, 4545, 7711, 80, 10789, 5759, 4545, 7711, 588, 10789, 5759, 4545, 7711, 1344, 10789, 5759, 4545, 7711, 4884, 10789, 5759, 4545, 7711, 8338, 10789, 5759, 4546, 10789, 5759, 4596, 10789, 5759, 4597, 5387, 4597, 832, 10789, 5759, 4597, 5387, 4597, 9732, 10789, 5759, 4606, 10789, 5759, 4704, 10789, 5759, 4706, 10789, 5759, 4708, 10789, 5759, 4710, 10789, 5759, 4711, 5387, 4710, 10789, 5759, 4714, 10789, 5759, 4716, 10789, 5759, 4764, 10789, 5759, 4884, 10789, 5759, 4928, 10789, 5759, 5030, 10789, 5759, 5031, 5387, 5030, 10789, 5759, 5031, 5387, 5031, 7711, 1, 5445, 392, 10789, 5759, 5031, 7711, 0, 10789, 5759, 5031, 7711, 670, 10789, 5759, 5031, 7711, 1696, 10789, 5759, 5031, 9967, 5030, 10789, 5759, 5042, 10789, 5759, 5043, 7711, 2525, 5898, 10789, 5759, 5043, 10266, 10789, 5759, 5043, 10377, 5042, 10789, 5759, 5044, 10789, 5759, 5278, 10789, 5759, 5662, 10789, 5759, 5663, 7711, 0, 10789, 5759, 5663, 7711, 40, 10789, 5759, 5663, 7711, 41, 5445, 0, 10789, 5759, 5663, 7711, 396, 10789, 5759, 5663, 7711, 750, 10789, 5759, 5663, 7711, 2766, 10789, 5759, 5663, 7711, 4338, 10789, 5759, 5663, 7711, 5720, 10789, 5759, 5664, 10789, 5759, 5682, 10789, 5759, 5692, 10789, 5759, 5693, 7711, 0, 10789, 5759, 5693, 7711, 272, 10789, 5759, 5696, 10789, 5759, 5697, 7711, 0, 10789, 5759, 5697, 7711, 754, 10789, 5759, 5697, 7711, 1012, 10789, 5759, 5697, 7711, 1220, 10789, 5759, 5697, 7711, 1482, 10789, 5759, 5697, 7711, 1483, 4358, 10789, 5759, 5697, 7711, 1820, 10789, 5759, 5697, 7711, 1950, 10789, 5759, 5697, 7711, 2488, 10789, 5759, 5697, 7711, 6534, 10789, 5759, 5697, 7711, 8374, 10789, 5759, 5702, 10789, 5759, 5703, 5387, 5703, 833, 5387, 832, 10789, 5759, 5703, 5898, 10789, 5759, 5720, 10789, 5759, 5756, 10789, 5759, 5757, 5387, 5757, 5720, 10789, 5759, 5760, 10789, 5759, 5840, 10789, 5759, 5852, 10789, 5759, 5880, 10789, 5759, 6012, 10789, 5759, 6046, 10789, 5759, 6048, 10789, 5759, 6049, 7711, 462, 10789, 5759, 6049, 7711, 8338, 10789, 5759, 6054, 10789, 5759, 6062, 10789, 5759, 6064, 10789, 5759, 6256, 10789, 5759, 6318, 10789, 5759, 6396, 10789, 5759, 6412, 10789, 5759, 6430, 10789, 5759, 6436, 10789, 5759, 6464, 10789, 5759, 6466, 10789, 5759, 6534, 10789, 5759, 6535, 5387, 6534, 10789, 5759, 6648, 10789, 5759, 6650, 10789, 5759, 6708, 10789, 5759, 6746, 10789, 5759, 6818, 10789, 5759, 6854, 10789, 5759, 6860, 10789, 5759, 6884, 10789, 5759, 7040, 10789, 5759, 7054, 10789, 5759, 7074, 10789, 5759, 7075, 7711, 0, 10789, 5759, 7075, 7711, 1, 5445, 139, 5445, 236, 10789, 5759, 7075, 7711, 1, 5445, 1220, 10789, 5759, 7075, 7711, 1, 5445, 1736, 10789, 5759, 7075, 7711, 40, 10789, 5759, 7075, 7711, 41, 5445, 0, 10789, 5759, 7075, 7711, 41, 5445, 41, 5445, 40, 10789, 5759, 7075, 7711, 76, 10789, 5759, 7075, 7711, 80, 10789, 5759, 7075, 7711, 106, 10789, 5759, 7075, 7711, 176, 10789, 5759, 7075, 7711, 216, 10789, 5759, 7075, 7711, 236, 10789, 5759, 7075, 7711, 243, 7711, 2110, 10789, 5759, 7075, 7711, 272, 10789, 5759, 7075, 7711, 273, 5445, 236, 10789, 5759, 7075, 7711, 273, 5445, 354, 10789, 5759, 7075, 7711, 314, 10789, 5759, 7075, 7711, 354, 10789, 5759, 7075, 7711, 368, 10789, 5759, 7075, 7711, 369, 5445, 176, 10789, 5759, 7075, 7711, 396, 10789, 5759, 7075, 7711, 561, 5445, 1, 5445, 547, 5445, 392, 10789, 5759, 7075, 7711, 581, 5445, 736, 10789, 5759, 7075, 7711, 588, 10789, 5759, 7075, 7711, 737, 6313, 5898, 10789, 5759, 7075, 7711, 750, 10789, 5759, 7075, 7711, 966, 10789, 5759, 7075, 7711, 1220, 10789, 5759, 7075, 7711, 1304, 10789, 5759, 7075, 7711, 1305, 5445, 1304, 10789, 5759, 7075, 7711, 1344, 10789, 5759, 7075, 7711, 1483, 4358, 10789, 5759, 7075, 7711, 1632, 10789, 5759, 7075, 7711, 1682, 10789, 5759, 7075, 7711, 1688, 10789, 5759, 7075, 7711, 1689, 5445, 243, 5445, 0, 10789, 5759, 7075, 7711, 1820, 10789, 5759, 7075, 7711, 2519, 5445, 2584, 10789, 5759, 7075, 7711, 2584, 10789, 5759, 7075, 7711, 2638, 10789, 5759, 7075, 7711, 2836, 10789, 5759, 7075, 7711, 4884, 10789, 5759, 7075, 7711, 5030, 10789, 5759, 7075, 7711, 5720, 10789, 5759, 7075, 7711, 5721, 5445, 5720, 10789, 5759, 7075, 7711, 5880, 10789, 5759, 7075, 7711, 7074, 10789, 5759, 7075, 7711, 7545, 5445, 4339, 5445, 6746, 10789, 5759, 7075, 7711, 7545, 5445, 4339, 5898, 10789, 5759, 7075, 9732, 10789, 5759, 7076, 10789, 5759, 7077, 4358, 10789, 5759, 7077, 4359, 5387, 7077, 4359, 2518, 10789, 5759, 7077, 7711, 2518, 10789, 5759, 7077, 7711, 2519, 5445, 2584, 10789, 5759, 7122, 10789, 5759, 7123, 5387, 7122, 10789, 5759, 7123, 9684, 10789, 5759, 7123, 10377, 7122, 10789, 5759, 7138, 10789, 5759, 7196, 10789, 5759, 7197, 4358, 10789, 5759, 7197, 7711, 0, 10789, 5759, 7197, 7711, 1, 5445, 144, 10789, 5759, 7197, 7711, 144, 10789, 5759, 7204, 10789, 5759, 7248, 10789, 5759, 7284, 10789, 5759, 7285, 703, 7711, 106, 10789, 5759, 7285, 703, 7711, 332, 10789, 5759, 7285, 703, 7711, 396, 10789, 5759, 7285, 703, 7711, 580, 10789, 5759, 7285, 703, 7711, 1052, 10789, 5759, 7285, 703, 7711, 1304, 10789, 5759, 7285, 703, 7711, 1483, 4358, 10789, 5759, 7285, 703, 7711, 4706, 10789, 5759, 7285, 703, 7711, 7572, 10789, 5759, 7285, 703, 7711, 7954, 10789, 5759, 7285, 8361, 7711, 106, 10789, 5759, 7285, 8361, 7711, 107, 40, 10789, 5759, 7364, 10789, 5759, 7374, 10789, 5759, 7375, 7711, 588, 10789, 5759, 7375, 7711, 670, 10789, 5759, 7375, 7711, 1586, 10789, 5759, 7375, 10377, 7374, 10789, 5759, 7510, 10789, 5759, 7516, 10789, 5759, 7528, 10789, 5759, 7534, 10789, 5759, 7544, 10789, 5759, 7572, 10789, 5759, 7648, 10789, 5759, 7762, 10789, 5759, 7774, 10789, 5759, 7775, 7711, 40, 10789, 5759, 7778, 10789, 5759, 7890, 10789, 5759, 7954, 10789, 5759, 7966, 10789, 5759, 8242, 10789, 5759, 8276, 10789, 5759, 8338, 10789, 5759, 8339, 5387, 8339, 7075, 7711, 41, 5387, 7075, 7711, 40, 10789, 5759, 8339, 7075, 7711, 41, 5387, 7075, 7711, 40, 10789, 5759, 8360, 10789, 5759, 8361, 5387, 8360, 10789, 5759, 8374, 10789, 5759, 8376, 10789, 5759, 8382, 10789, 5759, 8408, 10789, 5759, 8490, 10789, 5759, 8494, 10789, 5759, 8512, 10789, 5759, 8513, 7711, 80, 10789, 5759, 8513, 7711, 369, 5445, 4241, 5898, 10789, 5759, 8513, 7711, 396, 10789, 5759, 8513, 7711, 581, 5445, 736, 10789, 5759, 8513, 7711, 736, 10789, 5759, 8513, 7711, 737, 5445, 736, 10789, 5759, 8513, 7711, 1304, 10789, 5759, 8513, 7711, 2110, 10789, 5759, 8513, 7711, 2518, 10789, 5759, 8513, 7711, 2519, 5445, 1, 80, 10789, 5759, 8513, 7711, 2519, 5445, 736, 10789, 5759, 8513, 7711, 2519, 5445, 737, 5445, 736, 10789, 5759, 8513, 7711, 2836, 10789, 5759, 8664, 10789, 5759, 8702, 10789, 5759, 8706, 10789, 5759, 8710, 10789, 5759, 8764, 10789, 5759, 8902, 10789, 5759, 9306, 10789, 5759, 9307, 7711, 1696, 10789, 5759, 10518, 10789, 9515, 5759, 2167, 9897, 2171, 7574, 10789, 9515, 5759, 2167, 9897, 2171, 9614, 10789, 9515, 5759, 2171, 3704, 10789, 9515, 5759, 2171, 3822, 10789, 9515, 5759, 2171, 6756, 10789, 9515, 5759, 2171, 6830, 10789, 9515, 5759, 2171, 6832, 10789, 9515, 5759, 2171, 7520, 10789, 9515, 5759, 2171, 7687, 4094, 10789, 9515, 5759, 2171, 7687, 9817, 4213, 0, 10789, 9515, 5759, 2171, 8159, 736, 10789, 9515, 5759, 2171, 9615, 736, 10789, 9515, 5759, 2541, 40, 10789, 9515, 5759, 2541, 736, 10789, 9515, 5759, 2541, 737, 5898, 10789, 9515, 5759, 2541, 4094, 10789, 9515, 5759, 2541, 6830, 10789, 9515, 5759, 2541, 7516, 10789, 9515, 5759, 2541, 9817, 4213, 3282, 10789, 9515, 5759, 2779, 736, 10789, 9515, 5759, 2779, 737, 5898, 10789, 9515, 5759, 2779, 3704, 10789, 9515, 5759, 2779, 3822, 10789, 9515, 5759, 2779, 6756, 10789, 9515, 5759, 2779, 6830, 10789, 9515, 5759, 2779, 6832, 10789, 9515, 5759, 2779, 7516, 10789, 9515, 5759, 2779, 7520, 10789, 9515, 5759, 2779, 8819, 4094, 10789, 9515, 5759, 2779, 8819, 9817, 4213, 0, 10789, 9515, 5759, 4201, 40, 10789, 9515, 5759, 4201, 736, 10789, 9515, 5759, 4201, 737, 5898, 10789, 9515, 5759, 4201, 3704, 10789, 9515, 5759, 4201, 3705, 9817, 4212, 10789, 9515, 5759, 4201, 3822, 10789, 9515, 5759, 4201, 4094, 10789, 9515, 5759, 4201, 6830, 10789, 9515, 5759, 4201, 6832, 10789, 9515, 5759, 4201, 7516, 10789, 9515, 5759, 4201, 7520, 10789, 9515, 5759, 4201, 8719, 4094, 10789, 9515, 5759, 4215, 40, 10789, 9515, 5759, 4215, 736, 10789, 9515, 5759, 4215, 737, 5898, 10789, 9515, 5759, 4215, 3704, 10789, 9515, 5759, 4215, 3705, 9817, 4212, 10789, 9515, 5759, 4215, 3822, 10789, 9515, 5759, 4215, 4094, 10789, 9515, 5759, 4215, 6830, 10789, 9515, 5759, 4215, 6832, 10789, 9515, 5759, 4215, 7516, 10789, 9515, 5759, 4215, 7520, 10789, 9515, 5759, 4215, 9817, 4213, 7106, 10789, 9515, 5759, 4215, 9817, 4213, 7107, 0, 10789, 9515, 5759, 4215, 9817, 4213, 7107, 2, 10789, 9515, 5759, 4215, 9817, 4213, 8410, 10789, 9515, 5759, 5191, 40, 10789, 9515, 5759, 5191, 736, 10789, 9515, 5759, 5191, 4094, 10789, 9515, 5759, 5191, 6830, 10789, 9515, 5759, 5191, 7516, 10789, 9515, 5759, 5191, 9817, 4213, 8310, 10789, 9515, 5759, 5191, 9817, 4213, 8311, 0, 10789, 9515, 5759, 5191, 9817, 4213, 9354, 10789, 9515, 5759, 5191, 9817, 4213, 9356, 10789, 9515, 5759, 6723, 40, 10789, 9515, 5759, 6723, 736, 10789, 9515, 5759, 6723, 4094, 10789, 9515, 5759, 6723, 6830, 10789, 9515, 5759, 6723, 7516, 10789, 9515, 5759, 6723, 9817, 4213, 6066, 10789, 9515, 5759, 6723, 9817, 4213, 7776, 10789, 9515, 5759, 7509, 40, 10789, 9515, 5759, 7509, 736, 10789, 9515, 5759, 7509, 4094, 10789, 9515, 5759, 7509, 6830, 10789, 9515, 5759, 7509, 7516, 10789, 9515, 5759, 7509, 9817, 4213, 4607, 0, 10789, 9515, 5759, 7509, 9817, 4213, 4607, 2, 10789, 9515, 5759, 7509, 9817, 4213, 6990, 10789, 9515, 5759, 7517, 7711, 1213, 5445, 1922, 10789, 9515, 5759, 7517, 7711, 1213, 5445, 4094, 10789, 9515, 5759, 7695, 736, 10789, 9515, 5759, 7695, 737, 5898, 10789, 9515, 5759, 7695, 3704, 10789, 9515, 5759, 7695, 3822, 10789, 9515, 5759, 7695, 3823, 9817, 4212, 10789, 9515, 5759, 7695, 4094, 10789, 9515, 5759, 7695, 6830, 10789, 9515, 5759, 7695, 6832, 10789, 9515, 5759, 7695, 7516, 10789, 9515, 5759, 7695, 7517, 9817, 4212, 10789, 9515, 5759, 7695, 7520, 10789, 9515, 5759, 7695, 7521, 9817, 4212, 10789, 9515, 5759, 7695, 9817, 4213, 6752, 10789, 9515, 5759, 7695, 9817, 4213, 6754, 10789, 9515, 5759, 11136, 10789, 9515, 5759, 11138, 10789, 12133, 5759, 2167, 9897, 6129, 9178, 10789, 12133, 5759, 10001, 6610, 10789, 12133, 5759, 10001, 10644, 10789, 12133, 5759, 10677, 6610, 10797, 8775, 7101, 601, 721, 11648, 10797, 8775, 7101, 601, 721, 11649, 6121, 6104, 10797, 8775, 7101, 601, 721, 11649, 6121, 8056, 10797, 8775, 7101, 601, 721, 11649, 6121, 10642, 10797, 8775, 7101, 4117, 721, 11648, 10797, 8775, 7101, 4117, 721, 11649, 6121, 6104, 10797, 8775, 7101, 4117, 721, 11649, 6121, 8056, 10797, 8775, 7101, 4117, 721, 11649, 6121, 10642, 10797, 8775, 7101, 10677, 721, 2725, 4848, 10797, 8775, 7101, 10677, 721, 2725, 7442, 10797, 8775, 7101, 10677, 721, 6104, 10797, 8775, 7101, 10677, 721, 8005, 4848, 10797, 8775, 7101, 10677, 721, 8005, 7442, 10797, 8775, 7101, 10677, 6121, 8056, 10797, 8775, 7101, 10677, 6121, 10642, 10804, 10817, 8548, 10959, 2779, 8289, 6434, 10959, 6434, 10959, 6435, 569, 760, 10959, 6435, 4221, 760, 10959, 6435, 6121, 2697, 11096, 10959, 6435, 6121, 2697, 11764, 10959, 6435, 6121, 8077, 11096, 10959, 6435, 6121, 8153, 8758, 10959, 6435, 6121, 11649, 8758, 10959, 6435, 11097, 429, 9811, 6434, 10959, 6505, 6434, 10959, 7821, 6434, 10959, 7924, 10959, 8097, 6434, 10959, 8153, 6434, 10959, 8561, 7944, 10959, 8849, 6434, 10959, 8963, 6434, 10959, 9327, 6121, 3713, 4849, 569, 760, 10959, 9327, 6121, 3713, 4849, 4221, 760, 10959, 9327, 6121, 3713, 4849, 7991, 9811, 9327, 6121, 3713, 7442, 10959, 9327, 6121, 3713, 4849, 7991, 10959, 9327, 6121, 3713, 7442, 10959, 9327, 6121, 3713, 7443, 569, 760, 10959, 9327, 6121, 3713, 7443, 4221, 760, 10959, 9327, 6121, 3713, 11096, 10959, 9327, 6121, 3713, 11764, 10959, 11191, 6434, 10963, 9120, 10977, 8774, 10978, 10989, 5758, 11011, 1809, 4876, 11011, 2091, 5758, 11011, 2941, 5758, 11011, 3055, 5758, 11011, 3873, 5758, 11011, 4223, 5836, 11011, 4849, 6627, 9050, 11011, 4849, 7821, 12114, 11011, 4849, 8745, 9050, 11011, 4849, 12114, 11011, 5445, 5758, 11011, 6610, 11011, 6616, 11011, 6689, 2170, 11011, 6689, 2540, 11011, 6689, 2778, 11011, 6689, 4200, 11011, 6689, 4214, 11011, 6689, 5190, 11011, 6689, 6260, 11011, 6689, 6722, 11011, 6689, 7508, 11011, 6689, 7694, 11011, 6875, 7908, 11011, 7089, 7593, 8405, 0, 11011, 7089, 7593, 8405, 2, 11011, 7089, 7593, 8405, 4, 11011, 7089, 7593, 8405, 6, 11011, 7089, 7593, 8405, 8, 11011, 7089, 7593, 8405, 10, 11011, 7089, 7593, 8405, 12, 11011, 7089, 7593, 8405, 14, 11011, 7089, 7593, 8405, 16, 11011, 7089, 7593, 8405, 18, 11011, 7089, 7593, 8405, 20, 11011, 7089, 7593, 8405, 22, 11011, 7089, 7593, 8405, 24, 11011, 7089, 7593, 8405, 26, 11011, 7089, 7593, 8405, 28, 11011, 7089, 7593, 8405, 30, 11011, 7089, 7593, 8405, 32, 11011, 7089, 7593, 8405, 34, 11011, 7089, 7593, 8405, 36, 11011, 7089, 7593, 8405, 38, 11011, 7089, 7593, 8405, 40, 11011, 7089, 7593, 8405, 42, 11011, 7089, 7593, 8405, 44, 11011, 7089, 7593, 8405, 46, 11011, 7089, 7593, 8405, 48, 11011, 7089, 7593, 8405, 50, 11011, 7089, 9063, 8405, 0, 11011, 7089, 9063, 8405, 2, 11011, 7089, 9063, 8405, 4, 11011, 7089, 9063, 8405, 6, 11011, 7089, 9063, 8405, 8, 11011, 7089, 9063, 8405, 10, 11011, 7089, 9063, 8405, 12, 11011, 7089, 9063, 8405, 14, 11011, 7089, 9063, 8405, 16, 11011, 7089, 9063, 8405, 18, 11011, 7089, 9063, 8405, 20, 11011, 7089, 9063, 8405, 22, 11011, 7089, 9063, 8405, 24, 11011, 7089, 9063, 8405, 26, 11011, 7089, 9063, 8405, 28, 11011, 7089, 9063, 8405, 30, 11011, 7089, 9063, 8405, 32, 11011, 7089, 9063, 8405, 34, 11011, 7089, 9063, 8405, 36, 11011, 7089, 9063, 8405, 38, 11011, 7089, 9063, 8405, 40, 11011, 7089, 9063, 8405, 42, 11011, 7089, 9063, 8405, 44, 11011, 7089, 9063, 8405, 46, 11011, 7089, 9063, 8405, 48, 11011, 7089, 9063, 8405, 50, 11011, 7387, 5758, 11011, 7443, 6627, 9050, 11011, 7443, 7821, 12114, 11011, 7443, 8745, 9050, 11011, 7443, 12114, 11011, 7708, 11011, 8017, 760, 11011, 8129, 5758, 11011, 8167, 5758, 11011, 8432, 11011, 8525, 5758, 11011, 9581, 5758, 11011, 9633, 9718, 11011, 9718, 11011, 9898, 11011, 10469, 4926, 11011, 10677, 4876, 11011, 10708, 11011, 11099, 5758, 11011, 11195, 4926, 11011, 11224, 11011, 11424, 11011, 11449, 7908, 11011, 11451, 90, 11011, 12017, 4926, 11011, 12473, 5758, 11011, 12478, 11015, 11740, 11031, 4849, 8077, 9050, 11031, 6505, 8744, 11031, 6801, 7101, 10676, 11031, 7443, 8077, 9050, 11031, 7821, 8056, 11031, 8287, 8206, 11031, 8287, 8405, 0, 11031, 8287, 8405, 8, 11031, 8287, 8405, 16, 11031, 8287, 8405, 28, 11031, 8287, 8405, 40, 11031, 8287, 8405, 66, 11031, 8287, 8405, 178, 11031, 8287, 8405, 188, 11031, 8287, 8405, 426, 11031, 8287, 8405, 622, 11031, 8287, 8405, 626, 11031, 8287, 8405, 630, 11031, 8287, 8405, 652, 11031, 8287, 8405, 654, 11031, 8287, 8405, 656, 11031, 8287, 8405, 660, 11031, 8287, 8405, 664, 11031, 8287, 8405, 2908, 11031, 8287, 8405, 2926, 11031, 8287, 8405, 3012, 11031, 8287, 8405, 3056, 11031, 8287, 8405, 5770, 11031, 8287, 8405, 6594, 11031, 8287, 8405, 6912, 11031, 8287, 8405, 6982, 11031, 8287, 8405, 7166, 11031, 8287, 8405, 7244, 11031, 8287, 8405, 7372, 11031, 8287, 8405, 7440, 11031, 8287, 8405, 8362, 11031, 8287, 8405, 8828, 11031, 8287, 8405, 9086, 11031, 8287, 8405, 9400, 11031, 8287, 8405, 9588, 11031, 8287, 8405, 9780, 11031, 8287, 8405, 11248, 11031, 8287, 8405, 11728, 11031, 8287, 8405, 11758, 11031, 8287, 8405, 11824, 11031, 8287, 8405, 11832, 11031, 8287, 8405, 12070, 11031, 8287, 8405, 12094, 11031, 8287, 8405, 12096, 11031, 8287, 8405, 12144, 11031, 8287, 8405, 12146, 11031, 8287, 8405, 12150, 11031, 8287, 8405, 12350, 11031, 8287, 8405, 12352, 11031, 8287, 8405, 12532, 11031, 8287, 8405, 13006, 11031, 8287, 8405, 13008, 11031, 9811, 6434, 11031, 10283, 8405, 0, 11031, 10283, 8405, 8, 11031, 10283, 8405, 16, 11031, 10283, 8405, 26, 11031, 10283, 8405, 28, 11031, 10283, 8405, 40, 11031, 10283, 8405, 236, 11031, 10283, 8405, 238, 11031, 10283, 8405, 242, 11031, 10283, 8405, 246, 11031, 10283, 8405, 250, 11031, 10283, 8405, 306, 11031, 10283, 8405, 310, 11031, 10283, 8405, 314, 11031, 10283, 8405, 322, 11031, 10283, 8405, 326, 11031, 10283, 8405, 364, 11031, 10283, 8405, 368, 11031, 10283, 8405, 374, 11031, 10283, 8405, 380, 11031, 10283, 8405, 384, 11031, 10283, 8405, 392, 11031, 10283, 8405, 396, 11031, 10283, 8405, 404, 11031, 10283, 8405, 412, 11031, 10283, 8405, 416, 11031, 10283, 8405, 510, 11031, 10283, 8405, 512, 11031, 10283, 8405, 514, 11031, 10283, 8405, 516, 11031, 10283, 8405, 520, 11031, 10283, 8405, 524, 11031, 10283, 8405, 526, 11031, 10283, 8405, 532, 11031, 10283, 8405, 536, 11031, 10283, 8405, 546, 11031, 10283, 8405, 556, 11031, 10283, 8405, 560, 11031, 10283, 8405, 564, 11031, 10283, 8405, 568, 11031, 10283, 8405, 576, 11031, 10283, 8405, 622, 11031, 10283, 8405, 632, 11031, 10283, 8405, 652, 11031, 10283, 8405, 660, 11031, 10283, 8405, 664, 11031, 10283, 8405, 7593, 0, 11031, 10283, 8405, 7593, 8, 11031, 10283, 8405, 7593, 16, 11031, 10283, 8405, 7593, 28, 11031, 10283, 8405, 7593, 40, 11031, 10283, 8405, 7593, 576, 11031, 10283, 8405, 7593, 652, 11031, 10283, 8405, 7593, 660, 11031, 10283, 8405, 7593, 664, 11031, 10283, 8473, 1044, 11031, 10283, 8921, 7605, 4926, 11031, 10283, 12341, 7605, 4926, 11031, 10959, 6434, 11031, 11097, 6434, 11031, 11765, 6434, 11031, 12043, 4223, 5836, 11031, 12043, 6616, 11031, 13365, 11185, 7605, 4926, 11035, 10773, 8456, 11036, 11041, 568, 11041, 569, 721, 9705, 10410, 11041, 6121, 1045, 6376, 11051, 88, 11052, 11061, 8774, 11063, 5444, 11063, 7710, 11063, 11228, 11093, 731, 12901, 6434, 11097, 2779, 8289, 6434, 11097, 6105, 6434, 11097, 6434, 11097, 6435, 569, 760, 11097, 6435, 569, 761, 5387, 11765, 6435, 569, 760, 11097, 6435, 569, 6505, 9158, 11097, 6435, 4221, 760, 11097, 6435, 4221, 761, 569, 6505, 9158, 11097, 6435, 5387, 11765, 6434, 11097, 6435, 6121, 2697, 9810, 11097, 6435, 6121, 2697, 10958, 11097, 6435, 6121, 4530, 11097, 6435, 6121, 4896, 11097, 6435, 6121, 5445, 6490, 11097, 6435, 6121, 5878, 11097, 6435, 6121, 5879, 6121, 8153, 10677, 8758, 11097, 6435, 6121, 5879, 6121, 10677, 8758, 11097, 6435, 6121, 8151, 5832, 11097, 6435, 6121, 8153, 10677, 8758, 11097, 6435, 6121, 8758, 11097, 6435, 6121, 10677, 8758, 11097, 6435, 6377, 7551, 11765, 6434, 11097, 6435, 6377, 7709, 10374, 11097, 6435, 6377, 7919, 6741, 568, 11097, 6435, 6377, 9633, 7709, 10374, 11097, 6435, 6377, 9633, 7919, 6741, 568, 11097, 6435, 9785, 46, 11097, 6435, 9785, 8762, 11097, 6435, 9785, 11098, 11097, 6505, 6434, 11097, 7821, 6434, 11097, 8097, 6434, 11097, 8153, 3993, 6434, 11097, 8153, 6434, 11097, 8153, 6435, 4221, 760, 11097, 8153, 6435, 6121, 8758, 11097, 8153, 6435, 6121, 10677, 8758, 11097, 8153, 11430, 11097, 8561, 7944, 11097, 8849, 3993, 6434, 11097, 8849, 6434, 11097, 9327, 5387, 11765, 9326, 11097, 9327, 6121, 3713, 601, 569, 760, 11097, 9327, 6121, 3713, 601, 4221, 760, 11097, 9327, 6121, 3713, 601, 6377, 4895, 3992, 11097, 9327, 6121, 3713, 601, 6377, 11097, 9327, 6121, 3713, 4116, 11097, 9327, 6121, 3713, 601, 6377, 11765, 9327, 6121, 3713, 600, 11097, 9327, 6121, 3713, 4117, 569, 760, 11097, 9327, 6121, 3713, 4117, 4221, 760, 11097, 9327, 6121, 3713, 4117, 6377, 11765, 9327, 6121, 3713, 4116, 11097, 9327, 6121, 3713, 4117, 6491, 4895, 3992, 11097, 9327, 6121, 3713, 9810, 11097, 9327, 6121, 3713, 10958, 11097, 10531, 6434, 11097, 11191, 6434, 11097, 11430, 11097, 11875, 6435, 4221, 760, 11097, 11875, 6435, 6121, 5878, 11097, 11875, 6435, 6121, 5879, 6121, 8153, 10677, 8758, 11097, 11875, 6435, 6121, 5879, 6121, 10677, 8758, 11097, 11875, 6435, 6121, 8153, 10677, 8758, 11097, 11875, 6435, 6121, 10677, 8758, 11097, 11875, 8849, 3993, 6434, 11097, 12103, 6434, 11099, 445, 6741, 568, 11099, 445, 9705, 6741, 568, 11099, 445, 9705, 6741, 569, 6121, 1045, 6376, 11099, 445, 9705, 6741, 569, 6121, 1045, 6377, 7442, 11099, 445, 9705, 6741, 569, 6121, 1045, 8318, 11099, 445, 11621, 568, 11099, 445, 11896, 11099, 445, 12472, 11099, 721, 2091, 11896, 11099, 721, 12345, 2091, 6741, 568, 11099, 835, 2091, 6741, 568, 11099, 835, 2091, 11621, 568, 11099, 5387, 6741, 568, 11099, 5758, 11099, 6121, 1044, 11099, 6121, 8057, 8318, 11099, 6121, 10469, 4927, 6376, 11099, 6377, 9693, 445, 6740, 11099, 6377, 9693, 6377, 12472, 11099, 6377, 9705, 6741, 6377, 12473, 6377, 9705, 6740, 11099, 6377, 11097, 6434, 11099, 6377, 12007, 6741, 6377, 12472, 11099, 6377, 12473, 6377, 12007, 6740, 11099, 6741, 569, 445, 12472, 11099, 8065, 115, 6628, 11099, 8065, 115, 6629, 6377, 9705, 6740, 11104, 11111, 93, 8399, 4926, 11111, 3997, 4926, 11111, 5759, 8916, 11111, 5759, 9824, 11111, 5759, 9870, 11111, 5759, 9904, 11111, 6689, 2170, 11111, 6689, 2540, 11111, 6689, 2778, 11111, 6689, 4200, 11111, 6689, 4214, 11111, 6689, 5190, 11111, 6689, 6260, 11111, 6689, 6722, 11111, 6689, 7508, 11111, 6689, 7694, 11111, 7803, 5759, 8, 11111, 7803, 5759, 16, 11111, 7803, 5759, 28, 11111, 7803, 5759, 40, 11111, 7803, 5759, 58, 11111, 7803, 5759, 72, 11111, 7803, 5759, 92, 11111, 7803, 5759, 162, 11111, 7803, 5759, 266, 11111, 7803, 5759, 440, 11111, 7803, 5759, 606, 11111, 7803, 5759, 9827, 22, 11111, 7803, 5759, 9827, 34, 11111, 7803, 5759, 9827, 344, 11111, 7803, 5759, 9827, 518, 11111, 8405, 0, 11111, 8405, 8, 11111, 8405, 16, 11111, 8405, 28, 11111, 8405, 40, 11111, 8405, 58, 11111, 8405, 72, 11111, 8405, 92, 11111, 8405, 100, 11111, 8405, 116, 11111, 8405, 138, 11111, 8405, 162, 11111, 8405, 216, 11111, 8405, 236, 11111, 8405, 266, 11111, 8405, 292, 11111, 8405, 306, 11111, 8405, 332, 11111, 8405, 364, 11111, 8405, 392, 11111, 8405, 440, 11111, 8405, 462, 11111, 8405, 510, 11111, 8405, 524, 11111, 8405, 556, 11111, 8405, 606, 11111, 8405, 610, 11111, 8405, 652, 11111, 8405, 792, 11111, 8405, 884, 11111, 8405, 974, 11111, 8405, 996, 11111, 8405, 1260, 11111, 8405, 1512, 11111, 8405, 1612, 11111, 8405, 1796, 11111, 8405, 2030, 11111, 8405, 2076, 11111, 8405, 2126, 11111, 8405, 2212, 11111, 8405, 2438, 11111, 8405, 2516, 11111, 8405, 2566, 11111, 8405, 2678, 11111, 8405, 2746, 11111, 8405, 4016, 11111, 8405, 4888, 11111, 8405, 5994, 11111, 8405, 8045, 20, 11111, 8405, 8045, 22, 11111, 8405, 8045, 26, 11111, 8405, 8045, 344, 11111, 8405, 8045, 410, 11111, 8405, 8045, 518, 11111, 8405, 9827, 22, 11111, 8405, 9827, 34, 11111, 8405, 9827, 344, 11111, 8405, 9827, 518, 11111, 8525, 2171, 9344, 11111, 8525, 2171, 10624, 11111, 8525, 2670, 11111, 10203, 2171, 4388, 11111, 10203, 2171, 9614, 11111, 10203, 7695, 10466, 11113, 9539, 11054, 11123, 4215, 4112, 11123, 4217, 11391, 10507, 2170, 11123, 4217, 11391, 10507, 2778, 11123, 4217, 11391, 10507, 7694, 11123, 4223, 5836, 11123, 5751, 10585, 9921, 8450, 11123, 5963, 5781, 8306, 11123, 6500, 11123, 6610, 11123, 6616, 11123, 6689, 2170, 11123, 6689, 2540, 11123, 6689, 2778, 11123, 6689, 4200, 11123, 6689, 4214, 11123, 6689, 5190, 11123, 6689, 6260, 11123, 6689, 6722, 11123, 6689, 7508, 11123, 6689, 7694, 11123, 7803, 11228, 11123, 8405, 0, 11123, 8405, 8, 11123, 8405, 16, 11123, 8405, 28, 11123, 8405, 40, 11123, 8405, 100, 11123, 8405, 138, 11123, 8405, 162, 11123, 8405, 196, 11123, 8405, 216, 11123, 8405, 292, 11123, 8405, 306, 11123, 8405, 332, 11123, 8405, 364, 11123, 8405, 392, 11123, 8405, 426, 11123, 8405, 462, 11123, 8405, 496, 11123, 8405, 510, 11123, 8405, 524, 11123, 8405, 556, 11123, 8405, 590, 11123, 8405, 622, 11123, 8405, 652, 11123, 8405, 670, 11123, 8405, 717, 4237, 0, 11123, 8405, 717, 4237, 16, 11123, 8405, 717, 4237, 70, 11123, 8405, 717, 4237, 116, 11123, 8405, 717, 4237, 138, 11123, 8405, 717, 4237, 306, 11123, 8405, 717, 4237, 462, 11123, 8405, 717, 4237, 556, 11123, 8405, 717, 4237, 670, 11123, 8405, 717, 4237, 974, 11123, 8405, 717, 4237, 2030, 11123, 8405, 717, 4237, 2076, 11123, 8405, 717, 4237, 2212, 11123, 8405, 717, 4237, 2566, 11123, 8405, 717, 4237, 2746, 11123, 8405, 717, 4237, 3146, 11123, 8405, 717, 4237, 4389, 40, 11123, 8405, 717, 4237, 4389, 652, 11123, 8405, 717, 4237, 5994, 11123, 8405, 717, 4237, 7695, 7972, 11123, 8405, 717, 4237, 7972, 11123, 8405, 717, 4237, 8092, 11123, 8405, 717, 4237, 9138, 11123, 8405, 717, 4237, 9802, 11123, 8405, 717, 4237, 9825, 2170, 11123, 8405, 717, 4237, 9871, 2170, 11123, 8405, 717, 4237, 10267, 9802, 11123, 8405, 722, 11123, 8405, 884, 11123, 8405, 888, 11123, 8405, 1338, 11123, 8405, 1612, 11123, 8405, 1770, 11123, 8405, 2516, 11123, 8405, 2732, 11123, 8405, 3150, 11123, 8405, 3186, 11123, 8405, 5751, 8, 11123, 8405, 5751, 16, 11123, 8405, 5751, 40, 11123, 8405, 5751, 138, 11123, 8405, 5751, 196, 11123, 8405, 5751, 216, 11123, 8405, 5751, 236, 11123, 8405, 5751, 290, 11123, 8405, 5751, 292, 11123, 8405, 5751, 306, 11123, 8405, 5751, 462, 11123, 8405, 5751, 556, 11123, 8405, 5751, 590, 11123, 8405, 5751, 670, 11123, 8405, 5751, 722, 11123, 8405, 5751, 884, 11123, 8405, 5751, 1204, 11123, 8405, 5751, 1338, 11123, 8405, 5751, 2378, 11123, 8405, 5751, 2516, 11123, 8405, 5751, 2732, 11123, 8405, 5751, 3146, 11123, 8405, 5963, 8, 11123, 8405, 5963, 16, 11123, 8405, 5963, 28, 11123, 8405, 5963, 40, 11123, 8405, 5963, 100, 11123, 8405, 5963, 138, 11123, 8405, 5963, 216, 11123, 8405, 5963, 292, 11123, 8405, 5963, 306, 11123, 8405, 5963, 364, 11123, 8405, 5963, 426, 11123, 8405, 5963, 462, 11123, 8405, 5963, 496, 11123, 8405, 5963, 556, 11123, 8405, 5963, 590, 11123, 8405, 5963, 622, 11123, 8405, 5963, 652, 11123, 8405, 5963, 717, 4237, 556, 11123, 8405, 5963, 717, 4237, 3146, 11123, 8405, 5963, 722, 11123, 8405, 5963, 884, 11123, 8405, 5963, 1080, 11123, 8405, 5963, 1204, 11123, 8405, 5963, 1338, 11123, 8405, 5963, 1516, 11123, 8405, 5963, 2046, 11123, 8405, 5963, 2732, 11123, 8405, 5963, 4895, 7803, 5758, 11123, 8405, 8439, 16, 11123, 8405, 8439, 196, 11123, 8405, 8439, 306, 11123, 8405, 8439, 510, 11123, 8405, 8439, 717, 4237, 116, 11123, 8405, 8439, 717, 4237, 556, 11123, 8405, 8439, 717, 4237, 670, 11123, 8405, 8439, 717, 4237, 792, 11123, 8405, 8439, 717, 4237, 944, 11123, 8405, 8439, 717, 4237, 996, 11123, 8405, 8439, 717, 4237, 1260, 11123, 8405, 8439, 717, 4237, 1512, 11123, 8405, 8439, 717, 4237, 1770, 11123, 8405, 8439, 717, 4237, 2030, 11123, 8405, 8439, 717, 4237, 2566, 11123, 8405, 8439, 717, 4237, 2746, 11123, 8405, 8439, 717, 4237, 3146, 11123, 8405, 8439, 717, 4237, 4016, 11123, 8405, 8439, 3146, 11123, 8439, 4223, 5836, 11123, 8439, 6616, 11123, 8516, 11123, 10154, 11163, 11228, 11169, 7337, 5758, 11172, 11173, 6121, 2667, 2724, 11191, 7390, 11191, 10261, 10374, 11195, 4926, 11205, 8775, 1177, 8879, 10434, 11205, 8775, 1177, 8881, 10434, 11205, 8775, 1177, 8883, 10434, 11205, 8775, 1177, 8885, 10434, 11205, 8775, 1177, 8887, 10434, 11205, 8775, 1177, 8889, 10434, 11205, 8775, 1177, 8891, 10434, 11205, 8775, 1177, 9305, 11114, 11207, 4926, 11217, 10265, 9610, 11224, 11242, 11245, 6408, 11245, 6409, 9537, 600, 11245, 6409, 9537, 4848, 11261, 2170, 11261, 2540, 11261, 2778, 11261, 4200, 11261, 4214, 11261, 4849, 12114, 11261, 5190, 11261, 5445, 5758, 11261, 6260, 11261, 6722, 11261, 7172, 11261, 7443, 12114, 11261, 7508, 11261, 7694, 11261, 8167, 5758, 11263, 2724, 11263, 6121, 10260, 11263, 8004, 11265, 5759, 9558, 11265, 5759, 10408, 11265, 5759, 11158, 11265, 5759, 11160, 11265, 6689, 2170, 11265, 6689, 2540, 11265, 6689, 2778, 11265, 6689, 4200, 11265, 6689, 4214, 11265, 6689, 5190, 11265, 6689, 6260, 11265, 6689, 6722, 11265, 6689, 7508, 11265, 6689, 7694, 11265, 7803, 5759, 9560, 11265, 7803, 5759, 9566, 11265, 7803, 5759, 10402, 11265, 7803, 5759, 10404, 11265, 7803, 5759, 11710, 11265, 7803, 5759, 11712, 11265, 8405, 0, 11265, 8405, 8, 11265, 8405, 16, 11265, 8405, 28, 11265, 8405, 40, 11265, 8405, 66, 11265, 8405, 100, 11265, 8405, 116, 11265, 8405, 138, 11265, 8405, 188, 11265, 8405, 196, 11265, 8405, 216, 11265, 8405, 236, 11265, 8405, 292, 11265, 8405, 306, 11265, 8405, 332, 11265, 8405, 364, 11265, 8405, 392, 11265, 8405, 462, 11265, 8405, 496, 11265, 8405, 510, 11265, 8405, 524, 11265, 8405, 556, 11265, 8405, 610, 11265, 8405, 622, 11265, 8405, 638, 11265, 8405, 652, 11265, 8405, 670, 11265, 8405, 1612, 11265, 8405, 2030, 11265, 8405, 2126, 11265, 8405, 2610, 11265, 10775, 5759, 9564, 11265, 10775, 5759, 10406, 11265, 10775, 5759, 11154, 11355, 5758, 11355, 10303, 5758, 11355, 10472, 11357, 1177, 439, 2681, 7790, 11357, 1177, 1550, 11357, 1177, 1749, 445, 7180, 11357, 1177, 3803, 11754, 11357, 1177, 4150, 11357, 1177, 4223, 8056, 11357, 1177, 6702, 11357, 1177, 6865, 569, 4944, 11357, 1177, 6994, 11357, 1177, 7174, 11357, 1177, 7428, 11357, 1177, 7644, 11357, 1177, 7770, 11357, 1177, 7810, 11357, 1177, 7952, 11357, 1177, 8036, 11357, 1177, 8042, 11357, 1177, 8065, 7186, 11357, 1177, 8156, 11357, 1177, 8222, 11357, 1177, 8394, 11357, 1177, 8618, 11357, 1177, 8650, 11357, 1177, 8976, 11357, 1177, 9026, 11357, 1177, 9100, 11357, 1177, 9110, 11357, 1177, 9168, 11357, 1177, 9276, 11357, 1177, 9341, 3696, 11357, 1177, 9395, 7592, 11357, 1177, 9402, 11357, 1177, 9460, 11357, 1177, 9466, 11357, 1177, 9550, 11357, 1177, 9574, 11357, 1177, 9626, 11357, 1177, 9696, 11357, 1177, 9832, 11357, 1177, 10168, 11357, 1177, 10210, 11357, 1177, 10232, 11357, 1177, 10252, 11357, 1177, 10486, 11357, 1177, 10540, 11357, 1177, 10550, 11357, 1177, 10673, 445, 9836, 11357, 1177, 10747, 2186, 11357, 1177, 10764, 11357, 1177, 10776, 11357, 1177, 10792, 11357, 1177, 10800, 11357, 1177, 10972, 11357, 1177, 10998, 11357, 1177, 11002, 11357, 1177, 11012, 11357, 1177, 11013, 274, 11357, 1177, 11024, 11357, 1177, 11086, 11357, 1177, 11210, 11357, 1177, 11234, 11357, 1177, 11454, 11357, 1177, 11456, 11357, 1177, 11462, 11357, 1177, 11486, 11357, 1177, 11610, 11357, 1177, 11622, 11357, 1177, 11702, 11357, 1177, 11752, 11357, 1177, 11888, 11357, 1177, 11916, 11357, 1177, 12012, 11357, 1177, 12026, 11357, 1177, 12118, 11357, 1177, 12392, 11357, 1177, 12430, 11357, 1177, 12434, 11357, 1177, 12436, 11357, 1177, 12898, 11357, 1177, 12923, 445, 11484, 11357, 1177, 12936, 11360, 11387, 11205, 8774, 11389, 12117, 8774, 11391, 11770, 11391, 11772, 11391, 11774, 11391, 11776, 11391, 11778, 11391, 11780, 11391, 11782, 11391, 11784, 11391, 11786, 11391, 12160, 11391, 12162, 11391, 12164, 11391, 12166, 11391, 12168, 11391, 12170, 11391, 12172, 11391, 12174, 11391, 12176, 11391, 12178, 11391, 12180, 11391, 12182, 11391, 12184, 11391, 12186, 11391, 12188, 11391, 12190, 11391, 12192, 11391, 12194, 11391, 12196, 11391, 12198, 11391, 12200, 11391, 12202, 11391, 12204, 11391, 12206, 11391, 12208, 11391, 12210, 11391, 12212, 11391, 12214, 11391, 12216, 11391, 12218, 11391, 12220, 11391, 12222, 11391, 12224, 11391, 12226, 11391, 12228, 11391, 12230, 11391, 12232, 11391, 12234, 11391, 12236, 11391, 12238, 11391, 12240, 11391, 12242, 11391, 12244, 11391, 12246, 11391, 12248, 11391, 12250, 11391, 12252, 11391, 12254, 11391, 12256, 11391, 12258, 11391, 12260, 11391, 12262, 11391, 12264, 11391, 12266, 11391, 12268, 11391, 12270, 11391, 12272, 11391, 12274, 11391, 12276, 11391, 12278, 11391, 12280, 11391, 12282, 11391, 12284, 11391, 12286, 11391, 12288, 11391, 12290, 11391, 12292, 11391, 12294, 11391, 12296, 11391, 12298, 11391, 12300, 11391, 12302, 11391, 12304, 11391, 12306, 11391, 12308, 11391, 12310, 11391, 12312, 11391, 12314, 11391, 12316, 11391, 12318, 11391, 12320, 11391, 12322, 11391, 12324, 11391, 12326, 11391, 12328, 11391, 12330, 11391, 12332, 11391, 12334, 11391, 12336, 11391, 12338, 11391, 12542, 11391, 12544, 11391, 12546, 11391, 12548, 11391, 12550, 11391, 12552, 11391, 12554, 11391, 12556, 11391, 12558, 11391, 12560, 11391, 12562, 11391, 12564, 11391, 12566, 11391, 12568, 11391, 12570, 11391, 12572, 11391, 12574, 11391, 12576, 11391, 12578, 11391, 12580, 11391, 12582, 11391, 12584, 11391, 12586, 11391, 12588, 11391, 12590, 11391, 12592, 11391, 12594, 11391, 12596, 11391, 12598, 11391, 12600, 11391, 12602, 11391, 12604, 11391, 12606, 11391, 12608, 11391, 12610, 11391, 12612, 11391, 12614, 11391, 12616, 11391, 12618, 11391, 12620, 11391, 12622, 11391, 12624, 11391, 12626, 11391, 12628, 11391, 12630, 11391, 12632, 11391, 12634, 11391, 12636, 11391, 12638, 11391, 12640, 11391, 12642, 11391, 12644, 11391, 12646, 11391, 12648, 11391, 12650, 11391, 12652, 11391, 12654, 11391, 12656, 11391, 12658, 11391, 12660, 11391, 12662, 11391, 12664, 11391, 12666, 11391, 12668, 11391, 12670, 11391, 12672, 11391, 12674, 11391, 12676, 11391, 12678, 11391, 12680, 11391, 12682, 11391, 12684, 11391, 12686, 11391, 12688, 11391, 12690, 11391, 12692, 11391, 12694, 11391, 12696, 11391, 12698, 11391, 12700, 11391, 12702, 11391, 12704, 11391, 12706, 11391, 12708, 11391, 12710, 11391, 12712, 11391, 12714, 11391, 12716, 11391, 12718, 11391, 12720, 11391, 12722, 11391, 12724, 11391, 12726, 11391, 12728, 11391, 12730, 11391, 12732, 11391, 12734, 11391, 12736, 11391, 12738, 11391, 12740, 11391, 12742, 11391, 12744, 11391, 12746, 11391, 12748, 11391, 12750, 11391, 12752, 11391, 12754, 11391, 12756, 11391, 12758, 11391, 12760, 11391, 12762, 11391, 12764, 11391, 12766, 11391, 12768, 11391, 12770, 11391, 12772, 11391, 12774, 11391, 12776, 11391, 12778, 11391, 12780, 11391, 12782, 11391, 12784, 11391, 12786, 11391, 12788, 11391, 12790, 11391, 12792, 11391, 12794, 11391, 12796, 11391, 12798, 11391, 12800, 11391, 12802, 11391, 12804, 11391, 12806, 11391, 12808, 11391, 12810, 11391, 12812, 11391, 12814, 11391, 12816, 11391, 12818, 11391, 12820, 11391, 12822, 11391, 12824, 11391, 12826, 11391, 12828, 11391, 12830, 11391, 12832, 11391, 12834, 11391, 12836, 11391, 12838, 11391, 12840, 11391, 12842, 11391, 12844, 11391, 12846, 11391, 12848, 11391, 12850, 11391, 12852, 11391, 12854, 11424, 11427, 2681, 7104, 11445, 1809, 4876, 11445, 10388, 11449, 7908, 11451, 90, 11451, 7173, 5758, 11452, 11465, 11385, 8774, 11475, 5238, 11477, 436, 11477, 5759, 4423, 9721, 1044, 11477, 5759, 7282, 11477, 5759, 8916, 11477, 5759, 9824, 11477, 5759, 9870, 11477, 5759, 9904, 11477, 5759, 11900, 11477, 6379, 7908, 11477, 6646, 11477, 6689, 2170, 11477, 6689, 2540, 11477, 6689, 2778, 11477, 6689, 4200, 11477, 6689, 4214, 11477, 6689, 5190, 11477, 6689, 6260, 11477, 6689, 6722, 11477, 6689, 7508, 11477, 6689, 7694, 11477, 6875, 7908, 11477, 7803, 5759, 8, 11477, 7803, 5759, 16, 11477, 7803, 5759, 28, 11477, 7803, 5759, 40, 11477, 7803, 5759, 58, 11477, 7803, 5759, 72, 11477, 7803, 5759, 92, 11477, 7803, 5759, 266, 11477, 7803, 5759, 606, 11477, 7803, 5759, 7551, 8, 11477, 7803, 5759, 7551, 28, 11477, 7803, 5759, 8031, 8, 11477, 7803, 5759, 8031, 28, 11477, 7803, 5759, 9827, 22, 11477, 7803, 5759, 9827, 34, 11477, 7803, 5759, 9827, 344, 11477, 7803, 5759, 9827, 518, 11477, 8153, 6646, 11477, 8405, 0, 11477, 8405, 8, 11477, 8405, 16, 11477, 8405, 28, 11477, 8405, 40, 11477, 8405, 58, 11477, 8405, 72, 11477, 8405, 92, 11477, 8405, 100, 11477, 8405, 116, 11477, 8405, 138, 11477, 8405, 196, 11477, 8405, 216, 11477, 8405, 236, 11477, 8405, 266, 11477, 8405, 292, 11477, 8405, 306, 11477, 8405, 332, 11477, 8405, 364, 11477, 8405, 392, 11477, 8405, 462, 11477, 8405, 496, 11477, 8405, 510, 11477, 8405, 524, 11477, 8405, 556, 11477, 8405, 606, 11477, 8405, 610, 11477, 8405, 652, 11477, 8405, 670, 11477, 8405, 766, 11477, 8405, 792, 11477, 8405, 884, 11477, 8405, 974, 11477, 8405, 996, 11477, 8405, 1250, 11477, 8405, 1260, 11477, 8405, 1512, 11477, 8405, 1528, 11477, 8405, 1612, 11477, 8405, 1796, 11477, 8405, 2030, 11477, 8405, 2076, 11477, 8405, 2126, 11477, 8405, 2212, 11477, 8405, 2410, 11477, 8405, 2438, 11477, 8405, 2516, 11477, 8405, 2566, 11477, 8405, 2678, 11477, 8405, 2746, 11477, 8405, 3110, 11477, 8405, 4008, 11477, 8405, 4016, 11477, 8405, 4320, 11477, 8405, 4748, 11477, 8405, 4888, 11477, 8405, 5234, 11477, 8405, 5994, 11477, 8405, 6658, 11477, 8405, 7551, 0, 11477, 8405, 7551, 8, 11477, 8405, 7551, 28, 11477, 8405, 8031, 0, 11477, 8405, 8031, 8, 11477, 8405, 8031, 28, 11477, 8405, 9313, 5836, 11477, 8405, 9827, 22, 11477, 8405, 9827, 34, 11477, 8405, 9827, 344, 11477, 8405, 9827, 518, 11477, 8755, 5759, 8892, 11477, 8755, 5759, 9868, 11477, 12391, 5758, 11479, 9042, 11605, 12492, 11621, 568, 11621, 6121, 4215, 4113, 6376, 11641, 7593, 8405, 16, 11641, 7593, 8405, 468, 11641, 7593, 8405, 660, 11641, 7593, 8405, 664, 11641, 7593, 8405, 746, 11641, 7593, 8405, 807, 3096, 11641, 7593, 8405, 2176, 11641, 7593, 8405, 2184, 11641, 7593, 8405, 2516, 11641, 7593, 8405, 2736, 11641, 7593, 8405, 2808, 11641, 7593, 8405, 3810, 11641, 7593, 8405, 4198, 11641, 7593, 8405, 4406, 11641, 7593, 8405, 4626, 11641, 7593, 8405, 4712, 11641, 7593, 8405, 5718, 11641, 7593, 8405, 6076, 11641, 7593, 8405, 6188, 11641, 7593, 8405, 6198, 11641, 7593, 8405, 6200, 11641, 7593, 8405, 6698, 11641, 7593, 8405, 6710, 11641, 7593, 8405, 6810, 11641, 7593, 8405, 7210, 11641, 7593, 8405, 7444, 11641, 7593, 8405, 7590, 11641, 7593, 8405, 7593, 3096, 11641, 7593, 8405, 7593, 3097, 6121, 5878, 11641, 7593, 8405, 7856, 11641, 7593, 8405, 8050, 11641, 7593, 8405, 8124, 11641, 7593, 8405, 8606, 11641, 7593, 8405, 8872, 11641, 7593, 8405, 8958, 11641, 7593, 8405, 9310, 11641, 7593, 8405, 9363, 4626, 11641, 7593, 8405, 9371, 807, 3096, 11641, 7593, 8405, 9371, 7593, 3096, 11641, 7593, 8405, 9372, 11641, 7593, 8405, 9434, 11641, 7593, 8405, 9486, 11641, 7593, 8405, 9686, 11641, 7593, 8405, 9727, 236, 11641, 7593, 8405, 9850, 11641, 7593, 8405, 10299, 9486, 11641, 7593, 8405, 11867, 0, 11641, 9063, 8405, 16, 11641, 9063, 8405, 468, 11641, 9063, 8405, 660, 11641, 9063, 8405, 664, 11641, 9063, 8405, 746, 11641, 9063, 8405, 807, 3096, 11641, 9063, 8405, 2176, 11641, 9063, 8405, 2184, 11641, 9063, 8405, 2516, 11641, 9063, 8405, 2736, 11641, 9063, 8405, 2808, 11641, 9063, 8405, 3810, 11641, 9063, 8405, 4198, 11641, 9063, 8405, 4406, 11641, 9063, 8405, 4626, 11641, 9063, 8405, 4712, 11641, 9063, 8405, 5718, 11641, 9063, 8405, 6076, 11641, 9063, 8405, 6188, 11641, 9063, 8405, 6198, 11641, 9063, 8405, 6200, 11641, 9063, 8405, 6698, 11641, 9063, 8405, 6710, 11641, 9063, 8405, 6810, 11641, 9063, 8405, 7210, 11641, 9063, 8405, 7444, 11641, 9063, 8405, 7590, 11641, 9063, 8405, 7593, 3096, 11641, 9063, 8405, 7593, 3097, 6121, 5878, 11641, 9063, 8405, 7856, 11641, 9063, 8405, 8050, 11641, 9063, 8405, 8124, 11641, 9063, 8405, 8606, 11641, 9063, 8405, 8872, 11641, 9063, 8405, 8958, 11641, 9063, 8405, 9310, 11641, 9063, 8405, 9363, 4626, 11641, 9063, 8405, 9371, 807, 3096, 11641, 9063, 8405, 9371, 7593, 3096, 11641, 9063, 8405, 9372, 11641, 9063, 8405, 9434, 11641, 9063, 8405, 9486, 11641, 9063, 8405, 9686, 11641, 9063, 8405, 9727, 236, 11641, 9063, 8405, 9850, 11641, 9063, 8405, 10299, 9486, 11641, 9063, 8405, 11867, 0, 11646, 11649, 760, 11649, 4877, 10982, 11649, 4923, 6121, 8759, 5758, 11649, 5643, 8412, 11649, 5643, 8414, 11649, 5643, 8416, 11649, 5643, 8418, 11649, 6505, 9338, 11649, 10154, 11651, 8774, 11661, 10256, 11667, 5759, 761, 6376, 11667, 5759, 1045, 6490, 11667, 5759, 6548, 11667, 5759, 8153, 5551, 6490, 11667, 5759, 9824, 11667, 5759, 9870, 11667, 6689, 2170, 11667, 6689, 2778, 11667, 6689, 4214, 11667, 6689, 7694, 11667, 7803, 5759, 8, 11667, 7803, 5759, 16, 11667, 7803, 5759, 28, 11667, 7803, 5759, 40, 11667, 7803, 5759, 9827, 34, 11667, 7803, 8399, 4926, 11667, 8405, 0, 11667, 8405, 100, 11667, 8405, 116, 11667, 8405, 138, 11667, 8405, 216, 11667, 8405, 236, 11667, 8405, 292, 11667, 8405, 306, 11667, 8405, 332, 11667, 8405, 364, 11667, 8405, 392, 11667, 8405, 462, 11667, 8405, 510, 11667, 8405, 524, 11667, 8405, 556, 11667, 8405, 610, 11667, 8405, 652, 11667, 8405, 670, 11667, 8405, 792, 11667, 8405, 884, 11667, 8405, 974, 11667, 8405, 996, 11667, 8405, 1260, 11667, 8405, 1612, 11667, 8405, 1642, 11667, 8405, 2076, 11667, 8405, 2126, 11667, 8405, 2212, 11667, 8405, 2516, 11667, 8405, 2566, 11667, 8405, 2678, 11667, 8405, 2746, 11667, 8405, 4016, 11667, 8405, 5994, 11667, 8405, 7750, 11667, 8525, 2171, 9344, 11667, 8525, 2171, 10624, 11667, 8525, 2670, 11667, 8525, 8876, 11667, 8916, 11667, 12133, 1044, 11667, 12133, 6646, 11667, 12133, 7108, 11667, 12133, 7114, 11667, 12133, 7593, 8056, 11667, 12133, 8056, 11667, 12133, 8153, 6646, 11667, 12133, 9965, 760, 11667, 12133, 10318, 11687, 8774, 11700, 11702, 11725, 8153, 12132, 11725, 8717, 12132, 11727, 6129, 11228, 11727, 8405, 238, 11727, 8405, 468, 11727, 8405, 710, 11727, 8405, 714, 11727, 8405, 788, 11727, 8405, 1366, 11727, 8405, 1578, 11727, 8405, 1892, 11727, 8405, 2110, 11727, 8405, 2318, 11727, 8405, 2658, 11727, 8405, 2674, 11727, 8405, 2916, 11727, 8405, 3080, 11727, 8405, 3126, 11727, 8405, 4058, 11727, 8405, 4238, 11727, 8405, 4832, 11727, 8405, 5568, 11727, 8405, 5624, 11727, 8405, 5652, 11727, 8405, 5698, 11727, 8525, 2170, 11727, 8525, 2171, 9344, 11727, 8525, 2670, 11727, 8525, 8876, 11731, 5758, 11736, 11740, 11745, 10261, 10374, 11747, 6741, 568, 11749, 5758, 11763, 731, 10763, 6434, 11765, 2779, 8289, 6434, 11765, 6105, 6434, 11765, 6434, 11765, 6435, 569, 760, 11765, 6435, 569, 6505, 9158, 11765, 6435, 4221, 760, 11765, 6435, 4221, 761, 569, 6505, 9158, 11765, 6435, 5387, 11097, 6434, 11765, 6435, 6121, 2697, 9810, 11765, 6435, 6121, 2697, 10958, 11765, 6435, 6121, 4530, 11765, 6435, 6121, 4896, 11765, 6435, 6121, 5445, 6490, 11765, 6435, 6121, 5878, 11765, 6435, 6121, 5879, 6121, 8153, 10677, 8758, 11765, 6435, 6121, 5879, 6121, 10677, 8758, 11765, 6435, 6121, 8077, 10958, 11765, 6435, 6121, 8151, 5832, 11765, 6435, 6121, 8153, 10677, 8758, 11765, 6435, 6121, 8758, 11765, 6435, 6121, 10677, 8758, 11765, 6435, 6377, 7551, 11097, 6434, 11765, 6435, 6377, 7709, 10374, 11765, 6435, 6377, 7919, 6741, 568, 11765, 6435, 6377, 9633, 7709, 10374, 11765, 6435, 6377, 9633, 7919, 6741, 568, 11765, 6435, 9785, 46, 11765, 6435, 9785, 10578, 11765, 6435, 9785, 12472, 11765, 7821, 6434, 11765, 7821, 6435, 4221, 6102, 11765, 8097, 6434, 11765, 8153, 3993, 6434, 11765, 8153, 6434, 11765, 8153, 6435, 4221, 760, 11765, 8153, 6435, 6121, 8758, 11765, 8153, 6435, 6121, 10677, 8758, 11765, 8153, 11430, 11765, 8561, 7944, 11765, 8849, 3993, 6434, 11765, 8849, 6434, 11765, 9327, 5387, 11097, 9326, 11765, 9327, 6121, 3713, 601, 569, 760, 11765, 9327, 6121, 3713, 601, 4221, 760, 11765, 9327, 6121, 3713, 601, 6377, 4895, 3992, 11765, 9327, 6121, 3713, 601, 6377, 11097, 9327, 6121, 3713, 600, 11765, 9327, 6121, 3713, 601, 6377, 11765, 9327, 6121, 3713, 4116, 11765, 9327, 6121, 3713, 4117, 569, 760, 11765, 9327, 6121, 3713, 4117, 4221, 760, 11765, 9327, 6121, 3713, 4117, 6377, 11097, 9327, 6121, 3713, 4116, 11765, 9327, 6121, 3713, 4117, 6491, 4895, 3992, 11765, 9327, 6121, 3713, 9810, 11765, 9327, 6121, 3713, 10958, 11765, 10531, 6434, 11765, 11191, 6434, 11765, 11430, 11765, 11875, 6435, 4221, 760, 11765, 11875, 6435, 6121, 5878, 11765, 11875, 6435, 6121, 5879, 6121, 8153, 10677, 8758, 11765, 11875, 6435, 6121, 5879, 6121, 10677, 8758, 11765, 11875, 6435, 6121, 8153, 10677, 8758, 11765, 11875, 6435, 6121, 10677, 8758, 11765, 11875, 8849, 3993, 6434, 11765, 12103, 6434, 11769, 5759, 8916, 11769, 5759, 9824, 11769, 5759, 9870, 11769, 6646, 11769, 6689, 2170, 11769, 6689, 2540, 11769, 6689, 2778, 11769, 6689, 4200, 11769, 6689, 4214, 11769, 6689, 5190, 11769, 6689, 6260, 11769, 6689, 6722, 11769, 6689, 7508, 11769, 6689, 7694, 11769, 7803, 5759, 8, 11769, 7803, 5759, 16, 11769, 7803, 5759, 28, 11769, 7803, 5759, 40, 11769, 7803, 5759, 58, 11769, 7803, 5759, 72, 11769, 7803, 5759, 92, 11769, 7803, 5759, 162, 11769, 7803, 5759, 266, 11769, 7803, 5759, 440, 11769, 7803, 5759, 606, 11769, 7803, 5759, 9827, 22, 11769, 7803, 5759, 9827, 34, 11769, 7803, 5759, 9827, 344, 11769, 7803, 5759, 9827, 518, 11769, 8153, 6646, 11769, 8405, 0, 11769, 8405, 8, 11769, 8405, 16, 11769, 8405, 28, 11769, 8405, 40, 11769, 8405, 58, 11769, 8405, 72, 11769, 8405, 92, 11769, 8405, 100, 11769, 8405, 116, 11769, 8405, 138, 11769, 8405, 162, 11769, 8405, 216, 11769, 8405, 236, 11769, 8405, 266, 11769, 8405, 292, 11769, 8405, 306, 11769, 8405, 332, 11769, 8405, 364, 11769, 8405, 392, 11769, 8405, 440, 11769, 8405, 462, 11769, 8405, 510, 11769, 8405, 524, 11769, 8405, 556, 11769, 8405, 606, 11769, 8405, 610, 11769, 8405, 652, 11769, 8405, 792, 11769, 8405, 884, 11769, 8405, 974, 11769, 8405, 996, 11769, 8405, 1260, 11769, 8405, 1512, 11769, 8405, 1612, 11769, 8405, 1796, 11769, 8405, 2030, 11769, 8405, 2076, 11769, 8405, 2126, 11769, 8405, 2212, 11769, 8405, 2516, 11769, 8405, 2566, 11769, 8405, 2678, 11769, 8405, 2746, 11769, 8405, 4016, 11769, 8405, 5994, 11769, 8405, 9827, 22, 11769, 8405, 9827, 34, 11769, 8405, 9827, 344, 11769, 8405, 9827, 518, 11769, 10775, 5759, 6888, 11793, 9611, 6121, 8005, 8064, 11801, 5385, 826, 11819, 7608, 11859, 8022, 11881, 8774, 11893, 1611, 8774, 11899, 10513, 7821, 11765, 6434, 11905, 10212, 11909, 8774, 11910, 11921, 568, 11922, 11924, 12007, 6741, 569, 445, 11098, 12007, 6741, 569, 445, 12472, 12007, 9705, 6741, 569, 445, 11098, 12007, 9705, 6741, 569, 445, 12472, 12007, 9705, 11099, 445, 6741, 568, 12007, 9705, 12473, 445, 6741, 568, 12015, 568, 12017, 4926, 12017, 10469, 4926, 12021, 7608, 12041, 7382, 12043, 4223, 5836, 12043, 4389, 4193, 7608, 12043, 6616, 12043, 7097, 5965, 4926, 12043, 7608, 12043, 8525, 6260, 12043, 8649, 5965, 4926, 12043, 9099, 4926, 12043, 10161, 5965, 4926, 12043, 10799, 5965, 4926, 12043, 11067, 4926, 12043, 11353, 4877, 4183, 11229, 8774, 12043, 11353, 8775, 1177, 973, 2170, 12043, 11353, 8775, 1177, 973, 2540, 12043, 11353, 8775, 1177, 973, 2670, 12043, 11353, 8775, 1177, 973, 2778, 12043, 11353, 8775, 1177, 973, 4200, 12043, 11353, 8775, 1177, 973, 4214, 12043, 11353, 8775, 1177, 973, 5190, 12043, 11353, 8775, 1177, 973, 6722, 12043, 11353, 8775, 1177, 973, 7508, 12043, 11353, 8775, 1177, 973, 7694, 12043, 11353, 8775, 1177, 973, 8162, 12043, 11353, 8775, 1177, 973, 8820, 12043, 11353, 8775, 1177, 973, 8874, 12043, 11353, 8775, 1177, 973, 8876, 12043, 11353, 8775, 1177, 973, 9286, 12043, 11353, 8775, 1177, 973, 9700, 12043, 11353, 8775, 1177, 973, 10150, 12043, 11353, 8775, 1177, 973, 10200, 12043, 11353, 8775, 1177, 973, 10360, 12043, 11353, 8775, 1177, 973, 10622, 12043, 11353, 8775, 1177, 973, 11232, 12043, 11353, 8775, 1177, 973, 11854, 12043, 11353, 8775, 1177, 973, 11868, 12043, 11353, 8775, 1177, 973, 11870, 12043, 11353, 8775, 1177, 973, 11872, 12043, 11353, 8775, 1177, 973, 12374, 12043, 11353, 8775, 1177, 973, 12376, 12043, 11353, 8775, 1177, 973, 12378, 12043, 11353, 8775, 1177, 973, 12888, 12043, 11353, 8775, 1177, 973, 12890, 12043, 11353, 8775, 1177, 973, 12892, 12043, 11353, 8775, 1177, 1870, 12043, 11353, 8775, 1177, 4541, 2170, 12043, 11353, 8775, 1177, 4541, 2540, 12043, 11353, 8775, 1177, 4541, 2670, 12043, 11353, 8775, 1177, 4541, 2778, 12043, 11353, 8775, 1177, 4541, 4200, 12043, 11353, 8775, 1177, 4541, 4214, 12043, 11353, 8775, 1177, 4541, 5190, 12043, 11353, 8775, 1177, 4541, 6260, 12043, 11353, 8775, 1177, 4541, 6722, 12043, 11353, 8775, 1177, 4541, 7508, 12043, 11353, 8775, 1177, 4541, 7694, 12043, 11353, 8775, 1177, 4541, 8162, 12043, 11353, 8775, 1177, 4541, 8874, 12043, 11353, 8775, 1177, 4541, 8876, 12043, 11353, 8775, 1177, 4541, 9286, 12043, 11353, 8775, 1177, 4541, 9700, 12043, 11353, 8775, 1177, 4541, 10150, 12043, 11353, 8775, 1177, 4541, 10200, 12043, 11353, 8775, 1177, 4541, 10360, 12043, 11353, 8775, 1177, 4541, 10622, 12043, 11353, 8775, 1177, 4541, 11232, 12043, 11353, 8775, 1177, 4541, 11868, 12043, 11353, 8775, 1177, 4541, 11872, 12043, 11353, 8775, 1177, 4541, 12376, 12043, 11353, 8775, 1177, 4541, 12892, 12043, 11353, 8775, 1177, 4682, 12043, 11353, 8775, 1177, 4684, 12043, 11353, 8775, 1177, 6420, 12043, 11353, 8775, 1177, 7136, 12043, 11353, 8775, 1177, 7958, 12043, 11353, 8775, 1177, 9374, 12043, 11353, 8775, 1177, 9528, 12043, 11353, 8775, 1177, 9990, 12043, 11353, 8775, 1177, 10176, 12043, 11353, 8775, 1177, 10368, 12043, 11353, 8775, 1177, 11230, 12043, 11391, 11054, 12043, 11415, 1861, 4926, 12043, 11415, 2171, 4926, 12043, 11415, 2725, 4926, 12043, 11415, 2779, 4926, 12043, 11415, 4215, 4926, 12043, 11415, 6717, 4926, 12043, 11415, 6791, 4926, 12043, 11415, 7687, 4926, 12043, 11415, 7695, 4926, 12043, 11415, 8005, 4926, 12043, 11415, 8233, 4926, 12043, 11415, 8291, 4926, 12043, 11415, 8473, 4926, 12043, 11415, 8681, 4926, 12043, 11415, 9433, 4926, 12043, 11415, 9633, 4926, 12043, 11937, 10759, 4223, 10580, 12043, 11937, 10759, 4849, 569, 7442, 12043, 11937, 10759, 4849, 569, 8473, 721, 7442, 12043, 11937, 10759, 6377, 569, 6490, 12043, 11937, 10759, 6377, 569, 8473, 721, 6490, 12043, 11937, 10759, 10386, 12043, 11937, 10759, 10581, 4221, 4848, 12043, 11937, 10759, 10581, 4221, 6376, 12043, 11937, 10759, 10581, 4221, 6490, 12043, 11937, 10759, 10581, 4221, 7121, 4848, 12043, 11937, 10759, 10581, 4221, 7773, 4848, 12043, 11937, 10759, 10581, 4221, 7773, 7442, 12055, 8724, 12058, 12061, 11415, 7922, 12061, 11415, 11228, 12061, 11415, 11850, 12063, 8197, 721, 4923, 5758, 12064, 12075, 7821, 11765, 6434, 12108, 12117, 5758, 12122, 12133, 7608, 12135, 5758, 12143, 10758, 12156, 12342, 12355, 2170, 12355, 2540, 12355, 2778, 12355, 4200, 12355, 4214, 12355, 4849, 12114, 12355, 5190, 12355, 5445, 5758, 12355, 6260, 12355, 6722, 12355, 7089, 7593, 8405, 16, 12355, 7089, 7593, 8405, 26, 12355, 7172, 12355, 7443, 12114, 12355, 7508, 12355, 7694, 12355, 8167, 5758, 12371, 12492, 12383, 10643, 6121, 4849, 4389, 6504, 12383, 10643, 6121, 7443, 4389, 6504, 12396, 12399, 445, 10780, 12403, 2209, 2671, 10625, 5758, 12403, 2209, 7171, 5758, 12403, 3961, 5566, 12403, 6689, 2170, 12403, 6689, 2540, 12403, 6689, 2778, 12403, 6689, 4200, 12403, 6689, 4214, 12403, 6689, 5190, 12403, 6689, 6260, 12403, 6689, 6722, 12403, 6689, 7508, 12403, 6689, 7694, 12403, 8233, 5566, 12413, 9063, 4, 12413, 9063, 14, 12413, 9063, 16, 12413, 9063, 34, 12413, 9063, 50, 12428, 12461, 10346, 12463, 6505, 8056, 12463, 6505, 8744, 12463, 6505, 9158, 12463, 7821, 8056, 12463, 7821, 8744, 12463, 7821, 9158, 12464, 12467, 10513, 7821, 11765, 6434, 12473, 445, 6741, 568, 12473, 445, 9705, 6741, 568, 12473, 445, 9705, 6741, 569, 6121, 1045, 6376, 12473, 445, 9705, 6741, 569, 6121, 1045, 6377, 4848, 12473, 445, 9705, 6741, 569, 6121, 1045, 8318, 12473, 445, 11098, 12473, 445, 11621, 568, 12473, 445, 11896, 12473, 721, 2091, 11896, 12473, 721, 12345, 2091, 6741, 568, 12473, 835, 2091, 6741, 568, 12473, 835, 2091, 11621, 568, 12473, 5387, 6741, 568, 12473, 5758, 12473, 6121, 1044, 12473, 6121, 8057, 8318, 12473, 6121, 10469, 4927, 6376, 12473, 6377, 9693, 445, 6740, 12473, 6377, 9693, 6377, 11098, 12473, 6377, 9705, 6741, 6377, 11099, 6377, 9705, 6740, 12473, 6377, 11099, 6377, 12007, 6740, 12473, 6377, 11765, 6434, 12473, 6377, 12007, 6741, 6377, 11098, 12473, 6741, 569, 445, 11098, 12473, 7991, 11098, 12473, 8065, 115, 6628, 12473, 8065, 115, 6629, 6377, 9705, 6740, 12473, 12105, 11098, 12478, 12480, 12492, 12493, 6121, 1044, 12493, 6121, 9437, 720, 12493, 6121, 9546, 12493, 6377, 761, 6377, 7768, 12493, 6377, 7768, 12493, 7991, 721, 8329, 6121, 12492, 12505, 3803, 477, 8774, 12505, 3803, 2217, 8774, 12505, 3803, 2413, 8774, 12505, 3803, 6689, 2170, 12505, 3803, 6689, 2540, 12505, 3803, 6689, 2778, 12505, 3803, 6689, 4200, 12505, 3803, 6689, 4214, 12505, 3803, 6689, 5190, 12505, 3803, 6689, 6260, 12505, 3803, 6689, 6722, 12505, 3803, 6689, 7508, 12505, 3803, 6689, 7694, 12505, 3803, 7023, 8774, 12505, 3803, 7202, 12505, 3803, 7593, 0, 12505, 3803, 7593, 2, 12505, 3803, 7593, 4, 12505, 3803, 7593, 6, 12505, 3803, 7593, 8, 12505, 3803, 7593, 10, 12505, 3803, 7593, 12, 12505, 3803, 7593, 14, 12505, 3803, 7593, 16, 12505, 3803, 7593, 18, 12505, 3803, 7593, 20, 12505, 3803, 7593, 22, 12505, 3803, 7593, 24, 12505, 3803, 7593, 26, 12505, 3803, 7593, 28, 12505, 3803, 7593, 30, 12505, 3803, 7593, 32, 12505, 3803, 7593, 34, 12505, 3803, 7593, 36, 12505, 3803, 7593, 38, 12505, 3803, 7593, 40, 12505, 3803, 7593, 42, 12505, 3803, 7593, 44, 12505, 3803, 7593, 46, 12505, 3803, 7593, 48, 12505, 3803, 7593, 50, 12505, 3803, 7593, 384, 12505, 3803, 7593, 416, 12505, 3803, 7593, 476, 12505, 3803, 7593, 644, 12505, 3803, 7593, 888, 12505, 3803, 7593, 1128, 12505, 3803, 7593, 2216, 12505, 3803, 7593, 2250, 12505, 3803, 7593, 2412, 12505, 3803, 7593, 2658, 12505, 3803, 7593, 3774, 12505, 3803, 7593, 4614, 12505, 3803, 7593, 6262, 12505, 3803, 7593, 6406, 12505, 3803, 7593, 6674, 12505, 3803, 7593, 6789, 7568, 12505, 3803, 7593, 6824, 12505, 3803, 7593, 7022, 12505, 3803, 7593, 7080, 12505, 3803, 7593, 7316, 12505, 3803, 7593, 7568, 12505, 3803, 7593, 7682, 12505, 3803, 7593, 9162, 12505, 3803, 7593, 9270, 12505, 3803, 7593, 9530, 12505, 3803, 7593, 9808, 12505, 3803, 7683, 8774, 12505, 3803, 8325, 477, 8774, 12505, 3803, 8325, 2217, 8774, 12505, 3803, 8325, 2413, 8774, 12505, 3803, 8325, 7023, 8774, 12505, 3803, 8325, 7202, 12505, 3803, 8325, 7593, 0, 12505, 3803, 8325, 7593, 2, 12505, 3803, 8325, 7593, 4, 12505, 3803, 8325, 7593, 6, 12505, 3803, 8325, 7593, 8, 12505, 3803, 8325, 7593, 10, 12505, 3803, 8325, 7593, 12, 12505, 3803, 8325, 7593, 14, 12505, 3803, 8325, 7593, 16, 12505, 3803, 8325, 7593, 18, 12505, 3803, 8325, 7593, 20, 12505, 3803, 8325, 7593, 22, 12505, 3803, 8325, 7593, 24, 12505, 3803, 8325, 7593, 26, 12505, 3803, 8325, 7593, 28, 12505, 3803, 8325, 7593, 30, 12505, 3803, 8325, 7593, 32, 12505, 3803, 8325, 7593, 34, 12505, 3803, 8325, 7593, 36, 12505, 3803, 8325, 7593, 38, 12505, 3803, 8325, 7593, 40, 12505, 3803, 8325, 7593, 42, 12505, 3803, 8325, 7593, 44, 12505, 3803, 8325, 7593, 46, 12505, 3803, 8325, 7593, 48, 12505, 3803, 8325, 7593, 50, 12505, 3803, 8325, 7593, 384, 12505, 3803, 8325, 7593, 416, 12505, 3803, 8325, 7593, 476, 12505, 3803, 8325, 7593, 644, 12505, 3803, 8325, 7593, 888, 12505, 3803, 8325, 7593, 1128, 12505, 3803, 8325, 7593, 2216, 12505, 3803, 8325, 7593, 2250, 12505, 3803, 8325, 7593, 2412, 12505, 3803, 8325, 7593, 2658, 12505, 3803, 8325, 7593, 3774, 12505, 3803, 8325, 7593, 4614, 12505, 3803, 8325, 7593, 6262, 12505, 3803, 8325, 7593, 6406, 12505, 3803, 8325, 7593, 6674, 12505, 3803, 8325, 7593, 6789, 7568, 12505, 3803, 8325, 7593, 6824, 12505, 3803, 8325, 7593, 7022, 12505, 3803, 8325, 7593, 7080, 12505, 3803, 8325, 7593, 7316, 12505, 3803, 8325, 7593, 7568, 12505, 3803, 8325, 7593, 7682, 12505, 3803, 8325, 7593, 9270, 12505, 3803, 8325, 7593, 9530, 12505, 3803, 8325, 7593, 9808, 12505, 3803, 8325, 7683, 8774, 12505, 3803, 8325, 9063, 0, 12505, 3803, 8325, 9063, 2, 12505, 3803, 8325, 9063, 4, 12505, 3803, 8325, 9063, 6, 12505, 3803, 8325, 9063, 8, 12505, 3803, 8325, 9063, 10, 12505, 3803, 8325, 9063, 12, 12505, 3803, 8325, 9063, 14, 12505, 3803, 8325, 9063, 16, 12505, 3803, 8325, 9063, 18, 12505, 3803, 8325, 9063, 20, 12505, 3803, 8325, 9063, 22, 12505, 3803, 8325, 9063, 24, 12505, 3803, 8325, 9063, 26, 12505, 3803, 8325, 9063, 28, 12505, 3803, 8325, 9063, 30, 12505, 3803, 8325, 9063, 32, 12505, 3803, 8325, 9063, 34, 12505, 3803, 8325, 9063, 36, 12505, 3803, 8325, 9063, 38, 12505, 3803, 8325, 9063, 40, 12505, 3803, 8325, 9063, 42, 12505, 3803, 8325, 9063, 44, 12505, 3803, 8325, 9063, 46, 12505, 3803, 8325, 9063, 48, 12505, 3803, 8325, 9063, 50, 12505, 3803, 8325, 9063, 384, 12505, 3803, 8325, 9063, 416, 12505, 3803, 8325, 9063, 476, 12505, 3803, 8325, 9063, 644, 12505, 3803, 8325, 9063, 888, 12505, 3803, 8325, 9063, 1128, 12505, 3803, 8325, 9063, 2216, 12505, 3803, 8325, 9063, 2250, 12505, 3803, 8325, 9063, 2412, 12505, 3803, 8325, 9063, 2658, 12505, 3803, 8325, 9063, 3774, 12505, 3803, 8325, 9063, 4614, 12505, 3803, 8325, 9063, 6262, 12505, 3803, 8325, 9063, 6406, 12505, 3803, 8325, 9063, 6674, 12505, 3803, 8325, 9063, 6824, 12505, 3803, 8325, 9063, 7022, 12505, 3803, 8325, 9063, 7080, 12505, 3803, 8325, 9063, 7316, 12505, 3803, 8325, 9063, 7568, 12505, 3803, 8325, 9063, 7682, 12505, 3803, 8325, 9063, 7683, 8774, 12505, 3803, 8325, 9063, 9270, 12505, 3803, 8325, 9063, 9530, 12505, 3803, 8325, 9063, 9808, 12505, 3803, 8325, 9271, 8774, 12505, 3803, 8325, 9573, 12432, 12505, 3803, 8679, 7593, 0, 12505, 3803, 8679, 7593, 2, 12505, 3803, 8679, 7593, 4, 12505, 3803, 8679, 7593, 6, 12505, 3803, 8679, 7593, 8, 12505, 3803, 8679, 7593, 10, 12505, 3803, 8679, 7593, 12, 12505, 3803, 8679, 7593, 14, 12505, 3803, 8679, 7593, 16, 12505, 3803, 8679, 7593, 18, 12505, 3803, 8679, 7593, 20, 12505, 3803, 8679, 7593, 22, 12505, 3803, 8679, 7593, 24, 12505, 3803, 8679, 7593, 26, 12505, 3803, 8679, 7593, 28, 12505, 3803, 8679, 7593, 30, 12505, 3803, 8679, 7593, 32, 12505, 3803, 8679, 7593, 34, 12505, 3803, 8679, 7593, 36, 12505, 3803, 8679, 7593, 38, 12505, 3803, 8679, 7593, 40, 12505, 3803, 8679, 7593, 42, 12505, 3803, 8679, 7593, 44, 12505, 3803, 8679, 7593, 46, 12505, 3803, 8679, 7593, 48, 12505, 3803, 8679, 7593, 50, 12505, 3803, 8679, 9063, 0, 12505, 3803, 8679, 9063, 2, 12505, 3803, 8679, 9063, 4, 12505, 3803, 8679, 9063, 6, 12505, 3803, 8679, 9063, 8, 12505, 3803, 8679, 9063, 10, 12505, 3803, 8679, 9063, 12, 12505, 3803, 8679, 9063, 14, 12505, 3803, 8679, 9063, 16, 12505, 3803, 8679, 9063, 18, 12505, 3803, 8679, 9063, 20, 12505, 3803, 8679, 9063, 22, 12505, 3803, 8679, 9063, 24, 12505, 3803, 8679, 9063, 26, 12505, 3803, 8679, 9063, 28, 12505, 3803, 8679, 9063, 30, 12505, 3803, 8679, 9063, 32, 12505, 3803, 8679, 9063, 34, 12505, 3803, 8679, 9063, 36, 12505, 3803, 8679, 9063, 38, 12505, 3803, 8679, 9063, 40, 12505, 3803, 8679, 9063, 42, 12505, 3803, 8679, 9063, 44, 12505, 3803, 8679, 9063, 46, 12505, 3803, 8679, 9063, 48, 12505, 3803, 8679, 9063, 50, 12505, 3803, 9063, 0, 12505, 3803, 9063, 2, 12505, 3803, 9063, 4, 12505, 3803, 9063, 6, 12505, 3803, 9063, 8, 12505, 3803, 9063, 10, 12505, 3803, 9063, 12, 12505, 3803, 9063, 14, 12505, 3803, 9063, 16, 12505, 3803, 9063, 18, 12505, 3803, 9063, 20, 12505, 3803, 9063, 22, 12505, 3803, 9063, 24, 12505, 3803, 9063, 26, 12505, 3803, 9063, 28, 12505, 3803, 9063, 30, 12505, 3803, 9063, 32, 12505, 3803, 9063, 34, 12505, 3803, 9063, 36, 12505, 3803, 9063, 38, 12505, 3803, 9063, 40, 12505, 3803, 9063, 42, 12505, 3803, 9063, 44, 12505, 3803, 9063, 46, 12505, 3803, 9063, 48, 12505, 3803, 9063, 50, 12505, 3803, 9063, 384, 12505, 3803, 9063, 416, 12505, 3803, 9063, 476, 12505, 3803, 9063, 644, 12505, 3803, 9063, 888, 12505, 3803, 9063, 1128, 12505, 3803, 9063, 2216, 12505, 3803, 9063, 2250, 12505, 3803, 9063, 2412, 12505, 3803, 9063, 2658, 12505, 3803, 9063, 3774, 12505, 3803, 9063, 4614, 12505, 3803, 9063, 6262, 12505, 3803, 9063, 6406, 12505, 3803, 9063, 6674, 12505, 3803, 9063, 6824, 12505, 3803, 9063, 7022, 12505, 3803, 9063, 7080, 12505, 3803, 9063, 7316, 12505, 3803, 9063, 7568, 12505, 3803, 9063, 7682, 12505, 3803, 9063, 7683, 8774, 12505, 3803, 9063, 9162, 12505, 3803, 9063, 9270, 12505, 3803, 9063, 9530, 12505, 3803, 9063, 9808, 12505, 3803, 9271, 8774, 12505, 3803, 9295, 7593, 0, 12505, 3803, 9295, 7593, 2, 12505, 3803, 9295, 7593, 4, 12505, 3803, 9295, 7593, 6, 12505, 3803, 9295, 7593, 8, 12505, 3803, 9295, 7593, 10, 12505, 3803, 9295, 7593, 12, 12505, 3803, 9295, 7593, 14, 12505, 3803, 9295, 7593, 16, 12505, 3803, 9295, 7593, 18, 12505, 3803, 9295, 7593, 20, 12505, 3803, 9295, 7593, 22, 12505, 3803, 9295, 7593, 24, 12505, 3803, 9295, 7593, 26, 12505, 3803, 9295, 7593, 28, 12505, 3803, 9295, 7593, 30, 12505, 3803, 9295, 7593, 32, 12505, 3803, 9295, 7593, 34, 12505, 3803, 9295, 7593, 36, 12505, 3803, 9295, 7593, 38, 12505, 3803, 9295, 7593, 40, 12505, 3803, 9295, 7593, 42, 12505, 3803, 9295, 7593, 44, 12505, 3803, 9295, 7593, 46, 12505, 3803, 9295, 7593, 48, 12505, 3803, 9295, 7593, 50, 12505, 3803, 9295, 9063, 0, 12505, 3803, 9295, 9063, 2, 12505, 3803, 9295, 9063, 4, 12505, 3803, 9295, 9063, 6, 12505, 3803, 9295, 9063, 8, 12505, 3803, 9295, 9063, 10, 12505, 3803, 9295, 9063, 12, 12505, 3803, 9295, 9063, 14, 12505, 3803, 9295, 9063, 16, 12505, 3803, 9295, 9063, 18, 12505, 3803, 9295, 9063, 20, 12505, 3803, 9295, 9063, 22, 12505, 3803, 9295, 9063, 24, 12505, 3803, 9295, 9063, 26, 12505, 3803, 9295, 9063, 28, 12505, 3803, 9295, 9063, 30, 12505, 3803, 9295, 9063, 32, 12505, 3803, 9295, 9063, 34, 12505, 3803, 9295, 9063, 36, 12505, 3803, 9295, 9063, 38, 12505, 3803, 9295, 9063, 40, 12505, 3803, 9295, 9063, 42, 12505, 3803, 9295, 9063, 44, 12505, 3803, 9295, 9063, 46, 12505, 3803, 9295, 9063, 48, 12505, 3803, 9295, 9063, 50, 12505, 3803, 9573, 12432, 12505, 4849, 6409, 9050, 12505, 4849, 7821, 8745, 9050, 12505, 4849, 7821, 10637, 7533, 9050, 12505, 4849, 8153, 6409, 9050, 12505, 4849, 10997, 12114, 12505, 7443, 6409, 9050, 12505, 7443, 7821, 8745, 9050, 12505, 7443, 7821, 10637, 7533, 9050, 12505, 7443, 8153, 6409, 9050, 12505, 7443, 10997, 12114, 12505, 8325, 477, 8774, 12505, 8325, 2217, 8774, 12505, 8325, 2413, 8774, 12505, 8325, 7023, 8774, 12505, 8325, 7202, 12505, 8325, 7593, 0, 12505, 8325, 7593, 2, 12505, 8325, 7593, 4, 12505, 8325, 7593, 6, 12505, 8325, 7593, 8, 12505, 8325, 7593, 10, 12505, 8325, 7593, 12, 12505, 8325, 7593, 16, 12505, 8325, 7593, 18, 12505, 8325, 7593, 20, 12505, 8325, 7593, 22, 12505, 8325, 7593, 24, 12505, 8325, 7593, 26, 12505, 8325, 7593, 28, 12505, 8325, 7593, 30, 12505, 8325, 7593, 32, 12505, 8325, 7593, 34, 12505, 8325, 7593, 36, 12505, 8325, 7593, 38, 12505, 8325, 7593, 40, 12505, 8325, 7593, 42, 12505, 8325, 7593, 44, 12505, 8325, 7593, 46, 12505, 8325, 7593, 48, 12505, 8325, 7593, 50, 12505, 8325, 7593, 384, 12505, 8325, 7593, 416, 12505, 8325, 7593, 476, 12505, 8325, 7593, 644, 12505, 8325, 7593, 888, 12505, 8325, 7593, 1128, 12505, 8325, 7593, 2216, 12505, 8325, 7593, 2250, 12505, 8325, 7593, 2412, 12505, 8325, 7593, 2658, 12505, 8325, 7593, 3774, 12505, 8325, 7593, 4614, 12505, 8325, 7593, 6262, 12505, 8325, 7593, 6406, 12505, 8325, 7593, 6674, 12505, 8325, 7593, 6789, 7568, 12505, 8325, 7593, 6824, 12505, 8325, 7593, 7022, 12505, 8325, 7593, 7080, 12505, 8325, 7593, 7316, 12505, 8325, 7593, 7568, 12505, 8325, 7593, 7682, 12505, 8325, 7593, 9185, 16, 12505, 8325, 7593, 9185, 18, 12505, 8325, 7593, 9270, 12505, 8325, 7593, 9530, 12505, 8325, 7593, 9808, 12505, 8325, 7683, 8774, 12505, 8325, 9063, 0, 12505, 8325, 9063, 2, 12505, 8325, 9063, 4, 12505, 8325, 9063, 6, 12505, 8325, 9063, 8, 12505, 8325, 9063, 10, 12505, 8325, 9063, 12, 12505, 8325, 9063, 14, 12505, 8325, 9063, 16, 12505, 8325, 9063, 18, 12505, 8325, 9063, 20, 12505, 8325, 9063, 22, 12505, 8325, 9063, 24, 12505, 8325, 9063, 26, 12505, 8325, 9063, 28, 12505, 8325, 9063, 30, 12505, 8325, 9063, 32, 12505, 8325, 9063, 34, 12505, 8325, 9063, 36, 12505, 8325, 9063, 38, 12505, 8325, 9063, 40, 12505, 8325, 9063, 42, 12505, 8325, 9063, 44, 12505, 8325, 9063, 46, 12505, 8325, 9063, 48, 12505, 8325, 9063, 50, 12505, 8325, 9063, 384, 12505, 8325, 9063, 416, 12505, 8325, 9063, 476, 12505, 8325, 9063, 644, 12505, 8325, 9063, 888, 12505, 8325, 9063, 1128, 12505, 8325, 9063, 2216, 12505, 8325, 9063, 2250, 12505, 8325, 9063, 2412, 12505, 8325, 9063, 2658, 12505, 8325, 9063, 3774, 12505, 8325, 9063, 4614, 12505, 8325, 9063, 6262, 12505, 8325, 9063, 6406, 12505, 8325, 9063, 6674, 12505, 8325, 9063, 6824, 12505, 8325, 9063, 7022, 12505, 8325, 9063, 7080, 12505, 8325, 9063, 7316, 12505, 8325, 9063, 7568, 12505, 8325, 9063, 7682, 12505, 8325, 9063, 7683, 8774, 12505, 8325, 9063, 9270, 12505, 8325, 9063, 9530, 12505, 8325, 9063, 9808, 12505, 8325, 9271, 8774, 12505, 8325, 9573, 12432, 12505, 8679, 7593, 0, 12505, 8679, 7593, 2, 12505, 8679, 7593, 4, 12505, 8679, 7593, 6, 12505, 8679, 7593, 10, 12505, 8679, 7593, 14, 12505, 8679, 7593, 16, 12505, 8679, 7593, 18, 12505, 8679, 7593, 20, 12505, 8679, 7593, 22, 12505, 8679, 7593, 24, 12505, 8679, 7593, 26, 12505, 8679, 7593, 30, 12505, 8679, 7593, 32, 12505, 8679, 7593, 34, 12505, 8679, 7593, 36, 12505, 8679, 7593, 38, 12505, 8679, 7593, 40, 12505, 8679, 7593, 42, 12505, 8679, 7593, 44, 12505, 8679, 7593, 46, 12505, 8679, 7593, 48, 12505, 8679, 7593, 50, 12505, 8679, 9063, 0, 12505, 8679, 9063, 4, 12505, 8679, 9063, 6, 12505, 8679, 9063, 12, 12505, 8679, 9063, 18, 12505, 8679, 9063, 20, 12505, 8679, 9063, 26, 12505, 8679, 9063, 28, 12505, 8679, 9063, 30, 12505, 8679, 9063, 32, 12505, 8679, 9063, 36, 12505, 8679, 9063, 38, 12505, 8679, 9063, 40, 12505, 8679, 9063, 42, 12505, 8679, 9063, 44, 12505, 8679, 9063, 46, 12505, 8679, 9063, 48, 12505, 8679, 9063, 50, 12505, 9295, 7593, 0, 12505, 9295, 7593, 2, 12505, 9295, 7593, 4, 12505, 9295, 7593, 6, 12505, 9295, 7593, 8, 12505, 9295, 7593, 10, 12505, 9295, 7593, 12, 12505, 9295, 7593, 14, 12505, 9295, 7593, 16, 12505, 9295, 7593, 18, 12505, 9295, 7593, 20, 12505, 9295, 7593, 22, 12505, 9295, 7593, 24, 12505, 9295, 7593, 26, 12505, 9295, 7593, 28, 12505, 9295, 7593, 30, 12505, 9295, 7593, 32, 12505, 9295, 7593, 34, 12505, 9295, 7593, 36, 12505, 9295, 7593, 38, 12505, 9295, 7593, 40, 12505, 9295, 7593, 42, 12505, 9295, 7593, 44, 12505, 9295, 7593, 46, 12505, 9295, 7593, 48, 12505, 9295, 7593, 50, 12505, 9295, 9063, 0, 12505, 9295, 9063, 2, 12505, 9295, 9063, 6, 12505, 9295, 9063, 8, 12505, 9295, 9063, 10, 12505, 9295, 9063, 12, 12505, 9295, 9063, 18, 12505, 9295, 9063, 20, 12505, 9295, 9063, 22, 12505, 9295, 9063, 24, 12505, 9295, 9063, 26, 12505, 9295, 9063, 28, 12505, 9295, 9063, 30, 12505, 9295, 9063, 32, 12505, 9295, 9063, 36, 12505, 9295, 9063, 38, 12505, 9295, 9063, 40, 12505, 9295, 9063, 42, 12505, 9295, 9063, 44, 12505, 9295, 9063, 46, 12505, 9295, 9063, 48, 12505, 11129, 6689, 2170, 12505, 11129, 6689, 2540, 12505, 11129, 6689, 2778, 12505, 11129, 6689, 4200, 12505, 11129, 6689, 4214, 12505, 11129, 6689, 5190, 12505, 11129, 6689, 6260, 12505, 11129, 6689, 6722, 12505, 11129, 6689, 7508, 12505, 11129, 6689, 7694, 12505, 11129, 7593, 0, 12505, 11129, 7593, 2, 12505, 11129, 7593, 4, 12505, 11129, 7593, 6, 12505, 11129, 7593, 8, 12505, 11129, 7593, 10, 12505, 11129, 7593, 12, 12505, 11129, 7593, 14, 12505, 11129, 7593, 16, 12505, 11129, 7593, 18, 12505, 11129, 7593, 20, 12505, 11129, 7593, 22, 12505, 11129, 7593, 24, 12505, 11129, 7593, 26, 12505, 11129, 7593, 28, 12505, 11129, 7593, 30, 12505, 11129, 7593, 32, 12505, 11129, 7593, 34, 12505, 11129, 7593, 36, 12505, 11129, 7593, 38, 12505, 11129, 7593, 40, 12505, 11129, 7593, 42, 12505, 11129, 7593, 44, 12505, 11129, 7593, 46, 12505, 11129, 7593, 48, 12505, 11129, 7593, 50, 12505, 11129, 9063, 0, 12505, 11129, 9063, 2, 12505, 11129, 9063, 4, 12505, 11129, 9063, 6, 12505, 11129, 9063, 8, 12505, 11129, 9063, 10, 12505, 11129, 9063, 12, 12505, 11129, 9063, 14, 12505, 11129, 9063, 16, 12505, 11129, 9063, 18, 12505, 11129, 9063, 20, 12505, 11129, 9063, 22, 12505, 11129, 9063, 24, 12505, 11129, 9063, 26, 12505, 11129, 9063, 28, 12505, 11129, 9063, 30, 12505, 11129, 9063, 32, 12505, 11129, 9063, 34, 12505, 11129, 9063, 36, 12505, 11129, 9063, 38, 12505, 11129, 9063, 40, 12505, 11129, 9063, 42, 12505, 11129, 9063, 44, 12505, 11129, 9063, 46, 12505, 11129, 9063, 48, 12505, 11129, 9063, 50, 12505, 11767, 3803, 477, 8774, 12505, 11767, 3803, 2217, 8774, 12505, 11767, 3803, 2413, 8774, 12505, 11767, 3803, 6689, 2170, 12505, 11767, 3803, 6689, 2540, 12505, 11767, 3803, 6689, 2778, 12505, 11767, 3803, 6689, 4200, 12505, 11767, 3803, 6689, 4214, 12505, 11767, 3803, 6689, 5190, 12505, 11767, 3803, 6689, 6260, 12505, 11767, 3803, 6689, 6722, 12505, 11767, 3803, 6689, 7508, 12505, 11767, 3803, 6689, 7694, 12505, 11767, 3803, 7023, 8774, 12505, 11767, 3803, 7202, 12505, 11767, 3803, 7593, 0, 12505, 11767, 3803, 7593, 2, 12505, 11767, 3803, 7593, 4, 12505, 11767, 3803, 7593, 6, 12505, 11767, 3803, 7593, 8, 12505, 11767, 3803, 7593, 10, 12505, 11767, 3803, 7593, 12, 12505, 11767, 3803, 7593, 14, 12505, 11767, 3803, 7593, 16, 12505, 11767, 3803, 7593, 18, 12505, 11767, 3803, 7593, 20, 12505, 11767, 3803, 7593, 22, 12505, 11767, 3803, 7593, 24, 12505, 11767, 3803, 7593, 26, 12505, 11767, 3803, 7593, 28, 12505, 11767, 3803, 7593, 30, 12505, 11767, 3803, 7593, 32, 12505, 11767, 3803, 7593, 34, 12505, 11767, 3803, 7593, 36, 12505, 11767, 3803, 7593, 38, 12505, 11767, 3803, 7593, 40, 12505, 11767, 3803, 7593, 42, 12505, 11767, 3803, 7593, 44, 12505, 11767, 3803, 7593, 46, 12505, 11767, 3803, 7593, 48, 12505, 11767, 3803, 7593, 50, 12505, 11767, 3803, 7593, 384, 12505, 11767, 3803, 7593, 416, 12505, 11767, 3803, 7593, 476, 12505, 11767, 3803, 7593, 644, 12505, 11767, 3803, 7593, 888, 12505, 11767, 3803, 7593, 1128, 12505, 11767, 3803, 7593, 2216, 12505, 11767, 3803, 7593, 2250, 12505, 11767, 3803, 7593, 2412, 12505, 11767, 3803, 7593, 2658, 12505, 11767, 3803, 7593, 3774, 12505, 11767, 3803, 7593, 4614, 12505, 11767, 3803, 7593, 6262, 12505, 11767, 3803, 7593, 6406, 12505, 11767, 3803, 7593, 6674, 12505, 11767, 3803, 7593, 6789, 7568, 12505, 11767, 3803, 7593, 6824, 12505, 11767, 3803, 7593, 7022, 12505, 11767, 3803, 7593, 7080, 12505, 11767, 3803, 7593, 7316, 12505, 11767, 3803, 7593, 7568, 12505, 11767, 3803, 7593, 7682, 12505, 11767, 3803, 7593, 9270, 12505, 11767, 3803, 7593, 9530, 12505, 11767, 3803, 7593, 9808, 12505, 11767, 3803, 7683, 8774, 12505, 11767, 3803, 8325, 477, 8774, 12505, 11767, 3803, 8325, 2217, 8774, 12505, 11767, 3803, 8325, 2413, 8774, 12505, 11767, 3803, 8325, 7023, 8774, 12505, 11767, 3803, 8325, 7202, 12505, 11767, 3803, 8325, 7593, 0, 12505, 11767, 3803, 8325, 7593, 2, 12505, 11767, 3803, 8325, 7593, 4, 12505, 11767, 3803, 8325, 7593, 6, 12505, 11767, 3803, 8325, 7593, 8, 12505, 11767, 3803, 8325, 7593, 10, 12505, 11767, 3803, 8325, 7593, 12, 12505, 11767, 3803, 8325, 7593, 14, 12505, 11767, 3803, 8325, 7593, 16, 12505, 11767, 3803, 8325, 7593, 18, 12505, 11767, 3803, 8325, 7593, 20, 12505, 11767, 3803, 8325, 7593, 22, 12505, 11767, 3803, 8325, 7593, 24, 12505, 11767, 3803, 8325, 7593, 26, 12505, 11767, 3803, 8325, 7593, 28, 12505, 11767, 3803, 8325, 7593, 30, 12505, 11767, 3803, 8325, 7593, 32, 12505, 11767, 3803, 8325, 7593, 34, 12505, 11767, 3803, 8325, 7593, 36, 12505, 11767, 3803, 8325, 7593, 38, 12505, 11767, 3803, 8325, 7593, 40, 12505, 11767, 3803, 8325, 7593, 42, 12505, 11767, 3803, 8325, 7593, 44, 12505, 11767, 3803, 8325, 7593, 46, 12505, 11767, 3803, 8325, 7593, 48, 12505, 11767, 3803, 8325, 7593, 50, 12505, 11767, 3803, 8325, 7593, 384, 12505, 11767, 3803, 8325, 7593, 416, 12505, 11767, 3803, 8325, 7593, 476, 12505, 11767, 3803, 8325, 7593, 644, 12505, 11767, 3803, 8325, 7593, 888, 12505, 11767, 3803, 8325, 7593, 1128, 12505, 11767, 3803, 8325, 7593, 2216, 12505, 11767, 3803, 8325, 7593, 2250, 12505, 11767, 3803, 8325, 7593, 2412, 12505, 11767, 3803, 8325, 7593, 2658, 12505, 11767, 3803, 8325, 7593, 3774, 12505, 11767, 3803, 8325, 7593, 4614, 12505, 11767, 3803, 8325, 7593, 6262, 12505, 11767, 3803, 8325, 7593, 6406, 12505, 11767, 3803, 8325, 7593, 6674, 12505, 11767, 3803, 8325, 7593, 6789, 7568, 12505, 11767, 3803, 8325, 7593, 6824, 12505, 11767, 3803, 8325, 7593, 7022, 12505, 11767, 3803, 8325, 7593, 7080, 12505, 11767, 3803, 8325, 7593, 7316, 12505, 11767, 3803, 8325, 7593, 7568, 12505, 11767, 3803, 8325, 7593, 7682, 12505, 11767, 3803, 8325, 7593, 9270, 12505, 11767, 3803, 8325, 7593, 9530, 12505, 11767, 3803, 8325, 7593, 9808, 12505, 11767, 3803, 8325, 7683, 8774, 12505, 11767, 3803, 8325, 9063, 0, 12505, 11767, 3803, 8325, 9063, 2, 12505, 11767, 3803, 8325, 9063, 4, 12505, 11767, 3803, 8325, 9063, 6, 12505, 11767, 3803, 8325, 9063, 8, 12505, 11767, 3803, 8325, 9063, 10, 12505, 11767, 3803, 8325, 9063, 12, 12505, 11767, 3803, 8325, 9063, 14, 12505, 11767, 3803, 8325, 9063, 16, 12505, 11767, 3803, 8325, 9063, 18, 12505, 11767, 3803, 8325, 9063, 20, 12505, 11767, 3803, 8325, 9063, 22, 12505, 11767, 3803, 8325, 9063, 24, 12505, 11767, 3803, 8325, 9063, 26, 12505, 11767, 3803, 8325, 9063, 28, 12505, 11767, 3803, 8325, 9063, 30, 12505, 11767, 3803, 8325, 9063, 32, 12505, 11767, 3803, 8325, 9063, 34, 12505, 11767, 3803, 8325, 9063, 36, 12505, 11767, 3803, 8325, 9063, 38, 12505, 11767, 3803, 8325, 9063, 40, 12505, 11767, 3803, 8325, 9063, 42, 12505, 11767, 3803, 8325, 9063, 44, 12505, 11767, 3803, 8325, 9063, 46, 12505, 11767, 3803, 8325, 9063, 48, 12505, 11767, 3803, 8325, 9063, 50, 12505, 11767, 3803, 8325, 9063, 384, 12505, 11767, 3803, 8325, 9063, 416, 12505, 11767, 3803, 8325, 9063, 476, 12505, 11767, 3803, 8325, 9063, 644, 12505, 11767, 3803, 8325, 9063, 888, 12505, 11767, 3803, 8325, 9063, 1128, 12505, 11767, 3803, 8325, 9063, 2216, 12505, 11767, 3803, 8325, 9063, 2250, 12505, 11767, 3803, 8325, 9063, 2412, 12505, 11767, 3803, 8325, 9063, 2658, 12505, 11767, 3803, 8325, 9063, 3774, 12505, 11767, 3803, 8325, 9063, 4614, 12505, 11767, 3803, 8325, 9063, 6262, 12505, 11767, 3803, 8325, 9063, 6406, 12505, 11767, 3803, 8325, 9063, 6674, 12505, 11767, 3803, 8325, 9063, 6824, 12505, 11767, 3803, 8325, 9063, 7022, 12505, 11767, 3803, 8325, 9063, 7080, 12505, 11767, 3803, 8325, 9063, 7316, 12505, 11767, 3803, 8325, 9063, 7568, 12505, 11767, 3803, 8325, 9063, 7682, 12505, 11767, 3803, 8325, 9063, 7683, 8774, 12505, 11767, 3803, 8325, 9063, 9270, 12505, 11767, 3803, 8325, 9063, 9530, 12505, 11767, 3803, 8325, 9063, 9808, 12505, 11767, 3803, 8325, 9271, 8774, 12505, 11767, 3803, 8325, 9573, 12432, 12505, 11767, 3803, 9063, 0, 12505, 11767, 3803, 9063, 2, 12505, 11767, 3803, 9063, 4, 12505, 11767, 3803, 9063, 6, 12505, 11767, 3803, 9063, 8, 12505, 11767, 3803, 9063, 10, 12505, 11767, 3803, 9063, 12, 12505, 11767, 3803, 9063, 14, 12505, 11767, 3803, 9063, 16, 12505, 11767, 3803, 9063, 18, 12505, 11767, 3803, 9063, 20, 12505, 11767, 3803, 9063, 22, 12505, 11767, 3803, 9063, 24, 12505, 11767, 3803, 9063, 26, 12505, 11767, 3803, 9063, 28, 12505, 11767, 3803, 9063, 30, 12505, 11767, 3803, 9063, 32, 12505, 11767, 3803, 9063, 34, 12505, 11767, 3803, 9063, 36, 12505, 11767, 3803, 9063, 38, 12505, 11767, 3803, 9063, 40, 12505, 11767, 3803, 9063, 42, 12505, 11767, 3803, 9063, 44, 12505, 11767, 3803, 9063, 46, 12505, 11767, 3803, 9063, 48, 12505, 11767, 3803, 9063, 50, 12505, 11767, 3803, 9063, 384, 12505, 11767, 3803, 9063, 416, 12505, 11767, 3803, 9063, 476, 12505, 11767, 3803, 9063, 644, 12505, 11767, 3803, 9063, 888, 12505, 11767, 3803, 9063, 1128, 12505, 11767, 3803, 9063, 2216, 12505, 11767, 3803, 9063, 2250, 12505, 11767, 3803, 9063, 2412, 12505, 11767, 3803, 9063, 2658, 12505, 11767, 3803, 9063, 3774, 12505, 11767, 3803, 9063, 4614, 12505, 11767, 3803, 9063, 6262, 12505, 11767, 3803, 9063, 6406, 12505, 11767, 3803, 9063, 6674, 12505, 11767, 3803, 9063, 6824, 12505, 11767, 3803, 9063, 7022, 12505, 11767, 3803, 9063, 7080, 12505, 11767, 3803, 9063, 7316, 12505, 11767, 3803, 9063, 7568, 12505, 11767, 3803, 9063, 7682, 12505, 11767, 3803, 9063, 7683, 8774, 12505, 11767, 3803, 9063, 9270, 12505, 11767, 3803, 9063, 9530, 12505, 11767, 3803, 9063, 9808, 12505, 11767, 3803, 9271, 8774, 12505, 11767, 3803, 9573, 12432, 12505, 11767, 6689, 2170, 12505, 11767, 6689, 2540, 12505, 11767, 6689, 2778, 12505, 11767, 6689, 4200, 12505, 11767, 6689, 4214, 12505, 11767, 6689, 5190, 12505, 11767, 6689, 6260, 12505, 11767, 6689, 6722, 12505, 11767, 6689, 7508, 12505, 11767, 6689, 7694, 12505, 11767, 7593, 0, 12505, 11767, 7593, 2, 12505, 11767, 7593, 4, 12505, 11767, 7593, 6, 12505, 11767, 7593, 8, 12505, 11767, 7593, 10, 12505, 11767, 7593, 12, 12505, 11767, 7593, 14, 12505, 11767, 7593, 16, 12505, 11767, 7593, 18, 12505, 11767, 7593, 20, 12505, 11767, 7593, 22, 12505, 11767, 7593, 24, 12505, 11767, 7593, 26, 12505, 11767, 7593, 28, 12505, 11767, 7593, 30, 12505, 11767, 7593, 32, 12505, 11767, 7593, 34, 12505, 11767, 7593, 36, 12505, 11767, 7593, 38, 12505, 11767, 7593, 40, 12505, 11767, 7593, 42, 12505, 11767, 7593, 44, 12505, 11767, 7593, 46, 12505, 11767, 7593, 48, 12505, 11767, 7593, 50, 12505, 11767, 8325, 7593, 0, 12505, 11767, 8325, 7593, 2, 12505, 11767, 8325, 7593, 4, 12505, 11767, 8325, 7593, 6, 12505, 11767, 8325, 7593, 8, 12505, 11767, 8325, 7593, 10, 12505, 11767, 8325, 7593, 12, 12505, 11767, 8325, 7593, 14, 12505, 11767, 8325, 7593, 16, 12505, 11767, 8325, 7593, 18, 12505, 11767, 8325, 7593, 20, 12505, 11767, 8325, 7593, 22, 12505, 11767, 8325, 7593, 24, 12505, 11767, 8325, 7593, 26, 12505, 11767, 8325, 7593, 28, 12505, 11767, 8325, 7593, 30, 12505, 11767, 8325, 7593, 32, 12505, 11767, 8325, 7593, 34, 12505, 11767, 8325, 7593, 36, 12505, 11767, 8325, 7593, 38, 12505, 11767, 8325, 7593, 40, 12505, 11767, 8325, 7593, 42, 12505, 11767, 8325, 7593, 44, 12505, 11767, 8325, 7593, 46, 12505, 11767, 8325, 7593, 48, 12505, 11767, 8325, 7593, 50, 12505, 11767, 8325, 9063, 0, 12505, 11767, 8325, 9063, 2, 12505, 11767, 8325, 9063, 4, 12505, 11767, 8325, 9063, 6, 12505, 11767, 8325, 9063, 8, 12505, 11767, 8325, 9063, 10, 12505, 11767, 8325, 9063, 12, 12505, 11767, 8325, 9063, 14, 12505, 11767, 8325, 9063, 16, 12505, 11767, 8325, 9063, 18, 12505, 11767, 8325, 9063, 20, 12505, 11767, 8325, 9063, 22, 12505, 11767, 8325, 9063, 24, 12505, 11767, 8325, 9063, 26, 12505, 11767, 8325, 9063, 28, 12505, 11767, 8325, 9063, 30, 12505, 11767, 8325, 9063, 32, 12505, 11767, 8325, 9063, 34, 12505, 11767, 8325, 9063, 36, 12505, 11767, 8325, 9063, 38, 12505, 11767, 8325, 9063, 40, 12505, 11767, 8325, 9063, 42, 12505, 11767, 8325, 9063, 44, 12505, 11767, 8325, 9063, 46, 12505, 11767, 8325, 9063, 48, 12505, 11767, 8325, 9063, 50, 12505, 11767, 9063, 0, 12505, 11767, 9063, 2, 12505, 11767, 9063, 4, 12505, 11767, 9063, 6, 12505, 11767, 9063, 8, 12505, 11767, 9063, 10, 12505, 11767, 9063, 12, 12505, 11767, 9063, 14, 12505, 11767, 9063, 16, 12505, 11767, 9063, 18, 12505, 11767, 9063, 20, 12505, 11767, 9063, 22, 12505, 11767, 9063, 24, 12505, 11767, 9063, 26, 12505, 11767, 9063, 28, 12505, 11767, 9063, 30, 12505, 11767, 9063, 32, 12505, 11767, 9063, 34, 12505, 11767, 9063, 36, 12505, 11767, 9063, 38, 12505, 11767, 9063, 40, 12505, 11767, 9063, 42, 12505, 11767, 9063, 44, 12505, 11767, 9063, 46, 12505, 11767, 9063, 48, 12505, 11767, 9063, 50, 12505, 12929, 6689, 2170, 12505, 12929, 6689, 2540, 12505, 12929, 6689, 2778, 12505, 12929, 6689, 4200, 12505, 12929, 6689, 4214, 12505, 12929, 6689, 5190, 12505, 12929, 6689, 6260, 12505, 12929, 6689, 6722, 12505, 12929, 6689, 7508, 12505, 12929, 6689, 7694, 12505, 12929, 7593, 0, 12505, 12929, 7593, 2, 12505, 12929, 7593, 4, 12505, 12929, 7593, 6, 12505, 12929, 7593, 8, 12505, 12929, 7593, 10, 12505, 12929, 7593, 12, 12505, 12929, 7593, 14, 12505, 12929, 7593, 16, 12505, 12929, 7593, 18, 12505, 12929, 7593, 20, 12505, 12929, 7593, 22, 12505, 12929, 7593, 24, 12505, 12929, 7593, 26, 12505, 12929, 7593, 28, 12505, 12929, 7593, 30, 12505, 12929, 7593, 32, 12505, 12929, 7593, 34, 12505, 12929, 7593, 36, 12505, 12929, 7593, 38, 12505, 12929, 7593, 40, 12505, 12929, 7593, 42, 12505, 12929, 7593, 44, 12505, 12929, 7593, 46, 12505, 12929, 7593, 48, 12505, 12929, 7593, 50, 12505, 12929, 9063, 0, 12505, 12929, 9063, 2, 12505, 12929, 9063, 6, 12505, 12929, 9063, 8, 12505, 12929, 9063, 10, 12505, 12929, 9063, 12, 12505, 12929, 9063, 16, 12505, 12929, 9063, 18, 12505, 12929, 9063, 20, 12505, 12929, 9063, 22, 12505, 12929, 9063, 24, 12505, 12929, 9063, 28, 12505, 12929, 9063, 36, 12505, 12929, 9063, 38, 12505, 12929, 9063, 40, 12505, 12929, 9063, 42, 12505, 12929, 9063, 44, 12505, 12929, 9063, 46, 12505, 12929, 9063, 48, 12517, 8306, 12525, 5882, 12527, 4213, 1177, 10677, 175, 3992, 12527, 4213, 1177, 10677, 177, 3992, 12527, 4213, 1177, 10677, 1809, 4876, 12527, 4213, 1177, 10677, 2779, 1045, 8392, 12527, 4213, 1177, 10677, 4849, 6409, 9050, 12527, 4213, 1177, 10677, 4849, 6505, 11677, 9050, 12527, 4213, 1177, 10677, 4849, 6627, 9050, 12527, 4213, 1177, 10677, 4849, 7821, 8077, 9050, 12527, 4213, 1177, 10677, 4849, 7821, 11677, 9050, 12527, 4213, 1177, 10677, 4849, 8077, 9050, 12527, 4213, 1177, 10677, 4849, 8153, 6409, 9050, 12527, 4213, 1177, 10677, 4849, 8745, 9050, 12527, 4213, 1177, 10677, 4849, 10637, 7533, 9050, 12527, 4213, 1177, 10677, 4849, 12114, 12527, 4213, 1177, 10677, 6107, 1809, 4876, 12527, 4213, 1177, 10677, 6610, 12527, 4213, 1177, 10677, 6616, 12527, 4213, 1177, 10677, 7443, 6409, 9050, 12527, 4213, 1177, 10677, 7443, 6505, 11677, 9050, 12527, 4213, 1177, 10677, 7443, 6627, 9050, 12527, 4213, 1177, 10677, 7443, 7821, 8077, 9050, 12527, 4213, 1177, 10677, 7443, 7821, 11677, 9054, 12527, 4213, 1177, 10677, 7443, 8077, 9050, 12527, 4213, 1177, 10677, 7443, 8153, 6409, 9050, 12527, 4213, 1177, 10677, 7443, 8745, 9050, 12527, 4213, 1177, 10677, 7443, 10637, 7533, 9050, 12527, 4213, 1177, 10677, 7443, 12114, 12527, 4213, 1177, 10677, 10469, 4926, 12527, 4213, 1177, 10677, 11224, 12527, 4213, 1177, 10677, 11649, 10154, 12527, 4213, 1177, 10677, 12017, 4926, 12527, 4213, 1177, 10677, 12043, 4223, 5836, 12527, 4213, 1177, 10677, 12043, 6616, 12529, 568, 12537, 7821, 11765, 6434, 12540, 12874, 12881, 7608, 12882, 12895, 11765, 6434, 12901, 2725, 11791, 6434, 12901, 5385, 8057, 6434, 12901, 8065, 8057, 6434, 12901, 8241, 8057, 6434, 12901, 9115, 10260, 12901, 12056, 12903, 835, 2091, 9855, 6741, 568, 12903, 6741, 445, 6741, 568, 12903, 6741, 568, 12903, 6741, 569, 445, 2681, 6989, 428, 12925, 11385, 8774, 12929, 7201, 11262, 12929, 7593, 476, 12929, 7593, 6824, 12929, 8325, 7593, 6, 12929, 8325, 7593, 8, 12929, 8325, 7593, 16, 12929, 8325, 7593, 18, 12929, 8325, 9063, 6, 12929, 9063, 4, 12929, 9063, 14, 12929, 9063, 26, 12929, 9063, 30, 12929, 9063, 32, 12929, 9063, 34, 12929, 9063, 50, 12929, 9063, 476, 12929, 9063, 6824, 12931, 10643, 6121, 4849, 4389, 6504, 12931, 10643, 6121, 7443, 4389, 6504, 12939, 5758, 12941, 6741, 568, 12941, 11621, 568, 12967, 6409, 9050, 12967, 8083, 6409, 9050, 12967, 8153, 6409, 11195, 4926, 12969, 4926, 12969, 10390, 12969, 10966, 12975, 5758, 12983, 11765, 6434, 12987, 6689, 2170, 12987, 6689, 2540, 12987, 6689, 2778, 12987, 6689, 4200, 12987, 6689, 4214, 12987, 6689, 5190, 12987, 6689, 6722, 12987, 6689, 7508, 12987, 6689, 7694, 12987, 7089, 7593, 8405, 0, 12987, 7089, 7593, 8405, 2, 12987, 7089, 7593, 8405, 4, 12987, 7089, 7593, 8405, 6, 12987, 7089, 7593, 8405, 8, 12987, 7089, 7593, 8405, 10, 12987, 7089, 7593, 8405, 12, 12987, 7089, 7593, 8405, 14, 12987, 7089, 7593, 8405, 16, 12987, 7089, 7593, 8405, 18, 12987, 7089, 7593, 8405, 20, 12987, 7089, 7593, 8405, 22, 12987, 7089, 7593, 8405, 24, 12987, 7089, 7593, 8405, 26, 12987, 7089, 7593, 8405, 28, 12987, 7089, 7593, 8405, 30, 12987, 7089, 7593, 8405, 32, 12987, 7089, 7593, 8405, 34, 12987, 7089, 7593, 8405, 36, 12987, 7089, 7593, 8405, 38, 12987, 7089, 7593, 8405, 40, 12987, 7089, 7593, 8405, 42, 12987, 7089, 7593, 8405, 44, 12987, 7089, 7593, 8405, 46, 12987, 7089, 7593, 8405, 48, 12987, 7089, 7593, 8405, 50, 12987, 8287, 5770, 12987, 8287, 5771, 0, 12987, 8287, 6594, 12987, 8287, 6595, 0, 12987, 8287, 6595, 40, 12987, 8287, 6912, 12987, 8287, 6913, 0, 12987, 8287, 6982, 12987, 8287, 6983, 0, 12987, 8287, 7166, 12987, 8287, 7167, 0, 12987, 8287, 7244, 12987, 8287, 7245, 0, 12987, 8287, 7372, 12987, 8287, 7373, 0, 12987, 8287, 7440, 12987, 8287, 7441, 0, 12987, 8287, 8362, 12987, 8287, 8363, 0, 12987, 8287, 8828, 12987, 8287, 8829, 0, 12987, 8287, 9086, 12987, 8287, 9087, 0, 12987, 8287, 9400, 12987, 8287, 9401, 0, 12987, 8287, 9588, 12987, 8287, 9589, 0, 12987, 8287, 9780, 12987, 8287, 9781, 0, 12987, 8371, 10759, 29, 250, 12987, 8371, 10759, 7310, 12987, 8525, 2670, 12987, 8525, 8162, 12987, 8525, 8874, 12987, 8525, 8876, 12987, 8525, 9286, 12987, 8525, 9700, 12987, 8525, 10150, 12987, 8525, 10200, 12987, 8525, 10360, 12987, 8525, 10622, 12987, 8525, 11232, 12987, 11043, 2170, 12987, 11043, 2540, 12987, 11043, 2586, 12987, 11043, 2670, 12987, 11043, 2778, 12987, 11043, 3842, 12987, 11043, 4194, 12987, 11043, 4200, 12987, 11043, 4214, 12987, 11043, 4396, 12987, 11043, 5012, 12987, 11043, 5046, 12987, 11043, 5190, 12987, 11043, 5540, 12987, 11043, 5650, 12987, 11043, 6122, 12987, 11043, 6716, 12987, 11043, 6722, 12987, 11043, 7072, 12987, 11043, 7146, 12987, 11043, 7428, 12987, 11043, 7508, 12987, 11043, 7640, 12987, 11043, 7646, 12987, 11043, 7694, 12987, 11043, 7812, 12987, 11043, 9714, 12987, 11043, 9724, 12987, 11043, 9862, 12987, 11043, 10180, 12987, 11043, 10484, 12987, 11043, 10992, 12987, 11043, 11208, 12987, 11043, 11266, 12987, 11043, 11612, 12987, 11043, 13050, 12990, 12991, 6121, 36, 13011, 4926, 13011, 10390, 13011, 10966, 13022, 13045, 6741, 568, 13047, 9898, 13061, 46, 13061, 5758, 13061, 5759, 275, 4849, 4389, 8056, 13061, 5759, 275, 7443, 4389, 8056, 13061, 5759, 275, 8153, 8056, 13061, 5759, 275, 10642, 13061, 5759, 6121, 1045, 6376, 13061, 5759, 6121, 10666, 13067, 6409, 9050, 13067, 8083, 6409, 9050, 13067, 8153, 6409, 11195, 4926, 13070, 13191, 7271, 4153, 6434, 13191, 7607, 4153, 6434, 13191, 11765, 6434, 13231, 11765, 6434, 13233, 9898, 13235, 11765, 6434, 13237, 11765, 6434, 13365, 8153, 8306, 13365, 8921, 7605, 4926, 13365, 11185, 7605, 4926, 13365, 12341, 7605, 4926, 13381, 8774, 13393, 7337, 8774, 13403, 8279, 8774, 13403, 8381, 8774, 13417, 8774, 13419, 8774, }; static const struct { uint16_t code; uint32_t name:24; } #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) __attribute__((__packed__)) #endif unicode_name_to_code[18242] = { { 0x2114, 0 }, { 0x29CC, 4 }, { 0x2327, 7 }, { 0x22FF, 12 }, { 0x2987, 16 }, { 0x2989, 21 }, { 0x2981, 26 }, { 0x2982, 29 }, { 0x2A65, 33 }, { 0x2988, 37 }, { 0x298A, 42 }, { 0x2A64, 47 }, { 0x2A20, 51 }, { 0x2A21, 55 }, { 0x2A1F, 59 }, { 0x2A3E, 63 }, { 0x23E6, 67 }, { 0x2014, 69 }, { 0x2001, 71 }, { 0x2003, 73 }, { 0x2013, 75 }, { 0x2000, 77 }, { 0x2002, 79 }, { 0x1C78, 81 }, { 0x1C7D, 85 }, { 0x1C51, 88 }, { 0x1C56, 92 }, { 0x1C52, 96 }, { 0x1C55, 100 }, { 0x1C54, 104 }, { 0x1C59, 108 }, { 0x1C50, 112 }, { 0x1C58, 116 }, { 0x1C57, 120 }, { 0x1C53, 124 }, { 0x1C7B, 128 }, { 0x1C5C, 131 }, { 0x1C5E, 135 }, { 0x1C5B, 139 }, { 0x1C71, 143 }, { 0x1C6F, 147 }, { 0x1C66, 151 }, { 0x1C68, 155 }, { 0x1C65, 159 }, { 0x1C5A, 163 }, { 0x1C6E, 167 }, { 0x1C64, 171 }, { 0x1C73, 175 }, { 0x1C69, 179 }, { 0x1C75, 183 }, { 0x1C77, 187 }, { 0x1C76, 191 }, { 0x1C6A, 195 }, { 0x1C6B, 199 }, { 0x1C6D, 203 }, { 0x1C61, 207 }, { 0x1C60, 211 }, { 0x1C62, 215 }, { 0x1C63, 219 }, { 0x1C5D, 223 }, { 0x1C70, 227 }, { 0x1C72, 231 }, { 0x1C67, 235 }, { 0x1C5F, 239 }, { 0x1C74, 243 }, { 0x1C6C, 247 }, { 0x1C79, 251 }, { 0x1C7C, 255 }, { 0x1C7A, 258 }, { 0x1C7F, 262 }, { 0x1C7E, 267 }, { 0x27C7, 271 }, { 0x2951, 275 }, { 0x294D, 282 }, { 0x294C, 289 }, { 0x294F, 296 }, { 0x2195, 303 }, { 0x21A8, 306 }, { 0x2B0D, 311 }, { 0x21F3, 315 }, { 0x21D5, 319 }, { 0x297E, 323 }, { 0x22A5, 326 }, { 0x27DF, 328 }, { 0x29BD, 333 }, { 0x22F0, 337 }, { 0x2303, 341 }, { 0x2324, 343 }, { 0x54BC, 349 }, { 0x54B9, 352 }, { 0x54A1, 355 }, { 0x54B3, 358 }, { 0x54C6, 361 }, { 0x5491, 364 }, { 0x5498, 367 }, { 0x54A9, 370 }, { 0x54A8, 373 }, { 0x54B8, 376 }, { 0x549D, 379 }, { 0x54B2, 382 }, { 0x54A5, 385 }, { 0x54C3, 388 }, { 0x54BE, 391 }, { 0x5494, 394 }, { 0x54A3, 397 }, { 0x5497, 400 }, { 0x54B6, 403 }, { 0x54AD, 406 }, { 0x54B5, 409 }, { 0x5492, 412 }, { 0x54BB, 415 }, { 0x549A, 418 }, { 0x549C, 421 }, { 0x549E, 424 }, { 0x54AC, 427 }, { 0x5490, 430 }, { 0x54B0, 433 }, { 0x5495, 436 }, { 0x54A0, 439 }, { 0x54B1, 442 }, { 0x54AF, 445 }, { 0x54AE, 448 }, { 0x54AB, 451 }, { 0x54A2, 454 }, { 0x54C1, 457 }, { 0x549B, 460 }, { 0x54BD, 463 }, { 0x54A4, 466 }, { 0x5496, 469 }, { 0x54A6, 472 }, { 0x5499, 475 }, { 0x54BF, 478 }, { 0x549F, 481 }, { 0x54B7, 484 }, { 0x54AA, 487 }, { 0x54C5, 490 }, { 0x5493, 493 }, { 0x54A7, 496 }, { 0x54B4, 499 }, { 0x54C0, 502 }, { 0x54C2, 505 }, { 0x54BA, 508 }, { 0x54C4, 511 }, { 0x500A, 514 }, { 0x5014, 517 }, { 0x5002, 520 }, { 0x5011, 523 }, { 0x500B, 526 }, { 0x5008, 529 }, { 0x5009, 532 }, { 0x5020, 535 }, { 0x502A, 538 }, { 0x5018, 541 }, { 0x5027, 544 }, { 0x502E, 547 }, { 0x5034, 550 }, { 0x52B8, 553 }, { 0x52C2, 556 }, { 0x52B0, 559 }, { 0x52BF, 562 }, { 0x52C6, 565 }, { 0x52CC, 568 }, { 0x5109, 571 }, { 0x5112, 574 }, { 0x5102, 577 }, { 0x510F, 580 }, { 0x5116, 583 }, { 0x5013, 586 }, { 0x50D3, 589 }, { 0x50CF, 592 }, { 0x50D6, 595 }, { 0x50DA, 598 }, { 0x50E0, 601 }, { 0x51E4, 604 }, { 0x51F0, 607 }, { 0x51DC, 610 }, { 0x51EC, 613 }, { 0x51F4, 616 }, { 0x5273, 619 }, { 0x527E, 622 }, { 0x527B, 625 }, { 0x5006, 628 }, { 0x5003, 631 }, { 0x5000, 634 }, { 0x5001, 637 }, { 0x53E2, 640 }, { 0x53EE, 643 }, { 0x53F2, 646 }, { 0x53F8, 649 }, { 0x5201, 652 }, { 0x520C, 655 }, { 0x51FA, 658 }, { 0x5208, 661 }, { 0x5210, 664 }, { 0x51C1, 667 }, { 0x51CC, 670 }, { 0x51B9, 673 }, { 0x51C9, 676 }, { 0x51D0, 679 }, { 0x51D6, 682 }, { 0x50B7, 685 }, { 0x50C2, 688 }, { 0x50B0, 691 }, { 0x50BF, 694 }, { 0x50C5, 697 }, { 0x50CB, 700 }, { 0x5185, 703 }, { 0x518F, 706 }, { 0x517F, 709 }, { 0x518C, 712 }, { 0x5193, 715 }, { 0x5012, 718 }, { 0x500F, 721 }, { 0x5010, 724 }, { 0x5041, 727 }, { 0x503A, 730 }, { 0x5048, 733 }, { 0x504C, 736 }, { 0x5052, 739 }, { 0x53FE, 742 }, { 0x540A, 745 }, { 0x540E, 748 }, { 0x5414, 751 }, { 0x53C8, 754 }, { 0x53D2, 757 }, { 0x53CF, 760 }, { 0x53D6, 763 }, { 0x53DC, 766 }, { 0x5312, 769 }, { 0x531C, 772 }, { 0x530B, 775 }, { 0x5319, 778 }, { 0x5320, 781 }, { 0x5326, 784 }, { 0x5123, 787 }, { 0x512E, 790 }, { 0x511C, 793 }, { 0x512B, 796 }, { 0x5132, 799 }, { 0x500D, 802 }, { 0x50EC, 805 }, { 0x50E4, 808 }, { 0x50F0, 811 }, { 0x50F6, 814 }, { 0x50FC, 817 }, { 0x5282, 820 }, { 0x528B, 823 }, { 0x5288, 826 }, { 0x5015, 829 }, { 0x545F, 832 }, { 0x5469, 835 }, { 0x546D, 838 }, { 0x5473, 841 }, { 0x547F, 844 }, { 0x5483, 847 }, { 0x5489, 850 }, { 0x5296, 853 }, { 0x52A0, 856 }, { 0x528F, 859 }, { 0x529D, 862 }, { 0x52A4, 865 }, { 0x52AA, 868 }, { 0x5021, 871 }, { 0x501E, 874 }, { 0x501F, 877 }, { 0x5060, 880 }, { 0x506A, 883 }, { 0x5058, 886 }, { 0x5067, 889 }, { 0x506E, 892 }, { 0x5074, 895 }, { 0x502B, 898 }, { 0x5029, 901 }, { 0x501C, 904 }, { 0x5019, 907 }, { 0x5016, 910 }, { 0x5017, 913 }, { 0x5028, 916 }, { 0x5025, 919 }, { 0x5026, 922 }, { 0x5023, 925 }, { 0x502F, 928 }, { 0x5031, 931 }, { 0x502C, 934 }, { 0x502D, 937 }, { 0x5035, 940 }, { 0x5037, 943 }, { 0x5032, 946 }, { 0x5033, 949 }, { 0x52B9, 952 }, { 0x52B6, 955 }, { 0x52B7, 958 }, { 0x52C3, 961 }, { 0x52C1, 964 }, { 0x5363, 967 }, { 0x536F, 970 }, { 0x536B, 973 }, { 0x5372, 976 }, { 0x5378, 979 }, { 0x52B4, 982 }, { 0x52B1, 985 }, { 0x52AE, 988 }, { 0x52AF, 991 }, { 0x52C0, 994 }, { 0x52BD, 997 }, { 0x52BE, 1000 }, { 0x52BB, 1003 }, { 0x52C7, 1006 }, { 0x52C9, 1009 }, { 0x52C4, 1012 }, { 0x52C5, 1015 }, { 0x52CD, 1018 }, { 0x52CF, 1021 }, { 0x52CA, 1024 }, { 0x52CB, 1027 }, { 0x510A, 1030 }, { 0x5107, 1033 }, { 0x5108, 1036 }, { 0x513F, 1039 }, { 0x5149, 1042 }, { 0x5138, 1045 }, { 0x5146, 1048 }, { 0x514D, 1051 }, { 0x5113, 1054 }, { 0x5111, 1057 }, { 0x5105, 1060 }, { 0x5103, 1063 }, { 0x5100, 1066 }, { 0x5101, 1069 }, { 0x5110, 1072 }, { 0x510D, 1075 }, { 0x510E, 1078 }, { 0x510C, 1081 }, { 0x5117, 1084 }, { 0x5119, 1087 }, { 0x5114, 1090 }, { 0x5115, 1093 }, { 0x50D4, 1096 }, { 0x50D1, 1099 }, { 0x50D2, 1102 }, { 0x50D0, 1105 }, { 0x50CD, 1108 }, { 0x50CE, 1111 }, { 0x50D7, 1114 }, { 0x50D5, 1117 }, { 0x50DB, 1120 }, { 0x50DD, 1123 }, { 0x50D8, 1126 }, { 0x50D9, 1129 }, { 0x50E1, 1132 }, { 0x50DE, 1135 }, { 0x50DF, 1138 }, { 0x51E5, 1141 }, { 0x51E2, 1144 }, { 0x51E3, 1147 }, { 0x51F1, 1150 }, { 0x51EE, 1153 }, { 0x51EF, 1156 }, { 0x521C, 1159 }, { 0x5228, 1162 }, { 0x5216, 1165 }, { 0x5224, 1168 }, { 0x522C, 1171 }, { 0x51E0, 1174 }, { 0x51DD, 1177 }, { 0x51DA, 1180 }, { 0x51DB, 1183 }, { 0x51ED, 1186 }, { 0x51EA, 1189 }, { 0x51EB, 1192 }, { 0x51E8, 1195 }, { 0x51F5, 1198 }, { 0x51F7, 1201 }, { 0x51F2, 1204 }, { 0x51F3, 1207 }, { 0x5274, 1210 }, { 0x5271, 1213 }, { 0x5272, 1216 }, { 0x527F, 1219 }, { 0x527D, 1222 }, { 0x5270, 1225 }, { 0x526E, 1228 }, { 0x51A0, 1231 }, { 0x51A9, 1234 }, { 0x5199, 1237 }, { 0x51A6, 1240 }, { 0x51AD, 1243 }, { 0x51B3, 1246 }, { 0x509A, 1249 }, { 0x5093, 1252 }, { 0x50A1, 1255 }, { 0x50A5, 1258 }, { 0x50AA, 1261 }, { 0x5172, 1264 }, { 0x517A, 1267 }, { 0x516A, 1270 }, { 0x527C, 1273 }, { 0x5279, 1276 }, { 0x527A, 1279 }, { 0x5277, 1282 }, { 0x5250, 1285 }, { 0x525B, 1288 }, { 0x5248, 1291 }, { 0x5258, 1294 }, { 0x5007, 1297 }, { 0x5004, 1300 }, { 0x5005, 1303 }, { 0x53E6, 1306 }, { 0x53E3, 1309 }, { 0x53E0, 1312 }, { 0x53E1, 1315 }, { 0x541A, 1318 }, { 0x5425, 1321 }, { 0x5429, 1324 }, { 0x542F, 1327 }, { 0x53EF, 1330 }, { 0x53EC, 1333 }, { 0x53ED, 1336 }, { 0x53EA, 1339 }, { 0x53F3, 1342 }, { 0x53F5, 1345 }, { 0x53F0, 1348 }, { 0x53F1, 1351 }, { 0x53F9, 1354 }, { 0x53FB, 1357 }, { 0x53F6, 1360 }, { 0x53F7, 1363 }, { 0x5202, 1366 }, { 0x51FF, 1369 }, { 0x5200, 1372 }, { 0x520D, 1375 }, { 0x520A, 1378 }, { 0x520B, 1381 }, { 0x51FD, 1384 }, { 0x51FB, 1387 }, { 0x51F8, 1390 }, { 0x51F9, 1393 }, { 0x5209, 1396 }, { 0x5206, 1399 }, { 0x5207, 1402 }, { 0x5204, 1405 }, { 0x5211, 1408 }, { 0x5213, 1411 }, { 0x520E, 1414 }, { 0x520F, 1417 }, { 0x51C2, 1420 }, { 0x51BF, 1423 }, { 0x51C0, 1426 }, { 0x51CD, 1429 }, { 0x51CB, 1432 }, { 0x51BD, 1435 }, { 0x51BA, 1438 }, { 0x51B7, 1441 }, { 0x51B8, 1444 }, { 0x51CA, 1447 }, { 0x51C7, 1450 }, { 0x51C8, 1453 }, { 0x51C5, 1456 }, { 0x51D1, 1459 }, { 0x51D3, 1462 }, { 0x51CE, 1465 }, { 0x51CF, 1468 }, { 0x51D7, 1471 }, { 0x51D9, 1474 }, { 0x51D4, 1477 }, { 0x51D5, 1480 }, { 0x50B8, 1483 }, { 0x50B5, 1486 }, { 0x50B6, 1489 }, { 0x50C1, 1492 }, { 0x5234, 1495 }, { 0x523E, 1498 }, { 0x523B, 1501 }, { 0x5242, 1504 }, { 0x50B3, 1507 }, { 0x50B1, 1510 }, { 0x50AE, 1513 }, { 0x50AF, 1516 }, { 0x50C0, 1519 }, { 0x50BD, 1522 }, { 0x50BE, 1525 }, { 0x50BB, 1528 }, { 0x50C6, 1531 }, { 0x50C8, 1534 }, { 0x50C3, 1537 }, { 0x50C4, 1540 }, { 0x50CC, 1543 }, { 0x50C9, 1546 }, { 0x50CA, 1549 }, { 0x5186, 1552 }, { 0x5184, 1555 }, { 0x507F, 1558 }, { 0x5078, 1561 }, { 0x5083, 1564 }, { 0x5087, 1567 }, { 0x508D, 1570 }, { 0x5159, 1573 }, { 0x5160, 1576 }, { 0x5153, 1579 }, { 0x515D, 1582 }, { 0x5164, 1585 }, { 0x5190, 1588 }, { 0x518E, 1591 }, { 0x5262, 1594 }, { 0x526C, 1597 }, { 0x5269, 1600 }, { 0x5182, 1603 }, { 0x5180, 1606 }, { 0x517D, 1609 }, { 0x517E, 1612 }, { 0x5433, 1615 }, { 0x543D, 1618 }, { 0x5440, 1621 }, { 0x5446, 1624 }, { 0x518D, 1627 }, { 0x518A, 1630 }, { 0x518B, 1633 }, { 0x5396, 1636 }, { 0x539D, 1639 }, { 0x5399, 1642 }, { 0x53A1, 1645 }, { 0x53A7, 1648 }, { 0x5188, 1651 }, { 0x5194, 1654 }, { 0x5196, 1657 }, { 0x5191, 1660 }, { 0x5192, 1663 }, { 0x544C, 1666 }, { 0x5457, 1669 }, { 0x545B, 1672 }, { 0x52F6, 1675 }, { 0x52FD, 1678 }, { 0x52EF, 1681 }, { 0x52FF, 1684 }, { 0x5305, 1687 }, { 0x5042, 1690 }, { 0x503F, 1693 }, { 0x5040, 1696 }, { 0x503D, 1699 }, { 0x503B, 1702 }, { 0x5038, 1705 }, { 0x5039, 1708 }, { 0x5049, 1711 }, { 0x5046, 1714 }, { 0x5047, 1717 }, { 0x5044, 1720 }, { 0x504D, 1723 }, { 0x504F, 1726 }, { 0x504A, 1729 }, { 0x504B, 1732 }, { 0x5053, 1735 }, { 0x5055, 1738 }, { 0x5050, 1741 }, { 0x5051, 1744 }, { 0x5402, 1747 }, { 0x53FF, 1750 }, { 0x53FC, 1753 }, { 0x53FD, 1756 }, { 0x540B, 1759 }, { 0x5408, 1762 }, { 0x5409, 1765 }, { 0x5406, 1768 }, { 0x540F, 1771 }, { 0x5411, 1774 }, { 0x540C, 1777 }, { 0x540D, 1780 }, { 0x5415, 1783 }, { 0x5417, 1786 }, { 0x5412, 1789 }, { 0x5413, 1792 }, { 0x53C9, 1795 }, { 0x53C6, 1798 }, { 0x53C7, 1801 }, { 0x53D3, 1804 }, { 0x53D1, 1807 }, { 0x53D0, 1810 }, { 0x53CD, 1813 }, { 0x53CE, 1816 }, { 0x537D, 1819 }, { 0x5386, 1822 }, { 0x5382, 1825 }, { 0x538A, 1828 }, { 0x5390, 1831 }, { 0x53CB, 1834 }, { 0x53D7, 1837 }, { 0x53D9, 1840 }, { 0x53D4, 1843 }, { 0x53D5, 1846 }, { 0x53DD, 1849 }, { 0x53DF, 1852 }, { 0x53DA, 1855 }, { 0x53DB, 1858 }, { 0x5313, 1861 }, { 0x5310, 1864 }, { 0x5311, 1867 }, { 0x531D, 1870 }, { 0x531B, 1873 }, { 0x53AD, 1876 }, { 0x53B8, 1879 }, { 0x53B4, 1882 }, { 0x53BC, 1885 }, { 0x53C2, 1888 }, { 0x530E, 1891 }, { 0x530C, 1894 }, { 0x5309, 1897 }, { 0x530A, 1900 }, { 0x531A, 1903 }, { 0x5317, 1906 }, { 0x5318, 1909 }, { 0x5333, 1912 }, { 0x533A, 1915 }, { 0x532C, 1918 }, { 0x5337, 1921 }, { 0x533E, 1924 }, { 0x5342, 1927 }, { 0x5315, 1930 }, { 0x5321, 1933 }, { 0x5323, 1936 }, { 0x531E, 1939 }, { 0x531F, 1942 }, { 0x5327, 1945 }, { 0x5329, 1948 }, { 0x5324, 1951 }, { 0x5325, 1954 }, { 0x5124, 1957 }, { 0x5121, 1960 }, { 0x5122, 1963 }, { 0x512F, 1966 }, { 0x512D, 1969 }, { 0x511F, 1972 }, { 0x511D, 1975 }, { 0x511A, 1978 }, { 0x511B, 1981 }, { 0x512C, 1984 }, { 0x5129, 1987 }, { 0x512A, 1990 }, { 0x5127, 1993 }, { 0x5133, 1996 }, { 0x5135, 1999 }, { 0x5130, 2002 }, { 0x5131, 2005 }, { 0x500E, 2008 }, { 0x500C, 2011 }, { 0x50ED, 2014 }, { 0x50EA, 2017 }, { 0x50EB, 2020 }, { 0x50F3, 2023 }, { 0x50F2, 2026 }, { 0x50E8, 2029 }, { 0x50E5, 2032 }, { 0x50E2, 2035 }, { 0x50E3, 2038 }, { 0x50F1, 2041 }, { 0x50EE, 2044 }, { 0x50EF, 2047 }, { 0x50F7, 2050 }, { 0x50F9, 2053 }, { 0x50F4, 2056 }, { 0x50F5, 2059 }, { 0x50FD, 2062 }, { 0x50FF, 2065 }, { 0x50FA, 2068 }, { 0x50FB, 2071 }, { 0x5283, 2074 }, { 0x5280, 2077 }, { 0x5281, 2080 }, { 0x528C, 2083 }, { 0x528A, 2086 }, { 0x5289, 2089 }, { 0x5287, 2092 }, { 0x5285, 2095 }, { 0x5463, 2098 }, { 0x5460, 2101 }, { 0x545D, 2104 }, { 0x545E, 2107 }, { 0x546A, 2110 }, { 0x5467, 2113 }, { 0x5468, 2116 }, { 0x5466, 2119 }, { 0x546E, 2122 }, { 0x5470, 2125 }, { 0x546B, 2128 }, { 0x546C, 2131 }, { 0x5477, 2134 }, { 0x5474, 2137 }, { 0x5471, 2140 }, { 0x5472, 2143 }, { 0x5480, 2146 }, { 0x547D, 2149 }, { 0x547E, 2152 }, { 0x547B, 2155 }, { 0x5484, 2158 }, { 0x5486, 2161 }, { 0x5481, 2164 }, { 0x5482, 2167 }, { 0x548A, 2170 }, { 0x548C, 2173 }, { 0x5487, 2176 }, { 0x5488, 2179 }, { 0x5297, 2182 }, { 0x5294, 2185 }, { 0x5295, 2188 }, { 0x52A1, 2191 }, { 0x529F, 2194 }, { 0x5348, 2197 }, { 0x5353, 2200 }, { 0x534F, 2203 }, { 0x5357, 2206 }, { 0x535D, 2209 }, { 0x5292, 2212 }, { 0x5290, 2215 }, { 0x528D, 2218 }, { 0x528E, 2221 }, { 0x529E, 2224 }, { 0x529B, 2227 }, { 0x529C, 2230 }, { 0x5299, 2233 }, { 0x52A5, 2236 }, { 0x52A7, 2239 }, { 0x52A2, 2242 }, { 0x52A3, 2245 }, { 0x52AB, 2248 }, { 0x52AD, 2251 }, { 0x52A8, 2254 }, { 0x52A9, 2257 }, { 0x52DA, 2260 }, { 0x52E0, 2263 }, { 0x52D2, 2266 }, { 0x52DD, 2269 }, { 0x52E3, 2272 }, { 0x52E9, 2275 }, { 0x5061, 2278 }, { 0x505E, 2281 }, { 0x505F, 2284 }, { 0x506B, 2287 }, { 0x5069, 2290 }, { 0x505C, 2293 }, { 0x5059, 2296 }, { 0x5056, 2299 }, { 0x5057, 2302 }, { 0x5068, 2305 }, { 0x5065, 2308 }, { 0x5066, 2311 }, { 0x5063, 2314 }, { 0x506F, 2317 }, { 0x5071, 2320 }, { 0x506C, 2323 }, { 0x506D, 2326 }, { 0x5075, 2329 }, { 0x5072, 2332 }, { 0x5073, 2335 }, { 0x501D, 2338 }, { 0x501A, 2341 }, { 0x501B, 2344 }, { 0x5024, 2347 }, { 0x5022, 2350 }, { 0x5030, 2353 }, { 0x5036, 2356 }, { 0x5364, 2359 }, { 0x5361, 2362 }, { 0x5362, 2365 }, { 0x5370, 2368 }, { 0x536D, 2371 }, { 0x536E, 2374 }, { 0x536C, 2377 }, { 0x5369, 2380 }, { 0x536A, 2383 }, { 0x5367, 2386 }, { 0x5373, 2389 }, { 0x5375, 2392 }, { 0x5371, 2395 }, { 0x5379, 2398 }, { 0x537B, 2401 }, { 0x5376, 2404 }, { 0x5377, 2407 }, { 0x52B5, 2410 }, { 0x52B2, 2413 }, { 0x52B3, 2416 }, { 0x52BC, 2419 }, { 0x52BA, 2422 }, { 0x52C8, 2425 }, { 0x52CE, 2428 }, { 0x5140, 2431 }, { 0x513D, 2434 }, { 0x513E, 2437 }, { 0x514A, 2440 }, { 0x5148, 2443 }, { 0x513B, 2446 }, { 0x5139, 2449 }, { 0x5136, 2452 }, { 0x5137, 2455 }, { 0x5147, 2458 }, { 0x5144, 2461 }, { 0x5145, 2464 }, { 0x5142, 2467 }, { 0x514E, 2470 }, { 0x5150, 2473 }, { 0x514B, 2476 }, { 0x514C, 2479 }, { 0x5106, 2482 }, { 0x5104, 2485 }, { 0x510B, 2488 }, { 0x5118, 2491 }, { 0x50DC, 2494 }, { 0x521D, 2497 }, { 0x521A, 2500 }, { 0x521B, 2503 }, { 0x5229, 2506 }, { 0x5226, 2509 }, { 0x5227, 2512 }, { 0x5218, 2515 }, { 0x5214, 2518 }, { 0x5215, 2521 }, { 0x5225, 2524 }, { 0x5222, 2527 }, { 0x5223, 2530 }, { 0x5220, 2533 }, { 0x522D, 2536 }, { 0x522F, 2539 }, { 0x522A, 2542 }, { 0x522B, 2545 }, { 0x51E1, 2548 }, { 0x51DE, 2551 }, { 0x51DF, 2554 }, { 0x51E9, 2557 }, { 0x51E6, 2560 }, { 0x51E7, 2563 }, { 0x51F6, 2566 }, { 0x526F, 2569 }, { 0x51A1, 2572 }, { 0x519E, 2575 }, { 0x519F, 2578 }, { 0x51AA, 2581 }, { 0x51A8, 2584 }, { 0x519C, 2587 }, { 0x519A, 2590 }, { 0x5197, 2593 }, { 0x5198, 2596 }, { 0x51A7, 2599 }, { 0x51A5, 2602 }, { 0x51A3, 2605 }, { 0x51AE, 2608 }, { 0x51B0, 2611 }, { 0x51AB, 2614 }, { 0x51AC, 2617 }, { 0x51B4, 2620 }, { 0x51B6, 2623 }, { 0x51B1, 2626 }, { 0x51B2, 2629 }, { 0x509B, 2632 }, { 0x5098, 2635 }, { 0x5099, 2638 }, { 0x5096, 2641 }, { 0x5094, 2644 }, { 0x5091, 2647 }, { 0x5092, 2650 }, { 0x50A2, 2653 }, { 0x509F, 2656 }, { 0x50A0, 2659 }, { 0x509D, 2662 }, { 0x50A6, 2665 }, { 0x50A8, 2668 }, { 0x50A3, 2671 }, { 0x50A4, 2674 }, { 0x50AB, 2677 }, { 0x50AD, 2680 }, { 0x50A9, 2683 }, { 0x5173, 2686 }, { 0x5170, 2689 }, { 0x5171, 2692 }, { 0x517B, 2695 }, { 0x5179, 2698 }, { 0x516E, 2701 }, { 0x516B, 2704 }, { 0x5168, 2707 }, { 0x5169, 2710 }, { 0x5178, 2713 }, { 0x5176, 2716 }, { 0x5177, 2719 }, { 0x5175, 2722 }, { 0x517C, 2725 }, { 0x5278, 2728 }, { 0x5275, 2731 }, { 0x5276, 2734 }, { 0x5251, 2737 }, { 0x524E, 2740 }, { 0x524F, 2743 }, { 0x525C, 2746 }, { 0x525A, 2749 }, { 0x524C, 2752 }, { 0x5249, 2755 }, { 0x5246, 2758 }, { 0x5247, 2761 }, { 0x5259, 2764 }, { 0x5256, 2767 }, { 0x5257, 2770 }, { 0x5254, 2773 }, { 0x53E7, 2776 }, { 0x53E4, 2779 }, { 0x53E5, 2782 }, { 0x541E, 2785 }, { 0x541B, 2788 }, { 0x5418, 2791 }, { 0x5419, 2794 }, { 0x5426, 2797 }, { 0x5423, 2800 }, { 0x5424, 2803 }, { 0x5421, 2806 }, { 0x542A, 2809 }, { 0x542C, 2812 }, { 0x5427, 2815 }, { 0x5428, 2818 }, { 0x5430, 2821 }, { 0x542D, 2824 }, { 0x542E, 2827 }, { 0x53EB, 2830 }, { 0x53E8, 2833 }, { 0x53E9, 2836 }, { 0x53F4, 2839 }, { 0x53FA, 2842 }, { 0x51FE, 2845 }, { 0x51FC, 2848 }, { 0x5205, 2851 }, { 0x5203, 2854 }, { 0x5212, 2857 }, { 0x51BE, 2860 }, { 0x51BB, 2863 }, { 0x51BC, 2866 }, { 0x51C6, 2869 }, { 0x51C3, 2872 }, { 0x51C4, 2875 }, { 0x51D2, 2878 }, { 0x51D8, 2881 }, { 0x5235, 2884 }, { 0x5232, 2887 }, { 0x5233, 2890 }, { 0x523F, 2893 }, { 0x523D, 2896 }, { 0x5231, 2899 }, { 0x523C, 2902 }, { 0x5239, 2905 }, { 0x523A, 2908 }, { 0x5237, 2911 }, { 0x5243, 2914 }, { 0x5245, 2917 }, { 0x5240, 2920 }, { 0x5241, 2923 }, { 0x50B4, 2926 }, { 0x50B2, 2929 }, { 0x50BC, 2932 }, { 0x50B9, 2935 }, { 0x50BA, 2938 }, { 0x50C7, 2941 }, { 0x5080, 2944 }, { 0x507D, 2947 }, { 0x507E, 2950 }, { 0x507B, 2953 }, { 0x5079, 2956 }, { 0x5076, 2959 }, { 0x5077, 2962 }, { 0x5084, 2965 }, { 0x5081, 2968 }, { 0x5082, 2971 }, { 0x5088, 2974 }, { 0x508A, 2977 }, { 0x5085, 2980 }, { 0x5086, 2983 }, { 0x508E, 2986 }, { 0x5090, 2989 }, { 0x508B, 2992 }, { 0x508C, 2995 }, { 0x515A, 2998 }, { 0x5157, 3001 }, { 0x5158, 3004 }, { 0x5161, 3007 }, { 0x515F, 3010 }, { 0x5156, 3013 }, { 0x5154, 3016 }, { 0x5151, 3019 }, { 0x5152, 3022 }, { 0x515E, 3025 }, { 0x515B, 3028 }, { 0x515C, 3031 }, { 0x5165, 3034 }, { 0x5167, 3037 }, { 0x5162, 3040 }, { 0x5163, 3043 }, { 0x5263, 3046 }, { 0x5260, 3049 }, { 0x5261, 3052 }, { 0x526D, 3055 }, { 0x526B, 3058 }, { 0x525E, 3061 }, { 0x526A, 3064 }, { 0x5267, 3067 }, { 0x5268, 3070 }, { 0x5266, 3073 }, { 0x5183, 3076 }, { 0x5181, 3079 }, { 0x5437, 3082 }, { 0x5434, 3085 }, { 0x5431, 3088 }, { 0x5432, 3091 }, { 0x543E, 3094 }, { 0x543B, 3097 }, { 0x543C, 3100 }, { 0x543A, 3103 }, { 0x5441, 3106 }, { 0x5443, 3109 }, { 0x543F, 3112 }, { 0x5447, 3115 }, { 0x5449, 3118 }, { 0x5444, 3121 }, { 0x5445, 3124 }, { 0x5397, 3127 }, { 0x5394, 3130 }, { 0x5395, 3133 }, { 0x539E, 3136 }, { 0x539B, 3139 }, { 0x539C, 3142 }, { 0x539A, 3145 }, { 0x5398, 3148 }, { 0x53A2, 3151 }, { 0x53A4, 3154 }, { 0x539F, 3157 }, { 0x53A0, 3160 }, { 0x53A8, 3163 }, { 0x53AA, 3166 }, { 0x53A5, 3169 }, { 0x53A6, 3172 }, { 0x5189, 3175 }, { 0x5187, 3178 }, { 0x5195, 3181 }, { 0x5450, 3184 }, { 0x544D, 3187 }, { 0x544A, 3190 }, { 0x544B, 3193 }, { 0x5458, 3196 }, { 0x5455, 3199 }, { 0x5456, 3202 }, { 0x5453, 3205 }, { 0x545C, 3208 }, { 0x5459, 3211 }, { 0x545A, 3214 }, { 0x52F7, 3217 }, { 0x52F4, 3220 }, { 0x52F5, 3223 }, { 0x52FC, 3226 }, { 0x52F2, 3229 }, { 0x52F0, 3232 }, { 0x52ED, 3235 }, { 0x52EE, 3238 }, { 0x52FB, 3241 }, { 0x52FA, 3244 }, { 0x52F9, 3247 }, { 0x5300, 3250 }, { 0x5302, 3253 }, { 0x52FE, 3256 }, { 0x5306, 3259 }, { 0x5308, 3262 }, { 0x5303, 3265 }, { 0x5304, 3268 }, { 0x503E, 3271 }, { 0x503C, 3274 }, { 0x5045, 3277 }, { 0x5043, 3280 }, { 0x504E, 3283 }, { 0x5054, 3286 }, { 0x5403, 3289 }, { 0x5400, 3292 }, { 0x5401, 3295 }, { 0x5407, 3298 }, { 0x5404, 3301 }, { 0x5405, 3304 }, { 0x5410, 3307 }, { 0x5416, 3310 }, { 0x537C, 3313 }, { 0x5387, 3316 }, { 0x5384, 3319 }, { 0x5385, 3322 }, { 0x5383, 3325 }, { 0x5380, 3328 }, { 0x5381, 3331 }, { 0x537F, 3334 }, { 0x538B, 3337 }, { 0x538D, 3340 }, { 0x5388, 3343 }, { 0x5389, 3346 }, { 0x5391, 3349 }, { 0x5393, 3352 }, { 0x538E, 3355 }, { 0x538F, 3358 }, { 0x53CC, 3361 }, { 0x53CA, 3364 }, { 0x53D8, 3367 }, { 0x53DE, 3370 }, { 0x53AE, 3373 }, { 0x53AB, 3376 }, { 0x53AC, 3379 }, { 0x53B9, 3382 }, { 0x53B6, 3385 }, { 0x53B7, 3388 }, { 0x53B5, 3391 }, { 0x53B2, 3394 }, { 0x53B3, 3397 }, { 0x53B0, 3400 }, { 0x53BD, 3403 }, { 0x53BF, 3406 }, { 0x53BA, 3409 }, { 0x53BB, 3412 }, { 0x53C3, 3415 }, { 0x53C5, 3418 }, { 0x53C0, 3421 }, { 0x53C1, 3424 }, { 0x530F, 3427 }, { 0x530D, 3430 }, { 0x5334, 3433 }, { 0x5331, 3436 }, { 0x5332, 3439 }, { 0x533B, 3442 }, { 0x5339, 3445 }, { 0x532F, 3448 }, { 0x532D, 3451 }, { 0x532A, 3454 }, { 0x532B, 3457 }, { 0x5338, 3460 }, { 0x5335, 3463 }, { 0x5336, 3466 }, { 0x533F, 3469 }, { 0x533C, 3472 }, { 0x533D, 3475 }, { 0x5343, 3478 }, { 0x5345, 3481 }, { 0x5340, 3484 }, { 0x5341, 3487 }, { 0x5316, 3490 }, { 0x5314, 3493 }, { 0x5322, 3496 }, { 0x5328, 3499 }, { 0x5120, 3502 }, { 0x511E, 3505 }, { 0x5128, 3508 }, { 0x5125, 3511 }, { 0x5126, 3514 }, { 0x5134, 3517 }, { 0x50E9, 3520 }, { 0x50E6, 3523 }, { 0x50E7, 3526 }, { 0x50F8, 3529 }, { 0x50FE, 3532 }, { 0x5286, 3535 }, { 0x5284, 3538 }, { 0x5464, 3541 }, { 0x5461, 3544 }, { 0x5462, 3547 }, { 0x5465, 3550 }, { 0x546F, 3553 }, { 0x5478, 3556 }, { 0x5475, 3559 }, { 0x5476, 3562 }, { 0x547C, 3565 }, { 0x5479, 3568 }, { 0x547A, 3571 }, { 0x5485, 3574 }, { 0x548B, 3577 }, { 0x5349, 3580 }, { 0x5346, 3583 }, { 0x5347, 3586 }, { 0x5354, 3589 }, { 0x5351, 3592 }, { 0x5352, 3595 }, { 0x5350, 3598 }, { 0x534D, 3601 }, { 0x534E, 3604 }, { 0x534B, 3607 }, { 0x5358, 3610 }, { 0x535A, 3613 }, { 0x5355, 3616 }, { 0x5356, 3619 }, { 0x535E, 3622 }, { 0x5360, 3625 }, { 0x535B, 3628 }, { 0x535C, 3631 }, { 0x5293, 3634 }, { 0x5291, 3637 }, { 0x529A, 3640 }, { 0x5298, 3643 }, { 0x52A6, 3646 }, { 0x52AC, 3649 }, { 0x52DB, 3652 }, { 0x52D8, 3655 }, { 0x52D9, 3658 }, { 0x52E1, 3661 }, { 0x52DF, 3664 }, { 0x52D6, 3667 }, { 0x52D3, 3670 }, { 0x52D0, 3673 }, { 0x52D1, 3676 }, { 0x52DE, 3679 }, { 0x52DC, 3682 }, { 0x52E4, 3685 }, { 0x52E6, 3688 }, { 0x52E2, 3691 }, { 0x52EA, 3694 }, { 0x52EC, 3697 }, { 0x52E7, 3700 }, { 0x52E8, 3703 }, { 0x505D, 3706 }, { 0x505A, 3709 }, { 0x505B, 3712 }, { 0x5064, 3715 }, { 0x5062, 3718 }, { 0x5070, 3721 }, { 0x5368, 3724 }, { 0x5365, 3727 }, { 0x5366, 3730 }, { 0x5374, 3733 }, { 0x537A, 3736 }, { 0x513C, 3739 }, { 0x513A, 3742 }, { 0x5143, 3745 }, { 0x5141, 3748 }, { 0x514F, 3751 }, { 0x5219, 3754 }, { 0x5217, 3757 }, { 0x5221, 3760 }, { 0x521E, 3763 }, { 0x521F, 3766 }, { 0x522E, 3769 }, { 0x519D, 3772 }, { 0x519B, 3775 }, { 0x51A4, 3778 }, { 0x51A2, 3781 }, { 0x51AF, 3784 }, { 0x51B5, 3787 }, { 0x5097, 3790 }, { 0x5095, 3793 }, { 0x509E, 3796 }, { 0x509C, 3799 }, { 0x50A7, 3802 }, { 0x50AC, 3805 }, { 0x516F, 3808 }, { 0x516C, 3811 }, { 0x516D, 3814 }, { 0x5174, 3817 }, { 0x524D, 3820 }, { 0x524A, 3823 }, { 0x524B, 3826 }, { 0x5255, 3829 }, { 0x5252, 3832 }, { 0x5253, 3835 }, { 0x541F, 3838 }, { 0x541C, 3841 }, { 0x541D, 3844 }, { 0x5422, 3847 }, { 0x5420, 3850 }, { 0x542B, 3853 }, { 0x5230, 3856 }, { 0x5238, 3859 }, { 0x5236, 3862 }, { 0x5244, 3865 }, { 0x507C, 3868 }, { 0x507A, 3871 }, { 0x5089, 3874 }, { 0x508F, 3877 }, { 0x5155, 3880 }, { 0x5166, 3883 }, { 0x525F, 3886 }, { 0x525D, 3889 }, { 0x5264, 3892 }, { 0x5265, 3895 }, { 0x5438, 3898 }, { 0x5435, 3901 }, { 0x5436, 3904 }, { 0x5439, 3907 }, { 0x5442, 3910 }, { 0x5448, 3913 }, { 0x53A3, 3916 }, { 0x53A9, 3919 }, { 0x5451, 3922 }, { 0x544E, 3925 }, { 0x544F, 3928 }, { 0x5454, 3931 }, { 0x5452, 3934 }, { 0x52F3, 3937 }, { 0x52F1, 3940 }, { 0x52F8, 3943 }, { 0x5301, 3946 }, { 0x5307, 3949 }, { 0x537E, 3952 }, { 0x538C, 3955 }, { 0x5392, 3958 }, { 0x53B1, 3961 }, { 0x53AF, 3964 }, { 0x53BE, 3967 }, { 0x53C4, 3970 }, { 0x5330, 3973 }, { 0x532E, 3976 }, { 0x5344, 3979 }, { 0x534C, 3982 }, { 0x534A, 3985 }, { 0x5359, 3988 }, { 0x535F, 3991 }, { 0x52D7, 3994 }, { 0x52D4, 3997 }, { 0x52D5, 4000 }, { 0x52E5, 4003 }, { 0x52EB, 4006 }, { 0x262C, 4009 }, { 0x224C, 4011 }, { 0x232E, 4014 }, { 0x27D1, 4016 }, { 0x235D, 4019 }, { 0x2355, 4025 }, { 0x2351, 4031 }, { 0x2361, 4037 }, { 0x2372, 4043 }, { 0x2352, 4049 }, { 0x236B, 4054 }, { 0x2362, 4059 }, { 0x235B, 4064 }, { 0x2364, 4069 }, { 0x2374, 4074 }, { 0x2366, 4078 }, { 0x234E, 4084 }, { 0x234A, 4090 }, { 0x2371, 4096 }, { 0x2373, 4102 }, { 0x2378, 4106 }, { 0x2367, 4111 }, { 0x2395, 4117 }, { 0x2353, 4121 }, { 0x2354, 4127 }, { 0x233B, 4132 }, { 0x236F, 4137 }, { 0x234C, 4143 }, { 0x2360, 4149 }, { 0x234D, 4154 }, { 0x2338, 4159 }, { 0x2341, 4164 }, { 0x233C, 4169 }, { 0x2339, 4174 }, { 0x233A, 4179 }, { 0x2350, 4184 }, { 0x2370, 4190 }, { 0x2342, 4195 }, { 0x2357, 4200 }, { 0x2347, 4206 }, { 0x2343, 4212 }, { 0x2348, 4217 }, { 0x2344, 4223 }, { 0x2363, 4228 }, { 0x237A, 4233 }, { 0x2376, 4237 }, { 0x236A, 4242 }, { 0x234B, 4247 }, { 0x2359, 4252 }, { 0x2375, 4257 }, { 0x2379, 4261 }, { 0x235E, 4266 }, { 0x2358, 4271 }, { 0x233F, 4276 }, { 0x236D, 4281 }, { 0x2368, 4286 }, { 0x236C, 4291 }, { 0x233E, 4295 }, { 0x235F, 4300 }, { 0x233D, 4305 }, { 0x235C, 4310 }, { 0x2349, 4315 }, { 0x2365, 4320 }, { 0x2336, 4325 }, { 0x2337, 4329 }, { 0x235A, 4334 }, { 0x2377, 4339 }, { 0x234F, 4344 }, { 0x2340, 4349 }, { 0x2356, 4354 }, { 0x2345, 4359 }, { 0x236E, 4364 }, { 0x2346, 4369 }, { 0x2369, 4374 }, { 0x2312, 4379 }, { 0x2136, 4380 }, { 0x29F9, 4382 }, { 0x29F8, 4385 }, { 0x2540, 4387 }, { 0x2526, 4395 }, { 0x251A, 4403 }, { 0x251E, 4410 }, { 0x2516, 4418 }, { 0x2538, 4425 }, { 0x2548, 4432 }, { 0x252A, 4440 }, { 0x2519, 4448 }, { 0x2522, 4455 }, { 0x2515, 4463 }, { 0x2537, 4470 }, { 0x255C, 4477 }, { 0x2559, 4484 }, { 0x2568, 4491 }, { 0x255B, 4498 }, { 0x2558, 4505 }, { 0x2567, 4512 }, { 0x2541, 4519 }, { 0x2527, 4527 }, { 0x2512, 4535 }, { 0x251F, 4542 }, { 0x250E, 4550 }, { 0x2530, 4557 }, { 0x2547, 4564 }, { 0x2529, 4572 }, { 0x2511, 4580 }, { 0x2521, 4587 }, { 0x250D, 4595 }, { 0x252F, 4602 }, { 0x2556, 4609 }, { 0x2553, 4616 }, { 0x2565, 4623 }, { 0x2555, 4630 }, { 0x2552, 4637 }, { 0x2564, 4644 }, { 0x2543, 4651 }, { 0x2545, 4660 }, { 0x2535, 4669 }, { 0x252D, 4677 }, { 0x253D, 4685 }, { 0x253A, 4693 }, { 0x2532, 4701 }, { 0x254A, 4709 }, { 0x2579, 4717 }, { 0x251B, 4721 }, { 0x257F, 4727 }, { 0x2517, 4734 }, { 0x253B, 4740 }, { 0x257B, 4746 }, { 0x2513, 4750 }, { 0x250F, 4756 }, { 0x2533, 4762 }, { 0x2578, 4768 }, { 0x257E, 4772 }, { 0x257A, 4779 }, { 0x254F, 4783 }, { 0x254D, 4789 }, { 0x2507, 4795 }, { 0x2505, 4801 }, { 0x2503, 4807 }, { 0x252B, 4811 }, { 0x2523, 4817 }, { 0x254B, 4823 }, { 0x250B, 4829 }, { 0x2509, 4835 }, { 0x2501, 4841 }, { 0x2575, 4845 }, { 0x2518, 4849 }, { 0x257D, 4855 }, { 0x2514, 4862 }, { 0x2534, 4868 }, { 0x256F, 4874 }, { 0x2570, 4881 }, { 0x256E, 4888 }, { 0x256D, 4895 }, { 0x2577, 4902 }, { 0x2510, 4906 }, { 0x250C, 4912 }, { 0x252C, 4918 }, { 0x2574, 4924 }, { 0x257C, 4928 }, { 0x2576, 4935 }, { 0x254E, 4939 }, { 0x254C, 4945 }, { 0x2506, 4951 }, { 0x2504, 4957 }, { 0x2573, 4963 }, { 0x2572, 4968 }, { 0x2571, 4977 }, { 0x2502, 4986 }, { 0x2524, 4990 }, { 0x251C, 4996 }, { 0x253C, 5002 }, { 0x250A, 5008 }, { 0x2508, 5014 }, { 0x2500, 5020 }, { 0x2544, 5024 }, { 0x2546, 5033 }, { 0x2536, 5042 }, { 0x252E, 5050 }, { 0x253E, 5058 }, { 0x2539, 5066 }, { 0x2531, 5074 }, { 0x2549, 5082 }, { 0x255D, 5090 }, { 0x255A, 5096 }, { 0x2569, 5102 }, { 0x2557, 5108 }, { 0x2554, 5114 }, { 0x2566, 5120 }, { 0x2551, 5126 }, { 0x2563, 5130 }, { 0x2560, 5136 }, { 0x256C, 5142 }, { 0x2550, 5148 }, { 0x2528, 5152 }, { 0x2520, 5159 }, { 0x2542, 5166 }, { 0x2525, 5173 }, { 0x251D, 5180 }, { 0x253F, 5187 }, { 0x2562, 5194 }, { 0x255F, 5201 }, { 0x256B, 5208 }, { 0x2561, 5215 }, { 0x255E, 5222 }, { 0x256A, 5229 }, { 0x2627, 5236 }, { 0x31D4, 5238 }, { 0x31D0, 5241 }, { 0x31CF, 5244 }, { 0x31D2, 5247 }, { 0x31E3, 5250 }, { 0x31D1, 5253 }, { 0x31C0, 5256 }, { 0x31D6, 5259 }, { 0x31C7, 5262 }, { 0x31D5, 5265 }, { 0x31DB, 5268 }, { 0x31E2, 5271 }, { 0x31DC, 5274 }, { 0x31DA, 5277 }, { 0x31D3, 5280 }, { 0x31D9, 5283 }, { 0x31C4, 5286 }, { 0x31D7, 5289 }, { 0x31DD, 5292 }, { 0x31C1, 5295 }, { 0x31C2, 5298 }, { 0x31C3, 5301 }, { 0x31C6, 5304 }, { 0x31CA, 5307 }, { 0x31CD, 5310 }, { 0x31C5, 5313 }, { 0x31DF, 5316 }, { 0x31D8, 5319 }, { 0x31DE, 5322 }, { 0x31CC, 5325 }, { 0x31E0, 5328 }, { 0x31C8, 5331 }, { 0x31CB, 5334 }, { 0x31CE, 5337 }, { 0x31C9, 5340 }, { 0x31E1, 5343 }, { 0x2E86, 5346 }, { 0x2EA7, 5349 }, { 0x2EA8, 5352 }, { 0x2EDD, 5355 }, { 0x2EDE, 5359 }, { 0x2EDF, 5363 }, { 0x2EB8, 5367 }, { 0x2EAB, 5370 }, { 0x2EB1, 5373 }, { 0x2EB2, 5377 }, { 0x2EB4, 5381 }, { 0x2EB3, 5385 }, { 0x2EB9, 5389 }, { 0x2EA4, 5392 }, { 0x2EA5, 5396 }, { 0x2EB7, 5400 }, { 0x2E99, 5403 }, { 0x2E9C, 5406 }, { 0x2ED8, 5409 }, { 0x2EAA, 5412 }, { 0x2EE3, 5417 }, { 0x2ECF, 5420 }, { 0x2EA3, 5423 }, { 0x2ECA, 5426 }, { 0x2E98, 5429 }, { 0x2EE1, 5432 }, { 0x2EC7, 5435 }, { 0x2EA9, 5438 }, { 0x2E8E, 5441 }, { 0x2E8F, 5445 }, { 0x2E91, 5449 }, { 0x2E90, 5453 }, { 0x2ED1, 5457 }, { 0x2ED2, 5461 }, { 0x2EBC, 5465 }, { 0x2EB5, 5468 }, { 0x2E9D, 5471 }, { 0x2ED7, 5474 }, { 0x2E8B, 5477 }, { 0x2EAF, 5480 }, { 0x2ECD, 5483 }, { 0x2ECE, 5487 }, { 0x2EC3, 5491 }, { 0x2EC4, 5495 }, { 0x2EBA, 5499 }, { 0x2EBB, 5503 }, { 0x2E9B, 5507 }, { 0x2E81, 5510 }, { 0x2E9E, 5513 }, { 0x2EE4, 5516 }, { 0x2EBE, 5519 }, { 0x2EBF, 5523 }, { 0x2EC0, 5527 }, { 0x2E96, 5531 }, { 0x2E97, 5535 }, { 0x2E88, 5539 }, { 0x2E89, 5543 }, { 0x2ED5, 5547 }, { 0x2ED6, 5551 }, { 0x2EB6, 5555 }, { 0x2E8C, 5558 }, { 0x2E8D, 5562 }, { 0x2E92, 5566 }, { 0x2E94, 5569 }, { 0x2E95, 5573 }, { 0x2E87, 5577 }, { 0x2EC1, 5580 }, { 0x2EA1, 5583 }, { 0x2EA2, 5587 }, { 0x2EAE, 5591 }, { 0x2EBD, 5594 }, { 0x2E9F, 5597 }, { 0x2E85, 5600 }, { 0x2E80, 5603 }, { 0x2E82, 5606 }, { 0x2E83, 5610 }, { 0x2E84, 5614 }, { 0x2EAC, 5618 }, { 0x2EAD, 5622 }, { 0x2E93, 5626 }, { 0x2EF1, 5629 }, { 0x2EC2, 5632 }, { 0x2EA0, 5635 }, { 0x2E8A, 5638 }, { 0x2EA6, 5641 }, { 0x2EC6, 5647 }, { 0x2ECC, 5651 }, { 0x2EE8, 5655 }, { 0x2EE9, 5659 }, { 0x2EE0, 5663 }, { 0x2EDC, 5667 }, { 0x2EC5, 5671 }, { 0x2EE6, 5675 }, { 0x2ECB, 5679 }, { 0x2EEC, 5683 }, { 0x2EE5, 5687 }, { 0x2EEA, 5691 }, { 0x2ED4, 5695 }, { 0x2ED0, 5699 }, { 0x2EDA, 5703 }, { 0x2ED3, 5707 }, { 0x2EE7, 5711 }, { 0x2EB0, 5715 }, { 0x2EDB, 5719 }, { 0x2EE2, 5723 }, { 0x2EC9, 5727 }, { 0x2EEE, 5731 }, { 0x2EF0, 5735 }, { 0x2EC8, 5739 }, { 0x2ED9, 5743 }, { 0x2EF3, 5748 }, { 0x2EEB, 5752 }, { 0x2EED, 5756 }, { 0x2EEF, 5760 }, { 0x2EF2, 5764 }, { 0x2680, 5768 }, { 0x2681, 5770 }, { 0x2682, 5772 }, { 0x2683, 5774 }, { 0x2684, 5776 }, { 0x2685, 5778 }, { 0x2214, 5780 }, { 0x02D9, 5782 }, { 0x2238, 5784 }, { 0x22C5, 5786 }, { 0x220E, 5788 }, { 0x2200, 5791 }, { 0x2668, 5793 }, { 0x2615, 5795 }, { 0x20AD, 5797 }, { 0x0EDD, 5799 }, { 0x0EDC, 5802 }, { 0x0EC6, 5805 }, { 0x0EC8, 5808 }, { 0x0ECA, 5812 }, { 0x0EC9, 5816 }, { 0x0ECB, 5820 }, { 0x0ED1, 5824 }, { 0x0ED6, 5827 }, { 0x0ED2, 5830 }, { 0x0ED5, 5833 }, { 0x0ED4, 5836 }, { 0x0ED9, 5839 }, { 0x0ED0, 5842 }, { 0x0ED8, 5845 }, { 0x0ED7, 5848 }, { 0x0ED3, 5851 }, { 0x0EB0, 5854 }, { 0x0EC0, 5858 }, { 0x0EB4, 5862 }, { 0x0EC2, 5866 }, { 0x0EB8, 5870 }, { 0x0EB6, 5874 }, { 0x0EB2, 5878 }, { 0x0EC4, 5882 }, { 0x0EB3, 5886 }, { 0x0EC3, 5890 }, { 0x0EC1, 5894 }, { 0x0EB5, 5898 }, { 0x0EB9, 5902 }, { 0x0EB7, 5906 }, { 0x0EB1, 5910 }, { 0x0EBB, 5915 }, { 0x0EAD, 5920 }, { 0x0E9A, 5923 }, { 0x0E88, 5926 }, { 0x0E94, 5929 }, { 0x0E9D, 5932 }, { 0x0E9F, 5936 }, { 0x0EAE, 5940 }, { 0x0EAB, 5944 }, { 0x0E81, 5948 }, { 0x0EA3, 5951 }, { 0x0EA5, 5955 }, { 0x0EA1, 5959 }, { 0x0E99, 5962 }, { 0x0E9B, 5965 }, { 0x0E8A, 5968 }, { 0x0EAA, 5972 }, { 0x0E95, 5976 }, { 0x0EA7, 5979 }, { 0x0EA2, 5982 }, { 0x0E84, 5985 }, { 0x0E82, 5989 }, { 0x0E87, 5993 }, { 0x0E8D, 5996 }, { 0x0E9E, 5999 }, { 0x0E9C, 6003 }, { 0x0E97, 6007 }, { 0x0E96, 6011 }, { 0x0EAF, 6015 }, { 0x0ECD, 6017 }, { 0x0EBC, 6019 }, { 0x0EBD, 6023 }, { 0x0ECC, 6027 }, { 0x264C, 6030 }, { 0x005F, 6031 }, { 0x301F, 6033 }, { 0x204E, 6038 }, { 0x19DE, 6040 }, { 0x19DF, 6045 }, { 0x19C8, 6050 }, { 0x19C9, 6055 }, { 0x19D1, 6060 }, { 0x19D6, 6065 }, { 0x19D2, 6070 }, { 0x19D5, 6075 }, { 0x19D4, 6080 }, { 0x19D9, 6085 }, { 0x19D0, 6090 }, { 0x19D8, 6095 }, { 0x19D7, 6100 }, { 0x19D3, 6105 }, { 0x19B5, 6110 }, { 0x19B7, 6116 }, { 0x19B3, 6122 }, { 0x19B1, 6128 }, { 0x19B6, 6134 }, { 0x19BA, 6140 }, { 0x19B2, 6146 }, { 0x19C0, 6152 }, { 0x19B8, 6158 }, { 0x19BD, 6164 }, { 0x19B9, 6170 }, { 0x19B4, 6176 }, { 0x19BC, 6182 }, { 0x19BB, 6188 }, { 0x19BE, 6194 }, { 0x19BF, 6200 }, { 0x19B0, 6206 }, { 0x19A5, 6213 }, { 0x19A4, 6219 }, { 0x199D, 6225 }, { 0x19A3, 6231 }, { 0x1985, 6237 }, { 0x199F, 6243 }, { 0x1999, 6249 }, { 0x1993, 6255 }, { 0x1997, 6261 }, { 0x1981, 6267 }, { 0x198C, 6273 }, { 0x1991, 6279 }, { 0x199E, 6285 }, { 0x1986, 6291 }, { 0x198D, 6297 }, { 0x19A8, 6303 }, { 0x1987, 6309 }, { 0x1998, 6315 }, { 0x1992, 6321 }, { 0x198B, 6327 }, { 0x19A9, 6333 }, { 0x19A2, 6339 }, { 0x19A1, 6345 }, { 0x199A, 6351 }, { 0x19A0, 6357 }, { 0x1982, 6363 }, { 0x199C, 6369 }, { 0x1996, 6375 }, { 0x1990, 6381 }, { 0x1994, 6387 }, { 0x1980, 6393 }, { 0x1989, 6399 }, { 0x198E, 6405 }, { 0x199B, 6411 }, { 0x1983, 6417 }, { 0x198A, 6423 }, { 0x19A6, 6429 }, { 0x1984, 6435 }, { 0x1995, 6441 }, { 0x198F, 6447 }, { 0x1988, 6453 }, { 0x19A7, 6459 }, { 0x19C7, 6465 }, { 0x19C6, 6471 }, { 0x19C5, 6477 }, { 0x19C4, 6483 }, { 0x19C3, 6489 }, { 0x19C1, 6495 }, { 0x19C2, 6501 }, { 0x20AA, 6507 }, { 0x07F5, 6510 }, { 0x07F4, 6514 }, { 0x07F8, 6518 }, { 0x07C1, 6520 }, { 0x07C6, 6523 }, { 0x07C2, 6526 }, { 0x07C5, 6529 }, { 0x07C4, 6532 }, { 0x07C9, 6535 }, { 0x07C0, 6538 }, { 0x07C8, 6541 }, { 0x07C7, 6544 }, { 0x07C3, 6547 }, { 0x07CA, 6550 }, { 0x07CD, 6553 }, { 0x07CC, 6556 }, { 0x07D2, 6559 }, { 0x07D0, 6562 }, { 0x07CE, 6565 }, { 0x07D3, 6568 }, { 0x07D8, 6571 }, { 0x07CB, 6574 }, { 0x07DD, 6577 }, { 0x07E4, 6580 }, { 0x07D6, 6583 }, { 0x07DE, 6586 }, { 0x07DF, 6589 }, { 0x07E1, 6592 }, { 0x07E3, 6595 }, { 0x07E0, 6598 }, { 0x07CF, 6602 }, { 0x07D4, 6605 }, { 0x07D9, 6608 }, { 0x07DB, 6611 }, { 0x07D5, 6614 }, { 0x07E5, 6617 }, { 0x07E6, 6620 }, { 0x07D7, 6623 }, { 0x07DC, 6626 }, { 0x07E2, 6629 }, { 0x07E7, 6632 }, { 0x07DA, 6636 }, { 0x07E8, 6639 }, { 0x07EA, 6643 }, { 0x07E9, 6647 }, { 0x07D1, 6651 }, { 0x07F6, 6654 }, { 0x07F7, 6658 }, { 0x07F0, 6661 }, { 0x07EF, 6666 }, { 0x07F1, 6671 }, { 0x07EE, 6676 }, { 0x07EC, 6681 }, { 0x07EB, 6686 }, { 0x07ED, 6691 }, { 0x07F3, 6696 }, { 0x07F2, 6701 }, { 0x07FA, 6705 }, { 0x07F9, 6707 }, { 0x22BD, 6710 }, { 0x2284, 6711 }, { 0x2285, 6715 }, { 0x2209, 6719 }, { 0x00AC, 6723 }, { 0x22AD, 6725 }, { 0x237B, 6727 }, { 0x2260, 6730 }, { 0x2241, 6733 }, { 0x2249, 6735 }, { 0x22EA, 6739 }, { 0x22EC, 6743 }, { 0x22E2, 6750 }, { 0x22E3, 6757 }, { 0x2226, 6764 }, { 0x2262, 6767 }, { 0x226E, 6770 }, { 0x226D, 6772 }, { 0x226F, 6775 }, { 0x2244, 6777 }, { 0x2445, 6781 }, { 0x2444, 6784 }, { 0x2448, 6787 }, { 0x2442, 6789 }, { 0x2440, 6791 }, { 0x2441, 6793 }, { 0x2447, 6795 }, { 0x2446, 6799 }, { 0x244A, 6803 }, { 0x2449, 6806 }, { 0x2443, 6810 }, { 0x2126, 6813 }, { 0x7300, 6815 }, { 0x7304, 6819 }, { 0x7309, 6823 }, { 0x730F, 6827 }, { 0x7316, 6831 }, { 0x7301, 6835 }, { 0x7303, 6839 }, { 0x731A, 6843 }, { 0x730B, 6847 }, { 0x730C, 6851 }, { 0x730D, 6855 }, { 0x7313, 6859 }, { 0x7314, 6863 }, { 0x7307, 6867 }, { 0x731D, 6871 }, { 0x730A, 6875 }, { 0x7302, 6879 }, { 0x7312, 6883 }, { 0x7310, 6887 }, { 0x7315, 6891 }, { 0x731E, 6895 }, { 0x7305, 6899 }, { 0x7306, 6903 }, { 0x731C, 6907 }, { 0x7317, 6911 }, { 0x731B, 6915 }, { 0x730E, 6919 }, { 0x7319, 6923 }, { 0x7318, 6927 }, { 0x7311, 6931 }, { 0x7308, 6935 }, { 0x7320, 6939 }, { 0x7322, 6943 }, { 0x7321, 6947 }, { 0x7323, 6951 }, { 0x73A0, 6955 }, { 0x73A1, 6959 }, { 0x73A2, 6963 }, { 0x73B2, 6967 }, { 0x73A8, 6971 }, { 0x73AD, 6975 }, { 0x73AE, 6979 }, { 0x73AF, 6983 }, { 0x73B3, 6987 }, { 0x73A5, 6991 }, { 0x73A6, 6995 }, { 0x73C3, 6999 }, { 0x73A9, 7003 }, { 0x73AA, 7007 }, { 0x73A3, 7011 }, { 0x73A4, 7015 }, { 0x73BE, 7019 }, { 0x73B6, 7023 }, { 0x73B7, 7027 }, { 0x73B8, 7031 }, { 0x73B4, 7035 }, { 0x73B5, 7039 }, { 0x73B1, 7043 }, { 0x73BC, 7047 }, { 0x73BD, 7051 }, { 0x73BF, 7055 }, { 0x73AB, 7059 }, { 0x73AC, 7063 }, { 0x73BA, 7067 }, { 0x73BB, 7071 }, { 0x73A7, 7075 }, { 0x73B9, 7079 }, { 0x73C0, 7083 }, { 0x73C1, 7087 }, { 0x73C2, 7091 }, { 0x73B0, 7095 }, { 0x73CE, 7099 }, { 0x73CF, 7103 }, { 0x73CC, 7107 }, { 0x73C8, 7111 }, { 0x73CD, 7115 }, { 0x73C9, 7119 }, { 0x73CA, 7123 }, { 0x73CB, 7127 }, { 0x73D0, 7131 }, { 0x73D1, 7135 }, { 0x73D3, 7139 }, { 0x73D2, 7143 }, { 0x73D4, 7147 }, { 0x73D5, 7151 }, { 0x2E2B, 7155 }, { 0x2024, 7161 }, { 0x2031, 7164 }, { 0x214C, 7168 }, { 0x2030, 7170 }, { 0x202C, 7173 }, { 0x2216, 7176 }, { 0x2736, 7178 }, { 0x273E, 7182 }, { 0x2609, 7188 }, { 0xC05F, 7189 }, { 0xC02E, 7192 }, { 0xC07B, 7195 }, { 0xC05B, 7199 }, { 0xC028, 7203 }, { 0xC02B, 7206 }, { 0xC03A, 7209 }, { 0xC02C, 7211 }, { 0xC031, 7213 }, { 0xC036, 7216 }, { 0xC032, 7219 }, { 0xC035, 7222 }, { 0xC034, 7225 }, { 0xC039, 7228 }, { 0xC030, 7231 }, { 0xC038, 7234 }, { 0xC037, 7237 }, { 0xC033, 7240 }, { 0xC060, 7243 }, { 0xC061, 7246 }, { 0xC062, 7251 }, { 0xC063, 7256 }, { 0xC064, 7261 }, { 0xC065, 7266 }, { 0xC066, 7271 }, { 0xC067, 7276 }, { 0xC068, 7281 }, { 0xC069, 7286 }, { 0xC06A, 7291 }, { 0xC06B, 7296 }, { 0xC06C, 7301 }, { 0xC06D, 7306 }, { 0xC06E, 7311 }, { 0xC06F, 7316 }, { 0xC070, 7321 }, { 0xC071, 7326 }, { 0xC072, 7331 }, { 0xC073, 7336 }, { 0xC074, 7341 }, { 0xC075, 7346 }, { 0xC076, 7351 }, { 0xC077, 7356 }, { 0xC078, 7361 }, { 0xC079, 7366 }, { 0xC07A, 7371 }, { 0xC041, 7376 }, { 0xC042, 7381 }, { 0xC043, 7386 }, { 0xC044, 7391 }, { 0xC045, 7396 }, { 0xC046, 7401 }, { 0xC047, 7406 }, { 0xC048, 7411 }, { 0xC049, 7416 }, { 0xC04A, 7421 }, { 0xC04B, 7426 }, { 0xC04C, 7431 }, { 0xC04D, 7436 }, { 0xC04E, 7441 }, { 0xC04F, 7446 }, { 0xC050, 7451 }, { 0xC051, 7456 }, { 0xC052, 7461 }, { 0xC053, 7466 }, { 0xC054, 7471 }, { 0xC055, 7476 }, { 0xC056, 7481 }, { 0xC057, 7486 }, { 0xC058, 7491 }, { 0xC059, 7496 }, { 0xC05A, 7501 }, { 0xC07D, 7506 }, { 0xC05D, 7510 }, { 0xC029, 7514 }, { 0xC020, 7517 }, { 0xC07E, 7519 }, { 0xC024, 7521 }, { 0xC03D, 7524 }, { 0xC023, 7527 }, { 0xC025, 7530 }, { 0xC05C, 7533 }, { 0xC02F, 7536 }, { 0xC02A, 7538 }, { 0xC03F, 7540 }, { 0xC07C, 7543 }, { 0xC026, 7546 }, { 0xC03C, 7548 }, { 0xC022, 7551 }, { 0xC03B, 7554 }, { 0xC027, 7556 }, { 0xC05E, 7558 }, { 0xC040, 7561 }, { 0xC021, 7564 }, { 0xC03E, 7567 }, { 0xC02D, 7570 }, { 0x1963, 7572 }, { 0x196B, 7576 }, { 0x1964, 7580 }, { 0x1969, 7584 }, { 0x1967, 7588 }, { 0x196D, 7592 }, { 0x1965, 7596 }, { 0x1966, 7600 }, { 0x195C, 7604 }, { 0x195E, 7608 }, { 0x1950, 7612 }, { 0x1958, 7616 }, { 0x195B, 7620 }, { 0x1962, 7624 }, { 0x1968, 7628 }, { 0x1959, 7632 }, { 0x195F, 7636 }, { 0x1954, 7640 }, { 0x1956, 7644 }, { 0x196A, 7648 }, { 0x195D, 7652 }, { 0x1951, 7656 }, { 0x1955, 7660 }, { 0x196C, 7664 }, { 0x1960, 7668 }, { 0x1952, 7672 }, { 0x195A, 7676 }, { 0x1957, 7680 }, { 0x1953, 7684 }, { 0x1961, 7688 }, { 0x1970, 7692 }, { 0x1971, 7696 }, { 0x1972, 7700 }, { 0x1973, 7704 }, { 0x1974, 7708 }, { 0x29DD, 7712 }, { 0x293C, 7715 }, { 0x293A, 7721 }, { 0x293D, 7725 }, { 0x2320, 7731 }, { 0x230F, 7734 }, { 0x2E22, 7737 }, { 0x231C, 7741 }, { 0x23DE, 7744 }, { 0x230E, 7747 }, { 0x2E23, 7750 }, { 0x231D, 7754 }, { 0x23B4, 7757 }, { 0x23E0, 7760 }, { 0x23DC, 7764 }, { 0x2025, 7766 }, { 0x205A, 7769 }, { 0x2E2A, 7772 }, { 0x29C9, 7778 }, { 0x2A08, 7781 }, { 0x2A07, 7785 }, { 0x2051, 7789 }, { 0x2A75, 7793 }, { 0x2A56, 7797 }, { 0x2A55, 7801 }, { 0x560E, 7805 }, { 0x560D, 7808 }, { 0x5621, 7810 }, { 0x5626, 7813 }, { 0x5622, 7816 }, { 0x5625, 7819 }, { 0x5624, 7822 }, { 0x5629, 7825 }, { 0x5620, 7828 }, { 0x5628, 7831 }, { 0x5627, 7834 }, { 0x5623, 7837 }, { 0x5618, 7840 }, { 0x5616, 7843 }, { 0x5619, 7846 }, { 0x5617, 7849 }, { 0x561A, 7852 }, { 0x561E, 7855 }, { 0x561F, 7858 }, { 0x561C, 7861 }, { 0x5615, 7864 }, { 0x561D, 7867 }, { 0x561B, 7870 }, { 0x5613, 7873 }, { 0x5614, 7876 }, { 0x560F, 7879 }, { 0x5549, 7882 }, { 0x55E1, 7885 }, { 0x5524, 7888 }, { 0x55BA, 7891 }, { 0x5595, 7894 }, { 0x554A, 7897 }, { 0x5552, 7900 }, { 0x55EA, 7903 }, { 0x552C, 7906 }, { 0x55C3, 7909 }, { 0x559D, 7912 }, { 0x5566, 7915 }, { 0x55FF, 7918 }, { 0x553F, 7921 }, { 0x55D7, 7924 }, { 0x55B0, 7927 }, { 0x5560, 7930 }, { 0x55F9, 7933 }, { 0x5539, 7936 }, { 0x55D1, 7939 }, { 0x55AA, 7942 }, { 0x5500, 7945 }, { 0x55E2, 7948 }, { 0x5558, 7951 }, { 0x55F1, 7954 }, { 0x5531, 7957 }, { 0x55C9, 7960 }, { 0x55A2, 7963 }, { 0x556D, 7966 }, { 0x5606, 7969 }, { 0x5545, 7972 }, { 0x55DD, 7975 }, { 0x55B6, 7978 }, { 0x554C, 7981 }, { 0x55E4, 7984 }, { 0x5526, 7987 }, { 0x55BD, 7990 }, { 0x5597, 7993 }, { 0x5525, 7996 }, { 0x5567, 7999 }, { 0x5600, 8002 }, { 0x5540, 8005 }, { 0x55D8, 8008 }, { 0x55B1, 8011 }, { 0x556A, 8014 }, { 0x5603, 8017 }, { 0x5543, 8020 }, { 0x55DB, 8023 }, { 0x55B4, 8026 }, { 0x555E, 8029 }, { 0x55F7, 8032 }, { 0x5537, 8035 }, { 0x55CF, 8038 }, { 0x55A8, 8041 }, { 0x556E, 8044 }, { 0x5608, 8047 }, { 0x5546, 8050 }, { 0x55DE, 8053 }, { 0x55B7, 8056 }, { 0x556F, 8059 }, { 0x5609, 8062 }, { 0x560B, 8065 }, { 0x5547, 8068 }, { 0x55DF, 8071 }, { 0x55B8, 8074 }, { 0x55BB, 8077 }, { 0x5571, 8080 }, { 0x5550, 8083 }, { 0x55E8, 8086 }, { 0x552A, 8089 }, { 0x55C1, 8092 }, { 0x559B, 8095 }, { 0x555F, 8098 }, { 0x55F8, 8101 }, { 0x5538, 8104 }, { 0x55D0, 8107 }, { 0x55A9, 8110 }, { 0x5562, 8113 }, { 0x55FB, 8116 }, { 0x553B, 8119 }, { 0x55D3, 8122 }, { 0x55AC, 8125 }, { 0x555A, 8128 }, { 0x55F3, 8131 }, { 0x5533, 8134 }, { 0x55CB, 8137 }, { 0x55A4, 8140 }, { 0x5596, 8143 }, { 0x5559, 8146 }, { 0x55F2, 8149 }, { 0x5532, 8152 }, { 0x55CA, 8155 }, { 0x55A3, 8158 }, { 0x554E, 8161 }, { 0x55E6, 8164 }, { 0x5528, 8167 }, { 0x55BF, 8170 }, { 0x5599, 8173 }, { 0x5569, 8176 }, { 0x5602, 8179 }, { 0x5542, 8182 }, { 0x55DA, 8185 }, { 0x55B3, 8188 }, { 0x5564, 8191 }, { 0x55FD, 8194 }, { 0x553D, 8197 }, { 0x55D5, 8200 }, { 0x55AE, 8203 }, { 0x5507, 8206 }, { 0x5551, 8209 }, { 0x55E9, 8212 }, { 0x552B, 8215 }, { 0x55C2, 8218 }, { 0x559C, 8221 }, { 0x5578, 8224 }, { 0x551A, 8227 }, { 0x558B, 8230 }, { 0x5514, 8233 }, { 0x555C, 8236 }, { 0x55F5, 8239 }, { 0x5535, 8242 }, { 0x55CD, 8245 }, { 0x55A6, 8248 }, { 0x5585, 8251 }, { 0x5501, 8254 }, { 0x550C, 8257 }, { 0x557D, 8260 }, { 0x5557, 8263 }, { 0x55EF, 8266 }, { 0x5530, 8269 }, { 0x55C7, 8272 }, { 0x55A1, 8275 }, { 0x5520, 8278 }, { 0x5607, 8281 }, { 0x5591, 8284 }, { 0x554D, 8287 }, { 0x5502, 8290 }, { 0x55E5, 8293 }, { 0x5527, 8296 }, { 0x55BE, 8299 }, { 0x5573, 8302 }, { 0x5598, 8305 }, { 0x551B, 8308 }, { 0x558C, 8311 }, { 0x556B, 8314 }, { 0x551E, 8317 }, { 0x558F, 8320 }, { 0x5554, 8323 }, { 0x55EC, 8326 }, { 0x552E, 8329 }, { 0x55C5, 8332 }, { 0x559F, 8335 }, { 0x5512, 8338 }, { 0x5583, 8341 }, { 0x5553, 8344 }, { 0x55EB, 8347 }, { 0x552D, 8350 }, { 0x55C4, 8353 }, { 0x559E, 8356 }, { 0x5521, 8359 }, { 0x5592, 8362 }, { 0x5561, 8365 }, { 0x55FA, 8368 }, { 0x553A, 8371 }, { 0x55D2, 8374 }, { 0x55AB, 8377 }, { 0x5522, 8380 }, { 0x5568, 8383 }, { 0x5601, 8386 }, { 0x5541, 8389 }, { 0x55D9, 8392 }, { 0x55B2, 8395 }, { 0x5593, 8398 }, { 0x5570, 8401 }, { 0x560A, 8404 }, { 0x5548, 8407 }, { 0x55E0, 8410 }, { 0x55B9, 8413 }, { 0x5572, 8416 }, { 0x5505, 8419 }, { 0x5576, 8422 }, { 0x5513, 8425 }, { 0x5584, 8428 }, { 0x5516, 8431 }, { 0x5563, 8434 }, { 0x55FC, 8437 }, { 0x553C, 8440 }, { 0x55D4, 8443 }, { 0x55AD, 8446 }, { 0x5587, 8449 }, { 0x550E, 8452 }, { 0x555B, 8455 }, { 0x55F4, 8458 }, { 0x5534, 8461 }, { 0x55CC, 8464 }, { 0x55A5, 8467 }, { 0x557F, 8470 }, { 0x550D, 8473 }, { 0x557E, 8476 }, { 0x554F, 8479 }, { 0x5503, 8482 }, { 0x55E7, 8485 }, { 0x5529, 8488 }, { 0x55C0, 8491 }, { 0x5574, 8494 }, { 0x559A, 8497 }, { 0x551D, 8500 }, { 0x558E, 8503 }, { 0x5518, 8506 }, { 0x5565, 8509 }, { 0x55FE, 8512 }, { 0x553E, 8515 }, { 0x55D6, 8518 }, { 0x55AF, 8521 }, { 0x5589, 8524 }, { 0x5506, 8527 }, { 0x5577, 8530 }, { 0x5510, 8533 }, { 0x555D, 8536 }, { 0x55F6, 8539 }, { 0x5536, 8542 }, { 0x55CE, 8545 }, { 0x55A7, 8548 }, { 0x5581, 8551 }, { 0x550B, 8554 }, { 0x55F0, 8557 }, { 0x55C8, 8560 }, { 0x557C, 8563 }, { 0x5555, 8566 }, { 0x5509, 8569 }, { 0x55ED, 8572 }, { 0x557A, 8575 }, { 0x5508, 8578 }, { 0x5579, 8581 }, { 0x5556, 8584 }, { 0x55EE, 8587 }, { 0x552F, 8590 }, { 0x55C6, 8593 }, { 0x55A0, 8596 }, { 0x5515, 8599 }, { 0x5586, 8602 }, { 0x554B, 8605 }, { 0x55E3, 8608 }, { 0x556C, 8611 }, { 0x5604, 8614 }, { 0x5544, 8617 }, { 0x55DC, 8620 }, { 0x55B5, 8623 }, { 0x55BC, 8626 }, { 0x551C, 8629 }, { 0x558D, 8632 }, { 0x5523, 8635 }, { 0x5594, 8638 }, { 0x5517, 8641 }, { 0x5588, 8644 }, { 0x550F, 8647 }, { 0x5580, 8650 }, { 0x5504, 8653 }, { 0x5575, 8656 }, { 0x5519, 8659 }, { 0x558A, 8662 }, { 0x5511, 8665 }, { 0x5582, 8668 }, { 0x550A, 8671 }, { 0x557B, 8674 }, { 0x562B, 8677 }, { 0x5610, 8681 }, { 0x5611, 8685 }, { 0x562A, 8689 }, { 0x5612, 8693 }, { 0x551F, 8697 }, { 0x5605, 8700 }, { 0x5590, 8703 }, { 0x560C, 8706 }, { 0x20A9, 8709 }, { 0x22BB, 8711 }, { 0x00A5, 8712 }, { 0x262F, 8714 }, { 0x2135, 8716 }, { 0x2625, 8718 }, { 0x269B, 8719 }, { 0x237E, 8721 }, { 0x2106, 8723 }, { 0x2105, 8725 }, { 0x20B5, 8727 }, { 0x00A2, 8729 }, { 0x5A51, 8731 }, { 0x5A56, 8734 }, { 0x5A52, 8737 }, { 0x5A55, 8740 }, { 0x5A54, 8743 }, { 0x5A59, 8746 }, { 0x5A50, 8749 }, { 0x5A58, 8752 }, { 0x5A57, 8755 }, { 0x5A53, 8758 }, { 0x5A2A, 8761 }, { 0x5A2F, 8765 }, { 0x5A2D, 8769 }, { 0x5A29, 8773 }, { 0x5A30, 8777 }, { 0x5A31, 8781 }, { 0x5A2C, 8785 }, { 0x5A2B, 8789 }, { 0x5A2E, 8793 }, { 0x5A32, 8797 }, { 0x5A00, 8801 }, { 0x5A03, 8804 }, { 0x5A01, 8807 }, { 0x5A05, 8810 }, { 0x5A02, 8813 }, { 0x5A04, 8816 }, { 0x5A1D, 8819 }, { 0x5A15, 8822 }, { 0x5A08, 8825 }, { 0x5A28, 8828 }, { 0x5A0E, 8831 }, { 0x5A06, 8834 }, { 0x5A24, 8837 }, { 0x5A20, 8840 }, { 0x5A18, 8843 }, { 0x5A1A, 8846 }, { 0x5A23, 8849 }, { 0x5A27, 8852 }, { 0x5A13, 8855 }, { 0x5A25, 8858 }, { 0x5A22, 8861 }, { 0x5A21, 8864 }, { 0x5A1E, 8867 }, { 0x5A0C, 8870 }, { 0x5A19, 8873 }, { 0x5A16, 8876 }, { 0x5A09, 8879 }, { 0x5A0F, 8882 }, { 0x5A07, 8885 }, { 0x5A1F, 8888 }, { 0x5A0B, 8891 }, { 0x5A11, 8894 }, { 0x5A17, 8897 }, { 0x5A1C, 8900 }, { 0x5A1B, 8903 }, { 0x5A26, 8906 }, { 0x5A14, 8909 }, { 0x5A0D, 8912 }, { 0x5A0A, 8915 }, { 0x5A12, 8918 }, { 0x5A10, 8921 }, { 0x5A41, 8924 }, { 0x5A40, 8928 }, { 0x5A4A, 8932 }, { 0x5A46, 8936 }, { 0x5A47, 8940 }, { 0x5A49, 8944 }, { 0x5A45, 8948 }, { 0x5A48, 8952 }, { 0x5A44, 8956 }, { 0x5A42, 8960 }, { 0x5A4B, 8964 }, { 0x5A35, 8968 }, { 0x5A34, 8972 }, { 0x5A36, 8976 }, { 0x5A33, 8980 }, { 0x5A4D, 8984 }, { 0x5A4C, 8989 }, { 0x5A43, 8994 }, { 0x5A5D, 8999 }, { 0x5A5E, 9002 }, { 0x5A5C, 9006 }, { 0x5A5F, 9009 }, { 0x221B, 9013 }, { 0x2593, 9015 }, { 0x22AE, 9017 }, { 0x22AC, 9020 }, { 0x2224, 9023 }, { 0x2AEE, 9026 }, { 0x220C, 9033 }, { 0x22EB, 9038 }, { 0x22ED, 9044 }, { 0x2280, 9052 }, { 0x22E0, 9055 }, { 0x2281, 9060 }, { 0x22E1, 9063 }, { 0x20AB, 9068 }, { 0x297F, 9070 }, { 0x22A4, 9073 }, { 0x2AF1, 9075 }, { 0x22F1, 9080 }, { 0x2304, 9084 }, { 0x2671, 9086 }, { 0x20AC, 9089 }, { 0x2E2D, 9091 }, { 0x2059, 9094 }, { 0x205B, 9097 }, { 0x2058, 9100 }, { 0x2725, 9103 }, { 0x2723, 9106 }, { 0x2722, 9109 }, { 0x002E, 9112 }, { 0x2588, 9114 }, { 0x27D7, 9116 }, { 0x23DB, 9119 }, { 0x2699, 9120 }, { 0x3013, 9121 }, { 0x200A, 9123 }, { 0x2388, 9125 }, { 0x26A1, 9127 }, { 0x2A1D, 9130 }, { 0x26B5, 9131 }, { 0x263E, 9132 }, { 0x27DB, 9135 }, { 0x27DA, 9139 }, { 0x2993, 9144 }, { 0x2E1C, 9148 }, { 0x258F, 9152 }, { 0x258E, 9156 }, { 0x294E, 9160 }, { 0x294A, 9167 }, { 0x294B, 9174 }, { 0x2950, 9181 }, { 0x297C, 9188 }, { 0x258B, 9191 }, { 0x25D6, 9195 }, { 0x258C, 9199 }, { 0x22A3, 9202 }, { 0x3008, 9204 }, { 0x2991, 9207 }, { 0x2B30, 9212 }, { 0x2B32, 9217 }, { 0x2997, 9222 }, { 0x3010, 9227 }, { 0x007B, 9231 }, { 0x23A9, 9234 }, { 0x23A7, 9239 }, { 0x23A8, 9244 }, { 0x230A, 9249 }, { 0x27D5, 9251 }, { 0x21AD, 9254 }, { 0x2194, 9258 }, { 0x21FC, 9261 }, { 0x21AE, 9268 }, { 0x21F9, 9273 }, { 0x2948, 9279 }, { 0x2B0C, 9285 }, { 0x2B04, 9289 }, { 0x21D4, 9293 }, { 0x21CE, 9297 }, { 0x2904, 9303 }, { 0x21FF, 9310 }, { 0x2589, 9314 }, { 0x258D, 9318 }, { 0x258A, 9322 }, { 0x2983, 9326 }, { 0x300E, 9330 }, { 0x301A, 9334 }, { 0x3018, 9338 }, { 0x3016, 9343 }, { 0x2985, 9347 }, { 0x300C, 9350 }, { 0x2E04, 9353 }, { 0x300A, 9357 }, { 0x29DA, 9361 }, { 0x201C, 9365 }, { 0x2E28, 9369 }, { 0x22C9, 9372 }, { 0x2E0C, 9377 }, { 0x2018, 9381 }, { 0x005B, 9385 }, { 0x298D, 9388 }, { 0x298F, 9396 }, { 0x2045, 9404 }, { 0x298B, 9409 }, { 0x23A3, 9414 }, { 0x23A1, 9419 }, { 0x23A2, 9424 }, { 0x29D8, 9428 }, { 0x2308, 9431 }, { 0x27DC, 9433 }, { 0x27C5, 9435 }, { 0x2E26, 9439 }, { 0x3014, 9443 }, { 0x29CF, 9447 }, { 0x2E20, 9452 }, { 0x23B8, 9457 }, { 0x22CB, 9461 }, { 0x0028, 9464 }, { 0x239D, 9466 }, { 0x239B, 9470 }, { 0x239C, 9474 }, { 0x2E02, 9477 }, { 0x2E09, 9480 }, { 0x2028, 9483 }, { 0x2A14, 9485 }, { 0x2A12, 9491 }, { 0x2A13, 9498 }, { 0x20A4, 9505 }, { 0x2AE6, 9507 }, { 0x27DE, 9515 }, { 0x27F7, 9518 }, { 0x27FA, 9522 }, { 0x27DD, 9527 }, { 0x27CC, 9530 }, { 0x27F5, 9532 }, { 0x27FB, 9535 }, { 0x27F8, 9540 }, { 0x27FD, 9544 }, { 0x2B33, 9550 }, { 0x27F6, 9554 }, { 0x27FC, 9557 }, { 0x27F9, 9562 }, { 0x27FE, 9566 }, { 0x27FF, 9572 }, { 0x26A5, 9576 }, { 0x2642, 9580 }, { 0x26A7, 9582 }, { 0x26A6, 9590 }, { 0x303C, 9594 }, { 0x20A5, 9596 }, { 0x29FF, 9598 }, { 0x226A, 9599 }, { 0x226B, 9601 }, { 0x22BC, 9603 }, { 0x2398, 9604 }, { 0x2423, 9606 }, { 0x272B, 9608 }, { 0x271B, 9612 }, { 0x2732, 9615 }, { 0x273C, 9618 }, { 0x27C3, 9622 }, { 0x27C4, 9624 }, { 0x2E19, 9626 }, { 0x303D, 9628 }, { 0x20B1, 9631 }, { 0x002B, 9633 }, { 0x2A2D, 9635 }, { 0x2A2E, 9641 }, { 0x2A39, 9647 }, { 0x2A25, 9651 }, { 0x2A28, 9656 }, { 0x2A22, 9661 }, { 0x2A24, 9667 }, { 0x2A26, 9672 }, { 0x2A27, 9677 }, { 0x2A23, 9682 }, { 0x2A72, 9688 }, { 0x6DFC, 9693 }, { 0x2256, 9695 }, { 0x02DA, 9699 }, { 0x2257, 9701 }, { 0x2E30, 9704 }, { 0x2218, 9706 }, { 0x223F, 9708 }, { 0x00AD, 9710 }, { 0x2721, 9712 }, { 0x262A, 9715 }, { 0x225B, 9718 }, { 0x22C6, 9720 }, { 0x2707, 9722 }, { 0x0E51, 9724 }, { 0x0E56, 9727 }, { 0x0E52, 9730 }, { 0x0E55, 9733 }, { 0x0E54, 9736 }, { 0x0E59, 9739 }, { 0x0E50, 9742 }, { 0x0E58, 9745 }, { 0x0E57, 9748 }, { 0x0E53, 9751 }, { 0x0E3F, 9754 }, { 0x0E2D, 9758 }, { 0x0E1A, 9762 }, { 0x0E14, 9766 }, { 0x0E0E, 9770 }, { 0x0E1D, 9774 }, { 0x0E1F, 9778 }, { 0x0E2B, 9782 }, { 0x0E2E, 9786 }, { 0x0E01, 9790 }, { 0x0E25, 9794 }, { 0x0E2C, 9798 }, { 0x0E26, 9802 }, { 0x0E21, 9805 }, { 0x0E19, 9809 }, { 0x0E13, 9813 }, { 0x0E1B, 9817 }, { 0x0E23, 9821 }, { 0x0E24, 9825 }, { 0x0E0B, 9828 }, { 0x0E2A, 9832 }, { 0x0E29, 9836 }, { 0x0E28, 9840 }, { 0x0E15, 9844 }, { 0x0E0F, 9848 }, { 0x0E27, 9852 }, { 0x0E22, 9856 }, { 0x0E0D, 9860 }, { 0x0E08, 9864 }, { 0x0E0C, 9868 }, { 0x0E0A, 9872 }, { 0x0E09, 9876 }, { 0x0E02, 9880 }, { 0x0E05, 9884 }, { 0x0E03, 9888 }, { 0x0E04, 9892 }, { 0x0E06, 9896 }, { 0x0E48, 9900 }, { 0x0E49, 9904 }, { 0x0E4A, 9908 }, { 0x0E4B, 9912 }, { 0x0E31, 9916 }, { 0x0E07, 9920 }, { 0x0E1E, 9924 }, { 0x0E1C, 9928 }, { 0x0E20, 9932 }, { 0x0E10, 9936 }, { 0x0E18, 9940 }, { 0x0E16, 9944 }, { 0x0E17, 9948 }, { 0x0E12, 9952 }, { 0x0E11, 9956 }, { 0x0E30, 9960 }, { 0x0E40, 9964 }, { 0x0E34, 9968 }, { 0x0E42, 9972 }, { 0x0E38, 9976 }, { 0x0E32, 9980 }, { 0x0E41, 9984 }, { 0x0E43, 9988 }, { 0x0E44, 9993 }, { 0x0E33, 9998 }, { 0x0E35, 10002 }, { 0x0E36, 10006 }, { 0x0E39, 10010 }, { 0x0E37, 10014 }, { 0x0E5B, 10018 }, { 0x0E4F, 10021 }, { 0x0E3A, 10024 }, { 0x0E46, 10027 }, { 0x0E4D, 10030 }, { 0x0E4E, 10033 }, { 0x0E47, 10036 }, { 0x0E2F, 10039 }, { 0x0E5A, 10042 }, { 0x0E45, 10045 }, { 0x0E4C, 10048 }, { 0x2009, 10051 }, { 0x29FE, 10053 }, { 0x22A8, 10054 }, { 0x238C, 10055 }, { 0x22D8, 10057 }, { 0x22D9, 10060 }, { 0x301C, 10063 }, { 0x2B3F, 10065 }, { 0x2933, 10070 }, { 0x6E4F, 10075 }, { 0x3030, 10078 }, { 0x2307, 10080 }, { 0x6E4B, 10082 }, { 0x2670, 10084 }, { 0x2060, 10087 }, { 0x200B, 10089 }, { 0x200D, 10092 }, { 0x6EFF, 10095 }, { 0x200C, 10099 }, { 0x299F, 10102 }, { 0x00B4, 10104 }, { 0x2220, 10106 }, { 0x299E, 10107 }, { 0x29A4, 10111 }, { 0x2648, 10114 }, { 0x2936, 10115 }, { 0x2937, 10121 }, { 0x2934, 10127 }, { 0x2935, 10133 }, { 0x2712, 10139 }, { 0x2600, 10141 }, { 0x2663, 10145 }, { 0x2691, 10148 }, { 0x2726, 10150 }, { 0x261A, 10154 }, { 0x26B8, 10158 }, { 0x2605, 10161 }, { 0x2B1D, 10163 }, { 0x265A, 10167 }, { 0x265F, 10170 }, { 0x265C, 10173 }, { 0x265B, 10176 }, { 0x265D, 10179 }, { 0x265E, 10182 }, { 0x2665, 10185 }, { 0x2B24, 10188 }, { 0x2B1B, 10191 }, { 0x25E3, 10194 }, { 0x25E2, 10198 }, { 0x261B, 10202 }, { 0x2617, 10206 }, { 0x2B51, 10209 }, { 0x25AA, 10212 }, { 0x2B29, 10215 }, { 0x2B2A, 10218 }, { 0x2660, 10221 }, { 0x25E4, 10224 }, { 0x25E5, 10228 }, { 0x29D3, 10232 }, { 0x272C, 10234 }, { 0x25CF, 10238 }, { 0x2689, 10240 }, { 0x29ED, 10246 }, { 0x2688, 10251 }, { 0x25FE, 10257 }, { 0x25FC, 10261 }, { 0x2B25, 10264 }, { 0x2B27, 10267 }, { 0x25A0, 10270 }, { 0x25C6, 10272 }, { 0x2666, 10274 }, { 0x29EA, 10277 }, { 0x2756, 10282 }, { 0x2B22, 10287 }, { 0x29EB, 10289 }, { 0x263B, 10291 }, { 0x26C2, 10294 }, { 0x26C3, 10297 }, { 0x273F, 10300 }, { 0x2B1F, 10302 }, { 0x2702, 10304 }, { 0x2B2E, 10306 }, { 0x25AE, 10309 }, { 0x29D7, 10312 }, { 0x204C, 10314 }, { 0x25AC, 10317 }, { 0x260E, 10319 }, { 0x267B, 10321 }, { 0x2B2C, 10325 }, { 0x27A1, 10328 }, { 0x204D, 10331 }, { 0x27A4, 10334 }, { 0x25B4, 10337 }, { 0x25B2, 10341 }, { 0x25BE, 10344 }, { 0x25BC, 10348 }, { 0x25C2, 10351 }, { 0x25C4, 10355 }, { 0x25C0, 10358 }, { 0x25B0, 10361 }, { 0x25B8, 10363 }, { 0x25BA, 10367 }, { 0x2B53, 10370 }, { 0x25B6, 10373 }, { 0x2422, 10376 }, { 0x02D8, 10378 }, { 0x1752, 10379 }, { 0x1753, 10383 }, { 0x1740, 10387 }, { 0x1741, 10390 }, { 0x1742, 10393 }, { 0x174A, 10396 }, { 0x1747, 10399 }, { 0x1744, 10402 }, { 0x1751, 10405 }, { 0x1743, 10408 }, { 0x174E, 10411 }, { 0x174B, 10414 }, { 0x1748, 10417 }, { 0x1749, 10420 }, { 0x174D, 10423 }, { 0x1750, 10426 }, { 0x1746, 10429 }, { 0x174F, 10432 }, { 0x174C, 10435 }, { 0x1745, 10438 }, { 0x2038, 10441 }, { 0x2041, 10442 }, { 0x02C7, 10445 }, { 0x26B3, 10446 }, { 0x2713, 10447 }, { 0x239A, 10449 }, { 0x2050, 10452 }, { 0x2601, 10454 }, { 0x003A, 10455 }, { 0x20A1, 10456 }, { 0x2254, 10458 }, { 0x2604, 10460 }, { 0x002C, 10461 }, { 0x2628, 10462 }, { 0x2629, 10465 }, { 0x23AA, 10468 }, { 0x22CE, 10471 }, { 0x22CF, 10474 }, { 0x2138, 10477 }, { 0x225C, 10479 }, { 0x0031, 10482 }, { 0x2488, 10484 }, { 0x0036, 10488 }, { 0x248D, 10490 }, { 0x0032, 10494 }, { 0x2489, 10496 }, { 0x0035, 10500 }, { 0x248C, 10502 }, { 0x0034, 10506 }, { 0x248B, 10508 }, { 0x0039, 10512 }, { 0x2490, 10514 }, { 0x0030, 10518 }, { 0x0038, 10520 }, { 0x248F, 10522 }, { 0x0037, 10526 }, { 0x248E, 10528 }, { 0x0033, 10532 }, { 0x248A, 10534 }, { 0x3003, 10538 }, { 0x2641, 10540 }, { 0x23DA, 10541 }, { 0x2733, 10543 }, { 0x2734, 10546 }, { 0x2735, 10550 }, { 0x2737, 10554 }, { 0x2741, 10559 }, { 0x274A, 10564 }, { 0x23CF, 10568 }, { 0x2205, 10570 }, { 0x29B4, 10572 }, { 0x29B3, 10578 }, { 0x29B2, 10584 }, { 0x29B1, 10590 }, { 0x2386, 10594 }, { 0x225D, 10596 }, { 0x22DE, 10600 }, { 0x22DF, 10604 }, { 0x22DC, 10608 }, { 0x22DD, 10612 }, { 0x22D5, 10616 }, { 0x232B, 10620 }, { 0x2326, 10624 }, { 0x2107, 10628 }, { 0x262B, 10630 }, { 0x263D, 10632 }, { 0x2322, 10635 }, { 0x2137, 10636 }, { 0x0060, 10638 }, { 0x03D6, 10640 }, { 0x0387, 10643 }, { 0x03D7, 10646 }, { 0x7175, 10649 }, { 0x7176, 10653 }, { 0x03D5, 10659 }, { 0x03FC, 10662 }, { 0x03F1, 10667 }, { 0x717D, 10670 }, { 0x7177, 10674 }, { 0x03D0, 10678 }, { 0x7180, 10681 }, { 0x717F, 10685 }, { 0x717C, 10689 }, { 0x1FFD, 10692 }, { 0x7179, 10694 }, { 0x718A, 10697 }, { 0x1FFE, 10700 }, { 0x1FDE, 10702 }, { 0x1FDD, 10706 }, { 0x1FDF, 10710 }, { 0x03F0, 10714 }, { 0x7183, 10717 }, { 0x0375, 10720 }, { 0x1FBF, 10724 }, { 0x1FCE, 10726 }, { 0x1FCD, 10730 }, { 0x1FCF, 10734 }, { 0x037C, 10738 }, { 0x03BC, 10744 }, { 0x03BD, 10748 }, { 0x03C0, 10752 }, { 0x03BE, 10756 }, { 0x03C7, 10760 }, { 0x03B7, 10764 }, { 0x1F75, 10768 }, { 0x1FC4, 10774 }, { 0x1F21, 10782 }, { 0x1F25, 10788 }, { 0x1F95, 10796 }, { 0x1F23, 10806 }, { 0x1F93, 10814 }, { 0x1F27, 10824 }, { 0x1F97, 10832 }, { 0x1F91, 10842 }, { 0x1F20, 10850 }, { 0x1F24, 10856 }, { 0x1F94, 10864 }, { 0x1F22, 10874 }, { 0x1F92, 10882 }, { 0x1F26, 10892 }, { 0x1F96, 10900 }, { 0x1F90, 10910 }, { 0x03AE, 10918 }, { 0x1F74, 10924 }, { 0x1FC2, 10930 }, { 0x1FC6, 10938 }, { 0x1FC7, 10944 }, { 0x1FC3, 10952 }, { 0x03C6, 10958 }, { 0x03C8, 10962 }, { 0x03C1, 10966 }, { 0x1FE5, 10970 }, { 0x1FE4, 10976 }, { 0x03FB, 10982 }, { 0x03F8, 10986 }, { 0x03C4, 10990 }, { 0x03B2, 10994 }, { 0x0371, 10998 }, { 0x03B9, 11002 }, { 0x1F77, 11006 }, { 0x1F31, 11012 }, { 0x1F35, 11018 }, { 0x1F33, 11026 }, { 0x1F37, 11034 }, { 0x1F30, 11042 }, { 0x1F34, 11048 }, { 0x1F32, 11056 }, { 0x1F36, 11064 }, { 0x03AF, 11072 }, { 0x1F76, 11078 }, { 0x1FD1, 11084 }, { 0x1FD0, 11090 }, { 0x03CA, 11096 }, { 0x1FD3, 11102 }, { 0x0390, 11110 }, { 0x1FD2, 11118 }, { 0x1FD7, 11126 }, { 0x1FD6, 11134 }, { 0x03B6, 11140 }, { 0x03B1, 11144 }, { 0x1F71, 11148 }, { 0x1FB4, 11154 }, { 0x1F01, 11162 }, { 0x1F05, 11168 }, { 0x1F85, 11176 }, { 0x1F03, 11186 }, { 0x1F83, 11194 }, { 0x1F07, 11204 }, { 0x1F87, 11212 }, { 0x1F81, 11222 }, { 0x1F00, 11230 }, { 0x1F04, 11236 }, { 0x1F84, 11244 }, { 0x1F02, 11254 }, { 0x1F82, 11262 }, { 0x1F06, 11272 }, { 0x1F86, 11280 }, { 0x1F80, 11290 }, { 0x03AC, 11298 }, { 0x1F70, 11304 }, { 0x1FB2, 11310 }, { 0x1FB1, 11318 }, { 0x1FB0, 11324 }, { 0x1FB6, 11330 }, { 0x1FB7, 11336 }, { 0x1FB3, 11344 }, { 0x03B4, 11350 }, { 0x03C2, 11354 }, { 0x03B3, 11359 }, { 0x03BA, 11363 }, { 0x03DF, 11367 }, { 0x03BB, 11371 }, { 0x03C9, 11375 }, { 0x1F7D, 11379 }, { 0x1FF4, 11385 }, { 0x1F61, 11393 }, { 0x1F65, 11399 }, { 0x1FA5, 11407 }, { 0x1F63, 11417 }, { 0x1FA3, 11425 }, { 0x1F67, 11435 }, { 0x1FA7, 11443 }, { 0x1FA1, 11453 }, { 0x1F60, 11461 }, { 0x1F64, 11467 }, { 0x1FA4, 11475 }, { 0x1F62, 11485 }, { 0x1FA2, 11493 }, { 0x1F66, 11503 }, { 0x1FA6, 11511 }, { 0x1FA0, 11521 }, { 0x03CE, 11529 }, { 0x1F7C, 11535 }, { 0x1FF2, 11541 }, { 0x1FF6, 11549 }, { 0x1FF7, 11555 }, { 0x1FF3, 11563 }, { 0x03E1, 11569 }, { 0x03C3, 11573 }, { 0x03B8, 11577 }, { 0x03DB, 11581 }, { 0x03D9, 11585 }, { 0x0373, 11590 }, { 0x03DD, 11595 }, { 0x03B5, 11599 }, { 0x1F73, 11603 }, { 0x1F11, 11609 }, { 0x1F15, 11615 }, { 0x1F13, 11623 }, { 0x1F10, 11631 }, { 0x1F14, 11637 }, { 0x1F12, 11645 }, { 0x03AD, 11653 }, { 0x1F72, 11659 }, { 0x03BF, 11665 }, { 0x1F79, 11669 }, { 0x1F41, 11675 }, { 0x1F45, 11681 }, { 0x1F43, 11689 }, { 0x1F40, 11697 }, { 0x1F44, 11703 }, { 0x1F42, 11711 }, { 0x03CC, 11719 }, { 0x1F78, 11725 }, { 0x03C5, 11731 }, { 0x1F7B, 11735 }, { 0x1F51, 11741 }, { 0x1F55, 11747 }, { 0x1F53, 11755 }, { 0x1F57, 11763 }, { 0x1F50, 11771 }, { 0x1F54, 11777 }, { 0x1F52, 11785 }, { 0x1F56, 11793 }, { 0x03CD, 11801 }, { 0x1F7A, 11807 }, { 0x1FE1, 11813 }, { 0x1FE0, 11819 }, { 0x03CB, 11825 }, { 0x1FE3, 11831 }, { 0x03B0, 11839 }, { 0x1FE2, 11847 }, { 0x1FE7, 11855 }, { 0x1FE6, 11863 }, { 0x0377, 11869 }, { 0x037D, 11874 }, { 0x037B, 11881 }, { 0x03D1, 11887 }, { 0x717E, 11890 }, { 0x7178, 11894 }, { 0x0384, 11898 }, { 0x1FEF, 11900 }, { 0x9200, 11902 }, { 0x9201, 11906 }, { 0x9202, 11910 }, { 0x9203, 11914 }, { 0x9204, 11918 }, { 0x9205, 11922 }, { 0x9206, 11926 }, { 0x9207, 11930 }, { 0x9208, 11934 }, { 0x9209, 11938 }, { 0x920A, 11942 }, { 0x920B, 11946 }, { 0x920C, 11950 }, { 0x920D, 11954 }, { 0x920E, 11958 }, { 0x920F, 11962 }, { 0x9210, 11966 }, { 0x9211, 11970 }, { 0x9212, 11974 }, { 0x9213, 11978 }, { 0x9214, 11982 }, { 0x9215, 11986 }, { 0x9216, 11990 }, { 0x9217, 11994 }, { 0x9218, 11998 }, { 0x9219, 12002 }, { 0x921A, 12006 }, { 0x921B, 12010 }, { 0x921C, 12014 }, { 0x7187, 12018 }, { 0x7186, 12021 }, { 0x7188, 12024 }, { 0x03F3, 12027 }, { 0x03DE, 12030 }, { 0x03E0, 12033 }, { 0x1D28, 12036 }, { 0x1D2A, 12041 }, { 0x1D29, 12046 }, { 0x1D26, 12051 }, { 0x1D27, 12056 }, { 0x03DA, 12061 }, { 0x03D8, 12064 }, { 0x03DC, 12068 }, { 0x03F2, 12071 }, { 0x03F5, 12075 }, { 0x7184, 12079 }, { 0x717A, 12082 }, { 0x7185, 12085 }, { 0x03CF, 12088 }, { 0x03F4, 12092 }, { 0x03FE, 12096 }, { 0x039C, 12102 }, { 0x039D, 12106 }, { 0x03A0, 12110 }, { 0x039E, 12114 }, { 0x03A7, 12118 }, { 0x0397, 12122 }, { 0x1FCB, 12126 }, { 0x1F29, 12132 }, { 0x1F2D, 12138 }, { 0x1F9D, 12146 }, { 0x1F2B, 12156 }, { 0x1F9B, 12164 }, { 0x1F2F, 12174 }, { 0x1F9F, 12182 }, { 0x1F99, 12192 }, { 0x1F28, 12200 }, { 0x1F2C, 12206 }, { 0x1F9C, 12214 }, { 0x1F2A, 12224 }, { 0x1F9A, 12232 }, { 0x1F2E, 12242 }, { 0x1F9E, 12250 }, { 0x1F98, 12260 }, { 0x0389, 12268 }, { 0x1FCA, 12274 }, { 0x1FCC, 12280 }, { 0x03A6, 12286 }, { 0x03A8, 12290 }, { 0x03A1, 12294 }, { 0x1FEC, 12298 }, { 0x03FA, 12304 }, { 0x03F7, 12308 }, { 0x03A4, 12312 }, { 0x0392, 12316 }, { 0x0370, 12320 }, { 0x0399, 12324 }, { 0x1FDB, 12328 }, { 0x1F39, 12334 }, { 0x1F3D, 12340 }, { 0x1F3B, 12348 }, { 0x1F3F, 12356 }, { 0x1F38, 12364 }, { 0x1F3C, 12370 }, { 0x1F3A, 12378 }, { 0x1F3E, 12386 }, { 0x038A, 12394 }, { 0x1FDA, 12400 }, { 0x1FD9, 12406 }, { 0x1FD8, 12412 }, { 0x03AA, 12418 }, { 0x0396, 12424 }, { 0x0391, 12428 }, { 0x1FBB, 12432 }, { 0x1F09, 12438 }, { 0x1F0D, 12444 }, { 0x1F8D, 12452 }, { 0x1F0B, 12462 }, { 0x1F8B, 12470 }, { 0x1F0F, 12480 }, { 0x1F8F, 12488 }, { 0x1F89, 12498 }, { 0x1F08, 12506 }, { 0x1F0C, 12512 }, { 0x1F8C, 12520 }, { 0x1F0A, 12530 }, { 0x1F8A, 12538 }, { 0x1F0E, 12548 }, { 0x1F8E, 12556 }, { 0x1F88, 12566 }, { 0x0386, 12574 }, { 0x1FBA, 12580 }, { 0x1FB9, 12586 }, { 0x1FB8, 12592 }, { 0x1FBC, 12598 }, { 0x0394, 12604 }, { 0x0393, 12608 }, { 0x039A, 12612 }, { 0x039B, 12616 }, { 0x03A9, 12620 }, { 0x1FFB, 12624 }, { 0x1F69, 12630 }, { 0x1F6D, 12636 }, { 0x1FAD, 12644 }, { 0x1F6B, 12654 }, { 0x1FAB, 12662 }, { 0x1F6F, 12672 }, { 0x1FAF, 12680 }, { 0x1FA9, 12690 }, { 0x1F68, 12698 }, { 0x1F6C, 12704 }, { 0x1FAC, 12712 }, { 0x1F6A, 12722 }, { 0x1FAA, 12730 }, { 0x1F6E, 12740 }, { 0x1FAE, 12748 }, { 0x1FA8, 12758 }, { 0x038F, 12766 }, { 0x1FFA, 12772 }, { 0x1FFC, 12778 }, { 0x03A3, 12784 }, { 0x0398, 12788 }, { 0x0372, 12792 }, { 0x0395, 12797 }, { 0x1FC9, 12801 }, { 0x1F19, 12807 }, { 0x1F1D, 12813 }, { 0x1F1B, 12821 }, { 0x1F18, 12829 }, { 0x1F1C, 12835 }, { 0x1F1A, 12843 }, { 0x0388, 12851 }, { 0x1FC8, 12857 }, { 0x039F, 12863 }, { 0x1FF9, 12867 }, { 0x1F49, 12873 }, { 0x1F4D, 12879 }, { 0x1F4B, 12887 }, { 0x1F48, 12895 }, { 0x1F4C, 12901 }, { 0x1F4A, 12909 }, { 0x038C, 12917 }, { 0x1FF8, 12923 }, { 0x03A5, 12929 }, { 0x1FEB, 12933 }, { 0x1F59, 12939 }, { 0x1F5D, 12945 }, { 0x1F5B, 12953 }, { 0x1F5F, 12961 }, { 0x038E, 12969 }, { 0x1FEA, 12975 }, { 0x1FE9, 12981 }, { 0x1FE8, 12987 }, { 0x03AB, 12993 }, { 0x0376, 12999 }, { 0x03F9, 13004 }, { 0x03FF, 13009 }, { 0x03FD, 13016 }, { 0x717B, 13022 }, { 0x1FBD, 13025 }, { 0x7182, 13027 }, { 0x9245, 13031 }, { 0x0374, 13034 }, { 0x03D2, 13037 }, { 0x03D3, 13042 }, { 0x03D4, 13049 }, { 0x7181, 13056 }, { 0x037E, 13059 }, { 0x03F6, 13062 }, { 0x7189, 13067 }, { 0x1FEE, 13071 }, { 0x1FED, 13075 }, { 0x1FC1, 13079 }, { 0x0385, 13083 }, { 0x1D6A, 13086 }, { 0x1D69, 13091 }, { 0x1D68, 13096 }, { 0x1D66, 13101 }, { 0x1D67, 13106 }, { 0x7141, 13111 }, { 0x7142, 13116 }, { 0x7152, 13121 }, { 0x714B, 13127 }, { 0x7140, 13133 }, { 0x7154, 13138 }, { 0x714D, 13144 }, { 0x7157, 13150 }, { 0x7150, 13155 }, { 0x7149, 13160 }, { 0x7155, 13165 }, { 0x7143, 13171 }, { 0x7145, 13175 }, { 0x7153, 13180 }, { 0x714C, 13186 }, { 0x714F, 13192 }, { 0x7148, 13197 }, { 0x7146, 13202 }, { 0x714E, 13207 }, { 0x7144, 13213 }, { 0x7151, 13217 }, { 0x714A, 13222 }, { 0x7147, 13227 }, { 0x7156, 13232 }, { 0x7170, 13238 }, { 0x7173, 13243 }, { 0x7158, 13248 }, { 0x715D, 13253 }, { 0x7174, 13258 }, { 0x7159, 13263 }, { 0x716A, 13267 }, { 0x7171, 13272 }, { 0x7164, 13277 }, { 0x715C, 13281 }, { 0x716E, 13285 }, { 0x7172, 13290 }, { 0x7169, 13295 }, { 0x716B, 13299 }, { 0x7165, 13304 }, { 0x716F, 13308 }, { 0x7163, 13313 }, { 0x715B, 13317 }, { 0x715E, 13321 }, { 0x716C, 13326 }, { 0x715A, 13331 }, { 0x7162, 13335 }, { 0x7168, 13339 }, { 0x7160, 13343 }, { 0x7161, 13347 }, { 0x715F, 13353 }, { 0x716D, 13357 }, { 0x7166, 13362 }, { 0x7167, 13366 }, { 0x1FC0, 13372 }, { 0x921D, 13374 }, { 0x921E, 13378 }, { 0x921F, 13382 }, { 0x9220, 13386 }, { 0x9221, 13390 }, { 0x9222, 13394 }, { 0x9223, 13398 }, { 0x9224, 13402 }, { 0x9225, 13406 }, { 0x9226, 13410 }, { 0x9227, 13414 }, { 0x9228, 13418 }, { 0x9229, 13422 }, { 0x922A, 13426 }, { 0x922B, 13430 }, { 0x922C, 13434 }, { 0x922D, 13438 }, { 0x922E, 13442 }, { 0x922F, 13446 }, { 0x9230, 13450 }, { 0x9231, 13454 }, { 0x9232, 13458 }, { 0x9233, 13462 }, { 0x9234, 13466 }, { 0x9235, 13470 }, { 0x9236, 13474 }, { 0x9237, 13478 }, { 0x9238, 13482 }, { 0x9239, 13486 }, { 0x923A, 13490 }, { 0x923B, 13494 }, { 0x923C, 13498 }, { 0x923D, 13502 }, { 0x923E, 13506 }, { 0x923F, 13510 }, { 0x9240, 13514 }, { 0x9241, 13518 }, { 0x037A, 13522 }, { 0x1FBE, 13524 }, { 0x2724, 13526 }, { 0x271C, 13530 }, { 0x2764, 13534 }, { 0x27A6, 13537 }, { 0x27A5, 13544 }, { 0x2714, 13551 }, { 0x2738, 13554 }, { 0x274B, 13560 }, { 0x271A, 13565 }, { 0x2763, 13568 }, { 0x27AD, 13573 }, { 0x279A, 13579 }, { 0x2798, 13583 }, { 0x27AE, 13587 }, { 0x2718, 13593 }, { 0x27A0, 13596 }, { 0x275E, 13601 }, { 0x275D, 13607 }, { 0x275C, 13614 }, { 0x275B, 13620 }, { 0x2746, 13627 }, { 0x2748, 13630 }, { 0x2731, 13632 }, { 0x272E, 13634 }, { 0x275A, 13638 }, { 0x2799, 13641 }, { 0x2762, 13644 }, { 0x2794, 13648 }, { 0x279C, 13652 }, { 0x27BD, 13656 }, { 0x2770, 13660 }, { 0x276E, 13665 }, { 0x2716, 13671 }, { 0x2771, 13674 }, { 0x276F, 13679 }, { 0x27B9, 13685 }, { 0x27B7, 13690 }, { 0x27B8, 13695 }, { 0x27A8, 13699 }, { 0x273D, 13704 }, { 0x2743, 13707 }, { 0x279E, 13711 }, { 0x27BB, 13715 }, { 0x2302, 13719 }, { 0x22B7, 13720 }, { 0x2253, 13722 }, { 0x592E, 13728 }, { 0x592F, 13732 }, { 0x592C, 13736 }, { 0x592D, 13740 }, { 0x592B, 13745 }, { 0x5901, 13749 }, { 0x5906, 13753 }, { 0x5902, 13757 }, { 0x5905, 13761 }, { 0x5904, 13765 }, { 0x5909, 13769 }, { 0x5900, 13773 }, { 0x5908, 13777 }, { 0x5907, 13781 }, { 0x5903, 13785 }, { 0x5927, 13789 }, { 0x592A, 13793 }, { 0x5928, 13797 }, { 0x5929, 13801 }, { 0x5926, 13805 }, { 0x5922, 13809 }, { 0x5924, 13813 }, { 0x5919, 13817 }, { 0x5921, 13821 }, { 0x5918, 13825 }, { 0x590C, 13829 }, { 0x591F, 13833 }, { 0x590A, 13837 }, { 0x591C, 13841 }, { 0x5917, 13845 }, { 0x5914, 13849 }, { 0x5923, 13853 }, { 0x5925, 13857 }, { 0x5915, 13861 }, { 0x591A, 13865 }, { 0x590E, 13869 }, { 0x5912, 13873 }, { 0x5920, 13877 }, { 0x591D, 13881 }, { 0x591B, 13885 }, { 0x5910, 13889 }, { 0x5913, 13893 }, { 0x590B, 13897 }, { 0x590D, 13901 }, { 0x5911, 13905 }, { 0x5916, 13909 }, { 0x590F, 13913 }, { 0x591E, 13917 }, { 0x17D7, 13921 }, { 0x17D4, 13925 }, { 0x17CF, 13928 }, { 0x17D2, 13931 }, { 0x17CC, 13934 }, { 0x17CB, 13937 }, { 0x17D8, 13940 }, { 0x17D6, 13943 }, { 0x17D9, 13948 }, { 0x17D0, 13952 }, { 0x17D1, 13956 }, { 0x17CE, 13959 }, { 0x17DA, 13962 }, { 0x17C6, 13965 }, { 0x17C7, 13968 }, { 0x17CA, 13971 }, { 0x17DD, 13974 }, { 0x17D5, 13977 }, { 0x17D3, 13980 }, { 0x17C9, 13983 }, { 0x17CD, 13986 }, { 0x17DC, 13989 }, { 0x17C8, 13992 }, { 0x17E1, 13995 }, { 0x17E6, 13998 }, { 0x17E2, 14001 }, { 0x17E5, 14004 }, { 0x17E4, 14007 }, { 0x17E9, 14010 }, { 0x17E0, 14013 }, { 0x17E8, 14016 }, { 0x17E7, 14019 }, { 0x17E3, 14022 }, { 0x17C1, 14025 }, { 0x17B7, 14029 }, { 0x17BB, 14033 }, { 0x17B9, 14037 }, { 0x17B6, 14041 }, { 0x17C2, 14045 }, { 0x17C3, 14049 }, { 0x17C5, 14053 }, { 0x17C0, 14057 }, { 0x17B8, 14061 }, { 0x17BE, 14065 }, { 0x17C4, 14069 }, { 0x17BD, 14073 }, { 0x17BC, 14077 }, { 0x17BF, 14081 }, { 0x17BA, 14085 }, { 0x17B5, 14089 }, { 0x17B4, 14093 }, { 0x1794, 14097 }, { 0x1785, 14100 }, { 0x1787, 14103 }, { 0x178A, 14106 }, { 0x178C, 14109 }, { 0x17A0, 14112 }, { 0x1780, 14115 }, { 0x1782, 14118 }, { 0x17A1, 14121 }, { 0x179B, 14124 }, { 0x1798, 14127 }, { 0x1793, 14130 }, { 0x1796, 14133 }, { 0x17A2, 14136 }, { 0x179A, 14139 }, { 0x179F, 14142 }, { 0x178F, 14145 }, { 0x1791, 14148 }, { 0x179C, 14151 }, { 0x1799, 14154 }, { 0x1786, 14157 }, { 0x1788, 14160 }, { 0x1781, 14163 }, { 0x1783, 14166 }, { 0x1784, 14169 }, { 0x178E, 14172 }, { 0x1789, 14175 }, { 0x1795, 14178 }, { 0x1797, 14181 }, { 0x179D, 14184 }, { 0x179E, 14187 }, { 0x1790, 14190 }, { 0x1792, 14193 }, { 0x178B, 14196 }, { 0x178D, 14199 }, { 0x19F3, 14202 }, { 0x19E3, 14206 }, { 0x19FA, 14210 }, { 0x19EA, 14214 }, { 0x17F3, 14218 }, { 0x17F2, 14223 }, { 0x17F0, 14228 }, { 0x17F4, 14233 }, { 0x17F1, 14238 }, { 0x17F5, 14243 }, { 0x17F8, 14248 }, { 0x17F7, 14253 }, { 0x17F9, 14258 }, { 0x17F6, 14263 }, { 0x19F2, 14268 }, { 0x19E2, 14272 }, { 0x19F4, 14276 }, { 0x19E4, 14280 }, { 0x19F1, 14284 }, { 0x19E1, 14288 }, { 0x19F5, 14292 }, { 0x19E5, 14296 }, { 0x19FD, 14300 }, { 0x19ED, 14304 }, { 0x19FC, 14308 }, { 0x19EC, 14312 }, { 0x19FE, 14316 }, { 0x19EE, 14320 }, { 0x19FB, 14324 }, { 0x19EB, 14328 }, { 0x19FF, 14332 }, { 0x19EF, 14336 }, { 0x19F8, 14340 }, { 0x19E8, 14344 }, { 0x19F7, 14348 }, { 0x19E7, 14352 }, { 0x19F9, 14356 }, { 0x19E9, 14360 }, { 0x19F6, 14364 }, { 0x19E6, 14368 }, { 0x19F0, 14372 }, { 0x19E0, 14375 }, { 0x17DB, 14378 }, { 0x17AD, 14382 }, { 0x17AF, 14386 }, { 0x17A5, 14390 }, { 0x17A7, 14394 }, { 0x17AB, 14398 }, { 0x17AE, 14402 }, { 0x17A4, 14406 }, { 0x17B0, 14410 }, { 0x17A3, 14414 }, { 0x17B3, 14418 }, { 0x17A6, 14422 }, { 0x17B1, 14426 }, { 0x17B2, 14432 }, { 0x17A8, 14438 }, { 0x17A9, 14442 }, { 0x17AC, 14446 }, { 0x17AA, 14450 }, { 0x27D8, 14454 }, { 0x27D9, 14457 }, { 0x2A1E, 14460 }, { 0x25EF, 14464 }, { 0x2AFC, 14466 }, { 0x271D, 14471 }, { 0x0061, 14473 }, { 0x0227, 14477 }, { 0x01E1, 14484 }, { 0x1EA1, 14493 }, { 0x1EA3, 14500 }, { 0x00E5, 14507 }, { 0x01FB, 14514 }, { 0x1E01, 14523 }, { 0x00E1, 14530 }, { 0x0103, 14536 }, { 0x1EB7, 14542 }, { 0x1EB3, 14551 }, { 0x1EAF, 14560 }, { 0x1EB1, 14568 }, { 0x1EB5, 14576 }, { 0x01CE, 14584 }, { 0x00E0, 14590 }, { 0x1E9A, 14596 }, { 0x00E3, 14604 }, { 0x0201, 14610 }, { 0x0101, 14617 }, { 0x0105, 14623 }, { 0x2C65, 14629 }, { 0x0203, 14635 }, { 0x00E4, 14642 }, { 0x01DF, 14648 }, { 0x1D8F, 14656 }, { 0x00E2, 14663 }, { 0x1EAD, 14669 }, { 0x1EA9, 14678 }, { 0x1EA5, 14687 }, { 0x1EA7, 14695 }, { 0x1EAB, 14703 }, { 0x0062, 14711 }, { 0x1E03, 14715 }, { 0x1E05, 14722 }, { 0x0253, 14729 }, { 0x1E07, 14735 }, { 0x1D6C, 14742 }, { 0x0180, 14749 }, { 0x0183, 14755 }, { 0x1D80, 14761 }, { 0x0063, 14768 }, { 0x010B, 14772 }, { 0x0255, 14779 }, { 0x0188, 14785 }, { 0x0107, 14791 }, { 0x010D, 14797 }, { 0x023C, 14803 }, { 0x00E7, 14809 }, { 0x1E09, 14815 }, { 0x0109, 14823 }, { 0x0064, 14829 }, { 0x1E0B, 14833 }, { 0x1E0D, 14840 }, { 0x0221, 14847 }, { 0x0257, 14853 }, { 0x1D91, 14859 }, { 0x1E0F, 14867 }, { 0x0256, 14874 }, { 0x010F, 14880 }, { 0x1D6D, 14886 }, { 0x0111, 14893 }, { 0x018C, 14899 }, { 0x1E11, 14905 }, { 0x1D81, 14911 }, { 0x1E13, 14918 }, { 0x0065, 14925 }, { 0x0117, 14929 }, { 0x1EB9, 14936 }, { 0x1EBB, 14943 }, { 0x00E9, 14950 }, { 0x0115, 14956 }, { 0x011B, 14962 }, { 0x00E8, 14968 }, { 0x2C78, 14974 }, { 0x1EBD, 14980 }, { 0x1E1B, 14986 }, { 0x0205, 14993 }, { 0x0113, 15000 }, { 0x1E17, 15006 }, { 0x1E15, 15014 }, { 0x0119, 15022 }, { 0x0247, 15028 }, { 0x0229, 15034 }, { 0x1E1D, 15040 }, { 0x0207, 15048 }, { 0x00EB, 15055 }, { 0x1D92, 15061 }, { 0x00EA, 15068 }, { 0x1EC7, 15074 }, { 0x1EC3, 15083 }, { 0x1EBF, 15092 }, { 0x1EC1, 15100 }, { 0x1EC5, 15108 }, { 0x1E19, 15116 }, { 0x0066, 15123 }, { 0x1E1F, 15127 }, { 0x0192, 15134 }, { 0x1D6E, 15140 }, { 0x1D82, 15147 }, { 0x0067, 15154 }, { 0x0121, 15158 }, { 0x0260, 15165 }, { 0x01F5, 15171 }, { 0x011F, 15177 }, { 0x01E7, 15183 }, { 0x1E21, 15189 }, { 0x01E5, 15195 }, { 0x0123, 15201 }, { 0x1D83, 15207 }, { 0x011D, 15214 }, { 0x0068, 15220 }, { 0x1E23, 15224 }, { 0x1E25, 15231 }, { 0x0266, 15238 }, { 0x1E96, 15244 }, { 0x1E2B, 15251 }, { 0x021F, 15258 }, { 0x0127, 15264 }, { 0x1E29, 15270 }, { 0x2C68, 15276 }, { 0x1E27, 15282 }, { 0x0125, 15288 }, { 0x0069, 15294 }, { 0x1ECB, 15298 }, { 0x1EC9, 15305 }, { 0x00ED, 15312 }, { 0x012D, 15318 }, { 0x01D0, 15324 }, { 0x00EC, 15330 }, { 0x0129, 15336 }, { 0x1E2D, 15342 }, { 0x0209, 15349 }, { 0x012B, 15356 }, { 0x012F, 15362 }, { 0x0268, 15368 }, { 0x020B, 15374 }, { 0x00EF, 15381 }, { 0x1E2F, 15387 }, { 0x1D96, 15395 }, { 0x00EE, 15402 }, { 0x006A, 15408 }, { 0x01F0, 15412 }, { 0x0249, 15418 }, { 0x0135, 15424 }, { 0x029D, 15430 }, { 0x006B, 15436 }, { 0x1E33, 15440 }, { 0x0199, 15447 }, { 0x1E35, 15453 }, { 0x1E31, 15460 }, { 0x01E9, 15466 }, { 0x5741, 15472 }, { 0x5745, 15478 }, { 0x0137, 15487 }, { 0x1D84, 15493 }, { 0x5743, 15500 }, { 0x2C6A, 15507 }, { 0x006C, 15513 }, { 0x019A, 15517 }, { 0x1E37, 15523 }, { 0x1E39, 15530 }, { 0x026C, 15539 }, { 0x0234, 15545 }, { 0x5749, 15551 }, { 0x1E3B, 15558 }, { 0x013A, 15565 }, { 0x013E, 15571 }, { 0x2C61, 15577 }, { 0x0140, 15584 }, { 0x026B, 15591 }, { 0x0142, 15598 }, { 0x013C, 15604 }, { 0x1D85, 15610 }, { 0x026D, 15617 }, { 0x1E3D, 15624 }, { 0x006D, 15631 }, { 0x1E41, 15635 }, { 0x1E43, 15642 }, { 0x0271, 15649 }, { 0x1E3F, 15655 }, { 0x1D6F, 15661 }, { 0x1D86, 15668 }, { 0x006E, 15675 }, { 0x1E45, 15679 }, { 0x1E47, 15686 }, { 0x0235, 15693 }, { 0x0272, 15699 }, { 0x1E49, 15706 }, { 0x019E, 15713 }, { 0x0144, 15721 }, { 0x0148, 15727 }, { 0x01F9, 15733 }, { 0x00F1, 15739 }, { 0x1D70, 15745 }, { 0x0146, 15752 }, { 0x1D87, 15758 }, { 0x0273, 15765 }, { 0x1E4B, 15772 }, { 0x0149, 15779 }, { 0x006F, 15786 }, { 0x022F, 15790 }, { 0x0231, 15797 }, { 0x1ECD, 15806 }, { 0x2C7A, 15813 }, { 0x1ECF, 15821 }, { 0x01A1, 15828 }, { 0x1EE3, 15834 }, { 0x1EDF, 15843 }, { 0x1EDB, 15852 }, { 0x1EDD, 15860 }, { 0x1EE1, 15868 }, { 0x574B, 15876 }, { 0x574D, 15884 }, { 0x00F3, 15890 }, { 0x014F, 15896 }, { 0x01D2, 15902 }, { 0x00F2, 15908 }, { 0x00F5, 15914 }, { 0x1E4D, 15920 }, { 0x022D, 15928 }, { 0x1E4F, 15936 }, { 0x0151, 15944 }, { 0x020D, 15951 }, { 0x014D, 15958 }, { 0x1E53, 15964 }, { 0x1E51, 15972 }, { 0x01EB, 15980 }, { 0x01ED, 15986 }, { 0x00F8, 15994 }, { 0x01FF, 16000 }, { 0x020F, 16008 }, { 0x00F6, 16015 }, { 0x022B, 16021 }, { 0x00F4, 16029 }, { 0x1ED9, 16035 }, { 0x1ED5, 16044 }, { 0x1ED1, 16053 }, { 0x1ED3, 16061 }, { 0x1ED7, 16069 }, { 0x0070, 16077 }, { 0x1E57, 16081 }, { 0x01A5, 16088 }, { 0x1E55, 16094 }, { 0x1D71, 16100 }, { 0x1D7D, 16107 }, { 0x5751, 16113 }, { 0x1D88, 16121 }, { 0x5753, 16128 }, { 0x5755, 16134 }, { 0x0071, 16141 }, { 0x02A0, 16145 }, { 0x024B, 16151 }, { 0x5757, 16158 }, { 0x5759, 16166 }, { 0x0072, 16173 }, { 0x1E59, 16177 }, { 0x1E5B, 16184 }, { 0x1E5D, 16191 }, { 0x1E5F, 16200 }, { 0x027C, 16207 }, { 0x027D, 16214 }, { 0x0155, 16220 }, { 0x0159, 16226 }, { 0x0211, 16232 }, { 0x1D72, 16239 }, { 0x024D, 16246 }, { 0x0157, 16252 }, { 0x1D89, 16258 }, { 0x027E, 16265 }, { 0x1D73, 16271 }, { 0x0213, 16280 }, { 0x575B, 16287 }, { 0x0073, 16292 }, { 0x1E61, 16296 }, { 0x1E63, 16303 }, { 0x1E69, 16310 }, { 0x0282, 16320 }, { 0x015B, 16326 }, { 0x1E65, 16332 }, { 0x0161, 16341 }, { 0x1E67, 16347 }, { 0x0219, 16356 }, { 0x023F, 16363 }, { 0x1D74, 16370 }, { 0x015F, 16377 }, { 0x1D8A, 16383 }, { 0x015D, 16390 }, { 0x0074, 16396 }, { 0x1E6B, 16400 }, { 0x1E6D, 16407 }, { 0x0236, 16414 }, { 0x01AD, 16420 }, { 0x1E6F, 16426 }, { 0x0165, 16433 }, { 0x021B, 16439 }, { 0x1D75, 16446 }, { 0x0167, 16453 }, { 0x0163, 16459 }, { 0x01AB, 16465 }, { 0x2C66, 16472 }, { 0x1E97, 16479 }, { 0x0288, 16485 }, { 0x1E71, 16492 }, { 0x0075, 16499 }, { 0x0289, 16503 }, { 0x1EE5, 16508 }, { 0x1EE7, 16515 }, { 0x01B0, 16522 }, { 0x1EF1, 16528 }, { 0x1EED, 16537 }, { 0x1EE9, 16546 }, { 0x1EEB, 16554 }, { 0x1EEF, 16562 }, { 0x016F, 16570 }, { 0x00FA, 16577 }, { 0x016D, 16583 }, { 0x01D4, 16589 }, { 0x00F9, 16595 }, { 0x0169, 16601 }, { 0x1E79, 16607 }, { 0x1E75, 16615 }, { 0x0171, 16622 }, { 0x0215, 16629 }, { 0x016B, 16636 }, { 0x1E7B, 16642 }, { 0x0173, 16650 }, { 0x0217, 16656 }, { 0x00FC, 16663 }, { 0x01D8, 16669 }, { 0x01DA, 16677 }, { 0x01DC, 16685 }, { 0x01D6, 16693 }, { 0x1E73, 16701 }, { 0x1D99, 16708 }, { 0x00FB, 16715 }, { 0x1E77, 16721 }, { 0x0076, 16728 }, { 0x1E7F, 16732 }, { 0x2C74, 16739 }, { 0x028B, 16745 }, { 0x2C71, 16751 }, { 0x1E7D, 16758 }, { 0x1D8C, 16764 }, { 0x575F, 16771 }, { 0x0077, 16778 }, { 0x1E87, 16782 }, { 0x1E89, 16789 }, { 0x2C73, 16796 }, { 0x1E98, 16802 }, { 0x1E83, 16809 }, { 0x1E81, 16815 }, { 0x1E85, 16821 }, { 0x0175, 16827 }, { 0x0078, 16833 }, { 0x1E8B, 16837 }, { 0x1D8D, 16844 }, { 0x1E8D, 16851 }, { 0x0079, 16857 }, { 0x1E8F, 16861 }, { 0x1EF5, 16868 }, { 0x01B4, 16875 }, { 0x1EF7, 16881 }, { 0x1EFF, 16888 }, { 0x1E99, 16894 }, { 0x00FD, 16901 }, { 0x1EF3, 16907 }, { 0x1EF9, 16913 }, { 0x0233, 16919 }, { 0x024F, 16925 }, { 0x00FF, 16931 }, { 0x0177, 16937 }, { 0x007A, 16943 }, { 0x017C, 16947 }, { 0x1E93, 16954 }, { 0x0291, 16961 }, { 0x0225, 16967 }, { 0x1E95, 16973 }, { 0x017A, 16980 }, { 0x017E, 16986 }, { 0x0240, 16992 }, { 0x1D76, 16999 }, { 0x01B6, 17006 }, { 0x1D8E, 17012 }, { 0x2C6C, 17019 }, { 0x0290, 17025 }, { 0x1E91, 17032 }, { 0x5733, 17038 }, { 0x00E6, 17042 }, { 0x01FD, 17046 }, { 0x01E3, 17052 }, { 0x5735, 17058 }, { 0x5737, 17062 }, { 0x5739, 17066 }, { 0x573B, 17070 }, { 0x573D, 17077 }, { 0x0238, 17081 }, { 0x01F3, 17086 }, { 0x01C6, 17090 }, { 0x02A3, 17096 }, { 0x02A5, 17101 }, { 0x576B, 17108 }, { 0x0195, 17112 }, { 0x576D, 17116 }, { 0x01C9, 17120 }, { 0x02AA, 17124 }, { 0x02AB, 17129 }, { 0x01CC, 17134 }, { 0x01A3, 17138 }, { 0x574F, 17142 }, { 0x0223, 17146 }, { 0x0239, 17150 }, { 0x02A8, 17155 }, { 0x1D7A, 17162 }, { 0x02A6, 17168 }, { 0x5729, 17173 }, { 0x1D6B, 17177 }, { 0x5778, 17181 }, { 0x5761, 17185 }, { 0x576F, 17189 }, { 0x5771, 17193 }, { 0x014B, 17197 }, { 0x0283, 17201 }, { 0x0286, 17205 }, { 0x1D8B, 17211 }, { 0x1D98, 17218 }, { 0x00F0, 17225 }, { 0x0292, 17229 }, { 0x0293, 17233 }, { 0x01BA, 17239 }, { 0x01EF, 17245 }, { 0x1D9A, 17251 }, { 0x01B9, 17258 }, { 0x0138, 17263 }, { 0x5772, 17267 }, { 0x5773, 17271 }, { 0x5774, 17275 }, { 0x0278, 17279 }, { 0x5775, 17283 }, { 0x575D, 17287 }, { 0x1D16, 17292 }, { 0x5777, 17298 }, { 0x02A4, 17302 }, { 0x02A9, 17307 }, { 0x2C76, 17312 }, { 0x5727, 17317 }, { 0x0267, 17321 }, { 0x0269, 17327 }, { 0x1D7C, 17331 }, { 0x026E, 17337 }, { 0x017F, 17341 }, { 0x1E9B, 17346 }, { 0x1E9D, 17354 }, { 0x1E9C, 17362 }, { 0x025B, 17370 }, { 0x1D93, 17375 }, { 0x0254, 17383 }, { 0x1D97, 17388 }, { 0x0264, 17396 }, { 0x02A7, 17401 }, { 0x0185, 17406 }, { 0x01A8, 17411 }, { 0x01BD, 17416 }, { 0x5769, 17421 }, { 0x021D, 17425 }, { 0x0251, 17429 }, { 0x1D90, 17433 }, { 0x1E9F, 17440 }, { 0x0263, 17444 }, { 0x0259, 17448 }, { 0x025A, 17452 }, { 0x1D95, 17458 }, { 0x00DF, 17465 }, { 0x0285, 17470 }, { 0x00FE, 17476 }, { 0x5765, 17480 }, { 0x5767, 17486 }, { 0x0275, 17494 }, { 0x1D17, 17499 }, { 0x5747, 17505 }, { 0x029A, 17510 }, { 0x0277, 17516 }, { 0x025E, 17521 }, { 0x019B, 17528 }, { 0x0261, 17534 }, { 0x0250, 17539 }, { 0x01DD, 17544 }, { 0x1D77, 17549 }, { 0x0265, 17554 }, { 0x02AE, 17559 }, { 0x02AF, 17566 }, { 0x1D09, 17575 }, { 0x029E, 17580 }, { 0x5781, 17585 }, { 0x026F, 17590 }, { 0x0270, 17595 }, { 0x0279, 17603 }, { 0x027B, 17608 }, { 0x027A, 17615 }, { 0x2C79, 17623 }, { 0x0287, 17630 }, { 0x028C, 17635 }, { 0x028D, 17640 }, { 0x028E, 17645 }, { 0x1D02, 17650 }, { 0x1D14, 17655 }, { 0x1D08, 17660 }, { 0x0252, 17666 }, { 0x018D, 17671 }, { 0x577F, 17676 }, { 0x0131, 17682 }, { 0x0237, 17687 }, { 0x025F, 17692 }, { 0x0284, 17699 }, { 0x0242, 17708 }, { 0x577A, 17713 }, { 0x577C, 17718 }, { 0x1D79, 17723 }, { 0x5783, 17728 }, { 0x5785, 17733 }, { 0x5787, 17738 }, { 0x028A, 17743 }, { 0x1D7F, 17747 }, { 0x2184, 17753 }, { 0x573F, 17758 }, { 0x0258, 17765 }, { 0x027F, 17770 }, { 0x025C, 17777 }, { 0x025D, 17783 }, { 0x1D94, 17791 }, { 0x578C, 17800 }, { 0x1D11, 17804 }, { 0x1D13, 17809 }, { 0x1D1D, 17816 }, { 0x1D12, 17821 }, { 0x1D1F, 17827 }, { 0x1D1E, 17833 }, { 0x2C77, 17839 }, { 0x572B, 17844 }, { 0x572D, 17848 }, { 0x572F, 17852 }, { 0x5763, 17858 }, { 0x1EFD, 17863 }, { 0x1EFB, 17868 }, { 0x5725, 17873 }, { 0x5723, 17878 }, { 0x1D7B, 17883 }, { 0x1D7E, 17890 }, { 0x6B00, 17897 }, { 0x6B01, 17901 }, { 0x6B02, 17905 }, { 0x0133, 17909 }, { 0x0153, 17913 }, { 0x6B06, 17917 }, { 0x6B03, 17921 }, { 0x6B04, 17925 }, { 0x6B05, 17929 }, { 0x01A6, 17935 }, { 0x1D25, 17938 }, { 0x01BB, 17941 }, { 0x01BF, 17946 }, { 0x1D00, 17949 }, { 0x0299, 17954 }, { 0x1D04, 17959 }, { 0x1D05, 17964 }, { 0x1D07, 17969 }, { 0x5730, 17974 }, { 0x0262, 17979 }, { 0x029B, 17984 }, { 0x029C, 17991 }, { 0x026A, 17996 }, { 0x1D0A, 18001 }, { 0x1D0B, 18006 }, { 0x029F, 18011 }, { 0x1D0C, 18016 }, { 0x1D0D, 18023 }, { 0x0274, 18028 }, { 0x1D0F, 18033 }, { 0x1D18, 18038 }, { 0x0280, 18043 }, { 0x5731, 18048 }, { 0x1D1B, 18053 }, { 0x1D1C, 18058 }, { 0x1D20, 18063 }, { 0x1D21, 18068 }, { 0x028F, 18073 }, { 0x1D22, 18078 }, { 0x1D01, 18083 }, { 0x0276, 18088 }, { 0x1D15, 18093 }, { 0x1D06, 18098 }, { 0x1D23, 18103 }, { 0x5776, 18108 }, { 0x1D10, 18113 }, { 0x1D03, 18119 }, { 0x2C7B, 18125 }, { 0x1D1A, 18131 }, { 0x0281, 18137 }, { 0x1D0E, 18143 }, { 0x1D19, 18149 }, { 0x01C0, 18155 }, { 0x1D24, 18159 }, { 0x0294, 18164 }, { 0x02A1, 18168 }, { 0x01C1, 18174 }, { 0x01C2, 18178 }, { 0x02AD, 18182 }, { 0x0298, 18186 }, { 0x02AC, 18190 }, { 0x0296, 18194 }, { 0x01BE, 18199 }, { 0x01AA, 18206 }, { 0x02A2, 18211 }, { 0x01C3, 18218 }, { 0x0297, 18222 }, { 0x0295, 18226 }, { 0x0041, 18231 }, { 0x0226, 18235 }, { 0x01E0, 18242 }, { 0x1EA0, 18251 }, { 0x1EA2, 18258 }, { 0x00C5, 18265 }, { 0x01FA, 18272 }, { 0x1E00, 18281 }, { 0x00C1, 18288 }, { 0x0102, 18294 }, { 0x1EB6, 18300 }, { 0x1EB2, 18309 }, { 0x1EAE, 18318 }, { 0x1EB0, 18326 }, { 0x1EB4, 18334 }, { 0x01CD, 18342 }, { 0x00C0, 18348 }, { 0x00C3, 18354 }, { 0x0200, 18360 }, { 0x0100, 18367 }, { 0x0104, 18373 }, { 0x023A, 18379 }, { 0x0202, 18385 }, { 0x00C4, 18392 }, { 0x01DE, 18398 }, { 0x00C2, 18406 }, { 0x1EAC, 18412 }, { 0x1EA8, 18421 }, { 0x1EA4, 18430 }, { 0x1EA6, 18438 }, { 0x1EAA, 18446 }, { 0x0042, 18454 }, { 0x1E02, 18458 }, { 0x1E04, 18465 }, { 0x0181, 18472 }, { 0x1E06, 18478 }, { 0x0243, 18485 }, { 0x0182, 18491 }, { 0x0043, 18497 }, { 0x010A, 18501 }, { 0x0187, 18508 }, { 0x0106, 18514 }, { 0x010C, 18520 }, { 0x023B, 18526 }, { 0x00C7, 18532 }, { 0x1E08, 18538 }, { 0x0108, 18546 }, { 0x0044, 18552 }, { 0x1E0A, 18556 }, { 0x1E0C, 18563 }, { 0x018A, 18570 }, { 0x1E0E, 18576 }, { 0x010E, 18583 }, { 0x01F2, 18589 }, { 0x01C5, 18597 }, { 0x0110, 18607 }, { 0x018B, 18613 }, { 0x1E10, 18619 }, { 0x1E12, 18625 }, { 0x0045, 18632 }, { 0x0116, 18636 }, { 0x1EB8, 18643 }, { 0x1EBA, 18650 }, { 0x00C9, 18657 }, { 0x0114, 18663 }, { 0x011A, 18669 }, { 0x00C8, 18675 }, { 0x1EBC, 18681 }, { 0x1E1A, 18687 }, { 0x0204, 18694 }, { 0x0112, 18701 }, { 0x1E16, 18707 }, { 0x1E14, 18715 }, { 0x0118, 18723 }, { 0x0246, 18729 }, { 0x0228, 18735 }, { 0x1E1C, 18741 }, { 0x0206, 18749 }, { 0x00CB, 18756 }, { 0x00CA, 18762 }, { 0x1EC6, 18768 }, { 0x1EC2, 18777 }, { 0x1EBE, 18786 }, { 0x1EC0, 18794 }, { 0x1EC4, 18802 }, { 0x1E18, 18810 }, { 0x0046, 18817 }, { 0x1E1E, 18821 }, { 0x0191, 18828 }, { 0x0047, 18834 }, { 0x0120, 18838 }, { 0x0193, 18845 }, { 0x01F4, 18851 }, { 0x011E, 18857 }, { 0x01E6, 18863 }, { 0x1E20, 18869 }, { 0x01E4, 18875 }, { 0x0122, 18881 }, { 0x011C, 18887 }, { 0x0048, 18893 }, { 0x1E22, 18897 }, { 0x1E24, 18904 }, { 0x1E2A, 18911 }, { 0x021E, 18918 }, { 0x0126, 18924 }, { 0x1E28, 18930 }, { 0x2C67, 18936 }, { 0x1E26, 18942 }, { 0x0124, 18948 }, { 0x0049, 18954 }, { 0x0130, 18958 }, { 0x1ECA, 18965 }, { 0x1EC8, 18972 }, { 0x00CD, 18979 }, { 0x012C, 18985 }, { 0x01CF, 18991 }, { 0x00CC, 18997 }, { 0x0128, 19003 }, { 0x1E2C, 19009 }, { 0x0208, 19016 }, { 0x012A, 19023 }, { 0x012E, 19029 }, { 0x0197, 19035 }, { 0x020A, 19041 }, { 0x00CF, 19048 }, { 0x1E2E, 19054 }, { 0x00CE, 19062 }, { 0x004A, 19068 }, { 0x0248, 19072 }, { 0x0134, 19078 }, { 0x004B, 19084 }, { 0x1E32, 19088 }, { 0x0198, 19095 }, { 0x1E34, 19101 }, { 0x1E30, 19108 }, { 0x01E8, 19114 }, { 0x5740, 19120 }, { 0x5744, 19126 }, { 0x0136, 19135 }, { 0x5742, 19141 }, { 0x2C69, 19148 }, { 0x004C, 19154 }, { 0x023D, 19158 }, { 0x1E36, 19164 }, { 0x1E38, 19171 }, { 0x5748, 19180 }, { 0x1E3A, 19187 }, { 0x0139, 19194 }, { 0x013D, 19200 }, { 0x01C8, 19206 }, { 0x2C60, 19214 }, { 0x013F, 19221 }, { 0x2C62, 19228 }, { 0x0141, 19235 }, { 0x013B, 19241 }, { 0x1E3C, 19247 }, { 0x004D, 19254 }, { 0x1E40, 19258 }, { 0x1E42, 19265 }, { 0x2C6E, 19272 }, { 0x1E3E, 19278 }, { 0x004E, 19284 }, { 0x1E44, 19288 }, { 0x1E46, 19295 }, { 0x019D, 19302 }, { 0x1E48, 19309 }, { 0x0220, 19316 }, { 0x0143, 19324 }, { 0x0147, 19330 }, { 0x01F8, 19336 }, { 0x01CB, 19342 }, { 0x00D1, 19350 }, { 0x0145, 19356 }, { 0x1E4A, 19362 }, { 0x004F, 19369 }, { 0x022E, 19373 }, { 0x0230, 19380 }, { 0x1ECC, 19389 }, { 0x1ECE, 19396 }, { 0x01A0, 19403 }, { 0x1EE2, 19409 }, { 0x1EDE, 19418 }, { 0x1EDA, 19427 }, { 0x1EDC, 19435 }, { 0x1EE0, 19443 }, { 0x574A, 19451 }, { 0x574C, 19459 }, { 0x00D3, 19465 }, { 0x014E, 19471 }, { 0x01D1, 19477 }, { 0x00D2, 19483 }, { 0x00D5, 19489 }, { 0x1E4C, 19495 }, { 0x022C, 19503 }, { 0x1E4E, 19511 }, { 0x0150, 19519 }, { 0x020C, 19526 }, { 0x014C, 19533 }, { 0x1E52, 19539 }, { 0x1E50, 19547 }, { 0x019F, 19555 }, { 0x01EA, 19562 }, { 0x01EC, 19568 }, { 0x00D8, 19576 }, { 0x01FE, 19582 }, { 0x020E, 19590 }, { 0x00D6, 19597 }, { 0x022A, 19603 }, { 0x00D4, 19611 }, { 0x1ED8, 19617 }, { 0x1ED4, 19626 }, { 0x1ED0, 19635 }, { 0x1ED2, 19643 }, { 0x1ED6, 19651 }, { 0x0050, 19659 }, { 0x1E56, 19663 }, { 0x01A4, 19670 }, { 0x1E54, 19676 }, { 0x2C63, 19682 }, { 0x5750, 19688 }, { 0x5752, 19696 }, { 0x5754, 19702 }, { 0x0051, 19709 }, { 0x5756, 19713 }, { 0x5758, 19721 }, { 0x0052, 19728 }, { 0x1E58, 19732 }, { 0x1E5A, 19739 }, { 0x1E5C, 19746 }, { 0x1E5E, 19755 }, { 0x2C64, 19762 }, { 0x0154, 19768 }, { 0x0158, 19774 }, { 0x0210, 19780 }, { 0x024C, 19787 }, { 0x0156, 19793 }, { 0x0212, 19799 }, { 0x575A, 19806 }, { 0x0053, 19811 }, { 0x1E60, 19815 }, { 0x1E62, 19822 }, { 0x1E68, 19829 }, { 0x015A, 19839 }, { 0x1E64, 19845 }, { 0x0160, 19854 }, { 0x1E66, 19860 }, { 0x0218, 19869 }, { 0x015E, 19876 }, { 0x015C, 19882 }, { 0x0054, 19888 }, { 0x1E6A, 19892 }, { 0x1E6C, 19899 }, { 0x01AC, 19906 }, { 0x1E6E, 19912 }, { 0x0164, 19919 }, { 0x021A, 19925 }, { 0x0166, 19932 }, { 0x0162, 19938 }, { 0x023E, 19944 }, { 0x01AE, 19951 }, { 0x1E70, 19958 }, { 0x0055, 19965 }, { 0x0244, 19969 }, { 0x1EE4, 19974 }, { 0x1EE6, 19981 }, { 0x01AF, 19988 }, { 0x1EF0, 19994 }, { 0x1EEC, 20003 }, { 0x1EE8, 20012 }, { 0x1EEA, 20020 }, { 0x1EEE, 20028 }, { 0x016E, 20036 }, { 0x00DA, 20043 }, { 0x016C, 20049 }, { 0x01D3, 20055 }, { 0x00D9, 20061 }, { 0x0168, 20067 }, { 0x1E78, 20073 }, { 0x1E74, 20081 }, { 0x0170, 20088 }, { 0x0214, 20095 }, { 0x016A, 20102 }, { 0x1E7A, 20108 }, { 0x0172, 20116 }, { 0x0216, 20122 }, { 0x00DC, 20129 }, { 0x01D7, 20135 }, { 0x01D9, 20143 }, { 0x01DB, 20151 }, { 0x01D5, 20159 }, { 0x1E72, 20167 }, { 0x00DB, 20174 }, { 0x1E76, 20180 }, { 0x0056, 20187 }, { 0x1E7E, 20191 }, { 0x01B2, 20198 }, { 0x1E7C, 20204 }, { 0x575E, 20210 }, { 0x0057, 20217 }, { 0x1E86, 20221 }, { 0x1E88, 20228 }, { 0x2C72, 20235 }, { 0x1E82, 20241 }, { 0x1E80, 20247 }, { 0x1E84, 20253 }, { 0x0174, 20259 }, { 0x0058, 20265 }, { 0x1E8A, 20269 }, { 0x1E8C, 20276 }, { 0x0059, 20282 }, { 0x1E8E, 20286 }, { 0x1EF4, 20293 }, { 0x01B3, 20300 }, { 0x1EF6, 20306 }, { 0x1EFE, 20313 }, { 0x00DD, 20319 }, { 0x1EF2, 20325 }, { 0x1EF8, 20331 }, { 0x0232, 20337 }, { 0x024E, 20343 }, { 0x0178, 20349 }, { 0x0176, 20355 }, { 0x005A, 20361 }, { 0x017B, 20365 }, { 0x1E92, 20372 }, { 0x0224, 20379 }, { 0x1E94, 20385 }, { 0x0179, 20392 }, { 0x017D, 20398 }, { 0x01B5, 20404 }, { 0x2C6B, 20410 }, { 0x1E90, 20416 }, { 0x5732, 20422 }, { 0x00C6, 20426 }, { 0x01FC, 20430 }, { 0x01E2, 20436 }, { 0x5734, 20442 }, { 0x5736, 20446 }, { 0x5738, 20450 }, { 0x573A, 20454 }, { 0x573C, 20461 }, { 0x01F1, 20465 }, { 0x01C4, 20469 }, { 0x576A, 20475 }, { 0x576C, 20479 }, { 0x01C7, 20483 }, { 0x01CA, 20487 }, { 0x01A2, 20491 }, { 0x574E, 20495 }, { 0x0222, 20499 }, { 0x5728, 20503 }, { 0x5760, 20507 }, { 0x576E, 20511 }, { 0x014A, 20515 }, { 0x01A9, 20519 }, { 0x00D0, 20523 }, { 0x01B7, 20527 }, { 0x01EE, 20531 }, { 0x01B8, 20537 }, { 0x575C, 20542 }, { 0x2C75, 20547 }, { 0x5726, 20552 }, { 0x0196, 20556 }, { 0x0190, 20560 }, { 0x0186, 20565 }, { 0x0184, 20570 }, { 0x01A7, 20575 }, { 0x01BC, 20580 }, { 0x5768, 20585 }, { 0x01F7, 20589 }, { 0x021C, 20593 }, { 0x2C6D, 20597 }, { 0x0194, 20601 }, { 0x01F6, 20605 }, { 0x018F, 20609 }, { 0x1E9E, 20613 }, { 0x024A, 20618 }, { 0x00DE, 20626 }, { 0x5764, 20630 }, { 0x5766, 20636 }, { 0x5746, 20644 }, { 0x2C6F, 20649 }, { 0x5780, 20654 }, { 0x019C, 20659 }, { 0x0245, 20664 }, { 0x577E, 20669 }, { 0x0189, 20675 }, { 0x0241, 20680 }, { 0x5779, 20685 }, { 0x577B, 20690 }, { 0x577D, 20695 }, { 0x5782, 20700 }, { 0x5784, 20705 }, { 0x5786, 20710 }, { 0x01B1, 20715 }, { 0x573E, 20719 }, { 0x018E, 20726 }, { 0x578B, 20731 }, { 0x572A, 20735 }, { 0x572C, 20739 }, { 0x572E, 20743 }, { 0x5762, 20749 }, { 0x1EFC, 20754 }, { 0x1EFA, 20759 }, { 0x5724, 20764 }, { 0x5722, 20769 }, { 0x0132, 20774 }, { 0x0152, 20778 }, { 0x2090, 20782 }, { 0x2091, 20787 }, { 0x1D62, 20792 }, { 0x2C7C, 20797 }, { 0x2092, 20802 }, { 0x1D63, 20807 }, { 0x1D64, 20812 }, { 0x1D65, 20817 }, { 0x2093, 20822 }, { 0x2094, 20827 }, { 0x57FE, 20832 }, { 0x57FF, 20837 }, { 0x57FD, 20842 }, { 0x57FB, 20847 }, { 0x57FC, 20852 }, { 0x264E, 20857 }, { 0x2772, 20858 }, { 0x2773, 20864 }, { 0x2591, 20870 }, { 0x2758, 20872 }, { 0x1940, 20875 }, { 0x193B, 20878 }, { 0x193A, 20881 }, { 0x1939, 20884 }, { 0x1947, 20887 }, { 0x194C, 20890 }, { 0x1948, 20893 }, { 0x194B, 20896 }, { 0x194A, 20899 }, { 0x194F, 20902 }, { 0x1946, 20905 }, { 0x194E, 20908 }, { 0x194D, 20911 }, { 0x1949, 20914 }, { 0x1930, 20917 }, { 0x1938, 20921 }, { 0x1936, 20925 }, { 0x1934, 20929 }, { 0x1935, 20933 }, { 0x1937, 20937 }, { 0x1933, 20941 }, { 0x1931, 20945 }, { 0x1932, 20949 }, { 0x1920, 20953 }, { 0x1927, 20957 }, { 0x1921, 20961 }, { 0x1928, 20965 }, { 0x1922, 20969 }, { 0x1924, 20973 }, { 0x1926, 20977 }, { 0x1923, 20981 }, { 0x1925, 20985 }, { 0x1912, 20989 }, { 0x1906, 20992 }, { 0x190D, 20995 }, { 0x1903, 20998 }, { 0x191C, 21001 }, { 0x1908, 21004 }, { 0x1901, 21007 }, { 0x1917, 21010 }, { 0x1914, 21013 }, { 0x190F, 21016 }, { 0x1910, 21019 }, { 0x1916, 21022 }, { 0x191B, 21025 }, { 0x190B, 21028 }, { 0x1918, 21031 }, { 0x1915, 21034 }, { 0x1913, 21037 }, { 0x1907, 21040 }, { 0x190E, 21043 }, { 0x1904, 21046 }, { 0x1909, 21049 }, { 0x1902, 21052 }, { 0x1905, 21055 }, { 0x1911, 21058 }, { 0x1919, 21061 }, { 0x191A, 21064 }, { 0x190C, 21067 }, { 0x190A, 21070 }, { 0x1945, 21073 }, { 0x192A, 21076 }, { 0x192B, 21080 }, { 0x1929, 21084 }, { 0x1944, 21088 }, { 0x1900, 21091 }, { 0x2581, 21094 }, { 0x2582, 21098 }, { 0x2585, 21102 }, { 0x2584, 21106 }, { 0x25E1, 21109 }, { 0x25DB, 21112 }, { 0x25DF, 21117 }, { 0x25FA, 21122 }, { 0x293F, 21125 }, { 0x2703, 21130 }, { 0x27D3, 21133 }, { 0x270E, 21138 }, { 0x25DE, 21141 }, { 0x2751, 21146 }, { 0x25FF, 21151 }, { 0x293E, 21154 }, { 0x274F, 21159 }, { 0x2587, 21164 }, { 0x2583, 21168 }, { 0x2586, 21172 }, { 0x00B5, 21176 }, { 0x2212, 21178 }, { 0x2A3A, 21180 }, { 0x2A2A, 21184 }, { 0x2A29, 21189 }, { 0x2A2C, 21194 }, { 0x2A2B, 21199 }, { 0x2242, 21204 }, { 0x266D, 21206 }, { 0x266F, 21209 }, { 0x266E, 21212 }, { 0x2A09, 21215 }, { 0x22C3, 21218 }, { 0x2A03, 21220 }, { 0x2A04, 21225 }, { 0x2AFF, 21230 }, { 0x2A06, 21234 }, { 0x2A05, 21238 }, { 0x2A00, 21242 }, { 0x2A01, 21246 }, { 0x2A02, 21250 }, { 0x22C1, 21254 }, { 0x22C0, 21257 }, { 0x220F, 21260 }, { 0x2210, 21262 }, { 0x2211, 21264 }, { 0x22C2, 21266 }, { 0x2207, 21268 }, { 0x20A6, 21269 }, { 0x2922, 21271 }, { 0x2197, 21277 }, { 0x2928, 21280 }, { 0x2924, 21287 }, { 0x2931, 21292 }, { 0x292E, 21299 }, { 0x2B08, 21306 }, { 0x2B00, 21310 }, { 0x21D7, 21314 }, { 0x2921, 21318 }, { 0x2196, 21324 }, { 0x21B8, 21327 }, { 0x21F1, 21333 }, { 0x2927, 21338 }, { 0x2923, 21345 }, { 0x2932, 21350 }, { 0x2B09, 21357 }, { 0x2B01, 21361 }, { 0x21D6, 21365 }, { 0x1680, 21369 }, { 0x1696, 21372 }, { 0x1692, 21375 }, { 0x1691, 21378 }, { 0x1690, 21381 }, { 0x1689, 21384 }, { 0x1687, 21387 }, { 0x168C, 21390 }, { 0x1698, 21393 }, { 0x1682, 21396 }, { 0x168B, 21399 }, { 0x1685, 21402 }, { 0x168F, 21405 }, { 0x1684, 21408 }, { 0x1686, 21411 }, { 0x1681, 21414 }, { 0x168A, 21417 }, { 0x1683, 21420 }, { 0x169A, 21423 }, { 0x1688, 21426 }, { 0x168E, 21429 }, { 0x1695, 21432 }, { 0x1693, 21435 }, { 0x1694, 21438 }, { 0x168D, 21441 }, { 0x1697, 21444 }, { 0x1699, 21447 }, { 0x169B, 21450 }, { 0x169C, 21453 }, { 0x0B56, 21457 }, { 0x0B57, 21461 }, { 0x0B3C, 21465 }, { 0x0B4D, 21468 }, { 0x0B03, 21471 }, { 0x0B02, 21474 }, { 0x0B3D, 21477 }, { 0x0B01, 21480 }, { 0x0B67, 21483 }, { 0x0B6C, 21486 }, { 0x0B68, 21489 }, { 0x0B6B, 21492 }, { 0x0B6A, 21495 }, { 0x0B6F, 21498 }, { 0x0B66, 21501 }, { 0x0B6E, 21504 }, { 0x0B6D, 21507 }, { 0x0B69, 21510 }, { 0x0B47, 21513 }, { 0x0B3F, 21517 }, { 0x0B4B, 21521 }, { 0x0B41, 21525 }, { 0x0B3E, 21529 }, { 0x0B48, 21533 }, { 0x0B4C, 21537 }, { 0x0B40, 21541 }, { 0x0B42, 21545 }, { 0x0B62, 21549 }, { 0x0B43, 21554 }, { 0x0B63, 21559 }, { 0x0B44, 21564 }, { 0x0B70, 21569 }, { 0x0B05, 21571 }, { 0x0B0F, 21574 }, { 0x0B07, 21577 }, { 0x0B13, 21580 }, { 0x0B09, 21583 }, { 0x0B06, 21586 }, { 0x0B10, 21589 }, { 0x0B14, 21592 }, { 0x0B2C, 21595 }, { 0x0B1A, 21598 }, { 0x0B26, 21601 }, { 0x0B17, 21604 }, { 0x0B39, 21607 }, { 0x0B08, 21610 }, { 0x0B1C, 21613 }, { 0x0B15, 21616 }, { 0x0B32, 21619 }, { 0x0B2E, 21622 }, { 0x0B28, 21625 }, { 0x0B2A, 21628 }, { 0x0B30, 21631 }, { 0x0B38, 21634 }, { 0x0B24, 21637 }, { 0x0B0A, 21640 }, { 0x0B35, 21643 }, { 0x0B71, 21646 }, { 0x0B2F, 21649 }, { 0x0B2D, 21652 }, { 0x0B1B, 21655 }, { 0x0B21, 21658 }, { 0x0B27, 21661 }, { 0x0B18, 21664 }, { 0x0B1D, 21667 }, { 0x0B16, 21670 }, { 0x0B33, 21673 }, { 0x0B19, 21676 }, { 0x0B23, 21679 }, { 0x0B1E, 21682 }, { 0x0B2B, 21685 }, { 0x0B5D, 21688 }, { 0x0B5C, 21691 }, { 0x0B36, 21694 }, { 0x0B37, 21697 }, { 0x0B25, 21700 }, { 0x0B1F, 21703 }, { 0x0B5F, 21706 }, { 0x0B22, 21709 }, { 0x0B20, 21712 }, { 0x0B0C, 21715 }, { 0x0B0B, 21719 }, { 0x0B61, 21723 }, { 0x0B60, 21727 }, { 0x2125, 21731 }, { 0x262E, 21733 }, { 0x2318, 21735 }, { 0x2647, 21739 }, { 0x00A3, 21740 }, { 0x2032, 21742 }, { 0x2399, 21743 }, { 0x2236, 21746 }, { 0x2994, 21747 }, { 0x2E1D, 21751 }, { 0x2595, 21755 }, { 0x297D, 21759 }, { 0x25D7, 21762 }, { 0x2590, 21766 }, { 0x22A2, 21769 }, { 0x221F, 21771 }, { 0x22BE, 21773 }, { 0x237C, 21777 }, { 0x2E01, 21783 }, { 0x3009, 21788 }, { 0x2992, 21791 }, { 0x299C, 21796 }, { 0x2E00, 21801 }, { 0x21F4, 21805 }, { 0x27F4, 21810 }, { 0x2998, 21815 }, { 0x3011, 21820 }, { 0x007D, 21824 }, { 0x23AD, 21827 }, { 0x23AB, 21832 }, { 0x23AC, 21837 }, { 0x230B, 21842 }, { 0x27D6, 21844 }, { 0x2984, 21847 }, { 0x300F, 21851 }, { 0x301B, 21855 }, { 0x3019, 21859 }, { 0x3017, 21864 }, { 0x2986, 21868 }, { 0x300D, 21871 }, { 0x2E05, 21874 }, { 0x300B, 21878 }, { 0x2970, 21882 }, { 0x29DB, 21888 }, { 0x201D, 21892 }, { 0x2E29, 21896 }, { 0x22CA, 21899 }, { 0x2E0D, 21904 }, { 0x2019, 21908 }, { 0x005D, 21912 }, { 0x2990, 21915 }, { 0x298E, 21923 }, { 0x2046, 21931 }, { 0x298C, 21936 }, { 0x23A6, 21941 }, { 0x23A4, 21946 }, { 0x23A5, 21951 }, { 0x29D9, 21955 }, { 0x2309, 21958 }, { 0x27C6, 21960 }, { 0x2E27, 21964 }, { 0x3015, 21968 }, { 0x22BF, 21972 }, { 0x29CE, 21974 }, { 0x2E21, 21979 }, { 0x23B9, 21984 }, { 0x22CC, 21988 }, { 0x0029, 21991 }, { 0x23A0, 21993 }, { 0x239E, 21997 }, { 0x239F, 22001 }, { 0x2E03, 22004 }, { 0x2E0A, 22007 }, { 0x719A, 22010 }, { 0x7191, 22013 }, { 0x7194, 22016 }, { 0x2160, 22020 }, { 0x216D, 22023 }, { 0x2188, 22027 }, { 0x216F, 22032 }, { 0x2180, 22036 }, { 0x2165, 22042 }, { 0x2185, 22045 }, { 0x2169, 22050 }, { 0x2182, 22053 }, { 0x2161, 22057 }, { 0x2164, 22060 }, { 0x216E, 22063 }, { 0x2181, 22067 }, { 0x2163, 22071 }, { 0x2168, 22074 }, { 0x2167, 22077 }, { 0x216C, 22080 }, { 0x2186, 22083 }, { 0x2187, 22088 }, { 0x2166, 22092 }, { 0x2162, 22095 }, { 0x216A, 22098 }, { 0x216B, 22101 }, { 0x2183, 22104 }, { 0x7190, 22109 }, { 0x7193, 22112 }, { 0x7195, 22115 }, { 0x7196, 22118 }, { 0x7192, 22121 }, { 0x719B, 22124 }, { 0x7199, 22127 }, { 0x7197, 22130 }, { 0x7198, 22133 }, { 0x16ED, 22136 }, { 0x16EE, 22139 }, { 0x16CD, 22142 }, { 0x16D1, 22145 }, { 0x16C2, 22148 }, { 0x16B5, 22151 }, { 0x16AE, 22154 }, { 0x16E9, 22157 }, { 0x16A1, 22160 }, { 0x16A5, 22163 }, { 0x16EA, 22166 }, { 0x16A4, 22169 }, { 0x16CE, 22172 }, { 0x16AA, 22175 }, { 0x16AF, 22179 }, { 0x16B0, 22182 }, { 0x16A9, 22185 }, { 0x16A3, 22189 }, { 0x16B3, 22192 }, { 0x16E0, 22195 }, { 0x16B6, 22198 }, { 0x16A7, 22201 }, { 0x16B8, 22204 }, { 0x16C4, 22207 }, { 0x16DD, 22210 }, { 0x16E1, 22213 }, { 0x16AB, 22216 }, { 0x16E3, 22219 }, { 0x16A0, 22222 }, { 0x16B7, 22228 }, { 0x16C1, 22233 }, { 0x16C7, 22239 }, { 0x16B4, 22243 }, { 0x16E5, 22247 }, { 0x16A2, 22250 }, { 0x16C9, 22255 }, { 0x16A8, 22259 }, { 0x16E4, 22263 }, { 0x16DE, 22266 }, { 0x16D6, 22271 }, { 0x16BB, 22276 }, { 0x16C3, 22280 }, { 0x16B2, 22284 }, { 0x16B1, 22287 }, { 0x16CB, 22293 }, { 0x16CF, 22298 }, { 0x16B9, 22304 }, { 0x16BA, 22309 }, { 0x16DC, 22313 }, { 0x16DA, 22316 }, { 0x16D7, 22322 }, { 0x16BE, 22327 }, { 0x16D5, 22333 }, { 0x16C8, 22336 }, { 0x16CA, 22341 }, { 0x16E2, 22345 }, { 0x16DF, 22348 }, { 0x16D2, 22353 }, { 0x16DB, 22359 }, { 0x16C0, 22362 }, { 0x16D4, 22365 }, { 0x16A6, 22368 }, { 0x16E8, 22373 }, { 0x16C6, 22376 }, { 0x16E7, 22380 }, { 0x16C5, 22383 }, { 0x16E6, 22387 }, { 0x16AD, 22390 }, { 0x16CC, 22394 }, { 0x16D0, 22398 }, { 0x16AC, 22402 }, { 0x16D9, 22406 }, { 0x16BF, 22410 }, { 0x16D8, 22414 }, { 0x16BD, 22418 }, { 0x16BC, 22422 }, { 0x16D3, 22426 }, { 0x16EB, 22430 }, { 0x16F0, 22433 }, { 0x16EC, 22436 }, { 0x16EF, 22439 }, { 0x20A8, 22442 }, { 0x2AE0, 22444 }, { 0x2AE8, 22447 }, { 0x2AE9, 22452 }, { 0x2ADF, 22459 }, { 0x2AE7, 22462 }, { 0x2ADE, 22467 }, { 0x2944, 22470 }, { 0x2620, 22476 }, { 0x2333, 22479 }, { 0x6E58, 22480 }, { 0x2A61, 22483 }, { 0x6E52, 22487 }, { 0x6E5B, 22490 }, { 0x6E5D, 22494 }, { 0x6E59, 22499 }, { 0x6E62, 22502 }, { 0x6E55, 22505 }, { 0x6E50, 22507 }, { 0x6E5C, 22509 }, { 0x6E5E, 22513 }, { 0x6E5A, 22518 }, { 0x2170, 22521 }, { 0x217D, 22525 }, { 0x217F, 22530 }, { 0x2175, 22535 }, { 0x2179, 22539 }, { 0x2171, 22543 }, { 0x2174, 22547 }, { 0x217E, 22551 }, { 0x2173, 22556 }, { 0x2178, 22560 }, { 0x2177, 22564 }, { 0x217C, 22568 }, { 0x2176, 22572 }, { 0x2172, 22576 }, { 0x217A, 22580 }, { 0x217B, 22584 }, { 0x02DC, 22588 }, { 0x6E69, 22590 }, { 0x6E66, 22593 }, { 0x6E5F, 22596 }, { 0x220A, 22599 }, { 0x22F7, 22602 }, { 0x22F4, 22607 }, { 0x6E6A, 22618 }, { 0x6E68, 22621 }, { 0x6E61, 22624 }, { 0x220D, 22626 }, { 0x22FE, 22630 }, { 0x22FC, 22634 }, { 0x6E56, 22644 }, { 0x6E60, 22647 }, { 0x6E64, 22649 }, { 0x6E54, 22652 }, { 0x6E6B, 22654 }, { 0x6E57, 22657 }, { 0x6E51, 22660 }, { 0x6E65, 22663 }, { 0x6E63, 22666 }, { 0x2A33, 22668 }, { 0x2323, 22670 }, { 0x2117, 22671 }, { 0x2198, 22674 }, { 0x21F2, 22677 }, { 0x2929, 22682 }, { 0x2925, 22689 }, { 0x292D, 22694 }, { 0x2B0A, 22701 }, { 0x2B02, 22705 }, { 0x21D8, 22709 }, { 0x2199, 22713 }, { 0x292A, 22716 }, { 0x2926, 22723 }, { 0x2B0B, 22728 }, { 0x2B03, 22732 }, { 0x21D9, 22736 }, { 0x0020, 22740 }, { 0x27A7, 22741 }, { 0x269A, 22745 }, { 0x2695, 22748 }, { 0x2053, 22751 }, { 0x0BF8, 22753 }, { 0x0BD7, 22757 }, { 0x0BD0, 22761 }, { 0x0BF3, 22763 }, { 0x0BCD, 22766 }, { 0x0B83, 22769 }, { 0x0B82, 22772 }, { 0x0BF5, 22775 }, { 0x0BF6, 22778 }, { 0x0BE7, 22781 }, { 0x0BEC, 22784 }, { 0x0BE8, 22787 }, { 0x0BEB, 22790 }, { 0x0BEA, 22793 }, { 0x0BEF, 22796 }, { 0x0BE6, 22799 }, { 0x0BEE, 22802 }, { 0x0BED, 22805 }, { 0x0BE9, 22808 }, { 0x0BF4, 22811 }, { 0x0BF9, 22814 }, { 0x0BC6, 22817 }, { 0x0BBF, 22821 }, { 0x0BCA, 22825 }, { 0x0BC1, 22829 }, { 0x0BBE, 22833 }, { 0x0BC8, 22837 }, { 0x0BCC, 22841 }, { 0x0BC7, 22845 }, { 0x0BC0, 22849 }, { 0x0BCB, 22853 }, { 0x0BC2, 22857 }, { 0x0BF7, 22861 }, { 0x0B85, 22864 }, { 0x0B8E, 22867 }, { 0x0B87, 22870 }, { 0x0B92, 22873 }, { 0x0B89, 22876 }, { 0x0B86, 22879 }, { 0x0B90, 22882 }, { 0x0B94, 22885 }, { 0x0B9A, 22888 }, { 0x0B8F, 22891 }, { 0x0BB9, 22894 }, { 0x0B88, 22897 }, { 0x0B9C, 22900 }, { 0x0B95, 22903 }, { 0x0BB2, 22906 }, { 0x0BAE, 22909 }, { 0x0BA8, 22912 }, { 0x0B93, 22915 }, { 0x0BAA, 22918 }, { 0x0BB0, 22921 }, { 0x0BB8, 22924 }, { 0x0BA4, 22927 }, { 0x0B8A, 22930 }, { 0x0BB5, 22933 }, { 0x0BAF, 22936 }, { 0x0BB3, 22939 }, { 0x0B99, 22942 }, { 0x0BA3, 22945 }, { 0x0B9E, 22948 }, { 0x0BB1, 22951 }, { 0x0BB6, 22954 }, { 0x0BB7, 22957 }, { 0x0B9F, 22960 }, { 0x0BB4, 22963 }, { 0x0BA9, 22966 }, { 0x0BF1, 22969 }, { 0x0BF2, 22973 }, { 0x0BF0, 22977 }, { 0x0BFA, 22980 }, { 0x2204, 22983 }, { 0x2203, 22987 }, { 0x2056, 22989 }, { 0x2B31, 22992 }, { 0x21F6, 22995 }, { 0x2A76, 22998 }, { 0x27C0, 23002 }, { 0x2745, 23005 }, { 0x007E, 23008 }, { 0x2E1E, 23009 }, { 0x2E1F, 23013 }, { 0x2E1B, 23017 }, { 0x223C, 23021 }, { 0x2A6A, 23023 }, { 0x2A6B, 23028 }, { 0x2B49, 23033 }, { 0x2972, 23038 }, { 0x29D4, 23043 }, { 0x29D5, 23048 }, { 0x2330, 23053 }, { 0x2122, 23055 }, { 0x222A, 23058 }, { 0x2A41, 23059 }, { 0x2A45, 23063 }, { 0x2A42, 23067 }, { 0x2A48, 23070 }, { 0x2A46, 23075 }, { 0x2A4A, 23078 }, { 0x2594, 23084 }, { 0x2580, 23088 }, { 0x25E0, 23091 }, { 0x25DA, 23094 }, { 0x23B0, 23099 }, { 0x27D4, 23107 }, { 0x25DC, 23112 }, { 0x25F8, 23117 }, { 0x2701, 23120 }, { 0x23B1, 23123 }, { 0x2710, 23131 }, { 0x25DD, 23134 }, { 0x2752, 23139 }, { 0x25F9, 23144 }, { 0x2750, 23147 }, { 0x26B6, 23152 }, { 0x264D, 23153 }, { 0x231A, 23154 }, { 0x2638, 23155 }, { 0x261D, 23158 }, { 0x2711, 23162 }, { 0x263C, 23164 }, { 0x2667, 23168 }, { 0x261F, 23171 }, { 0x2690, 23175 }, { 0x2727, 23177 }, { 0x261C, 23181 }, { 0x2606, 23185 }, { 0x2B1E, 23187 }, { 0x2654, 23191 }, { 0x2659, 23194 }, { 0x2656, 23197 }, { 0x2655, 23200 }, { 0x2657, 23203 }, { 0x2658, 23206 }, { 0x2661, 23209 }, { 0x2B1C, 23212 }, { 0x261E, 23215 }, { 0x2616, 23219 }, { 0x2B52, 23222 }, { 0x25AB, 23225 }, { 0x2B2B, 23228 }, { 0x2664, 23231 }, { 0x25E6, 23234 }, { 0x25CB, 23236 }, { 0x2686, 23238 }, { 0x2687, 23243 }, { 0x29EC, 23248 }, { 0x25F5, 23253 }, { 0x25F6, 23259 }, { 0x25F4, 23265 }, { 0x25F7, 23271 }, { 0x2B50, 23277 }, { 0x25FD, 23280 }, { 0x25FB, 23284 }, { 0x2B26, 23287 }, { 0x2B28, 23290 }, { 0x6E46, 23293 }, { 0x25A1, 23296 }, { 0x25F1, 23298 }, { 0x25F2, 23304 }, { 0x25F0, 23310 }, { 0x25F3, 23316 }, { 0x2385, 23322 }, { 0x25A2, 23328 }, { 0x25EB, 23333 }, { 0x27E4, 23339 }, { 0x27E5, 23344 }, { 0x25A3, 23349 }, { 0x25C7, 23355 }, { 0x2662, 23357 }, { 0x27D0, 23360 }, { 0x25C8, 23365 }, { 0x2B21, 23371 }, { 0x263A, 23373 }, { 0x26C0, 23376 }, { 0x26C1, 23379 }, { 0x2740, 23382 }, { 0x2639, 23384 }, { 0x2B20, 23387 }, { 0x2704, 23389 }, { 0x27C1, 23391 }, { 0x2AFE, 23397 }, { 0x2B2F, 23400 }, { 0x25AF, 23403 }, { 0x29D6, 23406 }, { 0x25AD, 23408 }, { 0x260F, 23410 }, { 0x23E2, 23412 }, { 0x2B2D, 23414 }, { 0x25B5, 23417 }, { 0x25B3, 23421 }, { 0x25EC, 23424 }, { 0x27E1, 23429 }, { 0x27E2, 23432 }, { 0x27E3, 23438 }, { 0x25BF, 23444 }, { 0x25BD, 23448 }, { 0x25C3, 23451 }, { 0x25C5, 23455 }, { 0x25C1, 23458 }, { 0x25B1, 23461 }, { 0x25B9, 23463 }, { 0x25BB, 23467 }, { 0x2B54, 23470 }, { 0x25B7, 23473 }, { 0x713C, 23476 }, { 0x7101, 23481 }, { 0x7100, 23485 }, { 0x7102, 23489 }, { 0x713D, 23492 }, { 0x7107, 23497 }, { 0x7119, 23500 }, { 0x7122, 23504 }, { 0x710C, 23508 }, { 0x711E, 23511 }, { 0x7127, 23515 }, { 0x7110, 23519 }, { 0x712B, 23522 }, { 0x7108, 23526 }, { 0x711A, 23529 }, { 0x7123, 23533 }, { 0x710B, 23537 }, { 0x711D, 23540 }, { 0x7126, 23544 }, { 0x710A, 23548 }, { 0x711C, 23551 }, { 0x7125, 23555 }, { 0x710F, 23559 }, { 0x7121, 23562 }, { 0x712A, 23566 }, { 0x710E, 23570 }, { 0x7120, 23573 }, { 0x7129, 23577 }, { 0x7114, 23581 }, { 0x712F, 23584 }, { 0x7113, 23588 }, { 0x712E, 23591 }, { 0x710D, 23595 }, { 0x711F, 23598 }, { 0x7128, 23602 }, { 0x7115, 23606 }, { 0x7130, 23609 }, { 0x7109, 23613 }, { 0x711B, 23616 }, { 0x7124, 23620 }, { 0x7117, 23624 }, { 0x7132, 23627 }, { 0x7118, 23631 }, { 0x7133, 23634 }, { 0x7112, 23638 }, { 0x712D, 23641 }, { 0x7111, 23645 }, { 0x712C, 23648 }, { 0x7116, 23652 }, { 0x7131, 23655 }, { 0x7137, 23659 }, { 0x7138, 23663 }, { 0x713A, 23667 }, { 0x713B, 23671 }, { 0x7139, 23675 }, { 0x713F, 23679 }, { 0x713E, 23683 }, { 0x224A, 23687 }, { 0x2248, 23692 }, { 0x2A6F, 23695 }, { 0x2693, 23701 }, { 0x06DD, 23702 }, { 0x0608, 23706 }, { 0x060D, 23708 }, { 0x066D, 23711 }, { 0x06D4, 23715 }, { 0x0658, 23718 }, { 0x0613, 23722 }, { 0x060F, 23727 }, { 0x0603, 23730 }, { 0x0601, 23733 }, { 0x0611, 23736 }, { 0x06FD, 23740 }, { 0x06FE, 23744 }, { 0x0614, 23749 }, { 0x0612, 23752 }, { 0x0610, 23756 }, { 0x6E73, 23761 }, { 0x060C, 23764 }, { 0x064F, 23766 }, { 0x6E79, 23768 }, { 0x6E78, 23772 }, { 0x06EA, 23776 }, { 0x06EB, 23781 }, { 0x064E, 23786 }, { 0x065E, 23788 }, { 0x6E77, 23793 }, { 0x6E76, 23797 }, { 0x0654, 23801 }, { 0x0655, 23804 }, { 0x0650, 23807 }, { 0x6E7B, 23809 }, { 0x6E7A, 23813 }, { 0x06E9, 23817 }, { 0x06ED, 23821 }, { 0x06E3, 23825 }, { 0x06E5, 23829 }, { 0x06E6, 23832 }, { 0x06D9, 23835 }, { 0x0615, 23840 }, { 0x06E7, 23844 }, { 0x06DA, 23848 }, { 0x06D8, 23852 }, { 0x06E2, 23858 }, { 0x06E8, 23864 }, { 0x06DC, 23868 }, { 0x0617, 23872 }, { 0x06E4, 23876 }, { 0x06DB, 23880 }, { 0x06E1, 23885 }, { 0x06DF, 23892 }, { 0x06E0, 23897 }, { 0x06D7, 23903 }, { 0x06D6, 23913 }, { 0x0616, 23923 }, { 0x0619, 23932 }, { 0x0618, 23935 }, { 0x061A, 23938 }, { 0x06DE, 23941 }, { 0x0652, 23947 }, { 0x6E7F, 23949 }, { 0x6E7E, 23953 }, { 0x065C, 23957 }, { 0x065A, 23962 }, { 0x065B, 23968 }, { 0x06D0, 23975 }, { 0x6BE5, 23978 }, { 0x6BE7, 23983 }, { 0x6BE6, 23988 }, { 0x6BE4, 23993 }, { 0x06C7, 23998 }, { 0x0677, 24001 }, { 0x6BDD, 24007 }, { 0x6BD8, 24015 }, { 0x6BD7, 24020 }, { 0x06D5, 24025 }, { 0x06AD, 24028 }, { 0x6BD4, 24031 }, { 0x6BD6, 24036 }, { 0x6BD5, 24041 }, { 0x6BD3, 24046 }, { 0x06C6, 24051 }, { 0x6BDA, 24054 }, { 0x6BD9, 24059 }, { 0x06CB, 24064 }, { 0x6BDF, 24067 }, { 0x6BDE, 24072 }, { 0x06C8, 24077 }, { 0x6BDC, 24080 }, { 0x6BDB, 24085 }, { 0x0639, 24090 }, { 0x075D, 24093 }, { 0x075F, 24100 }, { 0x06A0, 24108 }, { 0x075E, 24115 }, { 0x6ECA, 24124 }, { 0x6ECC, 24129 }, { 0x6ECB, 24134 }, { 0x6EC9, 24139 }, { 0x0628, 24144 }, { 0x0751, 24147 }, { 0x0754, 24157 }, { 0x0756, 24167 }, { 0x0752, 24173 }, { 0x0753, 24182 }, { 0x0750, 24195 }, { 0x0755, 24203 }, { 0x6E90, 24211 }, { 0x6E92, 24216 }, { 0x6E91, 24221 }, { 0x6E8F, 24226 }, { 0x0636, 24231 }, { 0x06FB, 24234 }, { 0x6EBE, 24240 }, { 0x6EC0, 24245 }, { 0x6EBF, 24250 }, { 0x6EBD, 24255 }, { 0x062F, 24260 }, { 0x068A, 24263 }, { 0x068B, 24269 }, { 0x0759, 24278 }, { 0x0690, 24289 }, { 0x0689, 24296 }, { 0x068F, 24301 }, { 0x06EE, 24309 }, { 0x075A, 24315 }, { 0x6EAA, 24323 }, { 0x6EA9, 24328 }, { 0x068E, 24333 }, { 0x6B87, 24336 }, { 0x6B86, 24341 }, { 0x0641, 24346 }, { 0x06A3, 24349 }, { 0x06A2, 24355 }, { 0x0760, 24362 }, { 0x06A5, 24369 }, { 0x0761, 24376 }, { 0x6ED2, 24385 }, { 0x6ED4, 24390 }, { 0x6ED3, 24395 }, { 0x6ED1, 24400 }, { 0x06AF, 24405 }, { 0x06B2, 24408 }, { 0x06B0, 24415 }, { 0x06B4, 24420 }, { 0x6B93, 24427 }, { 0x6B95, 24432 }, { 0x6B94, 24437 }, { 0x6B92, 24442 }, { 0x062D, 24447 }, { 0x0757, 24450 }, { 0x0682, 24457 }, { 0x0681, 24465 }, { 0x076F, 24471 }, { 0x0772, 24482 }, { 0x076E, 24491 }, { 0x0685, 24500 }, { 0x0758, 24507 }, { 0x077C, 24516 }, { 0x6EA2, 24525 }, { 0x6EA4, 24530 }, { 0x6EA3, 24535 }, { 0x6EA1, 24540 }, { 0x0647, 24545 }, { 0x06C1, 24548 }, { 0x06C2, 24552 }, { 0x6BA7, 24559 }, { 0x6BA9, 24565 }, { 0x6BA8, 24571 }, { 0x6BA6, 24577 }, { 0x06C0, 24583 }, { 0x6BA5, 24589 }, { 0x6BA4, 24597 }, { 0x06FF, 24605 }, { 0x6EEA, 24611 }, { 0x6EEC, 24616 }, { 0x6EEB, 24621 }, { 0x6EE9, 24626 }, { 0x06BE, 24631 }, { 0x6BAB, 24635 }, { 0x6BAD, 24641 }, { 0x6BAC, 24647 }, { 0x6BAA, 24653 }, { 0x0698, 24659 }, { 0x6B8B, 24662 }, { 0x6B8A, 24667 }, { 0x0643, 24672 }, { 0x06AC, 24675 }, { 0x077F, 24681 }, { 0x06AB, 24688 }, { 0x06AE, 24693 }, { 0x6EDA, 24700 }, { 0x6EDC, 24705 }, { 0x6EDB, 24710 }, { 0x6ED9, 24715 }, { 0x0644, 24720 }, { 0x076A, 24723 }, { 0x06B6, 24728 }, { 0x06B5, 24734 }, { 0x06B7, 24740 }, { 0x06B8, 24747 }, { 0x6EDE, 24754 }, { 0x6EE0, 24759 }, { 0x6EDF, 24764 }, { 0x6EDD, 24769 }, { 0x067E, 24774 }, { 0x6B57, 24777 }, { 0x6B59, 24782 }, { 0x6B58, 24787 }, { 0x6B56, 24792 }, { 0x0642, 24797 }, { 0x06A7, 24800 }, { 0x06A8, 24806 }, { 0x6ED6, 24813 }, { 0x6ED8, 24818 }, { 0x6ED7, 24823 }, { 0x6ED5, 24828 }, { 0x0631, 24833 }, { 0x0694, 24836 }, { 0x0696, 24842 }, { 0x0697, 24851 }, { 0x076B, 24858 }, { 0x0699, 24866 }, { 0x0693, 24873 }, { 0x076C, 24878 }, { 0x0692, 24884 }, { 0x0695, 24890 }, { 0x0771, 24897 }, { 0x075B, 24908 }, { 0x06EF, 24913 }, { 0x6EAE, 24919 }, { 0x6EAD, 24924 }, { 0x0635, 24929 }, { 0x069D, 24932 }, { 0x069E, 24939 }, { 0x6EBA, 24946 }, { 0x6EBC, 24951 }, { 0x6EBB, 24956 }, { 0x6EB9, 24961 }, { 0x0637, 24966 }, { 0x069F, 24969 }, { 0x6EC2, 24976 }, { 0x6EC4, 24981 }, { 0x6EC3, 24986 }, { 0x6EC1, 24991 }, { 0x062A, 24996 }, { 0x067C, 24999 }, { 0x067D, 25004 }, { 0x6E96, 25012 }, { 0x6E98, 25017 }, { 0x6E97, 25022 }, { 0x0629, 25027 }, { 0x06C3, 25031 }, { 0x6E94, 25036 }, { 0x6E93, 25042 }, { 0x6E95, 25048 }, { 0x06A4, 25053 }, { 0x6B6B, 25056 }, { 0x6B6D, 25061 }, { 0x6B6C, 25066 }, { 0x6B6A, 25071 }, { 0x0648, 25076 }, { 0x06CF, 25079 }, { 0x06CA, 25085 }, { 0x06C4, 25092 }, { 0x0624, 25097 }, { 0x6E86, 25103 }, { 0x6E85, 25111 }, { 0x0778, 25119 }, { 0x0779, 25128 }, { 0x6EEE, 25137 }, { 0x6EED, 25142 }, { 0x064A, 25147 }, { 0x06CD, 25150 }, { 0x0626, 25155 }, { 0x6E8A, 25161 }, { 0x6E8C, 25169 }, { 0x6E8B, 25177 }, { 0x6E89, 25185 }, { 0x06CE, 25193 }, { 0x06D1, 25199 }, { 0x6EF2, 25206 }, { 0x06D2, 25211 }, { 0x06D3, 25215 }, { 0x6BB1, 25222 }, { 0x6BB0, 25231 }, { 0x077A, 25240 }, { 0x077B, 25250 }, { 0x6BAF, 25260 }, { 0x6BAE, 25266 }, { 0x6EF4, 25272 }, { 0x6EF3, 25277 }, { 0x6EF1, 25282 }, { 0x0638, 25287 }, { 0x6EC6, 25290 }, { 0x6EC8, 25295 }, { 0x6EC7, 25300 }, { 0x6EC5, 25305 }, { 0x0627, 25310 }, { 0x0672, 25313 }, { 0x0673, 25320 }, { 0x0623, 25327 }, { 0x6E84, 25333 }, { 0x6E83, 25341 }, { 0x0625, 25349 }, { 0x6E88, 25355 }, { 0x6E87, 25363 }, { 0x0622, 25371 }, { 0x6E82, 25377 }, { 0x6E81, 25385 }, { 0x0773, 25393 }, { 0x0774, 25402 }, { 0x6E8E, 25411 }, { 0x0671, 25416 }, { 0x6B51, 25420 }, { 0x6B50, 25426 }, { 0x0649, 25432 }, { 0x6EF0, 25436 }, { 0x6EEF, 25442 }, { 0x6E8D, 25448 }, { 0x067B, 25453 }, { 0x6B53, 25456 }, { 0x6B55, 25461 }, { 0x6B54, 25466 }, { 0x6B52, 25471 }, { 0x0688, 25476 }, { 0x6B89, 25479 }, { 0x6B88, 25484 }, { 0x0684, 25489 }, { 0x6B73, 25492 }, { 0x6B75, 25497 }, { 0x6B74, 25502 }, { 0x6B72, 25507 }, { 0x06B3, 25512 }, { 0x6B97, 25515 }, { 0x6B99, 25520 }, { 0x6B98, 25525 }, { 0x6B96, 25530 }, { 0x0674, 25535 }, { 0x0676, 25539 }, { 0x0678, 25544 }, { 0x0675, 25549 }, { 0x062C, 25554 }, { 0x6E9E, 25557 }, { 0x6EA0, 25562 }, { 0x6E9F, 25567 }, { 0x6E9D, 25572 }, { 0x062E, 25577 }, { 0x6EA6, 25580 }, { 0x6EA8, 25585 }, { 0x6EA7, 25590 }, { 0x6EA5, 25595 }, { 0x0645, 25600 }, { 0x0765, 25603 }, { 0x0766, 25609 }, { 0x6EE2, 25615 }, { 0x6EE4, 25620 }, { 0x6EE3, 25625 }, { 0x6EE1, 25630 }, { 0x0646, 25635 }, { 0x06B9, 25638 }, { 0x0767, 25644 }, { 0x06BC, 25651 }, { 0x0769, 25656 }, { 0x0768, 25662 }, { 0x06BD, 25668 }, { 0x6EE6, 25675 }, { 0x06BA, 25680 }, { 0x6B9F, 25684 }, { 0x6B9E, 25690 }, { 0x6EE8, 25696 }, { 0x6EE7, 25701 }, { 0x6EE5, 25706 }, { 0x0683, 25711 }, { 0x6B77, 25714 }, { 0x6B79, 25719 }, { 0x6B78, 25724 }, { 0x6B76, 25729 }, { 0x0691, 25734 }, { 0x6B8D, 25737 }, { 0x6B8C, 25742 }, { 0x0633, 25747 }, { 0x069A, 25750 }, { 0x076D, 25759 }, { 0x075C, 25767 }, { 0x0770, 25774 }, { 0x069B, 25785 }, { 0x069C, 25792 }, { 0x077D, 25803 }, { 0x077E, 25812 }, { 0x6EB2, 25818 }, { 0x6EB4, 25823 }, { 0x6EB3, 25828 }, { 0x6EB1, 25833 }, { 0x0630, 25838 }, { 0x6EAC, 25841 }, { 0x6EAB, 25846 }, { 0x062B, 25851 }, { 0x6E9A, 25854 }, { 0x6E9C, 25859 }, { 0x6E9B, 25864 }, { 0x6E99, 25869 }, { 0x0679, 25874 }, { 0x6B67, 25877 }, { 0x6B69, 25882 }, { 0x6B68, 25887 }, { 0x6B66, 25892 }, { 0x0632, 25897 }, { 0x6EB0, 25900 }, { 0x6EAF, 25905 }, { 0x0680, 25910 }, { 0x6B5B, 25913 }, { 0x6B5D, 25918 }, { 0x6B5C, 25923 }, { 0x6B5A, 25928 }, { 0x068C, 25933 }, { 0x6B85, 25936 }, { 0x6B84, 25941 }, { 0x06CC, 25946 }, { 0x063E, 25950 }, { 0x063F, 25958 }, { 0x0775, 25966 }, { 0x0777, 25976 }, { 0x0776, 25986 }, { 0x063D, 25996 }, { 0x6BFD, 26003 }, { 0x6BFF, 26009 }, { 0x6BFE, 26015 }, { 0x6BFC, 26021 }, { 0x063A, 26027 }, { 0x06FC, 26030 }, { 0x6ECE, 26036 }, { 0x6ED0, 26041 }, { 0x6ECF, 26046 }, { 0x6ECD, 26051 }, { 0x0621, 26056 }, { 0x6E80, 26059 }, { 0x06A9, 26064 }, { 0x0762, 26067 }, { 0x063B, 26073 }, { 0x0763, 26080 }, { 0x063C, 26087 }, { 0x0764, 26094 }, { 0x6B8F, 26103 }, { 0x6B91, 26108 }, { 0x6B90, 26113 }, { 0x6B8E, 26118 }, { 0x06B1, 26123 }, { 0x6B9B, 26126 }, { 0x6B9D, 26131 }, { 0x6B9C, 26136 }, { 0x6B9A, 26141 }, { 0x06A6, 26146 }, { 0x6B6F, 26149 }, { 0x6B71, 26154 }, { 0x6B70, 26159 }, { 0x6B6E, 26164 }, { 0x06BB, 26169 }, { 0x6BA1, 26172 }, { 0x6BA3, 26177 }, { 0x6BA2, 26182 }, { 0x6BA0, 26187 }, { 0x0634, 26192 }, { 0x06FA, 26195 }, { 0x6EB6, 26201 }, { 0x6EB8, 26206 }, { 0x6EB7, 26211 }, { 0x6EB5, 26216 }, { 0x06AA, 26221 }, { 0x0686, 26225 }, { 0x06BF, 26228 }, { 0x6B7B, 26234 }, { 0x6B7D, 26239 }, { 0x6B7C, 26244 }, { 0x6B7A, 26249 }, { 0x067F, 26254 }, { 0x6B63, 26257 }, { 0x6B65, 26262 }, { 0x6B64, 26267 }, { 0x6B62, 26272 }, { 0x068D, 26277 }, { 0x6B83, 26280 }, { 0x6B82, 26285 }, { 0x067A, 26290 }, { 0x6B5F, 26293 }, { 0x6B61, 26298 }, { 0x6B60, 26303 }, { 0x6B5E, 26308 }, { 0x6BE9, 26313 }, { 0x6BE8, 26322 }, { 0x066E, 26331 }, { 0x06A1, 26335 }, { 0x066F, 26339 }, { 0x06C5, 26343 }, { 0x6BE1, 26347 }, { 0x6BE0, 26353 }, { 0x06C9, 26359 }, { 0x6BE3, 26363 }, { 0x6BE2, 26369 }, { 0x0687, 26375 }, { 0x6B7F, 26378 }, { 0x6B81, 26383 }, { 0x6B80, 26388 }, { 0x6B7E, 26393 }, { 0x0670, 26398 }, { 0x0653, 26402 }, { 0x0600, 26405 }, { 0x060E, 26408 }, { 0x0651, 26412 }, { 0x6E7D, 26414 }, { 0x6E7C, 26418 }, { 0x061E, 26422 }, { 0x066B, 26427 }, { 0x066A, 26430 }, { 0x06EC, 26433 }, { 0x0640, 26440 }, { 0x6E71, 26442 }, { 0x064C, 26447 }, { 0x6E72, 26449 }, { 0x064B, 26453 }, { 0x6E70, 26455 }, { 0x0602, 26459 }, { 0x0657, 26462 }, { 0x064D, 26465 }, { 0x6E74, 26467 }, { 0x6D14, 26471 }, { 0x6CF8, 26478 }, { 0x6D13, 26485 }, { 0x6CF7, 26493 }, { 0x6D75, 26501 }, { 0x6DC4, 26510 }, { 0x6CBA, 26519 }, { 0x6C29, 26526 }, { 0x6DB6, 26533 }, { 0x6D78, 26542 }, { 0x6D76, 26552 }, { 0x6D77, 26561 }, { 0x6CBB, 26570 }, { 0x6C2A, 26577 }, { 0x6DC2, 26584 }, { 0x6C9D, 26593 }, { 0x6C06, 26600 }, { 0x6CE2, 26607 }, { 0x6CA0, 26614 }, { 0x6C6A, 26621 }, { 0x6C6F, 26628 }, { 0x6C0A, 26635 }, { 0x6C6E, 26642 }, { 0x6C09, 26650 }, { 0x6C9C, 26658 }, { 0x6C05, 26665 }, { 0x6D9E, 26672 }, { 0x6C9E, 26681 }, { 0x6C07, 26688 }, { 0x6C6C, 26695 }, { 0x6CE1, 26702 }, { 0x6C9F, 26709 }, { 0x6C08, 26716 }, { 0x6C6D, 26723 }, { 0x6C6B, 26730 }, { 0x6DAB, 26737 }, { 0x6D6E, 26746 }, { 0x6CB5, 26756 }, { 0x6C23, 26763 }, { 0x6D2C, 26770 }, { 0x6D10, 26777 }, { 0x6D24, 26784 }, { 0x6D08, 26791 }, { 0x6D23, 26798 }, { 0x6D07, 26806 }, { 0x6CB4, 26814 }, { 0x6C22, 26821 }, { 0x6D6F, 26828 }, { 0x6D70, 26837 }, { 0x6CB6, 26846 }, { 0x6C24, 26853 }, { 0x6CB7, 26860 }, { 0x6C25, 26867 }, { 0x6CBF, 26874 }, { 0x6C2E, 26881 }, { 0x6C7D, 26888 }, { 0x6C32, 26895 }, { 0x6C7C, 26902 }, { 0x6C31, 26910 }, { 0x6CBE, 26918 }, { 0x6C2D, 26925 }, { 0x6D7C, 26932 }, { 0x6D7D, 26941 }, { 0x6CC0, 26950 }, { 0x6C2F, 26957 }, { 0x6DC1, 26964 }, { 0x6CC1, 26973 }, { 0x6C30, 26980 }, { 0x6D1C, 26987 }, { 0x6D00, 26994 }, { 0x6D1B, 27001 }, { 0x6CFF, 27009 }, { 0x6DBF, 27017 }, { 0x6CA9, 27026 }, { 0x6C17, 27033 }, { 0x6D5A, 27040 }, { 0x6D5B, 27049 }, { 0x6CAA, 27059 }, { 0x6C18, 27066 }, { 0x6C54, 27073 }, { 0x6C53, 27080 }, { 0x6CD7, 27088 }, { 0x6C51, 27095 }, { 0x6D93, 27102 }, { 0x6D94, 27111 }, { 0x6CD8, 27120 }, { 0x6C52, 27127 }, { 0x6CD9, 27134 }, { 0x6CC5, 27142 }, { 0x6C39, 27149 }, { 0x6C81, 27156 }, { 0x6CEB, 27163 }, { 0x6CC7, 27170 }, { 0x6C3B, 27177 }, { 0x6C84, 27184 }, { 0x6C3E, 27191 }, { 0x6C80, 27198 }, { 0x6C83, 27205 }, { 0x6C3D, 27213 }, { 0x6C37, 27221 }, { 0x6CC4, 27228 }, { 0x6C38, 27235 }, { 0x6CC6, 27242 }, { 0x6C3A, 27249 }, { 0x6DB7, 27256 }, { 0x6DBB, 27265 }, { 0x6DC3, 27274 }, { 0x6C82, 27283 }, { 0x6CEC, 27290 }, { 0x6CC8, 27297 }, { 0x6C3C, 27304 }, { 0x6D81, 27311 }, { 0x6D82, 27320 }, { 0x6D80, 27330 }, { 0x6DB5, 27339 }, { 0x6CCA, 27348 }, { 0x6C40, 27355 }, { 0x6CCD, 27362 }, { 0x6C87, 27369 }, { 0x6C44, 27376 }, { 0x6EF8, 27383 }, { 0x6EF7, 27393 }, { 0x6EFA, 27403 }, { 0x6EF9, 27413 }, { 0x6EF6, 27423 }, { 0x6EF5, 27433 }, { 0x6EFC, 27443 }, { 0x6C86, 27450 }, { 0x6C43, 27458 }, { 0x6EFB, 27466 }, { 0x6DAC, 27473 }, { 0x6D84, 27482 }, { 0x6D83, 27491 }, { 0x6DBC, 27500 }, { 0x6DBA, 27509 }, { 0x6CC9, 27518 }, { 0x6C3F, 27525 }, { 0x6D85, 27532 }, { 0x6D86, 27541 }, { 0x6CCB, 27550 }, { 0x6C41, 27557 }, { 0x6D87, 27564 }, { 0x6D88, 27573 }, { 0x6DAD, 27582 }, { 0x6C85, 27591 }, { 0x6CED, 27598 }, { 0x6CCC, 27605 }, { 0x6C42, 27612 }, { 0x6CC2, 27619 }, { 0x6C33, 27626 }, { 0x6C7F, 27633 }, { 0x6C36, 27640 }, { 0x6C7E, 27647 }, { 0x6C35, 27655 }, { 0x6D7E, 27663 }, { 0x6DB4, 27672 }, { 0x6DB2, 27681 }, { 0x6D7F, 27690 }, { 0x6CC3, 27699 }, { 0x6C34, 27706 }, { 0x6C5C, 27713 }, { 0x6D64, 27721 }, { 0x6D65, 27730 }, { 0x6DA9, 27739 }, { 0x6CB1, 27748 }, { 0x6C20, 27755 }, { 0x6D2B, 27762 }, { 0x6D0F, 27769 }, { 0x6D22, 27776 }, { 0x6D06, 27783 }, { 0x6D21, 27790 }, { 0x6D05, 27798 }, { 0x6CB2, 27806 }, { 0x6D66, 27813 }, { 0x6DC5, 27822 }, { 0x6CB3, 27831 }, { 0x6C21, 27838 }, { 0x6CB8, 27845 }, { 0x6C26, 27852 }, { 0x6D12, 27859 }, { 0x6CF6, 27866 }, { 0x6D11, 27873 }, { 0x6CF5, 27881 }, { 0x6D71, 27889 }, { 0x6D72, 27898 }, { 0x6D74, 27907 }, { 0x6D73, 27916 }, { 0x6D3A, 27925 }, { 0x6D33, 27932 }, { 0x6C27, 27939 }, { 0x6D51, 27946 }, { 0x6D52, 27955 }, { 0x6D53, 27964 }, { 0x6CA2, 27973 }, { 0x6C0C, 27980 }, { 0x6CE4, 27987 }, { 0x6CA5, 27994 }, { 0x6C70, 28001 }, { 0x6C75, 28008 }, { 0x6C10, 28015 }, { 0x6C74, 28022 }, { 0x6C0F, 28030 }, { 0x6D9F, 28038 }, { 0x6DA0, 28047 }, { 0x6D50, 28057 }, { 0x6CA1, 28066 }, { 0x6C0B, 28073 }, { 0x6DA1, 28080 }, { 0x6DA2, 28089 }, { 0x6D54, 28099 }, { 0x6CA3, 28108 }, { 0x6C0D, 28115 }, { 0x6D56, 28122 }, { 0x6DA3, 28131 }, { 0x6DA4, 28140 }, { 0x6D55, 28150 }, { 0x6D57, 28159 }, { 0x6C72, 28168 }, { 0x6CE3, 28175 }, { 0x6CA4, 28182 }, { 0x6C0E, 28189 }, { 0x6C73, 28196 }, { 0x6C71, 28203 }, { 0x6DAE, 28210 }, { 0x6CDB, 28219 }, { 0x6C56, 28226 }, { 0x6CF1, 28233 }, { 0x6CDE, 28240 }, { 0x6C91, 28247 }, { 0x6C96, 28254 }, { 0x6C5A, 28261 }, { 0x6C95, 28268 }, { 0x6C59, 28276 }, { 0x6DAF, 28284 }, { 0x6CDA, 28293 }, { 0x6C55, 28300 }, { 0x6CDC, 28307 }, { 0x6C57, 28314 }, { 0x6DB0, 28321 }, { 0x6D9C, 28330 }, { 0x6D9D, 28339 }, { 0x6C93, 28348 }, { 0x6CF0, 28355 }, { 0x6CDD, 28362 }, { 0x6C58, 28369 }, { 0x6C94, 28376 }, { 0x6C92, 28383 }, { 0x6BF7, 28390 }, { 0x6BF8, 28400 }, { 0x6BF6, 28410 }, { 0x6BF1, 28420 }, { 0x6BF0, 28430 }, { 0x6BED, 28440 }, { 0x6BEC, 28450 }, { 0x6BF3, 28460 }, { 0x6BF2, 28470 }, { 0x6BF5, 28480 }, { 0x6BF4, 28490 }, { 0x6C98, 28500 }, { 0x6C01, 28510 }, { 0x6CE0, 28520 }, { 0x6C9B, 28530 }, { 0x6C64, 28540 }, { 0x6BEF, 28550 }, { 0x6BEE, 28560 }, { 0x6C69, 28570 }, { 0x6C04, 28580 }, { 0x6BEB, 28590 }, { 0x6C68, 28600 }, { 0x6C03, 28611 }, { 0x6BEA, 28622 }, { 0x6C97, 28632 }, { 0x6C00, 28642 }, { 0x6C99, 28652 }, { 0x6C66, 28662 }, { 0x6CDF, 28672 }, { 0x6C9A, 28682 }, { 0x6C02, 28692 }, { 0x6C67, 28702 }, { 0x6C65, 28712 }, { 0x6D3B, 28722 }, { 0x6CB9, 28729 }, { 0x6C28, 28736 }, { 0x6D3C, 28743 }, { 0x6D3D, 28750 }, { 0x6C90, 28757 }, { 0x6C5D, 28766 }, { 0x6DBE, 28775 }, { 0x6DA6, 28784 }, { 0x6CA7, 28794 }, { 0x6C15, 28801 }, { 0x6D1E, 28808 }, { 0x6D02, 28815 }, { 0x6D1D, 28822 }, { 0x6D01, 28830 }, { 0x6D58, 28838 }, { 0x6D59, 28847 }, { 0x6DA5, 28856 }, { 0x6DA7, 28865 }, { 0x6CA8, 28875 }, { 0x6C16, 28882 }, { 0x6C1A, 28889 }, { 0x6D20, 28896 }, { 0x6D04, 28903 }, { 0x6D1F, 28910 }, { 0x6D03, 28918 }, { 0x6CAB, 28926 }, { 0x6C19, 28933 }, { 0x6CAC, 28940 }, { 0x6C1B, 28947 }, { 0x6D8B, 28954 }, { 0x6D89, 28963 }, { 0x6D8A, 28972 }, { 0x6CCF, 28981 }, { 0x6C46, 28988 }, { 0x6C4A, 28995 }, { 0x6C88, 29002 }, { 0x6C49, 29009 }, { 0x6D8C, 29017 }, { 0x6DC0, 29026 }, { 0x6D92, 29035 }, { 0x6D8D, 29044 }, { 0x6CCE, 29053 }, { 0x6C45, 29060 }, { 0x6DB9, 29067 }, { 0x6D8E, 29076 }, { 0x6D8F, 29085 }, { 0x6CD0, 29094 }, { 0x6C47, 29101 }, { 0x6DB1, 29108 }, { 0x6C89, 29117 }, { 0x6CD1, 29124 }, { 0x6C48, 29131 }, { 0x6DB3, 29138 }, { 0x6D96, 29147 }, { 0x6D95, 29157 }, { 0x6CD3, 29166 }, { 0x6C4C, 29173 }, { 0x6CEF, 29180 }, { 0x6CD6, 29187 }, { 0x6C8A, 29194 }, { 0x6C8F, 29201 }, { 0x6C50, 29208 }, { 0x6C8E, 29215 }, { 0x6C4F, 29223 }, { 0x6DBD, 29231 }, { 0x6DB8, 29240 }, { 0x6DC7, 29249 }, { 0x6D99, 29258 }, { 0x6D97, 29268 }, { 0x6D98, 29277 }, { 0x6CD2, 29286 }, { 0x6C4B, 29293 }, { 0x6CD4, 29300 }, { 0x6C4D, 29307 }, { 0x6D9A, 29314 }, { 0x6D9B, 29323 }, { 0x6C8C, 29333 }, { 0x6CEE, 29340 }, { 0x6CD5, 29347 }, { 0x6C4E, 29354 }, { 0x6C8D, 29361 }, { 0x6C8B, 29368 }, { 0x6DF1, 29375 }, { 0x6D5C, 29385 }, { 0x6D35, 29394 }, { 0x6CAE, 29401 }, { 0x6C1D, 29408 }, { 0x6CE8, 29415 }, { 0x6D31, 29422 }, { 0x6D2A, 29429 }, { 0x6D0E, 29436 }, { 0x6D18, 29443 }, { 0x6CFC, 29450 }, { 0x6D17, 29457 }, { 0x6CFB, 29465 }, { 0x6D5D, 29473 }, { 0x6D5E, 29482 }, { 0x6D34, 29492 }, { 0x6CAD, 29499 }, { 0x6C1C, 29506 }, { 0x6DC6, 29513 }, { 0x6DA8, 29522 }, { 0x6D36, 29532 }, { 0x6CAF, 29539 }, { 0x6C1E, 29546 }, { 0x6D5F, 29553 }, { 0x6D60, 29562 }, { 0x6D61, 29571 }, { 0x6D62, 29580 }, { 0x6D63, 29589 }, { 0x6CE7, 29598 }, { 0x6CB0, 29605 }, { 0x6C1F, 29612 }, { 0x6C5B, 29619 }, { 0x6CE6, 29627 }, { 0x6C76, 29634 }, { 0x6C7B, 29641 }, { 0x6C14, 29648 }, { 0x6C7A, 29655 }, { 0x6C13, 29663 }, { 0x6C11, 29671 }, { 0x6C78, 29678 }, { 0x6CE5, 29685 }, { 0x6CA6, 29692 }, { 0x6C12, 29699 }, { 0x6C79, 29706 }, { 0x6C77, 29713 }, { 0x6DF3, 29720 }, { 0x6DF2, 29725 }, { 0x6D16, 29730 }, { 0x6CFA, 29737 }, { 0x6D15, 29744 }, { 0x6CF9, 29752 }, { 0x6CBC, 29760 }, { 0x6C2B, 29767 }, { 0x6D7A, 29774 }, { 0x6D7B, 29783 }, { 0x6D79, 29793 }, { 0x6CBD, 29802 }, { 0x6C2C, 29809 }, { 0x6DF5, 29816 }, { 0x6DF0, 29821 }, { 0x6DF9, 29831 }, { 0x6DAA, 29836 }, { 0x6D67, 29845 }, { 0x6D68, 29854 }, { 0x6D26, 29863 }, { 0x6D38, 29870 }, { 0x6D2E, 29877 }, { 0x6D0A, 29884 }, { 0x6CEA, 29891 }, { 0x6D32, 29898 }, { 0x6D29, 29905 }, { 0x6D0D, 29912 }, { 0x6D1A, 29919 }, { 0x6CFE, 29926 }, { 0x6D19, 29933 }, { 0x6CFD, 29941 }, { 0x6D69, 29949 }, { 0x6D25, 29958 }, { 0x6D37, 29965 }, { 0x6D2D, 29972 }, { 0x6D09, 29979 }, { 0x6D27, 29986 }, { 0x6D39, 29993 }, { 0x6D2F, 30000 }, { 0x6D0B, 30007 }, { 0x6D6A, 30014 }, { 0x6D6B, 30023 }, { 0x6D6C, 30032 }, { 0x6D6D, 30041 }, { 0x6D28, 30050 }, { 0x6CE9, 30057 }, { 0x6D30, 30064 }, { 0x6D0C, 30071 }, { 0x6DF7, 30078 }, { 0x6DF6, 30083 }, { 0x6CF3, 30088 }, { 0x6C61, 30095 }, { 0x6CF2, 30102 }, { 0x6C60, 30109 }, { 0x6CF4, 30116 }, { 0x6C62, 30123 }, { 0x6C5E, 30130 }, { 0x6C5F, 30137 }, { 0x6C63, 30144 }, { 0x6BFA, 30152 }, { 0x6BFB, 30165 }, { 0x6BF9, 30178 }, { 0x6DF4, 30191 }, { 0x6DF8, 30196 }, { 0x6DFD, 30201 }, { 0x6DFA, 30206 }, { 0x6DFB, 30211 }, { 0x061F, 30214 }, { 0x065D, 30217 }, { 0x0659, 30220 }, { 0x061B, 30222 }, { 0x0656, 30224 }, { 0x066C, 30227 }, { 0x2717, 30230 }, { 0x2610, 30232 }, { 0x2612, 30234 }, { 0x2611, 30238 }, { 0x266B, 30242 }, { 0x266C, 30245 }, { 0x293B, 30248 }, { 0x2321, 30252 }, { 0x230D, 30255 }, { 0x2E24, 30258 }, { 0x231E, 30262 }, { 0x23DF, 30265 }, { 0x230C, 30268 }, { 0x2E25, 30271 }, { 0x231F, 30275 }, { 0x23B5, 30278 }, { 0x23B6, 30281 }, { 0x23E1, 30288 }, { 0x23DD, 30292 }, { 0x22C8, 30294 }, { 0x29D1, 30295 }, { 0x29D2, 30300 }, { 0x00A6, 30305 }, { 0x238B, 30307 }, { 0x2022, 30312 }, { 0x2219, 30313 }, { 0xC07F, 30315 }, { 0x264B, 30317 }, { 0x72A0, 30318 }, { 0x72A9, 30321 }, { 0x72A2, 30324 }, { 0x72BA, 30327 }, { 0x72C0, 30330 }, { 0x72B9, 30333 }, { 0x72BC, 30336 }, { 0x72A3, 30339 }, { 0x72AA, 30342 }, { 0x72B5, 30345 }, { 0x72AB, 30348 }, { 0x72B7, 30351 }, { 0x72A8, 30354 }, { 0x72A5, 30357 }, { 0x72B0, 30360 }, { 0x72AD, 30363 }, { 0x72B2, 30366 }, { 0x72B4, 30369 }, { 0x72A7, 30372 }, { 0x72AC, 30375 }, { 0x72CF, 30378 }, { 0x72C1, 30381 }, { 0x72C5, 30384 }, { 0x72BD, 30387 }, { 0x72A6, 30390 }, { 0x72CA, 30393 }, { 0x72BE, 30396 }, { 0x72C4, 30399 }, { 0x72B3, 30402 }, { 0x72A1, 30405 }, { 0x72C9, 30408 }, { 0x72AE, 30411 }, { 0x72B8, 30414 }, { 0x72C2, 30417 }, { 0x72C7, 30420 }, { 0x72BF, 30423 }, { 0x72CE, 30426 }, { 0x72CB, 30429 }, { 0x72CC, 30432 }, { 0x72CD, 30435 }, { 0x72AF, 30438 }, { 0x72C3, 30441 }, { 0x72B6, 30444 }, { 0x72A4, 30447 }, { 0x72B1, 30450 }, { 0x72C6, 30453 }, { 0x72C8, 30456 }, { 0x72D0, 30459 }, { 0x72BB, 30462 }, { 0x2104, 30465 }, { 0x26B7, 30468 }, { 0x25D5, 30469 }, { 0x29C3, 30477 }, { 0x25D0, 30485 }, { 0x25D2, 30490 }, { 0x25D1, 30495 }, { 0x29C2, 30500 }, { 0x25D3, 30507 }, { 0x25D4, 30512 }, { 0x25CD, 30518 }, { 0x29B5, 30522 }, { 0x29BB, 30526 }, { 0x29BA, 30530 }, { 0x2A4C, 30542 }, { 0x2A50, 30546 }, { 0x2ACF, 30553 }, { 0x2AD1, 30555 }, { 0x2AD0, 30560 }, { 0x2AD2, 30562 }, { 0x2A4D, 30567 }, { 0x26B0, 30571 }, { 0x2CF9, 30572 }, { 0x2CFC, 30577 }, { 0x2CFA, 30582 }, { 0x2CFB, 30588 }, { 0x2CFE, 30594 }, { 0x2C9F, 30597 }, { 0x2CAB, 30601 }, { 0x2C99, 30605 }, { 0x2C9B, 30609 }, { 0x2CA1, 30613 }, { 0x2CA3, 30617 }, { 0x2CA9, 30621 }, { 0x03EF, 30625 }, { 0x2C89, 30629 }, { 0x03E5, 30633 }, { 0x2CAD, 30637 }, { 0x2C9D, 30641 }, { 0x2CCF, 30645 }, { 0x2CB5, 30651 }, { 0x2CD9, 30657 }, { 0x2CC7, 30663 }, { 0x2CD5, 30669 }, { 0x2CD3, 30675 }, { 0x2CBF, 30681 }, { 0x2CCD, 30687 }, { 0x2CC5, 30693 }, { 0x2CDB, 30699 }, { 0x2CD7, 30705 }, { 0x2CDF, 30711 }, { 0x2CE1, 30717 }, { 0x2CE3, 30723 }, { 0x2CDD, 30729 }, { 0x2CB1, 30735 }, { 0x2CAF, 30739 }, { 0x2C8B, 30743 }, { 0x2CA7, 30747 }, { 0x2C81, 30751 }, { 0x2C8F, 30755 }, { 0x03E9, 30759 }, { 0x2C95, 30763 }, { 0x03E7, 30767 }, { 0x03E3, 30771 }, { 0x2CA5, 30775 }, { 0x2C83, 30779 }, { 0x2C8D, 30783 }, { 0x2C87, 30787 }, { 0x2C85, 30791 }, { 0x2C93, 30795 }, { 0x2C97, 30799 }, { 0x2CC1, 30803 }, { 0x03ED, 30807 }, { 0x03EB, 30811 }, { 0x2C91, 30815 }, { 0x2CC3, 30819 }, { 0x2CC9, 30824 }, { 0x2CD1, 30829 }, { 0x2CBB, 30834 }, { 0x2CB3, 30839 }, { 0x2CCB, 30844 }, { 0x2CB9, 30849 }, { 0x2CBD, 30854 }, { 0x2CB7, 30859 }, { 0x2CE5, 30864 }, { 0x2CE6, 30868 }, { 0x2CE4, 30872 }, { 0x2CE9, 30875 }, { 0x2CE8, 30879 }, { 0x2CEA, 30883 }, { 0x2CE7, 30887 }, { 0x2C9E, 30890 }, { 0x2CAA, 30894 }, { 0x2C98, 30898 }, { 0x2C9A, 30902 }, { 0x2CA0, 30906 }, { 0x2CA2, 30910 }, { 0x2CA8, 30914 }, { 0x03EE, 30918 }, { 0x2C88, 30922 }, { 0x03E4, 30926 }, { 0x2CAC, 30930 }, { 0x2C9C, 30934 }, { 0x2CCE, 30938 }, { 0x2CB4, 30944 }, { 0x2CD8, 30950 }, { 0x2CC6, 30956 }, { 0x2CD4, 30962 }, { 0x2CD2, 30968 }, { 0x2CBE, 30974 }, { 0x2CCC, 30980 }, { 0x2CC4, 30986 }, { 0x2CDA, 30992 }, { 0x2CD6, 30998 }, { 0x2CDE, 31004 }, { 0x2CE0, 31010 }, { 0x2CE2, 31016 }, { 0x2CDC, 31022 }, { 0x2CB0, 31028 }, { 0x2CAE, 31032 }, { 0x2C8A, 31036 }, { 0x2CA6, 31040 }, { 0x2C80, 31044 }, { 0x2C8E, 31048 }, { 0x03E8, 31052 }, { 0x2C94, 31056 }, { 0x03E6, 31060 }, { 0x03E2, 31064 }, { 0x2CA4, 31068 }, { 0x2C82, 31072 }, { 0x2C8C, 31076 }, { 0x2C86, 31080 }, { 0x2C84, 31084 }, { 0x2C92, 31088 }, { 0x2C96, 31092 }, { 0x2CC0, 31096 }, { 0x03EC, 31100 }, { 0x03EA, 31104 }, { 0x2C90, 31108 }, { 0x2CC2, 31112 }, { 0x2CC8, 31117 }, { 0x2CD0, 31122 }, { 0x2CBA, 31127 }, { 0x2CB2, 31132 }, { 0x2CCA, 31137 }, { 0x2CB8, 31142 }, { 0x2CBC, 31147 }, { 0x2CB6, 31152 }, { 0x2CFD, 31157 }, { 0x2CFF, 31161 }, { 0x2761, 31164 }, { 0x2020, 31169 }, { 0x6E4D, 31170 }, { 0x6E49, 31173 }, { 0x279F, 31175 }, { 0x00B0, 31179 }, { 0x2103, 31181 }, { 0x2109, 31183 }, { 0x9305, 31185 }, { 0x9302, 31188 }, { 0x268D, 31192 }, { 0x268E, 31196 }, { 0x9304, 31200 }, { 0x9303, 31204 }, { 0x268F, 31208 }, { 0x268C, 31212 }, { 0x9301, 31216 }, { 0x2393, 31220 }, { 0x0024, 31225 }, { 0xA062, 31227 }, { 0xA030, 31231 }, { 0xA063, 31235 }, { 0xA064, 31238 }, { 0xA065, 31241 }, { 0xA066, 31244 }, { 0xA067, 31247 }, { 0xA068, 31250 }, { 0xA069, 31253 }, { 0xA06A, 31256 }, { 0xA06B, 31259 }, { 0xA06C, 31262 }, { 0xA06D, 31265 }, { 0xA06E, 31268 }, { 0xA06F, 31271 }, { 0xA070, 31274 }, { 0xA071, 31277 }, { 0xA072, 31280 }, { 0xA073, 31283 }, { 0xA074, 31286 }, { 0xA075, 31289 }, { 0xA076, 31292 }, { 0xA077, 31295 }, { 0xA078, 31298 }, { 0xA079, 31301 }, { 0xA07A, 31304 }, { 0xA07B, 31307 }, { 0xA07C, 31310 }, { 0xA07D, 31313 }, { 0xA07E, 31316 }, { 0xA07F, 31319 }, { 0xA080, 31322 }, { 0xA081, 31325 }, { 0xA082, 31328 }, { 0xA083, 31331 }, { 0xA084, 31334 }, { 0xA085, 31337 }, { 0xA086, 31340 }, { 0xA087, 31343 }, { 0xA088, 31346 }, { 0xA089, 31349 }, { 0xA08A, 31352 }, { 0xA08B, 31355 }, { 0xA08C, 31358 }, { 0xA08D, 31361 }, { 0xA08E, 31364 }, { 0xA08F, 31367 }, { 0xA090, 31370 }, { 0xA091, 31373 }, { 0xA092, 31376 }, { 0xA093, 31379 }, { 0xA031, 31382 }, { 0xA032, 31385 }, { 0xA033, 31388 }, { 0xA034, 31391 }, { 0xA035, 31394 }, { 0xA036, 31397 }, { 0xA037, 31400 }, { 0xA038, 31403 }, { 0xA039, 31406 }, { 0xA03A, 31409 }, { 0xA03B, 31412 }, { 0xA03C, 31415 }, { 0xA03D, 31418 }, { 0xA03E, 31421 }, { 0xA03F, 31424 }, { 0xA040, 31427 }, { 0xA041, 31430 }, { 0xA042, 31433 }, { 0xA043, 31436 }, { 0xA044, 31439 }, { 0xA045, 31442 }, { 0xA046, 31445 }, { 0xA047, 31448 }, { 0xA048, 31451 }, { 0xA049, 31454 }, { 0xA04A, 31457 }, { 0xA04B, 31460 }, { 0xA04C, 31463 }, { 0xA04D, 31466 }, { 0xA04E, 31469 }, { 0xA04F, 31472 }, { 0xA050, 31475 }, { 0xA051, 31478 }, { 0xA052, 31481 }, { 0xA053, 31484 }, { 0xA054, 31487 }, { 0xA055, 31490 }, { 0xA056, 31493 }, { 0xA057, 31496 }, { 0xA058, 31499 }, { 0xA059, 31502 }, { 0xA05A, 31505 }, { 0xA05B, 31508 }, { 0xA05C, 31511 }, { 0xA05D, 31514 }, { 0xA05E, 31517 }, { 0xA05F, 31520 }, { 0xA060, 31523 }, { 0xA061, 31526 }, { 0x205C, 31529 }, { 0x2999, 31531 }, { 0x25CC, 31533 }, { 0x2E13, 31535 }, { 0x2B1A, 31537 }, { 0x2E08, 31539 }, { 0x2E16, 31542 }, { 0x2AEB, 31545 }, { 0x2017, 31548 }, { 0x2AEA, 31551 }, { 0x2995, 31554 }, { 0x29FA, 31559 }, { 0x6E4C, 31561 }, { 0x02DD, 31564 }, { 0x2A74, 31567 }, { 0x201E, 31570 }, { 0x2033, 31574 }, { 0x301E, 31576 }, { 0x2996, 31580 }, { 0x22D3, 31585 }, { 0x2021, 31587 }, { 0x2AA1, 31589 }, { 0x2AA3, 31592 }, { 0x2AA2, 31597 }, { 0x2A4F, 31600 }, { 0x2A4E, 31603 }, { 0x2AEC, 31606 }, { 0x22D0, 31610 }, { 0x24F5, 31612 }, { 0x24FA, 31616 }, { 0x24F6, 31620 }, { 0x24F9, 31624 }, { 0x24F8, 31628 }, { 0x24FD, 31632 }, { 0x24FC, 31636 }, { 0x24FB, 31640 }, { 0x24F7, 31644 }, { 0x24FE, 31648 }, { 0x2A54, 31652 }, { 0x2A53, 31655 }, { 0x2E17, 31658 }, { 0x2AFD, 31661 }, { 0x222C, 31664 }, { 0x2ABB, 31666 }, { 0x2047, 31668 }, { 0x2ABC, 31671 }, { 0x22D1, 31673 }, { 0x2AE3, 31675 }, { 0x2AE5, 31680 }, { 0x22AB, 31686 }, { 0x2016, 31692 }, { 0x203C, 31695 }, { 0x22D2, 31698 }, { 0x201F, 31700 }, { 0x266A, 31704 }, { 0x003D, 31706 }, { 0x29E3, 31708 }, { 0x29E4, 31713 }, { 0x2A66, 31721 }, { 0x2A77, 31726 }, { 0x2AAE, 31736 }, { 0x2A71, 31741 }, { 0x2A73, 31746 }, { 0x2B40, 31751 }, { 0x2971, 31756 }, { 0x2A6E, 31761 }, { 0x2255, 31764 }, { 0x2239, 31766 }, { 0x2640, 31767 }, { 0x2012, 31769 }, { 0x2007, 31771 }, { 0x2A0D, 31773 }, { 0x2766, 31776 }, { 0x2698, 31778 }, { 0x2055, 31779 }, { 0x22A9, 31782 }, { 0x2E10, 31783 }, { 0x221C, 31785 }, { 0x20A3, 31787 }, { 0x264A, 31790 }, { 0x20B0, 31791 }, { 0x29E6, 31794 }, { 0x7339, 31796 }, { 0x733E, 31799 }, { 0x7330, 31802 }, { 0x7333, 31805 }, { 0x7332, 31808 }, { 0x7337, 31811 }, { 0x7336, 31814 }, { 0x734A, 31817 }, { 0x733F, 31821 }, { 0x7346, 31824 }, { 0x7348, 31827 }, { 0x7347, 31830 }, { 0x733A, 31833 }, { 0x733B, 31836 }, { 0x733C, 31839 }, { 0x7349, 31842 }, { 0x7342, 31845 }, { 0x7343, 31848 }, { 0x7344, 31851 }, { 0x7345, 31854 }, { 0x7334, 31857 }, { 0x733D, 31860 }, { 0x7341, 31863 }, { 0x7338, 31866 }, { 0x7331, 31869 }, { 0x7340, 31872 }, { 0x7335, 31875 }, { 0x2692, 31878 }, { 0x262D, 31881 }, { 0x302F, 31884 }, { 0x3164, 31889 }, { 0x314F, 31891 }, { 0x3154, 31894 }, { 0x3163, 31897 }, { 0x3157, 31900 }, { 0x315C, 31903 }, { 0x3150, 31906 }, { 0x3153, 31909 }, { 0x3161, 31912 }, { 0x315A, 31915 }, { 0x3158, 31918 }, { 0x315E, 31921 }, { 0x315F, 31924 }, { 0x3151, 31927 }, { 0x3156, 31930 }, { 0x3162, 31933 }, { 0x315B, 31936 }, { 0x3160, 31939 }, { 0x3159, 31942 }, { 0x315D, 31945 }, { 0x3152, 31948 }, { 0x3155, 31951 }, { 0x3145, 31954 }, { 0x3189, 31957 }, { 0x318C, 31960 }, { 0x318D, 31963 }, { 0x3148, 31966 }, { 0x314E, 31969 }, { 0x3147, 31972 }, { 0x3141, 31975 }, { 0x3134, 31978 }, { 0x3142, 31981 }, { 0x3139, 31984 }, { 0x3187, 31987 }, { 0x318B, 31990 }, { 0x318E, 31993 }, { 0x3131, 31996 }, { 0x3137, 31999 }, { 0x3188, 32002 }, { 0x318A, 32005 }, { 0x314A, 32008 }, { 0x314B, 32011 }, { 0x317F, 32014 }, { 0x314D, 32017 }, { 0x314C, 32020 }, { 0x3181, 32023 }, { 0x3146, 32026 }, { 0x316F, 32029 }, { 0x3167, 32032 }, { 0x3144, 32035 }, { 0x313D, 32038 }, { 0x317E, 32041 }, { 0x317B, 32044 }, { 0x317D, 32047 }, { 0x3149, 32050 }, { 0x3185, 32053 }, { 0x3180, 32056 }, { 0x3165, 32059 }, { 0x3143, 32062 }, { 0x3133, 32065 }, { 0x316E, 32068 }, { 0x3135, 32071 }, { 0x3136, 32074 }, { 0x3176, 32077 }, { 0x3140, 32080 }, { 0x313B, 32083 }, { 0x313C, 32086 }, { 0x317A, 32089 }, { 0x317C, 32092 }, { 0x3132, 32095 }, { 0x3138, 32098 }, { 0x3186, 32101 }, { 0x3166, 32104 }, { 0x3172, 32107 }, { 0x3173, 32110 }, { 0x313A, 32113 }, { 0x316A, 32116 }, { 0x3171, 32119 }, { 0x3178, 32122 }, { 0x3170, 32125 }, { 0x3168, 32128 }, { 0x3177, 32131 }, { 0x316C, 32134 }, { 0x313F, 32137 }, { 0x313E, 32140 }, { 0x3182, 32143 }, { 0x3184, 32146 }, { 0x316B, 32149 }, { 0x3183, 32152 }, { 0x3174, 32155 }, { 0x3175, 32158 }, { 0x3169, 32161 }, { 0x316D, 32164 }, { 0x3179, 32167 }, { 0x302E, 32170 }, { 0x1109, 32175 }, { 0x110C, 32178 }, { 0x1112, 32181 }, { 0x110B, 32184 }, { 0x1106, 32187 }, { 0x1102, 32190 }, { 0x1107, 32193 }, { 0x1105, 32196 }, { 0x115F, 32199 }, { 0x1100, 32202 }, { 0x1103, 32205 }, { 0x110E, 32208 }, { 0x110F, 32211 }, { 0x1140, 32214 }, { 0x1111, 32217 }, { 0x1110, 32220 }, { 0x114C, 32223 }, { 0x110A, 32226 }, { 0x1145, 32229 }, { 0x1121, 32232 }, { 0x1136, 32235 }, { 0x113B, 32238 }, { 0x1135, 32241 }, { 0x1131, 32244 }, { 0x112E, 32247 }, { 0x1132, 32250 }, { 0x1130, 32253 }, { 0x110D, 32256 }, { 0x1158, 32259 }, { 0x1147, 32262 }, { 0x1114, 32265 }, { 0x1108, 32268 }, { 0x1119, 32271 }, { 0x114D, 32274 }, { 0x1148, 32277 }, { 0x1143, 32280 }, { 0x1144, 32283 }, { 0x111C, 32286 }, { 0x1116, 32289 }, { 0x1127, 32292 }, { 0x111F, 32295 }, { 0x111A, 32298 }, { 0x1118, 32301 }, { 0x112D, 32304 }, { 0x112F, 32307 }, { 0x1101, 32310 }, { 0x1104, 32313 }, { 0x1159, 32316 }, { 0x113C, 32319 }, { 0x1141, 32322 }, { 0x1142, 32325 }, { 0x1113, 32328 }, { 0x1115, 32331 }, { 0x111E, 32334 }, { 0x1120, 32337 }, { 0x1137, 32340 }, { 0x1138, 32343 }, { 0x113A, 32346 }, { 0x1139, 32349 }, { 0x1153, 32352 }, { 0x114E, 32355 }, { 0x1149, 32358 }, { 0x1146, 32361 }, { 0x114B, 32364 }, { 0x114A, 32367 }, { 0x111D, 32370 }, { 0x112B, 32373 }, { 0x111B, 32376 }, { 0x1156, 32379 }, { 0x1128, 32382 }, { 0x112A, 32385 }, { 0x1129, 32388 }, { 0x1117, 32391 }, { 0x1134, 32394 }, { 0x113E, 32397 }, { 0x1152, 32400 }, { 0x1154, 32403 }, { 0x1157, 32406 }, { 0x1125, 32409 }, { 0x1150, 32412 }, { 0x1126, 32415 }, { 0x1124, 32418 }, { 0x113D, 32421 }, { 0x1122, 32424 }, { 0x1123, 32427 }, { 0x1133, 32430 }, { 0x1155, 32433 }, { 0x114F, 32436 }, { 0x112C, 32439 }, { 0x113F, 32442 }, { 0x1151, 32445 }, { 0x11BA, 32448 }, { 0x11BD, 32451 }, { 0x11C2, 32454 }, { 0x11BC, 32457 }, { 0x11B7, 32460 }, { 0x11AB, 32463 }, { 0x11B8, 32466 }, { 0x11AF, 32469 }, { 0x11A8, 32472 }, { 0x11AE, 32475 }, { 0x11BE, 32478 }, { 0x11BF, 32481 }, { 0x11EB, 32484 }, { 0x11C1, 32487 }, { 0x11C0, 32490 }, { 0x11F0, 32493 }, { 0x11BB, 32496 }, { 0x11DD, 32499 }, { 0x11C7, 32502 }, { 0x11B9, 32505 }, { 0x11B3, 32508 }, { 0x11EA, 32511 }, { 0x11E9, 32514 }, { 0x11EE, 32517 }, { 0x11D0, 32520 }, { 0x11F7, 32523 }, { 0x11F5, 32526 }, { 0x11F8, 32529 }, { 0x11F6, 32532 }, { 0x11AA, 32535 }, { 0x11E1, 32538 }, { 0x11DC, 32541 }, { 0x11DB, 32544 }, { 0x11AC, 32547 }, { 0x11AD, 32550 }, { 0x11E5, 32553 }, { 0x11E3, 32556 }, { 0x11B6, 32559 }, { 0x11B1, 32562 }, { 0x11CD, 32565 }, { 0x11B2, 32568 }, { 0x11E7, 32571 }, { 0x11E8, 32574 }, { 0x11A9, 32577 }, { 0x11F9, 32580 }, { 0x11EC, 32583 }, { 0x11C3, 32586 }, { 0x11DA, 32589 }, { 0x11C5, 32592 }, { 0x11C6, 32595 }, { 0x11B0, 32598 }, { 0x11CE, 32601 }, { 0x11CB, 32604 }, { 0x11EF, 32607 }, { 0x11E2, 32610 }, { 0x11E6, 32613 }, { 0x11E0, 32616 }, { 0x11DF, 32619 }, { 0x11C8, 32622 }, { 0x11C9, 32625 }, { 0x11F3, 32628 }, { 0x11E4, 32631 }, { 0x11D8, 32634 }, { 0x11D7, 32637 }, { 0x11B5, 32640 }, { 0x11B4, 32643 }, { 0x11CA, 32646 }, { 0x11F1, 32649 }, { 0x11F4, 32652 }, { 0x11DE, 32655 }, { 0x11D6, 32658 }, { 0x11D2, 32661 }, { 0x11D3, 32664 }, { 0x11F2, 32667 }, { 0x11ED, 32670 }, { 0x11CC, 32673 }, { 0x11D4, 32676 }, { 0x11D9, 32679 }, { 0x11C4, 32682 }, { 0x11D1, 32685 }, { 0x11CF, 32688 }, { 0x11D5, 32691 }, { 0x1161, 32694 }, { 0x1166, 32697 }, { 0x1175, 32700 }, { 0x1169, 32703 }, { 0x116E, 32706 }, { 0x1162, 32709 }, { 0x1165, 32712 }, { 0x1173, 32715 }, { 0x116C, 32718 }, { 0x116A, 32721 }, { 0x1170, 32724 }, { 0x1171, 32727 }, { 0x1163, 32730 }, { 0x1168, 32733 }, { 0x1174, 32736 }, { 0x116D, 32739 }, { 0x1172, 32742 }, { 0x1176, 32745 }, { 0x1177, 32748 }, { 0x1198, 32751 }, { 0x119A, 32754 }, { 0x119B, 32757 }, { 0x1180, 32760 }, { 0x1182, 32763 }, { 0x1183, 32766 }, { 0x1189, 32769 }, { 0x118D, 32772 }, { 0x116B, 32775 }, { 0x116F, 32778 }, { 0x1164, 32781 }, { 0x1167, 32784 }, { 0x117A, 32787 }, { 0x117B, 32790 }, { 0x1195, 32793 }, { 0x119C, 32796 }, { 0x1199, 32799 }, { 0x117F, 32802 }, { 0x1181, 32805 }, { 0x118A, 32808 }, { 0x118C, 32811 }, { 0x1178, 32814 }, { 0x1197, 32817 }, { 0x1188, 32820 }, { 0x1187, 32823 }, { 0x118E, 32826 }, { 0x1190, 32829 }, { 0x1194, 32832 }, { 0x1193, 32835 }, { 0x119E, 32838 }, { 0x117C, 32841 }, { 0x1196, 32844 }, { 0x1179, 32847 }, { 0x117D, 32850 }, { 0x117E, 32853 }, { 0x1184, 32856 }, { 0x118F, 32859 }, { 0x1192, 32862 }, { 0x1160, 32865 }, { 0x1185, 32868 }, { 0x1186, 32871 }, { 0x1191, 32874 }, { 0x11A1, 32877 }, { 0x11A0, 32880 }, { 0x119D, 32883 }, { 0x118B, 32886 }, { 0x119F, 32889 }, { 0x11A2, 32892 }, { 0x05C5, 32895 }, { 0x05C4, 32899 }, { 0x05AF, 32903 }, { 0x05C2, 32907 }, { 0x05BF, 32911 }, { 0x05C1, 32914 }, { 0x05B2, 32918 }, { 0x05B1, 32922 }, { 0x05B3, 32926 }, { 0x05B4, 32930 }, { 0x05B9, 32933 }, { 0x05BA, 32936 }, { 0x05BD, 32942 }, { 0x05B7, 32945 }, { 0x05B6, 32948 }, { 0x05B0, 32951 }, { 0x05B5, 32954 }, { 0x05BC, 32957 }, { 0x05B8, 32962 }, { 0x05C7, 32965 }, { 0x05BB, 32969 }, { 0x6B1E, 32972 }, { 0x05AB, 32976 }, { 0x05AD, 32979 }, { 0x05AC, 32982 }, { 0x05A2, 32985 }, { 0x05A7, 32989 }, { 0x05A3, 32992 }, { 0x05A1, 32995 }, { 0x05A8, 32998 }, { 0x0597, 33001 }, { 0x0592, 33004 }, { 0x059B, 33007 }, { 0x05AA, 33010 }, { 0x059A, 33015 }, { 0x0595, 33018 }, { 0x0594, 33022 }, { 0x0598, 33026 }, { 0x05AE, 33029 }, { 0x059C, 33032 }, { 0x059D, 33035 }, { 0x05A5, 33039 }, { 0x05A6, 33042 }, { 0x0599, 33046 }, { 0x059F, 33049 }, { 0x0596, 33053 }, { 0x0591, 33056 }, { 0x05A0, 33059 }, { 0x05A9, 33063 }, { 0x05A4, 33067 }, { 0x059E, 33070 }, { 0x0593, 33073 }, { 0x05D4, 33076 }, { 0x6B34, 33079 }, { 0x05E4, 33084 }, { 0x6B4E, 33087 }, { 0x6B44, 33092 }, { 0x05D1, 33097 }, { 0x6B4C, 33100 }, { 0x6B31, 33105 }, { 0x05D7, 33110 }, { 0x05DB, 33113 }, { 0x6B4D, 33116 }, { 0x6B3B, 33121 }, { 0x05DE, 33126 }, { 0x6B3E, 33129 }, { 0x05E0, 33134 }, { 0x6B40, 33137 }, { 0x05E7, 33142 }, { 0x6B47, 33145 }, { 0x05EA, 33150 }, { 0x6B4A, 33153 }, { 0x05D8, 33158 }, { 0x6B38, 33161 }, { 0x05D5, 33166 }, { 0x6B4B, 33169 }, { 0x6B35, 33174 }, { 0x05D9, 33179 }, { 0x6B1D, 33182 }, { 0x6B39, 33187 }, { 0x05D0, 33192 }, { 0x6B30, 33195 }, { 0x6B2E, 33200 }, { 0x6B2F, 33205 }, { 0x05E2, 33210 }, { 0x05E8, 33213 }, { 0x6B48, 33216 }, { 0x05E9, 33221 }, { 0x6B2B, 33224 }, { 0x6B2A, 33230 }, { 0x6B49, 33236 }, { 0x6B2D, 33241 }, { 0x6B2C, 33249 }, { 0x6B23, 33257 }, { 0x6B24, 33261 }, { 0x6B28, 33265 }, { 0x6B21, 33269 }, { 0x6B27, 33273 }, { 0x6B22, 33277 }, { 0x6B26, 33281 }, { 0x6B25, 33286 }, { 0x05D3, 33290 }, { 0x6B33, 33293 }, { 0x05E3, 33298 }, { 0x6B43, 33302 }, { 0x05DA, 33308 }, { 0x6B3A, 33312 }, { 0x05DD, 33318 }, { 0x05DF, 33322 }, { 0x05E5, 33326 }, { 0x05D2, 33330 }, { 0x6B32, 33333 }, { 0x05DC, 33338 }, { 0x6B3C, 33341 }, { 0x05E6, 33346 }, { 0x6B46, 33349 }, { 0x05D6, 33354 }, { 0x6B36, 33357 }, { 0x05E1, 33362 }, { 0x6B41, 33365 }, { 0x6B20, 33370 }, { 0x6B29, 33374 }, { 0x6B4F, 33379 }, { 0x05F1, 33383 }, { 0x6B1F, 33388 }, { 0x05F0, 33394 }, { 0x05F2, 33399 }, { 0x05C6, 33404 }, { 0x05C3, 33408 }, { 0x05BE, 33412 }, { 0x05C0, 33415 }, { 0x05F3, 33418 }, { 0x05F4, 33421 }, { 0x2010, 33424 }, { 0x2E1A, 33425 }, { 0x2043, 33428 }, { 0x2F4F, 33430 }, { 0x2F21, 33434 }, { 0x2F22, 33437 }, { 0x2F7D, 33441 }, { 0x2F44, 33444 }, { 0x2F24, 33447 }, { 0x2F38, 33450 }, { 0x2F5C, 33453 }, { 0x2F5D, 33456 }, { 0x2F02, 33459 }, { 0x2F32, 33462 }, { 0x2F7F, 33465 }, { 0x2FB7, 33468 }, { 0x2F6C, 33471 }, { 0x2FB6, 33474 }, { 0x2F51, 33477 }, { 0x2F0E, 33480 }, { 0x2F78, 33483 }, { 0x2F07, 33486 }, { 0x2F08, 33489 }, { 0x2F79, 33492 }, { 0x2F46, 33495 }, { 0x2F7C, 33498 }, { 0x2F00, 33501 }, { 0x2F97, 33504 }, { 0x2F41, 33507 }, { 0x2FCF, 33510 }, { 0x2F9A, 33513 }, { 0x2F9B, 33516 }, { 0x2F48, 33519 }, { 0x2F92, 33522 }, { 0x2F47, 33525 }, { 0x2F17, 33528 }, { 0x2F06, 33531 }, { 0x2F36, 33534 }, { 0x2F64, 33538 }, { 0x2F96, 33541 }, { 0x2FC3, 33544 }, { 0x2FAD, 33547 }, { 0x2F88, 33550 }, { 0x2F9D, 33553 }, { 0x2F66, 33556 }, { 0x2FBB, 33561 }, { 0x2F9E, 33564 }, { 0x2F73, 33567 }, { 0x2FA2, 33570 }, { 0x2F52, 33573 }, { 0x2F56, 33576 }, { 0x2FC5, 33579 }, { 0x2F6B, 33582 }, { 0x2F3E, 33585 }, { 0x2F0C, 33588 }, { 0x2FCE, 33592 }, { 0x2FD1, 33595 }, { 0x2FAF, 33598 }, { 0x2F5B, 33601 }, { 0x2F55, 33604 }, { 0x2FC2, 33607 }, { 0x2F9C, 33610 }, { 0x2FCC, 33613 }, { 0x2FA8, 33616 }, { 0x2FA6, 33619 }, { 0x2FBD, 33622 }, { 0x2F59, 33625 }, { 0x2F3F, 33630 }, { 0x2FB8, 33633 }, { 0x2FC7, 33636 }, { 0x2F05, 33639 }, { 0x2F93, 33642 }, { 0x2F28, 33645 }, { 0x2F5F, 33648 }, { 0x2F4B, 33651 }, { 0x2F2A, 33654 }, { 0x2FB4, 33657 }, { 0x2FB2, 33660 }, { 0x2F09, 33663 }, { 0x2F63, 33666 }, { 0x2F01, 33669 }, { 0x2FA7, 33672 }, { 0x2F35, 33675 }, { 0x2F81, 33679 }, { 0x2F49, 33682 }, { 0x2FD0, 33685 }, { 0x2F10, 33688 }, { 0x2F7E, 33692 }, { 0x2FAC, 33695 }, { 0x2F76, 33698 }, { 0x2F27, 33701 }, { 0x2FC4, 33704 }, { 0x2F19, 33707 }, { 0x2F83, 33710 }, { 0x2F77, 33713 }, { 0x2F6A, 33716 }, { 0x2F3B, 33719 }, { 0x2F4C, 33722 }, { 0x2FBC, 33725 }, { 0x2F61, 33728 }, { 0x2F4A, 33731 }, { 0x2FA1, 33734 }, { 0x2F8F, 33737 }, { 0x2F91, 33741 }, { 0x2FB5, 33744 }, { 0x2FA3, 33747 }, { 0x2F2F, 33750 }, { 0x2F13, 33753 }, { 0x2F1C, 33756 }, { 0x2F6E, 33759 }, { 0x2FCA, 33762 }, { 0x2F8E, 33765 }, { 0x2F80, 33768 }, { 0x2F26, 33771 }, { 0x2F1A, 33774 }, { 0x2F8A, 33777 }, { 0x2F0D, 33780 }, { 0x2F4D, 33783 }, { 0x2F1F, 33786 }, { 0x2F0B, 33789 }, { 0x2F0A, 33792 }, { 0x2F65, 33795 }, { 0x2FBE, 33798 }, { 0x2FD5, 33801 }, { 0x2FC1, 33804 }, { 0x2F72, 33807 }, { 0x2F8B, 33810 }, { 0x2F3C, 33813 }, { 0x2FBA, 33816 }, { 0x2F11, 33819 }, { 0x2F60, 33822 }, { 0x2FA9, 33825 }, { 0x2F1D, 33828 }, { 0x2F12, 33831 }, { 0x2F15, 33834 }, { 0x2F2E, 33839 }, { 0x2F7A, 33842 }, { 0x2F99, 33845 }, { 0x2F37, 33848 }, { 0x2FAB, 33851 }, { 0x2F33, 33856 }, { 0x2F03, 33860 }, { 0x2FAA, 33863 }, { 0x2F5A, 33866 }, { 0x2F29, 33869 }, { 0x2F39, 33872 }, { 0x2FB3, 33875 }, { 0x2F6D, 33878 }, { 0x2F14, 33881 }, { 0x2F74, 33884 }, { 0x2F53, 33887 }, { 0x2F6F, 33890 }, { 0x2F62, 33893 }, { 0x2F0F, 33896 }, { 0x2F8C, 33899 }, { 0x2FD2, 33902 }, { 0x2F71, 33905 }, { 0x2F54, 33908 }, { 0x2FC6, 33911 }, { 0x2F69, 33914 }, { 0x2F25, 33917 }, { 0x2FAE, 33920 }, { 0x2F84, 33923 }, { 0x2F98, 33926 }, { 0x2F75, 33929 }, { 0x2F9F, 33932 }, { 0x2F40, 33935 }, { 0x2F2B, 33938 }, { 0x2F43, 33941 }, { 0x2F68, 33944 }, { 0x2F34, 33948 }, { 0x2F58, 33952 }, { 0x2FD3, 33956 }, { 0x2F57, 33959 }, { 0x2F16, 33962 }, { 0x2F8D, 33966 }, { 0x2FC9, 33969 }, { 0x2F85, 33972 }, { 0x2F87, 33975 }, { 0x2F42, 33978 }, { 0x2F04, 33981 }, { 0x2F94, 33984 }, { 0x2F70, 33987 }, { 0x2F2C, 33990 }, { 0x2F45, 33993 }, { 0x2FB1, 33996 }, { 0x2F86, 34000 }, { 0x2FCD, 34003 }, { 0x2F31, 34006 }, { 0x2FD4, 34009 }, { 0x2F95, 34012 }, { 0x2F4E, 34015 }, { 0x2FC8, 34018 }, { 0x2F3A, 34021 }, { 0x2F90, 34024 }, { 0x2F50, 34027 }, { 0x2F23, 34030 }, { 0x2F7B, 34033 }, { 0x2F3D, 34036 }, { 0x2FB0, 34039 }, { 0x2FA0, 34042 }, { 0x2F30, 34045 }, { 0x2F1B, 34048 }, { 0x2F20, 34051 }, { 0x2FA5, 34054 }, { 0x2FC0, 34057 }, { 0x2FB9, 34060 }, { 0x2F82, 34063 }, { 0x2F2D, 34066 }, { 0x2F5E, 34069 }, { 0x2F67, 34072 }, { 0x2F89, 34075 }, { 0x2F1E, 34078 }, { 0x2F18, 34081 }, { 0x2FCB, 34084 }, { 0x2FA4, 34087 }, { 0x2FBF, 34090 }, { 0x212A, 34094 }, { 0x327F, 34096 }, { 0x2AAB, 34099 }, { 0x2AAD, 34101 }, { 0x1C36, 34106 }, { 0x1C37, 34109 }, { 0x1C41, 34112 }, { 0x1C46, 34115 }, { 0x1C42, 34118 }, { 0x1C45, 34121 }, { 0x1C44, 34124 }, { 0x1C49, 34127 }, { 0x1C40, 34130 }, { 0x1C48, 34133 }, { 0x1C47, 34136 }, { 0x1C43, 34139 }, { 0x1C2C, 34142 }, { 0x1C27, 34146 }, { 0x1C28, 34150 }, { 0x1C2A, 34154 }, { 0x1C26, 34158 }, { 0x1C29, 34162 }, { 0x1C2B, 34166 }, { 0x1C23, 34170 }, { 0x1C13, 34173 }, { 0x1C06, 34176 }, { 0x1C0C, 34179 }, { 0x1C11, 34182 }, { 0x1C03, 34185 }, { 0x1C1D, 34188 }, { 0x1C08, 34191 }, { 0x1C00, 34194 }, { 0x1C1C, 34197 }, { 0x1C15, 34200 }, { 0x1C0D, 34203 }, { 0x1C0E, 34206 }, { 0x1C1B, 34209 }, { 0x1C20, 34212 }, { 0x1C0A, 34215 }, { 0x1C1F, 34218 }, { 0x1C22, 34221 }, { 0x1C1A, 34224 }, { 0x1C14, 34227 }, { 0x1C07, 34230 }, { 0x1C4F, 34233 }, { 0x1C19, 34236 }, { 0x1C12, 34239 }, { 0x1C04, 34242 }, { 0x1C1E, 34245 }, { 0x1C02, 34248 }, { 0x1C01, 34251 }, { 0x1C16, 34254 }, { 0x1C05, 34257 }, { 0x1C09, 34260 }, { 0x1C10, 34263 }, { 0x1C0F, 34266 }, { 0x1C21, 34269 }, { 0x1C0B, 34272 }, { 0x1C17, 34275 }, { 0x1C4D, 34278 }, { 0x1C18, 34281 }, { 0x1C4E, 34284 }, { 0x1C2D, 34287 }, { 0x1C2F, 34291 }, { 0x1C2E, 34295 }, { 0x1C30, 34299 }, { 0x1C31, 34303 }, { 0x1C32, 34307 }, { 0x1C33, 34311 }, { 0x1C35, 34315 }, { 0x1C34, 34319 }, { 0x1C25, 34323 }, { 0x1C24, 34327 }, { 0x1C3C, 34331 }, { 0x1C3D, 34336 }, { 0x1C3B, 34339 }, { 0x1C3F, 34342 }, { 0x1C3E, 34345 }, { 0x7050, 34349 }, { 0x7051, 34353 }, { 0x7052, 34357 }, { 0x7053, 34361 }, { 0x7054, 34365 }, { 0x7055, 34369 }, { 0x7056, 34373 }, { 0x7057, 34377 }, { 0x7058, 34381 }, { 0x7059, 34385 }, { 0x705A, 34389 }, { 0x705B, 34393 }, { 0x705C, 34397 }, { 0x705D, 34401 }, { 0x7080, 34405 }, { 0x7081, 34410 }, { 0x7082, 34415 }, { 0x7083, 34420 }, { 0x708E, 34425 }, { 0x708F, 34430 }, { 0x7090, 34435 }, { 0x7091, 34440 }, { 0x7092, 34445 }, { 0x7095, 34450 }, { 0x7096, 34455 }, { 0x7097, 34460 }, { 0x709A, 34464 }, { 0x709B, 34469 }, { 0x709C, 34474 }, { 0x709D, 34478 }, { 0x709E, 34483 }, { 0x709F, 34487 }, { 0x70A0, 34491 }, { 0x70A1, 34496 }, { 0x70A2, 34500 }, { 0x70A3, 34504 }, { 0x70A5, 34508 }, { 0x70A6, 34512 }, { 0x70A7, 34516 }, { 0x70A8, 34521 }, { 0x70A9, 34525 }, { 0x70AA, 34529 }, { 0x70AB, 34534 }, { 0x70AC, 34539 }, { 0x70AD, 34543 }, { 0x70AE, 34547 }, { 0x70AF, 34551 }, { 0x70B0, 34555 }, { 0x70B1, 34559 }, { 0x70B2, 34563 }, { 0x70B3, 34567 }, { 0x70B4, 34571 }, { 0x70B5, 34575 }, { 0x70B6, 34580 }, { 0x70B7, 34584 }, { 0x70B8, 34589 }, { 0x70B9, 34593 }, { 0x70BA, 34597 }, { 0x70BB, 34601 }, { 0x70BC, 34605 }, { 0x70BD, 34609 }, { 0x70BE, 34613 }, { 0x70BF, 34617 }, { 0x70C0, 34621 }, { 0x70C1, 34625 }, { 0x70C2, 34629 }, { 0x70C3, 34633 }, { 0x70C4, 34638 }, { 0x70C5, 34643 }, { 0x70C6, 34648 }, { 0x70C7, 34653 }, { 0x70C8, 34658 }, { 0x70C9, 34662 }, { 0x70CA, 34667 }, { 0x70CB, 34671 }, { 0x70CC, 34675 }, { 0x70CD, 34681 }, { 0x70CE, 34686 }, { 0x70CF, 34692 }, { 0x70D0, 34697 }, { 0x70D1, 34701 }, { 0x70D3, 34705 }, { 0x70D4, 34709 }, { 0x70D5, 34713 }, { 0x70D6, 34717 }, { 0x70D7, 34721 }, { 0x70D8, 34725 }, { 0x70D9, 34730 }, { 0x70DA, 34734 }, { 0x70DB, 34738 }, { 0x70DC, 34742 }, { 0x70DD, 34746 }, { 0x7084, 34750 }, { 0x7085, 34755 }, { 0x7086, 34760 }, { 0x7087, 34765 }, { 0x7088, 34770 }, { 0x7089, 34775 }, { 0x708A, 34780 }, { 0x708B, 34785 }, { 0x708C, 34790 }, { 0x708D, 34795 }, { 0x70DE, 34800 }, { 0x70DF, 34805 }, { 0x70E0, 34810 }, { 0x70E1, 34815 }, { 0x70E2, 34820 }, { 0x70E3, 34825 }, { 0x70E4, 34830 }, { 0x70E5, 34835 }, { 0x70E6, 34840 }, { 0x70E7, 34845 }, { 0x70E8, 34850 }, { 0x70E9, 34855 }, { 0x70EA, 34860 }, { 0x70EB, 34865 }, { 0x70EC, 34870 }, { 0x70ED, 34875 }, { 0x70EE, 34880 }, { 0x70EF, 34885 }, { 0x70F0, 34890 }, { 0x70F1, 34895 }, { 0x70F2, 34900 }, { 0x70F3, 34905 }, { 0x70F4, 34910 }, { 0x70F5, 34915 }, { 0x70F6, 34920 }, { 0x70F7, 34925 }, { 0x70F8, 34930 }, { 0x70F9, 34935 }, { 0x70FA, 34940 }, { 0x7093, 34945 }, { 0x7094, 34950 }, { 0x7098, 34955 }, { 0x7099, 34960 }, { 0x70A4, 34965 }, { 0x70D2, 34970 }, { 0x7005, 34975 }, { 0x702B, 34980 }, { 0x701E, 34985 }, { 0x7033, 34990 }, { 0x7035, 34995 }, { 0x7019, 35000 }, { 0x7007, 35005 }, { 0x7000, 35010 }, { 0x702E, 35015 }, { 0x7004, 35020 }, { 0x7021, 35025 }, { 0x7030, 35030 }, { 0x7015, 35035 }, { 0x7008, 35040 }, { 0x7017, 35045 }, { 0x7023, 35050 }, { 0x703C, 35055 }, { 0x703F, 35060 }, { 0x7025, 35065 }, { 0x7018, 35070 }, { 0x701A, 35075 }, { 0x7040, 35080 }, { 0x702C, 35085 }, { 0x7029, 35090 }, { 0x7002, 35095 }, { 0x7046, 35100 }, { 0x701B, 35105 }, { 0x702D, 35110 }, { 0x7026, 35115 }, { 0x7049, 35120 }, { 0x700D, 35125 }, { 0x7034, 35130 }, { 0x7001, 35135 }, { 0x7020, 35140 }, { 0x7039, 35145 }, { 0x702F, 35150 }, { 0x703A, 35155 }, { 0x7041, 35160 }, { 0x7010, 35165 }, { 0x7006, 35170 }, { 0x700B, 35175 }, { 0x7045, 35180 }, { 0x7022, 35185 }, { 0x7009, 35190 }, { 0x701C, 35195 }, { 0x702A, 35200 }, { 0x7037, 35205 }, { 0x701D, 35210 }, { 0x700A, 35215 }, { 0x7031, 35220 }, { 0x7032, 35225 }, { 0x7028, 35230 }, { 0x7003, 35235 }, { 0x7047, 35240 }, { 0x700E, 35245 }, { 0x704B, 35250 }, { 0x7011, 35255 }, { 0x704A, 35260 }, { 0x7036, 35265 }, { 0x7012, 35270 }, { 0x7043, 35275 }, { 0x701F, 35280 }, { 0x7016, 35285 }, { 0x703D, 35290 }, { 0x7038, 35295 }, { 0x7048, 35300 }, { 0x700F, 35305 }, { 0x7024, 35310 }, { 0x7014, 35315 }, { 0x7013, 35320 }, { 0x7042, 35325 }, { 0x704C, 35330 }, { 0x7044, 35335 }, { 0x704D, 35340 }, { 0x7280, 35345 }, { 0x7282, 35348 }, { 0x7285, 35351 }, { 0x7281, 35354 }, { 0x7284, 35357 }, { 0x729B, 35360 }, { 0x7286, 35363 }, { 0x728A, 35366 }, { 0x728B, 35369 }, { 0x728D, 35372 }, { 0x728E, 35375 }, { 0x728F, 35378 }, { 0x7293, 35381 }, { 0x728C, 35384 }, { 0x7295, 35387 }, { 0x7296, 35390 }, { 0x7297, 35393 }, { 0x7292, 35396 }, { 0x7287, 35399 }, { 0x729C, 35402 }, { 0x7288, 35405 }, { 0x7299, 35408 }, { 0x7283, 35411 }, { 0x729A, 35414 }, { 0x7294, 35417 }, { 0x7290, 35420 }, { 0x7291, 35423 }, { 0x7289, 35426 }, { 0x7298, 35429 }, { 0x7920, 35432 }, { 0x7921, 35435 }, { 0x7939, 35438 }, { 0x7923, 35441 }, { 0x7924, 35444 }, { 0x7931, 35447 }, { 0x7922, 35450 }, { 0x7926, 35453 }, { 0x7928, 35456 }, { 0x7929, 35459 }, { 0x792A, 35462 }, { 0x792B, 35465 }, { 0x792C, 35468 }, { 0x7932, 35471 }, { 0x792D, 35474 }, { 0x7933, 35477 }, { 0x792F, 35480 }, { 0x7930, 35483 }, { 0x7925, 35486 }, { 0x7927, 35489 }, { 0x7935, 35492 }, { 0x7936, 35495 }, { 0x7937, 35498 }, { 0x7938, 35501 }, { 0x792E, 35504 }, { 0x7934, 35507 }, { 0x793F, 35510 }, { 0x00AF, 35513 }, { 0x2774, 35514 }, { 0x2768, 35519 }, { 0x26AB, 35523 }, { 0x2775, 35526 }, { 0x2769, 35531 }, { 0x2592, 35535 }, { 0x26AC, 35537 }, { 0x26AA, 35541 }, { 0x2759, 35544 }, { 0x276A, 35547 }, { 0x276B, 35552 }, { 0x205F, 35557 }, { 0x276C, 35560 }, { 0x276D, 35565 }, { 0x00B7, 35570 }, { 0x22A7, 35572 }, { 0x2A0A, 35573 }, { 0x202F, 35576 }, { 0x26B2, 35579 }, { 0x22B2, 35580 }, { 0x22B4, 35583 }, { 0x2491, 35589 }, { 0x0023, 35593 }, { 0x2492, 35595 }, { 0x2493, 35599 }, { 0x249B, 35603 }, { 0x2496, 35607 }, { 0x2497, 35611 }, { 0x2499, 35615 }, { 0x2495, 35619 }, { 0x249A, 35623 }, { 0x2494, 35627 }, { 0x2498, 35631 }, { 0x2116, 35635 }, { 0x6FFC, 35637 }, { 0x02DB, 35640 }, { 0x2325, 35641 }, { 0x6D3E, 35643 }, { 0x6D3F, 35646 }, { 0x26B4, 35649 }, { 0x270F, 35650 }, { 0x20A7, 35651 }, { 0x2653, 35653 }, { 0x210E, 35654 }, { 0x210F, 35656 }, { 0x3012, 35661 }, { 0x3020, 35663 }, { 0x2E07, 35666 }, { 0x2E0B, 35670 }, { 0x2E06, 35672 }, { 0x5949, 35675 }, { 0x5947, 35679 }, { 0x594B, 35683 }, { 0x5948, 35687 }, { 0x594A, 35691 }, { 0x594C, 35695 }, { 0x594E, 35699 }, { 0x594D, 35703 }, { 0x5946, 35707 }, { 0x5937, 35710 }, { 0x5939, 35713 }, { 0x5934, 35716 }, { 0x5931, 35719 }, { 0x5941, 35722 }, { 0x593A, 35725 }, { 0x5930, 35728 }, { 0x593E, 35731 }, { 0x5938, 35734 }, { 0x5935, 35737 }, { 0x5936, 35740 }, { 0x593D, 35743 }, { 0x593C, 35746 }, { 0x5933, 35749 }, { 0x5940, 35752 }, { 0x593F, 35755 }, { 0x5942, 35758 }, { 0x5944, 35761 }, { 0x5932, 35764 }, { 0x593B, 35767 }, { 0x5943, 35770 }, { 0x5945, 35773 }, { 0x5953, 35776 }, { 0x595F, 35778 }, { 0x5952, 35781 }, { 0x5950, 35785 }, { 0x5951, 35789 }, { 0x594F, 35793 }, { 0x23CE, 35797 }, { 0x2930, 35799 }, { 0x292B, 35805 }, { 0x2644, 35810 }, { 0x2696, 35811 }, { 0x212F, 35812 }, { 0x210A, 35815 }, { 0x2113, 35818 }, { 0x2134, 35821 }, { 0x212C, 35824 }, { 0x2130, 35827 }, { 0x2131, 35830 }, { 0x210B, 35833 }, { 0x2110, 35836 }, { 0x2112, 35839 }, { 0x2133, 35842 }, { 0x2118, 35845 }, { 0x211B, 35848 }, { 0x2314, 35851 }, { 0x6E45, 35852 }, { 0x201A, 35854 }, { 0x2039, 35858 }, { 0x203A, 35863 }, { 0x201B, 35868 }, { 0x33DF, 35872 }, { 0x33C6, 35876 }, { 0x33C0, 35880 }, { 0x33C1, 35883 }, { 0x33A7, 35886 }, { 0x33A8, 35890 }, { 0x33A5, 35895 }, { 0x33A1, 35898 }, { 0x33DE, 35901 }, { 0x33C2, 35905 }, { 0x3373, 35907 }, { 0x33C3, 35909 }, { 0x33C4, 35911 }, { 0x33C5, 35913 }, { 0x339D, 35915 }, { 0x33A4, 35917 }, { 0x33A0, 35920 }, { 0x33C7, 35923 }, { 0x3372, 35925 }, { 0x33C8, 35927 }, { 0x3397, 35929 }, { 0x3377, 35931 }, { 0x3379, 35933 }, { 0x3378, 35936 }, { 0x32CE, 35939 }, { 0x3399, 35941 }, { 0x3387, 35943 }, { 0x33C9, 35945 }, { 0x33CA, 35947 }, { 0x32CC, 35949 }, { 0x33CB, 35951 }, { 0x3390, 35953 }, { 0x33CC, 35955 }, { 0x337A, 35957 }, { 0x3384, 35959 }, { 0x3385, 35961 }, { 0x338F, 35963 }, { 0x33CD, 35965 }, { 0x3398, 35967 }, { 0x339E, 35969 }, { 0x33A6, 35971 }, { 0x33CE, 35974 }, { 0x33A2, 35977 }, { 0x33CF, 35980 }, { 0x33B8, 35982 }, { 0x33BE, 35984 }, { 0x33D0, 35986 }, { 0x33D1, 35988 }, { 0x33D3, 35990 }, { 0x3383, 35992 }, { 0x3386, 35994 }, { 0x33D4, 35996 }, { 0x338E, 35999 }, { 0x3396, 36001 }, { 0x339C, 36003 }, { 0x33A3, 36005 }, { 0x339F, 36008 }, { 0x33B3, 36011 }, { 0x3382, 36013 }, { 0x338C, 36016 }, { 0x338D, 36019 }, { 0x3395, 36022 }, { 0x339B, 36025 }, { 0x33B2, 36028 }, { 0x33B6, 36031 }, { 0x33BC, 36034 }, { 0x33B7, 36037 }, { 0x33B9, 36039 }, { 0x33BD, 36042 }, { 0x33BF, 36044 }, { 0x3381, 36047 }, { 0x338B, 36049 }, { 0x339A, 36051 }, { 0x33B1, 36053 }, { 0x33B5, 36055 }, { 0x33BB, 36057 }, { 0x3375, 36059 }, { 0x33A9, 36061 }, { 0x3380, 36063 }, { 0x3376, 36066 }, { 0x338A, 36068 }, { 0x33D7, 36070 }, { 0x33D8, 36072 }, { 0x33DA, 36074 }, { 0x33B0, 36076 }, { 0x33B4, 36078 }, { 0x33BA, 36080 }, { 0x33DB, 36082 }, { 0x33DC, 36084 }, { 0x33DD, 36086 }, { 0x3374, 36088 }, { 0x3388, 36090 }, { 0x2293, 36092 }, { 0x2294, 36094 }, { 0x337E, 36096 }, { 0x337B, 36100 }, { 0x337C, 36104 }, { 0x337D, 36108 }, { 0x32CD, 36112 }, { 0x33FF, 36114 }, { 0x3393, 36116 }, { 0x33AC, 36118 }, { 0x333F, 36120 }, { 0x3371, 36122 }, { 0x3391, 36124 }, { 0x33AA, 36126 }, { 0x33D2, 36128 }, { 0x3392, 36130 }, { 0x33D5, 36132 }, { 0x33D6, 36134 }, { 0x33AB, 36136 }, { 0x33D9, 36138 }, { 0x33AD, 36140 }, { 0x33AE, 36142 }, { 0x33AF, 36146 }, { 0x3394, 36151 }, { 0x3327, 36153 }, { 0x3306, 36155 }, { 0x3303, 36157 }, { 0x3331, 36159 }, { 0x3325, 36161 }, { 0x3326, 36163 }, { 0x23CD, 36165 }, { 0x3310, 36167 }, { 0x3342, 36169 }, { 0x3305, 36171 }, { 0x3389, 36173 }, { 0x3314, 36175 }, { 0x2ACD, 36177 }, { 0x334B, 36182 }, { 0x3349, 36184 }, { 0x3328, 36186 }, { 0x3309, 36188 }, { 0x330A, 36190 }, { 0x3337, 36192 }, { 0x3330, 36194 }, { 0x3355, 36196 }, { 0x3352, 36198 }, { 0x221A, 36200 }, { 0x2B12, 36202 }, { 0x25E7, 36207 }, { 0x2B15, 36212 }, { 0x25EA, 36219 }, { 0x25E8, 36226 }, { 0x25A7, 36231 }, { 0x25E9, 36239 }, { 0x25A8, 36246 }, { 0x2B14, 36254 }, { 0x2B13, 36261 }, { 0x25A9, 36266 }, { 0x25A5, 36271 }, { 0x29E0, 36275 }, { 0x25A4, 36279 }, { 0x25A6, 36283 }, { 0x3350, 36288 }, { 0x3302, 36290 }, { 0x333C, 36292 }, { 0x3324, 36294 }, { 0x3308, 36296 }, { 0x330F, 36298 }, { 0x330E, 36300 }, { 0x3311, 36302 }, { 0x332A, 36304 }, { 0x3341, 36306 }, { 0x3335, 36308 }, { 0x228F, 36310 }, { 0x22E4, 36313 }, { 0x2291, 36320 }, { 0x330B, 36326 }, { 0x331C, 36328 }, { 0x331E, 36330 }, { 0x3345, 36332 }, { 0x3344, 36334 }, { 0x3329, 36336 }, { 0x332C, 36338 }, { 0x333B, 36340 }, { 0x333A, 36342 }, { 0x3340, 36344 }, { 0x2ACE, 36346 }, { 0x3353, 36351 }, { 0x3322, 36353 }, { 0x3323, 36355 }, { 0x3357, 36357 }, { 0x334E, 36359 }, { 0x334F, 36361 }, { 0x3300, 36363 }, { 0x3301, 36365 }, { 0x333E, 36367 }, { 0x3318, 36369 }, { 0x3339, 36371 }, { 0x3333, 36373 }, { 0x3304, 36375 }, { 0x331D, 36377 }, { 0x3312, 36379 }, { 0x3346, 36381 }, { 0x3338, 36383 }, { 0x332F, 36385 }, { 0x333D, 36387 }, { 0x332D, 36389 }, { 0x3313, 36391 }, { 0x330C, 36393 }, { 0x330D, 36395 }, { 0x331B, 36397 }, { 0x2311, 36399 }, { 0x3343, 36401 }, { 0x3347, 36403 }, { 0x334D, 36405 }, { 0x334C, 36407 }, { 0x3348, 36409 }, { 0x3351, 36411 }, { 0x3354, 36413 }, { 0x331F, 36415 }, { 0x3321, 36417 }, { 0x3334, 36419 }, { 0x3307, 36421 }, { 0x3332, 36423 }, { 0x2290, 36425 }, { 0x22E5, 36428 }, { 0x2292, 36435 }, { 0x332B, 36441 }, { 0x3356, 36443 }, { 0x3320, 36445 }, { 0x3319, 36447 }, { 0x3336, 36449 }, { 0x3317, 36451 }, { 0x331A, 36453 }, { 0x334A, 36455 }, { 0x332E, 36457 }, { 0x3315, 36459 }, { 0x337F, 36461 }, { 0x3316, 36463 }, { 0x2729, 36465 }, { 0x2282, 36469 }, { 0x2286, 36471 }, { 0x2AC3, 36476 }, { 0x228A, 36484 }, { 0x2ACB, 36490 }, { 0x2AC7, 36496 }, { 0x2AC9, 36501 }, { 0x2AC5, 36507 }, { 0x2ABD, 36512 }, { 0x2ABF, 36515 }, { 0x2AC1, 36520 }, { 0x2AD5, 36525 }, { 0x2AD3, 36528 }, { 0x2979, 36531 }, { 0x5806, 36535 }, { 0x580B, 36539 }, { 0x5802, 36543 }, { 0x5823, 36547 }, { 0x5826, 36552 }, { 0x5824, 36557 }, { 0x5825, 36562 }, { 0x5827, 36567 }, { 0x5800, 36572 }, { 0x5804, 36576 }, { 0x5801, 36580 }, { 0x5805, 36584 }, { 0x5803, 36588 }, { 0x581B, 36592 }, { 0x580C, 36596 }, { 0x5816, 36600 }, { 0x5809, 36604 }, { 0x5822, 36608 }, { 0x580E, 36612 }, { 0x5807, 36616 }, { 0x581F, 36620 }, { 0x581D, 36624 }, { 0x5818, 36628 }, { 0x5819, 36632 }, { 0x581E, 36636 }, { 0x5821, 36640 }, { 0x5814, 36644 }, { 0x581C, 36648 }, { 0x580D, 36652 }, { 0x5812, 36656 }, { 0x5817, 36660 }, { 0x580A, 36664 }, { 0x580F, 36668 }, { 0x5808, 36672 }, { 0x581A, 36676 }, { 0x5820, 36680 }, { 0x5815, 36684 }, { 0x5810, 36688 }, { 0x5813, 36692 }, { 0x5811, 36696 }, { 0x5828, 36700 }, { 0x5829, 36704 }, { 0x582A, 36708 }, { 0x582B, 36712 }, { 0x2403, 36716 }, { 0x2419, 36721 }, { 0x2404, 36726 }, { 0x2417, 36731 }, { 0x2407, 36737 }, { 0x2410, 36740 }, { 0x241C, 36745 }, { 0x240C, 36749 }, { 0x240A, 36753 }, { 0x2400, 36757 }, { 0x241F, 36760 }, { 0x241D, 36764 }, { 0x240F, 36768 }, { 0x240E, 36772 }, { 0x2420, 36776 }, { 0x2402, 36779 }, { 0x2401, 36784 }, { 0x2418, 36789 }, { 0x2421, 36792 }, { 0x2425, 36795 }, { 0x2411, 36800 }, { 0x2412, 36805 }, { 0x2414, 36810 }, { 0x2413, 36815 }, { 0x241B, 36820 }, { 0x241E, 36823 }, { 0x2405, 36827 }, { 0x2424, 36830 }, { 0x240D, 36833 }, { 0x2415, 36837 }, { 0x240B, 36841 }, { 0x2408, 36845 }, { 0x214F, 36848 }, { 0x2409, 36852 }, { 0x241A, 36856 }, { 0x2426, 36859 }, { 0x2406, 36864 }, { 0x2416, 36867 }, { 0x0700, 36871 }, { 0x0743, 36875 }, { 0x0744, 36880 }, { 0x0706, 36885 }, { 0x0707, 36889 }, { 0x073D, 36893 }, { 0x073E, 36896 }, { 0x073A, 36899 }, { 0x073B, 36902 }, { 0x0749, 36905 }, { 0x0736, 36907 }, { 0x0737, 36910 }, { 0x073F, 36913 }, { 0x0745, 36915 }, { 0x0746, 36919 }, { 0x0739, 36923 }, { 0x0738, 36927 }, { 0x0725, 36931 }, { 0x0717, 36934 }, { 0x0726, 36937 }, { 0x0721, 36940 }, { 0x0722, 36943 }, { 0x072C, 36946 }, { 0x0718, 36949 }, { 0x0712, 36952 }, { 0x071A, 36955 }, { 0x071F, 36958 }, { 0x0729, 36961 }, { 0x072A, 36964 }, { 0x072B, 36967 }, { 0x071B, 36970 }, { 0x071C, 36973 }, { 0x071D, 36977 }, { 0x071E, 36980 }, { 0x0719, 36984 }, { 0x0710, 36987 }, { 0x0724, 36990 }, { 0x0713, 36994 }, { 0x0714, 36997 }, { 0x0728, 37001 }, { 0x0715, 37004 }, { 0x0720, 37007 }, { 0x0716, 37010 }, { 0x072D, 37015 }, { 0x072E, 37019 }, { 0x072F, 37023 }, { 0x0723, 37027 }, { 0x074F, 37030 }, { 0x074E, 37034 }, { 0x074D, 37038 }, { 0x0727, 37042 }, { 0x0711, 37046 }, { 0x0730, 37050 }, { 0x0731, 37053 }, { 0x0732, 37056 }, { 0x0733, 37059 }, { 0x0734, 37062 }, { 0x0735, 37065 }, { 0x074A, 37068 }, { 0x0747, 37070 }, { 0x0748, 37074 }, { 0x0740, 37078 }, { 0x070B, 37081 }, { 0x070C, 37084 }, { 0x070D, 37087 }, { 0x0742, 37090 }, { 0x0741, 37092 }, { 0x0702, 37094 }, { 0x0704, 37098 }, { 0x0709, 37101 }, { 0x0705, 37106 }, { 0x070A, 37109 }, { 0x073C, 37111 }, { 0x0701, 37114 }, { 0x0703, 37118 }, { 0x0708, 37121 }, { 0x070F, 37126 }, { 0x2649, 37129 }, { 0x0C56, 37130 }, { 0x0C7F, 37134 }, { 0x0C4D, 37137 }, { 0x0C03, 37140 }, { 0x0C02, 37143 }, { 0x0C3D, 37146 }, { 0x0C01, 37149 }, { 0x0C67, 37152 }, { 0x0C6C, 37155 }, { 0x0C68, 37158 }, { 0x0C6B, 37161 }, { 0x0C6A, 37164 }, { 0x0C6F, 37167 }, { 0x0C66, 37170 }, { 0x0C6E, 37173 }, { 0x0C6D, 37176 }, { 0x0C69, 37179 }, { 0x0C46, 37182 }, { 0x0C3F, 37186 }, { 0x0C4A, 37190 }, { 0x0C41, 37194 }, { 0x0C3E, 37198 }, { 0x0C48, 37202 }, { 0x0C4C, 37206 }, { 0x0C47, 37210 }, { 0x0C40, 37214 }, { 0x0C4B, 37218 }, { 0x0C42, 37222 }, { 0x0C62, 37226 }, { 0x0C43, 37231 }, { 0x0C63, 37236 }, { 0x0C44, 37241 }, { 0x0C55, 37246 }, { 0x0C05, 37249 }, { 0x0C0E, 37252 }, { 0x0C07, 37255 }, { 0x0C12, 37258 }, { 0x0C09, 37261 }, { 0x0C06, 37264 }, { 0x0C10, 37267 }, { 0x0C14, 37270 }, { 0x0C2C, 37273 }, { 0x0C1A, 37276 }, { 0x0C26, 37279 }, { 0x0C0F, 37282 }, { 0x0C17, 37285 }, { 0x0C39, 37288 }, { 0x0C08, 37291 }, { 0x0C1C, 37294 }, { 0x0C15, 37297 }, { 0x0C32, 37300 }, { 0x0C2E, 37303 }, { 0x0C28, 37306 }, { 0x0C13, 37309 }, { 0x0C2A, 37312 }, { 0x0C30, 37315 }, { 0x0C38, 37318 }, { 0x0C24, 37321 }, { 0x0C0A, 37324 }, { 0x0C35, 37327 }, { 0x0C2F, 37330 }, { 0x0C2D, 37333 }, { 0x0C1B, 37336 }, { 0x0C21, 37339 }, { 0x0C27, 37342 }, { 0x0C59, 37345 }, { 0x0C18, 37348 }, { 0x0C1D, 37351 }, { 0x0C16, 37354 }, { 0x0C33, 37357 }, { 0x0C19, 37360 }, { 0x0C23, 37363 }, { 0x0C1E, 37366 }, { 0x0C2B, 37369 }, { 0x0C31, 37372 }, { 0x0C36, 37375 }, { 0x0C37, 37378 }, { 0x0C25, 37381 }, { 0x0C58, 37384 }, { 0x0C1F, 37387 }, { 0x0C22, 37390 }, { 0x0C20, 37393 }, { 0x0C0C, 37396 }, { 0x0C0B, 37400 }, { 0x0C61, 37404 }, { 0x0C60, 37408 }, { 0x0C79, 37412 }, { 0x0C7C, 37421 }, { 0x0C7A, 37430 }, { 0x0C7D, 37439 }, { 0x0C78, 37448 }, { 0x0C7B, 37457 }, { 0x0C7E, 37466 }, { 0x07B0, 37475 }, { 0x07A0, 37477 }, { 0x07A1, 37480 }, { 0x0784, 37483 }, { 0x0780, 37486 }, { 0x07B1, 37489 }, { 0x0783, 37492 }, { 0x0794, 37495 }, { 0x079C, 37498 }, { 0x07A2, 37501 }, { 0x0799, 37504 }, { 0x079A, 37507 }, { 0x078C, 37510 }, { 0x0798, 37513 }, { 0x0787, 37516 }, { 0x078A, 37519 }, { 0x078E, 37522 }, { 0x0786, 37525 }, { 0x078D, 37528 }, { 0x0789, 37531 }, { 0x0782, 37534 }, { 0x07A4, 37537 }, { 0x0790, 37540 }, { 0x0788, 37543 }, { 0x07A5, 37546 }, { 0x079F, 37549 }, { 0x078B, 37552 }, { 0x07A3, 37555 }, { 0x079E, 37558 }, { 0x079D, 37561 }, { 0x079B, 37564 }, { 0x0791, 37567 }, { 0x0796, 37570 }, { 0x0795, 37573 }, { 0x0793, 37576 }, { 0x0792, 37579 }, { 0x0797, 37582 }, { 0x078F, 37585 }, { 0x0785, 37588 }, { 0x0781, 37591 }, { 0x07A6, 37594 }, { 0x07AC, 37596 }, { 0x07A8, 37598 }, { 0x07AE, 37600 }, { 0x07AA, 37602 }, { 0x07A7, 37604 }, { 0x07A9, 37606 }, { 0x07AD, 37608 }, { 0x07AF, 37610 }, { 0x07AB, 37612 }, { 0x29FB, 37614 }, { 0x2AF6, 37616 }, { 0x2034, 37619 }, { 0x224B, 37621 }, { 0x2AF7, 37623 }, { 0x2AF8, 37626 }, { 0x2AFB, 37629 }, { 0x222D, 37633 }, { 0x2AF5, 37635 }, { 0x22AA, 37641 }, { 0x2AF4, 37646 }, { 0x2980, 37651 }, { 0x2A68, 37655 }, { 0x2A69, 37662 }, { 0x20AE, 37669 }, { 0x2319, 37671 }, { 0x29A2, 37674 }, { 0x2129, 37676 }, { 0x214E, 37681 }, { 0x2132, 37684 }, { 0x214B, 37687 }, { 0x2141, 37689 }, { 0x2142, 37693 }, { 0x2144, 37697 }, { 0x2739, 37701 }, { 0x2645, 37705 }, { 0x2A2F, 37706 }, { 0x2230, 37710 }, { 0x00BD, 37712 }, { 0x2155, 37716 }, { 0x2159, 37720 }, { 0x2153, 37724 }, { 0x215B, 37728 }, { 0x00BC, 37732 }, { 0x2156, 37736 }, { 0x2154, 37740 }, { 0x215A, 37744 }, { 0x215D, 37748 }, { 0x2158, 37752 }, { 0x215E, 37756 }, { 0x2157, 37760 }, { 0x215C, 37764 }, { 0x00BE, 37768 }, { 0x2240, 37772 }, { 0x2100, 37774 }, { 0x060B, 37776 }, { 0x2697, 37778 }, { 0x20B3, 37779 }, { 0x2235, 37781 }, { 0x09D7, 37782 }, { 0x09BC, 37786 }, { 0x09CD, 37789 }, { 0x0983, 37792 }, { 0x0982, 37795 }, { 0x09BD, 37798 }, { 0x0981, 37801 }, { 0x09E7, 37804 }, { 0x09EC, 37807 }, { 0x09E8, 37810 }, { 0x09EB, 37813 }, { 0x09EA, 37816 }, { 0x09EF, 37819 }, { 0x09E6, 37822 }, { 0x09EE, 37825 }, { 0x09ED, 37828 }, { 0x09E9, 37831 }, { 0x09F2, 37834 }, { 0x09F3, 37837 }, { 0x09C7, 37840 }, { 0x09BF, 37844 }, { 0x09CB, 37848 }, { 0x09C1, 37852 }, { 0x09BE, 37856 }, { 0x09C8, 37860 }, { 0x09CC, 37864 }, { 0x09C0, 37868 }, { 0x09C2, 37872 }, { 0x09E2, 37876 }, { 0x09C3, 37881 }, { 0x09E3, 37886 }, { 0x09C4, 37891 }, { 0x09FA, 37896 }, { 0x0985, 37898 }, { 0x098F, 37901 }, { 0x0987, 37904 }, { 0x0993, 37907 }, { 0x0989, 37910 }, { 0x0986, 37913 }, { 0x0990, 37916 }, { 0x0994, 37919 }, { 0x09AC, 37922 }, { 0x099A, 37925 }, { 0x09A6, 37928 }, { 0x0997, 37931 }, { 0x09B9, 37934 }, { 0x0988, 37937 }, { 0x099C, 37940 }, { 0x0995, 37943 }, { 0x09B2, 37946 }, { 0x09AE, 37949 }, { 0x09A8, 37952 }, { 0x09AA, 37955 }, { 0x09B0, 37958 }, { 0x09F1, 37961 }, { 0x09F0, 37967 }, { 0x09B8, 37973 }, { 0x09A4, 37976 }, { 0x098A, 37979 }, { 0x09AF, 37982 }, { 0x09AD, 37985 }, { 0x099B, 37988 }, { 0x09A1, 37991 }, { 0x09A7, 37994 }, { 0x0998, 37997 }, { 0x099D, 38000 }, { 0x0996, 38003 }, { 0x0999, 38006 }, { 0x09A3, 38009 }, { 0x099E, 38012 }, { 0x09AB, 38015 }, { 0x09DD, 38018 }, { 0x09DC, 38021 }, { 0x09B6, 38024 }, { 0x09B7, 38027 }, { 0x09A5, 38030 }, { 0x099F, 38033 }, { 0x09DF, 38036 }, { 0x09A2, 38039 }, { 0x09A0, 38042 }, { 0x09CE, 38045 }, { 0x098C, 38049 }, { 0x098B, 38053 }, { 0x09E1, 38057 }, { 0x09E0, 38061 }, { 0x09F4, 38065 }, { 0x09F8, 38069 }, { 0x09F5, 38077 }, { 0x09F7, 38081 }, { 0x09F6, 38085 }, { 0x09F9, 38089 }, { 0x232C, 38093 }, { 0x23E3, 38095 }, { 0x226C, 38099 }, { 0x2800, 38100 }, { 0x2801, 38103 }, { 0x2802, 38106 }, { 0x2804, 38109 }, { 0x2808, 38112 }, { 0x2810, 38115 }, { 0x2820, 38118 }, { 0x2840, 38121 }, { 0x2880, 38124 }, { 0x2803, 38127 }, { 0x2805, 38130 }, { 0x2809, 38133 }, { 0x2811, 38136 }, { 0x2821, 38139 }, { 0x2841, 38142 }, { 0x2881, 38145 }, { 0x2806, 38148 }, { 0x280A, 38151 }, { 0x2812, 38154 }, { 0x2822, 38157 }, { 0x2842, 38160 }, { 0x2882, 38163 }, { 0x280C, 38166 }, { 0x2814, 38169 }, { 0x2824, 38172 }, { 0x2844, 38175 }, { 0x2884, 38178 }, { 0x2818, 38181 }, { 0x2828, 38184 }, { 0x2848, 38187 }, { 0x2888, 38190 }, { 0x2830, 38193 }, { 0x2850, 38196 }, { 0x2890, 38199 }, { 0x2860, 38202 }, { 0x28A0, 38205 }, { 0x28C0, 38208 }, { 0x2807, 38211 }, { 0x280B, 38214 }, { 0x2813, 38217 }, { 0x2823, 38220 }, { 0x2843, 38223 }, { 0x2883, 38226 }, { 0x280D, 38229 }, { 0x2815, 38232 }, { 0x2825, 38235 }, { 0x2845, 38238 }, { 0x2885, 38241 }, { 0x2819, 38244 }, { 0x2829, 38247 }, { 0x2849, 38250 }, { 0x2889, 38253 }, { 0x2831, 38256 }, { 0x2851, 38259 }, { 0x2891, 38262 }, { 0x2861, 38265 }, { 0x28A1, 38268 }, { 0x28C1, 38271 }, { 0x280E, 38274 }, { 0x2816, 38277 }, { 0x2826, 38280 }, { 0x2846, 38283 }, { 0x2886, 38286 }, { 0x281A, 38289 }, { 0x282A, 38292 }, { 0x284A, 38295 }, { 0x288A, 38298 }, { 0x2832, 38301 }, { 0x2852, 38304 }, { 0x2892, 38307 }, { 0x2862, 38310 }, { 0x28A2, 38313 }, { 0x28C2, 38316 }, { 0x281C, 38319 }, { 0x282C, 38322 }, { 0x284C, 38325 }, { 0x288C, 38328 }, { 0x2834, 38331 }, { 0x2854, 38334 }, { 0x2894, 38337 }, { 0x2864, 38340 }, { 0x28A4, 38343 }, { 0x28C4, 38346 }, { 0x2838, 38349 }, { 0x2858, 38352 }, { 0x2898, 38355 }, { 0x2868, 38358 }, { 0x28A8, 38361 }, { 0x28C8, 38364 }, { 0x2870, 38367 }, { 0x28B0, 38370 }, { 0x28D0, 38373 }, { 0x28E0, 38376 }, { 0x280F, 38379 }, { 0x2817, 38382 }, { 0x2827, 38385 }, { 0x2847, 38388 }, { 0x2887, 38391 }, { 0x281B, 38394 }, { 0x282B, 38397 }, { 0x284B, 38400 }, { 0x288B, 38403 }, { 0x2833, 38406 }, { 0x2853, 38409 }, { 0x2893, 38412 }, { 0x2863, 38415 }, { 0x28A3, 38418 }, { 0x28C3, 38421 }, { 0x281D, 38424 }, { 0x282D, 38427 }, { 0x284D, 38430 }, { 0x288D, 38433 }, { 0x2835, 38436 }, { 0x2855, 38439 }, { 0x2895, 38442 }, { 0x2865, 38445 }, { 0x28A5, 38448 }, { 0x28C5, 38451 }, { 0x2839, 38454 }, { 0x2859, 38457 }, { 0x2899, 38460 }, { 0x2869, 38463 }, { 0x28A9, 38466 }, { 0x28C9, 38469 }, { 0x2871, 38472 }, { 0x28B1, 38475 }, { 0x28D1, 38478 }, { 0x28E1, 38481 }, { 0x281E, 38484 }, { 0x282E, 38487 }, { 0x284E, 38490 }, { 0x288E, 38493 }, { 0x2836, 38496 }, { 0x2856, 38499 }, { 0x2896, 38502 }, { 0x2866, 38505 }, { 0x28A6, 38508 }, { 0x28C6, 38511 }, { 0x283A, 38514 }, { 0x285A, 38517 }, { 0x289A, 38520 }, { 0x286A, 38523 }, { 0x28AA, 38526 }, { 0x28CA, 38529 }, { 0x2872, 38532 }, { 0x28B2, 38535 }, { 0x28D2, 38538 }, { 0x28E2, 38541 }, { 0x283C, 38544 }, { 0x285C, 38547 }, { 0x289C, 38550 }, { 0x286C, 38553 }, { 0x28AC, 38556 }, { 0x28CC, 38559 }, { 0x2874, 38562 }, { 0x28B4, 38565 }, { 0x28D4, 38568 }, { 0x28E4, 38571 }, { 0x2878, 38574 }, { 0x28B8, 38577 }, { 0x28D8, 38580 }, { 0x28E8, 38583 }, { 0x28F0, 38586 }, { 0x281F, 38589 }, { 0x282F, 38592 }, { 0x284F, 38595 }, { 0x288F, 38598 }, { 0x2837, 38601 }, { 0x2857, 38604 }, { 0x2897, 38607 }, { 0x2867, 38610 }, { 0x28A7, 38613 }, { 0x28C7, 38616 }, { 0x283B, 38619 }, { 0x285B, 38622 }, { 0x289B, 38625 }, { 0x286B, 38628 }, { 0x28AB, 38631 }, { 0x28CB, 38634 }, { 0x2873, 38637 }, { 0x28B3, 38640 }, { 0x28D3, 38643 }, { 0x28E3, 38646 }, { 0x283D, 38649 }, { 0x285D, 38652 }, { 0x289D, 38655 }, { 0x286D, 38658 }, { 0x28AD, 38661 }, { 0x28CD, 38664 }, { 0x2875, 38667 }, { 0x28B5, 38670 }, { 0x28D5, 38673 }, { 0x28E5, 38676 }, { 0x2879, 38679 }, { 0x28B9, 38682 }, { 0x28D9, 38685 }, { 0x28E9, 38688 }, { 0x28F1, 38691 }, { 0x283E, 38694 }, { 0x285E, 38697 }, { 0x289E, 38700 }, { 0x286E, 38703 }, { 0x28AE, 38706 }, { 0x28CE, 38709 }, { 0x2876, 38712 }, { 0x28B6, 38715 }, { 0x28D6, 38718 }, { 0x28E6, 38721 }, { 0x287A, 38724 }, { 0x28BA, 38727 }, { 0x28DA, 38730 }, { 0x28EA, 38733 }, { 0x28F2, 38736 }, { 0x287C, 38739 }, { 0x28BC, 38742 }, { 0x28DC, 38745 }, { 0x28EC, 38748 }, { 0x28F4, 38751 }, { 0x28F8, 38754 }, { 0x283F, 38757 }, { 0x285F, 38760 }, { 0x289F, 38763 }, { 0x286F, 38766 }, { 0x28AF, 38769 }, { 0x28CF, 38772 }, { 0x2877, 38775 }, { 0x28B7, 38778 }, { 0x28D7, 38781 }, { 0x28E7, 38784 }, { 0x287B, 38787 }, { 0x28BB, 38790 }, { 0x28DB, 38793 }, { 0x28EB, 38796 }, { 0x28F3, 38799 }, { 0x287D, 38802 }, { 0x28BD, 38805 }, { 0x28DD, 38808 }, { 0x28ED, 38811 }, { 0x28F5, 38814 }, { 0x28F9, 38817 }, { 0x287E, 38820 }, { 0x28BE, 38823 }, { 0x28DE, 38826 }, { 0x28EE, 38829 }, { 0x28F6, 38832 }, { 0x28FA, 38835 }, { 0x28FC, 38838 }, { 0x287F, 38841 }, { 0x28BF, 38844 }, { 0x28DF, 38847 }, { 0x28EF, 38850 }, { 0x28F7, 38853 }, { 0x28FB, 38856 }, { 0x28FD, 38859 }, { 0x28FE, 38862 }, { 0x28FF, 38865 }, { 0x2621, 38868 }, { 0x00B8, 38870 }, { 0x2299, 38871 }, { 0x229D, 38874 }, { 0x2742, 38876 }, { 0x2295, 38882 }, { 0x229A, 38884 }, { 0x2460, 38887 }, { 0x2465, 38890 }, { 0x2461, 38893 }, { 0x2464, 38896 }, { 0x2463, 38899 }, { 0x2468, 38902 }, { 0x24EA, 38905 }, { 0x2467, 38908 }, { 0x2466, 38911 }, { 0x2462, 38914 }, { 0x27B2, 38917 }, { 0x24D0, 38922 }, { 0x24D1, 38927 }, { 0x24D2, 38932 }, { 0x24D3, 38937 }, { 0x24D4, 38942 }, { 0x24D5, 38947 }, { 0x24D6, 38952 }, { 0x24D7, 38957 }, { 0x24D8, 38962 }, { 0x24D9, 38967 }, { 0x24DA, 38972 }, { 0x24DB, 38977 }, { 0x24DC, 38982 }, { 0x24DD, 38987 }, { 0x24DE, 38992 }, { 0x24DF, 38997 }, { 0x24E0, 39002 }, { 0x24E1, 39007 }, { 0x24E2, 39012 }, { 0x24E3, 39017 }, { 0x24E4, 39022 }, { 0x24E5, 39027 }, { 0x24E6, 39032 }, { 0x24E7, 39037 }, { 0x24E8, 39042 }, { 0x24E9, 39047 }, { 0x24B6, 39052 }, { 0x24B7, 39057 }, { 0x24B8, 39062 }, { 0x24B9, 39067 }, { 0x24BA, 39072 }, { 0x24BB, 39077 }, { 0x24BC, 39082 }, { 0x24BD, 39087 }, { 0x24BE, 39092 }, { 0x24BF, 39097 }, { 0x24C0, 39102 }, { 0x24C1, 39107 }, { 0x24C2, 39112 }, { 0x24C3, 39117 }, { 0x24C4, 39122 }, { 0x24C5, 39127 }, { 0x24C6, 39132 }, { 0x24C7, 39137 }, { 0x24C8, 39142 }, { 0x24C9, 39147 }, { 0x24CA, 39152 }, { 0x24CB, 39157 }, { 0x24CC, 39162 }, { 0x24CD, 39167 }, { 0x24CE, 39172 }, { 0x24CF, 39177 }, { 0x2296, 39182 }, { 0x2297, 39184 }, { 0x272A, 39186 }, { 0x29BE, 39189 }, { 0x29BF, 39192 }, { 0x229C, 39194 }, { 0x3266, 39196 }, { 0x3274, 39199 }, { 0x3268, 39203 }, { 0x3276, 39206 }, { 0x326D, 39210 }, { 0x327B, 39213 }, { 0x3267, 39217 }, { 0x3275, 39220 }, { 0x327E, 39224 }, { 0x3264, 39228 }, { 0x3272, 39231 }, { 0x3261, 39235 }, { 0x326F, 39238 }, { 0x3265, 39242 }, { 0x3273, 39245 }, { 0x3263, 39249 }, { 0x3271, 39252 }, { 0x3260, 39256 }, { 0x326E, 39259 }, { 0x3262, 39263 }, { 0x3270, 39266 }, { 0x3269, 39270 }, { 0x3277, 39273 }, { 0x326A, 39277 }, { 0x3278, 39280 }, { 0x326C, 39284 }, { 0x327A, 39287 }, { 0x326B, 39291 }, { 0x3279, 39294 }, { 0x327D, 39298 }, { 0x327C, 39302 }, { 0x2469, 39306 }, { 0x32BF, 39309 }, { 0x32B5, 39312 }, { 0x32B6, 39315 }, { 0x32BB, 39319 }, { 0x32B7, 39323 }, { 0x32BA, 39327 }, { 0x32B9, 39331 }, { 0x32BE, 39335 }, { 0x32BD, 39339 }, { 0x32BC, 39343 }, { 0x32B8, 39347 }, { 0x246A, 39351 }, { 0x325A, 39354 }, { 0x325B, 39357 }, { 0x32B1, 39361 }, { 0x325C, 39365 }, { 0x325F, 39369 }, { 0x325E, 39373 }, { 0x32B4, 39377 }, { 0x32B3, 39381 }, { 0x32B2, 39385 }, { 0x325D, 39389 }, { 0x246B, 39393 }, { 0x2473, 39396 }, { 0x3251, 39399 }, { 0x3256, 39403 }, { 0x3252, 39407 }, { 0x3255, 39411 }, { 0x3254, 39415 }, { 0x3259, 39419 }, { 0x3258, 39423 }, { 0x3257, 39427 }, { 0x3253, 39431 }, { 0x246E, 39435 }, { 0x246F, 39438 }, { 0x2471, 39441 }, { 0x246D, 39444 }, { 0x2472, 39447 }, { 0x246C, 39450 }, { 0x2470, 39453 }, { 0x3036, 39456 }, { 0x29B8, 39459 }, { 0x229B, 39462 }, { 0x2A38, 39465 }, { 0x2298, 39468 }, { 0x32D0, 39471 }, { 0x32D3, 39474 }, { 0x32D1, 39477 }, { 0x32D4, 39480 }, { 0x32D2, 39483 }, { 0x32E9, 39486 }, { 0x32EC, 39489 }, { 0x32EA, 39492 }, { 0x32ED, 39495 }, { 0x32EB, 39498 }, { 0x32D5, 39501 }, { 0x32D8, 39504 }, { 0x32D6, 39507 }, { 0x32D9, 39510 }, { 0x32D7, 39513 }, { 0x32EE, 39516 }, { 0x32F1, 39519 }, { 0x32EF, 39522 }, { 0x32F2, 39525 }, { 0x32F0, 39528 }, { 0x32E4, 39531 }, { 0x32E7, 39534 }, { 0x32E5, 39537 }, { 0x32E8, 39540 }, { 0x32E6, 39543 }, { 0x32F6, 39546 }, { 0x32F9, 39549 }, { 0x32F7, 39552 }, { 0x32FA, 39555 }, { 0x32F8, 39558 }, { 0x32DA, 39561 }, { 0x32DD, 39564 }, { 0x32DB, 39567 }, { 0x32DE, 39570 }, { 0x32DC, 39573 }, { 0x32DF, 39576 }, { 0x32E2, 39579 }, { 0x32E0, 39582 }, { 0x32E3, 39585 }, { 0x32E1, 39588 }, { 0x32FB, 39591 }, { 0x32FD, 39594 }, { 0x32FC, 39597 }, { 0x32FE, 39600 }, { 0x32F3, 39603 }, { 0x32F5, 39606 }, { 0x32F4, 39609 }, { 0x29B7, 39612 }, { 0x238A, 39614 }, { 0x29B6, 39617 }, { 0x32A6, 39620 }, { 0x3280, 39623 }, { 0x3285, 39626 }, { 0x3290, 39629 }, { 0x3289, 39632 }, { 0x3281, 39635 }, { 0x32A2, 39638 }, { 0x328B, 39641 }, { 0x3284, 39644 }, { 0x3283, 39647 }, { 0x3292, 39650 }, { 0x32A4, 39653 }, { 0x32A0, 39656 }, { 0x32A7, 39659 }, { 0x329A, 39662 }, { 0x328A, 39665 }, { 0x3294, 39668 }, { 0x3288, 39671 }, { 0x32A1, 39674 }, { 0x328D, 39677 }, { 0x328F, 39680 }, { 0x3287, 39683 }, { 0x3298, 39686 }, { 0x328E, 39689 }, { 0x32B0, 39692 }, { 0x329E, 39695 }, { 0x32A8, 39698 }, { 0x3286, 39701 }, { 0x3291, 39704 }, { 0x32AB, 39707 }, { 0x3282, 39710 }, { 0x328C, 39713 }, { 0x32A5, 39716 }, { 0x329B, 39719 }, { 0x3299, 39722 }, { 0x32A3, 39725 }, { 0x3293, 39728 }, { 0x3295, 39731 }, { 0x32AF, 39734 }, { 0x32A9, 39737 }, { 0x32AA, 39740 }, { 0x32AE, 39743 }, { 0x329C, 39746 }, { 0x329F, 39749 }, { 0x329D, 39752 }, { 0x3296, 39755 }, { 0x32AC, 39758 }, { 0x32AD, 39761 }, { 0x3297, 39764 }, { 0x29C0, 39767 }, { 0x2389, 39769 }, { 0x29C1, 39774 }, { 0x29B9, 39776 }, { 0x2A36, 39778 }, { 0x29BC, 39784 }, { 0x2332, 39788 }, { 0x222E, 39790 }, { 0x2694, 39792 }, { 0x7800, 39794 }, { 0x7801, 39797 }, { 0x7802, 39800 }, { 0x7803, 39803 }, { 0x7804, 39806 }, { 0x7805, 39809 }, { 0x7808, 39812 }, { 0x780A, 39815 }, { 0x780B, 39818 }, { 0x780C, 39821 }, { 0x780D, 39824 }, { 0x780E, 39827 }, { 0x780F, 39830 }, { 0x7810, 39833 }, { 0x7811, 39836 }, { 0x7812, 39839 }, { 0x7813, 39842 }, { 0x7814, 39845 }, { 0x7815, 39848 }, { 0x7816, 39851 }, { 0x7817, 39854 }, { 0x7818, 39857 }, { 0x7819, 39860 }, { 0x781A, 39863 }, { 0x781B, 39866 }, { 0x781C, 39869 }, { 0x781D, 39872 }, { 0x781E, 39875 }, { 0x781F, 39878 }, { 0x7820, 39881 }, { 0x7821, 39884 }, { 0x7822, 39887 }, { 0x7823, 39890 }, { 0x7824, 39893 }, { 0x7825, 39896 }, { 0x7826, 39899 }, { 0x7827, 39902 }, { 0x7828, 39905 }, { 0x7829, 39908 }, { 0x782A, 39911 }, { 0x782B, 39914 }, { 0x782C, 39917 }, { 0x782D, 39920 }, { 0x782E, 39923 }, { 0x782F, 39926 }, { 0x7830, 39929 }, { 0x7831, 39932 }, { 0x7832, 39935 }, { 0x7833, 39938 }, { 0x7834, 39941 }, { 0x7835, 39944 }, { 0x7837, 39947 }, { 0x7838, 39950 }, { 0x783C, 39953 }, { 0x783F, 39956 }, { 0x2396, 39959 }, { 0x7438, 39963 }, { 0x7434, 39967 }, { 0x7441, 39971 }, { 0x744A, 39975 }, { 0x744B, 39979 }, { 0x744C, 39983 }, { 0x7449, 39987 }, { 0x7445, 39991 }, { 0x744F, 39995 }, { 0x744E, 39999 }, { 0x7435, 40003 }, { 0x7436, 40007 }, { 0x743A, 40011 }, { 0x743C, 40015 }, { 0x744D, 40019 }, { 0x7447, 40023 }, { 0x7443, 40027 }, { 0x7440, 40031 }, { 0x743E, 40035 }, { 0x743F, 40039 }, { 0x7439, 40043 }, { 0x743B, 40047 }, { 0x7442, 40051 }, { 0x7437, 40055 }, { 0x7446, 40059 }, { 0x743D, 40063 }, { 0x742A, 40067 }, { 0x7429, 40072 }, { 0x7428, 40077 }, { 0x742C, 40082 }, { 0x742B, 40087 }, { 0x742D, 40092 }, { 0x7444, 40097 }, { 0x7448, 40101 }, { 0x7430, 40105 }, { 0x742F, 40110 }, { 0x742E, 40115 }, { 0x7432, 40120 }, { 0x7431, 40125 }, { 0x7433, 40130 }, { 0x7410, 40135 }, { 0x740C, 40139 }, { 0x7419, 40143 }, { 0x7422, 40147 }, { 0x7423, 40151 }, { 0x7424, 40155 }, { 0x7421, 40159 }, { 0x741D, 40163 }, { 0x7427, 40167 }, { 0x7426, 40171 }, { 0x740D, 40175 }, { 0x740E, 40179 }, { 0x7412, 40183 }, { 0x7414, 40187 }, { 0x7425, 40191 }, { 0x741F, 40195 }, { 0x741B, 40199 }, { 0x7418, 40203 }, { 0x7416, 40207 }, { 0x7417, 40211 }, { 0x7411, 40215 }, { 0x7413, 40219 }, { 0x741A, 40223 }, { 0x740F, 40227 }, { 0x741E, 40231 }, { 0x7415, 40235 }, { 0x7402, 40239 }, { 0x7401, 40244 }, { 0x7400, 40249 }, { 0x7404, 40254 }, { 0x7403, 40259 }, { 0x7405, 40264 }, { 0x741C, 40269 }, { 0x7420, 40273 }, { 0x7408, 40277 }, { 0x7407, 40282 }, { 0x7406, 40287 }, { 0x740A, 40292 }, { 0x7409, 40297 }, { 0x740B, 40302 }, { 0x2B18, 40307 }, { 0x2B16, 40312 }, { 0x2B17, 40317 }, { 0x2B19, 40322 }, { 0x22C4, 40327 }, { 0x2780, 40329 }, { 0x2785, 40334 }, { 0x2781, 40339 }, { 0x2784, 40344 }, { 0x2783, 40349 }, { 0x2788, 40354 }, { 0x2787, 40359 }, { 0x2786, 40364 }, { 0x2782, 40369 }, { 0x2789, 40374 }, { 0x2776, 40379 }, { 0x277B, 40384 }, { 0x2777, 40389 }, { 0x277A, 40394 }, { 0x2779, 40399 }, { 0x277E, 40404 }, { 0x277D, 40409 }, { 0x277C, 40414 }, { 0x2778, 40419 }, { 0x277F, 40424 }, { 0x278A, 40429 }, { 0x278F, 40435 }, { 0x278B, 40441 }, { 0x278E, 40447 }, { 0x278D, 40453 }, { 0x2792, 40459 }, { 0x2791, 40465 }, { 0x2790, 40471 }, { 0x278C, 40477 }, { 0x2793, 40483 }, { 0x2223, 40489 }, { 0x26AE, 40490 }, { 0x26A3, 40492 }, { 0x26A2, 40495 }, { 0x20AF, 40498 }, { 0x2208, 40500 }, { 0x22F5, 40502 }, { 0x22F9, 40507 }, { 0x22F2, 40513 }, { 0x22F6, 40519 }, { 0x22F8, 40523 }, { 0x22F3, 40527 }, { 0x27D2, 40537 }, { 0x2AD9, 40541 }, { 0x292F, 40545 }, { 0x292C, 40551 }, { 0x25C9, 40556 }, { 0x2ADC, 40557 }, { 0x26B1, 40558 }, { 0x20B2, 40560 }, { 0x1734, 40562 }, { 0x1732, 40565 }, { 0x1733, 40569 }, { 0x1720, 40573 }, { 0x1721, 40576 }, { 0x1722, 40579 }, { 0x172A, 40582 }, { 0x1727, 40585 }, { 0x1724, 40588 }, { 0x1731, 40591 }, { 0x1723, 40594 }, { 0x172E, 40597 }, { 0x172B, 40600 }, { 0x1728, 40603 }, { 0x1729, 40606 }, { 0x172D, 40609 }, { 0x1730, 40612 }, { 0x1726, 40615 }, { 0x172F, 40618 }, { 0x172C, 40621 }, { 0x1725, 40624 }, { 0x20B4, 40627 }, { 0x206C, 40629 }, { 0x206A, 40633 }, { 0x25D9, 40636 }, { 0x25D8, 40639 }, { 0x2643, 40641 }, { 0x0CD6, 40642 }, { 0x0CBC, 40646 }, { 0x0CCD, 40649 }, { 0x0C83, 40652 }, { 0x0C82, 40655 }, { 0x0CBD, 40658 }, { 0x0CF1, 40661 }, { 0x0CF2, 40664 }, { 0x0CE7, 40667 }, { 0x0CEC, 40670 }, { 0x0CE8, 40673 }, { 0x0CEB, 40676 }, { 0x0CEA, 40679 }, { 0x0CEF, 40682 }, { 0x0CE6, 40685 }, { 0x0CEE, 40688 }, { 0x0CED, 40691 }, { 0x0CE9, 40694 }, { 0x0CC6, 40697 }, { 0x0CBF, 40701 }, { 0x0CCA, 40705 }, { 0x0CC1, 40709 }, { 0x0CBE, 40713 }, { 0x0CC8, 40717 }, { 0x0CCC, 40721 }, { 0x0CC7, 40725 }, { 0x0CC0, 40729 }, { 0x0CCB, 40733 }, { 0x0CC2, 40737 }, { 0x0CE2, 40741 }, { 0x0CC3, 40746 }, { 0x0CE3, 40751 }, { 0x0CC4, 40756 }, { 0x0CD5, 40761 }, { 0x0C85, 40764 }, { 0x0C8E, 40767 }, { 0x0C87, 40770 }, { 0x0C92, 40773 }, { 0x0C89, 40776 }, { 0x0C86, 40779 }, { 0x0C90, 40782 }, { 0x0C94, 40785 }, { 0x0CAC, 40788 }, { 0x0C9A, 40791 }, { 0x0CA6, 40794 }, { 0x0C8F, 40797 }, { 0x0CDE, 40800 }, { 0x0C97, 40803 }, { 0x0CB9, 40806 }, { 0x0C88, 40809 }, { 0x0C9C, 40812 }, { 0x0C95, 40815 }, { 0x0CB2, 40818 }, { 0x0CAE, 40821 }, { 0x0CA8, 40824 }, { 0x0C93, 40827 }, { 0x0CAA, 40830 }, { 0x0CB0, 40833 }, { 0x0CB8, 40836 }, { 0x0CA4, 40839 }, { 0x0C8A, 40842 }, { 0x0CB5, 40845 }, { 0x0CAF, 40848 }, { 0x0CAD, 40851 }, { 0x0C9B, 40854 }, { 0x0CA1, 40857 }, { 0x0CA7, 40860 }, { 0x0C98, 40863 }, { 0x0C9D, 40866 }, { 0x0C96, 40869 }, { 0x0CB3, 40872 }, { 0x0C99, 40875 }, { 0x0CA3, 40878 }, { 0x0C9E, 40881 }, { 0x0CAB, 40884 }, { 0x0CB1, 40887 }, { 0x0CB6, 40890 }, { 0x0CB7, 40893 }, { 0x0CA5, 40896 }, { 0x0C9F, 40899 }, { 0x0CA2, 40902 }, { 0x0CA0, 40905 }, { 0x0C8C, 40908 }, { 0x0C8B, 40912 }, { 0x0CE1, 40916 }, { 0x0CE0, 40920 }, { 0x32CF, 40924 }, { 0x2228, 40927 }, { 0x2A52, 40929 }, { 0x2A62, 40934 }, { 0x2A63, 40939 }, { 0x2A5B, 40944 }, { 0x2A5D, 40949 }, { 0x2A59, 40954 }, { 0x2227, 40959 }, { 0x2A51, 40961 }, { 0x2A5E, 40966 }, { 0x2A60, 40971 }, { 0x2A5A, 40976 }, { 0x2A5F, 40981 }, { 0x2A5C, 40985 }, { 0x25CA, 40990 }, { 0x27E0, 40991 }, { 0xA010, 40996 }, { 0xA019, 41001 }, { 0xA007, 41006 }, { 0xA004, 41011 }, { 0xA015, 41015 }, { 0xA01E, 41020 }, { 0xA00C, 41025 }, { 0xA011, 41030 }, { 0xA01A, 41035 }, { 0xA008, 41040 }, { 0xA02B, 41045 }, { 0xA000, 41048 }, { 0xA014, 41052 }, { 0xA01D, 41057 }, { 0xA00B, 41062 }, { 0xA013, 41067 }, { 0xA01C, 41072 }, { 0xA00A, 41077 }, { 0xA018, 41082 }, { 0xA021, 41087 }, { 0xA00F, 41092 }, { 0xA022, 41097 }, { 0xA002, 41100 }, { 0xA017, 41104 }, { 0xA020, 41109 }, { 0xA00E, 41114 }, { 0xA005, 41119 }, { 0xA02A, 41123 }, { 0xA003, 41126 }, { 0xA016, 41130 }, { 0xA01F, 41135 }, { 0xA00D, 41140 }, { 0xA001, 41145 }, { 0xA012, 41149 }, { 0xA01B, 41154 }, { 0xA009, 41159 }, { 0xA006, 41164 }, { 0xA028, 41168 }, { 0xA024, 41171 }, { 0xA023, 41174 }, { 0xA026, 41177 }, { 0xA027, 41180 }, { 0xA029, 41183 }, { 0xA025, 41186 }, { 0x2720, 41189 }, { 0x263F, 41191 }, { 0x22EF, 41192 }, { 0x9121, 41195 }, { 0x9122, 41199 }, { 0x9123, 41203 }, { 0x9124, 41209 }, { 0x911E, 41215 }, { 0x911F, 41219 }, { 0x9120, 41225 }, { 0x9143, 41231 }, { 0x918E, 41235 }, { 0x910A, 41238 }, { 0x9196, 41242 }, { 0x9135, 41245 }, { 0x9109, 41249 }, { 0x91A8, 41253 }, { 0x9176, 41258 }, { 0x9174, 41262 }, { 0x9178, 41266 }, { 0x917A, 41270 }, { 0x9164, 41274 }, { 0x9142, 41280 }, { 0x91DD, 41286 }, { 0x910C, 41290 }, { 0x91B4, 41293 }, { 0x91B5, 41296 }, { 0x9125, 41300 }, { 0x9126, 41304 }, { 0x912C, 41308 }, { 0x912D, 41312 }, { 0x91C0, 41316 }, { 0x91BF, 41320 }, { 0x915E, 41324 }, { 0x913C, 41328 }, { 0x91B0, 41332 }, { 0x9106, 41337 }, { 0x9153, 41342 }, { 0x9152, 41347 }, { 0x9159, 41352 }, { 0x9144, 41356 }, { 0x9197, 41360 }, { 0x919A, 41363 }, { 0x9199, 41367 }, { 0x9157, 41371 }, { 0x91B3, 41375 }, { 0x9175, 41379 }, { 0x9173, 41383 }, { 0x9177, 41387 }, { 0x9179, 41391 }, { 0x9114, 41395 }, { 0x915C, 41398 }, { 0x91CF, 41401 }, { 0x9102, 41404 }, { 0x9191, 41408 }, { 0x9195, 41411 }, { 0x9194, 41417 }, { 0x91B7, 41422 }, { 0x91C1, 41425 }, { 0x91C2, 41430 }, { 0x9190, 41435 }, { 0x913A, 41438 }, { 0x91AF, 41442 }, { 0x91AE, 41447 }, { 0x918F, 41451 }, { 0x9107, 41454 }, { 0x910B, 41459 }, { 0x9130, 41462 }, { 0x9131, 41466 }, { 0x9105, 41470 }, { 0x91D3, 41474 }, { 0x915D, 41477 }, { 0x913B, 41481 }, { 0x9112, 41485 }, { 0x91B8, 41489 }, { 0x91C3, 41492 }, { 0x9145, 41496 }, { 0x91D5, 41501 }, { 0x9134, 41504 }, { 0x9104, 41508 }, { 0x91A9, 41512 }, { 0x912B, 41516 }, { 0x912A, 41520 }, { 0x9101, 41524 }, { 0x9160, 41528 }, { 0x913E, 41532 }, { 0x91B6, 41536 }, { 0x91BB, 41539 }, { 0x91C5, 41542 }, { 0x91BC, 41546 }, { 0x9136, 41550 }, { 0x9137, 41554 }, { 0x9108, 41558 }, { 0x9100, 41562 }, { 0x91D2, 41566 }, { 0x9147, 41570 }, { 0x9146, 41575 }, { 0x918D, 41580 }, { 0x91C7, 41583 }, { 0x91C9, 41590 }, { 0x91C8, 41598 }, { 0x91CA, 41605 }, { 0x91CB, 41612 }, { 0x91CC, 41619 }, { 0x91CD, 41627 }, { 0x91CE, 41635 }, { 0x9115, 41643 }, { 0x9113, 41646 }, { 0x915B, 41649 }, { 0x915A, 41654 }, { 0x9110, 41659 }, { 0x9111, 41662 }, { 0x912E, 41666 }, { 0x912F, 41670 }, { 0x91D4, 41674 }, { 0x915F, 41677 }, { 0x913D, 41681 }, { 0x9133, 41685 }, { 0x9132, 41690 }, { 0x9103, 41695 }, { 0x91D7, 41700 }, { 0x916A, 41703 }, { 0x916B, 41707 }, { 0x916C, 41711 }, { 0x9198, 41715 }, { 0x9129, 41719 }, { 0x9158, 41724 }, { 0x9116, 41728 }, { 0x919B, 41732 }, { 0x919C, 41736 }, { 0x919D, 41740 }, { 0x919E, 41744 }, { 0x919F, 41748 }, { 0x91A0, 41752 }, { 0x91A1, 41756 }, { 0x91A2, 41760 }, { 0x91A3, 41764 }, { 0x91A4, 41768 }, { 0x91A5, 41772 }, { 0x910D, 41776 }, { 0x910E, 41780 }, { 0x910F, 41784 }, { 0x911B, 41788 }, { 0x91D8, 41792 }, { 0x91DC, 41795 }, { 0x9149, 41799 }, { 0x9151, 41805 }, { 0x9150, 41812 }, { 0x9148, 41819 }, { 0x914F, 41825 }, { 0x914E, 41831 }, { 0x914B, 41837 }, { 0x914A, 41843 }, { 0x914D, 41849 }, { 0x914C, 41855 }, { 0x9117, 41861 }, { 0x91AB, 41865 }, { 0x9186, 41870 }, { 0x9189, 41874 }, { 0x9185, 41878 }, { 0x91AA, 41882 }, { 0x9187, 41887 }, { 0x91AD, 41891 }, { 0x9165, 41896 }, { 0x9182, 41900 }, { 0x9188, 41904 }, { 0x917B, 41908 }, { 0x918A, 41912 }, { 0x916E, 41917 }, { 0x916F, 41921 }, { 0x9170, 41925 }, { 0x9171, 41929 }, { 0x9172, 41933 }, { 0x917D, 41937 }, { 0x918B, 41941 }, { 0x917F, 41946 }, { 0x91AC, 41950 }, { 0x917C, 41954 }, { 0x9167, 41958 }, { 0x9168, 41962 }, { 0x9169, 41966 }, { 0x916D, 41970 }, { 0x9166, 41975 }, { 0x917E, 41980 }, { 0x9181, 41984 }, { 0x9180, 41988 }, { 0x9192, 41992 }, { 0x911A, 41995 }, { 0x9119, 41999 }, { 0x91B1, 42003 }, { 0x91B2, 42007 }, { 0x91D0, 42011 }, { 0x91D1, 42016 }, { 0x91D9, 42021 }, { 0x91DA, 42024 }, { 0x91D6, 42028 }, { 0x91DB, 42031 }, { 0x9161, 42035 }, { 0x913F, 42039 }, { 0x9183, 42043 }, { 0x9184, 42047 }, { 0x91C4, 42051 }, { 0x91BA, 42055 }, { 0x91B9, 42059 }, { 0x91C6, 42063 }, { 0x91BE, 42067 }, { 0x91BD, 42071 }, { 0x911C, 42075 }, { 0x9118, 42079 }, { 0x9193, 42083 }, { 0x911D, 42086 }, { 0x91A6, 42090 }, { 0x91A7, 42093 }, { 0x9156, 42096 }, { 0x918C, 42100 }, { 0x9138, 42103 }, { 0x9139, 42107 }, { 0x9163, 42111 }, { 0x9141, 42115 }, { 0x9162, 42119 }, { 0x9140, 42123 }, { 0x9155, 42127 }, { 0x9154, 42133 }, { 0x1091, 42139 }, { 0x1096, 42143 }, { 0x1092, 42147 }, { 0x1095, 42151 }, { 0x1094, 42155 }, { 0x1099, 42159 }, { 0x1090, 42163 }, { 0x1098, 42167 }, { 0x1097, 42171 }, { 0x1093, 42175 }, { 0x1037, 42179 }, { 0x103A, 42183 }, { 0x1087, 42186 }, { 0x1088, 42190 }, { 0x1089, 42194 }, { 0x108A, 42198 }, { 0x108B, 42202 }, { 0x108C, 42207 }, { 0x108D, 42212 }, { 0x108F, 42218 }, { 0x104A, 42223 }, { 0x1039, 42227 }, { 0x104B, 42230 }, { 0x1038, 42233 }, { 0x1069, 42236 }, { 0x106A, 42242 }, { 0x106B, 42248 }, { 0x106C, 42254 }, { 0x106D, 42260 }, { 0x1036, 42266 }, { 0x1064, 42269 }, { 0x1063, 42276 }, { 0x1041, 42282 }, { 0x1046, 42285 }, { 0x1042, 42288 }, { 0x1045, 42291 }, { 0x1044, 42294 }, { 0x1049, 42297 }, { 0x1040, 42300 }, { 0x1048, 42303 }, { 0x1047, 42306 }, { 0x1043, 42309 }, { 0x1031, 42312 }, { 0x1035, 42316 }, { 0x102D, 42321 }, { 0x102F, 42325 }, { 0x102C, 42329 }, { 0x1032, 42333 }, { 0x102E, 42337 }, { 0x1030, 42341 }, { 0x1034, 42345 }, { 0x1033, 42350 }, { 0x1071, 42355 }, { 0x1062, 42361 }, { 0x1084, 42367 }, { 0x1085, 42372 }, { 0x1083, 42378 }, { 0x1086, 42383 }, { 0x102B, 42389 }, { 0x1073, 42394 }, { 0x1074, 42399 }, { 0x1072, 42404 }, { 0x1058, 42409 }, { 0x1056, 42414 }, { 0x1059, 42419 }, { 0x1057, 42424 }, { 0x1067, 42429 }, { 0x1068, 42436 }, { 0x1021, 42443 }, { 0x1027, 42446 }, { 0x1023, 42449 }, { 0x1029, 42452 }, { 0x1025, 42455 }, { 0x102A, 42458 }, { 0x1017, 42461 }, { 0x1005, 42464 }, { 0x1012, 42467 }, { 0x1002, 42470 }, { 0x101F, 42473 }, { 0x1024, 42476 }, { 0x1007, 42479 }, { 0x1000, 42482 }, { 0x101C, 42485 }, { 0x1019, 42488 }, { 0x1014, 42491 }, { 0x1015, 42494 }, { 0x101B, 42497 }, { 0x101E, 42500 }, { 0x1010, 42503 }, { 0x1026, 42506 }, { 0x101D, 42509 }, { 0x101A, 42512 }, { 0x1018, 42515 }, { 0x1006, 42518 }, { 0x100D, 42521 }, { 0x1013, 42524 }, { 0x1003, 42527 }, { 0x1008, 42530 }, { 0x1001, 42533 }, { 0x1020, 42536 }, { 0x1028, 42539 }, { 0x105C, 42543 }, { 0x105D, 42547 }, { 0x105B, 42551 }, { 0x105A, 42555 }, { 0x1004, 42559 }, { 0x100F, 42562 }, { 0x1009, 42565 }, { 0x1016, 42568 }, { 0x1050, 42571 }, { 0x1051, 42574 }, { 0x1011, 42577 }, { 0x100B, 42580 }, { 0x100E, 42583 }, { 0x100A, 42586 }, { 0x1061, 42589 }, { 0x1022, 42594 }, { 0x107F, 42598 }, { 0x1078, 42602 }, { 0x107B, 42606 }, { 0x107E, 42610 }, { 0x1077, 42614 }, { 0x1081, 42618 }, { 0x1075, 42622 }, { 0x107C, 42626 }, { 0x1079, 42630 }, { 0x1076, 42634 }, { 0x107A, 42638 }, { 0x107D, 42642 }, { 0x1080, 42646 }, { 0x100C, 42650 }, { 0x103F, 42653 }, { 0x108E, 42657 }, { 0x106E, 42662 }, { 0x106F, 42668 }, { 0x1070, 42674 }, { 0x1054, 42680 }, { 0x1052, 42684 }, { 0x1055, 42688 }, { 0x1053, 42692 }, { 0x1066, 42696 }, { 0x1065, 42702 }, { 0x109E, 42708 }, { 0x109F, 42712 }, { 0x104F, 42716 }, { 0x104C, 42719 }, { 0x104D, 42722 }, { 0x104E, 42725 }, { 0x1060, 42728 }, { 0x105F, 42734 }, { 0x105E, 42740 }, { 0x1082, 42746 }, { 0x103E, 42752 }, { 0x103C, 42757 }, { 0x103D, 42762 }, { 0x103B, 42767 }, { 0x22AF, 42772 }, { 0x2288, 42779 }, { 0x2289, 42786 }, { 0x2270, 42793 }, { 0x2274, 42798 }, { 0x2278, 42803 }, { 0x2271, 42807 }, { 0x2279, 42812 }, { 0x2275, 42816 }, { 0x2247, 42821 }, { 0x2646, 42827 }, { 0x206F, 42828 }, { 0x27AF, 42831 }, { 0x27B1, 42837 }, { 0x29A6, 42843 }, { 0x29A7, 42847 }, { 0x74A1, 42851 }, { 0x74A6, 42854 }, { 0x74A2, 42857 }, { 0x74A5, 42860 }, { 0x74A4, 42863 }, { 0x74A9, 42866 }, { 0x74A0, 42869 }, { 0x74A8, 42872 }, { 0x74A7, 42875 }, { 0x74A3, 42878 }, { 0x7496, 42881 }, { 0x7497, 42884 }, { 0x7498, 42887 }, { 0x7499, 42890 }, { 0x749A, 42893 }, { 0x749B, 42896 }, { 0x7481, 42899 }, { 0x749C, 42902 }, { 0x748D, 42905 }, { 0x748C, 42908 }, { 0x7494, 42911 }, { 0x7483, 42914 }, { 0x749D, 42917 }, { 0x7487, 42920 }, { 0x7488, 42923 }, { 0x7482, 42926 }, { 0x7484, 42929 }, { 0x7495, 42932 }, { 0x748A, 42935 }, { 0x7485, 42938 }, { 0x7493, 42941 }, { 0x7480, 42944 }, { 0x748B, 42947 }, { 0x7486, 42950 }, { 0x748F, 42953 }, { 0x7490, 42956 }, { 0x7491, 42959 }, { 0x7492, 42962 }, { 0x748E, 42965 }, { 0x7489, 42968 }, { 0x2202, 42971 }, { 0x0025, 42973 }, { 0x00B6, 42975 }, { 0x2669, 42977 }, { 0x23B7, 42979 }, { 0x2B41, 42982 }, { 0x2B47, 42988 }, { 0x005C, 42994 }, { 0x29F7, 42996 }, { 0x29F5, 43001 }, { 0x27C8, 43004 }, { 0x2765, 43008 }, { 0x2767, 43013 }, { 0x213A, 43017 }, { 0x2613, 43020 }, { 0x2108, 43021 }, { 0x00A7, 43022 }, { 0x2313, 43024 }, { 0x2120, 43025 }, { 0x26B9, 43027 }, { 0x746D, 43028 }, { 0x7466, 43031 }, { 0x746A, 43034 }, { 0x7479, 43037 }, { 0x7455, 43040 }, { 0x7473, 43043 }, { 0x7469, 43046 }, { 0x7471, 43049 }, { 0x747A, 43052 }, { 0x7478, 43055 }, { 0x7468, 43058 }, { 0x7477, 43061 }, { 0x745A, 43064 }, { 0x747D, 43067 }, { 0x7470, 43070 }, { 0x7467, 43073 }, { 0x747B, 43076 }, { 0x7453, 43079 }, { 0x745C, 43082 }, { 0x747E, 43085 }, { 0x7472, 43088 }, { 0x746F, 43091 }, { 0x7474, 43094 }, { 0x7476, 43097 }, { 0x746C, 43100 }, { 0x7451, 43103 }, { 0x745D, 43106 }, { 0x7462, 43109 }, { 0x7458, 43112 }, { 0x747F, 43115 }, { 0x745F, 43118 }, { 0x745B, 43121 }, { 0x7459, 43124 }, { 0x7452, 43127 }, { 0x7464, 43130 }, { 0x7465, 43133 }, { 0x7475, 43136 }, { 0x7450, 43139 }, { 0x746E, 43142 }, { 0x7456, 43145 }, { 0x745E, 43148 }, { 0x746B, 43151 }, { 0x747C, 43154 }, { 0x7463, 43157 }, { 0x7461, 43160 }, { 0x7454, 43163 }, { 0x7457, 43166 }, { 0x7460, 43169 }, { 0x29E2, 43172 }, { 0x2A9D, 43174 }, { 0x2A9E, 43177 }, { 0x2A9F, 43180 }, { 0x2AA0, 43186 }, { 0x2A6C, 43192 }, { 0x0DCA, 43195 }, { 0x0D83, 43198 }, { 0x0D82, 43201 }, { 0x0DDA, 43204 }, { 0x0DD3, 43209 }, { 0x0DD6, 43214 }, { 0x0DD1, 43219 }, { 0x0DF3, 43224 }, { 0x0DF2, 43229 }, { 0x0DD2, 43234 }, { 0x0DD4, 43239 }, { 0x0DD0, 43244 }, { 0x0DDB, 43249 }, { 0x0DD9, 43254 }, { 0x0DDD, 43258 }, { 0x0DDC, 43265 }, { 0x0DDE, 43271 }, { 0x0DCF, 43277 }, { 0x0DDF, 43281 }, { 0x0DD8, 43285 }, { 0x0DB9, 43289 }, { 0x0D85, 43293 }, { 0x0D91, 43296 }, { 0x0D89, 43299 }, { 0x0D94, 43302 }, { 0x0D8B, 43305 }, { 0x0D86, 43308 }, { 0x0D87, 43311 }, { 0x0D93, 43314 }, { 0x0D96, 43317 }, { 0x0DBD, 43320 }, { 0x0DB1, 43324 }, { 0x0DC3, 43328 }, { 0x0D92, 43332 }, { 0x0DC6, 43335 }, { 0x0DC4, 43338 }, { 0x0D8A, 43341 }, { 0x0D9E, 43344 }, { 0x0DB8, 43348 }, { 0x0D95, 43351 }, { 0x0DBB, 43354 }, { 0x0DB3, 43357 }, { 0x0D9F, 43361 }, { 0x0DA6, 43365 }, { 0x0DAC, 43369 }, { 0x0DC1, 43373 }, { 0x0DA5, 43377 }, { 0x0DA4, 43382 }, { 0x0D8C, 43386 }, { 0x0DC0, 43389 }, { 0x0DBA, 43392 }, { 0x0D88, 43395 }, { 0x0D8F, 43398 }, { 0x0D8D, 43401 }, { 0x0D90, 43404 }, { 0x0D8E, 43407 }, { 0x0DC5, 43410 }, { 0x0DAB, 43414 }, { 0x0DC2, 43418 }, { 0x0DB6, 43422 }, { 0x0DA0, 43426 }, { 0x0DAF, 43430 }, { 0x0D9C, 43434 }, { 0x0DA2, 43438 }, { 0x0D9A, 43442 }, { 0x0DB4, 43446 }, { 0x0DAD, 43450 }, { 0x0DA9, 43454 }, { 0x0DA7, 43458 }, { 0x0DB7, 43462 }, { 0x0DA1, 43466 }, { 0x0DB0, 43470 }, { 0x0D9D, 43474 }, { 0x0DA3, 43478 }, { 0x0D9B, 43482 }, { 0x0DB5, 43486 }, { 0x0DAE, 43490 }, { 0x0DAA, 43494 }, { 0x0DA8, 43498 }, { 0x0DF4, 43502 }, { 0x273A, 43505 }, { 0x2A95, 43508 }, { 0x2A97, 43513 }, { 0x2A96, 43521 }, { 0x2A98, 43526 }, { 0x2A57, 43534 }, { 0x2A58, 43537 }, { 0x2AAA, 43540 }, { 0x2AAC, 43542 }, { 0x2603, 43547 }, { 0x002F, 43548 }, { 0x29F6, 43549 }, { 0x2747, 43552 }, { 0x22A1, 43553 }, { 0x2E2C, 43556 }, { 0x229E, 43560 }, { 0x229F, 43562 }, { 0x29C7, 43564 }, { 0x22A0, 43567 }, { 0x29C4, 43569 }, { 0x29C8, 43573 }, { 0x29C5, 43575 }, { 0x29C6, 43579 }, { 0x222F, 43581 }, { 0x1714, 43583 }, { 0x1712, 43586 }, { 0x1713, 43590 }, { 0x1700, 43594 }, { 0x1701, 43597 }, { 0x1702, 43600 }, { 0x170A, 43603 }, { 0x1707, 43606 }, { 0x1704, 43609 }, { 0x1711, 43612 }, { 0x1703, 43615 }, { 0x170E, 43618 }, { 0x170B, 43621 }, { 0x1708, 43624 }, { 0x1709, 43627 }, { 0x1710, 43630 }, { 0x1706, 43633 }, { 0x170F, 43636 }, { 0x170C, 43639 }, { 0x1705, 43642 }, { 0x27A2, 43645 }, { 0x27A3, 43649 }, { 0x0FBE, 43653 }, { 0x0FBF, 43657 }, { 0x0F3D, 43664 }, { 0x0F3C, 43669 }, { 0x0F38, 43674 }, { 0x0F3B, 43678 }, { 0x0F3A, 43683 }, { 0x0F11, 43688 }, { 0x0F39, 43694 }, { 0x0F07, 43698 }, { 0x0F0A, 43705 }, { 0x0F03, 43711 }, { 0x0F02, 43720 }, { 0x0F01, 43729 }, { 0x0F14, 43736 }, { 0x0F35, 43740 }, { 0x0F37, 43746 }, { 0x0F0E, 43752 }, { 0x0FD2, 43756 }, { 0x0F10, 43760 }, { 0x0F12, 43765 }, { 0x0F0D, 43770 }, { 0x0F34, 43773 }, { 0x0FD0, 43777 }, { 0x0F09, 43784 }, { 0x0F06, 43789 }, { 0x0F13, 43797 }, { 0x0F36, 43805 }, { 0x0FD1, 43813 }, { 0x0F08, 43820 }, { 0x0F0F, 43824 }, { 0x0F85, 43828 }, { 0x0F05, 43831 }, { 0x0FD4, 43838 }, { 0x0F84, 43847 }, { 0x0F04, 43850 }, { 0x0FD3, 43857 }, { 0x0F0C, 43866 }, { 0x0F0B, 43871 }, { 0x0F8A, 43875 }, { 0x0F8B, 43880 }, { 0x0F88, 43885 }, { 0x0F86, 43890 }, { 0x0F3F, 43894 }, { 0x0F82, 43898 }, { 0x0F83, 43904 }, { 0x0F3E, 43908 }, { 0x0F89, 43912 }, { 0x0F1D, 43916 }, { 0x0FCF, 43921 }, { 0x0FCE, 43926 }, { 0x0F1E, 43932 }, { 0x0F1A, 43937 }, { 0x0F1C, 43942 }, { 0x0F1F, 43947 }, { 0x0F1B, 43953 }, { 0x0F7E, 43958 }, { 0x0F7F, 43964 }, { 0x0F87, 43968 }, { 0x0F21, 43972 }, { 0x0F26, 43975 }, { 0x0F22, 43978 }, { 0x0F25, 43981 }, { 0x0F24, 43984 }, { 0x0F2A, 43987 }, { 0x0F2F, 43991 }, { 0x0F2B, 43995 }, { 0x0F2E, 43999 }, { 0x0F2D, 44003 }, { 0x0F32, 44007 }, { 0x0F33, 44011 }, { 0x0F31, 44015 }, { 0x0F30, 44019 }, { 0x0F2C, 44023 }, { 0x0F29, 44027 }, { 0x0F20, 44030 }, { 0x0F28, 44033 }, { 0x0F27, 44036 }, { 0x0F23, 44039 }, { 0x0F7A, 44042 }, { 0x0F72, 44046 }, { 0x0F7C, 44050 }, { 0x0F74, 44054 }, { 0x0F71, 44058 }, { 0x0F7B, 44062 }, { 0x0F73, 44066 }, { 0x0F7D, 44070 }, { 0x0F75, 44074 }, { 0x0F78, 44078 }, { 0x0F76, 44083 }, { 0x0F79, 44088 }, { 0x0F77, 44093 }, { 0x0F80, 44098 }, { 0x0F81, 44103 }, { 0x0F68, 44108 }, { 0x0F60, 44111 }, { 0x0F56, 44114 }, { 0x0F45, 44117 }, { 0x0F51, 44120 }, { 0x0F42, 44123 }, { 0x0F67, 44126 }, { 0x0F47, 44129 }, { 0x0F40, 44132 }, { 0x0F63, 44135 }, { 0x0F58, 44138 }, { 0x0F53, 44141 }, { 0x0F54, 44144 }, { 0x0F62, 44147 }, { 0x0F66, 44150 }, { 0x0F4F, 44153 }, { 0x0F5D, 44156 }, { 0x0F61, 44159 }, { 0x0F5F, 44162 }, { 0x0F57, 44165 }, { 0x0F46, 44168 }, { 0x0F4C, 44171 }, { 0x0F52, 44174 }, { 0x0F5B, 44177 }, { 0x0F43, 44180 }, { 0x0F41, 44183 }, { 0x0F6B, 44186 }, { 0x0F44, 44189 }, { 0x0F4E, 44192 }, { 0x0F49, 44195 }, { 0x0F55, 44198 }, { 0x0F6C, 44201 }, { 0x0F64, 44204 }, { 0x0F65, 44207 }, { 0x0F50, 44210 }, { 0x0F59, 44213 }, { 0x0F4A, 44216 }, { 0x0F5E, 44219 }, { 0x0F4D, 44222 }, { 0x0F5C, 44225 }, { 0x0F69, 44228 }, { 0x0F5A, 44231 }, { 0x0F4B, 44234 }, { 0x0F6A, 44237 }, { 0x0FC9, 44241 }, { 0x0FCC, 44245 }, { 0x0FCB, 44251 }, { 0x0FCA, 44257 }, { 0x0FC5, 44263 }, { 0x0FC7, 44267 }, { 0x0FC4, 44273 }, { 0x0FC8, 44277 }, { 0x0FC6, 44281 }, { 0x0F15, 44285 }, { 0x0F16, 44290 }, { 0x0F00, 44295 }, { 0x0FB8, 44298 }, { 0x0FB0, 44302 }, { 0x0FA6, 44306 }, { 0x0F95, 44310 }, { 0x0FA1, 44314 }, { 0x0F92, 44318 }, { 0x0FB7, 44322 }, { 0x0F97, 44326 }, { 0x0F90, 44330 }, { 0x0FB3, 44334 }, { 0x0FA8, 44338 }, { 0x0FA3, 44342 }, { 0x0FA4, 44346 }, { 0x0FB2, 44350 }, { 0x0FB6, 44354 }, { 0x0F9F, 44358 }, { 0x0FAD, 44362 }, { 0x0FB1, 44366 }, { 0x0FAF, 44370 }, { 0x0FA7, 44374 }, { 0x0F96, 44378 }, { 0x0F9C, 44382 }, { 0x0FA2, 44386 }, { 0x0FAB, 44390 }, { 0x0F93, 44394 }, { 0x0F91, 44398 }, { 0x0F94, 44402 }, { 0x0F9E, 44406 }, { 0x0F99, 44410 }, { 0x0FA5, 44414 }, { 0x0FB4, 44418 }, { 0x0FB5, 44422 }, { 0x0FA0, 44426 }, { 0x0FA9, 44430 }, { 0x0F9A, 44434 }, { 0x0FAE, 44438 }, { 0x0F9D, 44442 }, { 0x0FAC, 44446 }, { 0x0FB9, 44450 }, { 0x0FAA, 44454 }, { 0x0F9B, 44458 }, { 0x0FBC, 44462 }, { 0x0FBA, 44467 }, { 0x0FBB, 44472 }, { 0x0F17, 44477 }, { 0x0F19, 44484 }, { 0x0F18, 44489 }, { 0x0FC2, 44494 }, { 0x0FC3, 44499 }, { 0x0FC0, 44504 }, { 0x0FC1, 44509 }, { 0x2632, 44514 }, { 0x2631, 44517 }, { 0x2634, 44520 }, { 0x2637, 44523 }, { 0x2635, 44526 }, { 0x2630, 44529 }, { 0x2633, 44532 }, { 0x2636, 44535 }, { 0x219F, 44538 }, { 0x2191, 44542 }, { 0x2912, 44544 }, { 0x21A5, 44548 }, { 0x21B0, 44552 }, { 0x21B1, 44557 }, { 0x21DE, 44562 }, { 0x2909, 44567 }, { 0x21C5, 44572 }, { 0x2B06, 44578 }, { 0x21E7, 44581 }, { 0x21EB, 44584 }, { 0x21ED, 44589 }, { 0x21EC, 44597 }, { 0x21EA, 44605 }, { 0x21EE, 44610 }, { 0x21EF, 44614 }, { 0x2E15, 44620 }, { 0x21E1, 44622 }, { 0x21D1, 44625 }, { 0x21C8, 44628 }, { 0x290A, 44631 }, { 0x2958, 44634 }, { 0x2960, 44641 }, { 0x2963, 44648 }, { 0x296E, 44659 }, { 0x2954, 44670 }, { 0x295C, 44677 }, { 0x21BF, 44684 }, { 0x21BE, 44689 }, { 0x27F0, 44694 }, { 0x2949, 44697 }, { 0x270C, 44703 }, { 0x26A0, 44705 }, { 0x270D, 44707 }, { 0x206D, 44709 }, { 0x206B, 44713 }, { 0x2708, 44716 }, { 0x212B, 44717 }, { 0x2652, 44719 }, { 0x0589, 44720 }, { 0x055D, 44723 }, { 0x056E, 44725 }, { 0x0581, 44729 }, { 0x0564, 44733 }, { 0x0567, 44737 }, { 0x0568, 44741 }, { 0x0570, 44745 }, { 0x0571, 44749 }, { 0x0585, 44753 }, { 0x057C, 44757 }, { 0x0569, 44761 }, { 0x0578, 44765 }, { 0x0575, 44769 }, { 0x0566, 44773 }, { 0x0561, 44777 }, { 0x0562, 44781 }, { 0x0579, 44785 }, { 0x0565, 44789 }, { 0x0586, 44793 }, { 0x0563, 44797 }, { 0x056B, 44801 }, { 0x0584, 44805 }, { 0x056F, 44809 }, { 0x0574, 44813 }, { 0x0576, 44817 }, { 0x057A, 44821 }, { 0x0580, 44825 }, { 0x057D, 44829 }, { 0x0577, 44833 }, { 0x057E, 44837 }, { 0x056D, 44841 }, { 0x056A, 44845 }, { 0x0573, 44849 }, { 0x0572, 44853 }, { 0x057B, 44857 }, { 0x056C, 44861 }, { 0x0583, 44865 }, { 0x057F, 44869 }, { 0x0582, 44873 }, { 0x0587, 44877 }, { 0x6B14, 44882 }, { 0x6B15, 44887 }, { 0x6B13, 44892 }, { 0x6B17, 44897 }, { 0x6B16, 44902 }, { 0x058A, 44907 }, { 0x053E, 44909 }, { 0x0551, 44913 }, { 0x0534, 44917 }, { 0x0537, 44921 }, { 0x0538, 44925 }, { 0x0540, 44929 }, { 0x0541, 44933 }, { 0x0555, 44937 }, { 0x054C, 44941 }, { 0x0539, 44945 }, { 0x0548, 44949 }, { 0x0545, 44953 }, { 0x0536, 44957 }, { 0x0531, 44961 }, { 0x0532, 44965 }, { 0x0549, 44969 }, { 0x0535, 44973 }, { 0x0556, 44977 }, { 0x0533, 44981 }, { 0x053B, 44985 }, { 0x0554, 44989 }, { 0x053F, 44993 }, { 0x0544, 44997 }, { 0x0546, 45001 }, { 0x054A, 45005 }, { 0x0550, 45009 }, { 0x054D, 45013 }, { 0x0547, 45017 }, { 0x054E, 45021 }, { 0x053D, 45025 }, { 0x053A, 45029 }, { 0x0543, 45033 }, { 0x0542, 45037 }, { 0x054B, 45041 }, { 0x053C, 45045 }, { 0x0553, 45049 }, { 0x054F, 45053 }, { 0x0552, 45057 }, { 0x055B, 45061 }, { 0x0559, 45064 }, { 0x055E, 45070 }, { 0x055A, 45073 }, { 0x055C, 45075 }, { 0x055F, 45078 }, { 0x002A, 45081 }, { 0x2217, 45082 }, { 0x2042, 45084 }, { 0x1B44, 45085 }, { 0x1B00, 45088 }, { 0x1B01, 45092 }, { 0x1B04, 45096 }, { 0x1B02, 45099 }, { 0x1B03, 45102 }, { 0x1B34, 45105 }, { 0x1B5E, 45108 }, { 0x1B5F, 45111 }, { 0x1B5D, 45114 }, { 0x1B51, 45117 }, { 0x1B56, 45120 }, { 0x1B52, 45123 }, { 0x1B55, 45126 }, { 0x1B54, 45129 }, { 0x1B59, 45132 }, { 0x1B50, 45135 }, { 0x1B58, 45138 }, { 0x1B57, 45141 }, { 0x1B53, 45144 }, { 0x1B5A, 45147 }, { 0x1B3C, 45149 }, { 0x1B3D, 45154 }, { 0x1B3A, 45160 }, { 0x1B3B, 45165 }, { 0x1B36, 45171 }, { 0x1B37, 45175 }, { 0x1B38, 45180 }, { 0x1B39, 45184 }, { 0x1B42, 45189 }, { 0x1B43, 45193 }, { 0x1B3E, 45198 }, { 0x1B3F, 45202 }, { 0x1B41, 45207 }, { 0x1B40, 45213 }, { 0x1B35, 45218 }, { 0x1B5C, 45222 }, { 0x1B29, 45224 }, { 0x1B2A, 45227 }, { 0x1B18, 45231 }, { 0x1B19, 45234 }, { 0x1B24, 45238 }, { 0x1B25, 45241 }, { 0x1B1F, 45245 }, { 0x1B20, 45250 }, { 0x1B48, 45255 }, { 0x1B15, 45259 }, { 0x1B16, 45262 }, { 0x1B33, 45266 }, { 0x1B1A, 45269 }, { 0x1B1B, 45272 }, { 0x1B13, 45276 }, { 0x1B14, 45279 }, { 0x1B2E, 45283 }, { 0x1B0D, 45286 }, { 0x1B0E, 45290 }, { 0x1B2B, 45295 }, { 0x1B26, 45298 }, { 0x1B21, 45301 }, { 0x1B27, 45305 }, { 0x1B28, 45308 }, { 0x1B2D, 45312 }, { 0x1B0B, 45315 }, { 0x1B0C, 45319 }, { 0x1B32, 45324 }, { 0x1B30, 45327 }, { 0x1B31, 45331 }, { 0x1B22, 45335 }, { 0x1B23, 45338 }, { 0x1B1D, 45342 }, { 0x1B1E, 45346 }, { 0x1B49, 45351 }, { 0x1B2F, 45355 }, { 0x1B2C, 45358 }, { 0x1B45, 45361 }, { 0x1B17, 45365 }, { 0x1B1C, 45368 }, { 0x1B4A, 45371 }, { 0x1B46, 45375 }, { 0x1B47, 45379 }, { 0x1B05, 45383 }, { 0x1B06, 45386 }, { 0x1B0F, 45390 }, { 0x1B07, 45393 }, { 0x1B08, 45396 }, { 0x1B11, 45400 }, { 0x1B12, 45403 }, { 0x1B09, 45407 }, { 0x1B0A, 45410 }, { 0x1B10, 45414 }, { 0x1B4B, 45417 }, { 0x1B5B, 45421 }, { 0x1B64, 45423 }, { 0x1B6A, 45427 }, { 0x1B65, 45432 }, { 0x1B62, 45437 }, { 0x1B66, 45441 }, { 0x1B61, 45445 }, { 0x1B63, 45449 }, { 0x1B67, 45453 }, { 0x1B69, 45457 }, { 0x1B68, 45461 }, { 0x1B73, 45465 }, { 0x1B72, 45470 }, { 0x1B6C, 45475 }, { 0x1B6B, 45480 }, { 0x1B6E, 45485 }, { 0x1B71, 45490 }, { 0x1B6D, 45497 }, { 0x1B70, 45502 }, { 0x1B6F, 45509 }, { 0x1B78, 45514 }, { 0x1B7C, 45520 }, { 0x1B79, 45526 }, { 0x1B7A, 45532 }, { 0x1B7B, 45538 }, { 0x1B75, 45544 }, { 0x1B74, 45550 }, { 0x1B77, 45556 }, { 0x1B76, 45562 }, { 0x1B60, 45568 }, { 0x31B7, 45570 }, { 0x31B6, 45574 }, { 0x31B4, 45578 }, { 0x31B5, 45582 }, { 0x311A, 45586 }, { 0x3105, 45589 }, { 0x3118, 45592 }, { 0x3109, 45595 }, { 0x311C, 45598 }, { 0x3108, 45601 }, { 0x310D, 45604 }, { 0x310F, 45607 }, { 0x3127, 45610 }, { 0x3110, 45613 }, { 0x310E, 45616 }, { 0x310C, 45619 }, { 0x3107, 45622 }, { 0x310B, 45625 }, { 0x311B, 45628 }, { 0x3106, 45631 }, { 0x3111, 45634 }, { 0x3116, 45637 }, { 0x3119, 45640 }, { 0x310A, 45643 }, { 0x3128, 45646 }, { 0x312A, 45649 }, { 0x3112, 45652 }, { 0x3117, 45655 }, { 0x311E, 45658 }, { 0x31B0, 45661 }, { 0x3122, 45664 }, { 0x3120, 45667 }, { 0x31A0, 45670 }, { 0x3114, 45673 }, { 0x31A4, 45676 }, { 0x311D, 45679 }, { 0x311F, 45682 }, { 0x3123, 45685 }, { 0x3126, 45688 }, { 0x312C, 45691 }, { 0x31A3, 45694 }, { 0x312D, 45697 }, { 0x31AC, 45700 }, { 0x31A8, 45703 }, { 0x3129, 45706 }, { 0x31A2, 45709 }, { 0x312B, 45712 }, { 0x31B1, 45715 }, { 0x31A6, 45718 }, { 0x3121, 45721 }, { 0x3115, 45724 }, { 0x3113, 45727 }, { 0x31A1, 45730 }, { 0x3124, 45733 }, { 0x31A9, 45736 }, { 0x3125, 45739 }, { 0x31A5, 45742 }, { 0x31AA, 45745 }, { 0x31AD, 45748 }, { 0x31B2, 45751 }, { 0x31A7, 45754 }, { 0x31AB, 45757 }, { 0x31AE, 45760 }, { 0x31AF, 45763 }, { 0x31B3, 45766 }, { 0x1A1F, 45769 }, { 0x1A19, 45773 }, { 0x1A17, 45777 }, { 0x1A1A, 45781 }, { 0x1A18, 45785 }, { 0x1A1B, 45789 }, { 0x1A15, 45793 }, { 0x1A05, 45796 }, { 0x1A0C, 45799 }, { 0x1A09, 45802 }, { 0x1A01, 45805 }, { 0x1A16, 45808 }, { 0x1A0D, 45811 }, { 0x1A00, 45814 }, { 0x1A12, 45817 }, { 0x1A06, 45820 }, { 0x1A0A, 45823 }, { 0x1A04, 45826 }, { 0x1A11, 45829 }, { 0x1A14, 45832 }, { 0x1A08, 45835 }, { 0x1A13, 45838 }, { 0x1A10, 45841 }, { 0x1A07, 45844 }, { 0x1A02, 45847 }, { 0x1A0B, 45850 }, { 0x1A0E, 45853 }, { 0x1A03, 45856 }, { 0x1A0F, 45859 }, { 0x1A1E, 45862 }, { 0x25CE, 45864 }, { 0x2624, 45865 }, { 0x140A, 45866 }, { 0x14A1, 45869 }, { 0x1401, 45872 }, { 0x155D, 45875 }, { 0x1403, 45878 }, { 0x1483, 45881 }, { 0x14EA, 45884 }, { 0x14BB, 45887 }, { 0x14D0, 45890 }, { 0x1405, 45893 }, { 0x1449, 45896 }, { 0x1585, 45899 }, { 0x1550, 45902 }, { 0x1505, 45905 }, { 0x1466, 45908 }, { 0x153E, 45911 }, { 0x140B, 45914 }, { 0x141C, 45917 }, { 0x142E, 45920 }, { 0x1490, 45923 }, { 0x1489, 45926 }, { 0x148B, 45929 }, { 0x148D, 45932 }, { 0x142B, 45935 }, { 0x1559, 45938 }, { 0x1553, 45941 }, { 0x1555, 45944 }, { 0x1557, 45947 }, { 0x157D, 45950 }, { 0x1404, 45953 }, { 0x142C, 45956 }, { 0x1472, 45959 }, { 0x146B, 45962 }, { 0x146D, 45965 }, { 0x146F, 45968 }, { 0x1484, 45971 }, { 0x14DA, 45974 }, { 0x14D3, 45977 }, { 0x15A6, 45980 }, { 0x14D5, 45983 }, { 0x14D7, 45986 }, { 0x14AA, 45989 }, { 0x14A3, 45992 }, { 0x14BD, 45995 }, { 0x14A5, 45998 }, { 0x14A7, 46001 }, { 0x14C7, 46004 }, { 0x14C0, 46007 }, { 0x1595, 46010 }, { 0x14D2, 46013 }, { 0x14C2, 46016 }, { 0x14C4, 46019 }, { 0x142D, 46022 }, { 0x1406, 46025 }, { 0x1438, 46028 }, { 0x142F, 46031 }, { 0x1431, 46034 }, { 0x1433, 46037 }, { 0x1583, 46040 }, { 0x157F, 46043 }, { 0x1581, 46046 }, { 0x154B, 46049 }, { 0x1542, 46052 }, { 0x1546, 46055 }, { 0x1548, 46058 }, { 0x14F4, 46061 }, { 0x14ED, 46064 }, { 0x1525, 46067 }, { 0x14EF, 46070 }, { 0x14F1, 46073 }, { 0x1507, 46076 }, { 0x1455, 46079 }, { 0x144C, 46082 }, { 0x156A, 46085 }, { 0x144E, 46088 }, { 0x1450, 46091 }, { 0x1417, 46094 }, { 0x140C, 46097 }, { 0x140E, 46100 }, { 0x1412, 46103 }, { 0x152D, 46106 }, { 0x1526, 46109 }, { 0x1528, 46112 }, { 0x152A, 46115 }, { 0x1402, 46118 }, { 0x1491, 46121 }, { 0x166D, 46124 }, { 0x148C, 46128 }, { 0x148E, 46131 }, { 0x149C, 46134 }, { 0x1492, 46137 }, { 0x1494, 46140 }, { 0x1498, 46143 }, { 0x155A, 46146 }, { 0x1556, 46149 }, { 0x1558, 46152 }, { 0x1473, 46155 }, { 0x146E, 46158 }, { 0x1470, 46161 }, { 0x147E, 46164 }, { 0x1474, 46167 }, { 0x1476, 46170 }, { 0x147A, 46173 }, { 0x14DB, 46176 }, { 0x15A4, 46179 }, { 0x15A0, 46182 }, { 0x15A2, 46185 }, { 0x14D6, 46188 }, { 0x14D8, 46191 }, { 0x14E6, 46194 }, { 0x14DC, 46197 }, { 0x14DE, 46200 }, { 0x14E2, 46203 }, { 0x14AB, 46206 }, { 0x14A6, 46209 }, { 0x14A8, 46212 }, { 0x14B6, 46215 }, { 0x14AC, 46218 }, { 0x14AE, 46221 }, { 0x14B2, 46224 }, { 0x14C8, 46227 }, { 0x1593, 46230 }, { 0x158F, 46233 }, { 0x1591, 46236 }, { 0x14C3, 46239 }, { 0x1596, 46242 }, { 0x14C5, 46245 }, { 0x14CB, 46248 }, { 0x14C9, 46251 }, { 0x1439, 46254 }, { 0x1432, 46257 }, { 0x1434, 46260 }, { 0x1444, 46263 }, { 0x143A, 46266 }, { 0x143C, 46269 }, { 0x1440, 46272 }, { 0x1584, 46275 }, { 0x166F, 46278 }, { 0x1580, 46281 }, { 0x1582, 46284 }, { 0x154C, 46287 }, { 0x1547, 46290 }, { 0x1549, 46293 }, { 0x14F5, 46296 }, { 0x1515, 46299 }, { 0x1510, 46302 }, { 0x1511, 46305 }, { 0x1513, 46308 }, { 0x14F0, 46311 }, { 0x14F2, 46314 }, { 0x1500, 46317 }, { 0x14F6, 46320 }, { 0x14F8, 46323 }, { 0x14FC, 46326 }, { 0x1456, 46329 }, { 0x1566, 46332 }, { 0x155E, 46335 }, { 0x1560, 46338 }, { 0x1564, 46341 }, { 0x144F, 46344 }, { 0x1451, 46347 }, { 0x146A, 46350 }, { 0x1467, 46353 }, { 0x156F, 46356 }, { 0x1468, 46359 }, { 0x1469, 46362 }, { 0x1461, 46365 }, { 0x1457, 46368 }, { 0x1459, 46371 }, { 0x145D, 46374 }, { 0x1573, 46377 }, { 0x1570, 46380 }, { 0x1571, 46383 }, { 0x1572, 46386 }, { 0x1419, 46389 }, { 0x1410, 46392 }, { 0x1414, 46395 }, { 0x152E, 46398 }, { 0x1529, 46401 }, { 0x152B, 46404 }, { 0x1539, 46407 }, { 0x152F, 46410 }, { 0x1531, 46413 }, { 0x1535, 46416 }, { 0x148A, 46419 }, { 0x149E, 46422 }, { 0x1496, 46425 }, { 0x149A, 46428 }, { 0x1554, 46431 }, { 0x166E, 46434 }, { 0x155B, 46438 }, { 0x146C, 46441 }, { 0x1480, 46444 }, { 0x1478, 46447 }, { 0x147C, 46450 }, { 0x14D4, 46453 }, { 0x15A5, 46456 }, { 0x15A1, 46459 }, { 0x15A3, 46462 }, { 0x14E8, 46465 }, { 0x14E0, 46468 }, { 0x14E4, 46471 }, { 0x14A4, 46474 }, { 0x14B8, 46477 }, { 0x14B0, 46480 }, { 0x14B4, 46483 }, { 0x14C1, 46486 }, { 0x1594, 46489 }, { 0x1670, 46492 }, { 0x1590, 46495 }, { 0x1592, 46498 }, { 0x1675, 46501 }, { 0x1671, 46504 }, { 0x1673, 46507 }, { 0x14CD, 46510 }, { 0x1430, 46513 }, { 0x1446, 46516 }, { 0x143E, 46519 }, { 0x1442, 46522 }, { 0x157E, 46525 }, { 0x1545, 46528 }, { 0x154E, 46531 }, { 0x14EE, 46534 }, { 0x1516, 46537 }, { 0x1512, 46540 }, { 0x1514, 46543 }, { 0x1521, 46546 }, { 0x1517, 46549 }, { 0x1519, 46552 }, { 0x151D, 46555 }, { 0x1502, 46558 }, { 0x14FA, 46561 }, { 0x14FE, 46564 }, { 0x144D, 46567 }, { 0x1567, 46570 }, { 0x1562, 46573 }, { 0x1565, 46576 }, { 0x1589, 46579 }, { 0x1586, 46582 }, { 0x1587, 46585 }, { 0x1588, 46588 }, { 0x156E, 46591 }, { 0x156B, 46594 }, { 0x156C, 46597 }, { 0x156D, 46600 }, { 0x1463, 46603 }, { 0x145B, 46606 }, { 0x145F, 46609 }, { 0x1527, 46612 }, { 0x153B, 46615 }, { 0x1533, 46618 }, { 0x1537, 46621 }, { 0x1422, 46624 }, { 0x142A, 46630 }, { 0x1429, 46635 }, { 0x1424, 46639 }, { 0x141F, 46643 }, { 0x1420, 46647 }, { 0x1423, 46651 }, { 0x1428, 46657 }, { 0x1421, 46663 }, { 0x1425, 46669 }, { 0x1426, 46674 }, { 0x1427, 46681 }, { 0x158E, 46686 }, { 0x1676, 46689 }, { 0x1672, 46692 }, { 0x1674, 46695 }, { 0x1523, 46698 }, { 0x151B, 46701 }, { 0x151F, 46704 }, { 0x1568, 46707 }, { 0x14EC, 46710 }, { 0x1552, 46714 }, { 0x155F, 46718 }, { 0x1561, 46722 }, { 0x1563, 46726 }, { 0x1543, 46730 }, { 0x14BF, 46734 }, { 0x15C3, 46738 }, { 0x15C0, 46742 }, { 0x15C1, 46746 }, { 0x15C2, 46750 }, { 0x161A, 46754 }, { 0x1615, 46758 }, { 0x14A2, 46762 }, { 0x1541, 46766 }, { 0x159A, 46770 }, { 0x1597, 46774 }, { 0x1598, 46778 }, { 0x1599, 46782 }, { 0x141D, 46786 }, { 0x1407, 46790 }, { 0x148F, 46794 }, { 0x1471, 46798 }, { 0x14D9, 46802 }, { 0x14A9, 46806 }, { 0x14C6, 46810 }, { 0x1435, 46814 }, { 0x14F3, 46818 }, { 0x1452, 46822 }, { 0x152C, 46826 }, { 0x1448, 46830 }, { 0x15AF, 46834 }, { 0x144B, 46838 }, { 0x1409, 46842 }, { 0x15EE, 46846 }, { 0x1646, 46850 }, { 0x1454, 46854 }, { 0x1408, 46858 }, { 0x15F4, 46862 }, { 0x15F1, 46866 }, { 0x15F3, 46870 }, { 0x15F0, 46874 }, { 0x15EF, 46878 }, { 0x1437, 46882 }, { 0x161B, 46886 }, { 0x1617, 46890 }, { 0x1619, 46894 }, { 0x1616, 46898 }, { 0x1614, 46902 }, { 0x1601, 46906 }, { 0x1627, 46910 }, { 0x1624, 46914 }, { 0x1626, 46918 }, { 0x1623, 46922 }, { 0x1622, 46926 }, { 0x160D, 46930 }, { 0x160A, 46934 }, { 0x160C, 46938 }, { 0x1609, 46942 }, { 0x1608, 46946 }, { 0x1607, 46950 }, { 0x1604, 46954 }, { 0x14D1, 46958 }, { 0x1606, 46962 }, { 0x1603, 46966 }, { 0x1602, 46970 }, { 0x15ED, 46974 }, { 0x15EA, 46978 }, { 0x15EC, 46982 }, { 0x15E9, 46986 }, { 0x15E8, 46990 }, { 0x15CF, 46994 }, { 0x15CC, 46998 }, { 0x15CE, 47002 }, { 0x15CB, 47006 }, { 0x15CA, 47010 }, { 0x1653, 47014 }, { 0x1650, 47018 }, { 0x165A, 47022 }, { 0x1652, 47026 }, { 0x164F, 47030 }, { 0x164E, 47034 }, { 0x15D5, 47038 }, { 0x15D2, 47042 }, { 0x15D4, 47046 }, { 0x15D1, 47050 }, { 0x15D0, 47054 }, { 0x1613, 47058 }, { 0x1610, 47062 }, { 0x1612, 47066 }, { 0x160F, 47070 }, { 0x160E, 47074 }, { 0x1645, 47078 }, { 0x1642, 47082 }, { 0x1644, 47086 }, { 0x1641, 47090 }, { 0x1640, 47094 }, { 0x1666, 47098 }, { 0x1663, 47102 }, { 0x1665, 47106 }, { 0x1662, 47110 }, { 0x1661, 47114 }, { 0x1453, 47118 }, { 0x162D, 47122 }, { 0x162A, 47126 }, { 0x162C, 47130 }, { 0x1629, 47134 }, { 0x1628, 47138 }, { 0x164D, 47142 }, { 0x164A, 47146 }, { 0x164C, 47150 }, { 0x1649, 47154 }, { 0x1648, 47158 }, { 0x15F2, 47162 }, { 0x15C9, 47166 }, { 0x15C6, 47170 }, { 0x15C8, 47174 }, { 0x15C5, 47178 }, { 0x15C4, 47182 }, { 0x1436, 47186 }, { 0x15DB, 47190 }, { 0x15D8, 47194 }, { 0x15DA, 47198 }, { 0x15D7, 47202 }, { 0x15D6, 47206 }, { 0x1618, 47210 }, { 0x1621, 47214 }, { 0x161E, 47218 }, { 0x1620, 47222 }, { 0x161D, 47226 }, { 0x161C, 47230 }, { 0x15FA, 47234 }, { 0x15F7, 47238 }, { 0x15F9, 47242 }, { 0x15F6, 47246 }, { 0x15F5, 47250 }, { 0x1600, 47254 }, { 0x15FD, 47258 }, { 0x15FF, 47262 }, { 0x15FC, 47266 }, { 0x15FB, 47270 }, { 0x1625, 47274 }, { 0x1633, 47278 }, { 0x1630, 47282 }, { 0x1632, 47286 }, { 0x162F, 47290 }, { 0x162E, 47294 }, { 0x160B, 47298 }, { 0x1605, 47302 }, { 0x15EB, 47306 }, { 0x15CD, 47310 }, { 0x1651, 47314 }, { 0x1659, 47318 }, { 0x1656, 47322 }, { 0x1658, 47326 }, { 0x1655, 47330 }, { 0x1654, 47334 }, { 0x15E1, 47338 }, { 0x15DE, 47342 }, { 0x15E0, 47346 }, { 0x15DD, 47350 }, { 0x15DC, 47354 }, { 0x163F, 47358 }, { 0x163C, 47362 }, { 0x163E, 47366 }, { 0x163B, 47370 }, { 0x163A, 47374 }, { 0x1660, 47378 }, { 0x165D, 47382 }, { 0x165F, 47386 }, { 0x165C, 47390 }, { 0x165B, 47394 }, { 0x15E7, 47398 }, { 0x15E4, 47402 }, { 0x15E6, 47406 }, { 0x15E3, 47410 }, { 0x15E2, 47414 }, { 0x15D3, 47418 }, { 0x1611, 47422 }, { 0x1643, 47426 }, { 0x1664, 47430 }, { 0x162B, 47434 }, { 0x164B, 47438 }, { 0x15C7, 47442 }, { 0x15D9, 47446 }, { 0x161F, 47450 }, { 0x15F8, 47454 }, { 0x15FE, 47458 }, { 0x1631, 47462 }, { 0x1657, 47466 }, { 0x15DF, 47470 }, { 0x163D, 47474 }, { 0x1639, 47478 }, { 0x1636, 47482 }, { 0x1638, 47486 }, { 0x1635, 47490 }, { 0x1634, 47494 }, { 0x165E, 47498 }, { 0x15E5, 47502 }, { 0x166C, 47506 }, { 0x1669, 47510 }, { 0x166B, 47514 }, { 0x1668, 47518 }, { 0x1667, 47522 }, { 0x1637, 47526 }, { 0x166A, 47530 }, { 0x1647, 47534 }, { 0x141E, 47539 }, { 0x150B, 47543 }, { 0x150A, 47547 }, { 0x141B, 47551 }, { 0x1416, 47555 }, { 0x14A0, 47559 }, { 0x1482, 47563 }, { 0x14BA, 47567 }, { 0x14CF, 47571 }, { 0x150F, 47575 }, { 0x150E, 47579 }, { 0x150C, 47583 }, { 0x150D, 47587 }, { 0x1504, 47591 }, { 0x1465, 47595 }, { 0x153D, 47599 }, { 0x157B, 47603 }, { 0x1579, 47607 }, { 0x1574, 47611 }, { 0x1575, 47615 }, { 0x1577, 47619 }, { 0x157A, 47623 }, { 0x1576, 47627 }, { 0x1578, 47631 }, { 0x157C, 47635 }, { 0x15AE, 47639 }, { 0x15AC, 47643 }, { 0x15A7, 47647 }, { 0x15A8, 47651 }, { 0x15AA, 47655 }, { 0x15AD, 47659 }, { 0x15A9, 47663 }, { 0x15AB, 47667 }, { 0x15B3, 47671 }, { 0x15B0, 47675 }, { 0x15B1, 47679 }, { 0x15B2, 47683 }, { 0x1508, 47687 }, { 0x15BF, 47691 }, { 0x15BC, 47695 }, { 0x15BD, 47699 }, { 0x15BE, 47703 }, { 0x15BB, 47707 }, { 0x15B8, 47711 }, { 0x15B9, 47715 }, { 0x15BA, 47719 }, { 0x15B7, 47723 }, { 0x15B4, 47727 }, { 0x15B5, 47731 }, { 0x15B6, 47735 }, { 0x14EB, 47739 }, { 0x14BC, 47743 }, { 0x144A, 47747 }, { 0x1551, 47751 }, { 0x1540, 47755 }, { 0x154D, 47759 }, { 0x1544, 47763 }, { 0x154A, 47767 }, { 0x158D, 47771 }, { 0x158A, 47775 }, { 0x158B, 47779 }, { 0x158C, 47783 }, { 0x1418, 47787 }, { 0x140D, 47791 }, { 0x140F, 47795 }, { 0x1413, 47799 }, { 0x149D, 47803 }, { 0x1493, 47807 }, { 0x1495, 47811 }, { 0x1499, 47815 }, { 0x147F, 47819 }, { 0x1475, 47823 }, { 0x1477, 47827 }, { 0x147B, 47831 }, { 0x14E7, 47835 }, { 0x14DD, 47839 }, { 0x14DF, 47843 }, { 0x14E3, 47847 }, { 0x14B7, 47851 }, { 0x14AD, 47855 }, { 0x14AF, 47859 }, { 0x14B3, 47863 }, { 0x14CC, 47867 }, { 0x14CA, 47871 }, { 0x1445, 47875 }, { 0x143B, 47879 }, { 0x143D, 47883 }, { 0x1441, 47887 }, { 0x1501, 47891 }, { 0x14F7, 47895 }, { 0x14F9, 47899 }, { 0x14FD, 47903 }, { 0x1462, 47907 }, { 0x1458, 47911 }, { 0x145A, 47915 }, { 0x145E, 47919 }, { 0x141A, 47923 }, { 0x1411, 47927 }, { 0x1415, 47931 }, { 0x153A, 47935 }, { 0x1530, 47939 }, { 0x1532, 47943 }, { 0x1536, 47947 }, { 0x149F, 47951 }, { 0x1497, 47955 }, { 0x149B, 47959 }, { 0x155C, 47963 }, { 0x1481, 47967 }, { 0x1479, 47971 }, { 0x147D, 47975 }, { 0x14E9, 47979 }, { 0x14E1, 47983 }, { 0x14E5, 47987 }, { 0x14B9, 47991 }, { 0x14B1, 47995 }, { 0x14B5, 47999 }, { 0x14CE, 48003 }, { 0x1447, 48007 }, { 0x143F, 48011 }, { 0x1443, 48015 }, { 0x154F, 48019 }, { 0x1522, 48023 }, { 0x1518, 48027 }, { 0x151A, 48031 }, { 0x151E, 48035 }, { 0x1503, 48039 }, { 0x14FB, 48043 }, { 0x14FF, 48047 }, { 0x1464, 48051 }, { 0x145C, 48055 }, { 0x1460, 48059 }, { 0x153C, 48063 }, { 0x1534, 48067 }, { 0x1538, 48071 }, { 0x1524, 48075 }, { 0x151C, 48079 }, { 0x1520, 48083 }, { 0x1569, 48087 }, { 0x14BE, 48091 }, { 0x1506, 48095 }, { 0x153F, 48099 }, { 0x1509, 48103 }, { 0x159F, 48107 }, { 0x159E, 48111 }, { 0x159B, 48115 }, { 0x159C, 48119 }, { 0x159D, 48123 }, { 0x1488, 48127 }, { 0x1485, 48131 }, { 0x1486, 48135 }, { 0x1487, 48139 }, { 0x13A0, 48143 }, { 0x13A1, 48146 }, { 0x13A2, 48149 }, { 0x13A3, 48152 }, { 0x13CD, 48155 }, { 0x13A4, 48158 }, { 0x13A5, 48161 }, { 0x13D3, 48164 }, { 0x13D5, 48167 }, { 0x13D7, 48170 }, { 0x13D9, 48173 }, { 0x13DA, 48176 }, { 0x13DB, 48179 }, { 0x13A6, 48182 }, { 0x13A8, 48185 }, { 0x13A9, 48188 }, { 0x13AA, 48191 }, { 0x13AB, 48194 }, { 0x13AC, 48197 }, { 0x13AD, 48200 }, { 0x13AE, 48203 }, { 0x13AF, 48206 }, { 0x13B0, 48209 }, { 0x13B1, 48212 }, { 0x13B2, 48215 }, { 0x13A7, 48218 }, { 0x13B3, 48221 }, { 0x13B4, 48224 }, { 0x13B5, 48227 }, { 0x13B6, 48230 }, { 0x13B7, 48233 }, { 0x13B8, 48236 }, { 0x13B9, 48239 }, { 0x13BA, 48242 }, { 0x13BB, 48245 }, { 0x13BC, 48248 }, { 0x13BD, 48251 }, { 0x13BE, 48254 }, { 0x13C1, 48257 }, { 0x13C2, 48260 }, { 0x13C3, 48263 }, { 0x13C4, 48266 }, { 0x13C5, 48269 }, { 0x13CC, 48272 }, { 0x13CE, 48275 }, { 0x13CF, 48278 }, { 0x13D0, 48281 }, { 0x13D1, 48284 }, { 0x13D2, 48287 }, { 0x13D4, 48290 }, { 0x13D6, 48293 }, { 0x13D8, 48296 }, { 0x13E9, 48299 }, { 0x13EA, 48302 }, { 0x13EB, 48305 }, { 0x13EC, 48308 }, { 0x13ED, 48311 }, { 0x13EE, 48314 }, { 0x13EF, 48317 }, { 0x13F0, 48320 }, { 0x13F1, 48323 }, { 0x13F2, 48326 }, { 0x13F3, 48329 }, { 0x13F4, 48332 }, { 0x13DC, 48335 }, { 0x13BF, 48338 }, { 0x13C0, 48341 }, { 0x13C6, 48344 }, { 0x13C7, 48347 }, { 0x13C8, 48350 }, { 0x13C9, 48353 }, { 0x13CA, 48356 }, { 0x13CB, 48359 }, { 0x13DD, 48362 }, { 0x13DE, 48365 }, { 0x13DF, 48368 }, { 0x13E0, 48371 }, { 0x13E1, 48374 }, { 0x13E2, 48377 }, { 0x13E3, 48380 }, { 0x13E4, 48383 }, { 0x13E5, 48386 }, { 0x13E6, 48389 }, { 0x13E7, 48392 }, { 0x13E8, 48395 }, { 0x220B, 48398 }, { 0x22B3, 48401 }, { 0x22B5, 48405 }, { 0x22FA, 48412 }, { 0x22FD, 48417 }, { 0x22FB, 48420 }, { 0x9369, 48429 }, { 0x936E, 48434 }, { 0x936A, 48439 }, { 0x936D, 48444 }, { 0x936C, 48449 }, { 0x9371, 48454 }, { 0x9370, 48459 }, { 0x936F, 48464 }, { 0x936B, 48469 }, { 0x9360, 48474 }, { 0x9365, 48479 }, { 0x9361, 48484 }, { 0x9364, 48489 }, { 0x9363, 48494 }, { 0x9368, 48499 }, { 0x9367, 48504 }, { 0x9366, 48509 }, { 0x9362, 48514 }, { 0x20A2, 48519 }, { 0x00A4, 48521 }, { 0x0430, 48523 }, { 0x04D1, 48527 }, { 0x04D3, 48533 }, { 0x044D, 48539 }, { 0x04ED, 48543 }, { 0x0438, 48549 }, { 0x045D, 48553 }, { 0x04E3, 48559 }, { 0x04E5, 48565 }, { 0x043E, 48571 }, { 0x04E7, 48575 }, { 0x0443, 48581 }, { 0x04F3, 48585 }, { 0x04EF, 48592 }, { 0x04F1, 48598 }, { 0x0431, 48604 }, { 0x0434, 48608 }, { 0x0444, 48612 }, { 0x043B, 48616 }, { 0x0513, 48620 }, { 0x04C6, 48626 }, { 0x0521, 48632 }, { 0x043C, 48639 }, { 0x04CE, 48643 }, { 0x043D, 48649 }, { 0x04C8, 48653 }, { 0x04CA, 48659 }, { 0x0523, 48665 }, { 0x04A3, 48672 }, { 0x0440, 48678 }, { 0x048F, 48682 }, { 0x0441, 48688 }, { 0x04AB, 48692 }, { 0x0445, 48698 }, { 0x04FD, 48702 }, { 0x04FF, 48708 }, { 0x04B3, 48714 }, { 0x0435, 48720 }, { 0x04D7, 48724 }, { 0x0450, 48730 }, { 0x0451, 48736 }, { 0x0458, 48740 }, { 0x043A, 48744 }, { 0x04C4, 48748 }, { 0x049F, 48754 }, { 0x049D, 48760 }, { 0x049B, 48767 }, { 0x047F, 48773 }, { 0x043F, 48777 }, { 0x04A7, 48781 }, { 0x051B, 48788 }, { 0x0442, 48792 }, { 0x568B, 48796 }, { 0x04AD, 48803 }, { 0x0479, 48809 }, { 0x0432, 48813 }, { 0x051D, 48817 }, { 0x044F, 48821 }, { 0x0457, 48825 }, { 0x565F, 48829 }, { 0x044E, 48833 }, { 0x0437, 48837 }, { 0x0499, 48841 }, { 0x04DF, 48847 }, { 0x046B, 48853 }, { 0x0447, 48858 }, { 0x04B9, 48862 }, { 0x04B7, 48869 }, { 0x04F5, 48875 }, { 0x0452, 48881 }, { 0x5681, 48885 }, { 0x0455, 48889 }, { 0x0433, 48893 }, { 0x0495, 48897 }, { 0x0493, 48904 }, { 0x04FB, 48910 }, { 0x0491, 48918 }, { 0x04F7, 48924 }, { 0x0453, 48930 }, { 0x5695, 48934 }, { 0x045C, 48938 }, { 0x046F, 48942 }, { 0x0515, 48946 }, { 0x0459, 48950 }, { 0x045A, 48954 }, { 0x0471, 48958 }, { 0x0517, 48962 }, { 0x0448, 48966 }, { 0x0446, 48970 }, { 0x568D, 48974 }, { 0x0519, 48978 }, { 0x0463, 48982 }, { 0x0436, 48986 }, { 0x04C2, 48990 }, { 0x0497, 48996 }, { 0x04DD, 49002 }, { 0x5687, 49008 }, { 0x045F, 49012 }, { 0x5683, 49016 }, { 0x5689, 49020 }, { 0x0473, 49024 }, { 0x044A, 49028 }, { 0x5647, 49033 }, { 0x0501, 49037 }, { 0x0503, 49042 }, { 0x0509, 49047 }, { 0x050B, 49052 }, { 0x050D, 49057 }, { 0x050F, 49062 }, { 0x0505, 49067 }, { 0x0507, 49072 }, { 0x04BB, 49077 }, { 0x5697, 49081 }, { 0x5663, 49085 }, { 0x5665, 49090 }, { 0x5667, 49095 }, { 0x044C, 49100 }, { 0x5693, 49105 }, { 0x045B, 49109 }, { 0x5691, 49113 }, { 0x568F, 49117 }, { 0x044B, 49121 }, { 0x5651, 49125 }, { 0x04F9, 49132 }, { 0x5685, 49138 }, { 0x051F, 49142 }, { 0x564D, 49147 }, { 0x5649, 49152 }, { 0x5643, 49156 }, { 0x0481, 49160 }, { 0x0461, 49164 }, { 0x047D, 49168 }, { 0x047B, 49174 }, { 0x04D9, 49179 }, { 0x04DB, 49183 }, { 0x0449, 49189 }, { 0x0439, 49193 }, { 0x048B, 49198 }, { 0x045E, 49205 }, { 0x04E9, 49210 }, { 0x04EB, 49215 }, { 0x5659, 49222 }, { 0x566D, 49228 }, { 0x0467, 49234 }, { 0x5641, 49239 }, { 0x04A1, 49243 }, { 0x565B, 49248 }, { 0x0475, 49253 }, { 0x0477, 49257 }, { 0x564F, 49265 }, { 0x5657, 49270 }, { 0x0465, 49275 }, { 0x046D, 49280 }, { 0x5653, 49286 }, { 0x565D, 49291 }, { 0x0469, 49298 }, { 0x04CF, 49304 }, { 0x5655, 49308 }, { 0x0511, 49313 }, { 0x5645, 49318 }, { 0x048D, 49323 }, { 0x04AF, 49328 }, { 0x04B1, 49333 }, { 0x04A9, 49340 }, { 0x04BD, 49345 }, { 0x04BF, 49350 }, { 0x04E1, 49357 }, { 0x566B, 49362 }, { 0x5669, 49367 }, { 0x564B, 49372 }, { 0x0454, 49377 }, { 0x04CC, 49382 }, { 0x0456, 49387 }, { 0x04D5, 49392 }, { 0x04A5, 49397 }, { 0x04B5, 49402 }, { 0x567E, 49407 }, { 0x1D2B, 49409 }, { 0x04C0, 49414 }, { 0x566E, 49417 }, { 0x0410, 49421 }, { 0x04D0, 49425 }, { 0x04D2, 49431 }, { 0x042D, 49437 }, { 0x04EC, 49441 }, { 0x0418, 49447 }, { 0x040D, 49451 }, { 0x04E2, 49457 }, { 0x04E4, 49463 }, { 0x041E, 49469 }, { 0x04E6, 49473 }, { 0x0423, 49479 }, { 0x04F2, 49483 }, { 0x04EE, 49490 }, { 0x04F0, 49496 }, { 0x0411, 49502 }, { 0x0414, 49506 }, { 0x0424, 49510 }, { 0x041B, 49514 }, { 0x0512, 49518 }, { 0x04C5, 49524 }, { 0x0520, 49530 }, { 0x041C, 49537 }, { 0x04CD, 49541 }, { 0x041D, 49547 }, { 0x04C7, 49551 }, { 0x04C9, 49557 }, { 0x0522, 49563 }, { 0x04A2, 49570 }, { 0x0420, 49576 }, { 0x048E, 49580 }, { 0x0421, 49586 }, { 0x04AA, 49590 }, { 0x0425, 49596 }, { 0x04FC, 49600 }, { 0x04FE, 49606 }, { 0x04B2, 49612 }, { 0x0415, 49618 }, { 0x04D6, 49622 }, { 0x0400, 49628 }, { 0x0401, 49634 }, { 0x0408, 49638 }, { 0x041A, 49642 }, { 0x04C3, 49646 }, { 0x049E, 49652 }, { 0x049C, 49658 }, { 0x049A, 49665 }, { 0x047E, 49671 }, { 0x041F, 49675 }, { 0x04A6, 49679 }, { 0x051A, 49686 }, { 0x0422, 49690 }, { 0x568A, 49694 }, { 0x04AC, 49701 }, { 0x0478, 49707 }, { 0x0412, 49711 }, { 0x051C, 49715 }, { 0x042F, 49719 }, { 0x0407, 49723 }, { 0x565E, 49727 }, { 0x042E, 49731 }, { 0x0417, 49735 }, { 0x0498, 49739 }, { 0x04DE, 49745 }, { 0x046A, 49751 }, { 0x0427, 49756 }, { 0x04B8, 49760 }, { 0x04B6, 49767 }, { 0x04F4, 49773 }, { 0x0402, 49779 }, { 0x5680, 49783 }, { 0x0405, 49787 }, { 0x0413, 49791 }, { 0x0494, 49795 }, { 0x0492, 49802 }, { 0x04FA, 49808 }, { 0x0490, 49816 }, { 0x04F6, 49822 }, { 0x0403, 49828 }, { 0x5694, 49832 }, { 0x040C, 49836 }, { 0x046E, 49840 }, { 0x0514, 49844 }, { 0x0409, 49848 }, { 0x040A, 49852 }, { 0x0470, 49856 }, { 0x0516, 49860 }, { 0x0428, 49864 }, { 0x0426, 49868 }, { 0x568C, 49872 }, { 0x0518, 49876 }, { 0x0462, 49880 }, { 0x0416, 49884 }, { 0x04C1, 49888 }, { 0x0496, 49894 }, { 0x04DC, 49900 }, { 0x5686, 49906 }, { 0x040F, 49910 }, { 0x5682, 49914 }, { 0x5688, 49918 }, { 0x0472, 49922 }, { 0x042A, 49926 }, { 0x5646, 49931 }, { 0x0500, 49935 }, { 0x0502, 49940 }, { 0x0508, 49945 }, { 0x050A, 49950 }, { 0x050C, 49955 }, { 0x050E, 49960 }, { 0x0504, 49965 }, { 0x0506, 49970 }, { 0x04BA, 49975 }, { 0x5696, 49979 }, { 0x5662, 49983 }, { 0x5664, 49988 }, { 0x5666, 49993 }, { 0x042C, 49998 }, { 0x5692, 50003 }, { 0x040B, 50007 }, { 0x5690, 50011 }, { 0x568E, 50015 }, { 0x042B, 50019 }, { 0x5650, 50023 }, { 0x04F8, 50030 }, { 0x5684, 50036 }, { 0x051E, 50040 }, { 0x564C, 50045 }, { 0x5648, 50050 }, { 0x5642, 50054 }, { 0x0480, 50058 }, { 0x0460, 50062 }, { 0x047C, 50066 }, { 0x047A, 50072 }, { 0x04D8, 50077 }, { 0x04DA, 50081 }, { 0x0429, 50087 }, { 0x0419, 50091 }, { 0x048A, 50096 }, { 0x040E, 50103 }, { 0x04E8, 50108 }, { 0x04EA, 50113 }, { 0x5658, 50120 }, { 0x566C, 50126 }, { 0x0466, 50132 }, { 0x5640, 50137 }, { 0x04A0, 50141 }, { 0x565A, 50146 }, { 0x0474, 50151 }, { 0x0476, 50155 }, { 0x564E, 50163 }, { 0x5656, 50168 }, { 0x0464, 50173 }, { 0x046C, 50178 }, { 0x5652, 50184 }, { 0x565C, 50189 }, { 0x0468, 50196 }, { 0x5654, 50202 }, { 0x0510, 50207 }, { 0x5644, 50212 }, { 0x048C, 50217 }, { 0x04AE, 50222 }, { 0x04B0, 50227 }, { 0x04A8, 50234 }, { 0x04BC, 50239 }, { 0x04BE, 50244 }, { 0x04E0, 50251 }, { 0x566A, 50256 }, { 0x5668, 50261 }, { 0x564A, 50266 }, { 0x0404, 50271 }, { 0x04CB, 50276 }, { 0x0406, 50281 }, { 0x04D4, 50286 }, { 0x04A4, 50291 }, { 0x04B4, 50296 }, { 0x567F, 50301 }, { 0x0482, 50303 }, { 0x2300, 50306 }, { 0x00F7, 50308 }, { 0x2215, 50310 }, { 0x22C7, 50312 }, { 0x279B, 50314 }, { 0x2301, 50318 }, { 0x2383, 50320 }, { 0x2709, 50322 }, { 0x1362, 50323 }, { 0x1365, 50326 }, { 0x1363, 50328 }, { 0x1369, 50330 }, { 0x136E, 50333 }, { 0x136A, 50336 }, { 0x136D, 50339 }, { 0x136C, 50342 }, { 0x1371, 50345 }, { 0x1370, 50348 }, { 0x136F, 50351 }, { 0x136B, 50354 }, { 0x1399, 50357 }, { 0x1391, 50361 }, { 0x1394, 50365 }, { 0x1397, 50369 }, { 0x1395, 50373 }, { 0x1393, 50377 }, { 0x1390, 50382 }, { 0x1396, 50386 }, { 0x1392, 50390 }, { 0x1398, 50394 }, { 0x1372, 50398 }, { 0x137C, 50401 }, { 0x1376, 50405 }, { 0x1375, 50408 }, { 0x1377, 50411 }, { 0x1379, 50414 }, { 0x137A, 50417 }, { 0x1374, 50420 }, { 0x1373, 50423 }, { 0x137B, 50426 }, { 0x1378, 50429 }, { 0x1366, 50432 }, { 0x1360, 50435 }, { 0x1367, 50438 }, { 0x1260, 50441 }, { 0x1265, 50444 }, { 0x1262, 50447 }, { 0x1266, 50450 }, { 0x1261, 50453 }, { 0x1278, 50456 }, { 0x127D, 50459 }, { 0x127A, 50462 }, { 0x127E, 50465 }, { 0x1279, 50468 }, { 0x12F0, 50471 }, { 0x12F5, 50474 }, { 0x12F2, 50477 }, { 0x12F6, 50480 }, { 0x12F1, 50483 }, { 0x1348, 50486 }, { 0x134D, 50489 }, { 0x134A, 50492 }, { 0x134E, 50495 }, { 0x1349, 50498 }, { 0x1308, 50501 }, { 0x130D, 50504 }, { 0x130A, 50507 }, { 0x130E, 50510 }, { 0x1309, 50513 }, { 0x1200, 50516 }, { 0x1205, 50519 }, { 0x1202, 50522 }, { 0x1206, 50525 }, { 0x1201, 50528 }, { 0x1300, 50531 }, { 0x1305, 50534 }, { 0x1302, 50537 }, { 0x1306, 50540 }, { 0x1301, 50543 }, { 0x12A8, 50546 }, { 0x12AD, 50549 }, { 0x12AA, 50552 }, { 0x12AE, 50555 }, { 0x12A9, 50558 }, { 0x1208, 50561 }, { 0x120D, 50564 }, { 0x120A, 50567 }, { 0x120E, 50570 }, { 0x1209, 50573 }, { 0x1218, 50576 }, { 0x121D, 50579 }, { 0x121A, 50582 }, { 0x121E, 50585 }, { 0x1219, 50588 }, { 0x1290, 50591 }, { 0x1295, 50594 }, { 0x1292, 50597 }, { 0x1296, 50600 }, { 0x1291, 50603 }, { 0x1350, 50606 }, { 0x1355, 50609 }, { 0x1352, 50612 }, { 0x1356, 50615 }, { 0x1351, 50618 }, { 0x1240, 50621 }, { 0x1245, 50624 }, { 0x1242, 50627 }, { 0x1246, 50630 }, { 0x1241, 50633 }, { 0x1228, 50636 }, { 0x122D, 50639 }, { 0x122A, 50642 }, { 0x122E, 50645 }, { 0x1229, 50648 }, { 0x1230, 50651 }, { 0x1235, 50654 }, { 0x1232, 50657 }, { 0x1236, 50660 }, { 0x1231, 50663 }, { 0x1270, 50666 }, { 0x1275, 50669 }, { 0x1272, 50672 }, { 0x1276, 50675 }, { 0x1271, 50678 }, { 0x1268, 50681 }, { 0x126D, 50684 }, { 0x126A, 50687 }, { 0x126E, 50690 }, { 0x1269, 50693 }, { 0x12C8, 50696 }, { 0x12CD, 50699 }, { 0x12CA, 50702 }, { 0x12CE, 50705 }, { 0x12C9, 50708 }, { 0x1280, 50711 }, { 0x1285, 50714 }, { 0x1282, 50717 }, { 0x1286, 50720 }, { 0x1281, 50723 }, { 0x12E8, 50726 }, { 0x12ED, 50729 }, { 0x12EA, 50732 }, { 0x12EE, 50735 }, { 0x12E9, 50738 }, { 0x12D8, 50741 }, { 0x12DD, 50744 }, { 0x12DA, 50747 }, { 0x12DE, 50750 }, { 0x12D9, 50753 }, { 0x1263, 50756 }, { 0x1264, 50759 }, { 0x2D85, 50762 }, { 0x1267, 50765 }, { 0x1387, 50768 }, { 0x1385, 50771 }, { 0x127B, 50774 }, { 0x2DA8, 50777 }, { 0x2DAD, 50780 }, { 0x2DAA, 50783 }, { 0x2DAE, 50786 }, { 0x2DA9, 50789 }, { 0x127C, 50792 }, { 0x1328, 50795 }, { 0x132D, 50798 }, { 0x132A, 50801 }, { 0x132E, 50804 }, { 0x1329, 50807 }, { 0x2D87, 50810 }, { 0x127F, 50813 }, { 0x12F3, 50816 }, { 0x12F8, 50819 }, { 0x12FD, 50822 }, { 0x12FA, 50825 }, { 0x12FE, 50828 }, { 0x12F9, 50831 }, { 0x12F4, 50834 }, { 0x2D8C, 50837 }, { 0x12F7, 50840 }, { 0x134B, 50843 }, { 0x134C, 50846 }, { 0x134F, 50849 }, { 0x138B, 50852 }, { 0x1389, 50855 }, { 0x135A, 50858 }, { 0x130B, 50861 }, { 0x130C, 50864 }, { 0x1318, 50867 }, { 0x131D, 50870 }, { 0x131A, 50873 }, { 0x131E, 50876 }, { 0x1319, 50879 }, { 0x130F, 50882 }, { 0x1310, 50885 }, { 0x1315, 50888 }, { 0x1312, 50891 }, { 0x2DD8, 50894 }, { 0x2DDD, 50897 }, { 0x2DDA, 50900 }, { 0x2DDE, 50903 }, { 0x2DD9, 50906 }, { 0x1203, 50909 }, { 0x1204, 50912 }, { 0x1210, 50915 }, { 0x1215, 50918 }, { 0x1212, 50921 }, { 0x1216, 50924 }, { 0x1211, 50927 }, { 0x1207, 50930 }, { 0x1303, 50933 }, { 0x1304, 50936 }, { 0x2D8E, 50939 }, { 0x1307, 50942 }, { 0x12AB, 50945 }, { 0x12AC, 50948 }, { 0x12AF, 50951 }, { 0x12B0, 50954 }, { 0x12B5, 50957 }, { 0x12B2, 50960 }, { 0x12B8, 50963 }, { 0x12BD, 50966 }, { 0x12BA, 50969 }, { 0x12BE, 50972 }, { 0x12B9, 50975 }, { 0x2DC8, 50978 }, { 0x2DCD, 50981 }, { 0x2DCA, 50984 }, { 0x2DCE, 50987 }, { 0x2DC9, 50990 }, { 0x120B, 50993 }, { 0x120C, 50996 }, { 0x2D80, 50999 }, { 0x120F, 51002 }, { 0x121B, 51005 }, { 0x121C, 51008 }, { 0x2D81, 51011 }, { 0x121F, 51014 }, { 0x1383, 51017 }, { 0x1381, 51020 }, { 0x1359, 51023 }, { 0x1293, 51026 }, { 0x1294, 51029 }, { 0x2D88, 51032 }, { 0x1297, 51035 }, { 0x1298, 51038 }, { 0x129D, 51041 }, { 0x129A, 51044 }, { 0x129E, 51047 }, { 0x1299, 51050 }, { 0x1353, 51053 }, { 0x1354, 51056 }, { 0x1330, 51059 }, { 0x1335, 51062 }, { 0x1332, 51065 }, { 0x1336, 51068 }, { 0x1331, 51071 }, { 0x2D92, 51074 }, { 0x1357, 51077 }, { 0x138F, 51080 }, { 0x138D, 51083 }, { 0x1243, 51086 }, { 0x1244, 51089 }, { 0x1250, 51092 }, { 0x1255, 51095 }, { 0x1252, 51098 }, { 0x1256, 51101 }, { 0x1251, 51104 }, { 0x1247, 51107 }, { 0x1248, 51110 }, { 0x124D, 51113 }, { 0x124A, 51116 }, { 0x2DC0, 51119 }, { 0x2DC5, 51122 }, { 0x2DC2, 51125 }, { 0x2DC6, 51128 }, { 0x2DC1, 51131 }, { 0x122B, 51134 }, { 0x122C, 51137 }, { 0x2D82, 51140 }, { 0x122F, 51143 }, { 0x1358, 51146 }, { 0x1233, 51149 }, { 0x1234, 51152 }, { 0x1238, 51155 }, { 0x123D, 51158 }, { 0x123A, 51161 }, { 0x123E, 51164 }, { 0x1239, 51167 }, { 0x2D83, 51170 }, { 0x2DA0, 51173 }, { 0x2DA5, 51176 }, { 0x2DA2, 51179 }, { 0x2DA6, 51182 }, { 0x2DA1, 51185 }, { 0x1237, 51188 }, { 0x1220, 51191 }, { 0x1225, 51194 }, { 0x1222, 51197 }, { 0x1226, 51200 }, { 0x1221, 51203 }, { 0x1273, 51206 }, { 0x1274, 51209 }, { 0x1320, 51212 }, { 0x1325, 51215 }, { 0x1322, 51218 }, { 0x1326, 51221 }, { 0x1321, 51224 }, { 0x2D86, 51227 }, { 0x1338, 51230 }, { 0x133D, 51233 }, { 0x133A, 51236 }, { 0x133E, 51239 }, { 0x1339, 51242 }, { 0x1277, 51245 }, { 0x1340, 51248 }, { 0x1345, 51251 }, { 0x1342, 51254 }, { 0x1346, 51257 }, { 0x1341, 51260 }, { 0x126B, 51263 }, { 0x126C, 51266 }, { 0x126F, 51269 }, { 0x12CB, 51272 }, { 0x12CC, 51275 }, { 0x12CF, 51278 }, { 0x1283, 51281 }, { 0x1284, 51284 }, { 0x1287, 51287 }, { 0x1288, 51290 }, { 0x128D, 51293 }, { 0x128A, 51296 }, { 0x2DD0, 51299 }, { 0x2DD5, 51302 }, { 0x2DD2, 51305 }, { 0x2DD6, 51308 }, { 0x2DD1, 51311 }, { 0x12EB, 51314 }, { 0x12EC, 51317 }, { 0x12EF, 51320 }, { 0x12DB, 51323 }, { 0x12DC, 51326 }, { 0x12E0, 51329 }, { 0x12E5, 51332 }, { 0x12E2, 51335 }, { 0x12E6, 51338 }, { 0x12E1, 51341 }, { 0x2D8B, 51344 }, { 0x12DF, 51347 }, { 0x2DB0, 51350 }, { 0x2DB5, 51353 }, { 0x2DB2, 51356 }, { 0x2DB6, 51359 }, { 0x2DB1, 51362 }, { 0x1386, 51365 }, { 0x2DAB, 51368 }, { 0x2DAC, 51371 }, { 0x2DB8, 51374 }, { 0x2DBD, 51377 }, { 0x2DBA, 51380 }, { 0x2DBE, 51383 }, { 0x2DB9, 51386 }, { 0x132B, 51389 }, { 0x132C, 51392 }, { 0x2D90, 51395 }, { 0x132F, 51398 }, { 0x12FB, 51401 }, { 0x12FC, 51404 }, { 0x2D8D, 51407 }, { 0x12FF, 51410 }, { 0x138A, 51413 }, { 0x131B, 51416 }, { 0x131C, 51419 }, { 0x2D93, 51422 }, { 0x2D96, 51425 }, { 0x2D94, 51428 }, { 0x1313, 51431 }, { 0x1314, 51434 }, { 0x2DDB, 51437 }, { 0x2DDC, 51440 }, { 0x1213, 51443 }, { 0x1214, 51446 }, { 0x1217, 51449 }, { 0x12B3, 51452 }, { 0x12B4, 51455 }, { 0x12BB, 51458 }, { 0x12BC, 51461 }, { 0x12C0, 51464 }, { 0x12C5, 51467 }, { 0x12C2, 51470 }, { 0x2DCB, 51473 }, { 0x2DCC, 51476 }, { 0x1382, 51479 }, { 0x129B, 51482 }, { 0x129C, 51485 }, { 0x2D89, 51488 }, { 0x129F, 51491 }, { 0x1333, 51494 }, { 0x1334, 51497 }, { 0x2D91, 51500 }, { 0x1337, 51503 }, { 0x138E, 51506 }, { 0x1253, 51509 }, { 0x1254, 51512 }, { 0x1258, 51515 }, { 0x125D, 51518 }, { 0x125A, 51521 }, { 0x124B, 51524 }, { 0x124C, 51527 }, { 0x2DC3, 51530 }, { 0x2DC4, 51533 }, { 0x123B, 51536 }, { 0x123C, 51539 }, { 0x2D84, 51542 }, { 0x123F, 51545 }, { 0x2DA3, 51548 }, { 0x2DA4, 51551 }, { 0x1223, 51554 }, { 0x1224, 51557 }, { 0x1227, 51560 }, { 0x1323, 51563 }, { 0x1324, 51566 }, { 0x2D8F, 51569 }, { 0x1327, 51572 }, { 0x133B, 51575 }, { 0x133C, 51578 }, { 0x133F, 51581 }, { 0x1343, 51584 }, { 0x1344, 51587 }, { 0x1347, 51590 }, { 0x128B, 51593 }, { 0x128C, 51596 }, { 0x2DD3, 51599 }, { 0x2DD4, 51602 }, { 0x12E3, 51605 }, { 0x12E4, 51608 }, { 0x12E7, 51611 }, { 0x2DB3, 51614 }, { 0x2DB4, 51617 }, { 0x2DBB, 51620 }, { 0x2DBC, 51623 }, { 0x131F, 51626 }, { 0x2D95, 51629 }, { 0x12C3, 51632 }, { 0x12C4, 51635 }, { 0x125B, 51638 }, { 0x125C, 51641 }, { 0x12A0, 51644 }, { 0x12A5, 51648 }, { 0x12A2, 51652 }, { 0x12A6, 51656 }, { 0x12A1, 51660 }, { 0x12A3, 51664 }, { 0x12A4, 51668 }, { 0x2D8A, 51672 }, { 0x12A7, 51676 }, { 0x1384, 51680 }, { 0x1388, 51684 }, { 0x1380, 51688 }, { 0x138C, 51692 }, { 0x12D0, 51696 }, { 0x12D5, 51700 }, { 0x12D2, 51704 }, { 0x12D6, 51708 }, { 0x12D1, 51712 }, { 0x12D3, 51716 }, { 0x12D4, 51720 }, { 0x135F, 51724 }, { 0x1368, 51728 }, { 0x1364, 51731 }, { 0x1361, 51733 }, { 0x06F1, 51735 }, { 0x06F6, 51739 }, { 0x06F2, 51743 }, { 0x06F5, 51747 }, { 0x06F4, 51751 }, { 0x06F9, 51755 }, { 0x06F0, 51759 }, { 0x06F8, 51763 }, { 0x06F7, 51767 }, { 0x06F3, 51771 }, { 0x00AA, 51775 }, { 0x23E5, 51778 }, { 0x2044, 51779 }, { 0x215F, 51781 }, { 0x2061, 51784 }, { 0x2D00, 51786 }, { 0x2D04, 51790 }, { 0x2D21, 51794 }, { 0x2D08, 51798 }, { 0x2D0D, 51802 }, { 0x2D13, 51806 }, { 0x2D23, 51810 }, { 0x2D01, 51814 }, { 0x2D1A, 51818 }, { 0x2D1C, 51822 }, { 0x2D03, 51826 }, { 0x2D02, 51830 }, { 0x2D20, 51834 }, { 0x2D24, 51838 }, { 0x2D22, 51842 }, { 0x2D25, 51846 }, { 0x2D1B, 51850 }, { 0x2D09, 51854 }, { 0x2D0A, 51858 }, { 0x2D0B, 51862 }, { 0x2D0C, 51866 }, { 0x2D0E, 51870 }, { 0x2D17, 51874 }, { 0x2D10, 51878 }, { 0x2D11, 51882 }, { 0x2D07, 51886 }, { 0x2D12, 51890 }, { 0x2D05, 51894 }, { 0x2D1E, 51898 }, { 0x2D06, 51902 }, { 0x2D1D, 51906 }, { 0x2D19, 51910 }, { 0x2D16, 51914 }, { 0x2D1F, 51918 }, { 0x2D15, 51922 }, { 0x2D14, 51926 }, { 0x2D18, 51930 }, { 0x2D0F, 51934 }, { 0x10D0, 51938 }, { 0x10D4, 51941 }, { 0x10F6, 51944 }, { 0x10F1, 51947 }, { 0x10D8, 51950 }, { 0x10DD, 51953 }, { 0x10E3, 51956 }, { 0x10F3, 51959 }, { 0x10F7, 51962 }, { 0x10FA, 51965 }, { 0x10D1, 51968 }, { 0x10EA, 51971 }, { 0x10EC, 51974 }, { 0x10D3, 51977 }, { 0x10D2, 51980 }, { 0x10F0, 51983 }, { 0x10F4, 51986 }, { 0x10F2, 51989 }, { 0x10F5, 51992 }, { 0x10EB, 51995 }, { 0x10D9, 51998 }, { 0x10DA, 52001 }, { 0x10DB, 52004 }, { 0x10DC, 52007 }, { 0x10DE, 52010 }, { 0x10E7, 52013 }, { 0x10E0, 52016 }, { 0x10E1, 52019 }, { 0x10D7, 52022 }, { 0x10E2, 52025 }, { 0x10D5, 52028 }, { 0x10EE, 52031 }, { 0x10D6, 52034 }, { 0x10ED, 52037 }, { 0x10E9, 52040 }, { 0x10E6, 52043 }, { 0x10EF, 52046 }, { 0x10E5, 52049 }, { 0x10E4, 52052 }, { 0x10E8, 52055 }, { 0x10DF, 52058 }, { 0x10F8, 52061 }, { 0x10F9, 52064 }, { 0x10A0, 52068 }, { 0x10A4, 52072 }, { 0x10C1, 52076 }, { 0x10A8, 52080 }, { 0x10AD, 52084 }, { 0x10B3, 52088 }, { 0x10C3, 52092 }, { 0x10A1, 52096 }, { 0x10BA, 52100 }, { 0x10BC, 52104 }, { 0x10A3, 52108 }, { 0x10A2, 52112 }, { 0x10C0, 52116 }, { 0x10C4, 52120 }, { 0x10C2, 52124 }, { 0x10C5, 52128 }, { 0x10BB, 52132 }, { 0x10A9, 52136 }, { 0x10AA, 52140 }, { 0x10AB, 52144 }, { 0x10AC, 52148 }, { 0x10AE, 52152 }, { 0x10B7, 52156 }, { 0x10B0, 52160 }, { 0x10B1, 52164 }, { 0x10A7, 52168 }, { 0x10B2, 52172 }, { 0x10A5, 52176 }, { 0x10BE, 52180 }, { 0x10A6, 52184 }, { 0x10BD, 52188 }, { 0x10B9, 52192 }, { 0x10B6, 52196 }, { 0x10BF, 52200 }, { 0x10B5, 52204 }, { 0x10B4, 52208 }, { 0x10B8, 52212 }, { 0x10AF, 52216 }, { 0x10FB, 52220 }, { 0x0AD0, 52223 }, { 0x0ABC, 52225 }, { 0x0ACD, 52228 }, { 0x0A83, 52231 }, { 0x0A82, 52234 }, { 0x0ABD, 52237 }, { 0x0A81, 52240 }, { 0x0AE7, 52243 }, { 0x0AEC, 52246 }, { 0x0AE8, 52249 }, { 0x0AEB, 52252 }, { 0x0AEA, 52255 }, { 0x0AEF, 52258 }, { 0x0AE6, 52261 }, { 0x0AEE, 52264 }, { 0x0AED, 52267 }, { 0x0AE9, 52270 }, { 0x0AF1, 52273 }, { 0x0AC7, 52276 }, { 0x0ABF, 52280 }, { 0x0ACB, 52284 }, { 0x0AC1, 52288 }, { 0x0ABE, 52292 }, { 0x0AC8, 52296 }, { 0x0ACC, 52300 }, { 0x0AC0, 52304 }, { 0x0AC2, 52308 }, { 0x0AC5, 52312 }, { 0x0AC9, 52317 }, { 0x0AE2, 52322 }, { 0x0AC3, 52327 }, { 0x0AE3, 52332 }, { 0x0AC4, 52337 }, { 0x0A8D, 52342 }, { 0x0A91, 52346 }, { 0x0A85, 52350 }, { 0x0A8F, 52353 }, { 0x0A87, 52356 }, { 0x0A93, 52359 }, { 0x0A89, 52362 }, { 0x0A86, 52365 }, { 0x0A90, 52368 }, { 0x0A94, 52371 }, { 0x0AAC, 52374 }, { 0x0A9A, 52377 }, { 0x0AA6, 52380 }, { 0x0A97, 52383 }, { 0x0AB9, 52386 }, { 0x0A88, 52389 }, { 0x0A9C, 52392 }, { 0x0A95, 52395 }, { 0x0AB2, 52398 }, { 0x0AAE, 52401 }, { 0x0AA8, 52404 }, { 0x0AAA, 52407 }, { 0x0AB0, 52410 }, { 0x0AB8, 52413 }, { 0x0AA4, 52416 }, { 0x0A8A, 52419 }, { 0x0AB5, 52422 }, { 0x0AAF, 52425 }, { 0x0AAD, 52428 }, { 0x0A9B, 52431 }, { 0x0AA1, 52434 }, { 0x0AA7, 52437 }, { 0x0A98, 52440 }, { 0x0A9D, 52443 }, { 0x0A96, 52446 }, { 0x0AB3, 52449 }, { 0x0A99, 52452 }, { 0x0AA3, 52455 }, { 0x0A9E, 52458 }, { 0x0AAB, 52461 }, { 0x0AB6, 52464 }, { 0x0AB7, 52467 }, { 0x0AA5, 52470 }, { 0x0A9F, 52473 }, { 0x0AA2, 52476 }, { 0x0AA0, 52479 }, { 0x0A8C, 52482 }, { 0x0A8B, 52486 }, { 0x0AE1, 52490 }, { 0x0AE0, 52494 }, { 0x0A74, 52498 }, { 0x0A72, 52501 }, { 0x0A73, 52503 }, { 0x0A01, 52505 }, { 0x0A02, 52509 }, { 0x0A3C, 52512 }, { 0x0A51, 52515 }, { 0x0A4D, 52518 }, { 0x0A75, 52521 }, { 0x0A03, 52524 }, { 0x0A71, 52527 }, { 0x0A67, 52529 }, { 0x0A6C, 52532 }, { 0x0A68, 52535 }, { 0x0A6B, 52538 }, { 0x0A6A, 52541 }, { 0x0A6F, 52544 }, { 0x0A66, 52547 }, { 0x0A6E, 52550 }, { 0x0A6D, 52553 }, { 0x0A69, 52556 }, { 0x0A70, 52559 }, { 0x0A3F, 52561 }, { 0x0A41, 52565 }, { 0x0A3E, 52569 }, { 0x0A48, 52573 }, { 0x0A4C, 52577 }, { 0x0A47, 52581 }, { 0x0A40, 52585 }, { 0x0A4B, 52589 }, { 0x0A42, 52593 }, { 0x0A05, 52597 }, { 0x0A07, 52600 }, { 0x0A09, 52603 }, { 0x0A06, 52606 }, { 0x0A10, 52609 }, { 0x0A14, 52612 }, { 0x0A2C, 52615 }, { 0x0A1A, 52618 }, { 0x0A26, 52621 }, { 0x0A0F, 52624 }, { 0x0A5E, 52627 }, { 0x0A17, 52630 }, { 0x0A39, 52633 }, { 0x0A08, 52636 }, { 0x0A1C, 52639 }, { 0x0A15, 52642 }, { 0x0A32, 52645 }, { 0x0A2E, 52648 }, { 0x0A28, 52651 }, { 0x0A13, 52654 }, { 0x0A2A, 52657 }, { 0x0A30, 52660 }, { 0x0A38, 52663 }, { 0x0A24, 52666 }, { 0x0A0A, 52669 }, { 0x0A35, 52672 }, { 0x0A2F, 52675 }, { 0x0A5B, 52678 }, { 0x0A2D, 52681 }, { 0x0A1B, 52684 }, { 0x0A21, 52687 }, { 0x0A27, 52690 }, { 0x0A18, 52693 }, { 0x0A1D, 52696 }, { 0x0A16, 52699 }, { 0x0A33, 52702 }, { 0x0A19, 52705 }, { 0x0A23, 52708 }, { 0x0A1E, 52711 }, { 0x0A2B, 52714 }, { 0x0A5C, 52717 }, { 0x0A36, 52720 }, { 0x0A25, 52723 }, { 0x0A1F, 52726 }, { 0x0A22, 52729 }, { 0x0A5A, 52732 }, { 0x0A59, 52735 }, { 0x0A20, 52738 }, { 0x3021, 52741 }, { 0x3026, 52744 }, { 0x3038, 52747 }, { 0x3022, 52750 }, { 0x3025, 52753 }, { 0x3024, 52756 }, { 0x3029, 52759 }, { 0x3028, 52762 }, { 0x3027, 52765 }, { 0x3023, 52768 }, { 0x303A, 52771 }, { 0x3039, 52774 }, { 0x4DC6, 52777 }, { 0x4DEF, 52781 }, { 0x4DE4, 52785 }, { 0x4DF8, 52789 }, { 0x4DF9, 52794 }, { 0x4DDC, 52799 }, { 0x4DF3, 52804 }, { 0x4DF2, 52810 }, { 0x4DF1, 52815 }, { 0x4DDD, 52819 }, { 0x4DC0, 52824 }, { 0x4DF5, 52829 }, { 0x4DF7, 52834 }, { 0x4DC1, 52838 }, { 0x4DD1, 52843 }, { 0x4DFE, 52849 }, { 0x4DD5, 52853 }, { 0x4DE1, 52856 }, { 0x4DD9, 52860 }, { 0x4DCD, 52864 }, { 0x4DDB, 52868 }, { 0x4DFC, 52872 }, { 0x4DDA, 52876 }, { 0x4DCA, 52880 }, { 0x4DC8, 52883 }, { 0x4DFD, 52887 }, { 0x4DFF, 52891 }, { 0x4DD4, 52895 }, { 0x4DEB, 52899 }, { 0x4DD7, 52904 }, { 0x4DC7, 52907 }, { 0x4DCE, 52911 }, { 0x4DED, 52914 }, { 0x4DE0, 52918 }, { 0x4DC4, 52921 }, { 0x4DD2, 52924 }, { 0x4DC5, 52927 }, { 0x4DE8, 52930 }, { 0x4DDF, 52933 }, { 0x4DE9, 52936 }, { 0x4DE2, 52939 }, { 0x4DC9, 52942 }, { 0x4DC3, 52945 }, { 0x4DF6, 52949 }, { 0x4DE3, 52952 }, { 0x4DD0, 52958 }, { 0x4DEC, 52961 }, { 0x4DDE, 52965 }, { 0x4DD8, 52968 }, { 0x4DD6, 52971 }, { 0x4DC2, 52975 }, { 0x4DFA, 52981 }, { 0x4DCF, 52984 }, { 0x4DCC, 52987 }, { 0x4DFB, 52990 }, { 0x4DE5, 52993 }, { 0x4DEE, 52996 }, { 0x4DF0, 52999 }, { 0x4DCB, 53002 }, { 0x4DE7, 53005 }, { 0x4DF4, 53008 }, { 0x4DE6, 53011 }, { 0x4DEA, 53014 }, { 0x4DD3, 53017 }, { 0x3042, 53020 }, { 0x3048, 53023 }, { 0x3044, 53026 }, { 0x3093, 53029 }, { 0x304A, 53032 }, { 0x3046, 53035 }, { 0x3070, 53038 }, { 0x3079, 53041 }, { 0x3073, 53044 }, { 0x307C, 53047 }, { 0x3076, 53050 }, { 0x3060, 53053 }, { 0x3067, 53056 }, { 0x3062, 53059 }, { 0x3069, 53062 }, { 0x3065, 53065 }, { 0x304C, 53068 }, { 0x3052, 53071 }, { 0x304E, 53074 }, { 0x3054, 53077 }, { 0x3050, 53080 }, { 0x306F, 53083 }, { 0x3078, 53086 }, { 0x3072, 53089 }, { 0x307B, 53092 }, { 0x3075, 53095 }, { 0x304B, 53098 }, { 0x3051, 53101 }, { 0x304D, 53104 }, { 0x3053, 53107 }, { 0x304F, 53110 }, { 0x307E, 53113 }, { 0x3081, 53116 }, { 0x307F, 53119 }, { 0x3082, 53122 }, { 0x3080, 53125 }, { 0x306A, 53128 }, { 0x306D, 53131 }, { 0x306B, 53134 }, { 0x306E, 53137 }, { 0x306C, 53140 }, { 0x3071, 53143 }, { 0x307A, 53146 }, { 0x3074, 53149 }, { 0x307D, 53152 }, { 0x3077, 53155 }, { 0x3089, 53158 }, { 0x308C, 53161 }, { 0x308A, 53164 }, { 0x308D, 53167 }, { 0x308B, 53170 }, { 0x3055, 53173 }, { 0x305B, 53176 }, { 0x3057, 53179 }, { 0x305D, 53182 }, { 0x3059, 53185 }, { 0x305F, 53188 }, { 0x3066, 53191 }, { 0x3061, 53194 }, { 0x3068, 53197 }, { 0x3064, 53200 }, { 0x3094, 53203 }, { 0x308F, 53206 }, { 0x3091, 53209 }, { 0x3090, 53212 }, { 0x3092, 53215 }, { 0x3084, 53218 }, { 0x3088, 53221 }, { 0x3086, 53224 }, { 0x3056, 53227 }, { 0x305C, 53230 }, { 0x3058, 53233 }, { 0x305E, 53236 }, { 0x305A, 53239 }, { 0x3041, 53242 }, { 0x3047, 53246 }, { 0x3043, 53250 }, { 0x3049, 53254 }, { 0x3045, 53258 }, { 0x3095, 53262 }, { 0x3096, 53266 }, { 0x3063, 53270 }, { 0x308E, 53274 }, { 0x3083, 53278 }, { 0x3087, 53282 }, { 0x3085, 53286 }, { 0x309E, 53290 }, { 0x309F, 53294 }, { 0x309D, 53297 }, { 0x221E, 53300 }, { 0x29DE, 53301 }, { 0x222B, 53306 }, { 0x2A18, 53307 }, { 0x2A1A, 53311 }, { 0x2A0E, 53314 }, { 0x2A1B, 53318 }, { 0x2A1C, 53321 }, { 0x2A17, 53324 }, { 0x2A19, 53330 }, { 0x2A15, 53333 }, { 0x2A0F, 53338 }, { 0x23AE, 53342 }, { 0x2A3C, 53344 }, { 0x2127, 53346 }, { 0x223E, 53349 }, { 0x00BF, 53352 }, { 0x2054, 53355 }, { 0x00A1, 53357 }, { 0x2E18, 53360 }, { 0x3004, 53362 }, { 0x30A2, 53366 }, { 0x30A8, 53369 }, { 0x30A4, 53372 }, { 0x30F3, 53375 }, { 0x30AA, 53378 }, { 0x30A6, 53381 }, { 0x30D0, 53384 }, { 0x30D9, 53387 }, { 0x30D3, 53390 }, { 0x30DC, 53393 }, { 0x30D6, 53396 }, { 0x30C0, 53399 }, { 0x30C7, 53402 }, { 0x30C2, 53405 }, { 0x30C9, 53408 }, { 0x30C5, 53411 }, { 0x30AC, 53414 }, { 0x30B2, 53417 }, { 0x30AE, 53420 }, { 0x30B4, 53423 }, { 0x30B0, 53426 }, { 0x30CF, 53429 }, { 0x30D8, 53432 }, { 0x30D2, 53435 }, { 0x30DB, 53438 }, { 0x30D5, 53441 }, { 0x30AB, 53444 }, { 0x30B1, 53447 }, { 0x30AD, 53450 }, { 0x30B3, 53453 }, { 0x30AF, 53456 }, { 0x30DE, 53459 }, { 0x30E1, 53462 }, { 0x30DF, 53465 }, { 0x30E2, 53468 }, { 0x30E0, 53471 }, { 0x30CA, 53474 }, { 0x30CD, 53477 }, { 0x30CB, 53480 }, { 0x30CE, 53483 }, { 0x30CC, 53486 }, { 0x30D1, 53489 }, { 0x30DA, 53492 }, { 0x30D4, 53495 }, { 0x30DD, 53498 }, { 0x30D7, 53501 }, { 0x30E9, 53504 }, { 0x30EC, 53507 }, { 0x30EA, 53510 }, { 0x30ED, 53513 }, { 0x30EB, 53516 }, { 0x30B5, 53519 }, { 0x30BB, 53522 }, { 0x30B7, 53525 }, { 0x30BD, 53528 }, { 0x30B9, 53531 }, { 0x30BF, 53534 }, { 0x30C6, 53537 }, { 0x30C1, 53540 }, { 0x30C8, 53543 }, { 0x30C4, 53546 }, { 0x30F7, 53549 }, { 0x30F9, 53552 }, { 0x30F8, 53555 }, { 0x30FA, 53558 }, { 0x30F4, 53561 }, { 0x30EF, 53564 }, { 0x30F1, 53567 }, { 0x30F0, 53570 }, { 0x30F2, 53573 }, { 0x30E4, 53576 }, { 0x30E8, 53579 }, { 0x30E6, 53582 }, { 0x30B6, 53585 }, { 0x30BC, 53588 }, { 0x30B8, 53591 }, { 0x30BE, 53594 }, { 0x30BA, 53597 }, { 0x30A1, 53600 }, { 0x30A7, 53604 }, { 0x30A3, 53608 }, { 0x30A9, 53612 }, { 0x30A5, 53616 }, { 0x31F5, 53620 }, { 0x31F8, 53624 }, { 0x31F6, 53628 }, { 0x31F9, 53632 }, { 0x31F7, 53636 }, { 0x30F5, 53640 }, { 0x30F6, 53644 }, { 0x31F0, 53648 }, { 0x31FA, 53652 }, { 0x31F4, 53656 }, { 0x31FB, 53660 }, { 0x31FE, 53664 }, { 0x31FC, 53668 }, { 0x31FF, 53672 }, { 0x31FD, 53676 }, { 0x31F1, 53680 }, { 0x31F2, 53684 }, { 0x31F3, 53688 }, { 0x30C3, 53692 }, { 0x30EE, 53696 }, { 0x30E3, 53700 }, { 0x30E7, 53704 }, { 0x30E5, 53708 }, { 0x30FB, 53712 }, { 0x30FE, 53715 }, { 0x30FF, 53719 }, { 0x30FD, 53722 }, { 0x2328, 53725 }, { 0xC001, 53726 }, { 0x26AD, 53728 }, { 0x225E, 53730 }, { 0x2221, 53732 }, { 0x29A9, 53734 }, { 0x29A8, 53746 }, { 0x29AB, 53758 }, { 0x29AA, 53770 }, { 0x29AD, 53782 }, { 0x29AF, 53794 }, { 0x29AC, 53806 }, { 0x29AE, 53818 }, { 0x299B, 53830 }, { 0x299D, 53834 }, { 0x23D5, 53839 }, { 0x23D6, 53844 }, { 0x23D4, 53848 }, { 0x23D2, 53853 }, { 0x23D1, 53857 }, { 0x23D3, 53859 }, { 0x23D7, 53863 }, { 0x23D9, 53865 }, { 0x23D8, 53867 }, { 0x02D4, 53869 }, { 0x02C4, 53873 }, { 0x5770, 53877 }, { 0x5718, 53880 }, { 0x5717, 53884 }, { 0x5719, 53889 }, { 0x02FC, 53894 }, { 0x02FA, 53899 }, { 0x02F0, 53904 }, { 0x02EF, 53909 }, { 0x02FF, 53914 }, { 0x02F1, 53919 }, { 0x02F3, 53924 }, { 0x02E8, 53928 }, { 0x02CF, 53933 }, { 0x02CE, 53938 }, { 0x02F2, 53943 }, { 0x02F7, 53948 }, { 0x570B, 53952 }, { 0x5710, 53958 }, { 0x02CD, 53965 }, { 0x571F, 53969 }, { 0x02CC, 53975 }, { 0x5715, 53980 }, { 0x5788, 53986 }, { 0x02E7, 53991 }, { 0x570A, 53996 }, { 0x570F, 54002 }, { 0x5714, 54009 }, { 0x02EA, 54015 }, { 0x02D5, 54021 }, { 0x02C5, 54025 }, { 0x02D1, 54029 }, { 0x02E6, 54034 }, { 0x5709, 54039 }, { 0x570E, 54045 }, { 0x5713, 54052 }, { 0x02BF, 54058 }, { 0x02C2, 54063 }, { 0x02FE, 54067 }, { 0x02D6, 54071 }, { 0x02EB, 54075 }, { 0x02CA, 54081 }, { 0x02FB, 54085 }, { 0x02F9, 54090 }, { 0x5789, 54095 }, { 0x02DF, 54098 }, { 0x02CB, 54102 }, { 0x571A, 54106 }, { 0x02D7, 54112 }, { 0x02B9, 54116 }, { 0x02BE, 54119 }, { 0x02C3, 54124 }, { 0x02FD, 54128 }, { 0x578A, 54131 }, { 0x1D43, 54136 }, { 0x1D47, 54140 }, { 0x1D9C, 54144 }, { 0x1D9D, 54148 }, { 0x1D48, 54154 }, { 0x1D49, 54158 }, { 0x1DA0, 54162 }, { 0x1D4D, 54166 }, { 0x02B0, 54170 }, { 0x02B1, 54174 }, { 0x1DA4, 54180 }, { 0x02B2, 54186 }, { 0x1DA8, 54190 }, { 0x1D4F, 54196 }, { 0x02E1, 54200 }, { 0x1DAA, 54204 }, { 0x1DA9, 54211 }, { 0x1D50, 54218 }, { 0x1DAC, 54222 }, { 0x1DAE, 54228 }, { 0x1DAF, 54235 }, { 0x1D52, 54242 }, { 0x1D56, 54246 }, { 0x02B3, 54250 }, { 0x02E2, 54254 }, { 0x1DB3, 54258 }, { 0x1D57, 54264 }, { 0x1DB5, 54268 }, { 0x1D58, 54275 }, { 0x1DB6, 54279 }, { 0x1D5B, 54284 }, { 0x1DB9, 54288 }, { 0x02B7, 54294 }, { 0x02E3, 54298 }, { 0x02B8, 54302 }, { 0x1DBB, 54306 }, { 0x1DBD, 54310 }, { 0x1DBC, 54316 }, { 0x1D5C, 54323 }, { 0x1D61, 54327 }, { 0x1D51, 54331 }, { 0x1DB4, 54335 }, { 0x1D9E, 54339 }, { 0x1DBE, 54343 }, { 0x1DB2, 54347 }, { 0x1D54, 54351 }, { 0x1D5D, 54357 }, { 0x1DA5, 54361 }, { 0x1D4B, 54365 }, { 0x1D53, 54370 }, { 0x1D45, 54375 }, { 0x1D5F, 54379 }, { 0x02E0, 54383 }, { 0x1D60, 54387 }, { 0x1D5E, 54392 }, { 0x1D4A, 54397 }, { 0x1DBF, 54401 }, { 0x1DB1, 54405 }, { 0x1D55, 54410 }, { 0x1DA2, 54416 }, { 0x1D44, 54421 }, { 0x1DA3, 54426 }, { 0x1D4E, 54431 }, { 0x1D5A, 54436 }, { 0x1DAD, 54441 }, { 0x02B4, 54449 }, { 0x02B5, 54454 }, { 0x1DBA, 54461 }, { 0x1D46, 54466 }, { 0x1D4C, 54471 }, { 0x1D9B, 54477 }, { 0x1DA6, 54482 }, { 0x1DA7, 54487 }, { 0x1DAB, 54494 }, { 0x1DB0, 54499 }, { 0x1DB8, 54504 }, { 0x02B6, 54509 }, { 0x1DA1, 54515 }, { 0x1DB7, 54522 }, { 0x1D9F, 54526 }, { 0x02E4, 54532 }, { 0x1D59, 54538 }, { 0x02BA, 54543 }, { 0x02EE, 54547 }, { 0x02C9, 54551 }, { 0x02F4, 54554 }, { 0x02F6, 54559 }, { 0x02F5, 54565 }, { 0x571B, 54571 }, { 0x571C, 54576 }, { 0x02F8, 54581 }, { 0x571E, 54585 }, { 0x571D, 54591 }, { 0x02DE, 54596 }, { 0x5721, 54600 }, { 0x5720, 54606 }, { 0x02BB, 54612 }, { 0x1D2C, 54616 }, { 0x1D2E, 54620 }, { 0x1D30, 54624 }, { 0x1D31, 54628 }, { 0x1D33, 54632 }, { 0x1D34, 54636 }, { 0x1D35, 54640 }, { 0x1D36, 54644 }, { 0x1D37, 54648 }, { 0x1D38, 54652 }, { 0x1D39, 54656 }, { 0x1D3A, 54660 }, { 0x1D3C, 54664 }, { 0x1D3E, 54668 }, { 0x1D3F, 54672 }, { 0x1D40, 54676 }, { 0x1D41, 54680 }, { 0x2C7D, 54684 }, { 0x1D42, 54688 }, { 0x1D2D, 54692 }, { 0x1D3D, 54696 }, { 0x1D2F, 54700 }, { 0x1D32, 54705 }, { 0x1D3B, 54710 }, { 0x02D3, 54715 }, { 0x02D2, 54721 }, { 0x5704, 54727 }, { 0x5706, 54733 }, { 0x5700, 54739 }, { 0x5702, 54745 }, { 0x5705, 54751 }, { 0x5707, 54757 }, { 0x5701, 54763 }, { 0x5703, 54769 }, { 0x02C0, 54775 }, { 0x02EC, 54779 }, { 0x1D78, 54782 }, { 0x10FC, 54786 }, { 0x02BD, 54790 }, { 0x02C1, 54794 }, { 0x02C8, 54799 }, { 0x02E9, 54803 }, { 0x570C, 54808 }, { 0x5711, 54814 }, { 0x5716, 54821 }, { 0x02BC, 54827 }, { 0x02C6, 54830 }, { 0x02E5, 54834 }, { 0x5708, 54839 }, { 0x570D, 54845 }, { 0x5712, 54852 }, { 0x02D0, 54858 }, { 0x02ED, 54862 }, { 0x268B, 54865 }, { 0x268A, 54868 }, { 0x9300, 54871 }, { 0x22B8, 54874 }, { 0x228C, 54875 }, { 0x228E, 54876 }, { 0x228D, 54878 }, { 0x206E, 54880 }, { 0x24FF, 54883 }, { 0x24EB, 54887 }, { 0x24EC, 54891 }, { 0x24F4, 54895 }, { 0x24EF, 54899 }, { 0x24F0, 54903 }, { 0x24F2, 54907 }, { 0x24EE, 54911 }, { 0x24F3, 54915 }, { 0x24ED, 54919 }, { 0x24F1, 54923 }, { 0x00A0, 54927 }, { 0x22B6, 54929 }, { 0x2626, 54931 }, { 0x272D, 54933 }, { 0x2719, 54936 }, { 0x271F, 54939 }, { 0x269D, 54942 }, { 0x203E, 54945 }, { 0x2225, 54946 }, { 0x2AF3, 54948 }, { 0x2AF2, 54952 }, { 0x5876, 54956 }, { 0x5877, 54959 }, { 0x5875, 54963 }, { 0x585D, 54967 }, { 0x5860, 54970 }, { 0x585E, 54973 }, { 0x5861, 54976 }, { 0x585F, 54979 }, { 0x584E, 54982 }, { 0x5844, 54985 }, { 0x584A, 54988 }, { 0x5866, 54991 }, { 0x5864, 54994 }, { 0x5842, 54997 }, { 0x585C, 55000 }, { 0x5846, 55003 }, { 0x5840, 55006 }, { 0x5859, 55009 }, { 0x584F, 55012 }, { 0x584B, 55015 }, { 0x584C, 55018 }, { 0x5862, 55021 }, { 0x5858, 55024 }, { 0x585B, 55027 }, { 0x5848, 55030 }, { 0x5853, 55033 }, { 0x5863, 55036 }, { 0x5857, 55039 }, { 0x5855, 55042 }, { 0x5845, 55045 }, { 0x586B, 55048 }, { 0x5852, 55051 }, { 0x5865, 55054 }, { 0x5841, 55057 }, { 0x5843, 55060 }, { 0x586C, 55063 }, { 0x5847, 55066 }, { 0x584D, 55069 }, { 0x585A, 55072 }, { 0x5849, 55075 }, { 0x5850, 55078 }, { 0x5869, 55081 }, { 0x5854, 55084 }, { 0x5851, 55087 }, { 0x586A, 55090 }, { 0x5856, 55093 }, { 0x586F, 55097 }, { 0x586D, 55101 }, { 0x5870, 55105 }, { 0x586E, 55109 }, { 0x5873, 55113 }, { 0x5874, 55116 }, { 0x5871, 55120 }, { 0x5867, 55124 }, { 0x5868, 55128 }, { 0x5872, 55132 }, { 0x71F7, 55136 }, { 0x71F1, 55141 }, { 0x71DA, 55145 }, { 0x71EC, 55149 }, { 0x71E0, 55153 }, { 0x71ED, 55157 }, { 0x71DF, 55161 }, { 0x71DC, 55165 }, { 0x71E4, 55169 }, { 0x71EF, 55173 }, { 0x71EA, 55177 }, { 0x71E9, 55181 }, { 0x71F6, 55185 }, { 0x71E8, 55189 }, { 0x71F3, 55193 }, { 0x71FC, 55197 }, { 0x71D9, 55202 }, { 0x71EB, 55206 }, { 0x71D4, 55211 }, { 0x71EE, 55215 }, { 0x71F8, 55219 }, { 0x71F2, 55223 }, { 0x71E5, 55228 }, { 0x71FB, 55232 }, { 0x71D8, 55237 }, { 0x71F0, 55241 }, { 0x71D5, 55245 }, { 0x71E6, 55249 }, { 0x71E3, 55253 }, { 0x71F9, 55257 }, { 0x71D6, 55261 }, { 0x71D1, 55265 }, { 0x71DB, 55270 }, { 0x71E7, 55274 }, { 0x71D3, 55278 }, { 0x71DE, 55282 }, { 0x71F4, 55286 }, { 0x71F5, 55290 }, { 0x71D7, 55294 }, { 0x71DD, 55298 }, { 0x71FA, 55302 }, { 0x71D2, 55306 }, { 0x71E1, 55311 }, { 0x71E2, 55315 }, { 0x71FD, 55320 }, { 0x71D0, 55326 }, { 0x272F, 55330 }, { 0x2316, 55332 }, { 0x227A, 55334 }, { 0x227C, 55335 }, { 0x227E, 55339 }, { 0x22E8, 55343 }, { 0x2AB5, 55348 }, { 0x2AB9, 55353 }, { 0x2AB7, 55359 }, { 0x2AB3, 55364 }, { 0x2AB1, 55368 }, { 0x2AAF, 55374 }, { 0x22B0, 55379 }, { 0x2397, 55382 }, { 0x214A, 55384 }, { 0x2596, 55386 }, { 0x2597, 55389 }, { 0x2598, 55392 }, { 0x2599, 55395 }, { 0x259A, 55404 }, { 0x259B, 55410 }, { 0x259C, 55419 }, { 0x259D, 55428 }, { 0x259E, 55431 }, { 0x259F, 55437 }, { 0x003F, 55446 }, { 0x2048, 55448 }, { 0x26BB, 55451 }, { 0x267C, 55452 }, { 0x211F, 55455 }, { 0x2310, 55456 }, { 0x29A3, 55459 }, { 0x29A5, 55461 }, { 0x29B0, 55465 }, { 0x2035, 55468 }, { 0x223D, 55470 }, { 0x22CD, 55472 }, { 0x2036, 55475 }, { 0x301D, 55478 }, { 0x2AED, 55483 }, { 0x2E11, 55488 }, { 0x2037, 55491 }, { 0x204B, 55494 }, { 0x2619, 55497 }, { 0x2E2E, 55502 }, { 0x204F, 55505 }, { 0x2143, 55507 }, { 0x264F, 55511 }, { 0x2730, 55512 }, { 0x271E, 55515 }, { 0x274D, 55519 }, { 0x2618, 55522 }, { 0x5673, 55523 }, { 0x2263, 55525 }, { 0x227B, 55528 }, { 0x227D, 55529 }, { 0x227F, 55533 }, { 0x22E9, 55537 }, { 0x2AB6, 55542 }, { 0x2ABA, 55547 }, { 0x2AB8, 55553 }, { 0x2AB4, 55558 }, { 0x2AB2, 55562 }, { 0x2AB0, 55568 }, { 0x22B1, 55573 }, { 0x2283, 55576 }, { 0x2287, 55578 }, { 0x2AC4, 55583 }, { 0x228B, 55591 }, { 0x2ACC, 55597 }, { 0x2AC8, 55603 }, { 0x2ACA, 55608 }, { 0x2AC6, 55614 }, { 0x2ABE, 55619 }, { 0x2AC0, 55622 }, { 0x2AC2, 55627 }, { 0x2AD4, 55632 }, { 0x2AD6, 55635 }, { 0x297B, 55638 }, { 0x2AD8, 55642 }, { 0x2AD7, 55650 }, { 0x27C9, 55653 }, { 0x232F, 55656 }, { 0x1772, 55657 }, { 0x1773, 55661 }, { 0x1760, 55665 }, { 0x1761, 55668 }, { 0x1762, 55671 }, { 0x176A, 55674 }, { 0x1767, 55677 }, { 0x1764, 55680 }, { 0x1763, 55683 }, { 0x176E, 55686 }, { 0x176B, 55689 }, { 0x1768, 55692 }, { 0x1769, 55695 }, { 0x1770, 55698 }, { 0x1766, 55701 }, { 0x176F, 55704 }, { 0x176C, 55707 }, { 0x1765, 55710 }, { 0x2D30, 55713 }, { 0x2D49, 55716 }, { 0x2D53, 55719 }, { 0x2D44, 55722 }, { 0x2D31, 55725 }, { 0x2D37, 55728 }, { 0x2D3C, 55731 }, { 0x2D33, 55734 }, { 0x2D40, 55737 }, { 0x2D36, 55740 }, { 0x2D3D, 55743 }, { 0x2D4D, 55746 }, { 0x2D4E, 55749 }, { 0x2D4F, 55752 }, { 0x2D52, 55755 }, { 0x2D47, 55758 }, { 0x2D54, 55761 }, { 0x2D59, 55764 }, { 0x2D5C, 55767 }, { 0x2D60, 55770 }, { 0x2D61, 55773 }, { 0x2D62, 55776 }, { 0x2D63, 55779 }, { 0x2D3B, 55782 }, { 0x2D58, 55785 }, { 0x2D32, 55789 }, { 0x2D5E, 55792 }, { 0x2D39, 55795 }, { 0x2D38, 55798 }, { 0x2D56, 55801 }, { 0x2D43, 55804 }, { 0x2D45, 55807 }, { 0x2D55, 55810 }, { 0x2D5B, 55813 }, { 0x2D5A, 55816 }, { 0x2D5D, 55819 }, { 0x2D5F, 55822 }, { 0x2D4A, 55825 }, { 0x2D65, 55828 }, { 0x2D3A, 55831 }, { 0x2D34, 55834 }, { 0x2D3F, 55837 }, { 0x2D41, 55840 }, { 0x2D35, 55845 }, { 0x2D42, 55850 }, { 0x2D3E, 55854 }, { 0x2D48, 55858 }, { 0x2D57, 55862 }, { 0x2D50, 55866 }, { 0x2D46, 55870 }, { 0x2D51, 55874 }, { 0x2D4C, 55878 }, { 0x2D4B, 55882 }, { 0x2D64, 55886 }, { 0x2D6F, 55890 }, { 0x204A, 55895 }, { 0x29CA, 55898 }, { 0x29CD, 55902 }, { 0x29CB, 55907 }, { 0x205D, 55910 }, { 0x739F, 55911 }, { 0x739B, 55914 }, { 0x739C, 55917 }, { 0x7385, 55920 }, { 0x7394, 55923 }, { 0x739A, 55926 }, { 0x7386, 55929 }, { 0x7391, 55932 }, { 0x7393, 55935 }, { 0x738B, 55938 }, { 0x7383, 55941 }, { 0x738E, 55944 }, { 0x7390, 55947 }, { 0x739D, 55950 }, { 0x7389, 55953 }, { 0x738A, 55956 }, { 0x7380, 55959 }, { 0x7381, 55962 }, { 0x738F, 55965 }, { 0x7388, 55968 }, { 0x7396, 55971 }, { 0x7395, 55974 }, { 0x738C, 55977 }, { 0x7387, 55980 }, { 0x7384, 55983 }, { 0x7382, 55986 }, { 0x7399, 55989 }, { 0x738D, 55992 }, { 0x7397, 55995 }, { 0x7392, 55998 }, { 0x7398, 56001 }, { 0x2602, 56004 }, { 0x2614, 56005 }, { 0x203F, 56009 }, { 0x2123, 56010 }, { 0x27CA, 56011 }, { 0x29D0, 56016 }, { 0x2AE4, 56021 }, { 0x2AE2, 56026 }, { 0x205E, 56031 }, { 0x3031, 56034 }, { 0x3035, 56038 }, { 0x3033, 56044 }, { 0x3032, 56050 }, { 0x3034, 56057 }, { 0x007C, 56066 }, { 0x2AEF, 56068 }, { 0x2AF0, 56073 }, { 0x237F, 56078 }, { 0x23D0, 56083 }, { 0x26A8, 56086 }, { 0x2E2F, 56091 }, { 0x299A, 56093 }, { 0x22EE, 56096 }, { 0x303B, 56098 }, { 0x2317, 56102 }, { 0x2101, 56104 }, { 0x0026, 56108 }, { 0x260A, 56109 }, { 0x22A6, 56111 }, { 0x2623, 56112 }, { 0x902F, 56114 }, { 0x900E, 56118 }, { 0x9085, 56123 }, { 0x9046, 56127 }, { 0x901A, 56132 }, { 0x9040, 56137 }, { 0x9079, 56141 }, { 0x9030, 56147 }, { 0x907D, 56151 }, { 0x907C, 56156 }, { 0x909C, 56161 }, { 0x909E, 56166 }, { 0x909A, 56171 }, { 0x90A1, 56177 }, { 0x909F, 56183 }, { 0x909D, 56188 }, { 0x909B, 56193 }, { 0x90A0, 56198 }, { 0x9033, 56203 }, { 0x900D, 56209 }, { 0x9097, 56214 }, { 0x90C8, 56218 }, { 0x90C9, 56223 }, { 0x90CA, 56228 }, { 0x9086, 56233 }, { 0x9080, 56237 }, { 0x902E, 56242 }, { 0x9048, 56246 }, { 0x9004, 56251 }, { 0x9003, 56256 }, { 0x9000, 56261 }, { 0x9025, 56265 }, { 0x9066, 56269 }, { 0x902D, 56273 }, { 0x9078, 56277 }, { 0x9014, 56282 }, { 0x9019, 56286 }, { 0x906A, 56290 }, { 0x9001, 56295 }, { 0x90D0, 56299 }, { 0x90D2, 56306 }, { 0x90D3, 56313 }, { 0x90D1, 56320 }, { 0x90CE, 56327 }, { 0x90CF, 56332 }, { 0x9060, 56337 }, { 0x9074, 56342 }, { 0x90C5, 56347 }, { 0x90CB, 56354 }, { 0x90BC, 56361 }, { 0x90C7, 56367 }, { 0x90C3, 56372 }, { 0x90C4, 56379 }, { 0x90C6, 56386 }, { 0x90BE, 56393 }, { 0x9034, 56400 }, { 0x90B9, 56405 }, { 0x90BD, 56412 }, { 0x90BF, 56418 }, { 0x90C2, 56424 }, { 0x90C1, 56431 }, { 0x90BA, 56438 }, { 0x90C0, 56444 }, { 0x90BB, 56450 }, { 0x90CC, 56456 }, { 0x90D8, 56462 }, { 0x90D9, 56467 }, { 0x908F, 56472 }, { 0x90F5, 56478 }, { 0x9016, 56484 }, { 0x9091, 56489 }, { 0x9090, 56495 }, { 0x90AC, 56501 }, { 0x9037, 56507 }, { 0x9024, 56512 }, { 0x907F, 56516 }, { 0x90F4, 56521 }, { 0x908B, 56526 }, { 0x908A, 56532 }, { 0x908C, 56538 }, { 0x908E, 56544 }, { 0x908D, 56550 }, { 0x9057, 56556 }, { 0x9047, 56561 }, { 0x9015, 56566 }, { 0x905B, 56571 }, { 0x9020, 56575 }, { 0x9059, 56580 }, { 0x9026, 56585 }, { 0x9017, 56590 }, { 0x9029, 56594 }, { 0x9069, 56598 }, { 0x90E8, 56603 }, { 0x900F, 56607 }, { 0x9087, 56611 }, { 0x9058, 56615 }, { 0x9006, 56620 }, { 0x9005, 56625 }, { 0x90D4, 56630 }, { 0x90D6, 56637 }, { 0x90D7, 56644 }, { 0x90D5, 56651 }, { 0x90CD, 56658 }, { 0x9050, 56663 }, { 0x90EC, 56667 }, { 0x90EB, 56672 }, { 0x90ED, 56677 }, { 0x90EF, 56682 }, { 0x90E9, 56687 }, { 0x90EE, 56692 }, { 0x90EA, 56697 }, { 0x9056, 56702 }, { 0x9099, 56706 }, { 0x9055, 56710 }, { 0x90B6, 56714 }, { 0x903F, 56721 }, { 0x904F, 56725 }, { 0x90F3, 56731 }, { 0x90F1, 56737 }, { 0x901B, 56743 }, { 0x9089, 56748 }, { 0x9083, 56752 }, { 0x9082, 56757 }, { 0x9081, 56762 }, { 0x9061, 56767 }, { 0x905D, 56771 }, { 0x9041, 56775 }, { 0x9049, 56779 }, { 0x903C, 56783 }, { 0x907E, 56787 }, { 0x901F, 56791 }, { 0x9065, 56796 }, { 0x902B, 56801 }, { 0x902A, 56807 }, { 0x9013, 56812 }, { 0x9031, 56816 }, { 0x9027, 56820 }, { 0x9021, 56824 }, { 0x9053, 56829 }, { 0x9084, 56833 }, { 0x9022, 56838 }, { 0x9023, 56843 }, { 0x9018, 56847 }, { 0x9067, 56851 }, { 0x903B, 56856 }, { 0x90DA, 56861 }, { 0x90DB, 56867 }, { 0x90DC, 56873 }, { 0x90DD, 56878 }, { 0x9092, 56883 }, { 0x9095, 56887 }, { 0x9094, 56893 }, { 0x9093, 56900 }, { 0x90E6, 56907 }, { 0x9068, 56912 }, { 0x90B7, 56916 }, { 0x9007, 56920 }, { 0x903A, 56924 }, { 0x9042, 56928 }, { 0x904A, 56933 }, { 0x900C, 56937 }, { 0x90A3, 56941 }, { 0x90A5, 56948 }, { 0x90B1, 56955 }, { 0x90A2, 56961 }, { 0x90A6, 56967 }, { 0x90AA, 56973 }, { 0x90AB, 56979 }, { 0x90B3, 56985 }, { 0x90A4, 56992 }, { 0x90A8, 56998 }, { 0x90A9, 57004 }, { 0x90A7, 57011 }, { 0x90B2, 57016 }, { 0x901E, 57022 }, { 0x9038, 57026 }, { 0x904D, 57030 }, { 0x901D, 57035 }, { 0x90E2, 57039 }, { 0x90E3, 57044 }, { 0x90E4, 57050 }, { 0x90E5, 57056 }, { 0x90DE, 57062 }, { 0x90DF, 57067 }, { 0x90E0, 57073 }, { 0x90E1, 57079 }, { 0x9088, 57085 }, { 0x9063, 57089 }, { 0x9043, 57094 }, { 0x9036, 57099 }, { 0x90E7, 57104 }, { 0x907B, 57109 }, { 0x90B0, 57113 }, { 0x90AF, 57118 }, { 0x90AE, 57123 }, { 0x9035, 57128 }, { 0x907A, 57132 }, { 0x9010, 57136 }, { 0x904E, 57140 }, { 0x90F2, 57146 }, { 0x90F0, 57152 }, { 0x901C, 57158 }, { 0x9032, 57163 }, { 0x9075, 57167 }, { 0x902C, 57172 }, { 0x9039, 57177 }, { 0x905A, 57181 }, { 0x9008, 57186 }, { 0x9096, 57190 }, { 0x900A, 57194 }, { 0x900B, 57198 }, { 0x905C, 57203 }, { 0x90AD, 57207 }, { 0x9052, 57213 }, { 0x9011, 57219 }, { 0x9051, 57223 }, { 0x9012, 57228 }, { 0x9064, 57233 }, { 0x90B4, 57237 }, { 0x90B5, 57243 }, { 0x9098, 57249 }, { 0x90B8, 57253 }, { 0x905F, 57257 }, { 0x903D, 57262 }, { 0x9009, 57267 }, { 0x905E, 57271 }, { 0x903E, 57276 }, { 0x9002, 57281 }, { 0x9076, 57285 }, { 0x9077, 57290 }, { 0x9028, 57295 }, { 0x9045, 57299 }, { 0x9044, 57303 }, { 0x9073, 57307 }, { 0x9072, 57311 }, { 0x906D, 57315 }, { 0x9070, 57319 }, { 0x9062, 57323 }, { 0x904C, 57327 }, { 0x9054, 57331 }, { 0x904B, 57335 }, { 0x906C, 57339 }, { 0x9071, 57343 }, { 0x906B, 57347 }, { 0x906E, 57351 }, { 0x906F, 57355 }, { 0x2651, 57359 }, { 0x2040, 57360 }, { 0x21B7, 57362 }, { 0x21BB, 57366 }, { 0x2941, 57370 }, { 0x27F3, 57374 }, { 0x2232, 57378 }, { 0x2231, 57381 }, { 0x033D, 57383 }, { 0x0353, 57386 }, { 0x1DD0, 57389 }, { 0x031D, 57392 }, { 0x1DD1, 57396 }, { 0x1DD2, 57399 }, { 0x0307, 57402 }, { 0x0358, 57405 }, { 0x0323, 57409 }, { 0x0332, 57412 }, { 0x034A, 57415 }, { 0x031E, 57419 }, { 0x20DC, 57423 }, { 0x0309, 57427 }, { 0x031B, 57430 }, { 0x0351, 57432 }, { 0x031C, 57437 }, { 0x0318, 57442 }, { 0x031A, 57446 }, { 0x0349, 57450 }, { 0x20D6, 57454 }, { 0x20EE, 57458 }, { 0x20E1, 57462 }, { 0x034D, 57467 }, { 0x20D0, 57472 }, { 0x1DFE, 57476 }, { 0x0354, 57480 }, { 0x20EB, 57484 }, { 0x0336, 57489 }, { 0x0338, 57493 }, { 0x20D2, 57497 }, { 0x031F, 57502 }, { 0x030A, 57506 }, { 0x0325, 57509 }, { 0x20D8, 57512 }, { 0x20E9, 57515 }, { 0x0341, 57519 }, { 0x0301, 57523 }, { 0x0317, 57526 }, { 0x0306, 57530 }, { 0x032E, 57532 }, { 0x030C, 57535 }, { 0x032C, 57537 }, { 0x0313, 57540 }, { 0x0315, 57543 }, { 0x0326, 57547 }, { 0x0340, 57550 }, { 0x0300, 57554 }, { 0x0316, 57557 }, { 0x0343, 57561 }, { 0x9242, 57564 }, { 0x9244, 57568 }, { 0x9243, 57572 }, { 0x0344, 57576 }, { 0x0342, 57580 }, { 0x0345, 57583 }, { 0x0363, 57586 }, { 0x0368, 57591 }, { 0x1DD7, 57596 }, { 0x0369, 57602 }, { 0x0364, 57607 }, { 0x1DDA, 57612 }, { 0x036A, 57617 }, { 0x0365, 57622 }, { 0x1DDC, 57627 }, { 0x1DDD, 57632 }, { 0x036B, 57637 }, { 0x1DE0, 57642 }, { 0x0366, 57647 }, { 0x036C, 57652 }, { 0x1DCA, 57657 }, { 0x1DE3, 57663 }, { 0x1DE4, 57669 }, { 0x036D, 57674 }, { 0x0367, 57679 }, { 0x036E, 57684 }, { 0x036F, 57689 }, { 0x1DE6, 57694 }, { 0x1DD4, 57699 }, { 0x1DD5, 57704 }, { 0x1DD6, 57709 }, { 0x1DD9, 57714 }, { 0x1DE5, 57719 }, { 0x1DD8, 57725 }, { 0x1DD3, 57731 }, { 0x1DDB, 57739 }, { 0x1DDE, 57745 }, { 0x1DDF, 57751 }, { 0x1DE1, 57757 }, { 0x1DE2, 57763 }, { 0x0320, 57769 }, { 0x0357, 57773 }, { 0x0339, 57778 }, { 0x0319, 57783 }, { 0x20D7, 57787 }, { 0x20EF, 57791 }, { 0x20D1, 57795 }, { 0x0356, 57799 }, { 0x1DFF, 57806 }, { 0x0350, 57813 }, { 0x0355, 57817 }, { 0x0335, 57821 }, { 0x0337, 57825 }, { 0x20D3, 57829 }, { 0x1DC2, 57834 }, { 0x20DB, 57837 }, { 0x0303, 57841 }, { 0x0330, 57843 }, { 0x0334, 57846 }, { 0x034C, 57849 }, { 0x0346, 57854 }, { 0x032A, 57857 }, { 0x1DC1, 57860 }, { 0x1DC0, 57864 }, { 0x0333, 57868 }, { 0x035A, 57872 }, { 0x030B, 57876 }, { 0x035D, 57880 }, { 0x035C, 57883 }, { 0x030F, 57887 }, { 0x0360, 57891 }, { 0x6E22, 57894 }, { 0x6E23, 57899 }, { 0x035E, 57904 }, { 0x035F, 57907 }, { 0x0361, 57911 }, { 0x033F, 57915 }, { 0x030E, 57918 }, { 0x0348, 57923 }, { 0x20E6, 57928 }, { 0x1DCD, 57933 }, { 0x0362, 57937 }, { 0x0347, 57942 }, { 0x0304, 57946 }, { 0x6E24, 57948 }, { 0x0331, 57952 }, { 0x6E25, 57955 }, { 0x0328, 57959 }, { 0x1DCE, 57961 }, { 0x033B, 57964 }, { 0x20E8, 57967 }, { 0x0312, 57970 }, { 0x035B, 57974 }, { 0x1DCF, 57977 }, { 0x20E7, 57980 }, { 0x0327, 57983 }, { 0x0352, 57985 }, { 0x20E5, 57987 }, { 0x033C, 57991 }, { 0x034E, 57994 }, { 0x20F0, 57998 }, { 0x0359, 58001 }, { 0x5670, 58004 }, { 0x0485, 58009 }, { 0x0486, 58013 }, { 0x0483, 58017 }, { 0x566F, 58020 }, { 0x567C, 58023 }, { 0x2DF6, 58026 }, { 0x2DEA, 58030 }, { 0x2DE0, 58034 }, { 0x2DE3, 58038 }, { 0x2DE7, 58042 }, { 0x2DE8, 58046 }, { 0x2DE9, 58050 }, { 0x2DEC, 58054 }, { 0x2DED, 58058 }, { 0x2DEF, 58062 }, { 0x2DF7, 58066 }, { 0x2DE6, 58070 }, { 0x2DEB, 58074 }, { 0x2DEE, 58078 }, { 0x2DE1, 58082 }, { 0x2DFB, 58086 }, { 0x2DE5, 58090 }, { 0x2DFE, 58094 }, { 0x2DF1, 58099 }, { 0x2DE2, 58103 }, { 0x2DF2, 58107 }, { 0x2DF0, 58111 }, { 0x2DFA, 58115 }, { 0x2DE4, 58119 }, { 0x2DF4, 58123 }, { 0x2DF8, 58127 }, { 0x2DF5, 58131 }, { 0x2DF3, 58135 }, { 0x2DFD, 58139 }, { 0x2DFC, 58144 }, { 0x2DFF, 58149 }, { 0x2DF9, 58155 }, { 0x5671, 58160 }, { 0x0488, 58165 }, { 0x567D, 58170 }, { 0x0489, 58173 }, { 0x0487, 58177 }, { 0x5672, 58180 }, { 0x0484, 58185 }, { 0x034F, 58188 }, { 0x0311, 58191 }, { 0x032F, 58194 }, { 0x033A, 58198 }, { 0x032B, 58202 }, { 0x6E20, 58207 }, { 0x6E21, 58211 }, { 0x0305, 58215 }, { 0x0314, 58217 }, { 0x030D, 58221 }, { 0x0329, 58225 }, { 0x033E, 58229 }, { 0x20D9, 58232 }, { 0x20D5, 58236 }, { 0x0308, 58240 }, { 0x0324, 58242 }, { 0x20DD, 58245 }, { 0x20E0, 58248 }, { 0x20E3, 58252 }, { 0x20E2, 58255 }, { 0x20DE, 58258 }, { 0x20E4, 58261 }, { 0x20DF, 58266 }, { 0x20EA, 58269 }, { 0x20ED, 58273 }, { 0x0322, 58279 }, { 0x0302, 58283 }, { 0x032D, 58286 }, { 0x6E26, 58290 }, { 0x034B, 58293 }, { 0x20EC, 58296 }, { 0x1DC3, 58302 }, { 0x0310, 58305 }, { 0x0321, 58307 }, { 0x1DC7, 58311 }, { 0x1DCB, 58313 }, { 0x1DC5, 58315 }, { 0x1DC4, 58317 }, { 0x1DCC, 58319 }, { 0x1DC6, 58321 }, { 0x20DA, 58323 }, { 0x20D4, 58327 }, { 0x1DC9, 58331 }, { 0x1DC8, 58333 }, { 0x3099, 58335 }, { 0x309A, 58340 }, { 0x2A6D, 58345 }, { 0x00A9, 58349 }, { 0x8000, 58351 }, { 0x8001, 58354 }, { 0x8004, 58359 }, { 0x8002, 58364 }, { 0x8005, 58369 }, { 0x8008, 58374 }, { 0x8003, 58379 }, { 0x8007, 58385 }, { 0x8006, 58390 }, { 0x808A, 58396 }, { 0x808C, 58399 }, { 0x808B, 58407 }, { 0x813F, 58412 }, { 0x8140, 58415 }, { 0x830B, 58419 }, { 0x830D, 58422 }, { 0x830C, 58427 }, { 0x8310, 58431 }, { 0x830E, 58441 }, { 0x830F, 58452 }, { 0x8009, 58460 }, { 0x800A, 58463 }, { 0x8015, 58466 }, { 0x8014, 58470 }, { 0x800F, 58479 }, { 0x800D, 58484 }, { 0x8010, 58489 }, { 0x800B, 58495 }, { 0x800C, 58500 }, { 0x800E, 58506 }, { 0x8011, 58512 }, { 0x8012, 58517 }, { 0x8013, 58522 }, { 0x801C, 58527 }, { 0x801D, 58530 }, { 0x801E, 58533 }, { 0x801F, 58538 }, { 0x8020, 58545 }, { 0x8021, 58548 }, { 0x8024, 58553 }, { 0x8026, 58558 }, { 0x8027, 58563 }, { 0x8028, 58568 }, { 0x8022, 58573 }, { 0x8023, 58578 }, { 0x8025, 58583 }, { 0x802D, 58588 }, { 0x802E, 58591 }, { 0x8031, 58596 }, { 0x8030, 58602 }, { 0x802F, 58611 }, { 0x8040, 58616 }, { 0x8049, 58619 }, { 0x804A, 58622 }, { 0x804B, 58627 }, { 0x804C, 58632 }, { 0x804D, 58638 }, { 0x804E, 58641 }, { 0x804F, 58647 }, { 0x8050, 58653 }, { 0x8055, 58658 }, { 0x8072, 58661 }, { 0x807A, 58664 }, { 0x807C, 58667 }, { 0x807B, 58671 }, { 0x807D, 58676 }, { 0x808D, 58680 }, { 0x808E, 58683 }, { 0x8093, 58692 }, { 0x8090, 58697 }, { 0x808F, 58702 }, { 0x8091, 58707 }, { 0x8092, 58712 }, { 0x8096, 58717 }, { 0x8097, 58720 }, { 0x809A, 58723 }, { 0x8098, 58728 }, { 0x8099, 58733 }, { 0x809D, 58739 }, { 0x809B, 58743 }, { 0x809C, 58748 }, { 0x80B5, 58753 }, { 0x80B6, 58756 }, { 0x8100, 58760 }, { 0x8101, 58763 }, { 0x8102, 58768 }, { 0x8103, 58773 }, { 0x8116, 58778 }, { 0x8117, 58781 }, { 0x8129, 58786 }, { 0x812B, 58789 }, { 0x812A, 58793 }, { 0x812D, 58797 }, { 0x8136, 58800 }, { 0x812E, 58805 }, { 0x8130, 58810 }, { 0x8132, 58815 }, { 0x8133, 58820 }, { 0x8134, 58825 }, { 0x8135, 58830 }, { 0x812F, 58835 }, { 0x8131, 58840 }, { 0x8137, 58845 }, { 0x8141, 58848 }, { 0x8145, 58851 }, { 0x814B, 58854 }, { 0x814C, 58857 }, { 0x814E, 58863 }, { 0x814F, 58866 }, { 0x8152, 58871 }, { 0x8150, 58875 }, { 0x8151, 58880 }, { 0x8154, 58885 }, { 0x8155, 58888 }, { 0x8157, 58891 }, { 0x8158, 58894 }, { 0x8187, 58899 }, { 0x8159, 58904 }, { 0x815A, 58909 }, { 0x815F, 58916 }, { 0x8162, 58921 }, { 0x8167, 58926 }, { 0x816B, 58931 }, { 0x816E, 58936 }, { 0x8170, 58941 }, { 0x8172, 58946 }, { 0x8173, 58951 }, { 0x8174, 58956 }, { 0x8175, 58961 }, { 0x8176, 58968 }, { 0x8177, 58975 }, { 0x8178, 58982 }, { 0x8179, 58987 }, { 0x817A, 58994 }, { 0x817C, 58999 }, { 0x817D, 59004 }, { 0x817E, 59009 }, { 0x8188, 59014 }, { 0x8189, 59019 }, { 0x818C, 59024 }, { 0x815C, 59029 }, { 0x815E, 59034 }, { 0x8163, 59039 }, { 0x8165, 59044 }, { 0x8166, 59049 }, { 0x816D, 59058 }, { 0x816F, 59063 }, { 0x8171, 59068 }, { 0x817B, 59073 }, { 0x817F, 59078 }, { 0x8180, 59083 }, { 0x8181, 59088 }, { 0x8183, 59093 }, { 0x8184, 59098 }, { 0x8186, 59103 }, { 0x818B, 59108 }, { 0x815B, 59113 }, { 0x8161, 59118 }, { 0x8164, 59123 }, { 0x8168, 59129 }, { 0x8169, 59134 }, { 0x816A, 59141 }, { 0x816C, 59148 }, { 0x8182, 59153 }, { 0x818A, 59158 }, { 0x815D, 59165 }, { 0x8160, 59170 }, { 0x8185, 59175 }, { 0x81A0, 59180 }, { 0x81A2, 59183 }, { 0x81A3, 59188 }, { 0x81A1, 59193 }, { 0x81AA, 59198 }, { 0x81AB, 59201 }, { 0x81B7, 59213 }, { 0x81F7, 59216 }, { 0x81FB, 59219 }, { 0x81FC, 59222 }, { 0x8220, 59227 }, { 0x8222, 59230 }, { 0x8221, 59234 }, { 0x8228, 59239 }, { 0x822A, 59242 }, { 0x822C, 59245 }, { 0x822D, 59248 }, { 0x823E, 59253 }, { 0x8248, 59256 }, { 0x8249, 59259 }, { 0x824A, 59264 }, { 0x824B, 59269 }, { 0x824C, 59273 }, { 0x824D, 59276 }, { 0x8261, 59281 }, { 0x827A, 59284 }, { 0x827F, 59287 }, { 0x8280, 59290 }, { 0x8284, 59295 }, { 0x8285, 59300 }, { 0x8287, 59305 }, { 0x8281, 59310 }, { 0x8282, 59315 }, { 0x8283, 59320 }, { 0x8286, 59325 }, { 0x8288, 59330 }, { 0x8289, 59335 }, { 0x828F, 59340 }, { 0x8291, 59343 }, { 0x8292, 59346 }, { 0x8293, 59349 }, { 0x82DB, 59352 }, { 0x82DC, 59355 }, { 0x82E2, 59359 }, { 0x82E3, 59362 }, { 0x82EB, 59367 }, { 0x82EF, 59370 }, { 0x82ED, 59374 }, { 0x82EE, 59379 }, { 0x82EC, 59384 }, { 0x82FC, 59388 }, { 0x82FD, 59391 }, { 0x82FE, 59395 }, { 0x82FF, 59398 }, { 0x8305, 59402 }, { 0x8311, 59405 }, { 0x8312, 59408 }, { 0x8313, 59411 }, { 0x8319, 59414 }, { 0x8317, 59418 }, { 0x8318, 59427 }, { 0x8316, 59437 }, { 0x8315, 59442 }, { 0x8314, 59447 }, { 0x831A, 59451 }, { 0x831B, 59455 }, { 0x831D, 59461 }, { 0x8321, 59464 }, { 0x831F, 59469 }, { 0x8320, 59476 }, { 0x831E, 59481 }, { 0x8326, 59486 }, { 0x8327, 59489 }, { 0x8328, 59493 }, { 0x832A, 59496 }, { 0x8329, 59500 }, { 0x835D, 59505 }, { 0x835E, 59508 }, { 0x835F, 59512 }, { 0x8363, 59518 }, { 0x8364, 59521 }, { 0x836A, 59526 }, { 0x8016, 59529 }, { 0x8019, 59532 }, { 0x8018, 59539 }, { 0x801A, 59545 }, { 0x801B, 59550 }, { 0x8017, 59555 }, { 0x8038, 59560 }, { 0x803A, 59563 }, { 0x803C, 59568 }, { 0x803D, 59575 }, { 0x803B, 59588 }, { 0x8039, 59600 }, { 0x8041, 59605 }, { 0x8044, 59608 }, { 0x8045, 59611 }, { 0x8047, 59616 }, { 0x8053, 59619 }, { 0x8056, 59622 }, { 0x8057, 59625 }, { 0x805A, 59633 }, { 0x805B, 59639 }, { 0x805C, 59645 }, { 0x805D, 59653 }, { 0x8060, 59659 }, { 0x8061, 59665 }, { 0x8062, 59671 }, { 0x8064, 59679 }, { 0x8065, 59685 }, { 0x8066, 59691 }, { 0x8068, 59699 }, { 0x806A, 59705 }, { 0x806C, 59711 }, { 0x805F, 59719 }, { 0x8063, 59725 }, { 0x8067, 59731 }, { 0x8069, 59737 }, { 0x806D, 59745 }, { 0x8058, 59751 }, { 0x805E, 59757 }, { 0x806B, 59763 }, { 0x8059, 59769 }, { 0x806E, 59775 }, { 0x806F, 59778 }, { 0x8073, 59781 }, { 0x8074, 59784 }, { 0x8075, 59787 }, { 0x8077, 59792 }, { 0x8078, 59795 }, { 0x807E, 59802 }, { 0x807F, 59805 }, { 0x8081, 59810 }, { 0x8083, 59813 }, { 0x8084, 59816 }, { 0x80B7, 59819 }, { 0x80ED, 59822 }, { 0x80B8, 59827 }, { 0x80B9, 59836 }, { 0x80BA, 59843 }, { 0x80EA, 59850 }, { 0x80BC, 59855 }, { 0x80C3, 59860 }, { 0x80C4, 59865 }, { 0x80C7, 59870 }, { 0x80C8, 59875 }, { 0x80C9, 59882 }, { 0x80CA, 59887 }, { 0x80CD, 59895 }, { 0x80D1, 59900 }, { 0x80D4, 59909 }, { 0x80DD, 59916 }, { 0x80DE, 59921 }, { 0x80DF, 59928 }, { 0x80E2, 59933 }, { 0x80EB, 59938 }, { 0x80EC, 59943 }, { 0x80BB, 59950 }, { 0x80BD, 59958 }, { 0x80BF, 59963 }, { 0x80C0, 59968 }, { 0x80C1, 59975 }, { 0x80C2, 59980 }, { 0x80C5, 59987 }, { 0x80C6, 59994 }, { 0x80CC, 59999 }, { 0x80CE, 60004 }, { 0x80CF, 60009 }, { 0x80D2, 60016 }, { 0x80D3, 60021 }, { 0x80D6, 60028 }, { 0x80D7, 60034 }, { 0x80D8, 60043 }, { 0x80DA, 60048 }, { 0x80DB, 60053 }, { 0x80DC, 60060 }, { 0x80E0, 60067 }, { 0x80E1, 60072 }, { 0x80E3, 60079 }, { 0x80E4, 60084 }, { 0x80E5, 60089 }, { 0x80E6, 60094 }, { 0x80E8, 60101 }, { 0x80BE, 60106 }, { 0x80CB, 60113 }, { 0x80D0, 60119 }, { 0x80D5, 60126 }, { 0x80E7, 60131 }, { 0x80E9, 60136 }, { 0x80D9, 60141 }, { 0x80F0, 60146 }, { 0x80F1, 60149 }, { 0x80F2, 60157 }, { 0x80F3, 60160 }, { 0x80F5, 60169 }, { 0x80F6, 60172 }, { 0x80FB, 60175 }, { 0x8104, 60178 }, { 0x8105, 60181 }, { 0x8106, 60186 }, { 0x8118, 60191 }, { 0x811D, 60194 }, { 0x8119, 60198 }, { 0x811A, 60203 }, { 0x811B, 60211 }, { 0x811C, 60216 }, { 0x811E, 60223 }, { 0x8121, 60226 }, { 0x811F, 60232 }, { 0x8120, 60239 }, { 0x8122, 60244 }, { 0x8123, 60247 }, { 0x8124, 60250 }, { 0x8125, 60255 }, { 0x812C, 60258 }, { 0x8146, 60261 }, { 0x8148, 60264 }, { 0x8147, 60268 }, { 0x814A, 60272 }, { 0x8149, 60276 }, { 0x814D, 60287 }, { 0x8156, 60290 }, { 0x818D, 60293 }, { 0x818E, 60296 }, { 0x818F, 60301 }, { 0x8195, 60304 }, { 0x8196, 60307 }, { 0x8197, 60313 }, { 0x8198, 60316 }, { 0x8199, 60321 }, { 0x81A4, 60326 }, { 0x81A5, 60329 }, { 0x81AC, 60332 }, { 0x81AD, 60335 }, { 0x81AE, 60338 }, { 0x81AF, 60343 }, { 0x81B0, 60346 }, { 0x81B1, 60349 }, { 0x81B2, 60353 }, { 0x81B3, 60356 }, { 0x81B4, 60359 }, { 0x81F2, 60364 }, { 0x81F3, 60367 }, { 0x81F4, 60372 }, { 0x81F5, 60375 }, { 0x81F6, 60380 }, { 0x81F8, 60387 }, { 0x81FD, 60390 }, { 0x8211, 60393 }, { 0x81FE, 60397 }, { 0x8203, 60402 }, { 0x8204, 60409 }, { 0x8208, 60414 }, { 0x8209, 60419 }, { 0x820B, 60426 }, { 0x820C, 60433 }, { 0x820D, 60438 }, { 0x820E, 60443 }, { 0x81FF, 60450 }, { 0x8200, 60455 }, { 0x8201, 60460 }, { 0x8202, 60466 }, { 0x8205, 60472 }, { 0x8206, 60477 }, { 0x8207, 60482 }, { 0x820F, 60489 }, { 0x8210, 60496 }, { 0x820A, 60501 }, { 0x8215, 60506 }, { 0x8214, 60510 }, { 0x8212, 60514 }, { 0x8213, 60519 }, { 0x8216, 60524 }, { 0x821B, 60527 }, { 0x821C, 60530 }, { 0x821D, 60533 }, { 0x821E, 60536 }, { 0x821F, 60541 }, { 0x8223, 60549 }, { 0x8224, 60552 }, { 0x8225, 60555 }, { 0x8229, 60558 }, { 0x822B, 60561 }, { 0x822E, 60564 }, { 0x822F, 60567 }, { 0x823F, 60571 }, { 0x8246, 60574 }, { 0x8245, 60577 }, { 0x824E, 60581 }, { 0x824F, 60584 }, { 0x8251, 60587 }, { 0x8250, 60595 }, { 0x8263, 60601 }, { 0x826A, 60604 }, { 0x8269, 60609 }, { 0x8264, 60613 }, { 0x8266, 60619 }, { 0x8267, 60625 }, { 0x8268, 60636 }, { 0x8265, 60642 }, { 0x826B, 60648 }, { 0x826C, 60653 }, { 0x827B, 60661 }, { 0x827C, 60664 }, { 0x827D, 60667 }, { 0x8290, 60670 }, { 0x8295, 60673 }, { 0x82A8, 60676 }, { 0x82A7, 60680 }, { 0x8296, 60685 }, { 0x8297, 60690 }, { 0x8299, 60695 }, { 0x829D, 60700 }, { 0x82A2, 60705 }, { 0x82A3, 60710 }, { 0x82A4, 60715 }, { 0x82A5, 60720 }, { 0x8298, 60725 }, { 0x829A, 60730 }, { 0x829B, 60735 }, { 0x829C, 60740 }, { 0x829E, 60745 }, { 0x829F, 60750 }, { 0x82A1, 60755 }, { 0x82A6, 60760 }, { 0x82A0, 60765 }, { 0x8294, 60770 }, { 0x82A9, 60774 }, { 0x82AA, 60777 }, { 0x82AC, 60783 }, { 0x82AD, 60786 }, { 0x82BA, 60789 }, { 0x82BB, 60792 }, { 0x82BC, 60796 }, { 0x82BD, 60807 }, { 0x82D7, 60818 }, { 0x82D8, 60821 }, { 0x82DD, 60827 }, { 0x82E4, 60830 }, { 0x82E7, 60833 }, { 0x82E9, 60836 }, { 0x82F0, 60839 }, { 0x82F1, 60842 }, { 0x82F2, 60853 }, { 0x82F3, 60857 }, { 0x82F4, 60860 }, { 0x82F9, 60865 }, { 0x82F5, 60870 }, { 0x82F6, 60875 }, { 0x82F7, 60880 }, { 0x82F8, 60885 }, { 0x82FB, 60890 }, { 0x8300, 60893 }, { 0x8301, 60896 }, { 0x8303, 60899 }, { 0x8304, 60904 }, { 0x8302, 60915 }, { 0x8307, 60920 }, { 0x8308, 60923 }, { 0x8309, 60926 }, { 0x830A, 60929 }, { 0x832B, 60937 }, { 0x832C, 60940 }, { 0x832D, 60947 }, { 0x832E, 60954 }, { 0x832F, 60959 }, { 0x8331, 60964 }, { 0x8333, 60969 }, { 0x8332, 60976 }, { 0x8330, 60983 }, { 0x8334, 60988 }, { 0x8335, 60991 }, { 0x8337, 60994 }, { 0x8338, 60997 }, { 0x834C, 61002 }, { 0x833C, 61009 }, { 0x8340, 61014 }, { 0x8341, 61019 }, { 0x8343, 61024 }, { 0x8345, 61029 }, { 0x8348, 61034 }, { 0x834B, 61039 }, { 0x834D, 61044 }, { 0x833A, 61049 }, { 0x833B, 61054 }, { 0x833D, 61059 }, { 0x833F, 61064 }, { 0x8342, 61069 }, { 0x8344, 61074 }, { 0x8346, 61079 }, { 0x8347, 61084 }, { 0x8349, 61089 }, { 0x833E, 61094 }, { 0x834A, 61100 }, { 0x834E, 61105 }, { 0x8339, 61110 }, { 0x8351, 61115 }, { 0x8352, 61118 }, { 0x8353, 61123 }, { 0x8354, 61128 }, { 0x8355, 61133 }, { 0x835A, 61138 }, { 0x835B, 61141 }, { 0x835C, 61146 }, { 0x8360, 61149 }, { 0x8362, 61152 }, { 0x8365, 61155 }, { 0x8366, 61158 }, { 0x8367, 61161 }, { 0x8368, 61166 }, { 0x836B, 61169 }, { 0x836C, 61172 }, { 0x836E, 61177 }, { 0x8029, 61180 }, { 0x802B, 61183 }, { 0x802C, 61186 }, { 0x8033, 61191 }, { 0x8034, 61194 }, { 0x8035, 61197 }, { 0x803E, 61202 }, { 0x8042, 61205 }, { 0x8054, 61208 }, { 0x8076, 61211 }, { 0x8079, 61214 }, { 0x8080, 61217 }, { 0x8085, 61220 }, { 0x8086, 61223 }, { 0x8087, 61227 }, { 0x8088, 61232 }, { 0x8089, 61235 }, { 0x8094, 61238 }, { 0x8095, 61241 }, { 0x809E, 61244 }, { 0x80A0, 61247 }, { 0x80A1, 61250 }, { 0x80A2, 61253 }, { 0x80A3, 61258 }, { 0x80A4, 61265 }, { 0x80A5, 61274 }, { 0x80A9, 61279 }, { 0x80AA, 61284 }, { 0x80AF, 61290 }, { 0x80B1, 61295 }, { 0x80B2, 61300 }, { 0x80B3, 61305 }, { 0x80B4, 61310 }, { 0x80A6, 61315 }, { 0x80AB, 61320 }, { 0x80AE, 61326 }, { 0x80B0, 61331 }, { 0x80A7, 61338 }, { 0x80A8, 61344 }, { 0x80AC, 61351 }, { 0x80AD, 61356 }, { 0x80EE, 61362 }, { 0x80EF, 61365 }, { 0x80F7, 61370 }, { 0x80F9, 61373 }, { 0x80F8, 61378 }, { 0x80FA, 61382 }, { 0x80FC, 61387 }, { 0x8108, 61390 }, { 0x8109, 61393 }, { 0x810A, 61397 }, { 0x810B, 61400 }, { 0x810E, 61407 }, { 0x810F, 61414 }, { 0x810D, 61419 }, { 0x810C, 61424 }, { 0x8111, 61430 }, { 0x8115, 61433 }, { 0x8113, 61437 }, { 0x8114, 61442 }, { 0x8112, 61447 }, { 0x8126, 61452 }, { 0x8138, 61455 }, { 0x8139, 61458 }, { 0x813D, 61463 }, { 0x813A, 61468 }, { 0x813C, 61473 }, { 0x813B, 61478 }, { 0x813E, 61483 }, { 0x8142, 61486 }, { 0x8143, 61489 }, { 0x8144, 61495 }, { 0x8153, 61501 }, { 0x8190, 61504 }, { 0x8191, 61507 }, { 0x8192, 61510 }, { 0x8193, 61513 }, { 0x8194, 61516 }, { 0x819A, 61521 }, { 0x819B, 61524 }, { 0x81A7, 61527 }, { 0x81FA, 61530 }, { 0x8226, 61533 }, { 0x8232, 61536 }, { 0x8236, 61539 }, { 0x8237, 61544 }, { 0x8233, 61553 }, { 0x8235, 61558 }, { 0x8234, 61563 }, { 0x8238, 61568 }, { 0x8240, 61573 }, { 0x8242, 61576 }, { 0x8241, 61582 }, { 0x8243, 61586 }, { 0x8247, 61591 }, { 0x8262, 61594 }, { 0x82AE, 61597 }, { 0x82AF, 61600 }, { 0x82B5, 61605 }, { 0x82B6, 61610 }, { 0x82B2, 61617 }, { 0x82B0, 61622 }, { 0x82B4, 61627 }, { 0x82B1, 61632 }, { 0x82B3, 61637 }, { 0x82B7, 61642 }, { 0x82BF, 61645 }, { 0x82C3, 61648 }, { 0x82C4, 61651 }, { 0x82C5, 61656 }, { 0x82C6, 61661 }, { 0x82C7, 61664 }, { 0x82C8, 61669 }, { 0x82CA, 61674 }, { 0x82CB, 61679 }, { 0x82CC, 61684 }, { 0x82CD, 61689 }, { 0x82CF, 61695 }, { 0x82D0, 61700 }, { 0x82D1, 61705 }, { 0x82C9, 61710 }, { 0x82CE, 61715 }, { 0x82D3, 61720 }, { 0x82D5, 61723 }, { 0x82D4, 61731 }, { 0x82D9, 61735 }, { 0x82DE, 61738 }, { 0x82DF, 61741 }, { 0x82E0, 61747 }, { 0x82E5, 61750 }, { 0x82EA, 61753 }, { 0x82FA, 61756 }, { 0x8306, 61759 }, { 0x831C, 61762 }, { 0x8323, 61765 }, { 0x8325, 61768 }, { 0x8324, 61773 }, { 0x8336, 61778 }, { 0x8357, 61781 }, { 0x8356, 61784 }, { 0x8361, 61787 }, { 0x8369, 61790 }, { 0x802A, 61793 }, { 0x8032, 61796 }, { 0x8036, 61799 }, { 0x8037, 61802 }, { 0x8046, 61805 }, { 0x8048, 61808 }, { 0x8051, 61811 }, { 0x8052, 61814 }, { 0x8070, 61819 }, { 0x8071, 61822 }, { 0x8082, 61825 }, { 0x809F, 61828 }, { 0x80F4, 61831 }, { 0x8107, 61834 }, { 0x8110, 61837 }, { 0x8127, 61840 }, { 0x819F, 61843 }, { 0x81A6, 61846 }, { 0x81B8, 61849 }, { 0x81B9, 61852 }, { 0x81BA, 61857 }, { 0x81BB, 61866 }, { 0x81BC, 61873 }, { 0x81E5, 61880 }, { 0x81E6, 61885 }, { 0x81E7, 61892 }, { 0x81BD, 61901 }, { 0x81BE, 61906 }, { 0x81C1, 61911 }, { 0x81C3, 61916 }, { 0x81C4, 61921 }, { 0x81C8, 61926 }, { 0x81CA, 61931 }, { 0x81CC, 61938 }, { 0x81CD, 61943 }, { 0x81CE, 61950 }, { 0x81CF, 61957 }, { 0x81D6, 61962 }, { 0x81D8, 61967 }, { 0x81D9, 61972 }, { 0x81DB, 61979 }, { 0x81E4, 61984 }, { 0x81E8, 61995 }, { 0x81E9, 62002 }, { 0x81BF, 62007 }, { 0x81C0, 62014 }, { 0x81C2, 62019 }, { 0x81C5, 62024 }, { 0x81C6, 62029 }, { 0x81C7, 62034 }, { 0x81C9, 62041 }, { 0x81CB, 62046 }, { 0x81D0, 62052 }, { 0x81D1, 62057 }, { 0x81D2, 62062 }, { 0x81D3, 62067 }, { 0x81D7, 62076 }, { 0x81DC, 62081 }, { 0x81E1, 62088 }, { 0x81E2, 62093 }, { 0x81EA, 62098 }, { 0x81D5, 62103 }, { 0x81DA, 62108 }, { 0x81DF, 62113 }, { 0x81E0, 62118 }, { 0x81E3, 62125 }, { 0x81D4, 62130 }, { 0x81DD, 62135 }, { 0x81DE, 62144 }, { 0x81EB, 62152 }, { 0x81EC, 62156 }, { 0x81EF, 62159 }, { 0x81F0, 62163 }, { 0x81ED, 62171 }, { 0x81EE, 62176 }, { 0x8217, 62183 }, { 0x8218, 62186 }, { 0x821A, 62191 }, { 0x8219, 62195 }, { 0x8227, 62200 }, { 0x8239, 62203 }, { 0x823D, 62206 }, { 0x823A, 62210 }, { 0x823B, 62215 }, { 0x823C, 62222 }, { 0x8244, 62227 }, { 0x8260, 62230 }, { 0x826D, 62233 }, { 0x826F, 62236 }, { 0x8274, 62242 }, { 0x8275, 62248 }, { 0x8277, 62254 }, { 0x8270, 62260 }, { 0x8271, 62266 }, { 0x8272, 62272 }, { 0x8273, 62279 }, { 0x8276, 62285 }, { 0x826E, 62291 }, { 0x8278, 62297 }, { 0x8279, 62303 }, { 0x827E, 62310 }, { 0x828A, 62313 }, { 0x828C, 62316 }, { 0x828D, 62321 }, { 0x828B, 62326 }, { 0x828E, 62331 }, { 0x82B8, 62336 }, { 0x82B9, 62339 }, { 0x82BE, 62342 }, { 0x82C0, 62345 }, { 0x82D6, 62348 }, { 0x82E1, 62351 }, { 0x82E6, 62354 }, { 0x8322, 62357 }, { 0x834F, 62360 }, { 0x8350, 62363 }, { 0x8359, 62368 }, { 0x836D, 62371 }, { 0x803F, 62374 }, { 0x8043, 62377 }, { 0x80FD, 62380 }, { 0x8128, 62383 }, { 0x819C, 62386 }, { 0x819E, 62389 }, { 0x819D, 62401 }, { 0x81A8, 62411 }, { 0x81A9, 62414 }, { 0x81B5, 62419 }, { 0x81B6, 62422 }, { 0x81F1, 62425 }, { 0x81F9, 62428 }, { 0x8230, 62431 }, { 0x8231, 62434 }, { 0x8252, 62437 }, { 0x8253, 62440 }, { 0x8257, 62445 }, { 0x8258, 62453 }, { 0x825E, 62458 }, { 0x8254, 62465 }, { 0x8255, 62470 }, { 0x8256, 62477 }, { 0x8259, 62482 }, { 0x825A, 62487 }, { 0x825B, 62492 }, { 0x825C, 62500 }, { 0x825D, 62507 }, { 0x825F, 62516 }, { 0x82AB, 62521 }, { 0x82C1, 62524 }, { 0x82D2, 62527 }, { 0x82DA, 62530 }, { 0x82E8, 62533 }, { 0x8358, 62536 }, { 0x80FE, 62539 }, { 0x80FF, 62542 }, { 0x82C2, 62547 }, { 0x8461, 62550 }, { 0x8462, 62557 }, { 0x844F, 62564 }, { 0x8434, 62569 }, { 0x8458, 62574 }, { 0x8415, 62579 }, { 0x841E, 62584 }, { 0x842C, 62589 }, { 0x845A, 62594 }, { 0x845D, 62600 }, { 0x845F, 62608 }, { 0x8460, 62614 }, { 0x8411, 62620 }, { 0x8404, 62625 }, { 0x844E, 62630 }, { 0x840B, 62636 }, { 0x841A, 62641 }, { 0x8428, 62646 }, { 0x8440, 62651 }, { 0x8400, 62658 }, { 0x844A, 62663 }, { 0x8450, 62669 }, { 0x8435, 62674 }, { 0x8459, 62679 }, { 0x8416, 62684 }, { 0x841F, 62689 }, { 0x8423, 62694 }, { 0x842D, 62699 }, { 0x845B, 62704 }, { 0x845E, 62710 }, { 0x8410, 62718 }, { 0x8403, 62723 }, { 0x844D, 62728 }, { 0x8454, 62734 }, { 0x8455, 62739 }, { 0x8439, 62746 }, { 0x840A, 62751 }, { 0x8419, 62756 }, { 0x8422, 62761 }, { 0x8427, 62766 }, { 0x8431, 62771 }, { 0x845C, 62776 }, { 0x840F, 62782 }, { 0x8402, 62787 }, { 0x844C, 62792 }, { 0x8452, 62798 }, { 0x8453, 62803 }, { 0x8438, 62810 }, { 0x8409, 62815 }, { 0x8418, 62820 }, { 0x8421, 62825 }, { 0x8426, 62830 }, { 0x8430, 62835 }, { 0x843C, 62840 }, { 0x843E, 62847 }, { 0x843F, 62855 }, { 0x843D, 62863 }, { 0x8414, 62870 }, { 0x8407, 62875 }, { 0x840E, 62880 }, { 0x841D, 62885 }, { 0x842B, 62890 }, { 0x8446, 62895 }, { 0x8449, 62902 }, { 0x8447, 62910 }, { 0x8448, 62917 }, { 0x8413, 62924 }, { 0x8406, 62929 }, { 0x840D, 62934 }, { 0x841C, 62939 }, { 0x842A, 62944 }, { 0x8444, 62949 }, { 0x8445, 62956 }, { 0x8412, 62963 }, { 0x8405, 62968 }, { 0x840C, 62973 }, { 0x841B, 62978 }, { 0x8429, 62983 }, { 0x8442, 62988 }, { 0x8443, 62996 }, { 0x8441, 63004 }, { 0x8433, 63011 }, { 0x8432, 63019 }, { 0x8401, 63027 }, { 0x844B, 63032 }, { 0x8451, 63038 }, { 0x8436, 63043 }, { 0x8437, 63048 }, { 0x8408, 63055 }, { 0x8417, 63060 }, { 0x8420, 63065 }, { 0x8424, 63070 }, { 0x8425, 63075 }, { 0x842E, 63082 }, { 0x842F, 63087 }, { 0x843A, 63094 }, { 0x843B, 63101 }, { 0x8457, 63108 }, { 0x8456, 63112 }, { 0x8470, 63116 }, { 0x8472, 63123 }, { 0x8473, 63128 }, { 0x8471, 63133 }, { 0x23CA, 63138 }, { 0x23C8, 63144 }, { 0x23C2, 63152 }, { 0x23C5, 63160 }, { 0x23C9, 63168 }, { 0x23C7, 63174 }, { 0x23C1, 63182 }, { 0x23C4, 63190 }, { 0x23CB, 63198 }, { 0x23BE, 63205 }, { 0x23C6, 63212 }, { 0x23CC, 63218 }, { 0x23BF, 63225 }, { 0x23C0, 63232 }, { 0x23C3, 63238 }, { 0x00A8, 63244 }, { 0x2331, 63245 }, { 0x21A1, 63247 }, { 0x2193, 63251 }, { 0x2913, 63253 }, { 0x21A7, 63257 }, { 0x21B2, 63261 }, { 0x21B3, 63266 }, { 0x21B5, 63271 }, { 0x21DF, 63276 }, { 0x2908, 63281 }, { 0x21F5, 63286 }, { 0x2B07, 63292 }, { 0x21E9, 63295 }, { 0x2E14, 63298 }, { 0x21E3, 63300 }, { 0x21D3, 63303 }, { 0x21CA, 63306 }, { 0x290B, 63309 }, { 0x21AF, 63312 }, { 0x2959, 63315 }, { 0x2961, 63322 }, { 0x296F, 63329 }, { 0x2965, 63340 }, { 0x2955, 63351 }, { 0x295D, 63358 }, { 0x21C3, 63365 }, { 0x21C2, 63370 }, { 0x27F1, 63375 }, { 0x2E0E, 63378 }, { 0x212E, 63380 }, { 0x2259, 63382 }, { 0x213B, 63383 }, { 0x6F3F, 63385 }, { 0x6FE2, 63388 }, { 0x6FE6, 63391 }, { 0x6FE5, 63394 }, { 0x6FE0, 63397 }, { 0x6F0E, 63400 }, { 0x6F5B, 63403 }, { 0x6F5F, 63407 }, { 0x6F3B, 63411 }, { 0x6F08, 63415 }, { 0x6F0B, 63418 }, { 0x6F1A, 63421 }, { 0x6F0C, 63423 }, { 0x6F11, 63425 }, { 0x6F16, 63428 }, { 0x6F12, 63431 }, { 0x6F15, 63434 }, { 0x6F14, 63437 }, { 0x6F19, 63440 }, { 0x6F10, 63443 }, { 0x6F18, 63446 }, { 0x6F17, 63449 }, { 0x6F13, 63452 }, { 0x6F40, 63455 }, { 0x6F41, 63458 }, { 0x6F42, 63463 }, { 0x6F43, 63468 }, { 0x6F44, 63473 }, { 0x6F45, 63478 }, { 0x6F46, 63483 }, { 0x6F47, 63488 }, { 0x6F48, 63493 }, { 0x6F49, 63498 }, { 0x6F4A, 63503 }, { 0x6F4B, 63508 }, { 0x6F4C, 63513 }, { 0x6F4D, 63518 }, { 0x6F4E, 63523 }, { 0x6F4F, 63528 }, { 0x6F50, 63533 }, { 0x6F51, 63538 }, { 0x6F52, 63543 }, { 0x6F53, 63548 }, { 0x6F54, 63553 }, { 0x6F55, 63558 }, { 0x6F56, 63563 }, { 0x6F57, 63568 }, { 0x6F58, 63573 }, { 0x6F59, 63578 }, { 0x6F5A, 63583 }, { 0x6F21, 63588 }, { 0x6F22, 63593 }, { 0x6F23, 63598 }, { 0x6F24, 63603 }, { 0x6F25, 63608 }, { 0x6F26, 63613 }, { 0x6F27, 63618 }, { 0x6F28, 63623 }, { 0x6F29, 63628 }, { 0x6F2A, 63633 }, { 0x6F2B, 63638 }, { 0x6F2C, 63643 }, { 0x6F2D, 63648 }, { 0x6F2E, 63653 }, { 0x6F2F, 63658 }, { 0x6F30, 63663 }, { 0x6F31, 63668 }, { 0x6F32, 63673 }, { 0x6F33, 63678 }, { 0x6F34, 63683 }, { 0x6F35, 63688 }, { 0x6F36, 63693 }, { 0x6F37, 63698 }, { 0x6F38, 63703 }, { 0x6F39, 63708 }, { 0x6F3A, 63713 }, { 0x6FE1, 63718 }, { 0x6F5D, 63721 }, { 0x6F60, 63725 }, { 0x6F3D, 63729 }, { 0x6F09, 63733 }, { 0x6F5E, 63736 }, { 0x6FE4, 63738 }, { 0x6F04, 63741 }, { 0x6F1D, 63744 }, { 0x6FE3, 63747 }, { 0x6F03, 63749 }, { 0x6F05, 63752 }, { 0x6F3C, 63755 }, { 0x6F0F, 63758 }, { 0x6F0A, 63760 }, { 0x6F1F, 63762 }, { 0x6F5C, 63765 }, { 0x6F06, 63768 }, { 0x6F1C, 63770 }, { 0x6F02, 63773 }, { 0x6F1B, 63776 }, { 0x6F07, 63778 }, { 0x6F3E, 63780 }, { 0x6F20, 63783 }, { 0x6F01, 63786 }, { 0x6F1E, 63789 }, { 0x6F0D, 63792 }, { 0x223A, 63794 }, { 0x6F62, 63796 }, { 0x6FED, 63800 }, { 0x6FE8, 63803 }, { 0x6F63, 63807 }, { 0x6FEE, 63811 }, { 0x6FA0, 63814 }, { 0x6FC2, 63817 }, { 0x6FC7, 63821 }, { 0x6FDC, 63825 }, { 0x6FCC, 63829 }, { 0x6FD3, 63833 }, { 0x6FC3, 63837 }, { 0x6FC6, 63841 }, { 0x6FDA, 63845 }, { 0x6FCF, 63849 }, { 0x6FCD, 63853 }, { 0x6FD5, 63857 }, { 0x6FD6, 63861 }, { 0x6FC4, 63865 }, { 0x6FCB, 63869 }, { 0x6FDB, 63873 }, { 0x6FD2, 63877 }, { 0x6FD7, 63881 }, { 0x6FCE, 63885 }, { 0x6FD4, 63889 }, { 0x6FC5, 63893 }, { 0x6FCA, 63897 }, { 0x6FB5, 63901 }, { 0x6FB8, 63905 }, { 0x6FBE, 63909 }, { 0x6FB7, 63913 }, { 0x6FB1, 63917 }, { 0x6FA4, 63921 }, { 0x6FB2, 63925 }, { 0x6FA9, 63929 }, { 0x6FA1, 63933 }, { 0x6FA7, 63937 }, { 0x6FBA, 63941 }, { 0x6FBB, 63945 }, { 0x6FBD, 63949 }, { 0x6FBC, 63953 }, { 0x6FB6, 63957 }, { 0x6FB4, 63961 }, { 0x6FAD, 63965 }, { 0x6FB9, 63969 }, { 0x6FB3, 63973 }, { 0x6FA3, 63977 }, { 0x6FA5, 63981 }, { 0x6FA6, 63985 }, { 0x6FB0, 63989 }, { 0x6FAB, 63993 }, { 0x6FAC, 63997 }, { 0x6FA2, 64001 }, { 0x6FA8, 64005 }, { 0x6FAA, 64009 }, { 0x6FAF, 64013 }, { 0x6FAE, 64017 }, { 0x6FEA, 64021 }, { 0x6F71, 64024 }, { 0x6F74, 64028 }, { 0x6F72, 64032 }, { 0x6F9D, 64036 }, { 0x6F75, 64040 }, { 0x6F73, 64044 }, { 0x6F8A, 64048 }, { 0x6F8D, 64052 }, { 0x6F8B, 64056 }, { 0x6F8E, 64060 }, { 0x6F8C, 64064 }, { 0x6F76, 64068 }, { 0x6F79, 64072 }, { 0x6F77, 64076 }, { 0x6F7A, 64080 }, { 0x6F78, 64084 }, { 0x6F8F, 64088 }, { 0x6F92, 64092 }, { 0x6F90, 64096 }, { 0x6F93, 64100 }, { 0x6F91, 64104 }, { 0x6F85, 64108 }, { 0x6F88, 64112 }, { 0x6F86, 64116 }, { 0x6F89, 64120 }, { 0x6F87, 64124 }, { 0x6F97, 64128 }, { 0x6F9A, 64132 }, { 0x6F98, 64136 }, { 0x6F9B, 64140 }, { 0x6F99, 64144 }, { 0x6F7B, 64148 }, { 0x6F7E, 64152 }, { 0x6F7C, 64156 }, { 0x6F7F, 64160 }, { 0x6F7D, 64164 }, { 0x6F80, 64168 }, { 0x6F83, 64172 }, { 0x6F81, 64176 }, { 0x6F84, 64180 }, { 0x6F82, 64184 }, { 0x6F9C, 64188 }, { 0x6F66, 64192 }, { 0x6F94, 64196 }, { 0x6F96, 64200 }, { 0x6F95, 64204 }, { 0x6F67, 64208 }, { 0x6F6A, 64213 }, { 0x6F68, 64218 }, { 0x6F6B, 64223 }, { 0x6F69, 64228 }, { 0x6F6F, 64233 }, { 0x6F6C, 64238 }, { 0x6F6E, 64243 }, { 0x6F6D, 64248 }, { 0x6F65, 64253 }, { 0x6F9E, 64257 }, { 0x6F9F, 64262 }, { 0x6FEC, 64267 }, { 0x6FE9, 64270 }, { 0x6FEB, 64273 }, { 0x6F61, 64276 }, { 0x6F64, 64280 }, { 0x6F70, 64283 }, { 0x22B9, 64288 }, { 0x231B, 64291 }, { 0x2261, 64292 }, { 0x29E5, 64294 }, { 0x2A67, 64299 }, { 0x29E1, 64303 }, { 0x2206, 64305 }, { 0x2380, 64306 }, { 0x2064, 64308 }, { 0x2062, 64310 }, { 0x2063, 64312 }, { 0x2939, 64314 }, { 0x219E, 64318 }, { 0x219C, 64322 }, { 0x2190, 64325 }, { 0x21E4, 64327 }, { 0x21B9, 64331 }, { 0x291D, 64340 }, { 0x21A4, 64345 }, { 0x291F, 64349 }, { 0x21C6, 64356 }, { 0x2B11, 64361 }, { 0x2B10, 64366 }, { 0x21A9, 64371 }, { 0x21AB, 64375 }, { 0x2946, 64379 }, { 0x21A2, 64384 }, { 0x2B3A, 64388 }, { 0x2B39, 64396 }, { 0x2B38, 64403 }, { 0x21FA, 64408 }, { 0x219A, 64414 }, { 0x21F7, 64418 }, { 0x2943, 64423 }, { 0x2973, 64429 }, { 0x2B4A, 64434 }, { 0x2B4B, 64440 }, { 0x2B42, 64446 }, { 0x2B3E, 64453 }, { 0x297A, 64457 }, { 0x2977, 64461 }, { 0x2B05, 64465 }, { 0x21E6, 64468 }, { 0x21E0, 64471 }, { 0x290C, 64474 }, { 0x21D0, 64478 }, { 0x2906, 64481 }, { 0x21CD, 64486 }, { 0x2902, 64491 }, { 0x291B, 64497 }, { 0x21C7, 64500 }, { 0x290E, 64503 }, { 0x21DA, 64507 }, { 0x21CB, 64510 }, { 0x2952, 64515 }, { 0x295A, 64522 }, { 0x296A, 64529 }, { 0x2962, 64537 }, { 0x2966, 64548 }, { 0x2956, 64559 }, { 0x295E, 64566 }, { 0x2967, 64573 }, { 0x296B, 64584 }, { 0x21BC, 64592 }, { 0x21BD, 64597 }, { 0x21DC, 64602 }, { 0x2B45, 64605 }, { 0x2919, 64608 }, { 0x2B36, 64610 }, { 0x2B3B, 64615 }, { 0x2B3D, 64620 }, { 0x2B3C, 64629 }, { 0x2B35, 64637 }, { 0x2B34, 64644 }, { 0x2B37, 64650 }, { 0x21FD, 64655 }, { 0x2264, 64658 }, { 0x2A7D, 64662 }, { 0x2A81, 64667 }, { 0x2A83, 64675 }, { 0x2A7F, 64684 }, { 0x2272, 64692 }, { 0x2A85, 64696 }, { 0x2276, 64699 }, { 0x2A89, 64702 }, { 0x2A87, 64706 }, { 0x2268, 64712 }, { 0x22E6, 64717 }, { 0x2266, 64722 }, { 0x003C, 64726 }, { 0x22D6, 64728 }, { 0x2A79, 64731 }, { 0x2A7B, 64735 }, { 0x2A8D, 64740 }, { 0x2A8F, 64745 }, { 0x2A93, 64750 }, { 0x2976, 64759 }, { 0x2A8B, 64763 }, { 0x2A91, 64769 }, { 0x22DA, 64775 }, { 0x2AA6, 64780 }, { 0x2AA8, 64784 }, { 0x2607, 64791 }, { 0x0D57, 64792 }, { 0x0D79, 64796 }, { 0x0D4D, 64799 }, { 0x0D03, 64802 }, { 0x0D02, 64805 }, { 0x0D3D, 64808 }, { 0x0D67, 64811 }, { 0x0D6C, 64814 }, { 0x0D68, 64817 }, { 0x0D6B, 64820 }, { 0x0D6A, 64823 }, { 0x0D6F, 64826 }, { 0x0D66, 64829 }, { 0x0D6E, 64832 }, { 0x0D6D, 64835 }, { 0x0D69, 64838 }, { 0x0D46, 64841 }, { 0x0D3F, 64845 }, { 0x0D4A, 64849 }, { 0x0D41, 64853 }, { 0x0D3E, 64857 }, { 0x0D48, 64861 }, { 0x0D4C, 64865 }, { 0x0D47, 64869 }, { 0x0D40, 64873 }, { 0x0D4B, 64877 }, { 0x0D42, 64881 }, { 0x0D62, 64885 }, { 0x0D43, 64890 }, { 0x0D63, 64895 }, { 0x0D44, 64900 }, { 0x0D05, 64905 }, { 0x0D0E, 64908 }, { 0x0D07, 64911 }, { 0x0D12, 64914 }, { 0x0D09, 64917 }, { 0x0D06, 64920 }, { 0x0D10, 64923 }, { 0x0D14, 64926 }, { 0x0D2C, 64929 }, { 0x0D1A, 64932 }, { 0x0D26, 64935 }, { 0x0D0F, 64938 }, { 0x0D17, 64941 }, { 0x0D39, 64944 }, { 0x0D08, 64947 }, { 0x0D1C, 64950 }, { 0x0D15, 64953 }, { 0x0D32, 64956 }, { 0x0D2E, 64959 }, { 0x0D28, 64962 }, { 0x0D13, 64965 }, { 0x0D2A, 64968 }, { 0x0D30, 64971 }, { 0x0D38, 64974 }, { 0x0D24, 64977 }, { 0x0D0A, 64980 }, { 0x0D35, 64983 }, { 0x0D2F, 64986 }, { 0x0D2D, 64989 }, { 0x0D1B, 64992 }, { 0x0D21, 64995 }, { 0x0D27, 64998 }, { 0x0D18, 65001 }, { 0x0D1D, 65004 }, { 0x0D16, 65007 }, { 0x0D33, 65010 }, { 0x0D19, 65013 }, { 0x0D23, 65016 }, { 0x0D1E, 65019 }, { 0x0D2B, 65022 }, { 0x0D31, 65025 }, { 0x0D36, 65028 }, { 0x0D37, 65031 }, { 0x0D25, 65034 }, { 0x0D1F, 65037 }, { 0x0D22, 65040 }, { 0x0D34, 65043 }, { 0x0D20, 65046 }, { 0x0D7F, 65049 }, { 0x0D7D, 65053 }, { 0x0D7B, 65057 }, { 0x0D7E, 65061 }, { 0x0D7A, 65065 }, { 0x0D7C, 65069 }, { 0x0D0C, 65073 }, { 0x0D0B, 65077 }, { 0x0D61, 65081 }, { 0x0D60, 65085 }, { 0x0D71, 65089 }, { 0x0D72, 65093 }, { 0x0D70, 65097 }, { 0x0D74, 65100 }, { 0x0D73, 65104 }, { 0x0D75, 65108 }, { 0x00BA, 65112 }, { 0x1805, 65115 }, { 0x180B, 65118 }, { 0x180C, 65123 }, { 0x180D, 65128 }, { 0x1803, 65133 }, { 0x1807, 65136 }, { 0x1806, 65141 }, { 0x1800, 65145 }, { 0x1804, 65147 }, { 0x1802, 65149 }, { 0x1811, 65151 }, { 0x1816, 65154 }, { 0x1812, 65157 }, { 0x1815, 65160 }, { 0x1814, 65163 }, { 0x1819, 65166 }, { 0x1810, 65169 }, { 0x1818, 65172 }, { 0x1817, 65175 }, { 0x1813, 65178 }, { 0x180E, 65181 }, { 0x1820, 65184 }, { 0x1821, 65187 }, { 0x1822, 65190 }, { 0x1823, 65193 }, { 0x1824, 65196 }, { 0x182A, 65199 }, { 0x1833, 65202 }, { 0x1827, 65205 }, { 0x1839, 65208 }, { 0x182D, 65211 }, { 0x1835, 65214 }, { 0x183A, 65217 }, { 0x182F, 65220 }, { 0x182E, 65223 }, { 0x1828, 65226 }, { 0x1825, 65229 }, { 0x182B, 65232 }, { 0x182C, 65235 }, { 0x1837, 65238 }, { 0x1830, 65241 }, { 0x1832, 65244 }, { 0x1826, 65247 }, { 0x1838, 65250 }, { 0x1836, 65253 }, { 0x183D, 65256 }, { 0x1887, 65259 }, { 0x1888, 65264 }, { 0x1897, 65269 }, { 0x188B, 65274 }, { 0x1891, 65279 }, { 0x1889, 65284 }, { 0x1892, 65289 }, { 0x1890, 65294 }, { 0x1896, 65299 }, { 0x188E, 65304 }, { 0x188A, 65309 }, { 0x188F, 65314 }, { 0x1893, 65319 }, { 0x1894, 65324 }, { 0x188C, 65329 }, { 0x1895, 65334 }, { 0x18A6, 65339 }, { 0x18A7, 65345 }, { 0x188D, 65351 }, { 0x1886, 65356 }, { 0x1885, 65362 }, { 0x1882, 65367 }, { 0x18A9, 65372 }, { 0x1883, 65377 }, { 0x1881, 65382 }, { 0x1880, 65388 }, { 0x1884, 65394 }, { 0x1829, 65400 }, { 0x1834, 65403 }, { 0x1842, 65406 }, { 0x183E, 65409 }, { 0x183B, 65412 }, { 0x1840, 65415 }, { 0x1831, 65418 }, { 0x183C, 65421 }, { 0x1841, 65424 }, { 0x183F, 65427 }, { 0x185D, 65430 }, { 0x185E, 65434 }, { 0x1861, 65438 }, { 0x1869, 65442 }, { 0x186B, 65446 }, { 0x1864, 65450 }, { 0x1865, 65454 }, { 0x185F, 65458 }, { 0x186A, 65462 }, { 0x1863, 65466 }, { 0x1866, 65470 }, { 0x1868, 65474 }, { 0x1860, 65478 }, { 0x186F, 65482 }, { 0x1862, 65486 }, { 0x1871, 65490 }, { 0x186C, 65494 }, { 0x186D, 65498 }, { 0x1870, 65502 }, { 0x1867, 65506 }, { 0x186E, 65510 }, { 0x1872, 65514 }, { 0x1844, 65518 }, { 0x1845, 65522 }, { 0x1846, 65526 }, { 0x1847, 65530 }, { 0x184B, 65534 }, { 0x1851, 65538 }, { 0x184E, 65542 }, { 0x1853, 65546 }, { 0x1857, 65550 }, { 0x184F, 65554 }, { 0x1848, 65558 }, { 0x184C, 65562 }, { 0x184D, 65566 }, { 0x1850, 65570 }, { 0x1849, 65574 }, { 0x1856, 65578 }, { 0x1855, 65582 }, { 0x1898, 65586 }, { 0x1899, 65592 }, { 0x184A, 65598 }, { 0x1852, 65602 }, { 0x185C, 65606 }, { 0x1858, 65610 }, { 0x1859, 65614 }, { 0x185A, 65618 }, { 0x185B, 65622 }, { 0x1854, 65626 }, { 0x1843, 65630 }, { 0x1873, 65636 }, { 0x1876, 65640 }, { 0x1874, 65644 }, { 0x1875, 65648 }, { 0x189C, 65652 }, { 0x18A0, 65658 }, { 0x18A5, 65664 }, { 0x18A8, 65670 }, { 0x18A3, 65676 }, { 0x18A1, 65682 }, { 0x189A, 65688 }, { 0x189D, 65694 }, { 0x18AA, 65700 }, { 0x189B, 65706 }, { 0x18A2, 65712 }, { 0x189E, 65718 }, { 0x18A4, 65724 }, { 0x189F, 65730 }, { 0x1877, 65736 }, { 0x1809, 65740 }, { 0x1808, 65744 }, { 0x180A, 65747 }, { 0x1801, 65749 }, { 0x2029, 65751 }, { 0x267E, 65753 }, { 0x22D4, 65756 }, { 0x2ADA, 65757 }, { 0x2057, 65761 }, { 0x2A0C, 65763 }, { 0x0022, 65766 }, { 0x2673, 65768 }, { 0x2674, 65773 }, { 0x2675, 65778 }, { 0x2676, 65783 }, { 0x2677, 65788 }, { 0x2678, 65793 }, { 0x2679, 65798 }, { 0x267A, 65803 }, { 0x203B, 65808 }, { 0x2A3D, 65810 }, { 0x003B, 65813 }, { 0x2744, 65814 }, { 0x2222, 65815 }, { 0x29A1, 65817 }, { 0x29A0, 65821 }, { 0x2081, 65825 }, { 0x2086, 65827 }, { 0x2082, 65829 }, { 0x2085, 65831 }, { 0x2084, 65833 }, { 0x208D, 65835 }, { 0x2089, 65838 }, { 0x208A, 65840 }, { 0x2080, 65843 }, { 0x2088, 65845 }, { 0x208B, 65847 }, { 0x208E, 65849 }, { 0x2087, 65852 }, { 0x2083, 65854 }, { 0x208C, 65856 }, { 0x23B2, 65859 }, { 0x2A0B, 65861 }, { 0x23B3, 65864 }, { 0x1BAA, 65866 }, { 0x1B80, 65869 }, { 0x1B81, 65872 }, { 0x1B82, 65875 }, { 0x1BB1, 65878 }, { 0x1BB6, 65881 }, { 0x1BB2, 65884 }, { 0x1BB5, 65887 }, { 0x1BB4, 65890 }, { 0x1BB9, 65893 }, { 0x1BB0, 65896 }, { 0x1BB8, 65899 }, { 0x1BB7, 65902 }, { 0x1BB3, 65905 }, { 0x1BA8, 65908 }, { 0x1BA5, 65912 }, { 0x1BA4, 65916 }, { 0x1BA7, 65920 }, { 0x1BA6, 65924 }, { 0x1BA9, 65928 }, { 0x1B83, 65932 }, { 0x1B88, 65935 }, { 0x1B84, 65938 }, { 0x1B87, 65941 }, { 0x1B85, 65944 }, { 0x1B86, 65947 }, { 0x1B98, 65950 }, { 0x1B8E, 65953 }, { 0x1B93, 65956 }, { 0x1B89, 65959 }, { 0x1B96, 65962 }, { 0x1B8C, 65965 }, { 0x1BA0, 65968 }, { 0x1B8F, 65971 }, { 0x1B8A, 65974 }, { 0x1B9C, 65977 }, { 0x1B99, 65980 }, { 0x1B94, 65983 }, { 0x1B95, 65986 }, { 0x1B8B, 65989 }, { 0x1B9B, 65992 }, { 0x1B9E, 65995 }, { 0x1B92, 65998 }, { 0x1B97, 66001 }, { 0x1B9D, 66004 }, { 0x1B9F, 66007 }, { 0x1B9A, 66010 }, { 0x1B90, 66013 }, { 0x1BAE, 66016 }, { 0x1B8D, 66019 }, { 0x1B91, 66022 }, { 0x1BAF, 66025 }, { 0x1BA3, 66028 }, { 0x1BA2, 66032 }, { 0x1BA1, 66036 }, { 0x2121, 66040 }, { 0x2706, 66042 }, { 0x2315, 66045 }, { 0x9353, 66047 }, { 0x931D, 66052 }, { 0x932D, 66055 }, { 0x9323, 66060 }, { 0x931C, 66064 }, { 0x9307, 66067 }, { 0x9343, 66071 }, { 0x932F, 66074 }, { 0x9346, 66079 }, { 0x9308, 66082 }, { 0x9314, 66085 }, { 0x9331, 66088 }, { 0x933B, 66091 }, { 0x9344, 66094 }, { 0x930C, 66097 }, { 0x9306, 66100 }, { 0x9321, 66103 }, { 0x933D, 66106 }, { 0x9320, 66110 }, { 0x9336, 66113 }, { 0x9325, 66116 }, { 0x932A, 66119 }, { 0x9335, 66122 }, { 0x9319, 66125 }, { 0x9309, 66128 }, { 0x934F, 66131 }, { 0x9315, 66134 }, { 0x9349, 66137 }, { 0x9350, 66140 }, { 0x9316, 66143 }, { 0x930A, 66147 }, { 0x9327, 66151 }, { 0x9340, 66154 }, { 0x9339, 66157 }, { 0x9324, 66160 }, { 0x9334, 66163 }, { 0x931A, 66166 }, { 0x9345, 66169 }, { 0x9317, 66172 }, { 0x933A, 66175 }, { 0x932B, 66178 }, { 0x934D, 66181 }, { 0x9312, 66184 }, { 0x932E, 66187 }, { 0x934C, 66190 }, { 0x9329, 66193 }, { 0x9337, 66196 }, { 0x930E, 66201 }, { 0x9326, 66205 }, { 0x9338, 66208 }, { 0x9348, 66211 }, { 0x9347, 66214 }, { 0x931F, 66217 }, { 0x9318, 66220 }, { 0x9356, 66223 }, { 0x9328, 66226 }, { 0x933F, 66229 }, { 0x9332, 66233 }, { 0x9355, 66236 }, { 0x932C, 66239 }, { 0x934B, 66242 }, { 0x934E, 66245 }, { 0x9352, 66248 }, { 0x931E, 66251 }, { 0x9310, 66254 }, { 0x9330, 66257 }, { 0x934A, 66260 }, { 0x930D, 66263 }, { 0x931B, 66266 }, { 0x9351, 66269 }, { 0x930B, 66272 }, { 0x9333, 66275 }, { 0x933E, 66278 }, { 0x9313, 66281 }, { 0x9341, 66284 }, { 0x9322, 66287 }, { 0x9354, 66290 }, { 0x933C, 66293 }, { 0x9311, 66296 }, { 0x930F, 66299 }, { 0x9342, 66304 }, { 0x2234, 66307 }, { 0x2672, 66308 }, { 0x26AF, 66311 }, { 0x6E00, 66314 }, { 0x6E01, 66316 }, { 0x6E02, 66318 }, { 0x6E03, 66320 }, { 0x6E04, 66322 }, { 0x6E05, 66324 }, { 0x6E06, 66326 }, { 0x6E07, 66328 }, { 0x6E08, 66330 }, { 0x6E09, 66332 }, { 0x6E0A, 66334 }, { 0x6E0B, 66336 }, { 0x6E0C, 66338 }, { 0x6E0D, 66340 }, { 0x6E0E, 66342 }, { 0x6E0F, 66344 }, { 0xC100, 66346 }, { 0xC101, 66348 }, { 0xC102, 66350 }, { 0xC103, 66352 }, { 0xC104, 66354 }, { 0xC105, 66356 }, { 0xC106, 66358 }, { 0xC107, 66360 }, { 0xC108, 66362 }, { 0xC109, 66364 }, { 0xC10A, 66366 }, { 0xC10B, 66368 }, { 0xC10C, 66370 }, { 0xC10D, 66372 }, { 0xC10E, 66374 }, { 0xC10F, 66376 }, { 0xC110, 66378 }, { 0xC111, 66380 }, { 0xC112, 66382 }, { 0xC113, 66384 }, { 0xC114, 66386 }, { 0xC115, 66388 }, { 0xC116, 66390 }, { 0xC117, 66392 }, { 0xC118, 66394 }, { 0xC119, 66396 }, { 0xC11A, 66398 }, { 0xC11B, 66400 }, { 0xC11C, 66402 }, { 0xC11D, 66404 }, { 0xC11E, 66406 }, { 0xC11F, 66408 }, { 0xC120, 66410 }, { 0xC121, 66412 }, { 0xC122, 66414 }, { 0xC123, 66416 }, { 0xC124, 66418 }, { 0xC125, 66420 }, { 0xC126, 66422 }, { 0xC127, 66424 }, { 0xC128, 66426 }, { 0xC129, 66428 }, { 0xC12A, 66430 }, { 0xC12B, 66432 }, { 0xC12C, 66434 }, { 0xC12D, 66436 }, { 0xC12E, 66438 }, { 0xC12F, 66440 }, { 0xC130, 66442 }, { 0xC131, 66444 }, { 0xC132, 66446 }, { 0xC133, 66448 }, { 0xC134, 66450 }, { 0xC135, 66452 }, { 0xC136, 66454 }, { 0xC137, 66456 }, { 0xC138, 66458 }, { 0xC139, 66460 }, { 0xC13A, 66462 }, { 0xC13B, 66464 }, { 0xC13C, 66466 }, { 0xC13D, 66468 }, { 0xC13E, 66470 }, { 0xC13F, 66472 }, { 0xC140, 66474 }, { 0xC141, 66476 }, { 0xC142, 66478 }, { 0xC143, 66480 }, { 0xC144, 66482 }, { 0xC145, 66484 }, { 0xC146, 66486 }, { 0xC147, 66488 }, { 0xC148, 66490 }, { 0xC149, 66492 }, { 0xC14A, 66494 }, { 0xC14B, 66496 }, { 0xC14C, 66498 }, { 0xC14D, 66500 }, { 0xC14E, 66502 }, { 0xC14F, 66504 }, { 0xC150, 66506 }, { 0xC151, 66508 }, { 0xC152, 66510 }, { 0xC153, 66512 }, { 0xC154, 66514 }, { 0xC155, 66516 }, { 0xC156, 66518 }, { 0xC157, 66520 }, { 0xC158, 66522 }, { 0xC159, 66524 }, { 0xC15A, 66526 }, { 0xC15B, 66528 }, { 0xC15C, 66530 }, { 0xC15D, 66532 }, { 0xC15E, 66534 }, { 0xC15F, 66536 }, { 0xC160, 66538 }, { 0xC161, 66540 }, { 0xC162, 66542 }, { 0xC163, 66544 }, { 0xC164, 66546 }, { 0xC165, 66548 }, { 0xC166, 66550 }, { 0xC167, 66552 }, { 0xC168, 66554 }, { 0xC169, 66556 }, { 0xC16A, 66558 }, { 0xC16B, 66560 }, { 0xC16C, 66562 }, { 0xC16D, 66564 }, { 0xC16E, 66566 }, { 0xC16F, 66568 }, { 0xC170, 66570 }, { 0xC171, 66572 }, { 0xC172, 66574 }, { 0xC173, 66576 }, { 0xC174, 66578 }, { 0xC175, 66580 }, { 0xC176, 66582 }, { 0xC177, 66584 }, { 0xC178, 66586 }, { 0xC179, 66588 }, { 0xC17A, 66590 }, { 0xC17B, 66592 }, { 0xC17C, 66594 }, { 0xC17D, 66596 }, { 0xC17E, 66598 }, { 0xC17F, 66600 }, { 0xC180, 66602 }, { 0xC181, 66604 }, { 0xC182, 66606 }, { 0xC183, 66608 }, { 0xC184, 66610 }, { 0xC185, 66612 }, { 0xC186, 66614 }, { 0xC187, 66616 }, { 0xC188, 66618 }, { 0xC189, 66620 }, { 0xC18A, 66622 }, { 0xC18B, 66624 }, { 0xC18C, 66626 }, { 0xC18D, 66628 }, { 0xC18E, 66630 }, { 0xC18F, 66632 }, { 0xC190, 66634 }, { 0xC191, 66636 }, { 0xC192, 66638 }, { 0xC193, 66640 }, { 0xC194, 66642 }, { 0xC195, 66644 }, { 0xC196, 66646 }, { 0xC197, 66648 }, { 0xC198, 66650 }, { 0xC199, 66652 }, { 0xC19A, 66654 }, { 0xC19B, 66656 }, { 0xC19C, 66658 }, { 0xC19D, 66660 }, { 0xC19E, 66662 }, { 0xC19F, 66664 }, { 0xC1A0, 66666 }, { 0xC1A1, 66668 }, { 0xC1A2, 66670 }, { 0xC1A3, 66672 }, { 0xC1A4, 66674 }, { 0xC1A5, 66676 }, { 0xC1A6, 66678 }, { 0xC1A7, 66680 }, { 0xC1A8, 66682 }, { 0xC1A9, 66684 }, { 0xC1AA, 66686 }, { 0xC1AB, 66688 }, { 0xC1AC, 66690 }, { 0xC1AD, 66692 }, { 0xC1AE, 66694 }, { 0xC1AF, 66696 }, { 0xC1B0, 66698 }, { 0xC1B1, 66700 }, { 0xC1B2, 66702 }, { 0xC1B3, 66704 }, { 0xC1B4, 66706 }, { 0xC1B5, 66708 }, { 0xC1B6, 66710 }, { 0xC1B7, 66712 }, { 0xC1B8, 66714 }, { 0xC1B9, 66716 }, { 0xC1BA, 66718 }, { 0xC1BB, 66720 }, { 0xC1BC, 66722 }, { 0xC1BD, 66724 }, { 0xC1BE, 66726 }, { 0xC1BF, 66728 }, { 0xC1C0, 66730 }, { 0xC1C1, 66732 }, { 0xC1C2, 66734 }, { 0xC1C3, 66736 }, { 0xC1C4, 66738 }, { 0xC1C5, 66740 }, { 0xC1C6, 66742 }, { 0xC1C7, 66744 }, { 0xC1C8, 66746 }, { 0xC1C9, 66748 }, { 0xC1CA, 66750 }, { 0xC1CB, 66752 }, { 0xC1CC, 66754 }, { 0xC1CD, 66756 }, { 0xC1CE, 66758 }, { 0xC1CF, 66760 }, { 0xC1D0, 66762 }, { 0xC1D1, 66764 }, { 0xC1D2, 66766 }, { 0xC1D3, 66768 }, { 0xC1D4, 66770 }, { 0xC1D5, 66772 }, { 0xC1D6, 66774 }, { 0xC1D7, 66776 }, { 0xC1D8, 66778 }, { 0xC1D9, 66780 }, { 0xC1DA, 66782 }, { 0xC1DB, 66784 }, { 0xC1DC, 66786 }, { 0xC1DD, 66788 }, { 0xC1DE, 66790 }, { 0xC1DF, 66792 }, { 0xC1E0, 66794 }, { 0xC1E1, 66796 }, { 0xC1E2, 66798 }, { 0xC1E3, 66800 }, { 0xC1E4, 66802 }, { 0xC1E5, 66804 }, { 0xC1E6, 66806 }, { 0xC1E7, 66808 }, { 0xC1E8, 66810 }, { 0xC1E9, 66812 }, { 0xC1EA, 66814 }, { 0xC1EB, 66816 }, { 0xC1EC, 66818 }, { 0xC1ED, 66820 }, { 0xC1EE, 66822 }, { 0xC1EF, 66824 }, { 0x0027, 66826 }, { 0x2250, 66827 }, { 0x6E4E, 66830 }, { 0x6E4A, 66833 }, { 0x005E, 66835 }, { 0x0040, 66837 }, { 0x2052, 66839 }, { 0x2201, 66842 }, { 0x2381, 66843 }, { 0x260B, 66846 }, { 0x0950, 66848 }, { 0x0971, 66850 }, { 0x093C, 66855 }, { 0x094D, 66858 }, { 0x0903, 66861 }, { 0x0902, 66864 }, { 0x093D, 66867 }, { 0x0901, 66870 }, { 0x0954, 66873 }, { 0x0964, 66876 }, { 0x0967, 66878 }, { 0x096C, 66881 }, { 0x0968, 66884 }, { 0x096B, 66887 }, { 0x096A, 66890 }, { 0x096F, 66893 }, { 0x0966, 66896 }, { 0x096E, 66899 }, { 0x096D, 66902 }, { 0x0969, 66905 }, { 0x0953, 66908 }, { 0x0947, 66911 }, { 0x093F, 66915 }, { 0x094B, 66919 }, { 0x0941, 66923 }, { 0x093E, 66927 }, { 0x0948, 66931 }, { 0x094C, 66935 }, { 0x0940, 66939 }, { 0x0942, 66943 }, { 0x0946, 66947 }, { 0x094A, 66952 }, { 0x0945, 66957 }, { 0x0949, 66962 }, { 0x0962, 66967 }, { 0x0943, 66972 }, { 0x0963, 66977 }, { 0x0944, 66982 }, { 0x0965, 66987 }, { 0x0905, 66990 }, { 0x090F, 66993 }, { 0x0907, 66996 }, { 0x0913, 66999 }, { 0x0909, 67002 }, { 0x0906, 67005 }, { 0x0910, 67008 }, { 0x0914, 67011 }, { 0x092C, 67014 }, { 0x091A, 67017 }, { 0x0926, 67020 }, { 0x095E, 67023 }, { 0x0917, 67026 }, { 0x0939, 67029 }, { 0x0908, 67032 }, { 0x091C, 67035 }, { 0x0915, 67038 }, { 0x0932, 67041 }, { 0x092E, 67044 }, { 0x0928, 67047 }, { 0x092A, 67050 }, { 0x0958, 67053 }, { 0x0930, 67056 }, { 0x0938, 67059 }, { 0x0924, 67062 }, { 0x090A, 67065 }, { 0x0935, 67068 }, { 0x092F, 67071 }, { 0x095B, 67074 }, { 0x097F, 67077 }, { 0x092D, 67080 }, { 0x091B, 67083 }, { 0x0921, 67086 }, { 0x0927, 67089 }, { 0x097B, 67092 }, { 0x0918, 67095 }, { 0x091D, 67098 }, { 0x097C, 67101 }, { 0x0916, 67104 }, { 0x0933, 67107 }, { 0x0919, 67110 }, { 0x0923, 67113 }, { 0x091E, 67116 }, { 0x092B, 67119 }, { 0x095D, 67122 }, { 0x0931, 67125 }, { 0x0936, 67128 }, { 0x0937, 67131 }, { 0x0925, 67134 }, { 0x091F, 67137 }, { 0x095F, 67140 }, { 0x097E, 67143 }, { 0x0922, 67146 }, { 0x095A, 67149 }, { 0x0959, 67152 }, { 0x0934, 67155 }, { 0x0929, 67158 }, { 0x0920, 67161 }, { 0x095C, 67164 }, { 0x0904, 67167 }, { 0x090E, 67171 }, { 0x0912, 67175 }, { 0x0972, 67179 }, { 0x090D, 67183 }, { 0x0911, 67187 }, { 0x097D, 67191 }, { 0x090C, 67195 }, { 0x090B, 67199 }, { 0x0961, 67203 }, { 0x0960, 67207 }, { 0x0951, 67211 }, { 0x0952, 67215 }, { 0x0970, 67219 }, { 0x224F, 67222 }, { 0x23E7, 67224 }, { 0x224D, 67226 }, { 0x2A78, 67228 }, { 0x2C3B, 67233 }, { 0x2C4A, 67237 }, { 0x2C56, 67241 }, { 0x2C53, 67245 }, { 0x2C30, 67249 }, { 0x2C58, 67253 }, { 0x2C41, 67258 }, { 0x2C49, 67262 }, { 0x2C4E, 67266 }, { 0x2C4C, 67270 }, { 0x2C46, 67274 }, { 0x2C31, 67278 }, { 0x2C5A, 67282 }, { 0x2C48, 67286 }, { 0x2C39, 67290 }, { 0x2C3D, 67294 }, { 0x2C4B, 67298 }, { 0x2C32, 67302 }, { 0x2C51, 67306 }, { 0x2C50, 67310 }, { 0x2C4F, 67314 }, { 0x2C34, 67318 }, { 0x2C37, 67322 }, { 0x2C47, 67326 }, { 0x2C40, 67330 }, { 0x2C43, 67334 }, { 0x2C44, 67338 }, { 0x2C54, 67342 }, { 0x2C55, 67347 }, { 0x2C35, 67354 }, { 0x2C4D, 67358 }, { 0x2C3C, 67362 }, { 0x2C42, 67366 }, { 0x2C45, 67370 }, { 0x2C38, 67374 }, { 0x2C33, 67378 }, { 0x2C3A, 67382 }, { 0x2C59, 67387 }, { 0x2C57, 67393 }, { 0x2C5B, 67399 }, { 0x2C3E, 67403 }, { 0x2C3F, 67407 }, { 0x2C5C, 67411 }, { 0x2C52, 67415 }, { 0x2C36, 67420 }, { 0x2C5E, 67424 }, { 0x2C5D, 67429 }, { 0x2C0B, 67434 }, { 0x2C1A, 67438 }, { 0x2C26, 67442 }, { 0x2C23, 67446 }, { 0x2C00, 67450 }, { 0x2C28, 67454 }, { 0x2C11, 67459 }, { 0x2C19, 67463 }, { 0x2C1E, 67467 }, { 0x2C1C, 67471 }, { 0x2C16, 67475 }, { 0x2C01, 67479 }, { 0x2C2A, 67483 }, { 0x2C18, 67487 }, { 0x2C09, 67491 }, { 0x2C0D, 67495 }, { 0x2C1B, 67499 }, { 0x2C02, 67503 }, { 0x2C21, 67507 }, { 0x2C20, 67511 }, { 0x2C1F, 67515 }, { 0x2C04, 67519 }, { 0x2C07, 67523 }, { 0x2C17, 67527 }, { 0x2C10, 67531 }, { 0x2C13, 67535 }, { 0x2C14, 67539 }, { 0x2C24, 67543 }, { 0x2C25, 67548 }, { 0x2C05, 67555 }, { 0x2C1D, 67559 }, { 0x2C0C, 67563 }, { 0x2C12, 67567 }, { 0x2C15, 67571 }, { 0x2C08, 67575 }, { 0x2C03, 67579 }, { 0x2C0A, 67583 }, { 0x2C29, 67588 }, { 0x2C27, 67594 }, { 0x2C2B, 67600 }, { 0x2C0E, 67604 }, { 0x2C0F, 67608 }, { 0x2C2C, 67612 }, { 0x2C22, 67616 }, { 0x2C06, 67621 }, { 0x2C2E, 67625 }, { 0x2C2D, 67630 }, { 0x223B, 67635 }, { 0x2015, 67636 }, { 0x23AF, 67638 }, { 0x26A9, 67641 }, { 0x23BA, 67646 }, { 0x23BB, 67649 }, { 0x23BC, 67652 }, { 0x23BD, 67655 }, { 0x2B23, 67658 }, { 0x2026, 67661 }, { 0x238E, 67663 }, { 0x29DC, 67665 }, { 0x7A38, 67667 }, { 0x7A3A, 67671 }, { 0x7A39, 67675 }, { 0x7A0D, 67678 }, { 0x7A0F, 67683 }, { 0x7A0E, 67686 }, { 0x7A40, 67689 }, { 0x7A41, 67692 }, { 0x7A43, 67695 }, { 0x7A42, 67698 }, { 0x7A05, 67701 }, { 0x7A01, 67705 }, { 0x7A06, 67709 }, { 0x7A02, 67713 }, { 0x7A03, 67717 }, { 0x7A0C, 67722 }, { 0x7A00, 67726 }, { 0x7A26, 67729 }, { 0x7A15, 67732 }, { 0x7A21, 67735 }, { 0x7A12, 67738 }, { 0x7A31, 67741 }, { 0x7A17, 67744 }, { 0x7A10, 67747 }, { 0x7A2B, 67750 }, { 0x7A28, 67753 }, { 0x7A23, 67756 }, { 0x7A24, 67759 }, { 0x7A2A, 67762 }, { 0x7A2F, 67765 }, { 0x7A1F, 67768 }, { 0x7A2C, 67771 }, { 0x7A29, 67774 }, { 0x7A30, 67777 }, { 0x7A27, 67780 }, { 0x7A16, 67783 }, { 0x7A1C, 67786 }, { 0x7A22, 67789 }, { 0x7A13, 67792 }, { 0x7A11, 67795 }, { 0x7A32, 67798 }, { 0x7A1E, 67801 }, { 0x7A19, 67804 }, { 0x7A25, 67807 }, { 0x7A2D, 67810 }, { 0x7A2E, 67813 }, { 0x7A20, 67816 }, { 0x7A1A, 67819 }, { 0x7A1D, 67822 }, { 0x7A1B, 67825 }, { 0x7A33, 67828 }, { 0x7A46, 67831 }, { 0x7A47, 67835 }, { 0x7A44, 67839 }, { 0x7A45, 67842 }, { 0x7A3F, 67845 }, { 0x7A50, 67847 }, { 0x7A56, 67850 }, { 0x7A58, 67853 }, { 0x7A55, 67856 }, { 0x7A51, 67859 }, { 0x7A52, 67863 }, { 0x7A57, 67866 }, { 0x7A53, 67870 }, { 0x7A54, 67874 }, { 0x238D, 67877 }, { 0x2ADD, 67879 }, { 0x260D, 67880 }, { 0x1736, 67881 }, { 0x1735, 67884 }, { 0x791F, 67887 }, { 0x7904, 67890 }, { 0x7910, 67893 }, { 0x790F, 67896 }, { 0x7900, 67899 }, { 0x7901, 67902 }, { 0x7907, 67905 }, { 0x790A, 67908 }, { 0x790C, 67911 }, { 0x790D, 67914 }, { 0x7912, 67917 }, { 0x7915, 67920 }, { 0x7908, 67923 }, { 0x7905, 67926 }, { 0x7909, 67929 }, { 0x7906, 67932 }, { 0x7903, 67935 }, { 0x7902, 67938 }, { 0x790B, 67941 }, { 0x7913, 67944 }, { 0x7911, 67947 }, { 0x790E, 67950 }, { 0x7914, 67953 }, { 0x7916, 67956 }, { 0x7919, 67959 }, { 0x7917, 67963 }, { 0x7918, 67966 }, { 0x00B1, 67969 }, { 0x2305, 67971 }, { 0x2237, 67972 }, { 0x2A16, 67973 }, { 0x225F, 67976 }, { 0x00AE, 67979 }, { 0x2938, 67981 }, { 0x21A0, 67985 }, { 0x219D, 67989 }, { 0x2192, 67992 }, { 0x21E5, 67994 }, { 0x291E, 67998 }, { 0x21A6, 68003 }, { 0x2920, 68007 }, { 0x21C4, 68014 }, { 0x2B0F, 68019 }, { 0x2B0E, 68024 }, { 0x21AA, 68029 }, { 0x21AC, 68033 }, { 0x2945, 68037 }, { 0x21A3, 68042 }, { 0x2915, 68046 }, { 0x2914, 68054 }, { 0x21B4, 68061 }, { 0x2911, 68066 }, { 0x21FB, 68071 }, { 0x219B, 68077 }, { 0x21F8, 68081 }, { 0x2942, 68086 }, { 0x2974, 68092 }, { 0x2975, 68097 }, { 0x2B4C, 68103 }, { 0x2B48, 68109 }, { 0x2947, 68116 }, { 0x2B44, 68120 }, { 0x2B43, 68124 }, { 0x21E8, 68128 }, { 0x21F0, 68131 }, { 0x21E2, 68136 }, { 0x290D, 68139 }, { 0x21D2, 68143 }, { 0x2907, 68146 }, { 0x21CF, 68151 }, { 0x2903, 68156 }, { 0x291C, 68162 }, { 0x21C9, 68165 }, { 0x290F, 68168 }, { 0x21DB, 68172 }, { 0x21CC, 68175 }, { 0x2953, 68180 }, { 0x295B, 68187 }, { 0x296C, 68194 }, { 0x2968, 68202 }, { 0x2964, 68213 }, { 0x2957, 68224 }, { 0x295F, 68231 }, { 0x2969, 68238 }, { 0x296D, 68249 }, { 0x21C0, 68257 }, { 0x21C1, 68262 }, { 0x21DD, 68267 }, { 0x2B46, 68270 }, { 0x291A, 68273 }, { 0x2905, 68275 }, { 0x2916, 68280 }, { 0x2918, 68285 }, { 0x2917, 68294 }, { 0x2901, 68302 }, { 0x2900, 68309 }, { 0x2910, 68315 }, { 0x21FE, 68320 }, { 0x58C4, 68323 }, { 0x5881, 68326 }, { 0x5880, 68329 }, { 0x58CE, 68332 }, { 0x58D1, 68334 }, { 0x58D6, 68337 }, { 0x58D2, 68340 }, { 0x58D5, 68343 }, { 0x58D4, 68346 }, { 0x58D9, 68349 }, { 0x58D0, 68352 }, { 0x58D8, 68355 }, { 0x58D7, 68358 }, { 0x58D3, 68361 }, { 0x58BE, 68364 }, { 0x58B6, 68368 }, { 0x58C1, 68372 }, { 0x58B8, 68376 }, { 0x58B5, 68380 }, { 0x58C0, 68384 }, { 0x58C3, 68388 }, { 0x58BF, 68392 }, { 0x58B7, 68396 }, { 0x58C2, 68400 }, { 0x58B9, 68404 }, { 0x58BC, 68408 }, { 0x58BA, 68413 }, { 0x58BD, 68418 }, { 0x58BB, 68423 }, { 0x58CF, 68428 }, { 0x5882, 68431 }, { 0x588C, 68434 }, { 0x5884, 68437 }, { 0x588F, 68440 }, { 0x5886, 68443 }, { 0x5883, 68446 }, { 0x588E, 68449 }, { 0x5891, 68452 }, { 0x58A8, 68455 }, { 0x5897, 68458 }, { 0x58A3, 68461 }, { 0x588D, 68464 }, { 0x5894, 68467 }, { 0x58B2, 68470 }, { 0x5885, 68473 }, { 0x5899, 68476 }, { 0x5892, 68479 }, { 0x58AD, 68482 }, { 0x58AA, 68485 }, { 0x58A5, 68488 }, { 0x5890, 68491 }, { 0x58A6, 68494 }, { 0x58AC, 68497 }, { 0x58B1, 68500 }, { 0x58A1, 68503 }, { 0x5887, 68506 }, { 0x58AE, 68509 }, { 0x58AB, 68512 }, { 0x58A9, 68515 }, { 0x5898, 68518 }, { 0x589E, 68521 }, { 0x58A4, 68524 }, { 0x5895, 68527 }, { 0x589A, 68530 }, { 0x5893, 68533 }, { 0x58B3, 68536 }, { 0x5896, 68539 }, { 0x58A0, 68542 }, { 0x589B, 68545 }, { 0x58A7, 68548 }, { 0x58AF, 68551 }, { 0x58B0, 68554 }, { 0x58A2, 68557 }, { 0x589C, 68560 }, { 0x589F, 68563 }, { 0x589D, 68566 }, { 0x588A, 68569 }, { 0x5888, 68573 }, { 0x588B, 68577 }, { 0x5889, 68581 }, { 0x58B4, 68585 }, { 0x2A32, 68589 }, { 0x237D, 68594 }, { 0x2006, 68597 }, { 0x2023, 68599 }, { 0x267F, 68601 }, { 0x2387, 68603 }, { 0x27AB, 68606 }, { 0x2A10, 68611 }, { 0x2384, 68613 }, { 0x260C, 68615 }, { 0x2258, 68616 }, { 0x2334, 68618 }, { 0x2335, 68619 }, { 0x2A99, 68620 }, { 0x2A9A, 68625 }, { 0x2A9B, 68630 }, { 0x2A9C, 68636 }, { 0x2AF9, 68642 }, { 0x2AFA, 68648 }, { 0x225A, 68654 }, { 0x0021, 68656 }, { 0x2049, 68658 }, { 0x2005, 68661 }, { 0x2027, 68663 }, { 0x3002, 68665 }, { 0x303F, 68668 }, { 0x3001, 68672 }, { 0x302A, 68674 }, { 0x3000, 68678 }, { 0x3007, 68680 }, { 0x302B, 68683 }, { 0x3006, 68687 }, { 0x302D, 68690 }, { 0x302C, 68694 }, { 0x3005, 68698 }, { 0x3037, 68701 }, { 0x33E0, 68707 }, { 0x33E5, 68713 }, { 0x33E9, 68719 }, { 0x33E1, 68725 }, { 0x33E4, 68731 }, { 0x33E3, 68737 }, { 0x33E8, 68743 }, { 0x33E7, 68749 }, { 0x33E6, 68755 }, { 0x33E2, 68761 }, { 0x33EA, 68767 }, { 0x33FD, 68773 }, { 0x33EB, 68779 }, { 0x33F3, 68785 }, { 0x33EE, 68791 }, { 0x33EF, 68797 }, { 0x33F1, 68803 }, { 0x33ED, 68809 }, { 0x33F2, 68815 }, { 0x33EC, 68821 }, { 0x33F0, 68827 }, { 0x33FE, 68833 }, { 0x33F4, 68839 }, { 0x33F9, 68845 }, { 0x33F5, 68851 }, { 0x33F8, 68857 }, { 0x33F7, 68863 }, { 0x33FC, 68869 }, { 0x33FB, 68875 }, { 0x33FA, 68881 }, { 0x33F6, 68887 }, { 0x32C4, 68893 }, { 0x3359, 68898 }, { 0x335E, 68904 }, { 0x3362, 68910 }, { 0x335A, 68916 }, { 0x335D, 68922 }, { 0x335C, 68928 }, { 0x3361, 68934 }, { 0x3358, 68940 }, { 0x3360, 68946 }, { 0x335F, 68952 }, { 0x335B, 68958 }, { 0x3363, 68964 }, { 0x3364, 68970 }, { 0x336C, 68976 }, { 0x3367, 68982 }, { 0x3368, 68988 }, { 0x336A, 68994 }, { 0x3366, 69000 }, { 0x336B, 69006 }, { 0x3365, 69012 }, { 0x3369, 69018 }, { 0x336D, 69024 }, { 0x336E, 69030 }, { 0x3370, 69036 }, { 0x336F, 69042 }, { 0x32C6, 69048 }, { 0x32C5, 69053 }, { 0x32C3, 69058 }, { 0x32C2, 69063 }, { 0x32C7, 69068 }, { 0x32C0, 69073 }, { 0x32C9, 69078 }, { 0x32CB, 69083 }, { 0x32C1, 69088 }, { 0x32CA, 69093 }, { 0x32C8, 69098 }, { 0x303E, 69103 }, { 0x319F, 69106 }, { 0x3192, 69110 }, { 0x3196, 69114 }, { 0x3193, 69118 }, { 0x3195, 69122 }, { 0x319E, 69126 }, { 0x3199, 69130 }, { 0x319B, 69134 }, { 0x3194, 69138 }, { 0x3198, 69142 }, { 0x319C, 69146 }, { 0x319D, 69150 }, { 0x3197, 69154 }, { 0x319A, 69158 }, { 0x3190, 69162 }, { 0x3191, 69166 }, { 0x2FF4, 69170 }, { 0x2FF0, 69175 }, { 0x2FF2, 69181 }, { 0x2FF1, 69189 }, { 0x2FF3, 69195 }, { 0x2FFB, 69203 }, { 0x2FF7, 69207 }, { 0x2FF5, 69213 }, { 0x2FF6, 69219 }, { 0x2FFA, 69225 }, { 0x2FF8, 69232 }, { 0x2FF9, 69239 }, { 0x2139, 69246 }, { 0x22BA, 69248 }, { 0x6FF9, 69249 }, { 0x6FFA, 69252 }, { 0x6FFB, 69255 }, { 0x26A4, 69258 }, { 0x203D, 69263 }, { 0x27AA, 69264 }, { 0x2E0F, 69268 }, { 0x3250, 69269 }, { 0x2306, 69271 }, { 0x2008, 69272 }, { 0x2622, 69274 }, { 0x6FFD, 69276 }, { 0x2650, 69278 }, { 0x26BA, 69279 }, { 0x00B9, 69280 }, { 0x2076, 69282 }, { 0x00B2, 69284 }, { 0x2075, 69286 }, { 0x2074, 69288 }, { 0x207D, 69290 }, { 0x2079, 69293 }, { 0x207A, 69295 }, { 0x2070, 69298 }, { 0x2078, 69300 }, { 0x2071, 69302 }, { 0x207F, 69307 }, { 0x207B, 69312 }, { 0x207E, 69314 }, { 0x2077, 69317 }, { 0x00B3, 69319 }, { 0x207C, 69321 }, { 0x2ADB, 69324 }, { 0x25ED, 69326 }, { 0x25EE, 69332 }, { 0x214D, 69338 }, { 0x2A3F, 69339 }, { 0x060A, 69342 }, { 0x0609, 69347 }, { 0x0606, 69351 }, { 0x0661, 69354 }, { 0x0666, 69357 }, { 0x0662, 69360 }, { 0x0665, 69363 }, { 0x0664, 69366 }, { 0x0669, 69369 }, { 0x0660, 69372 }, { 0x0668, 69375 }, { 0x0667, 69378 }, { 0x0663, 69381 }, { 0x0607, 69384 }, { 0x212D, 69387 }, { 0x210C, 69390 }, { 0x2111, 69393 }, { 0x211C, 69396 }, { 0x2128, 69399 }, { 0x232D, 69402 }, { 0x29DF, 69403 }, { 0x29F3, 69405 }, { 0x29EF, 69408 }, { 0x29F1, 69411 }, { 0x29F2, 69414 }, { 0x29EE, 69417 }, { 0x29F0, 69420 }, { 0x269C, 69423 }, { 0x27AC, 69424 }, { 0x2265, 69429 }, { 0x2A7E, 69433 }, { 0x2A82, 69438 }, { 0x2A84, 69446 }, { 0x2A80, 69455 }, { 0x2277, 69463 }, { 0x2273, 69466 }, { 0x2A86, 69470 }, { 0x2A8A, 69473 }, { 0x2A88, 69477 }, { 0x2269, 69483 }, { 0x22E7, 69488 }, { 0x2267, 69493 }, { 0x003E, 69497 }, { 0x22D7, 69499 }, { 0x2A7A, 69502 }, { 0x2A7C, 69506 }, { 0x2A8E, 69511 }, { 0x2A90, 69516 }, { 0x2A94, 69521 }, { 0x2A92, 69530 }, { 0x2978, 69536 }, { 0x2A8C, 69540 }, { 0x22DB, 69546 }, { 0x2AA5, 69551 }, { 0x2AA7, 69554 }, { 0x2AA9, 69558 }, { 0x2AA4, 69565 }, { 0x002D, 69568 }, { 0x2E12, 69569 }, { 0x2229, 69570 }, { 0x2A40, 69571 }, { 0x2A44, 69574 }, { 0x2A43, 69578 }, { 0x2A49, 69581 }, { 0x2A47, 69586 }, { 0x2A4B, 69589 }, { 0x96E1, 69595 }, { 0x96DF, 69599 }, { 0x96E0, 69603 }, { 0x97CF, 69607 }, { 0x97D4, 69611 }, { 0x97D0, 69615 }, { 0x97D3, 69619 }, { 0x97D2, 69623 }, { 0x97D7, 69627 }, { 0x97CE, 69631 }, { 0x97D6, 69635 }, { 0x97D5, 69639 }, { 0x97D1, 69643 }, { 0x96DE, 69647 }, { 0x96C1, 69651 }, { 0x941A, 69654 }, { 0x941B, 69658 }, { 0x941C, 69662 }, { 0x941D, 69666 }, { 0x941E, 69670 }, { 0x941F, 69674 }, { 0x9420, 69678 }, { 0x9421, 69682 }, { 0x9422, 69686 }, { 0x9423, 69690 }, { 0x9424, 69694 }, { 0x9425, 69698 }, { 0x9426, 69702 }, { 0x9427, 69706 }, { 0x9428, 69710 }, { 0x9429, 69714 }, { 0x942A, 69718 }, { 0x942B, 69722 }, { 0x942C, 69726 }, { 0x942D, 69730 }, { 0x942E, 69734 }, { 0x942F, 69738 }, { 0x9430, 69742 }, { 0x9431, 69746 }, { 0x9432, 69750 }, { 0x9433, 69754 }, { 0x96CD, 69758 }, { 0x96CE, 69762 }, { 0x96D1, 69766 }, { 0x96CF, 69770 }, { 0x96D8, 69774 }, { 0x96C8, 69778 }, { 0x96D7, 69782 }, { 0x96D9, 69786 }, { 0x96D2, 69790 }, { 0x96D5, 69794 }, { 0x96C3, 69798 }, { 0x96CA, 69802 }, { 0x96C7, 69806 }, { 0x96C2, 69810 }, { 0x96C5, 69814 }, { 0x96D3, 69818 }, { 0x96C4, 69823 }, { 0x96CB, 69827 }, { 0x96CC, 69831 }, { 0x96DA, 69835 }, { 0x96D4, 69839 }, { 0x96C9, 69843 }, { 0x97CB, 69847 }, { 0x96C6, 69851 }, { 0x96D0, 69855 }, { 0x96D6, 69859 }, { 0x96DD, 69863 }, { 0x9755, 69867 }, { 0x9753, 69872 }, { 0x9754, 69877 }, { 0x9752, 69882 }, { 0x9735, 69887 }, { 0x9482, 69891 }, { 0x9483, 69896 }, { 0x9484, 69901 }, { 0x9485, 69906 }, { 0x9486, 69911 }, { 0x9487, 69916 }, { 0x9488, 69921 }, { 0x9489, 69926 }, { 0x948A, 69931 }, { 0x948B, 69936 }, { 0x948C, 69941 }, { 0x948D, 69946 }, { 0x948E, 69951 }, { 0x948F, 69956 }, { 0x9490, 69961 }, { 0x9491, 69966 }, { 0x9492, 69971 }, { 0x9493, 69976 }, { 0x9494, 69981 }, { 0x9495, 69986 }, { 0x9496, 69991 }, { 0x9497, 69996 }, { 0x9498, 70001 }, { 0x9499, 70006 }, { 0x949A, 70011 }, { 0x949B, 70016 }, { 0x9741, 70021 }, { 0x9742, 70026 }, { 0x9745, 70031 }, { 0x9743, 70036 }, { 0x974C, 70041 }, { 0x973C, 70046 }, { 0x974B, 70051 }, { 0x974D, 70056 }, { 0x9746, 70061 }, { 0x9749, 70066 }, { 0x9737, 70071 }, { 0x973E, 70076 }, { 0x973B, 70081 }, { 0x9736, 70086 }, { 0x9739, 70091 }, { 0x9747, 70096 }, { 0x9738, 70102 }, { 0x973F, 70107 }, { 0x9740, 70112 }, { 0x974E, 70117 }, { 0x9748, 70122 }, { 0x973D, 70127 }, { 0x973A, 70132 }, { 0x9744, 70137 }, { 0x974A, 70142 }, { 0x9751, 70147 }, { 0x9468, 70152 }, { 0x9469, 70157 }, { 0x946A, 70162 }, { 0x946B, 70167 }, { 0x946C, 70172 }, { 0x946D, 70177 }, { 0x946E, 70182 }, { 0x946F, 70187 }, { 0x9470, 70192 }, { 0x9471, 70197 }, { 0x9472, 70202 }, { 0x9473, 70207 }, { 0x9474, 70212 }, { 0x9475, 70217 }, { 0x9476, 70222 }, { 0x9477, 70227 }, { 0x9478, 70232 }, { 0x9479, 70237 }, { 0x947A, 70242 }, { 0x947B, 70247 }, { 0x947C, 70252 }, { 0x947D, 70257 }, { 0x947E, 70262 }, { 0x947F, 70267 }, { 0x9480, 70272 }, { 0x9481, 70277 }, { 0x9727, 70282 }, { 0x9728, 70287 }, { 0x972B, 70292 }, { 0x9729, 70297 }, { 0x9732, 70302 }, { 0x9722, 70307 }, { 0x9731, 70312 }, { 0x9733, 70317 }, { 0x972C, 70322 }, { 0x972F, 70327 }, { 0x971D, 70332 }, { 0x9724, 70337 }, { 0x9721, 70342 }, { 0x971C, 70347 }, { 0x971F, 70352 }, { 0x971E, 70357 }, { 0x9725, 70362 }, { 0x9726, 70367 }, { 0x9734, 70372 }, { 0x972E, 70377 }, { 0x9723, 70382 }, { 0x972D, 70387 }, { 0x9720, 70393 }, { 0x972A, 70398 }, { 0x9730, 70403 }, { 0x9750, 70408 }, { 0x974F, 70413 }, { 0x94EA, 70418 }, { 0x94EB, 70423 }, { 0x94EC, 70428 }, { 0x94ED, 70433 }, { 0x94EE, 70438 }, { 0x94EF, 70443 }, { 0x94F0, 70448 }, { 0x94F1, 70453 }, { 0x94F2, 70458 }, { 0x94F3, 70463 }, { 0x94F4, 70468 }, { 0x94F5, 70473 }, { 0x94F6, 70478 }, { 0x94F7, 70483 }, { 0x94F8, 70488 }, { 0x94F9, 70493 }, { 0x94FA, 70498 }, { 0x94FB, 70503 }, { 0x94FC, 70508 }, { 0x94FD, 70513 }, { 0x94FE, 70518 }, { 0x94FF, 70523 }, { 0x9500, 70528 }, { 0x9501, 70533 }, { 0x9502, 70538 }, { 0x9503, 70543 }, { 0x94D0, 70548 }, { 0x94D1, 70553 }, { 0x94D2, 70558 }, { 0x94D3, 70563 }, { 0x94D4, 70568 }, { 0x94D5, 70573 }, { 0x94D6, 70578 }, { 0x94D7, 70583 }, { 0x94D8, 70588 }, { 0x94D9, 70593 }, { 0x94DA, 70598 }, { 0x94DB, 70603 }, { 0x94DC, 70608 }, { 0x94DD, 70613 }, { 0x94DE, 70618 }, { 0x94DF, 70623 }, { 0x94E0, 70628 }, { 0x94E1, 70633 }, { 0x94E2, 70638 }, { 0x94E3, 70643 }, { 0x94E4, 70648 }, { 0x94E5, 70653 }, { 0x94E6, 70658 }, { 0x94E7, 70663 }, { 0x94E8, 70668 }, { 0x94E9, 70673 }, { 0x9400, 70678 }, { 0x9401, 70682 }, { 0x9402, 70686 }, { 0x9403, 70690 }, { 0x9404, 70694 }, { 0x9405, 70698 }, { 0x9406, 70702 }, { 0x9407, 70706 }, { 0x9408, 70710 }, { 0x9409, 70714 }, { 0x940A, 70718 }, { 0x940B, 70722 }, { 0x940C, 70726 }, { 0x940D, 70730 }, { 0x940E, 70734 }, { 0x940F, 70738 }, { 0x9410, 70742 }, { 0x9411, 70746 }, { 0x9412, 70750 }, { 0x9413, 70754 }, { 0x9414, 70758 }, { 0x9415, 70762 }, { 0x9416, 70766 }, { 0x9417, 70770 }, { 0x9418, 70774 }, { 0x9419, 70778 }, { 0x96B3, 70782 }, { 0x96B4, 70786 }, { 0x96B7, 70790 }, { 0x96B5, 70794 }, { 0x96BE, 70798 }, { 0x96AE, 70802 }, { 0x96BD, 70806 }, { 0x96BF, 70810 }, { 0x96B8, 70814 }, { 0x96BB, 70818 }, { 0x96A9, 70822 }, { 0x96B0, 70826 }, { 0x96AD, 70830 }, { 0x96A8, 70834 }, { 0x96AB, 70838 }, { 0x96AA, 70842 }, { 0x96B1, 70846 }, { 0x96B2, 70850 }, { 0x96C0, 70854 }, { 0x96BA, 70858 }, { 0x96AF, 70862 }, { 0x96B9, 70866 }, { 0x97CA, 70871 }, { 0x96AC, 70875 }, { 0x96B6, 70879 }, { 0x96BC, 70883 }, { 0x96DC, 70887 }, { 0x9586, 70891 }, { 0x9587, 70896 }, { 0x9588, 70901 }, { 0x9589, 70906 }, { 0x958A, 70911 }, { 0x958B, 70916 }, { 0x958C, 70921 }, { 0x958D, 70926 }, { 0x958E, 70931 }, { 0x958F, 70936 }, { 0x9590, 70941 }, { 0x9591, 70946 }, { 0x9592, 70951 }, { 0x9593, 70956 }, { 0x9594, 70961 }, { 0x9595, 70966 }, { 0x9596, 70971 }, { 0x9597, 70976 }, { 0x9598, 70981 }, { 0x9599, 70986 }, { 0x959A, 70991 }, { 0x959B, 70996 }, { 0x959C, 71001 }, { 0x959D, 71006 }, { 0x959E, 71011 }, { 0x959F, 71016 }, { 0x956C, 71021 }, { 0x956D, 71026 }, { 0x956E, 71031 }, { 0x956F, 71036 }, { 0x9570, 71041 }, { 0x9571, 71046 }, { 0x9572, 71051 }, { 0x9573, 71056 }, { 0x9574, 71061 }, { 0x9575, 71066 }, { 0x9576, 71071 }, { 0x9577, 71076 }, { 0x9578, 71081 }, { 0x9579, 71086 }, { 0x957A, 71091 }, { 0x957B, 71096 }, { 0x957C, 71101 }, { 0x957D, 71106 }, { 0x957E, 71111 }, { 0x957F, 71116 }, { 0x9580, 71121 }, { 0x9581, 71126 }, { 0x9582, 71131 }, { 0x9583, 71136 }, { 0x9584, 71141 }, { 0x9585, 71146 }, { 0x96DB, 71151 }, { 0x27E8, 71155 }, { 0x27E6, 71159 }, { 0x27EC, 71164 }, { 0x27EA, 71170 }, { 0x27EE, 71175 }, { 0x27E9, 71179 }, { 0x27E7, 71183 }, { 0x27ED, 71188 }, { 0x27EB, 71194 }, { 0x27EF, 71199 }, { 0x971B, 71203 }, { 0x9719, 71207 }, { 0x971A, 71211 }, { 0x9718, 71215 }, { 0x96FB, 71219 }, { 0x944E, 71222 }, { 0x944F, 71226 }, { 0x9450, 71230 }, { 0x9451, 71234 }, { 0x9452, 71238 }, { 0x9453, 71242 }, { 0x9454, 71246 }, { 0x9456, 71250 }, { 0x9457, 71254 }, { 0x9458, 71258 }, { 0x9459, 71262 }, { 0x945A, 71266 }, { 0x945B, 71270 }, { 0x945C, 71274 }, { 0x945D, 71278 }, { 0x945E, 71282 }, { 0x945F, 71286 }, { 0x9460, 71290 }, { 0x9461, 71294 }, { 0x9462, 71298 }, { 0x9463, 71302 }, { 0x9464, 71306 }, { 0x9465, 71310 }, { 0x9466, 71314 }, { 0x9467, 71318 }, { 0x9707, 71322 }, { 0x9708, 71326 }, { 0x970B, 71330 }, { 0x9709, 71334 }, { 0x9712, 71338 }, { 0x9702, 71342 }, { 0x9711, 71346 }, { 0x9713, 71350 }, { 0x970C, 71354 }, { 0x970F, 71358 }, { 0x96FD, 71362 }, { 0x9704, 71366 }, { 0x9701, 71370 }, { 0x96FC, 71374 }, { 0x96FF, 71378 }, { 0x970D, 71382 }, { 0x96FE, 71387 }, { 0x9705, 71391 }, { 0x9706, 71395 }, { 0x9714, 71399 }, { 0x970E, 71403 }, { 0x9703, 71407 }, { 0x96A4, 71411 }, { 0x96A5, 71416 }, { 0x9700, 71421 }, { 0x970A, 71425 }, { 0x9710, 71429 }, { 0x9717, 71433 }, { 0x9434, 71437 }, { 0x9435, 71441 }, { 0x9436, 71445 }, { 0x9437, 71449 }, { 0x9438, 71453 }, { 0x9439, 71457 }, { 0x943A, 71461 }, { 0x943B, 71465 }, { 0x943C, 71469 }, { 0x943D, 71473 }, { 0x943E, 71477 }, { 0x943F, 71481 }, { 0x9440, 71485 }, { 0x9441, 71489 }, { 0x9442, 71493 }, { 0x9443, 71497 }, { 0x9444, 71501 }, { 0x9445, 71505 }, { 0x9446, 71509 }, { 0x9447, 71513 }, { 0x9448, 71517 }, { 0x9449, 71521 }, { 0x944A, 71525 }, { 0x944B, 71529 }, { 0x944C, 71533 }, { 0x944D, 71537 }, { 0x96ED, 71541 }, { 0x96EE, 71545 }, { 0x96F1, 71549 }, { 0x96EF, 71553 }, { 0x96F8, 71557 }, { 0x96E8, 71561 }, { 0x96F7, 71565 }, { 0x96F9, 71569 }, { 0x96F2, 71573 }, { 0x96F5, 71577 }, { 0x96E3, 71581 }, { 0x96EA, 71585 }, { 0x96E7, 71589 }, { 0x96E2, 71593 }, { 0x96E5, 71597 }, { 0x96E4, 71601 }, { 0x96EB, 71605 }, { 0x96EC, 71609 }, { 0x96FA, 71613 }, { 0x96F4, 71617 }, { 0x96E9, 71621 }, { 0x96F3, 71625 }, { 0x96E6, 71630 }, { 0x96F0, 71634 }, { 0x96F6, 71638 }, { 0x9716, 71642 }, { 0x9715, 71646 }, { 0x94B6, 71650 }, { 0x94B7, 71654 }, { 0x94B8, 71658 }, { 0x94B9, 71662 }, { 0x94BB, 71666 }, { 0x94BD, 71670 }, { 0x94BE, 71674 }, { 0x94BF, 71678 }, { 0x94C0, 71682 }, { 0x94C1, 71686 }, { 0x94C2, 71690 }, { 0x94C3, 71694 }, { 0x94C5, 71698 }, { 0x94C6, 71702 }, { 0x94C7, 71706 }, { 0x94C8, 71710 }, { 0x94C9, 71714 }, { 0x94CA, 71718 }, { 0x94CB, 71722 }, { 0x94CC, 71726 }, { 0x94CD, 71730 }, { 0x94CE, 71734 }, { 0x94CF, 71738 }, { 0x949C, 71742 }, { 0x949E, 71746 }, { 0x949F, 71750 }, { 0x94A2, 71754 }, { 0x94A5, 71758 }, { 0x94A6, 71762 }, { 0x94A9, 71766 }, { 0x94AA, 71770 }, { 0x94AB, 71774 }, { 0x94AC, 71778 }, { 0x94AE, 71782 }, { 0x94AF, 71786 }, { 0x94B0, 71790 }, { 0x94B1, 71794 }, { 0x94B2, 71798 }, { 0x94B3, 71802 }, { 0x94B4, 71806 }, { 0x94B5, 71810 }, { 0x951E, 71814 }, { 0x951F, 71818 }, { 0x9520, 71822 }, { 0x9521, 71826 }, { 0x9522, 71830 }, { 0x9523, 71834 }, { 0x9524, 71838 }, { 0x9525, 71842 }, { 0x9526, 71846 }, { 0x9527, 71850 }, { 0x9528, 71854 }, { 0x9529, 71858 }, { 0x952A, 71862 }, { 0x952B, 71866 }, { 0x952C, 71870 }, { 0x952D, 71874 }, { 0x952E, 71878 }, { 0x952F, 71882 }, { 0x9530, 71886 }, { 0x9531, 71890 }, { 0x9532, 71894 }, { 0x9533, 71898 }, { 0x9534, 71902 }, { 0x9535, 71906 }, { 0x9536, 71910 }, { 0x9537, 71914 }, { 0x9504, 71918 }, { 0x9505, 71922 }, { 0x9507, 71926 }, { 0x9508, 71930 }, { 0x9509, 71934 }, { 0x950A, 71938 }, { 0x950D, 71942 }, { 0x950E, 71946 }, { 0x950F, 71950 }, { 0x9510, 71954 }, { 0x9511, 71958 }, { 0x9512, 71962 }, { 0x9513, 71966 }, { 0x9514, 71970 }, { 0x9516, 71974 }, { 0x9517, 71978 }, { 0x9518, 71982 }, { 0x9519, 71986 }, { 0x951A, 71990 }, { 0x951B, 71994 }, { 0x951C, 71998 }, { 0x97F7, 72002 }, { 0x97FC, 72006 }, { 0x97F8, 72010 }, { 0x97FB, 72014 }, { 0x97FA, 72018 }, { 0x97FF, 72022 }, { 0x97F6, 72026 }, { 0x97FE, 72030 }, { 0x97FD, 72034 }, { 0x97F9, 72038 }, { 0x968A, 72042 }, { 0x968B, 72046 }, { 0x968C, 72050 }, { 0x968D, 72054 }, { 0x968E, 72058 }, { 0x968F, 72062 }, { 0x9690, 72066 }, { 0x9691, 72070 }, { 0x9692, 72074 }, { 0x9693, 72078 }, { 0x9694, 72082 }, { 0x9695, 72086 }, { 0x9696, 72090 }, { 0x9697, 72094 }, { 0x9698, 72098 }, { 0x9699, 72102 }, { 0x969A, 72106 }, { 0x969B, 72110 }, { 0x969C, 72114 }, { 0x969D, 72118 }, { 0x969E, 72122 }, { 0x969F, 72126 }, { 0x96A0, 72130 }, { 0x96A1, 72134 }, { 0x96A2, 72138 }, { 0x96A3, 72142 }, { 0x9670, 72146 }, { 0x9671, 72150 }, { 0x9672, 72154 }, { 0x9673, 72158 }, { 0x9674, 72162 }, { 0x9675, 72166 }, { 0x9676, 72170 }, { 0x9677, 72174 }, { 0x9678, 72178 }, { 0x9679, 72182 }, { 0x967A, 72186 }, { 0x967B, 72190 }, { 0x967C, 72194 }, { 0x967D, 72198 }, { 0x967E, 72202 }, { 0x967F, 72206 }, { 0x9680, 72210 }, { 0x9681, 72214 }, { 0x9682, 72218 }, { 0x9683, 72222 }, { 0x9684, 72226 }, { 0x9685, 72230 }, { 0x9686, 72234 }, { 0x9687, 72238 }, { 0x9688, 72242 }, { 0x9689, 72246 }, { 0x978F, 72250 }, { 0x978D, 72255 }, { 0x978E, 72260 }, { 0x97ED, 72265 }, { 0x97F2, 72270 }, { 0x97EE, 72275 }, { 0x97F1, 72280 }, { 0x97F0, 72285 }, { 0x97F5, 72290 }, { 0x97EC, 72295 }, { 0x97F4, 72300 }, { 0x97F3, 72305 }, { 0x97EF, 72310 }, { 0x978C, 72315 }, { 0x976F, 72320 }, { 0x95EE, 72324 }, { 0x95EF, 72329 }, { 0x95F0, 72334 }, { 0x95F1, 72339 }, { 0x95F2, 72344 }, { 0x95F3, 72349 }, { 0x95F4, 72354 }, { 0x95F5, 72359 }, { 0x95F6, 72364 }, { 0x95F7, 72369 }, { 0x95F8, 72374 }, { 0x95F9, 72379 }, { 0x95FA, 72384 }, { 0x95FB, 72389 }, { 0x95FC, 72394 }, { 0x95FD, 72399 }, { 0x95FE, 72404 }, { 0x95FF, 72409 }, { 0x9600, 72414 }, { 0x9601, 72419 }, { 0x9602, 72424 }, { 0x9603, 72429 }, { 0x9604, 72434 }, { 0x9605, 72439 }, { 0x9606, 72444 }, { 0x9607, 72449 }, { 0x977B, 72454 }, { 0x977C, 72459 }, { 0x977F, 72464 }, { 0x977D, 72469 }, { 0x9786, 72474 }, { 0x9776, 72479 }, { 0x9785, 72484 }, { 0x9787, 72489 }, { 0x9780, 72494 }, { 0x9783, 72499 }, { 0x9771, 72504 }, { 0x9778, 72509 }, { 0x9775, 72514 }, { 0x9770, 72519 }, { 0x9773, 72524 }, { 0x9781, 72529 }, { 0x9772, 72535 }, { 0x9779, 72540 }, { 0x977A, 72545 }, { 0x9788, 72550 }, { 0x9782, 72555 }, { 0x9777, 72560 }, { 0x9774, 72565 }, { 0x977E, 72570 }, { 0x9784, 72575 }, { 0x978B, 72580 }, { 0x97C9, 72585 }, { 0x97C7, 72591 }, { 0x97C8, 72597 }, { 0x97C6, 72603 }, { 0x97A9, 72609 }, { 0x9656, 72614 }, { 0x9657, 72620 }, { 0x9658, 72626 }, { 0x9659, 72632 }, { 0x965A, 72638 }, { 0x965B, 72644 }, { 0x965C, 72650 }, { 0x965D, 72656 }, { 0x965E, 72662 }, { 0x965F, 72668 }, { 0x9660, 72674 }, { 0x9661, 72680 }, { 0x9662, 72686 }, { 0x9663, 72692 }, { 0x9664, 72698 }, { 0x9665, 72704 }, { 0x9666, 72710 }, { 0x9667, 72716 }, { 0x9668, 72722 }, { 0x9669, 72728 }, { 0x966A, 72734 }, { 0x966B, 72740 }, { 0x966C, 72746 }, { 0x966D, 72752 }, { 0x966E, 72758 }, { 0x966F, 72764 }, { 0x97B5, 72770 }, { 0x97B6, 72776 }, { 0x97B9, 72782 }, { 0x97B7, 72788 }, { 0x97C0, 72794 }, { 0x97B0, 72800 }, { 0x97BF, 72806 }, { 0x97C1, 72812 }, { 0x97BA, 72818 }, { 0x97BD, 72824 }, { 0x97AB, 72830 }, { 0x97B2, 72836 }, { 0x97AF, 72842 }, { 0x97AA, 72848 }, { 0x97AD, 72854 }, { 0x97BB, 72860 }, { 0x97AC, 72867 }, { 0x97B3, 72873 }, { 0x97B4, 72879 }, { 0x97C2, 72885 }, { 0x97BC, 72891 }, { 0x97B1, 72897 }, { 0x97AE, 72903 }, { 0x97B8, 72909 }, { 0x97BE, 72915 }, { 0x97C5, 72921 }, { 0x963C, 72927 }, { 0x963D, 72933 }, { 0x963E, 72939 }, { 0x963F, 72945 }, { 0x9640, 72951 }, { 0x9641, 72957 }, { 0x9642, 72963 }, { 0x9643, 72969 }, { 0x9644, 72975 }, { 0x9645, 72981 }, { 0x9646, 72987 }, { 0x9647, 72993 }, { 0x9648, 72999 }, { 0x9649, 73005 }, { 0x964A, 73011 }, { 0x964B, 73017 }, { 0x964C, 73023 }, { 0x964D, 73029 }, { 0x964E, 73035 }, { 0x964F, 73041 }, { 0x9650, 73047 }, { 0x9651, 73053 }, { 0x9652, 73059 }, { 0x9653, 73065 }, { 0x9654, 73071 }, { 0x9655, 73077 }, { 0x979B, 73083 }, { 0x979C, 73089 }, { 0x979F, 73095 }, { 0x979D, 73101 }, { 0x97A6, 73107 }, { 0x9796, 73113 }, { 0x97A5, 73119 }, { 0x97A7, 73125 }, { 0x97A0, 73131 }, { 0x97A3, 73137 }, { 0x9791, 73143 }, { 0x9798, 73149 }, { 0x9795, 73155 }, { 0x9790, 73161 }, { 0x9793, 73167 }, { 0x9792, 73173 }, { 0x9799, 73179 }, { 0x979A, 73185 }, { 0x97A8, 73191 }, { 0x97A2, 73197 }, { 0x9797, 73203 }, { 0x97A1, 73209 }, { 0x9794, 73216 }, { 0x979E, 73222 }, { 0x97A4, 73228 }, { 0x97C4, 73234 }, { 0x97C3, 73240 }, { 0x95D4, 73246 }, { 0x95D5, 73251 }, { 0x95D6, 73256 }, { 0x95D7, 73261 }, { 0x95D8, 73266 }, { 0x95D9, 73271 }, { 0x95DA, 73276 }, { 0x95DB, 73281 }, { 0x95DC, 73286 }, { 0x95DD, 73291 }, { 0x95DE, 73296 }, { 0x95DF, 73301 }, { 0x95E0, 73306 }, { 0x95E1, 73311 }, { 0x95E2, 73316 }, { 0x95E3, 73321 }, { 0x95E4, 73326 }, { 0x95E5, 73331 }, { 0x95E6, 73336 }, { 0x95E7, 73341 }, { 0x95E8, 73346 }, { 0x95E9, 73351 }, { 0x95EA, 73356 }, { 0x95EB, 73361 }, { 0x95EC, 73366 }, { 0x95ED, 73371 }, { 0x9761, 73376 }, { 0x9762, 73381 }, { 0x9765, 73386 }, { 0x9763, 73391 }, { 0x976C, 73396 }, { 0x975C, 73401 }, { 0x976B, 73406 }, { 0x976D, 73411 }, { 0x9766, 73416 }, { 0x9769, 73421 }, { 0x9757, 73426 }, { 0x975E, 73431 }, { 0x975B, 73436 }, { 0x9756, 73441 }, { 0x9759, 73446 }, { 0x9758, 73451 }, { 0x975F, 73456 }, { 0x9760, 73461 }, { 0x976E, 73466 }, { 0x9768, 73471 }, { 0x975D, 73476 }, { 0x9767, 73481 }, { 0x975A, 73487 }, { 0x9764, 73492 }, { 0x976A, 73497 }, { 0x978A, 73502 }, { 0x9789, 73507 }, { 0x97E3, 73512 }, { 0x97E8, 73516 }, { 0x97E4, 73520 }, { 0x97E7, 73524 }, { 0x97E6, 73528 }, { 0x97EB, 73532 }, { 0x97E2, 73536 }, { 0x97EA, 73540 }, { 0x97E9, 73544 }, { 0x97E5, 73548 }, { 0x95BA, 73552 }, { 0x95BB, 73556 }, { 0x95BC, 73560 }, { 0x95BD, 73564 }, { 0x95BE, 73568 }, { 0x95BF, 73572 }, { 0x95C0, 73576 }, { 0x95C1, 73580 }, { 0x95C2, 73584 }, { 0x95C3, 73588 }, { 0x95C4, 73592 }, { 0x95C5, 73596 }, { 0x95C6, 73600 }, { 0x95C7, 73604 }, { 0x95C8, 73608 }, { 0x95C9, 73612 }, { 0x95CA, 73616 }, { 0x95CB, 73620 }, { 0x95CC, 73624 }, { 0x95CD, 73628 }, { 0x95CE, 73632 }, { 0x95CF, 73636 }, { 0x95D0, 73640 }, { 0x95D1, 73644 }, { 0x95D2, 73648 }, { 0x95D3, 73652 }, { 0x9622, 73656 }, { 0x9623, 73661 }, { 0x9624, 73666 }, { 0x9625, 73671 }, { 0x9626, 73676 }, { 0x9627, 73681 }, { 0x9628, 73686 }, { 0x9629, 73691 }, { 0x962A, 73696 }, { 0x962B, 73701 }, { 0x962C, 73706 }, { 0x962D, 73711 }, { 0x962E, 73716 }, { 0x962F, 73721 }, { 0x9630, 73726 }, { 0x9631, 73731 }, { 0x9632, 73736 }, { 0x9633, 73741 }, { 0x9634, 73746 }, { 0x9635, 73751 }, { 0x9636, 73756 }, { 0x9637, 73761 }, { 0x9638, 73766 }, { 0x9639, 73771 }, { 0x963A, 73776 }, { 0x963B, 73781 }, { 0x9608, 73786 }, { 0x9609, 73791 }, { 0x960A, 73796 }, { 0x960B, 73801 }, { 0x960C, 73806 }, { 0x960D, 73811 }, { 0x960E, 73816 }, { 0x960F, 73821 }, { 0x9610, 73826 }, { 0x9611, 73831 }, { 0x9612, 73836 }, { 0x9613, 73841 }, { 0x9614, 73846 }, { 0x9615, 73851 }, { 0x9616, 73856 }, { 0x9617, 73861 }, { 0x9618, 73866 }, { 0x9619, 73871 }, { 0x961A, 73876 }, { 0x961B, 73881 }, { 0x961C, 73886 }, { 0x961D, 73891 }, { 0x961E, 73896 }, { 0x961F, 73901 }, { 0x9620, 73906 }, { 0x9621, 73911 }, { 0x95A0, 73916 }, { 0x95A1, 73920 }, { 0x95A2, 73924 }, { 0x95A3, 73928 }, { 0x95A4, 73932 }, { 0x95A5, 73936 }, { 0x95A6, 73940 }, { 0x95A7, 73944 }, { 0x95A8, 73948 }, { 0x95A9, 73952 }, { 0x95AA, 73956 }, { 0x95AB, 73960 }, { 0x95AC, 73964 }, { 0x95AD, 73968 }, { 0x95AE, 73972 }, { 0x95AF, 73976 }, { 0x95B0, 73980 }, { 0x95B1, 73984 }, { 0x95B2, 73988 }, { 0x95B3, 73992 }, { 0x95B4, 73996 }, { 0x95B5, 74000 }, { 0x95B6, 74004 }, { 0x95B7, 74008 }, { 0x95B8, 74012 }, { 0x95B9, 74016 }, { 0x97D9, 74020 }, { 0x97DE, 74024 }, { 0x97DA, 74028 }, { 0x97DD, 74032 }, { 0x97DC, 74036 }, { 0x97E1, 74040 }, { 0x97D8, 74044 }, { 0x97E0, 74048 }, { 0x97DF, 74052 }, { 0x97DB, 74056 }, { 0x9552, 74060 }, { 0x9553, 74064 }, { 0x9554, 74068 }, { 0x9555, 74072 }, { 0x9556, 74076 }, { 0x9557, 74080 }, { 0x9558, 74084 }, { 0x9559, 74088 }, { 0x955A, 74092 }, { 0x955B, 74096 }, { 0x955C, 74100 }, { 0x955D, 74104 }, { 0x955E, 74108 }, { 0x955F, 74112 }, { 0x9560, 74116 }, { 0x9561, 74120 }, { 0x9562, 74124 }, { 0x9563, 74128 }, { 0x9564, 74132 }, { 0x9565, 74136 }, { 0x9566, 74140 }, { 0x9567, 74144 }, { 0x9568, 74148 }, { 0x9569, 74152 }, { 0x956A, 74156 }, { 0x956B, 74160 }, { 0x9538, 74164 }, { 0x9539, 74168 }, { 0x953B, 74172 }, { 0x953C, 74176 }, { 0x953D, 74180 }, { 0x953E, 74184 }, { 0x9540, 74188 }, { 0x9541, 74192 }, { 0x9542, 74196 }, { 0x9543, 74200 }, { 0x9544, 74204 }, { 0x9546, 74208 }, { 0x954A, 74212 }, { 0x954B, 74216 }, { 0x954C, 74220 }, { 0x954D, 74224 }, { 0x954E, 74228 }, { 0x954F, 74232 }, { 0x9550, 74236 }, { 0x2011, 74240 }, { 0x211E, 74242 }, { 0x6E31, 74244 }, { 0x6E32, 74250 }, { 0x6E33, 74256 }, { 0x6E30, 74262 }, { 0x6E3F, 74269 }, { 0x6E3B, 74276 }, { 0x6E37, 74284 }, { 0x6E43, 74291 }, { 0x6E17, 74299 }, { 0x6E41, 74307 }, { 0x6E3D, 74314 }, { 0x6E47, 74322 }, { 0x6E39, 74329 }, { 0x6E35, 74337 }, { 0x6E34, 74343 }, { 0x6E13, 74350 }, { 0x6E10, 74355 }, { 0x6E40, 74360 }, { 0x6E3C, 74367 }, { 0x6E38, 74375 }, { 0x6E44, 74382 }, { 0x6E18, 74390 }, { 0x6E42, 74398 }, { 0x6E3E, 74405 }, { 0x6E48, 74413 }, { 0x6E3A, 74420 }, { 0x6E36, 74428 }, { 0x6E16, 74434 }, { 0x6E14, 74440 }, { 0x6E19, 74445 }, { 0x6E15, 74451 }, { 0x6E12, 74457 }, { 0x6E11, 74464 }, { 0x221D, 74470 }, { 0x27A9, 74472 }, { 0x29F4, 74476 }, { 0x23E4, 74477 }, { 0x2004, 74478 }, { 0x2608, 74480 }, { 0x27BC, 74481 }, { 0x21B6, 74484 }, { 0x21BA, 74488 }, { 0x2940, 74492 }, { 0x27F2, 74496 }, { 0x2233, 74500 }, { 0x2A11, 74503 }, { 0x2246, 74505 }, { 0x2A70, 74511 }, { 0x2245, 74516 }, { 0x2252, 74519 }, { 0x2382, 74526 }, { 0x2140, 74529 }, { 0x213C, 74532 }, { 0x213D, 74535 }, { 0x2146, 74538 }, { 0x2147, 74542 }, { 0x2148, 74546 }, { 0x2149, 74550 }, { 0x2145, 74554 }, { 0x2102, 74558 }, { 0x210D, 74561 }, { 0x2115, 74564 }, { 0x2119, 74567 }, { 0x211A, 74570 }, { 0x211D, 74573 }, { 0x2124, 74576 }, { 0x213F, 74579 }, { 0x213E, 74582 }, { 0x29E8, 74585 }, { 0x29E9, 74591 }, { 0x20A0, 74597 }, { 0x2251, 74599 }, { 0x224E, 74602 }, { 0x2329, 74605 }, { 0x29FC, 74608 }, { 0x00AB, 74612 }, { 0x200E, 74617 }, { 0x202D, 74619 }, { 0x202A, 74621 }, { 0x2213, 74623 }, { 0x27BE, 74625 }, { 0x2474, 74628 }, { 0x2479, 74631 }, { 0x2475, 74634 }, { 0x2478, 74637 }, { 0x2477, 74640 }, { 0x247C, 74643 }, { 0x247B, 74646 }, { 0x247A, 74649 }, { 0x2476, 74652 }, { 0x249C, 74655 }, { 0x249D, 74660 }, { 0x249E, 74665 }, { 0x249F, 74670 }, { 0x24A0, 74675 }, { 0x24A1, 74680 }, { 0x24A2, 74685 }, { 0x24A3, 74690 }, { 0x24A4, 74695 }, { 0x24A5, 74700 }, { 0x24A6, 74705 }, { 0x24A7, 74710 }, { 0x24A8, 74715 }, { 0x24A9, 74720 }, { 0x24AA, 74725 }, { 0x24AB, 74730 }, { 0x24AC, 74735 }, { 0x24AD, 74740 }, { 0x24AE, 74745 }, { 0x24AF, 74750 }, { 0x24B0, 74755 }, { 0x24B1, 74760 }, { 0x24B2, 74765 }, { 0x24B3, 74770 }, { 0x24B4, 74775 }, { 0x24B5, 74780 }, { 0x3206, 74785 }, { 0x3214, 74788 }, { 0x3208, 74792 }, { 0x3216, 74795 }, { 0x321C, 74799 }, { 0x320D, 74803 }, { 0x321B, 74806 }, { 0x3207, 74810 }, { 0x3215, 74813 }, { 0x3204, 74817 }, { 0x3212, 74820 }, { 0x3201, 74824 }, { 0x320F, 74827 }, { 0x3205, 74831 }, { 0x3213, 74834 }, { 0x3203, 74838 }, { 0x3211, 74841 }, { 0x3200, 74845 }, { 0x320E, 74848 }, { 0x3202, 74852 }, { 0x3210, 74855 }, { 0x3209, 74859 }, { 0x3217, 74862 }, { 0x320A, 74866 }, { 0x3218, 74869 }, { 0x320C, 74873 }, { 0x321A, 74876 }, { 0x320B, 74880 }, { 0x3219, 74883 }, { 0x321E, 74887 }, { 0x321D, 74892 }, { 0x247D, 74896 }, { 0x247E, 74899 }, { 0x247F, 74902 }, { 0x2487, 74905 }, { 0x2482, 74908 }, { 0x2483, 74911 }, { 0x2485, 74914 }, { 0x2481, 74917 }, { 0x2486, 74920 }, { 0x2480, 74923 }, { 0x2484, 74926 }, { 0x3220, 74929 }, { 0x3225, 74932 }, { 0x3230, 74935 }, { 0x3229, 74938 }, { 0x3221, 74941 }, { 0x323A, 74944 }, { 0x322B, 74947 }, { 0x3224, 74950 }, { 0x3223, 74953 }, { 0x3232, 74956 }, { 0x322A, 74959 }, { 0x3234, 74962 }, { 0x3228, 74965 }, { 0x3241, 74968 }, { 0x3242, 74971 }, { 0x322D, 74974 }, { 0x322F, 74977 }, { 0x3227, 74980 }, { 0x3238, 74983 }, { 0x322E, 74986 }, { 0x3243, 74989 }, { 0x3226, 74992 }, { 0x3231, 74995 }, { 0x323B, 74998 }, { 0x3222, 75001 }, { 0x322C, 75004 }, { 0x3233, 75007 }, { 0x3235, 75010 }, { 0x323F, 75013 }, { 0x3240, 75016 }, { 0x323E, 75019 }, { 0x3236, 75022 }, { 0x3239, 75025 }, { 0x323C, 75028 }, { 0x323D, 75031 }, { 0x3237, 75034 }, { 0x27C2, 75037 }, { 0x2AE1, 75038 }, { 0x200F, 75041 }, { 0x202E, 75043 }, { 0x202B, 75045 }, { 0x29E7, 75047 }, { 0x2243, 75048 }, { 0x2749, 75051 }, { 0x2715, 75053 }, { 0x00D7, 75055 }, { 0x2A34, 75057 }, { 0x2A35, 75063 }, { 0x2A37, 75069 }, { 0x2A3B, 75074 }, { 0x2A30, 75078 }, { 0x2A31, 75083 }, { 0x232A, 75087 }, { 0x29FD, 75090 }, { 0x00BB, 75094 }, { 0x26BC, 75099 }, { 0x27B6, 75100 }, { 0x27B4, 75104 }, { 0x27B5, 75108 }, { 0x27BA, 75111 }, { 0x273B, 75114 }, { 0x279D, 75116 }, { 0x27B3, 75119 }, { 0x30A0, 75122 }, { 0x309B, 75125 }, { 0x30FC, 75129 }, { 0x309C, 75133 }, { 0x2394, 75137 }, { 0x267D, 75139 }, { 0x238F, 75142 }, { 0x2390, 75145 }, { 0x2392, 75148 }, { 0x2391, 75150 }, }; static const struct { uint16_t code; uint32_t name:24; } #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) __attribute__((__packed__)) #endif unicode_code_to_name[18242] = { { 0x0020, 22740 }, { 0x0021, 68656 }, { 0x0022, 65766 }, { 0x0023, 35593 }, { 0x0024, 31225 }, { 0x0025, 42973 }, { 0x0026, 56108 }, { 0x0027, 66826 }, { 0x0028, 9464 }, { 0x0029, 21991 }, { 0x002A, 45081 }, { 0x002B, 9633 }, { 0x002C, 10461 }, { 0x002D, 69568 }, { 0x002E, 9112 }, { 0x002F, 43548 }, { 0x0030, 10518 }, { 0x0031, 10482 }, { 0x0032, 10494 }, { 0x0033, 10532 }, { 0x0034, 10506 }, { 0x0035, 10500 }, { 0x0036, 10488 }, { 0x0037, 10526 }, { 0x0038, 10520 }, { 0x0039, 10512 }, { 0x003A, 10455 }, { 0x003B, 65813 }, { 0x003C, 64726 }, { 0x003D, 31706 }, { 0x003E, 69497 }, { 0x003F, 55446 }, { 0x0040, 66837 }, { 0x0041, 18231 }, { 0x0042, 18454 }, { 0x0043, 18497 }, { 0x0044, 18552 }, { 0x0045, 18632 }, { 0x0046, 18817 }, { 0x0047, 18834 }, { 0x0048, 18893 }, { 0x0049, 18954 }, { 0x004A, 19068 }, { 0x004B, 19084 }, { 0x004C, 19154 }, { 0x004D, 19254 }, { 0x004E, 19284 }, { 0x004F, 19369 }, { 0x0050, 19659 }, { 0x0051, 19709 }, { 0x0052, 19728 }, { 0x0053, 19811 }, { 0x0054, 19888 }, { 0x0055, 19965 }, { 0x0056, 20187 }, { 0x0057, 20217 }, { 0x0058, 20265 }, { 0x0059, 20282 }, { 0x005A, 20361 }, { 0x005B, 9385 }, { 0x005C, 42994 }, { 0x005D, 21912 }, { 0x005E, 66835 }, { 0x005F, 6031 }, { 0x0060, 10638 }, { 0x0061, 14473 }, { 0x0062, 14711 }, { 0x0063, 14768 }, { 0x0064, 14829 }, { 0x0065, 14925 }, { 0x0066, 15123 }, { 0x0067, 15154 }, { 0x0068, 15220 }, { 0x0069, 15294 }, { 0x006A, 15408 }, { 0x006B, 15436 }, { 0x006C, 15513 }, { 0x006D, 15631 }, { 0x006E, 15675 }, { 0x006F, 15786 }, { 0x0070, 16077 }, { 0x0071, 16141 }, { 0x0072, 16173 }, { 0x0073, 16292 }, { 0x0074, 16396 }, { 0x0075, 16499 }, { 0x0076, 16728 }, { 0x0077, 16778 }, { 0x0078, 16833 }, { 0x0079, 16857 }, { 0x007A, 16943 }, { 0x007B, 9231 }, { 0x007C, 56066 }, { 0x007D, 21824 }, { 0x007E, 23008 }, { 0x00A0, 54927 }, { 0x00A1, 53357 }, { 0x00A2, 8729 }, { 0x00A3, 21740 }, { 0x00A4, 48521 }, { 0x00A5, 8712 }, { 0x00A6, 30305 }, { 0x00A7, 43022 }, { 0x00A8, 63244 }, { 0x00A9, 58349 }, { 0x00AA, 51775 }, { 0x00AB, 74612 }, { 0x00AC, 6723 }, { 0x00AD, 9710 }, { 0x00AE, 67979 }, { 0x00AF, 35513 }, { 0x00B0, 31179 }, { 0x00B1, 67969 }, { 0x00B2, 69284 }, { 0x00B3, 69319 }, { 0x00B4, 10104 }, { 0x00B5, 21176 }, { 0x00B6, 42975 }, { 0x00B7, 35570 }, { 0x00B8, 38870 }, { 0x00B9, 69280 }, { 0x00BA, 65112 }, { 0x00BB, 75094 }, { 0x00BC, 37732 }, { 0x00BD, 37712 }, { 0x00BE, 37768 }, { 0x00BF, 53352 }, { 0x00C0, 18348 }, { 0x00C1, 18288 }, { 0x00C2, 18406 }, { 0x00C3, 18354 }, { 0x00C4, 18392 }, { 0x00C5, 18265 }, { 0x00C6, 20426 }, { 0x00C7, 18532 }, { 0x00C8, 18675 }, { 0x00C9, 18657 }, { 0x00CA, 18762 }, { 0x00CB, 18756 }, { 0x00CC, 18997 }, { 0x00CD, 18979 }, { 0x00CE, 19062 }, { 0x00CF, 19048 }, { 0x00D0, 20523 }, { 0x00D1, 19350 }, { 0x00D2, 19483 }, { 0x00D3, 19465 }, { 0x00D4, 19611 }, { 0x00D5, 19489 }, { 0x00D6, 19597 }, { 0x00D7, 75055 }, { 0x00D8, 19576 }, { 0x00D9, 20061 }, { 0x00DA, 20043 }, { 0x00DB, 20174 }, { 0x00DC, 20129 }, { 0x00DD, 20319 }, { 0x00DE, 20626 }, { 0x00DF, 17465 }, { 0x00E0, 14590 }, { 0x00E1, 14530 }, { 0x00E2, 14663 }, { 0x00E3, 14604 }, { 0x00E4, 14642 }, { 0x00E5, 14507 }, { 0x00E6, 17042 }, { 0x00E7, 14809 }, { 0x00E8, 14968 }, { 0x00E9, 14950 }, { 0x00EA, 15068 }, { 0x00EB, 15055 }, { 0x00EC, 15330 }, { 0x00ED, 15312 }, { 0x00EE, 15402 }, { 0x00EF, 15381 }, { 0x00F0, 17225 }, { 0x00F1, 15739 }, { 0x00F2, 15908 }, { 0x00F3, 15890 }, { 0x00F4, 16029 }, { 0x00F5, 15914 }, { 0x00F6, 16015 }, { 0x00F7, 50308 }, { 0x00F8, 15994 }, { 0x00F9, 16595 }, { 0x00FA, 16577 }, { 0x00FB, 16715 }, { 0x00FC, 16663 }, { 0x00FD, 16901 }, { 0x00FE, 17476 }, { 0x00FF, 16931 }, { 0x0100, 18367 }, { 0x0101, 14617 }, { 0x0102, 18294 }, { 0x0103, 14536 }, { 0x0104, 18373 }, { 0x0105, 14623 }, { 0x0106, 18514 }, { 0x0107, 14791 }, { 0x0108, 18546 }, { 0x0109, 14823 }, { 0x010A, 18501 }, { 0x010B, 14772 }, { 0x010C, 18520 }, { 0x010D, 14797 }, { 0x010E, 18583 }, { 0x010F, 14880 }, { 0x0110, 18607 }, { 0x0111, 14893 }, { 0x0112, 18701 }, { 0x0113, 15000 }, { 0x0114, 18663 }, { 0x0115, 14956 }, { 0x0116, 18636 }, { 0x0117, 14929 }, { 0x0118, 18723 }, { 0x0119, 15022 }, { 0x011A, 18669 }, { 0x011B, 14962 }, { 0x011C, 18887 }, { 0x011D, 15214 }, { 0x011E, 18857 }, { 0x011F, 15177 }, { 0x0120, 18838 }, { 0x0121, 15158 }, { 0x0122, 18881 }, { 0x0123, 15201 }, { 0x0124, 18948 }, { 0x0125, 15288 }, { 0x0126, 18924 }, { 0x0127, 15264 }, { 0x0128, 19003 }, { 0x0129, 15336 }, { 0x012A, 19023 }, { 0x012B, 15356 }, { 0x012C, 18985 }, { 0x012D, 15318 }, { 0x012E, 19029 }, { 0x012F, 15362 }, { 0x0130, 18958 }, { 0x0131, 17682 }, { 0x0132, 20774 }, { 0x0133, 17909 }, { 0x0134, 19078 }, { 0x0135, 15424 }, { 0x0136, 19135 }, { 0x0137, 15487 }, { 0x0138, 17263 }, { 0x0139, 19194 }, { 0x013A, 15565 }, { 0x013B, 19241 }, { 0x013C, 15604 }, { 0x013D, 19200 }, { 0x013E, 15571 }, { 0x013F, 19221 }, { 0x0140, 15584 }, { 0x0141, 19235 }, { 0x0142, 15598 }, { 0x0143, 19324 }, { 0x0144, 15721 }, { 0x0145, 19356 }, { 0x0146, 15752 }, { 0x0147, 19330 }, { 0x0148, 15727 }, { 0x0149, 15779 }, { 0x014A, 20515 }, { 0x014B, 17197 }, { 0x014C, 19533 }, { 0x014D, 15958 }, { 0x014E, 19471 }, { 0x014F, 15896 }, { 0x0150, 19519 }, { 0x0151, 15944 }, { 0x0152, 20778 }, { 0x0153, 17913 }, { 0x0154, 19768 }, { 0x0155, 16220 }, { 0x0156, 19793 }, { 0x0157, 16252 }, { 0x0158, 19774 }, { 0x0159, 16226 }, { 0x015A, 19839 }, { 0x015B, 16326 }, { 0x015C, 19882 }, { 0x015D, 16390 }, { 0x015E, 19876 }, { 0x015F, 16377 }, { 0x0160, 19854 }, { 0x0161, 16341 }, { 0x0162, 19938 }, { 0x0163, 16459 }, { 0x0164, 19919 }, { 0x0165, 16433 }, { 0x0166, 19932 }, { 0x0167, 16453 }, { 0x0168, 20067 }, { 0x0169, 16601 }, { 0x016A, 20102 }, { 0x016B, 16636 }, { 0x016C, 20049 }, { 0x016D, 16583 }, { 0x016E, 20036 }, { 0x016F, 16570 }, { 0x0170, 20088 }, { 0x0171, 16622 }, { 0x0172, 20116 }, { 0x0173, 16650 }, { 0x0174, 20259 }, { 0x0175, 16827 }, { 0x0176, 20355 }, { 0x0177, 16937 }, { 0x0178, 20349 }, { 0x0179, 20392 }, { 0x017A, 16980 }, { 0x017B, 20365 }, { 0x017C, 16947 }, { 0x017D, 20398 }, { 0x017E, 16986 }, { 0x017F, 17341 }, { 0x0180, 14749 }, { 0x0181, 18472 }, { 0x0182, 18491 }, { 0x0183, 14755 }, { 0x0184, 20570 }, { 0x0185, 17406 }, { 0x0186, 20565 }, { 0x0187, 18508 }, { 0x0188, 14785 }, { 0x0189, 20675 }, { 0x018A, 18570 }, { 0x018B, 18613 }, { 0x018C, 14899 }, { 0x018D, 17671 }, { 0x018E, 20726 }, { 0x018F, 20609 }, { 0x0190, 20560 }, { 0x0191, 18828 }, { 0x0192, 15134 }, { 0x0193, 18845 }, { 0x0194, 20601 }, { 0x0195, 17112 }, { 0x0196, 20556 }, { 0x0197, 19035 }, { 0x0198, 19095 }, { 0x0199, 15447 }, { 0x019A, 15517 }, { 0x019B, 17528 }, { 0x019C, 20659 }, { 0x019D, 19302 }, { 0x019E, 15713 }, { 0x019F, 19555 }, { 0x01A0, 19403 }, { 0x01A1, 15828 }, { 0x01A2, 20491 }, { 0x01A3, 17138 }, { 0x01A4, 19670 }, { 0x01A5, 16088 }, { 0x01A6, 17935 }, { 0x01A7, 20575 }, { 0x01A8, 17411 }, { 0x01A9, 20519 }, { 0x01AA, 18206 }, { 0x01AB, 16465 }, { 0x01AC, 19906 }, { 0x01AD, 16420 }, { 0x01AE, 19951 }, { 0x01AF, 19988 }, { 0x01B0, 16522 }, { 0x01B1, 20715 }, { 0x01B2, 20198 }, { 0x01B3, 20300 }, { 0x01B4, 16875 }, { 0x01B5, 20404 }, { 0x01B6, 17006 }, { 0x01B7, 20527 }, { 0x01B8, 20537 }, { 0x01B9, 17258 }, { 0x01BA, 17239 }, { 0x01BB, 17941 }, { 0x01BC, 20580 }, { 0x01BD, 17416 }, { 0x01BE, 18199 }, { 0x01BF, 17946 }, { 0x01C0, 18155 }, { 0x01C1, 18174 }, { 0x01C2, 18178 }, { 0x01C3, 18218 }, { 0x01C4, 20469 }, { 0x01C5, 18597 }, { 0x01C6, 17090 }, { 0x01C7, 20483 }, { 0x01C8, 19206 }, { 0x01C9, 17120 }, { 0x01CA, 20487 }, { 0x01CB, 19342 }, { 0x01CC, 17134 }, { 0x01CD, 18342 }, { 0x01CE, 14584 }, { 0x01CF, 18991 }, { 0x01D0, 15324 }, { 0x01D1, 19477 }, { 0x01D2, 15902 }, { 0x01D3, 20055 }, { 0x01D4, 16589 }, { 0x01D5, 20159 }, { 0x01D6, 16693 }, { 0x01D7, 20135 }, { 0x01D8, 16669 }, { 0x01D9, 20143 }, { 0x01DA, 16677 }, { 0x01DB, 20151 }, { 0x01DC, 16685 }, { 0x01DD, 17544 }, { 0x01DE, 18398 }, { 0x01DF, 14648 }, { 0x01E0, 18242 }, { 0x01E1, 14484 }, { 0x01E2, 20436 }, { 0x01E3, 17052 }, { 0x01E4, 18875 }, { 0x01E5, 15195 }, { 0x01E6, 18863 }, { 0x01E7, 15183 }, { 0x01E8, 19114 }, { 0x01E9, 15466 }, { 0x01EA, 19562 }, { 0x01EB, 15980 }, { 0x01EC, 19568 }, { 0x01ED, 15986 }, { 0x01EE, 20531 }, { 0x01EF, 17245 }, { 0x01F0, 15412 }, { 0x01F1, 20465 }, { 0x01F2, 18589 }, { 0x01F3, 17086 }, { 0x01F4, 18851 }, { 0x01F5, 15171 }, { 0x01F6, 20605 }, { 0x01F7, 20589 }, { 0x01F8, 19336 }, { 0x01F9, 15733 }, { 0x01FA, 18272 }, { 0x01FB, 14514 }, { 0x01FC, 20430 }, { 0x01FD, 17046 }, { 0x01FE, 19582 }, { 0x01FF, 16000 }, { 0x0200, 18360 }, { 0x0201, 14610 }, { 0x0202, 18385 }, { 0x0203, 14635 }, { 0x0204, 18694 }, { 0x0205, 14993 }, { 0x0206, 18749 }, { 0x0207, 15048 }, { 0x0208, 19016 }, { 0x0209, 15349 }, { 0x020A, 19041 }, { 0x020B, 15374 }, { 0x020C, 19526 }, { 0x020D, 15951 }, { 0x020E, 19590 }, { 0x020F, 16008 }, { 0x0210, 19780 }, { 0x0211, 16232 }, { 0x0212, 19799 }, { 0x0213, 16280 }, { 0x0214, 20095 }, { 0x0215, 16629 }, { 0x0216, 20122 }, { 0x0217, 16656 }, { 0x0218, 19869 }, { 0x0219, 16356 }, { 0x021A, 19925 }, { 0x021B, 16439 }, { 0x021C, 20593 }, { 0x021D, 17425 }, { 0x021E, 18918 }, { 0x021F, 15258 }, { 0x0220, 19316 }, { 0x0221, 14847 }, { 0x0222, 20499 }, { 0x0223, 17146 }, { 0x0224, 20379 }, { 0x0225, 16967 }, { 0x0226, 18235 }, { 0x0227, 14477 }, { 0x0228, 18735 }, { 0x0229, 15034 }, { 0x022A, 19603 }, { 0x022B, 16021 }, { 0x022C, 19503 }, { 0x022D, 15928 }, { 0x022E, 19373 }, { 0x022F, 15790 }, { 0x0230, 19380 }, { 0x0231, 15797 }, { 0x0232, 20337 }, { 0x0233, 16919 }, { 0x0234, 15545 }, { 0x0235, 15693 }, { 0x0236, 16414 }, { 0x0237, 17687 }, { 0x0238, 17081 }, { 0x0239, 17150 }, { 0x023A, 18379 }, { 0x023B, 18526 }, { 0x023C, 14803 }, { 0x023D, 19158 }, { 0x023E, 19944 }, { 0x023F, 16363 }, { 0x0240, 16992 }, { 0x0241, 20680 }, { 0x0242, 17708 }, { 0x0243, 18485 }, { 0x0244, 19969 }, { 0x0245, 20664 }, { 0x0246, 18729 }, { 0x0247, 15028 }, { 0x0248, 19072 }, { 0x0249, 15418 }, { 0x024A, 20618 }, { 0x024B, 16151 }, { 0x024C, 19787 }, { 0x024D, 16246 }, { 0x024E, 20343 }, { 0x024F, 16925 }, { 0x0250, 17539 }, { 0x0251, 17429 }, { 0x0252, 17666 }, { 0x0253, 14729 }, { 0x0254, 17383 }, { 0x0255, 14779 }, { 0x0256, 14874 }, { 0x0257, 14853 }, { 0x0258, 17765 }, { 0x0259, 17448 }, { 0x025A, 17452 }, { 0x025B, 17370 }, { 0x025C, 17777 }, { 0x025D, 17783 }, { 0x025E, 17521 }, { 0x025F, 17692 }, { 0x0260, 15165 }, { 0x0261, 17534 }, { 0x0262, 17979 }, { 0x0263, 17444 }, { 0x0264, 17396 }, { 0x0265, 17554 }, { 0x0266, 15238 }, { 0x0267, 17321 }, { 0x0268, 15368 }, { 0x0269, 17327 }, { 0x026A, 17996 }, { 0x026B, 15591 }, { 0x026C, 15539 }, { 0x026D, 15617 }, { 0x026E, 17337 }, { 0x026F, 17590 }, { 0x0270, 17595 }, { 0x0271, 15649 }, { 0x0272, 15699 }, { 0x0273, 15765 }, { 0x0274, 18028 }, { 0x0275, 17494 }, { 0x0276, 18088 }, { 0x0277, 17516 }, { 0x0278, 17279 }, { 0x0279, 17603 }, { 0x027A, 17615 }, { 0x027B, 17608 }, { 0x027C, 16207 }, { 0x027D, 16214 }, { 0x027E, 16265 }, { 0x027F, 17770 }, { 0x0280, 18043 }, { 0x0281, 18137 }, { 0x0282, 16320 }, { 0x0283, 17201 }, { 0x0284, 17699 }, { 0x0285, 17470 }, { 0x0286, 17205 }, { 0x0287, 17630 }, { 0x0288, 16485 }, { 0x0289, 16503 }, { 0x028A, 17743 }, { 0x028B, 16745 }, { 0x028C, 17635 }, { 0x028D, 17640 }, { 0x028E, 17645 }, { 0x028F, 18073 }, { 0x0290, 17025 }, { 0x0291, 16961 }, { 0x0292, 17229 }, { 0x0293, 17233 }, { 0x0294, 18164 }, { 0x0295, 18226 }, { 0x0296, 18194 }, { 0x0297, 18222 }, { 0x0298, 18186 }, { 0x0299, 17954 }, { 0x029A, 17510 }, { 0x029B, 17984 }, { 0x029C, 17991 }, { 0x029D, 15430 }, { 0x029E, 17580 }, { 0x029F, 18011 }, { 0x02A0, 16145 }, { 0x02A1, 18168 }, { 0x02A2, 18211 }, { 0x02A3, 17096 }, { 0x02A4, 17302 }, { 0x02A5, 17101 }, { 0x02A6, 17168 }, { 0x02A7, 17401 }, { 0x02A8, 17155 }, { 0x02A9, 17307 }, { 0x02AA, 17124 }, { 0x02AB, 17129 }, { 0x02AC, 18190 }, { 0x02AD, 18182 }, { 0x02AE, 17559 }, { 0x02AF, 17566 }, { 0x02B0, 54170 }, { 0x02B1, 54174 }, { 0x02B2, 54186 }, { 0x02B3, 54250 }, { 0x02B4, 54449 }, { 0x02B5, 54454 }, { 0x02B6, 54509 }, { 0x02B7, 54294 }, { 0x02B8, 54302 }, { 0x02B9, 54116 }, { 0x02BA, 54543 }, { 0x02BB, 54612 }, { 0x02BC, 54827 }, { 0x02BD, 54790 }, { 0x02BE, 54119 }, { 0x02BF, 54058 }, { 0x02C0, 54775 }, { 0x02C1, 54794 }, { 0x02C2, 54063 }, { 0x02C3, 54124 }, { 0x02C4, 53873 }, { 0x02C5, 54025 }, { 0x02C6, 54830 }, { 0x02C7, 10445 }, { 0x02C8, 54799 }, { 0x02C9, 54551 }, { 0x02CA, 54081 }, { 0x02CB, 54102 }, { 0x02CC, 53975 }, { 0x02CD, 53965 }, { 0x02CE, 53938 }, { 0x02CF, 53933 }, { 0x02D0, 54858 }, { 0x02D1, 54029 }, { 0x02D2, 54721 }, { 0x02D3, 54715 }, { 0x02D4, 53869 }, { 0x02D5, 54021 }, { 0x02D6, 54071 }, { 0x02D7, 54112 }, { 0x02D8, 10378 }, { 0x02D9, 5782 }, { 0x02DA, 9699 }, { 0x02DB, 35640 }, { 0x02DC, 22588 }, { 0x02DD, 31564 }, { 0x02DE, 54596 }, { 0x02DF, 54098 }, { 0x02E0, 54383 }, { 0x02E1, 54200 }, { 0x02E2, 54254 }, { 0x02E3, 54298 }, { 0x02E4, 54532 }, { 0x02E5, 54834 }, { 0x02E6, 54034 }, { 0x02E7, 53991 }, { 0x02E8, 53928 }, { 0x02E9, 54803 }, { 0x02EA, 54015 }, { 0x02EB, 54075 }, { 0x02EC, 54779 }, { 0x02ED, 54862 }, { 0x02EE, 54547 }, { 0x02EF, 53909 }, { 0x02F0, 53904 }, { 0x02F1, 53919 }, { 0x02F2, 53943 }, { 0x02F3, 53924 }, { 0x02F4, 54554 }, { 0x02F5, 54565 }, { 0x02F6, 54559 }, { 0x02F7, 53948 }, { 0x02F8, 54581 }, { 0x02F9, 54090 }, { 0x02FA, 53899 }, { 0x02FB, 54085 }, { 0x02FC, 53894 }, { 0x02FD, 54128 }, { 0x02FE, 54067 }, { 0x02FF, 53914 }, { 0x0300, 57554 }, { 0x0301, 57523 }, { 0x0302, 58283 }, { 0x0303, 57841 }, { 0x0304, 57946 }, { 0x0305, 58215 }, { 0x0306, 57530 }, { 0x0307, 57402 }, { 0x0308, 58240 }, { 0x0309, 57427 }, { 0x030A, 57506 }, { 0x030B, 57876 }, { 0x030C, 57535 }, { 0x030D, 58221 }, { 0x030E, 57918 }, { 0x030F, 57887 }, { 0x0310, 58305 }, { 0x0311, 58191 }, { 0x0312, 57970 }, { 0x0313, 57540 }, { 0x0314, 58217 }, { 0x0315, 57543 }, { 0x0316, 57557 }, { 0x0317, 57526 }, { 0x0318, 57442 }, { 0x0319, 57783 }, { 0x031A, 57446 }, { 0x031B, 57430 }, { 0x031C, 57437 }, { 0x031D, 57392 }, { 0x031E, 57419 }, { 0x031F, 57502 }, { 0x0320, 57769 }, { 0x0321, 58307 }, { 0x0322, 58279 }, { 0x0323, 57409 }, { 0x0324, 58242 }, { 0x0325, 57509 }, { 0x0326, 57547 }, { 0x0327, 57983 }, { 0x0328, 57959 }, { 0x0329, 58225 }, { 0x032A, 57857 }, { 0x032B, 58202 }, { 0x032C, 57537 }, { 0x032D, 58286 }, { 0x032E, 57532 }, { 0x032F, 58194 }, { 0x0330, 57843 }, { 0x0331, 57952 }, { 0x0332, 57412 }, { 0x0333, 57868 }, { 0x0334, 57846 }, { 0x0335, 57821 }, { 0x0336, 57489 }, { 0x0337, 57825 }, { 0x0338, 57493 }, { 0x0339, 57778 }, { 0x033A, 58198 }, { 0x033B, 57964 }, { 0x033C, 57991 }, { 0x033D, 57383 }, { 0x033E, 58229 }, { 0x033F, 57915 }, { 0x0340, 57550 }, { 0x0341, 57519 }, { 0x0342, 57580 }, { 0x0343, 57561 }, { 0x0344, 57576 }, { 0x0345, 57583 }, { 0x0346, 57854 }, { 0x0347, 57942 }, { 0x0348, 57923 }, { 0x0349, 57450 }, { 0x034A, 57415 }, { 0x034B, 58293 }, { 0x034C, 57849 }, { 0x034D, 57467 }, { 0x034E, 57994 }, { 0x034F, 58188 }, { 0x0350, 57813 }, { 0x0351, 57432 }, { 0x0352, 57985 }, { 0x0353, 57386 }, { 0x0354, 57480 }, { 0x0355, 57817 }, { 0x0356, 57799 }, { 0x0357, 57773 }, { 0x0358, 57405 }, { 0x0359, 58001 }, { 0x035A, 57872 }, { 0x035B, 57974 }, { 0x035C, 57883 }, { 0x035D, 57880 }, { 0x035E, 57904 }, { 0x035F, 57907 }, { 0x0360, 57891 }, { 0x0361, 57911 }, { 0x0362, 57937 }, { 0x0363, 57586 }, { 0x0364, 57607 }, { 0x0365, 57622 }, { 0x0366, 57647 }, { 0x0367, 57679 }, { 0x0368, 57591 }, { 0x0369, 57602 }, { 0x036A, 57617 }, { 0x036B, 57637 }, { 0x036C, 57652 }, { 0x036D, 57674 }, { 0x036E, 57684 }, { 0x036F, 57689 }, { 0x0370, 12320 }, { 0x0371, 10998 }, { 0x0372, 12792 }, { 0x0373, 11590 }, { 0x0374, 13034 }, { 0x0375, 10720 }, { 0x0376, 12999 }, { 0x0377, 11869 }, { 0x037A, 13522 }, { 0x037B, 11881 }, { 0x037C, 10738 }, { 0x037D, 11874 }, { 0x037E, 13059 }, { 0x0384, 11898 }, { 0x0385, 13083 }, { 0x0386, 12574 }, { 0x0387, 10643 }, { 0x0388, 12851 }, { 0x0389, 12268 }, { 0x038A, 12394 }, { 0x038C, 12917 }, { 0x038E, 12969 }, { 0x038F, 12766 }, { 0x0390, 11110 }, { 0x0391, 12428 }, { 0x0392, 12316 }, { 0x0393, 12608 }, { 0x0394, 12604 }, { 0x0395, 12797 }, { 0x0396, 12424 }, { 0x0397, 12122 }, { 0x0398, 12788 }, { 0x0399, 12324 }, { 0x039A, 12612 }, { 0x039B, 12616 }, { 0x039C, 12102 }, { 0x039D, 12106 }, { 0x039E, 12114 }, { 0x039F, 12863 }, { 0x03A0, 12110 }, { 0x03A1, 12294 }, { 0x03A3, 12784 }, { 0x03A4, 12312 }, { 0x03A5, 12929 }, { 0x03A6, 12286 }, { 0x03A7, 12118 }, { 0x03A8, 12290 }, { 0x03A9, 12620 }, { 0x03AA, 12418 }, { 0x03AB, 12993 }, { 0x03AC, 11298 }, { 0x03AD, 11653 }, { 0x03AE, 10918 }, { 0x03AF, 11072 }, { 0x03B0, 11839 }, { 0x03B1, 11144 }, { 0x03B2, 10994 }, { 0x03B3, 11359 }, { 0x03B4, 11350 }, { 0x03B5, 11599 }, { 0x03B6, 11140 }, { 0x03B7, 10764 }, { 0x03B8, 11577 }, { 0x03B9, 11002 }, { 0x03BA, 11363 }, { 0x03BB, 11371 }, { 0x03BC, 10744 }, { 0x03BD, 10748 }, { 0x03BE, 10756 }, { 0x03BF, 11665 }, { 0x03C0, 10752 }, { 0x03C1, 10966 }, { 0x03C2, 11354 }, { 0x03C3, 11573 }, { 0x03C4, 10990 }, { 0x03C5, 11731 }, { 0x03C6, 10958 }, { 0x03C7, 10760 }, { 0x03C8, 10962 }, { 0x03C9, 11375 }, { 0x03CA, 11096 }, { 0x03CB, 11825 }, { 0x03CC, 11719 }, { 0x03CD, 11801 }, { 0x03CE, 11529 }, { 0x03CF, 12088 }, { 0x03D0, 10678 }, { 0x03D1, 11887 }, { 0x03D2, 13037 }, { 0x03D3, 13042 }, { 0x03D4, 13049 }, { 0x03D5, 10659 }, { 0x03D6, 10640 }, { 0x03D7, 10646 }, { 0x03D8, 12064 }, { 0x03D9, 11585 }, { 0x03DA, 12061 }, { 0x03DB, 11581 }, { 0x03DC, 12068 }, { 0x03DD, 11595 }, { 0x03DE, 12030 }, { 0x03DF, 11367 }, { 0x03E0, 12033 }, { 0x03E1, 11569 }, { 0x03E2, 31064 }, { 0x03E3, 30771 }, { 0x03E4, 30926 }, { 0x03E5, 30633 }, { 0x03E6, 31060 }, { 0x03E7, 30767 }, { 0x03E8, 31052 }, { 0x03E9, 30759 }, { 0x03EA, 31104 }, { 0x03EB, 30811 }, { 0x03EC, 31100 }, { 0x03ED, 30807 }, { 0x03EE, 30918 }, { 0x03EF, 30625 }, { 0x03F0, 10714 }, { 0x03F1, 10667 }, { 0x03F2, 12071 }, { 0x03F3, 12027 }, { 0x03F4, 12092 }, { 0x03F5, 12075 }, { 0x03F6, 13062 }, { 0x03F7, 12308 }, { 0x03F8, 10986 }, { 0x03F9, 13004 }, { 0x03FA, 12304 }, { 0x03FB, 10982 }, { 0x03FC, 10662 }, { 0x03FD, 13016 }, { 0x03FE, 12096 }, { 0x03FF, 13009 }, { 0x0400, 49628 }, { 0x0401, 49634 }, { 0x0402, 49779 }, { 0x0403, 49828 }, { 0x0404, 50271 }, { 0x0405, 49787 }, { 0x0406, 50281 }, { 0x0407, 49723 }, { 0x0408, 49638 }, { 0x0409, 49848 }, { 0x040A, 49852 }, { 0x040B, 50007 }, { 0x040C, 49836 }, { 0x040D, 49451 }, { 0x040E, 50103 }, { 0x040F, 49910 }, { 0x0410, 49421 }, { 0x0411, 49502 }, { 0x0412, 49711 }, { 0x0413, 49791 }, { 0x0414, 49506 }, { 0x0415, 49618 }, { 0x0416, 49884 }, { 0x0417, 49735 }, { 0x0418, 49447 }, { 0x0419, 50091 }, { 0x041A, 49642 }, { 0x041B, 49514 }, { 0x041C, 49537 }, { 0x041D, 49547 }, { 0x041E, 49469 }, { 0x041F, 49675 }, { 0x0420, 49576 }, { 0x0421, 49586 }, { 0x0422, 49690 }, { 0x0423, 49479 }, { 0x0424, 49510 }, { 0x0425, 49596 }, { 0x0426, 49868 }, { 0x0427, 49756 }, { 0x0428, 49864 }, { 0x0429, 50087 }, { 0x042A, 49926 }, { 0x042B, 50019 }, { 0x042C, 49998 }, { 0x042D, 49437 }, { 0x042E, 49731 }, { 0x042F, 49719 }, { 0x0430, 48523 }, { 0x0431, 48604 }, { 0x0432, 48813 }, { 0x0433, 48893 }, { 0x0434, 48608 }, { 0x0435, 48720 }, { 0x0436, 48986 }, { 0x0437, 48837 }, { 0x0438, 48549 }, { 0x0439, 49193 }, { 0x043A, 48744 }, { 0x043B, 48616 }, { 0x043C, 48639 }, { 0x043D, 48649 }, { 0x043E, 48571 }, { 0x043F, 48777 }, { 0x0440, 48678 }, { 0x0441, 48688 }, { 0x0442, 48792 }, { 0x0443, 48581 }, { 0x0444, 48612 }, { 0x0445, 48698 }, { 0x0446, 48970 }, { 0x0447, 48858 }, { 0x0448, 48966 }, { 0x0449, 49189 }, { 0x044A, 49028 }, { 0x044B, 49121 }, { 0x044C, 49100 }, { 0x044D, 48539 }, { 0x044E, 48833 }, { 0x044F, 48821 }, { 0x0450, 48730 }, { 0x0451, 48736 }, { 0x0452, 48881 }, { 0x0453, 48930 }, { 0x0454, 49377 }, { 0x0455, 48889 }, { 0x0456, 49387 }, { 0x0457, 48825 }, { 0x0458, 48740 }, { 0x0459, 48950 }, { 0x045A, 48954 }, { 0x045B, 49109 }, { 0x045C, 48938 }, { 0x045D, 48553 }, { 0x045E, 49205 }, { 0x045F, 49012 }, { 0x0460, 50062 }, { 0x0461, 49164 }, { 0x0462, 49880 }, { 0x0463, 48982 }, { 0x0464, 50173 }, { 0x0465, 49275 }, { 0x0466, 50132 }, { 0x0467, 49234 }, { 0x0468, 50196 }, { 0x0469, 49298 }, { 0x046A, 49751 }, { 0x046B, 48853 }, { 0x046C, 50178 }, { 0x046D, 49280 }, { 0x046E, 49840 }, { 0x046F, 48942 }, { 0x0470, 49856 }, { 0x0471, 48958 }, { 0x0472, 49922 }, { 0x0473, 49024 }, { 0x0474, 50151 }, { 0x0475, 49253 }, { 0x0476, 50155 }, { 0x0477, 49257 }, { 0x0478, 49707 }, { 0x0479, 48809 }, { 0x047A, 50072 }, { 0x047B, 49174 }, { 0x047C, 50066 }, { 0x047D, 49168 }, { 0x047E, 49671 }, { 0x047F, 48773 }, { 0x0480, 50058 }, { 0x0481, 49160 }, { 0x0482, 50303 }, { 0x0483, 58017 }, { 0x0484, 58185 }, { 0x0485, 58009 }, { 0x0486, 58013 }, { 0x0487, 58177 }, { 0x0488, 58165 }, { 0x0489, 58173 }, { 0x048A, 50096 }, { 0x048B, 49198 }, { 0x048C, 50217 }, { 0x048D, 49323 }, { 0x048E, 49580 }, { 0x048F, 48682 }, { 0x0490, 49816 }, { 0x0491, 48918 }, { 0x0492, 49802 }, { 0x0493, 48904 }, { 0x0494, 49795 }, { 0x0495, 48897 }, { 0x0496, 49894 }, { 0x0497, 48996 }, { 0x0498, 49739 }, { 0x0499, 48841 }, { 0x049A, 49665 }, { 0x049B, 48767 }, { 0x049C, 49658 }, { 0x049D, 48760 }, { 0x049E, 49652 }, { 0x049F, 48754 }, { 0x04A0, 50141 }, { 0x04A1, 49243 }, { 0x04A2, 49570 }, { 0x04A3, 48672 }, { 0x04A4, 50291 }, { 0x04A5, 49397 }, { 0x04A6, 49679 }, { 0x04A7, 48781 }, { 0x04A8, 50234 }, { 0x04A9, 49340 }, { 0x04AA, 49590 }, { 0x04AB, 48692 }, { 0x04AC, 49701 }, { 0x04AD, 48803 }, { 0x04AE, 50222 }, { 0x04AF, 49328 }, { 0x04B0, 50227 }, { 0x04B1, 49333 }, { 0x04B2, 49612 }, { 0x04B3, 48714 }, { 0x04B4, 50296 }, { 0x04B5, 49402 }, { 0x04B6, 49767 }, { 0x04B7, 48869 }, { 0x04B8, 49760 }, { 0x04B9, 48862 }, { 0x04BA, 49975 }, { 0x04BB, 49077 }, { 0x04BC, 50239 }, { 0x04BD, 49345 }, { 0x04BE, 50244 }, { 0x04BF, 49350 }, { 0x04C0, 49414 }, { 0x04C1, 49888 }, { 0x04C2, 48990 }, { 0x04C3, 49646 }, { 0x04C4, 48748 }, { 0x04C5, 49524 }, { 0x04C6, 48626 }, { 0x04C7, 49551 }, { 0x04C8, 48653 }, { 0x04C9, 49557 }, { 0x04CA, 48659 }, { 0x04CB, 50276 }, { 0x04CC, 49382 }, { 0x04CD, 49541 }, { 0x04CE, 48643 }, { 0x04CF, 49304 }, { 0x04D0, 49425 }, { 0x04D1, 48527 }, { 0x04D2, 49431 }, { 0x04D3, 48533 }, { 0x04D4, 50286 }, { 0x04D5, 49392 }, { 0x04D6, 49622 }, { 0x04D7, 48724 }, { 0x04D8, 50077 }, { 0x04D9, 49179 }, { 0x04DA, 50081 }, { 0x04DB, 49183 }, { 0x04DC, 49900 }, { 0x04DD, 49002 }, { 0x04DE, 49745 }, { 0x04DF, 48847 }, { 0x04E0, 50251 }, { 0x04E1, 49357 }, { 0x04E2, 49457 }, { 0x04E3, 48559 }, { 0x04E4, 49463 }, { 0x04E5, 48565 }, { 0x04E6, 49473 }, { 0x04E7, 48575 }, { 0x04E8, 50108 }, { 0x04E9, 49210 }, { 0x04EA, 50113 }, { 0x04EB, 49215 }, { 0x04EC, 49441 }, { 0x04ED, 48543 }, { 0x04EE, 49490 }, { 0x04EF, 48592 }, { 0x04F0, 49496 }, { 0x04F1, 48598 }, { 0x04F2, 49483 }, { 0x04F3, 48585 }, { 0x04F4, 49773 }, { 0x04F5, 48875 }, { 0x04F6, 49822 }, { 0x04F7, 48924 }, { 0x04F8, 50030 }, { 0x04F9, 49132 }, { 0x04FA, 49808 }, { 0x04FB, 48910 }, { 0x04FC, 49600 }, { 0x04FD, 48702 }, { 0x04FE, 49606 }, { 0x04FF, 48708 }, { 0x0500, 49935 }, { 0x0501, 49037 }, { 0x0502, 49940 }, { 0x0503, 49042 }, { 0x0504, 49965 }, { 0x0505, 49067 }, { 0x0506, 49970 }, { 0x0507, 49072 }, { 0x0508, 49945 }, { 0x0509, 49047 }, { 0x050A, 49950 }, { 0x050B, 49052 }, { 0x050C, 49955 }, { 0x050D, 49057 }, { 0x050E, 49960 }, { 0x050F, 49062 }, { 0x0510, 50207 }, { 0x0511, 49313 }, { 0x0512, 49518 }, { 0x0513, 48620 }, { 0x0514, 49844 }, { 0x0515, 48946 }, { 0x0516, 49860 }, { 0x0517, 48962 }, { 0x0518, 49876 }, { 0x0519, 48978 }, { 0x051A, 49686 }, { 0x051B, 48788 }, { 0x051C, 49715 }, { 0x051D, 48817 }, { 0x051E, 50040 }, { 0x051F, 49142 }, { 0x0520, 49530 }, { 0x0521, 48632 }, { 0x0522, 49563 }, { 0x0523, 48665 }, { 0x0531, 44961 }, { 0x0532, 44965 }, { 0x0533, 44981 }, { 0x0534, 44917 }, { 0x0535, 44973 }, { 0x0536, 44957 }, { 0x0537, 44921 }, { 0x0538, 44925 }, { 0x0539, 44945 }, { 0x053A, 45029 }, { 0x053B, 44985 }, { 0x053C, 45045 }, { 0x053D, 45025 }, { 0x053E, 44909 }, { 0x053F, 44993 }, { 0x0540, 44929 }, { 0x0541, 44933 }, { 0x0542, 45037 }, { 0x0543, 45033 }, { 0x0544, 44997 }, { 0x0545, 44953 }, { 0x0546, 45001 }, { 0x0547, 45017 }, { 0x0548, 44949 }, { 0x0549, 44969 }, { 0x054A, 45005 }, { 0x054B, 45041 }, { 0x054C, 44941 }, { 0x054D, 45013 }, { 0x054E, 45021 }, { 0x054F, 45053 }, { 0x0550, 45009 }, { 0x0551, 44913 }, { 0x0552, 45057 }, { 0x0553, 45049 }, { 0x0554, 44989 }, { 0x0555, 44937 }, { 0x0556, 44977 }, { 0x0559, 45064 }, { 0x055A, 45073 }, { 0x055B, 45061 }, { 0x055C, 45075 }, { 0x055D, 44723 }, { 0x055E, 45070 }, { 0x055F, 45078 }, { 0x0561, 44777 }, { 0x0562, 44781 }, { 0x0563, 44797 }, { 0x0564, 44733 }, { 0x0565, 44789 }, { 0x0566, 44773 }, { 0x0567, 44737 }, { 0x0568, 44741 }, { 0x0569, 44761 }, { 0x056A, 44845 }, { 0x056B, 44801 }, { 0x056C, 44861 }, { 0x056D, 44841 }, { 0x056E, 44725 }, { 0x056F, 44809 }, { 0x0570, 44745 }, { 0x0571, 44749 }, { 0x0572, 44853 }, { 0x0573, 44849 }, { 0x0574, 44813 }, { 0x0575, 44769 }, { 0x0576, 44817 }, { 0x0577, 44833 }, { 0x0578, 44765 }, { 0x0579, 44785 }, { 0x057A, 44821 }, { 0x057B, 44857 }, { 0x057C, 44757 }, { 0x057D, 44829 }, { 0x057E, 44837 }, { 0x057F, 44869 }, { 0x0580, 44825 }, { 0x0581, 44729 }, { 0x0582, 44873 }, { 0x0583, 44865 }, { 0x0584, 44805 }, { 0x0585, 44753 }, { 0x0586, 44793 }, { 0x0587, 44877 }, { 0x0589, 44720 }, { 0x058A, 44907 }, { 0x0591, 33056 }, { 0x0592, 33004 }, { 0x0593, 33073 }, { 0x0594, 33022 }, { 0x0595, 33018 }, { 0x0596, 33053 }, { 0x0597, 33001 }, { 0x0598, 33026 }, { 0x0599, 33046 }, { 0x059A, 33015 }, { 0x059B, 33007 }, { 0x059C, 33032 }, { 0x059D, 33035 }, { 0x059E, 33070 }, { 0x059F, 33049 }, { 0x05A0, 33059 }, { 0x05A1, 32995 }, { 0x05A2, 32985 }, { 0x05A3, 32992 }, { 0x05A4, 33067 }, { 0x05A5, 33039 }, { 0x05A6, 33042 }, { 0x05A7, 32989 }, { 0x05A8, 32998 }, { 0x05A9, 33063 }, { 0x05AA, 33010 }, { 0x05AB, 32976 }, { 0x05AC, 32982 }, { 0x05AD, 32979 }, { 0x05AE, 33029 }, { 0x05AF, 32903 }, { 0x05B0, 32951 }, { 0x05B1, 32922 }, { 0x05B2, 32918 }, { 0x05B3, 32926 }, { 0x05B4, 32930 }, { 0x05B5, 32954 }, { 0x05B6, 32948 }, { 0x05B7, 32945 }, { 0x05B8, 32962 }, { 0x05B9, 32933 }, { 0x05BA, 32936 }, { 0x05BB, 32969 }, { 0x05BC, 32957 }, { 0x05BD, 32942 }, { 0x05BE, 33412 }, { 0x05BF, 32911 }, { 0x05C0, 33415 }, { 0x05C1, 32914 }, { 0x05C2, 32907 }, { 0x05C3, 33408 }, { 0x05C4, 32899 }, { 0x05C5, 32895 }, { 0x05C6, 33404 }, { 0x05C7, 32965 }, { 0x05D0, 33192 }, { 0x05D1, 33097 }, { 0x05D2, 33330 }, { 0x05D3, 33290 }, { 0x05D4, 33076 }, { 0x05D5, 33166 }, { 0x05D6, 33354 }, { 0x05D7, 33110 }, { 0x05D8, 33158 }, { 0x05D9, 33179 }, { 0x05DA, 33308 }, { 0x05DB, 33113 }, { 0x05DC, 33338 }, { 0x05DD, 33318 }, { 0x05DE, 33126 }, { 0x05DF, 33322 }, { 0x05E0, 33134 }, { 0x05E1, 33362 }, { 0x05E2, 33210 }, { 0x05E3, 33298 }, { 0x05E4, 33084 }, { 0x05E5, 33326 }, { 0x05E6, 33346 }, { 0x05E7, 33142 }, { 0x05E8, 33213 }, { 0x05E9, 33221 }, { 0x05EA, 33150 }, { 0x05F0, 33394 }, { 0x05F1, 33383 }, { 0x05F2, 33399 }, { 0x05F3, 33418 }, { 0x05F4, 33421 }, { 0x0600, 26405 }, { 0x0601, 23733 }, { 0x0602, 26459 }, { 0x0603, 23730 }, { 0x0606, 69351 }, { 0x0607, 69384 }, { 0x0608, 23706 }, { 0x0609, 69347 }, { 0x060A, 69342 }, { 0x060B, 37776 }, { 0x060C, 23764 }, { 0x060D, 23708 }, { 0x060E, 26408 }, { 0x060F, 23727 }, { 0x0610, 23756 }, { 0x0611, 23736 }, { 0x0612, 23752 }, { 0x0613, 23722 }, { 0x0614, 23749 }, { 0x0615, 23840 }, { 0x0616, 23923 }, { 0x0617, 23872 }, { 0x0618, 23935 }, { 0x0619, 23932 }, { 0x061A, 23938 }, { 0x061B, 30222 }, { 0x061E, 26422 }, { 0x061F, 30214 }, { 0x0621, 26056 }, { 0x0622, 25371 }, { 0x0623, 25327 }, { 0x0624, 25097 }, { 0x0625, 25349 }, { 0x0626, 25155 }, { 0x0627, 25310 }, { 0x0628, 24144 }, { 0x0629, 25027 }, { 0x062A, 24996 }, { 0x062B, 25851 }, { 0x062C, 25554 }, { 0x062D, 24447 }, { 0x062E, 25577 }, { 0x062F, 24260 }, { 0x0630, 25838 }, { 0x0631, 24833 }, { 0x0632, 25897 }, { 0x0633, 25747 }, { 0x0634, 26192 }, { 0x0635, 24929 }, { 0x0636, 24231 }, { 0x0637, 24966 }, { 0x0638, 25287 }, { 0x0639, 24090 }, { 0x063A, 26027 }, { 0x063B, 26073 }, { 0x063C, 26087 }, { 0x063D, 25996 }, { 0x063E, 25950 }, { 0x063F, 25958 }, { 0x0640, 26440 }, { 0x0641, 24346 }, { 0x0642, 24797 }, { 0x0643, 24672 }, { 0x0644, 24720 }, { 0x0645, 25600 }, { 0x0646, 25635 }, { 0x0647, 24545 }, { 0x0648, 25076 }, { 0x0649, 25432 }, { 0x064A, 25147 }, { 0x064B, 26453 }, { 0x064C, 26447 }, { 0x064D, 26465 }, { 0x064E, 23786 }, { 0x064F, 23766 }, { 0x0650, 23807 }, { 0x0651, 26412 }, { 0x0652, 23947 }, { 0x0653, 26402 }, { 0x0654, 23801 }, { 0x0655, 23804 }, { 0x0656, 30224 }, { 0x0657, 26462 }, { 0x0658, 23718 }, { 0x0659, 30220 }, { 0x065A, 23962 }, { 0x065B, 23968 }, { 0x065C, 23957 }, { 0x065D, 30217 }, { 0x065E, 23788 }, { 0x0660, 69372 }, { 0x0661, 69354 }, { 0x0662, 69360 }, { 0x0663, 69381 }, { 0x0664, 69366 }, { 0x0665, 69363 }, { 0x0666, 69357 }, { 0x0667, 69378 }, { 0x0668, 69375 }, { 0x0669, 69369 }, { 0x066A, 26430 }, { 0x066B, 26427 }, { 0x066C, 30227 }, { 0x066D, 23711 }, { 0x066E, 26331 }, { 0x066F, 26339 }, { 0x0670, 26398 }, { 0x0671, 25416 }, { 0x0672, 25313 }, { 0x0673, 25320 }, { 0x0674, 25535 }, { 0x0675, 25549 }, { 0x0676, 25539 }, { 0x0677, 24001 }, { 0x0678, 25544 }, { 0x0679, 25874 }, { 0x067A, 26290 }, { 0x067B, 25453 }, { 0x067C, 24999 }, { 0x067D, 25004 }, { 0x067E, 24774 }, { 0x067F, 26254 }, { 0x0680, 25910 }, { 0x0681, 24465 }, { 0x0682, 24457 }, { 0x0683, 25711 }, { 0x0684, 25489 }, { 0x0685, 24500 }, { 0x0686, 26225 }, { 0x0687, 26375 }, { 0x0688, 25476 }, { 0x0689, 24296 }, { 0x068A, 24263 }, { 0x068B, 24269 }, { 0x068C, 25933 }, { 0x068D, 26277 }, { 0x068E, 24333 }, { 0x068F, 24301 }, { 0x0690, 24289 }, { 0x0691, 25734 }, { 0x0692, 24884 }, { 0x0693, 24873 }, { 0x0694, 24836 }, { 0x0695, 24890 }, { 0x0696, 24842 }, { 0x0697, 24851 }, { 0x0698, 24659 }, { 0x0699, 24866 }, { 0x069A, 25750 }, { 0x069B, 25785 }, { 0x069C, 25792 }, { 0x069D, 24932 }, { 0x069E, 24939 }, { 0x069F, 24969 }, { 0x06A0, 24108 }, { 0x06A1, 26335 }, { 0x06A2, 24355 }, { 0x06A3, 24349 }, { 0x06A4, 25053 }, { 0x06A5, 24369 }, { 0x06A6, 26146 }, { 0x06A7, 24800 }, { 0x06A8, 24806 }, { 0x06A9, 26064 }, { 0x06AA, 26221 }, { 0x06AB, 24688 }, { 0x06AC, 24675 }, { 0x06AD, 24028 }, { 0x06AE, 24693 }, { 0x06AF, 24405 }, { 0x06B0, 24415 }, { 0x06B1, 26123 }, { 0x06B2, 24408 }, { 0x06B3, 25512 }, { 0x06B4, 24420 }, { 0x06B5, 24734 }, { 0x06B6, 24728 }, { 0x06B7, 24740 }, { 0x06B8, 24747 }, { 0x06B9, 25638 }, { 0x06BA, 25680 }, { 0x06BB, 26169 }, { 0x06BC, 25651 }, { 0x06BD, 25668 }, { 0x06BE, 24631 }, { 0x06BF, 26228 }, { 0x06C0, 24583 }, { 0x06C1, 24548 }, { 0x06C2, 24552 }, { 0x06C3, 25031 }, { 0x06C4, 25092 }, { 0x06C5, 26343 }, { 0x06C6, 24051 }, { 0x06C7, 23998 }, { 0x06C8, 24077 }, { 0x06C9, 26359 }, { 0x06CA, 25085 }, { 0x06CB, 24064 }, { 0x06CC, 25946 }, { 0x06CD, 25150 }, { 0x06CE, 25193 }, { 0x06CF, 25079 }, { 0x06D0, 23975 }, { 0x06D1, 25199 }, { 0x06D2, 25211 }, { 0x06D3, 25215 }, { 0x06D4, 23715 }, { 0x06D5, 24025 }, { 0x06D6, 23913 }, { 0x06D7, 23903 }, { 0x06D8, 23852 }, { 0x06D9, 23835 }, { 0x06DA, 23848 }, { 0x06DB, 23880 }, { 0x06DC, 23868 }, { 0x06DD, 23702 }, { 0x06DE, 23941 }, { 0x06DF, 23892 }, { 0x06E0, 23897 }, { 0x06E1, 23885 }, { 0x06E2, 23858 }, { 0x06E3, 23825 }, { 0x06E4, 23876 }, { 0x06E5, 23829 }, { 0x06E6, 23832 }, { 0x06E7, 23844 }, { 0x06E8, 23864 }, { 0x06E9, 23817 }, { 0x06EA, 23776 }, { 0x06EB, 23781 }, { 0x06EC, 26433 }, { 0x06ED, 23821 }, { 0x06EE, 24309 }, { 0x06EF, 24913 }, { 0x06F0, 51759 }, { 0x06F1, 51735 }, { 0x06F2, 51743 }, { 0x06F3, 51771 }, { 0x06F4, 51751 }, { 0x06F5, 51747 }, { 0x06F6, 51739 }, { 0x06F7, 51767 }, { 0x06F8, 51763 }, { 0x06F9, 51755 }, { 0x06FA, 26195 }, { 0x06FB, 24234 }, { 0x06FC, 26030 }, { 0x06FD, 23740 }, { 0x06FE, 23744 }, { 0x06FF, 24605 }, { 0x0700, 36871 }, { 0x0701, 37114 }, { 0x0702, 37094 }, { 0x0703, 37118 }, { 0x0704, 37098 }, { 0x0705, 37106 }, { 0x0706, 36885 }, { 0x0707, 36889 }, { 0x0708, 37121 }, { 0x0709, 37101 }, { 0x070A, 37109 }, { 0x070B, 37081 }, { 0x070C, 37084 }, { 0x070D, 37087 }, { 0x070F, 37126 }, { 0x0710, 36987 }, { 0x0711, 37046 }, { 0x0712, 36952 }, { 0x0713, 36994 }, { 0x0714, 36997 }, { 0x0715, 37004 }, { 0x0716, 37010 }, { 0x0717, 36934 }, { 0x0718, 36949 }, { 0x0719, 36984 }, { 0x071A, 36955 }, { 0x071B, 36970 }, { 0x071C, 36973 }, { 0x071D, 36977 }, { 0x071E, 36980 }, { 0x071F, 36958 }, { 0x0720, 37007 }, { 0x0721, 36940 }, { 0x0722, 36943 }, { 0x0723, 37027 }, { 0x0724, 36990 }, { 0x0725, 36931 }, { 0x0726, 36937 }, { 0x0727, 37042 }, { 0x0728, 37001 }, { 0x0729, 36961 }, { 0x072A, 36964 }, { 0x072B, 36967 }, { 0x072C, 36946 }, { 0x072D, 37015 }, { 0x072E, 37019 }, { 0x072F, 37023 }, { 0x0730, 37050 }, { 0x0731, 37053 }, { 0x0732, 37056 }, { 0x0733, 37059 }, { 0x0734, 37062 }, { 0x0735, 37065 }, { 0x0736, 36907 }, { 0x0737, 36910 }, { 0x0738, 36927 }, { 0x0739, 36923 }, { 0x073A, 36899 }, { 0x073B, 36902 }, { 0x073C, 37111 }, { 0x073D, 36893 }, { 0x073E, 36896 }, { 0x073F, 36913 }, { 0x0740, 37078 }, { 0x0741, 37092 }, { 0x0742, 37090 }, { 0x0743, 36875 }, { 0x0744, 36880 }, { 0x0745, 36915 }, { 0x0746, 36919 }, { 0x0747, 37070 }, { 0x0748, 37074 }, { 0x0749, 36905 }, { 0x074A, 37068 }, { 0x074D, 37038 }, { 0x074E, 37034 }, { 0x074F, 37030 }, { 0x0750, 24195 }, { 0x0751, 24147 }, { 0x0752, 24173 }, { 0x0753, 24182 }, { 0x0754, 24157 }, { 0x0755, 24203 }, { 0x0756, 24167 }, { 0x0757, 24450 }, { 0x0758, 24507 }, { 0x0759, 24278 }, { 0x075A, 24315 }, { 0x075B, 24908 }, { 0x075C, 25767 }, { 0x075D, 24093 }, { 0x075E, 24115 }, { 0x075F, 24100 }, { 0x0760, 24362 }, { 0x0761, 24376 }, { 0x0762, 26067 }, { 0x0763, 26080 }, { 0x0764, 26094 }, { 0x0765, 25603 }, { 0x0766, 25609 }, { 0x0767, 25644 }, { 0x0768, 25662 }, { 0x0769, 25656 }, { 0x076A, 24723 }, { 0x076B, 24858 }, { 0x076C, 24878 }, { 0x076D, 25759 }, { 0x076E, 24491 }, { 0x076F, 24471 }, { 0x0770, 25774 }, { 0x0771, 24897 }, { 0x0772, 24482 }, { 0x0773, 25393 }, { 0x0774, 25402 }, { 0x0775, 25966 }, { 0x0776, 25986 }, { 0x0777, 25976 }, { 0x0778, 25119 }, { 0x0779, 25128 }, { 0x077A, 25240 }, { 0x077B, 25250 }, { 0x077C, 24516 }, { 0x077D, 25803 }, { 0x077E, 25812 }, { 0x077F, 24681 }, { 0x0780, 37486 }, { 0x0781, 37591 }, { 0x0782, 37534 }, { 0x0783, 37492 }, { 0x0784, 37483 }, { 0x0785, 37588 }, { 0x0786, 37525 }, { 0x0787, 37516 }, { 0x0788, 37543 }, { 0x0789, 37531 }, { 0x078A, 37519 }, { 0x078B, 37552 }, { 0x078C, 37510 }, { 0x078D, 37528 }, { 0x078E, 37522 }, { 0x078F, 37585 }, { 0x0790, 37540 }, { 0x0791, 37567 }, { 0x0792, 37579 }, { 0x0793, 37576 }, { 0x0794, 37495 }, { 0x0795, 37573 }, { 0x0796, 37570 }, { 0x0797, 37582 }, { 0x0798, 37513 }, { 0x0799, 37504 }, { 0x079A, 37507 }, { 0x079B, 37564 }, { 0x079C, 37498 }, { 0x079D, 37561 }, { 0x079E, 37558 }, { 0x079F, 37549 }, { 0x07A0, 37477 }, { 0x07A1, 37480 }, { 0x07A2, 37501 }, { 0x07A3, 37555 }, { 0x07A4, 37537 }, { 0x07A5, 37546 }, { 0x07A6, 37594 }, { 0x07A7, 37604 }, { 0x07A8, 37598 }, { 0x07A9, 37606 }, { 0x07AA, 37602 }, { 0x07AB, 37612 }, { 0x07AC, 37596 }, { 0x07AD, 37608 }, { 0x07AE, 37600 }, { 0x07AF, 37610 }, { 0x07B0, 37475 }, { 0x07B1, 37489 }, { 0x07C0, 6538 }, { 0x07C1, 6520 }, { 0x07C2, 6526 }, { 0x07C3, 6547 }, { 0x07C4, 6532 }, { 0x07C5, 6529 }, { 0x07C6, 6523 }, { 0x07C7, 6544 }, { 0x07C8, 6541 }, { 0x07C9, 6535 }, { 0x07CA, 6550 }, { 0x07CB, 6574 }, { 0x07CC, 6556 }, { 0x07CD, 6553 }, { 0x07CE, 6565 }, { 0x07CF, 6602 }, { 0x07D0, 6562 }, { 0x07D1, 6651 }, { 0x07D2, 6559 }, { 0x07D3, 6568 }, { 0x07D4, 6605 }, { 0x07D5, 6614 }, { 0x07D6, 6583 }, { 0x07D7, 6623 }, { 0x07D8, 6571 }, { 0x07D9, 6608 }, { 0x07DA, 6636 }, { 0x07DB, 6611 }, { 0x07DC, 6626 }, { 0x07DD, 6577 }, { 0x07DE, 6586 }, { 0x07DF, 6589 }, { 0x07E0, 6598 }, { 0x07E1, 6592 }, { 0x07E2, 6629 }, { 0x07E3, 6595 }, { 0x07E4, 6580 }, { 0x07E5, 6617 }, { 0x07E6, 6620 }, { 0x07E7, 6632 }, { 0x07E8, 6639 }, { 0x07E9, 6647 }, { 0x07EA, 6643 }, { 0x07EB, 6686 }, { 0x07EC, 6681 }, { 0x07ED, 6691 }, { 0x07EE, 6676 }, { 0x07EF, 6666 }, { 0x07F0, 6661 }, { 0x07F1, 6671 }, { 0x07F2, 6701 }, { 0x07F3, 6696 }, { 0x07F4, 6514 }, { 0x07F5, 6510 }, { 0x07F6, 6654 }, { 0x07F7, 6658 }, { 0x07F8, 6518 }, { 0x07F9, 6707 }, { 0x07FA, 6705 }, { 0x0901, 66870 }, { 0x0902, 66864 }, { 0x0903, 66861 }, { 0x0904, 67167 }, { 0x0905, 66990 }, { 0x0906, 67005 }, { 0x0907, 66996 }, { 0x0908, 67032 }, { 0x0909, 67002 }, { 0x090A, 67065 }, { 0x090B, 67199 }, { 0x090C, 67195 }, { 0x090D, 67183 }, { 0x090E, 67171 }, { 0x090F, 66993 }, { 0x0910, 67008 }, { 0x0911, 67187 }, { 0x0912, 67175 }, { 0x0913, 66999 }, { 0x0914, 67011 }, { 0x0915, 67038 }, { 0x0916, 67104 }, { 0x0917, 67026 }, { 0x0918, 67095 }, { 0x0919, 67110 }, { 0x091A, 67017 }, { 0x091B, 67083 }, { 0x091C, 67035 }, { 0x091D, 67098 }, { 0x091E, 67116 }, { 0x091F, 67137 }, { 0x0920, 67161 }, { 0x0921, 67086 }, { 0x0922, 67146 }, { 0x0923, 67113 }, { 0x0924, 67062 }, { 0x0925, 67134 }, { 0x0926, 67020 }, { 0x0927, 67089 }, { 0x0928, 67047 }, { 0x0929, 67158 }, { 0x092A, 67050 }, { 0x092B, 67119 }, { 0x092C, 67014 }, { 0x092D, 67080 }, { 0x092E, 67044 }, { 0x092F, 67071 }, { 0x0930, 67056 }, { 0x0931, 67125 }, { 0x0932, 67041 }, { 0x0933, 67107 }, { 0x0934, 67155 }, { 0x0935, 67068 }, { 0x0936, 67128 }, { 0x0937, 67131 }, { 0x0938, 67059 }, { 0x0939, 67029 }, { 0x093C, 66855 }, { 0x093D, 66867 }, { 0x093E, 66927 }, { 0x093F, 66915 }, { 0x0940, 66939 }, { 0x0941, 66923 }, { 0x0942, 66943 }, { 0x0943, 66972 }, { 0x0944, 66982 }, { 0x0945, 66957 }, { 0x0946, 66947 }, { 0x0947, 66911 }, { 0x0948, 66931 }, { 0x0949, 66962 }, { 0x094A, 66952 }, { 0x094B, 66919 }, { 0x094C, 66935 }, { 0x094D, 66858 }, { 0x0950, 66848 }, { 0x0951, 67211 }, { 0x0952, 67215 }, { 0x0953, 66908 }, { 0x0954, 66873 }, { 0x0958, 67053 }, { 0x0959, 67152 }, { 0x095A, 67149 }, { 0x095B, 67074 }, { 0x095C, 67164 }, { 0x095D, 67122 }, { 0x095E, 67023 }, { 0x095F, 67140 }, { 0x0960, 67207 }, { 0x0961, 67203 }, { 0x0962, 66967 }, { 0x0963, 66977 }, { 0x0964, 66876 }, { 0x0965, 66987 }, { 0x0966, 66896 }, { 0x0967, 66878 }, { 0x0968, 66884 }, { 0x0969, 66905 }, { 0x096A, 66890 }, { 0x096B, 66887 }, { 0x096C, 66881 }, { 0x096D, 66902 }, { 0x096E, 66899 }, { 0x096F, 66893 }, { 0x0970, 67219 }, { 0x0971, 66850 }, { 0x0972, 67179 }, { 0x097B, 67092 }, { 0x097C, 67101 }, { 0x097D, 67191 }, { 0x097E, 67143 }, { 0x097F, 67077 }, { 0x0981, 37801 }, { 0x0982, 37795 }, { 0x0983, 37792 }, { 0x0985, 37898 }, { 0x0986, 37913 }, { 0x0987, 37904 }, { 0x0988, 37937 }, { 0x0989, 37910 }, { 0x098A, 37979 }, { 0x098B, 38053 }, { 0x098C, 38049 }, { 0x098F, 37901 }, { 0x0990, 37916 }, { 0x0993, 37907 }, { 0x0994, 37919 }, { 0x0995, 37943 }, { 0x0996, 38003 }, { 0x0997, 37931 }, { 0x0998, 37997 }, { 0x0999, 38006 }, { 0x099A, 37925 }, { 0x099B, 37988 }, { 0x099C, 37940 }, { 0x099D, 38000 }, { 0x099E, 38012 }, { 0x099F, 38033 }, { 0x09A0, 38042 }, { 0x09A1, 37991 }, { 0x09A2, 38039 }, { 0x09A3, 38009 }, { 0x09A4, 37976 }, { 0x09A5, 38030 }, { 0x09A6, 37928 }, { 0x09A7, 37994 }, { 0x09A8, 37952 }, { 0x09AA, 37955 }, { 0x09AB, 38015 }, { 0x09AC, 37922 }, { 0x09AD, 37985 }, { 0x09AE, 37949 }, { 0x09AF, 37982 }, { 0x09B0, 37958 }, { 0x09B2, 37946 }, { 0x09B6, 38024 }, { 0x09B7, 38027 }, { 0x09B8, 37973 }, { 0x09B9, 37934 }, { 0x09BC, 37786 }, { 0x09BD, 37798 }, { 0x09BE, 37856 }, { 0x09BF, 37844 }, { 0x09C0, 37868 }, { 0x09C1, 37852 }, { 0x09C2, 37872 }, { 0x09C3, 37881 }, { 0x09C4, 37891 }, { 0x09C7, 37840 }, { 0x09C8, 37860 }, { 0x09CB, 37848 }, { 0x09CC, 37864 }, { 0x09CD, 37789 }, { 0x09CE, 38045 }, { 0x09D7, 37782 }, { 0x09DC, 38021 }, { 0x09DD, 38018 }, { 0x09DF, 38036 }, { 0x09E0, 38061 }, { 0x09E1, 38057 }, { 0x09E2, 37876 }, { 0x09E3, 37886 }, { 0x09E6, 37822 }, { 0x09E7, 37804 }, { 0x09E8, 37810 }, { 0x09E9, 37831 }, { 0x09EA, 37816 }, { 0x09EB, 37813 }, { 0x09EC, 37807 }, { 0x09ED, 37828 }, { 0x09EE, 37825 }, { 0x09EF, 37819 }, { 0x09F0, 37967 }, { 0x09F1, 37961 }, { 0x09F2, 37834 }, { 0x09F3, 37837 }, { 0x09F4, 38065 }, { 0x09F5, 38077 }, { 0x09F6, 38085 }, { 0x09F7, 38081 }, { 0x09F8, 38069 }, { 0x09F9, 38089 }, { 0x09FA, 37896 }, { 0x0A01, 52505 }, { 0x0A02, 52509 }, { 0x0A03, 52524 }, { 0x0A05, 52597 }, { 0x0A06, 52606 }, { 0x0A07, 52600 }, { 0x0A08, 52636 }, { 0x0A09, 52603 }, { 0x0A0A, 52669 }, { 0x0A0F, 52624 }, { 0x0A10, 52609 }, { 0x0A13, 52654 }, { 0x0A14, 52612 }, { 0x0A15, 52642 }, { 0x0A16, 52699 }, { 0x0A17, 52630 }, { 0x0A18, 52693 }, { 0x0A19, 52705 }, { 0x0A1A, 52618 }, { 0x0A1B, 52684 }, { 0x0A1C, 52639 }, { 0x0A1D, 52696 }, { 0x0A1E, 52711 }, { 0x0A1F, 52726 }, { 0x0A20, 52738 }, { 0x0A21, 52687 }, { 0x0A22, 52729 }, { 0x0A23, 52708 }, { 0x0A24, 52666 }, { 0x0A25, 52723 }, { 0x0A26, 52621 }, { 0x0A27, 52690 }, { 0x0A28, 52651 }, { 0x0A2A, 52657 }, { 0x0A2B, 52714 }, { 0x0A2C, 52615 }, { 0x0A2D, 52681 }, { 0x0A2E, 52648 }, { 0x0A2F, 52675 }, { 0x0A30, 52660 }, { 0x0A32, 52645 }, { 0x0A33, 52702 }, { 0x0A35, 52672 }, { 0x0A36, 52720 }, { 0x0A38, 52663 }, { 0x0A39, 52633 }, { 0x0A3C, 52512 }, { 0x0A3E, 52569 }, { 0x0A3F, 52561 }, { 0x0A40, 52585 }, { 0x0A41, 52565 }, { 0x0A42, 52593 }, { 0x0A47, 52581 }, { 0x0A48, 52573 }, { 0x0A4B, 52589 }, { 0x0A4C, 52577 }, { 0x0A4D, 52518 }, { 0x0A51, 52515 }, { 0x0A59, 52735 }, { 0x0A5A, 52732 }, { 0x0A5B, 52678 }, { 0x0A5C, 52717 }, { 0x0A5E, 52627 }, { 0x0A66, 52547 }, { 0x0A67, 52529 }, { 0x0A68, 52535 }, { 0x0A69, 52556 }, { 0x0A6A, 52541 }, { 0x0A6B, 52538 }, { 0x0A6C, 52532 }, { 0x0A6D, 52553 }, { 0x0A6E, 52550 }, { 0x0A6F, 52544 }, { 0x0A70, 52559 }, { 0x0A71, 52527 }, { 0x0A72, 52501 }, { 0x0A73, 52503 }, { 0x0A74, 52498 }, { 0x0A75, 52521 }, { 0x0A81, 52240 }, { 0x0A82, 52234 }, { 0x0A83, 52231 }, { 0x0A85, 52350 }, { 0x0A86, 52365 }, { 0x0A87, 52356 }, { 0x0A88, 52389 }, { 0x0A89, 52362 }, { 0x0A8A, 52419 }, { 0x0A8B, 52486 }, { 0x0A8C, 52482 }, { 0x0A8D, 52342 }, { 0x0A8F, 52353 }, { 0x0A90, 52368 }, { 0x0A91, 52346 }, { 0x0A93, 52359 }, { 0x0A94, 52371 }, { 0x0A95, 52395 }, { 0x0A96, 52446 }, { 0x0A97, 52383 }, { 0x0A98, 52440 }, { 0x0A99, 52452 }, { 0x0A9A, 52377 }, { 0x0A9B, 52431 }, { 0x0A9C, 52392 }, { 0x0A9D, 52443 }, { 0x0A9E, 52458 }, { 0x0A9F, 52473 }, { 0x0AA0, 52479 }, { 0x0AA1, 52434 }, { 0x0AA2, 52476 }, { 0x0AA3, 52455 }, { 0x0AA4, 52416 }, { 0x0AA5, 52470 }, { 0x0AA6, 52380 }, { 0x0AA7, 52437 }, { 0x0AA8, 52404 }, { 0x0AAA, 52407 }, { 0x0AAB, 52461 }, { 0x0AAC, 52374 }, { 0x0AAD, 52428 }, { 0x0AAE, 52401 }, { 0x0AAF, 52425 }, { 0x0AB0, 52410 }, { 0x0AB2, 52398 }, { 0x0AB3, 52449 }, { 0x0AB5, 52422 }, { 0x0AB6, 52464 }, { 0x0AB7, 52467 }, { 0x0AB8, 52413 }, { 0x0AB9, 52386 }, { 0x0ABC, 52225 }, { 0x0ABD, 52237 }, { 0x0ABE, 52292 }, { 0x0ABF, 52280 }, { 0x0AC0, 52304 }, { 0x0AC1, 52288 }, { 0x0AC2, 52308 }, { 0x0AC3, 52327 }, { 0x0AC4, 52337 }, { 0x0AC5, 52312 }, { 0x0AC7, 52276 }, { 0x0AC8, 52296 }, { 0x0AC9, 52317 }, { 0x0ACB, 52284 }, { 0x0ACC, 52300 }, { 0x0ACD, 52228 }, { 0x0AD0, 52223 }, { 0x0AE0, 52494 }, { 0x0AE1, 52490 }, { 0x0AE2, 52322 }, { 0x0AE3, 52332 }, { 0x0AE6, 52261 }, { 0x0AE7, 52243 }, { 0x0AE8, 52249 }, { 0x0AE9, 52270 }, { 0x0AEA, 52255 }, { 0x0AEB, 52252 }, { 0x0AEC, 52246 }, { 0x0AED, 52267 }, { 0x0AEE, 52264 }, { 0x0AEF, 52258 }, { 0x0AF1, 52273 }, { 0x0B01, 21480 }, { 0x0B02, 21474 }, { 0x0B03, 21471 }, { 0x0B05, 21571 }, { 0x0B06, 21586 }, { 0x0B07, 21577 }, { 0x0B08, 21610 }, { 0x0B09, 21583 }, { 0x0B0A, 21640 }, { 0x0B0B, 21719 }, { 0x0B0C, 21715 }, { 0x0B0F, 21574 }, { 0x0B10, 21589 }, { 0x0B13, 21580 }, { 0x0B14, 21592 }, { 0x0B15, 21616 }, { 0x0B16, 21670 }, { 0x0B17, 21604 }, { 0x0B18, 21664 }, { 0x0B19, 21676 }, { 0x0B1A, 21598 }, { 0x0B1B, 21655 }, { 0x0B1C, 21613 }, { 0x0B1D, 21667 }, { 0x0B1E, 21682 }, { 0x0B1F, 21703 }, { 0x0B20, 21712 }, { 0x0B21, 21658 }, { 0x0B22, 21709 }, { 0x0B23, 21679 }, { 0x0B24, 21637 }, { 0x0B25, 21700 }, { 0x0B26, 21601 }, { 0x0B27, 21661 }, { 0x0B28, 21625 }, { 0x0B2A, 21628 }, { 0x0B2B, 21685 }, { 0x0B2C, 21595 }, { 0x0B2D, 21652 }, { 0x0B2E, 21622 }, { 0x0B2F, 21649 }, { 0x0B30, 21631 }, { 0x0B32, 21619 }, { 0x0B33, 21673 }, { 0x0B35, 21643 }, { 0x0B36, 21694 }, { 0x0B37, 21697 }, { 0x0B38, 21634 }, { 0x0B39, 21607 }, { 0x0B3C, 21465 }, { 0x0B3D, 21477 }, { 0x0B3E, 21529 }, { 0x0B3F, 21517 }, { 0x0B40, 21541 }, { 0x0B41, 21525 }, { 0x0B42, 21545 }, { 0x0B43, 21554 }, { 0x0B44, 21564 }, { 0x0B47, 21513 }, { 0x0B48, 21533 }, { 0x0B4B, 21521 }, { 0x0B4C, 21537 }, { 0x0B4D, 21468 }, { 0x0B56, 21457 }, { 0x0B57, 21461 }, { 0x0B5C, 21691 }, { 0x0B5D, 21688 }, { 0x0B5F, 21706 }, { 0x0B60, 21727 }, { 0x0B61, 21723 }, { 0x0B62, 21549 }, { 0x0B63, 21559 }, { 0x0B66, 21501 }, { 0x0B67, 21483 }, { 0x0B68, 21489 }, { 0x0B69, 21510 }, { 0x0B6A, 21495 }, { 0x0B6B, 21492 }, { 0x0B6C, 21486 }, { 0x0B6D, 21507 }, { 0x0B6E, 21504 }, { 0x0B6F, 21498 }, { 0x0B70, 21569 }, { 0x0B71, 21646 }, { 0x0B82, 22772 }, { 0x0B83, 22769 }, { 0x0B85, 22864 }, { 0x0B86, 22879 }, { 0x0B87, 22870 }, { 0x0B88, 22897 }, { 0x0B89, 22876 }, { 0x0B8A, 22930 }, { 0x0B8E, 22867 }, { 0x0B8F, 22891 }, { 0x0B90, 22882 }, { 0x0B92, 22873 }, { 0x0B93, 22915 }, { 0x0B94, 22885 }, { 0x0B95, 22903 }, { 0x0B99, 22942 }, { 0x0B9A, 22888 }, { 0x0B9C, 22900 }, { 0x0B9E, 22948 }, { 0x0B9F, 22960 }, { 0x0BA3, 22945 }, { 0x0BA4, 22927 }, { 0x0BA8, 22912 }, { 0x0BA9, 22966 }, { 0x0BAA, 22918 }, { 0x0BAE, 22909 }, { 0x0BAF, 22936 }, { 0x0BB0, 22921 }, { 0x0BB1, 22951 }, { 0x0BB2, 22906 }, { 0x0BB3, 22939 }, { 0x0BB4, 22963 }, { 0x0BB5, 22933 }, { 0x0BB6, 22954 }, { 0x0BB7, 22957 }, { 0x0BB8, 22924 }, { 0x0BB9, 22894 }, { 0x0BBE, 22833 }, { 0x0BBF, 22821 }, { 0x0BC0, 22849 }, { 0x0BC1, 22829 }, { 0x0BC2, 22857 }, { 0x0BC6, 22817 }, { 0x0BC7, 22845 }, { 0x0BC8, 22837 }, { 0x0BCA, 22825 }, { 0x0BCB, 22853 }, { 0x0BCC, 22841 }, { 0x0BCD, 22766 }, { 0x0BD0, 22761 }, { 0x0BD7, 22757 }, { 0x0BE6, 22799 }, { 0x0BE7, 22781 }, { 0x0BE8, 22787 }, { 0x0BE9, 22808 }, { 0x0BEA, 22793 }, { 0x0BEB, 22790 }, { 0x0BEC, 22784 }, { 0x0BED, 22805 }, { 0x0BEE, 22802 }, { 0x0BEF, 22796 }, { 0x0BF0, 22977 }, { 0x0BF1, 22969 }, { 0x0BF2, 22973 }, { 0x0BF3, 22763 }, { 0x0BF4, 22811 }, { 0x0BF5, 22775 }, { 0x0BF6, 22778 }, { 0x0BF7, 22861 }, { 0x0BF8, 22753 }, { 0x0BF9, 22814 }, { 0x0BFA, 22980 }, { 0x0C01, 37149 }, { 0x0C02, 37143 }, { 0x0C03, 37140 }, { 0x0C05, 37249 }, { 0x0C06, 37264 }, { 0x0C07, 37255 }, { 0x0C08, 37291 }, { 0x0C09, 37261 }, { 0x0C0A, 37324 }, { 0x0C0B, 37400 }, { 0x0C0C, 37396 }, { 0x0C0E, 37252 }, { 0x0C0F, 37282 }, { 0x0C10, 37267 }, { 0x0C12, 37258 }, { 0x0C13, 37309 }, { 0x0C14, 37270 }, { 0x0C15, 37297 }, { 0x0C16, 37354 }, { 0x0C17, 37285 }, { 0x0C18, 37348 }, { 0x0C19, 37360 }, { 0x0C1A, 37276 }, { 0x0C1B, 37336 }, { 0x0C1C, 37294 }, { 0x0C1D, 37351 }, { 0x0C1E, 37366 }, { 0x0C1F, 37387 }, { 0x0C20, 37393 }, { 0x0C21, 37339 }, { 0x0C22, 37390 }, { 0x0C23, 37363 }, { 0x0C24, 37321 }, { 0x0C25, 37381 }, { 0x0C26, 37279 }, { 0x0C27, 37342 }, { 0x0C28, 37306 }, { 0x0C2A, 37312 }, { 0x0C2B, 37369 }, { 0x0C2C, 37273 }, { 0x0C2D, 37333 }, { 0x0C2E, 37303 }, { 0x0C2F, 37330 }, { 0x0C30, 37315 }, { 0x0C31, 37372 }, { 0x0C32, 37300 }, { 0x0C33, 37357 }, { 0x0C35, 37327 }, { 0x0C36, 37375 }, { 0x0C37, 37378 }, { 0x0C38, 37318 }, { 0x0C39, 37288 }, { 0x0C3D, 37146 }, { 0x0C3E, 37198 }, { 0x0C3F, 37186 }, { 0x0C40, 37214 }, { 0x0C41, 37194 }, { 0x0C42, 37222 }, { 0x0C43, 37231 }, { 0x0C44, 37241 }, { 0x0C46, 37182 }, { 0x0C47, 37210 }, { 0x0C48, 37202 }, { 0x0C4A, 37190 }, { 0x0C4B, 37218 }, { 0x0C4C, 37206 }, { 0x0C4D, 37137 }, { 0x0C55, 37246 }, { 0x0C56, 37130 }, { 0x0C58, 37384 }, { 0x0C59, 37345 }, { 0x0C60, 37408 }, { 0x0C61, 37404 }, { 0x0C62, 37226 }, { 0x0C63, 37236 }, { 0x0C66, 37170 }, { 0x0C67, 37152 }, { 0x0C68, 37158 }, { 0x0C69, 37179 }, { 0x0C6A, 37164 }, { 0x0C6B, 37161 }, { 0x0C6C, 37155 }, { 0x0C6D, 37176 }, { 0x0C6E, 37173 }, { 0x0C6F, 37167 }, { 0x0C78, 37448 }, { 0x0C79, 37412 }, { 0x0C7A, 37430 }, { 0x0C7B, 37457 }, { 0x0C7C, 37421 }, { 0x0C7D, 37439 }, { 0x0C7E, 37466 }, { 0x0C7F, 37134 }, { 0x0C82, 40655 }, { 0x0C83, 40652 }, { 0x0C85, 40764 }, { 0x0C86, 40779 }, { 0x0C87, 40770 }, { 0x0C88, 40809 }, { 0x0C89, 40776 }, { 0x0C8A, 40842 }, { 0x0C8B, 40912 }, { 0x0C8C, 40908 }, { 0x0C8E, 40767 }, { 0x0C8F, 40797 }, { 0x0C90, 40782 }, { 0x0C92, 40773 }, { 0x0C93, 40827 }, { 0x0C94, 40785 }, { 0x0C95, 40815 }, { 0x0C96, 40869 }, { 0x0C97, 40803 }, { 0x0C98, 40863 }, { 0x0C99, 40875 }, { 0x0C9A, 40791 }, { 0x0C9B, 40854 }, { 0x0C9C, 40812 }, { 0x0C9D, 40866 }, { 0x0C9E, 40881 }, { 0x0C9F, 40899 }, { 0x0CA0, 40905 }, { 0x0CA1, 40857 }, { 0x0CA2, 40902 }, { 0x0CA3, 40878 }, { 0x0CA4, 40839 }, { 0x0CA5, 40896 }, { 0x0CA6, 40794 }, { 0x0CA7, 40860 }, { 0x0CA8, 40824 }, { 0x0CAA, 40830 }, { 0x0CAB, 40884 }, { 0x0CAC, 40788 }, { 0x0CAD, 40851 }, { 0x0CAE, 40821 }, { 0x0CAF, 40848 }, { 0x0CB0, 40833 }, { 0x0CB1, 40887 }, { 0x0CB2, 40818 }, { 0x0CB3, 40872 }, { 0x0CB5, 40845 }, { 0x0CB6, 40890 }, { 0x0CB7, 40893 }, { 0x0CB8, 40836 }, { 0x0CB9, 40806 }, { 0x0CBC, 40646 }, { 0x0CBD, 40658 }, { 0x0CBE, 40713 }, { 0x0CBF, 40701 }, { 0x0CC0, 40729 }, { 0x0CC1, 40709 }, { 0x0CC2, 40737 }, { 0x0CC3, 40746 }, { 0x0CC4, 40756 }, { 0x0CC6, 40697 }, { 0x0CC7, 40725 }, { 0x0CC8, 40717 }, { 0x0CCA, 40705 }, { 0x0CCB, 40733 }, { 0x0CCC, 40721 }, { 0x0CCD, 40649 }, { 0x0CD5, 40761 }, { 0x0CD6, 40642 }, { 0x0CDE, 40800 }, { 0x0CE0, 40920 }, { 0x0CE1, 40916 }, { 0x0CE2, 40741 }, { 0x0CE3, 40751 }, { 0x0CE6, 40685 }, { 0x0CE7, 40667 }, { 0x0CE8, 40673 }, { 0x0CE9, 40694 }, { 0x0CEA, 40679 }, { 0x0CEB, 40676 }, { 0x0CEC, 40670 }, { 0x0CED, 40691 }, { 0x0CEE, 40688 }, { 0x0CEF, 40682 }, { 0x0CF1, 40661 }, { 0x0CF2, 40664 }, { 0x0D02, 64805 }, { 0x0D03, 64802 }, { 0x0D05, 64905 }, { 0x0D06, 64920 }, { 0x0D07, 64911 }, { 0x0D08, 64947 }, { 0x0D09, 64917 }, { 0x0D0A, 64980 }, { 0x0D0B, 65077 }, { 0x0D0C, 65073 }, { 0x0D0E, 64908 }, { 0x0D0F, 64938 }, { 0x0D10, 64923 }, { 0x0D12, 64914 }, { 0x0D13, 64965 }, { 0x0D14, 64926 }, { 0x0D15, 64953 }, { 0x0D16, 65007 }, { 0x0D17, 64941 }, { 0x0D18, 65001 }, { 0x0D19, 65013 }, { 0x0D1A, 64932 }, { 0x0D1B, 64992 }, { 0x0D1C, 64950 }, { 0x0D1D, 65004 }, { 0x0D1E, 65019 }, { 0x0D1F, 65037 }, { 0x0D20, 65046 }, { 0x0D21, 64995 }, { 0x0D22, 65040 }, { 0x0D23, 65016 }, { 0x0D24, 64977 }, { 0x0D25, 65034 }, { 0x0D26, 64935 }, { 0x0D27, 64998 }, { 0x0D28, 64962 }, { 0x0D2A, 64968 }, { 0x0D2B, 65022 }, { 0x0D2C, 64929 }, { 0x0D2D, 64989 }, { 0x0D2E, 64959 }, { 0x0D2F, 64986 }, { 0x0D30, 64971 }, { 0x0D31, 65025 }, { 0x0D32, 64956 }, { 0x0D33, 65010 }, { 0x0D34, 65043 }, { 0x0D35, 64983 }, { 0x0D36, 65028 }, { 0x0D37, 65031 }, { 0x0D38, 64974 }, { 0x0D39, 64944 }, { 0x0D3D, 64808 }, { 0x0D3E, 64857 }, { 0x0D3F, 64845 }, { 0x0D40, 64873 }, { 0x0D41, 64853 }, { 0x0D42, 64881 }, { 0x0D43, 64890 }, { 0x0D44, 64900 }, { 0x0D46, 64841 }, { 0x0D47, 64869 }, { 0x0D48, 64861 }, { 0x0D4A, 64849 }, { 0x0D4B, 64877 }, { 0x0D4C, 64865 }, { 0x0D4D, 64799 }, { 0x0D57, 64792 }, { 0x0D60, 65085 }, { 0x0D61, 65081 }, { 0x0D62, 64885 }, { 0x0D63, 64895 }, { 0x0D66, 64829 }, { 0x0D67, 64811 }, { 0x0D68, 64817 }, { 0x0D69, 64838 }, { 0x0D6A, 64823 }, { 0x0D6B, 64820 }, { 0x0D6C, 64814 }, { 0x0D6D, 64835 }, { 0x0D6E, 64832 }, { 0x0D6F, 64826 }, { 0x0D70, 65097 }, { 0x0D71, 65089 }, { 0x0D72, 65093 }, { 0x0D73, 65104 }, { 0x0D74, 65100 }, { 0x0D75, 65108 }, { 0x0D79, 64796 }, { 0x0D7A, 65065 }, { 0x0D7B, 65057 }, { 0x0D7C, 65069 }, { 0x0D7D, 65053 }, { 0x0D7E, 65061 }, { 0x0D7F, 65049 }, { 0x0D82, 43201 }, { 0x0D83, 43198 }, { 0x0D85, 43293 }, { 0x0D86, 43308 }, { 0x0D87, 43311 }, { 0x0D88, 43395 }, { 0x0D89, 43299 }, { 0x0D8A, 43341 }, { 0x0D8B, 43305 }, { 0x0D8C, 43386 }, { 0x0D8D, 43401 }, { 0x0D8E, 43407 }, { 0x0D8F, 43398 }, { 0x0D90, 43404 }, { 0x0D91, 43296 }, { 0x0D92, 43332 }, { 0x0D93, 43314 }, { 0x0D94, 43302 }, { 0x0D95, 43351 }, { 0x0D96, 43317 }, { 0x0D9A, 43442 }, { 0x0D9B, 43482 }, { 0x0D9C, 43434 }, { 0x0D9D, 43474 }, { 0x0D9E, 43344 }, { 0x0D9F, 43361 }, { 0x0DA0, 43426 }, { 0x0DA1, 43466 }, { 0x0DA2, 43438 }, { 0x0DA3, 43478 }, { 0x0DA4, 43382 }, { 0x0DA5, 43377 }, { 0x0DA6, 43365 }, { 0x0DA7, 43458 }, { 0x0DA8, 43498 }, { 0x0DA9, 43454 }, { 0x0DAA, 43494 }, { 0x0DAB, 43414 }, { 0x0DAC, 43369 }, { 0x0DAD, 43450 }, { 0x0DAE, 43490 }, { 0x0DAF, 43430 }, { 0x0DB0, 43470 }, { 0x0DB1, 43324 }, { 0x0DB3, 43357 }, { 0x0DB4, 43446 }, { 0x0DB5, 43486 }, { 0x0DB6, 43422 }, { 0x0DB7, 43462 }, { 0x0DB8, 43348 }, { 0x0DB9, 43289 }, { 0x0DBA, 43392 }, { 0x0DBB, 43354 }, { 0x0DBD, 43320 }, { 0x0DC0, 43389 }, { 0x0DC1, 43373 }, { 0x0DC2, 43418 }, { 0x0DC3, 43328 }, { 0x0DC4, 43338 }, { 0x0DC5, 43410 }, { 0x0DC6, 43335 }, { 0x0DCA, 43195 }, { 0x0DCF, 43277 }, { 0x0DD0, 43244 }, { 0x0DD1, 43219 }, { 0x0DD2, 43234 }, { 0x0DD3, 43209 }, { 0x0DD4, 43239 }, { 0x0DD6, 43214 }, { 0x0DD8, 43285 }, { 0x0DD9, 43254 }, { 0x0DDA, 43204 }, { 0x0DDB, 43249 }, { 0x0DDC, 43265 }, { 0x0DDD, 43258 }, { 0x0DDE, 43271 }, { 0x0DDF, 43281 }, { 0x0DF2, 43229 }, { 0x0DF3, 43224 }, { 0x0DF4, 43502 }, { 0x0E01, 9790 }, { 0x0E02, 9880 }, { 0x0E03, 9888 }, { 0x0E04, 9892 }, { 0x0E05, 9884 }, { 0x0E06, 9896 }, { 0x0E07, 9920 }, { 0x0E08, 9864 }, { 0x0E09, 9876 }, { 0x0E0A, 9872 }, { 0x0E0B, 9828 }, { 0x0E0C, 9868 }, { 0x0E0D, 9860 }, { 0x0E0E, 9770 }, { 0x0E0F, 9848 }, { 0x0E10, 9936 }, { 0x0E11, 9956 }, { 0x0E12, 9952 }, { 0x0E13, 9813 }, { 0x0E14, 9766 }, { 0x0E15, 9844 }, { 0x0E16, 9944 }, { 0x0E17, 9948 }, { 0x0E18, 9940 }, { 0x0E19, 9809 }, { 0x0E1A, 9762 }, { 0x0E1B, 9817 }, { 0x0E1C, 9928 }, { 0x0E1D, 9774 }, { 0x0E1E, 9924 }, { 0x0E1F, 9778 }, { 0x0E20, 9932 }, { 0x0E21, 9805 }, { 0x0E22, 9856 }, { 0x0E23, 9821 }, { 0x0E24, 9825 }, { 0x0E25, 9794 }, { 0x0E26, 9802 }, { 0x0E27, 9852 }, { 0x0E28, 9840 }, { 0x0E29, 9836 }, { 0x0E2A, 9832 }, { 0x0E2B, 9782 }, { 0x0E2C, 9798 }, { 0x0E2D, 9758 }, { 0x0E2E, 9786 }, { 0x0E2F, 10039 }, { 0x0E30, 9960 }, { 0x0E31, 9916 }, { 0x0E32, 9980 }, { 0x0E33, 9998 }, { 0x0E34, 9968 }, { 0x0E35, 10002 }, { 0x0E36, 10006 }, { 0x0E37, 10014 }, { 0x0E38, 9976 }, { 0x0E39, 10010 }, { 0x0E3A, 10024 }, { 0x0E3F, 9754 }, { 0x0E40, 9964 }, { 0x0E41, 9984 }, { 0x0E42, 9972 }, { 0x0E43, 9988 }, { 0x0E44, 9993 }, { 0x0E45, 10045 }, { 0x0E46, 10027 }, { 0x0E47, 10036 }, { 0x0E48, 9900 }, { 0x0E49, 9904 }, { 0x0E4A, 9908 }, { 0x0E4B, 9912 }, { 0x0E4C, 10048 }, { 0x0E4D, 10030 }, { 0x0E4E, 10033 }, { 0x0E4F, 10021 }, { 0x0E50, 9742 }, { 0x0E51, 9724 }, { 0x0E52, 9730 }, { 0x0E53, 9751 }, { 0x0E54, 9736 }, { 0x0E55, 9733 }, { 0x0E56, 9727 }, { 0x0E57, 9748 }, { 0x0E58, 9745 }, { 0x0E59, 9739 }, { 0x0E5A, 10042 }, { 0x0E5B, 10018 }, { 0x0E81, 5948 }, { 0x0E82, 5989 }, { 0x0E84, 5985 }, { 0x0E87, 5993 }, { 0x0E88, 5926 }, { 0x0E8A, 5968 }, { 0x0E8D, 5996 }, { 0x0E94, 5929 }, { 0x0E95, 5976 }, { 0x0E96, 6011 }, { 0x0E97, 6007 }, { 0x0E99, 5962 }, { 0x0E9A, 5923 }, { 0x0E9B, 5965 }, { 0x0E9C, 6003 }, { 0x0E9D, 5932 }, { 0x0E9E, 5999 }, { 0x0E9F, 5936 }, { 0x0EA1, 5959 }, { 0x0EA2, 5982 }, { 0x0EA3, 5951 }, { 0x0EA5, 5955 }, { 0x0EA7, 5979 }, { 0x0EAA, 5972 }, { 0x0EAB, 5944 }, { 0x0EAD, 5920 }, { 0x0EAE, 5940 }, { 0x0EAF, 6015 }, { 0x0EB0, 5854 }, { 0x0EB1, 5910 }, { 0x0EB2, 5878 }, { 0x0EB3, 5886 }, { 0x0EB4, 5862 }, { 0x0EB5, 5898 }, { 0x0EB6, 5874 }, { 0x0EB7, 5906 }, { 0x0EB8, 5870 }, { 0x0EB9, 5902 }, { 0x0EBB, 5915 }, { 0x0EBC, 6019 }, { 0x0EBD, 6023 }, { 0x0EC0, 5858 }, { 0x0EC1, 5894 }, { 0x0EC2, 5866 }, { 0x0EC3, 5890 }, { 0x0EC4, 5882 }, { 0x0EC6, 5805 }, { 0x0EC8, 5808 }, { 0x0EC9, 5816 }, { 0x0ECA, 5812 }, { 0x0ECB, 5820 }, { 0x0ECC, 6027 }, { 0x0ECD, 6017 }, { 0x0ED0, 5842 }, { 0x0ED1, 5824 }, { 0x0ED2, 5830 }, { 0x0ED3, 5851 }, { 0x0ED4, 5836 }, { 0x0ED5, 5833 }, { 0x0ED6, 5827 }, { 0x0ED7, 5848 }, { 0x0ED8, 5845 }, { 0x0ED9, 5839 }, { 0x0EDC, 5802 }, { 0x0EDD, 5799 }, { 0x0F00, 44295 }, { 0x0F01, 43729 }, { 0x0F02, 43720 }, { 0x0F03, 43711 }, { 0x0F04, 43850 }, { 0x0F05, 43831 }, { 0x0F06, 43789 }, { 0x0F07, 43698 }, { 0x0F08, 43820 }, { 0x0F09, 43784 }, { 0x0F0A, 43705 }, { 0x0F0B, 43871 }, { 0x0F0C, 43866 }, { 0x0F0D, 43770 }, { 0x0F0E, 43752 }, { 0x0F0F, 43824 }, { 0x0F10, 43760 }, { 0x0F11, 43688 }, { 0x0F12, 43765 }, { 0x0F13, 43797 }, { 0x0F14, 43736 }, { 0x0F15, 44285 }, { 0x0F16, 44290 }, { 0x0F17, 44477 }, { 0x0F18, 44489 }, { 0x0F19, 44484 }, { 0x0F1A, 43937 }, { 0x0F1B, 43953 }, { 0x0F1C, 43942 }, { 0x0F1D, 43916 }, { 0x0F1E, 43932 }, { 0x0F1F, 43947 }, { 0x0F20, 44030 }, { 0x0F21, 43972 }, { 0x0F22, 43978 }, { 0x0F23, 44039 }, { 0x0F24, 43984 }, { 0x0F25, 43981 }, { 0x0F26, 43975 }, { 0x0F27, 44036 }, { 0x0F28, 44033 }, { 0x0F29, 44027 }, { 0x0F2A, 43987 }, { 0x0F2B, 43995 }, { 0x0F2C, 44023 }, { 0x0F2D, 44003 }, { 0x0F2E, 43999 }, { 0x0F2F, 43991 }, { 0x0F30, 44019 }, { 0x0F31, 44015 }, { 0x0F32, 44007 }, { 0x0F33, 44011 }, { 0x0F34, 43773 }, { 0x0F35, 43740 }, { 0x0F36, 43805 }, { 0x0F37, 43746 }, { 0x0F38, 43674 }, { 0x0F39, 43694 }, { 0x0F3A, 43683 }, { 0x0F3B, 43678 }, { 0x0F3C, 43669 }, { 0x0F3D, 43664 }, { 0x0F3E, 43908 }, { 0x0F3F, 43894 }, { 0x0F40, 44132 }, { 0x0F41, 44183 }, { 0x0F42, 44123 }, { 0x0F43, 44180 }, { 0x0F44, 44189 }, { 0x0F45, 44117 }, { 0x0F46, 44168 }, { 0x0F47, 44129 }, { 0x0F49, 44195 }, { 0x0F4A, 44216 }, { 0x0F4B, 44234 }, { 0x0F4C, 44171 }, { 0x0F4D, 44222 }, { 0x0F4E, 44192 }, { 0x0F4F, 44153 }, { 0x0F50, 44210 }, { 0x0F51, 44120 }, { 0x0F52, 44174 }, { 0x0F53, 44141 }, { 0x0F54, 44144 }, { 0x0F55, 44198 }, { 0x0F56, 44114 }, { 0x0F57, 44165 }, { 0x0F58, 44138 }, { 0x0F59, 44213 }, { 0x0F5A, 44231 }, { 0x0F5B, 44177 }, { 0x0F5C, 44225 }, { 0x0F5D, 44156 }, { 0x0F5E, 44219 }, { 0x0F5F, 44162 }, { 0x0F60, 44111 }, { 0x0F61, 44159 }, { 0x0F62, 44147 }, { 0x0F63, 44135 }, { 0x0F64, 44204 }, { 0x0F65, 44207 }, { 0x0F66, 44150 }, { 0x0F67, 44126 }, { 0x0F68, 44108 }, { 0x0F69, 44228 }, { 0x0F6A, 44237 }, { 0x0F6B, 44186 }, { 0x0F6C, 44201 }, { 0x0F71, 44058 }, { 0x0F72, 44046 }, { 0x0F73, 44066 }, { 0x0F74, 44054 }, { 0x0F75, 44074 }, { 0x0F76, 44083 }, { 0x0F77, 44093 }, { 0x0F78, 44078 }, { 0x0F79, 44088 }, { 0x0F7A, 44042 }, { 0x0F7B, 44062 }, { 0x0F7C, 44050 }, { 0x0F7D, 44070 }, { 0x0F7E, 43958 }, { 0x0F7F, 43964 }, { 0x0F80, 44098 }, { 0x0F81, 44103 }, { 0x0F82, 43898 }, { 0x0F83, 43904 }, { 0x0F84, 43847 }, { 0x0F85, 43828 }, { 0x0F86, 43890 }, { 0x0F87, 43968 }, { 0x0F88, 43885 }, { 0x0F89, 43912 }, { 0x0F8A, 43875 }, { 0x0F8B, 43880 }, { 0x0F90, 44330 }, { 0x0F91, 44398 }, { 0x0F92, 44318 }, { 0x0F93, 44394 }, { 0x0F94, 44402 }, { 0x0F95, 44310 }, { 0x0F96, 44378 }, { 0x0F97, 44326 }, { 0x0F99, 44410 }, { 0x0F9A, 44434 }, { 0x0F9B, 44458 }, { 0x0F9C, 44382 }, { 0x0F9D, 44442 }, { 0x0F9E, 44406 }, { 0x0F9F, 44358 }, { 0x0FA0, 44426 }, { 0x0FA1, 44314 }, { 0x0FA2, 44386 }, { 0x0FA3, 44342 }, { 0x0FA4, 44346 }, { 0x0FA5, 44414 }, { 0x0FA6, 44306 }, { 0x0FA7, 44374 }, { 0x0FA8, 44338 }, { 0x0FA9, 44430 }, { 0x0FAA, 44454 }, { 0x0FAB, 44390 }, { 0x0FAC, 44446 }, { 0x0FAD, 44362 }, { 0x0FAE, 44438 }, { 0x0FAF, 44370 }, { 0x0FB0, 44302 }, { 0x0FB1, 44366 }, { 0x0FB2, 44350 }, { 0x0FB3, 44334 }, { 0x0FB4, 44418 }, { 0x0FB5, 44422 }, { 0x0FB6, 44354 }, { 0x0FB7, 44322 }, { 0x0FB8, 44298 }, { 0x0FB9, 44450 }, { 0x0FBA, 44467 }, { 0x0FBB, 44472 }, { 0x0FBC, 44462 }, { 0x0FBE, 43653 }, { 0x0FBF, 43657 }, { 0x0FC0, 44504 }, { 0x0FC1, 44509 }, { 0x0FC2, 44494 }, { 0x0FC3, 44499 }, { 0x0FC4, 44273 }, { 0x0FC5, 44263 }, { 0x0FC6, 44281 }, { 0x0FC7, 44267 }, { 0x0FC8, 44277 }, { 0x0FC9, 44241 }, { 0x0FCA, 44257 }, { 0x0FCB, 44251 }, { 0x0FCC, 44245 }, { 0x0FCE, 43926 }, { 0x0FCF, 43921 }, { 0x0FD0, 43777 }, { 0x0FD1, 43813 }, { 0x0FD2, 43756 }, { 0x0FD3, 43857 }, { 0x0FD4, 43838 }, { 0x1000, 42482 }, { 0x1001, 42533 }, { 0x1002, 42470 }, { 0x1003, 42527 }, { 0x1004, 42559 }, { 0x1005, 42464 }, { 0x1006, 42518 }, { 0x1007, 42479 }, { 0x1008, 42530 }, { 0x1009, 42565 }, { 0x100A, 42586 }, { 0x100B, 42580 }, { 0x100C, 42650 }, { 0x100D, 42521 }, { 0x100E, 42583 }, { 0x100F, 42562 }, { 0x1010, 42503 }, { 0x1011, 42577 }, { 0x1012, 42467 }, { 0x1013, 42524 }, { 0x1014, 42491 }, { 0x1015, 42494 }, { 0x1016, 42568 }, { 0x1017, 42461 }, { 0x1018, 42515 }, { 0x1019, 42488 }, { 0x101A, 42512 }, { 0x101B, 42497 }, { 0x101C, 42485 }, { 0x101D, 42509 }, { 0x101E, 42500 }, { 0x101F, 42473 }, { 0x1020, 42536 }, { 0x1021, 42443 }, { 0x1022, 42594 }, { 0x1023, 42449 }, { 0x1024, 42476 }, { 0x1025, 42455 }, { 0x1026, 42506 }, { 0x1027, 42446 }, { 0x1028, 42539 }, { 0x1029, 42452 }, { 0x102A, 42458 }, { 0x102B, 42389 }, { 0x102C, 42329 }, { 0x102D, 42321 }, { 0x102E, 42337 }, { 0x102F, 42325 }, { 0x1030, 42341 }, { 0x1031, 42312 }, { 0x1032, 42333 }, { 0x1033, 42350 }, { 0x1034, 42345 }, { 0x1035, 42316 }, { 0x1036, 42266 }, { 0x1037, 42179 }, { 0x1038, 42233 }, { 0x1039, 42227 }, { 0x103A, 42183 }, { 0x103B, 42767 }, { 0x103C, 42757 }, { 0x103D, 42762 }, { 0x103E, 42752 }, { 0x103F, 42653 }, { 0x1040, 42300 }, { 0x1041, 42282 }, { 0x1042, 42288 }, { 0x1043, 42309 }, { 0x1044, 42294 }, { 0x1045, 42291 }, { 0x1046, 42285 }, { 0x1047, 42306 }, { 0x1048, 42303 }, { 0x1049, 42297 }, { 0x104A, 42223 }, { 0x104B, 42230 }, { 0x104C, 42719 }, { 0x104D, 42722 }, { 0x104E, 42725 }, { 0x104F, 42716 }, { 0x1050, 42571 }, { 0x1051, 42574 }, { 0x1052, 42684 }, { 0x1053, 42692 }, { 0x1054, 42680 }, { 0x1055, 42688 }, { 0x1056, 42414 }, { 0x1057, 42424 }, { 0x1058, 42409 }, { 0x1059, 42419 }, { 0x105A, 42555 }, { 0x105B, 42551 }, { 0x105C, 42543 }, { 0x105D, 42547 }, { 0x105E, 42740 }, { 0x105F, 42734 }, { 0x1060, 42728 }, { 0x1061, 42589 }, { 0x1062, 42361 }, { 0x1063, 42276 }, { 0x1064, 42269 }, { 0x1065, 42702 }, { 0x1066, 42696 }, { 0x1067, 42429 }, { 0x1068, 42436 }, { 0x1069, 42236 }, { 0x106A, 42242 }, { 0x106B, 42248 }, { 0x106C, 42254 }, { 0x106D, 42260 }, { 0x106E, 42662 }, { 0x106F, 42668 }, { 0x1070, 42674 }, { 0x1071, 42355 }, { 0x1072, 42404 }, { 0x1073, 42394 }, { 0x1074, 42399 }, { 0x1075, 42622 }, { 0x1076, 42634 }, { 0x1077, 42614 }, { 0x1078, 42602 }, { 0x1079, 42630 }, { 0x107A, 42638 }, { 0x107B, 42606 }, { 0x107C, 42626 }, { 0x107D, 42642 }, { 0x107E, 42610 }, { 0x107F, 42598 }, { 0x1080, 42646 }, { 0x1081, 42618 }, { 0x1082, 42746 }, { 0x1083, 42378 }, { 0x1084, 42367 }, { 0x1085, 42372 }, { 0x1086, 42383 }, { 0x1087, 42186 }, { 0x1088, 42190 }, { 0x1089, 42194 }, { 0x108A, 42198 }, { 0x108B, 42202 }, { 0x108C, 42207 }, { 0x108D, 42212 }, { 0x108E, 42657 }, { 0x108F, 42218 }, { 0x1090, 42163 }, { 0x1091, 42139 }, { 0x1092, 42147 }, { 0x1093, 42175 }, { 0x1094, 42155 }, { 0x1095, 42151 }, { 0x1096, 42143 }, { 0x1097, 42171 }, { 0x1098, 42167 }, { 0x1099, 42159 }, { 0x109E, 42708 }, { 0x109F, 42712 }, { 0x10A0, 52068 }, { 0x10A1, 52096 }, { 0x10A2, 52112 }, { 0x10A3, 52108 }, { 0x10A4, 52072 }, { 0x10A5, 52176 }, { 0x10A6, 52184 }, { 0x10A7, 52168 }, { 0x10A8, 52080 }, { 0x10A9, 52136 }, { 0x10AA, 52140 }, { 0x10AB, 52144 }, { 0x10AC, 52148 }, { 0x10AD, 52084 }, { 0x10AE, 52152 }, { 0x10AF, 52216 }, { 0x10B0, 52160 }, { 0x10B1, 52164 }, { 0x10B2, 52172 }, { 0x10B3, 52088 }, { 0x10B4, 52208 }, { 0x10B5, 52204 }, { 0x10B6, 52196 }, { 0x10B7, 52156 }, { 0x10B8, 52212 }, { 0x10B9, 52192 }, { 0x10BA, 52100 }, { 0x10BB, 52132 }, { 0x10BC, 52104 }, { 0x10BD, 52188 }, { 0x10BE, 52180 }, { 0x10BF, 52200 }, { 0x10C0, 52116 }, { 0x10C1, 52076 }, { 0x10C2, 52124 }, { 0x10C3, 52092 }, { 0x10C4, 52120 }, { 0x10C5, 52128 }, { 0x10D0, 51938 }, { 0x10D1, 51968 }, { 0x10D2, 51980 }, { 0x10D3, 51977 }, { 0x10D4, 51941 }, { 0x10D5, 52028 }, { 0x10D6, 52034 }, { 0x10D7, 52022 }, { 0x10D8, 51950 }, { 0x10D9, 51998 }, { 0x10DA, 52001 }, { 0x10DB, 52004 }, { 0x10DC, 52007 }, { 0x10DD, 51953 }, { 0x10DE, 52010 }, { 0x10DF, 52058 }, { 0x10E0, 52016 }, { 0x10E1, 52019 }, { 0x10E2, 52025 }, { 0x10E3, 51956 }, { 0x10E4, 52052 }, { 0x10E5, 52049 }, { 0x10E6, 52043 }, { 0x10E7, 52013 }, { 0x10E8, 52055 }, { 0x10E9, 52040 }, { 0x10EA, 51971 }, { 0x10EB, 51995 }, { 0x10EC, 51974 }, { 0x10ED, 52037 }, { 0x10EE, 52031 }, { 0x10EF, 52046 }, { 0x10F0, 51983 }, { 0x10F1, 51947 }, { 0x10F2, 51989 }, { 0x10F3, 51959 }, { 0x10F4, 51986 }, { 0x10F5, 51992 }, { 0x10F6, 51944 }, { 0x10F7, 51962 }, { 0x10F8, 52061 }, { 0x10F9, 52064 }, { 0x10FA, 51965 }, { 0x10FB, 52220 }, { 0x10FC, 54786 }, { 0x1100, 32202 }, { 0x1101, 32310 }, { 0x1102, 32190 }, { 0x1103, 32205 }, { 0x1104, 32313 }, { 0x1105, 32196 }, { 0x1106, 32187 }, { 0x1107, 32193 }, { 0x1108, 32268 }, { 0x1109, 32175 }, { 0x110A, 32226 }, { 0x110B, 32184 }, { 0x110C, 32178 }, { 0x110D, 32256 }, { 0x110E, 32208 }, { 0x110F, 32211 }, { 0x1110, 32220 }, { 0x1111, 32217 }, { 0x1112, 32181 }, { 0x1113, 32328 }, { 0x1114, 32265 }, { 0x1115, 32331 }, { 0x1116, 32289 }, { 0x1117, 32391 }, { 0x1118, 32301 }, { 0x1119, 32271 }, { 0x111A, 32298 }, { 0x111B, 32376 }, { 0x111C, 32286 }, { 0x111D, 32370 }, { 0x111E, 32334 }, { 0x111F, 32295 }, { 0x1120, 32337 }, { 0x1121, 32232 }, { 0x1122, 32424 }, { 0x1123, 32427 }, { 0x1124, 32418 }, { 0x1125, 32409 }, { 0x1126, 32415 }, { 0x1127, 32292 }, { 0x1128, 32382 }, { 0x1129, 32388 }, { 0x112A, 32385 }, { 0x112B, 32373 }, { 0x112C, 32439 }, { 0x112D, 32304 }, { 0x112E, 32247 }, { 0x112F, 32307 }, { 0x1130, 32253 }, { 0x1131, 32244 }, { 0x1132, 32250 }, { 0x1133, 32430 }, { 0x1134, 32394 }, { 0x1135, 32241 }, { 0x1136, 32235 }, { 0x1137, 32340 }, { 0x1138, 32343 }, { 0x1139, 32349 }, { 0x113A, 32346 }, { 0x113B, 32238 }, { 0x113C, 32319 }, { 0x113D, 32421 }, { 0x113E, 32397 }, { 0x113F, 32442 }, { 0x1140, 32214 }, { 0x1141, 32322 }, { 0x1142, 32325 }, { 0x1143, 32280 }, { 0x1144, 32283 }, { 0x1145, 32229 }, { 0x1146, 32361 }, { 0x1147, 32262 }, { 0x1148, 32277 }, { 0x1149, 32358 }, { 0x114A, 32367 }, { 0x114B, 32364 }, { 0x114C, 32223 }, { 0x114D, 32274 }, { 0x114E, 32355 }, { 0x114F, 32436 }, { 0x1150, 32412 }, { 0x1151, 32445 }, { 0x1152, 32400 }, { 0x1153, 32352 }, { 0x1154, 32403 }, { 0x1155, 32433 }, { 0x1156, 32379 }, { 0x1157, 32406 }, { 0x1158, 32259 }, { 0x1159, 32316 }, { 0x115F, 32199 }, { 0x1160, 32865 }, { 0x1161, 32694 }, { 0x1162, 32709 }, { 0x1163, 32730 }, { 0x1164, 32781 }, { 0x1165, 32712 }, { 0x1166, 32697 }, { 0x1167, 32784 }, { 0x1168, 32733 }, { 0x1169, 32703 }, { 0x116A, 32721 }, { 0x116B, 32775 }, { 0x116C, 32718 }, { 0x116D, 32739 }, { 0x116E, 32706 }, { 0x116F, 32778 }, { 0x1170, 32724 }, { 0x1171, 32727 }, { 0x1172, 32742 }, { 0x1173, 32715 }, { 0x1174, 32736 }, { 0x1175, 32700 }, { 0x1176, 32745 }, { 0x1177, 32748 }, { 0x1178, 32814 }, { 0x1179, 32847 }, { 0x117A, 32787 }, { 0x117B, 32790 }, { 0x117C, 32841 }, { 0x117D, 32850 }, { 0x117E, 32853 }, { 0x117F, 32802 }, { 0x1180, 32760 }, { 0x1181, 32805 }, { 0x1182, 32763 }, { 0x1183, 32766 }, { 0x1184, 32856 }, { 0x1185, 32868 }, { 0x1186, 32871 }, { 0x1187, 32823 }, { 0x1188, 32820 }, { 0x1189, 32769 }, { 0x118A, 32808 }, { 0x118B, 32886 }, { 0x118C, 32811 }, { 0x118D, 32772 }, { 0x118E, 32826 }, { 0x118F, 32859 }, { 0x1190, 32829 }, { 0x1191, 32874 }, { 0x1192, 32862 }, { 0x1193, 32835 }, { 0x1194, 32832 }, { 0x1195, 32793 }, { 0x1196, 32844 }, { 0x1197, 32817 }, { 0x1198, 32751 }, { 0x1199, 32799 }, { 0x119A, 32754 }, { 0x119B, 32757 }, { 0x119C, 32796 }, { 0x119D, 32883 }, { 0x119E, 32838 }, { 0x119F, 32889 }, { 0x11A0, 32880 }, { 0x11A1, 32877 }, { 0x11A2, 32892 }, { 0x11A8, 32472 }, { 0x11A9, 32577 }, { 0x11AA, 32535 }, { 0x11AB, 32463 }, { 0x11AC, 32547 }, { 0x11AD, 32550 }, { 0x11AE, 32475 }, { 0x11AF, 32469 }, { 0x11B0, 32598 }, { 0x11B1, 32562 }, { 0x11B2, 32568 }, { 0x11B3, 32508 }, { 0x11B4, 32643 }, { 0x11B5, 32640 }, { 0x11B6, 32559 }, { 0x11B7, 32460 }, { 0x11B8, 32466 }, { 0x11B9, 32505 }, { 0x11BA, 32448 }, { 0x11BB, 32496 }, { 0x11BC, 32457 }, { 0x11BD, 32451 }, { 0x11BE, 32478 }, { 0x11BF, 32481 }, { 0x11C0, 32490 }, { 0x11C1, 32487 }, { 0x11C2, 32454 }, { 0x11C3, 32586 }, { 0x11C4, 32682 }, { 0x11C5, 32592 }, { 0x11C6, 32595 }, { 0x11C7, 32502 }, { 0x11C8, 32622 }, { 0x11C9, 32625 }, { 0x11CA, 32646 }, { 0x11CB, 32604 }, { 0x11CC, 32673 }, { 0x11CD, 32565 }, { 0x11CE, 32601 }, { 0x11CF, 32688 }, { 0x11D0, 32520 }, { 0x11D1, 32685 }, { 0x11D2, 32661 }, { 0x11D3, 32664 }, { 0x11D4, 32676 }, { 0x11D5, 32691 }, { 0x11D6, 32658 }, { 0x11D7, 32637 }, { 0x11D8, 32634 }, { 0x11D9, 32679 }, { 0x11DA, 32589 }, { 0x11DB, 32544 }, { 0x11DC, 32541 }, { 0x11DD, 32499 }, { 0x11DE, 32655 }, { 0x11DF, 32619 }, { 0x11E0, 32616 }, { 0x11E1, 32538 }, { 0x11E2, 32610 }, { 0x11E3, 32556 }, { 0x11E4, 32631 }, { 0x11E5, 32553 }, { 0x11E6, 32613 }, { 0x11E7, 32571 }, { 0x11E8, 32574 }, { 0x11E9, 32514 }, { 0x11EA, 32511 }, { 0x11EB, 32484 }, { 0x11EC, 32583 }, { 0x11ED, 32670 }, { 0x11EE, 32517 }, { 0x11EF, 32607 }, { 0x11F0, 32493 }, { 0x11F1, 32649 }, { 0x11F2, 32667 }, { 0x11F3, 32628 }, { 0x11F4, 32652 }, { 0x11F5, 32526 }, { 0x11F6, 32532 }, { 0x11F7, 32523 }, { 0x11F8, 32529 }, { 0x11F9, 32580 }, { 0x1200, 50516 }, { 0x1201, 50528 }, { 0x1202, 50522 }, { 0x1203, 50909 }, { 0x1204, 50912 }, { 0x1205, 50519 }, { 0x1206, 50525 }, { 0x1207, 50930 }, { 0x1208, 50561 }, { 0x1209, 50573 }, { 0x120A, 50567 }, { 0x120B, 50993 }, { 0x120C, 50996 }, { 0x120D, 50564 }, { 0x120E, 50570 }, { 0x120F, 51002 }, { 0x1210, 50915 }, { 0x1211, 50927 }, { 0x1212, 50921 }, { 0x1213, 51443 }, { 0x1214, 51446 }, { 0x1215, 50918 }, { 0x1216, 50924 }, { 0x1217, 51449 }, { 0x1218, 50576 }, { 0x1219, 50588 }, { 0x121A, 50582 }, { 0x121B, 51005 }, { 0x121C, 51008 }, { 0x121D, 50579 }, { 0x121E, 50585 }, { 0x121F, 51014 }, { 0x1220, 51191 }, { 0x1221, 51203 }, { 0x1222, 51197 }, { 0x1223, 51554 }, { 0x1224, 51557 }, { 0x1225, 51194 }, { 0x1226, 51200 }, { 0x1227, 51560 }, { 0x1228, 50636 }, { 0x1229, 50648 }, { 0x122A, 50642 }, { 0x122B, 51134 }, { 0x122C, 51137 }, { 0x122D, 50639 }, { 0x122E, 50645 }, { 0x122F, 51143 }, { 0x1230, 50651 }, { 0x1231, 50663 }, { 0x1232, 50657 }, { 0x1233, 51149 }, { 0x1234, 51152 }, { 0x1235, 50654 }, { 0x1236, 50660 }, { 0x1237, 51188 }, { 0x1238, 51155 }, { 0x1239, 51167 }, { 0x123A, 51161 }, { 0x123B, 51536 }, { 0x123C, 51539 }, { 0x123D, 51158 }, { 0x123E, 51164 }, { 0x123F, 51545 }, { 0x1240, 50621 }, { 0x1241, 50633 }, { 0x1242, 50627 }, { 0x1243, 51086 }, { 0x1244, 51089 }, { 0x1245, 50624 }, { 0x1246, 50630 }, { 0x1247, 51107 }, { 0x1248, 51110 }, { 0x124A, 51116 }, { 0x124B, 51524 }, { 0x124C, 51527 }, { 0x124D, 51113 }, { 0x1250, 51092 }, { 0x1251, 51104 }, { 0x1252, 51098 }, { 0x1253, 51509 }, { 0x1254, 51512 }, { 0x1255, 51095 }, { 0x1256, 51101 }, { 0x1258, 51515 }, { 0x125A, 51521 }, { 0x125B, 51638 }, { 0x125C, 51641 }, { 0x125D, 51518 }, { 0x1260, 50441 }, { 0x1261, 50453 }, { 0x1262, 50447 }, { 0x1263, 50756 }, { 0x1264, 50759 }, { 0x1265, 50444 }, { 0x1266, 50450 }, { 0x1267, 50765 }, { 0x1268, 50681 }, { 0x1269, 50693 }, { 0x126A, 50687 }, { 0x126B, 51263 }, { 0x126C, 51266 }, { 0x126D, 50684 }, { 0x126E, 50690 }, { 0x126F, 51269 }, { 0x1270, 50666 }, { 0x1271, 50678 }, { 0x1272, 50672 }, { 0x1273, 51206 }, { 0x1274, 51209 }, { 0x1275, 50669 }, { 0x1276, 50675 }, { 0x1277, 51245 }, { 0x1278, 50456 }, { 0x1279, 50468 }, { 0x127A, 50462 }, { 0x127B, 50774 }, { 0x127C, 50792 }, { 0x127D, 50459 }, { 0x127E, 50465 }, { 0x127F, 50813 }, { 0x1280, 50711 }, { 0x1281, 50723 }, { 0x1282, 50717 }, { 0x1283, 51281 }, { 0x1284, 51284 }, { 0x1285, 50714 }, { 0x1286, 50720 }, { 0x1287, 51287 }, { 0x1288, 51290 }, { 0x128A, 51296 }, { 0x128B, 51593 }, { 0x128C, 51596 }, { 0x128D, 51293 }, { 0x1290, 50591 }, { 0x1291, 50603 }, { 0x1292, 50597 }, { 0x1293, 51026 }, { 0x1294, 51029 }, { 0x1295, 50594 }, { 0x1296, 50600 }, { 0x1297, 51035 }, { 0x1298, 51038 }, { 0x1299, 51050 }, { 0x129A, 51044 }, { 0x129B, 51482 }, { 0x129C, 51485 }, { 0x129D, 51041 }, { 0x129E, 51047 }, { 0x129F, 51491 }, { 0x12A0, 51644 }, { 0x12A1, 51660 }, { 0x12A2, 51652 }, { 0x12A3, 51664 }, { 0x12A4, 51668 }, { 0x12A5, 51648 }, { 0x12A6, 51656 }, { 0x12A7, 51676 }, { 0x12A8, 50546 }, { 0x12A9, 50558 }, { 0x12AA, 50552 }, { 0x12AB, 50945 }, { 0x12AC, 50948 }, { 0x12AD, 50549 }, { 0x12AE, 50555 }, { 0x12AF, 50951 }, { 0x12B0, 50954 }, { 0x12B2, 50960 }, { 0x12B3, 51452 }, { 0x12B4, 51455 }, { 0x12B5, 50957 }, { 0x12B8, 50963 }, { 0x12B9, 50975 }, { 0x12BA, 50969 }, { 0x12BB, 51458 }, { 0x12BC, 51461 }, { 0x12BD, 50966 }, { 0x12BE, 50972 }, { 0x12C0, 51464 }, { 0x12C2, 51470 }, { 0x12C3, 51632 }, { 0x12C4, 51635 }, { 0x12C5, 51467 }, { 0x12C8, 50696 }, { 0x12C9, 50708 }, { 0x12CA, 50702 }, { 0x12CB, 51272 }, { 0x12CC, 51275 }, { 0x12CD, 50699 }, { 0x12CE, 50705 }, { 0x12CF, 51278 }, { 0x12D0, 51696 }, { 0x12D1, 51712 }, { 0x12D2, 51704 }, { 0x12D3, 51716 }, { 0x12D4, 51720 }, { 0x12D5, 51700 }, { 0x12D6, 51708 }, { 0x12D8, 50741 }, { 0x12D9, 50753 }, { 0x12DA, 50747 }, { 0x12DB, 51323 }, { 0x12DC, 51326 }, { 0x12DD, 50744 }, { 0x12DE, 50750 }, { 0x12DF, 51347 }, { 0x12E0, 51329 }, { 0x12E1, 51341 }, { 0x12E2, 51335 }, { 0x12E3, 51605 }, { 0x12E4, 51608 }, { 0x12E5, 51332 }, { 0x12E6, 51338 }, { 0x12E7, 51611 }, { 0x12E8, 50726 }, { 0x12E9, 50738 }, { 0x12EA, 50732 }, { 0x12EB, 51314 }, { 0x12EC, 51317 }, { 0x12ED, 50729 }, { 0x12EE, 50735 }, { 0x12EF, 51320 }, { 0x12F0, 50471 }, { 0x12F1, 50483 }, { 0x12F2, 50477 }, { 0x12F3, 50816 }, { 0x12F4, 50834 }, { 0x12F5, 50474 }, { 0x12F6, 50480 }, { 0x12F7, 50840 }, { 0x12F8, 50819 }, { 0x12F9, 50831 }, { 0x12FA, 50825 }, { 0x12FB, 51401 }, { 0x12FC, 51404 }, { 0x12FD, 50822 }, { 0x12FE, 50828 }, { 0x12FF, 51410 }, { 0x1300, 50531 }, { 0x1301, 50543 }, { 0x1302, 50537 }, { 0x1303, 50933 }, { 0x1304, 50936 }, { 0x1305, 50534 }, { 0x1306, 50540 }, { 0x1307, 50942 }, { 0x1308, 50501 }, { 0x1309, 50513 }, { 0x130A, 50507 }, { 0x130B, 50861 }, { 0x130C, 50864 }, { 0x130D, 50504 }, { 0x130E, 50510 }, { 0x130F, 50882 }, { 0x1310, 50885 }, { 0x1312, 50891 }, { 0x1313, 51431 }, { 0x1314, 51434 }, { 0x1315, 50888 }, { 0x1318, 50867 }, { 0x1319, 50879 }, { 0x131A, 50873 }, { 0x131B, 51416 }, { 0x131C, 51419 }, { 0x131D, 50870 }, { 0x131E, 50876 }, { 0x131F, 51626 }, { 0x1320, 51212 }, { 0x1321, 51224 }, { 0x1322, 51218 }, { 0x1323, 51563 }, { 0x1324, 51566 }, { 0x1325, 51215 }, { 0x1326, 51221 }, { 0x1327, 51572 }, { 0x1328, 50795 }, { 0x1329, 50807 }, { 0x132A, 50801 }, { 0x132B, 51389 }, { 0x132C, 51392 }, { 0x132D, 50798 }, { 0x132E, 50804 }, { 0x132F, 51398 }, { 0x1330, 51059 }, { 0x1331, 51071 }, { 0x1332, 51065 }, { 0x1333, 51494 }, { 0x1334, 51497 }, { 0x1335, 51062 }, { 0x1336, 51068 }, { 0x1337, 51503 }, { 0x1338, 51230 }, { 0x1339, 51242 }, { 0x133A, 51236 }, { 0x133B, 51575 }, { 0x133C, 51578 }, { 0x133D, 51233 }, { 0x133E, 51239 }, { 0x133F, 51581 }, { 0x1340, 51248 }, { 0x1341, 51260 }, { 0x1342, 51254 }, { 0x1343, 51584 }, { 0x1344, 51587 }, { 0x1345, 51251 }, { 0x1346, 51257 }, { 0x1347, 51590 }, { 0x1348, 50486 }, { 0x1349, 50498 }, { 0x134A, 50492 }, { 0x134B, 50843 }, { 0x134C, 50846 }, { 0x134D, 50489 }, { 0x134E, 50495 }, { 0x134F, 50849 }, { 0x1350, 50606 }, { 0x1351, 50618 }, { 0x1352, 50612 }, { 0x1353, 51053 }, { 0x1354, 51056 }, { 0x1355, 50609 }, { 0x1356, 50615 }, { 0x1357, 51077 }, { 0x1358, 51146 }, { 0x1359, 51023 }, { 0x135A, 50858 }, { 0x135F, 51724 }, { 0x1360, 50435 }, { 0x1361, 51733 }, { 0x1362, 50323 }, { 0x1363, 50328 }, { 0x1364, 51731 }, { 0x1365, 50326 }, { 0x1366, 50432 }, { 0x1367, 50438 }, { 0x1368, 51728 }, { 0x1369, 50330 }, { 0x136A, 50336 }, { 0x136B, 50354 }, { 0x136C, 50342 }, { 0x136D, 50339 }, { 0x136E, 50333 }, { 0x136F, 50351 }, { 0x1370, 50348 }, { 0x1371, 50345 }, { 0x1372, 50398 }, { 0x1373, 50423 }, { 0x1374, 50420 }, { 0x1375, 50408 }, { 0x1376, 50405 }, { 0x1377, 50411 }, { 0x1378, 50429 }, { 0x1379, 50414 }, { 0x137A, 50417 }, { 0x137B, 50426 }, { 0x137C, 50401 }, { 0x1380, 51688 }, { 0x1381, 51020 }, { 0x1382, 51479 }, { 0x1383, 51017 }, { 0x1384, 51680 }, { 0x1385, 50771 }, { 0x1386, 51365 }, { 0x1387, 50768 }, { 0x1388, 51684 }, { 0x1389, 50855 }, { 0x138A, 51413 }, { 0x138B, 50852 }, { 0x138C, 51692 }, { 0x138D, 51083 }, { 0x138E, 51506 }, { 0x138F, 51080 }, { 0x1390, 50382 }, { 0x1391, 50361 }, { 0x1392, 50390 }, { 0x1393, 50377 }, { 0x1394, 50365 }, { 0x1395, 50373 }, { 0x1396, 50386 }, { 0x1397, 50369 }, { 0x1398, 50394 }, { 0x1399, 50357 }, { 0x13A0, 48143 }, { 0x13A1, 48146 }, { 0x13A2, 48149 }, { 0x13A3, 48152 }, { 0x13A4, 48158 }, { 0x13A5, 48161 }, { 0x13A6, 48182 }, { 0x13A7, 48218 }, { 0x13A8, 48185 }, { 0x13A9, 48188 }, { 0x13AA, 48191 }, { 0x13AB, 48194 }, { 0x13AC, 48197 }, { 0x13AD, 48200 }, { 0x13AE, 48203 }, { 0x13AF, 48206 }, { 0x13B0, 48209 }, { 0x13B1, 48212 }, { 0x13B2, 48215 }, { 0x13B3, 48221 }, { 0x13B4, 48224 }, { 0x13B5, 48227 }, { 0x13B6, 48230 }, { 0x13B7, 48233 }, { 0x13B8, 48236 }, { 0x13B9, 48239 }, { 0x13BA, 48242 }, { 0x13BB, 48245 }, { 0x13BC, 48248 }, { 0x13BD, 48251 }, { 0x13BE, 48254 }, { 0x13BF, 48338 }, { 0x13C0, 48341 }, { 0x13C1, 48257 }, { 0x13C2, 48260 }, { 0x13C3, 48263 }, { 0x13C4, 48266 }, { 0x13C5, 48269 }, { 0x13C6, 48344 }, { 0x13C7, 48347 }, { 0x13C8, 48350 }, { 0x13C9, 48353 }, { 0x13CA, 48356 }, { 0x13CB, 48359 }, { 0x13CC, 48272 }, { 0x13CD, 48155 }, { 0x13CE, 48275 }, { 0x13CF, 48278 }, { 0x13D0, 48281 }, { 0x13D1, 48284 }, { 0x13D2, 48287 }, { 0x13D3, 48164 }, { 0x13D4, 48290 }, { 0x13D5, 48167 }, { 0x13D6, 48293 }, { 0x13D7, 48170 }, { 0x13D8, 48296 }, { 0x13D9, 48173 }, { 0x13DA, 48176 }, { 0x13DB, 48179 }, { 0x13DC, 48335 }, { 0x13DD, 48362 }, { 0x13DE, 48365 }, { 0x13DF, 48368 }, { 0x13E0, 48371 }, { 0x13E1, 48374 }, { 0x13E2, 48377 }, { 0x13E3, 48380 }, { 0x13E4, 48383 }, { 0x13E5, 48386 }, { 0x13E6, 48389 }, { 0x13E7, 48392 }, { 0x13E8, 48395 }, { 0x13E9, 48299 }, { 0x13EA, 48302 }, { 0x13EB, 48305 }, { 0x13EC, 48308 }, { 0x13ED, 48311 }, { 0x13EE, 48314 }, { 0x13EF, 48317 }, { 0x13F0, 48320 }, { 0x13F1, 48323 }, { 0x13F2, 48326 }, { 0x13F3, 48329 }, { 0x13F4, 48332 }, { 0x1401, 45872 }, { 0x1402, 46118 }, { 0x1403, 45878 }, { 0x1404, 45953 }, { 0x1405, 45893 }, { 0x1406, 46025 }, { 0x1407, 46790 }, { 0x1408, 46858 }, { 0x1409, 46842 }, { 0x140A, 45866 }, { 0x140B, 45914 }, { 0x140C, 46097 }, { 0x140D, 47791 }, { 0x140E, 46100 }, { 0x140F, 47795 }, { 0x1410, 46392 }, { 0x1411, 47927 }, { 0x1412, 46103 }, { 0x1413, 47799 }, { 0x1414, 46395 }, { 0x1415, 47931 }, { 0x1416, 47555 }, { 0x1417, 46094 }, { 0x1418, 47787 }, { 0x1419, 46389 }, { 0x141A, 47923 }, { 0x141B, 47551 }, { 0x141C, 45917 }, { 0x141D, 46786 }, { 0x141E, 47539 }, { 0x141F, 46643 }, { 0x1420, 46647 }, { 0x1421, 46663 }, { 0x1422, 46624 }, { 0x1423, 46651 }, { 0x1424, 46639 }, { 0x1425, 46669 }, { 0x1426, 46674 }, { 0x1427, 46681 }, { 0x1428, 46657 }, { 0x1429, 46635 }, { 0x142A, 46630 }, { 0x142B, 45935 }, { 0x142C, 45956 }, { 0x142D, 46022 }, { 0x142E, 45920 }, { 0x142F, 46031 }, { 0x1430, 46513 }, { 0x1431, 46034 }, { 0x1432, 46257 }, { 0x1433, 46037 }, { 0x1434, 46260 }, { 0x1435, 46814 }, { 0x1436, 47186 }, { 0x1437, 46882 }, { 0x1438, 46028 }, { 0x1439, 46254 }, { 0x143A, 46266 }, { 0x143B, 47879 }, { 0x143C, 46269 }, { 0x143D, 47883 }, { 0x143E, 46519 }, { 0x143F, 48011 }, { 0x1440, 46272 }, { 0x1441, 47887 }, { 0x1442, 46522 }, { 0x1443, 48015 }, { 0x1444, 46263 }, { 0x1445, 47875 }, { 0x1446, 46516 }, { 0x1447, 48007 }, { 0x1448, 46830 }, { 0x1449, 45896 }, { 0x144A, 47747 }, { 0x144B, 46838 }, { 0x144C, 46082 }, { 0x144D, 46567 }, { 0x144E, 46088 }, { 0x144F, 46344 }, { 0x1450, 46091 }, { 0x1451, 46347 }, { 0x1452, 46822 }, { 0x1453, 47118 }, { 0x1454, 46854 }, { 0x1455, 46079 }, { 0x1456, 46329 }, { 0x1457, 46368 }, { 0x1458, 47911 }, { 0x1459, 46371 }, { 0x145A, 47915 }, { 0x145B, 46606 }, { 0x145C, 48055 }, { 0x145D, 46374 }, { 0x145E, 47919 }, { 0x145F, 46609 }, { 0x1460, 48059 }, { 0x1461, 46365 }, { 0x1462, 47907 }, { 0x1463, 46603 }, { 0x1464, 48051 }, { 0x1465, 47595 }, { 0x1466, 45908 }, { 0x1467, 46353 }, { 0x1468, 46359 }, { 0x1469, 46362 }, { 0x146A, 46350 }, { 0x146B, 45962 }, { 0x146C, 46441 }, { 0x146D, 45965 }, { 0x146E, 46158 }, { 0x146F, 45968 }, { 0x1470, 46161 }, { 0x1471, 46798 }, { 0x1472, 45959 }, { 0x1473, 46155 }, { 0x1474, 46167 }, { 0x1475, 47823 }, { 0x1476, 46170 }, { 0x1477, 47827 }, { 0x1478, 46447 }, { 0x1479, 47971 }, { 0x147A, 46173 }, { 0x147B, 47831 }, { 0x147C, 46450 }, { 0x147D, 47975 }, { 0x147E, 46164 }, { 0x147F, 47819 }, { 0x1480, 46444 }, { 0x1481, 47967 }, { 0x1482, 47563 }, { 0x1483, 45881 }, { 0x1484, 45971 }, { 0x1485, 48131 }, { 0x1486, 48135 }, { 0x1487, 48139 }, { 0x1488, 48127 }, { 0x1489, 45926 }, { 0x148A, 46419 }, { 0x148B, 45929 }, { 0x148C, 46128 }, { 0x148D, 45932 }, { 0x148E, 46131 }, { 0x148F, 46794 }, { 0x1490, 45923 }, { 0x1491, 46121 }, { 0x1492, 46137 }, { 0x1493, 47807 }, { 0x1494, 46140 }, { 0x1495, 47811 }, { 0x1496, 46425 }, { 0x1497, 47955 }, { 0x1498, 46143 }, { 0x1499, 47815 }, { 0x149A, 46428 }, { 0x149B, 47959 }, { 0x149C, 46134 }, { 0x149D, 47803 }, { 0x149E, 46422 }, { 0x149F, 47951 }, { 0x14A0, 47559 }, { 0x14A1, 45869 }, { 0x14A2, 46762 }, { 0x14A3, 45992 }, { 0x14A4, 46474 }, { 0x14A5, 45998 }, { 0x14A6, 46209 }, { 0x14A7, 46001 }, { 0x14A8, 46212 }, { 0x14A9, 46806 }, { 0x14AA, 45989 }, { 0x14AB, 46206 }, { 0x14AC, 46218 }, { 0x14AD, 47855 }, { 0x14AE, 46221 }, { 0x14AF, 47859 }, { 0x14B0, 46480 }, { 0x14B1, 47995 }, { 0x14B2, 46224 }, { 0x14B3, 47863 }, { 0x14B4, 46483 }, { 0x14B5, 47999 }, { 0x14B6, 46215 }, { 0x14B7, 47851 }, { 0x14B8, 46477 }, { 0x14B9, 47991 }, { 0x14BA, 47567 }, { 0x14BB, 45887 }, { 0x14BC, 47743 }, { 0x14BD, 45995 }, { 0x14BE, 48091 }, { 0x14BF, 46734 }, { 0x14C0, 46007 }, { 0x14C1, 46486 }, { 0x14C2, 46016 }, { 0x14C3, 46239 }, { 0x14C4, 46019 }, { 0x14C5, 46245 }, { 0x14C6, 46810 }, { 0x14C7, 46004 }, { 0x14C8, 46227 }, { 0x14C9, 46251 }, { 0x14CA, 47871 }, { 0x14CB, 46248 }, { 0x14CC, 47867 }, { 0x14CD, 46510 }, { 0x14CE, 48003 }, { 0x14CF, 47571 }, { 0x14D0, 45890 }, { 0x14D1, 46958 }, { 0x14D2, 46013 }, { 0x14D3, 45977 }, { 0x14D4, 46453 }, { 0x14D5, 45983 }, { 0x14D6, 46188 }, { 0x14D7, 45986 }, { 0x14D8, 46191 }, { 0x14D9, 46802 }, { 0x14DA, 45974 }, { 0x14DB, 46176 }, { 0x14DC, 46197 }, { 0x14DD, 47839 }, { 0x14DE, 46200 }, { 0x14DF, 47843 }, { 0x14E0, 46468 }, { 0x14E1, 47983 }, { 0x14E2, 46203 }, { 0x14E3, 47847 }, { 0x14E4, 46471 }, { 0x14E5, 47987 }, { 0x14E6, 46194 }, { 0x14E7, 47835 }, { 0x14E8, 46465 }, { 0x14E9, 47979 }, { 0x14EA, 45884 }, { 0x14EB, 47739 }, { 0x14EC, 46710 }, { 0x14ED, 46064 }, { 0x14EE, 46534 }, { 0x14EF, 46070 }, { 0x14F0, 46311 }, { 0x14F1, 46073 }, { 0x14F2, 46314 }, { 0x14F3, 46818 }, { 0x14F4, 46061 }, { 0x14F5, 46296 }, { 0x14F6, 46320 }, { 0x14F7, 47895 }, { 0x14F8, 46323 }, { 0x14F9, 47899 }, { 0x14FA, 46561 }, { 0x14FB, 48043 }, { 0x14FC, 46326 }, { 0x14FD, 47903 }, { 0x14FE, 46564 }, { 0x14FF, 48047 }, { 0x1500, 46317 }, { 0x1501, 47891 }, { 0x1502, 46558 }, { 0x1503, 48039 }, { 0x1504, 47591 }, { 0x1505, 45905 }, { 0x1506, 48095 }, { 0x1507, 46076 }, { 0x1508, 47687 }, { 0x1509, 48103 }, { 0x150A, 47547 }, { 0x150B, 47543 }, { 0x150C, 47583 }, { 0x150D, 47587 }, { 0x150E, 47579 }, { 0x150F, 47575 }, { 0x1510, 46302 }, { 0x1511, 46305 }, { 0x1512, 46540 }, { 0x1513, 46308 }, { 0x1514, 46543 }, { 0x1515, 46299 }, { 0x1516, 46537 }, { 0x1517, 46549 }, { 0x1518, 48027 }, { 0x1519, 46552 }, { 0x151A, 48031 }, { 0x151B, 46701 }, { 0x151C, 48079 }, { 0x151D, 46555 }, { 0x151E, 48035 }, { 0x151F, 46704 }, { 0x1520, 48083 }, { 0x1521, 46546 }, { 0x1522, 48023 }, { 0x1523, 46698 }, { 0x1524, 48075 }, { 0x1525, 46067 }, { 0x1526, 46109 }, { 0x1527, 46612 }, { 0x1528, 46112 }, { 0x1529, 46401 }, { 0x152A, 46115 }, { 0x152B, 46404 }, { 0x152C, 46826 }, { 0x152D, 46106 }, { 0x152E, 46398 }, { 0x152F, 46410 }, { 0x1530, 47939 }, { 0x1531, 46413 }, { 0x1532, 47943 }, { 0x1533, 46618 }, { 0x1534, 48067 }, { 0x1535, 46416 }, { 0x1536, 47947 }, { 0x1537, 46621 }, { 0x1538, 48071 }, { 0x1539, 46407 }, { 0x153A, 47935 }, { 0x153B, 46615 }, { 0x153C, 48063 }, { 0x153D, 47599 }, { 0x153E, 45911 }, { 0x153F, 48099 }, { 0x1540, 47755 }, { 0x1541, 46766 }, { 0x1542, 46052 }, { 0x1543, 46730 }, { 0x1544, 47763 }, { 0x1545, 46528 }, { 0x1546, 46055 }, { 0x1547, 46290 }, { 0x1548, 46058 }, { 0x1549, 46293 }, { 0x154A, 47767 }, { 0x154B, 46049 }, { 0x154C, 46287 }, { 0x154D, 47759 }, { 0x154E, 46531 }, { 0x154F, 48019 }, { 0x1550, 45902 }, { 0x1551, 47751 }, { 0x1552, 46714 }, { 0x1553, 45941 }, { 0x1554, 46431 }, { 0x1555, 45944 }, { 0x1556, 46149 }, { 0x1557, 45947 }, { 0x1558, 46152 }, { 0x1559, 45938 }, { 0x155A, 46146 }, { 0x155B, 46438 }, { 0x155C, 47963 }, { 0x155D, 45875 }, { 0x155E, 46335 }, { 0x155F, 46718 }, { 0x1560, 46338 }, { 0x1561, 46722 }, { 0x1562, 46573 }, { 0x1563, 46726 }, { 0x1564, 46341 }, { 0x1565, 46576 }, { 0x1566, 46332 }, { 0x1567, 46570 }, { 0x1568, 46707 }, { 0x1569, 48087 }, { 0x156A, 46085 }, { 0x156B, 46594 }, { 0x156C, 46597 }, { 0x156D, 46600 }, { 0x156E, 46591 }, { 0x156F, 46356 }, { 0x1570, 46380 }, { 0x1571, 46383 }, { 0x1572, 46386 }, { 0x1573, 46377 }, { 0x1574, 47611 }, { 0x1575, 47615 }, { 0x1576, 47627 }, { 0x1577, 47619 }, { 0x1578, 47631 }, { 0x1579, 47607 }, { 0x157A, 47623 }, { 0x157B, 47603 }, { 0x157C, 47635 }, { 0x157D, 45950 }, { 0x157E, 46525 }, { 0x157F, 46043 }, { 0x1580, 46281 }, { 0x1581, 46046 }, { 0x1582, 46284 }, { 0x1583, 46040 }, { 0x1584, 46275 }, { 0x1585, 45899 }, { 0x1586, 46582 }, { 0x1587, 46585 }, { 0x1588, 46588 }, { 0x1589, 46579 }, { 0x158A, 47775 }, { 0x158B, 47779 }, { 0x158C, 47783 }, { 0x158D, 47771 }, { 0x158E, 46686 }, { 0x158F, 46233 }, { 0x1590, 46495 }, { 0x1591, 46236 }, { 0x1592, 46498 }, { 0x1593, 46230 }, { 0x1594, 46489 }, { 0x1595, 46010 }, { 0x1596, 46242 }, { 0x1597, 46774 }, { 0x1598, 46778 }, { 0x1599, 46782 }, { 0x159A, 46770 }, { 0x159B, 48115 }, { 0x159C, 48119 }, { 0x159D, 48123 }, { 0x159E, 48111 }, { 0x159F, 48107 }, { 0x15A0, 46182 }, { 0x15A1, 46459 }, { 0x15A2, 46185 }, { 0x15A3, 46462 }, { 0x15A4, 46179 }, { 0x15A5, 46456 }, { 0x15A6, 45980 }, { 0x15A7, 47647 }, { 0x15A8, 47651 }, { 0x15A9, 47663 }, { 0x15AA, 47655 }, { 0x15AB, 47667 }, { 0x15AC, 47643 }, { 0x15AD, 47659 }, { 0x15AE, 47639 }, { 0x15AF, 46834 }, { 0x15B0, 47675 }, { 0x15B1, 47679 }, { 0x15B2, 47683 }, { 0x15B3, 47671 }, { 0x15B4, 47727 }, { 0x15B5, 47731 }, { 0x15B6, 47735 }, { 0x15B7, 47723 }, { 0x15B8, 47711 }, { 0x15B9, 47715 }, { 0x15BA, 47719 }, { 0x15BB, 47707 }, { 0x15BC, 47695 }, { 0x15BD, 47699 }, { 0x15BE, 47703 }, { 0x15BF, 47691 }, { 0x15C0, 46742 }, { 0x15C1, 46746 }, { 0x15C2, 46750 }, { 0x15C3, 46738 }, { 0x15C4, 47182 }, { 0x15C5, 47178 }, { 0x15C6, 47170 }, { 0x15C7, 47442 }, { 0x15C8, 47174 }, { 0x15C9, 47166 }, { 0x15CA, 47010 }, { 0x15CB, 47006 }, { 0x15CC, 46998 }, { 0x15CD, 47310 }, { 0x15CE, 47002 }, { 0x15CF, 46994 }, { 0x15D0, 47054 }, { 0x15D1, 47050 }, { 0x15D2, 47042 }, { 0x15D3, 47418 }, { 0x15D4, 47046 }, { 0x15D5, 47038 }, { 0x15D6, 47206 }, { 0x15D7, 47202 }, { 0x15D8, 47194 }, { 0x15D9, 47446 }, { 0x15DA, 47198 }, { 0x15DB, 47190 }, { 0x15DC, 47354 }, { 0x15DD, 47350 }, { 0x15DE, 47342 }, { 0x15DF, 47470 }, { 0x15E0, 47346 }, { 0x15E1, 47338 }, { 0x15E2, 47414 }, { 0x15E3, 47410 }, { 0x15E4, 47402 }, { 0x15E5, 47502 }, { 0x15E6, 47406 }, { 0x15E7, 47398 }, { 0x15E8, 46990 }, { 0x15E9, 46986 }, { 0x15EA, 46978 }, { 0x15EB, 47306 }, { 0x15EC, 46982 }, { 0x15ED, 46974 }, { 0x15EE, 46846 }, { 0x15EF, 46878 }, { 0x15F0, 46874 }, { 0x15F1, 46866 }, { 0x15F2, 47162 }, { 0x15F3, 46870 }, { 0x15F4, 46862 }, { 0x15F5, 47250 }, { 0x15F6, 47246 }, { 0x15F7, 47238 }, { 0x15F8, 47454 }, { 0x15F9, 47242 }, { 0x15FA, 47234 }, { 0x15FB, 47270 }, { 0x15FC, 47266 }, { 0x15FD, 47258 }, { 0x15FE, 47458 }, { 0x15FF, 47262 }, { 0x1600, 47254 }, { 0x1601, 46906 }, { 0x1602, 46970 }, { 0x1603, 46966 }, { 0x1604, 46954 }, { 0x1605, 47302 }, { 0x1606, 46962 }, { 0x1607, 46950 }, { 0x1608, 46946 }, { 0x1609, 46942 }, { 0x160A, 46934 }, { 0x160B, 47298 }, { 0x160C, 46938 }, { 0x160D, 46930 }, { 0x160E, 47074 }, { 0x160F, 47070 }, { 0x1610, 47062 }, { 0x1611, 47422 }, { 0x1612, 47066 }, { 0x1613, 47058 }, { 0x1614, 46902 }, { 0x1615, 46758 }, { 0x1616, 46898 }, { 0x1617, 46890 }, { 0x1618, 47210 }, { 0x1619, 46894 }, { 0x161A, 46754 }, { 0x161B, 46886 }, { 0x161C, 47230 }, { 0x161D, 47226 }, { 0x161E, 47218 }, { 0x161F, 47450 }, { 0x1620, 47222 }, { 0x1621, 47214 }, { 0x1622, 46926 }, { 0x1623, 46922 }, { 0x1624, 46914 }, { 0x1625, 47274 }, { 0x1626, 46918 }, { 0x1627, 46910 }, { 0x1628, 47138 }, { 0x1629, 47134 }, { 0x162A, 47126 }, { 0x162B, 47434 }, { 0x162C, 47130 }, { 0x162D, 47122 }, { 0x162E, 47294 }, { 0x162F, 47290 }, { 0x1630, 47282 }, { 0x1631, 47462 }, { 0x1632, 47286 }, { 0x1633, 47278 }, { 0x1634, 47494 }, { 0x1635, 47490 }, { 0x1636, 47482 }, { 0x1637, 47526 }, { 0x1638, 47486 }, { 0x1639, 47478 }, { 0x163A, 47374 }, { 0x163B, 47370 }, { 0x163C, 47362 }, { 0x163D, 47474 }, { 0x163E, 47366 }, { 0x163F, 47358 }, { 0x1640, 47094 }, { 0x1641, 47090 }, { 0x1642, 47082 }, { 0x1643, 47426 }, { 0x1644, 47086 }, { 0x1645, 47078 }, { 0x1646, 46850 }, { 0x1647, 47534 }, { 0x1648, 47158 }, { 0x1649, 47154 }, { 0x164A, 47146 }, { 0x164B, 47438 }, { 0x164C, 47150 }, { 0x164D, 47142 }, { 0x164E, 47034 }, { 0x164F, 47030 }, { 0x1650, 47018 }, { 0x1651, 47314 }, { 0x1652, 47026 }, { 0x1653, 47014 }, { 0x1654, 47334 }, { 0x1655, 47330 }, { 0x1656, 47322 }, { 0x1657, 47466 }, { 0x1658, 47326 }, { 0x1659, 47318 }, { 0x165A, 47022 }, { 0x165B, 47394 }, { 0x165C, 47390 }, { 0x165D, 47382 }, { 0x165E, 47498 }, { 0x165F, 47386 }, { 0x1660, 47378 }, { 0x1661, 47114 }, { 0x1662, 47110 }, { 0x1663, 47102 }, { 0x1664, 47430 }, { 0x1665, 47106 }, { 0x1666, 47098 }, { 0x1667, 47522 }, { 0x1668, 47518 }, { 0x1669, 47510 }, { 0x166A, 47530 }, { 0x166B, 47514 }, { 0x166C, 47506 }, { 0x166D, 46124 }, { 0x166E, 46434 }, { 0x166F, 46278 }, { 0x1670, 46492 }, { 0x1671, 46504 }, { 0x1672, 46692 }, { 0x1673, 46507 }, { 0x1674, 46695 }, { 0x1675, 46501 }, { 0x1676, 46689 }, { 0x1680, 21369 }, { 0x1681, 21414 }, { 0x1682, 21396 }, { 0x1683, 21420 }, { 0x1684, 21408 }, { 0x1685, 21402 }, { 0x1686, 21411 }, { 0x1687, 21387 }, { 0x1688, 21426 }, { 0x1689, 21384 }, { 0x168A, 21417 }, { 0x168B, 21399 }, { 0x168C, 21390 }, { 0x168D, 21441 }, { 0x168E, 21429 }, { 0x168F, 21405 }, { 0x1690, 21381 }, { 0x1691, 21378 }, { 0x1692, 21375 }, { 0x1693, 21435 }, { 0x1694, 21438 }, { 0x1695, 21432 }, { 0x1696, 21372 }, { 0x1697, 21444 }, { 0x1698, 21393 }, { 0x1699, 21447 }, { 0x169A, 21423 }, { 0x169B, 21450 }, { 0x169C, 21453 }, { 0x16A0, 22222 }, { 0x16A1, 22160 }, { 0x16A2, 22250 }, { 0x16A3, 22189 }, { 0x16A4, 22169 }, { 0x16A5, 22163 }, { 0x16A6, 22368 }, { 0x16A7, 22201 }, { 0x16A8, 22259 }, { 0x16A9, 22185 }, { 0x16AA, 22175 }, { 0x16AB, 22216 }, { 0x16AC, 22402 }, { 0x16AD, 22390 }, { 0x16AE, 22154 }, { 0x16AF, 22179 }, { 0x16B0, 22182 }, { 0x16B1, 22287 }, { 0x16B2, 22284 }, { 0x16B3, 22192 }, { 0x16B4, 22243 }, { 0x16B5, 22151 }, { 0x16B6, 22198 }, { 0x16B7, 22228 }, { 0x16B8, 22204 }, { 0x16B9, 22304 }, { 0x16BA, 22309 }, { 0x16BB, 22276 }, { 0x16BC, 22422 }, { 0x16BD, 22418 }, { 0x16BE, 22327 }, { 0x16BF, 22410 }, { 0x16C0, 22362 }, { 0x16C1, 22233 }, { 0x16C2, 22148 }, { 0x16C3, 22280 }, { 0x16C4, 22207 }, { 0x16C5, 22383 }, { 0x16C6, 22376 }, { 0x16C7, 22239 }, { 0x16C8, 22336 }, { 0x16C9, 22255 }, { 0x16CA, 22341 }, { 0x16CB, 22293 }, { 0x16CC, 22394 }, { 0x16CD, 22142 }, { 0x16CE, 22172 }, { 0x16CF, 22298 }, { 0x16D0, 22398 }, { 0x16D1, 22145 }, { 0x16D2, 22353 }, { 0x16D3, 22426 }, { 0x16D4, 22365 }, { 0x16D5, 22333 }, { 0x16D6, 22271 }, { 0x16D7, 22322 }, { 0x16D8, 22414 }, { 0x16D9, 22406 }, { 0x16DA, 22316 }, { 0x16DB, 22359 }, { 0x16DC, 22313 }, { 0x16DD, 22210 }, { 0x16DE, 22266 }, { 0x16DF, 22348 }, { 0x16E0, 22195 }, { 0x16E1, 22213 }, { 0x16E2, 22345 }, { 0x16E3, 22219 }, { 0x16E4, 22263 }, { 0x16E5, 22247 }, { 0x16E6, 22387 }, { 0x16E7, 22380 }, { 0x16E8, 22373 }, { 0x16E9, 22157 }, { 0x16EA, 22166 }, { 0x16EB, 22430 }, { 0x16EC, 22436 }, { 0x16ED, 22136 }, { 0x16EE, 22139 }, { 0x16EF, 22439 }, { 0x16F0, 22433 }, { 0x1700, 43594 }, { 0x1701, 43597 }, { 0x1702, 43600 }, { 0x1703, 43615 }, { 0x1704, 43609 }, { 0x1705, 43642 }, { 0x1706, 43633 }, { 0x1707, 43606 }, { 0x1708, 43624 }, { 0x1709, 43627 }, { 0x170A, 43603 }, { 0x170B, 43621 }, { 0x170C, 43639 }, { 0x170E, 43618 }, { 0x170F, 43636 }, { 0x1710, 43630 }, { 0x1711, 43612 }, { 0x1712, 43586 }, { 0x1713, 43590 }, { 0x1714, 43583 }, { 0x1720, 40573 }, { 0x1721, 40576 }, { 0x1722, 40579 }, { 0x1723, 40594 }, { 0x1724, 40588 }, { 0x1725, 40624 }, { 0x1726, 40615 }, { 0x1727, 40585 }, { 0x1728, 40603 }, { 0x1729, 40606 }, { 0x172A, 40582 }, { 0x172B, 40600 }, { 0x172C, 40621 }, { 0x172D, 40609 }, { 0x172E, 40597 }, { 0x172F, 40618 }, { 0x1730, 40612 }, { 0x1731, 40591 }, { 0x1732, 40565 }, { 0x1733, 40569 }, { 0x1734, 40562 }, { 0x1735, 67884 }, { 0x1736, 67881 }, { 0x1740, 10387 }, { 0x1741, 10390 }, { 0x1742, 10393 }, { 0x1743, 10408 }, { 0x1744, 10402 }, { 0x1745, 10438 }, { 0x1746, 10429 }, { 0x1747, 10399 }, { 0x1748, 10417 }, { 0x1749, 10420 }, { 0x174A, 10396 }, { 0x174B, 10414 }, { 0x174C, 10435 }, { 0x174D, 10423 }, { 0x174E, 10411 }, { 0x174F, 10432 }, { 0x1750, 10426 }, { 0x1751, 10405 }, { 0x1752, 10379 }, { 0x1753, 10383 }, { 0x1760, 55665 }, { 0x1761, 55668 }, { 0x1762, 55671 }, { 0x1763, 55683 }, { 0x1764, 55680 }, { 0x1765, 55710 }, { 0x1766, 55701 }, { 0x1767, 55677 }, { 0x1768, 55692 }, { 0x1769, 55695 }, { 0x176A, 55674 }, { 0x176B, 55689 }, { 0x176C, 55707 }, { 0x176E, 55686 }, { 0x176F, 55704 }, { 0x1770, 55698 }, { 0x1772, 55657 }, { 0x1773, 55661 }, { 0x1780, 14115 }, { 0x1781, 14163 }, { 0x1782, 14118 }, { 0x1783, 14166 }, { 0x1784, 14169 }, { 0x1785, 14100 }, { 0x1786, 14157 }, { 0x1787, 14103 }, { 0x1788, 14160 }, { 0x1789, 14175 }, { 0x178A, 14106 }, { 0x178B, 14196 }, { 0x178C, 14109 }, { 0x178D, 14199 }, { 0x178E, 14172 }, { 0x178F, 14145 }, { 0x1790, 14190 }, { 0x1791, 14148 }, { 0x1792, 14193 }, { 0x1793, 14130 }, { 0x1794, 14097 }, { 0x1795, 14178 }, { 0x1796, 14133 }, { 0x1797, 14181 }, { 0x1798, 14127 }, { 0x1799, 14154 }, { 0x179A, 14139 }, { 0x179B, 14124 }, { 0x179C, 14151 }, { 0x179D, 14184 }, { 0x179E, 14187 }, { 0x179F, 14142 }, { 0x17A0, 14112 }, { 0x17A1, 14121 }, { 0x17A2, 14136 }, { 0x17A3, 14414 }, { 0x17A4, 14406 }, { 0x17A5, 14390 }, { 0x17A6, 14422 }, { 0x17A7, 14394 }, { 0x17A8, 14438 }, { 0x17A9, 14442 }, { 0x17AA, 14450 }, { 0x17AB, 14398 }, { 0x17AC, 14446 }, { 0x17AD, 14382 }, { 0x17AE, 14402 }, { 0x17AF, 14386 }, { 0x17B0, 14410 }, { 0x17B1, 14426 }, { 0x17B2, 14432 }, { 0x17B3, 14418 }, { 0x17B4, 14093 }, { 0x17B5, 14089 }, { 0x17B6, 14041 }, { 0x17B7, 14029 }, { 0x17B8, 14061 }, { 0x17B9, 14037 }, { 0x17BA, 14085 }, { 0x17BB, 14033 }, { 0x17BC, 14077 }, { 0x17BD, 14073 }, { 0x17BE, 14065 }, { 0x17BF, 14081 }, { 0x17C0, 14057 }, { 0x17C1, 14025 }, { 0x17C2, 14045 }, { 0x17C3, 14049 }, { 0x17C4, 14069 }, { 0x17C5, 14053 }, { 0x17C6, 13965 }, { 0x17C7, 13968 }, { 0x17C8, 13992 }, { 0x17C9, 13983 }, { 0x17CA, 13971 }, { 0x17CB, 13937 }, { 0x17CC, 13934 }, { 0x17CD, 13986 }, { 0x17CE, 13959 }, { 0x17CF, 13928 }, { 0x17D0, 13952 }, { 0x17D1, 13956 }, { 0x17D2, 13931 }, { 0x17D3, 13980 }, { 0x17D4, 13925 }, { 0x17D5, 13977 }, { 0x17D6, 13943 }, { 0x17D7, 13921 }, { 0x17D8, 13940 }, { 0x17D9, 13948 }, { 0x17DA, 13962 }, { 0x17DB, 14378 }, { 0x17DC, 13989 }, { 0x17DD, 13974 }, { 0x17E0, 14013 }, { 0x17E1, 13995 }, { 0x17E2, 14001 }, { 0x17E3, 14022 }, { 0x17E4, 14007 }, { 0x17E5, 14004 }, { 0x17E6, 13998 }, { 0x17E7, 14019 }, { 0x17E8, 14016 }, { 0x17E9, 14010 }, { 0x17F0, 14228 }, { 0x17F1, 14238 }, { 0x17F2, 14223 }, { 0x17F3, 14218 }, { 0x17F4, 14233 }, { 0x17F5, 14243 }, { 0x17F6, 14263 }, { 0x17F7, 14253 }, { 0x17F8, 14248 }, { 0x17F9, 14258 }, { 0x1800, 65145 }, { 0x1801, 65749 }, { 0x1802, 65149 }, { 0x1803, 65133 }, { 0x1804, 65147 }, { 0x1805, 65115 }, { 0x1806, 65141 }, { 0x1807, 65136 }, { 0x1808, 65744 }, { 0x1809, 65740 }, { 0x180A, 65747 }, { 0x180B, 65118 }, { 0x180C, 65123 }, { 0x180D, 65128 }, { 0x180E, 65181 }, { 0x1810, 65169 }, { 0x1811, 65151 }, { 0x1812, 65157 }, { 0x1813, 65178 }, { 0x1814, 65163 }, { 0x1815, 65160 }, { 0x1816, 65154 }, { 0x1817, 65175 }, { 0x1818, 65172 }, { 0x1819, 65166 }, { 0x1820, 65184 }, { 0x1821, 65187 }, { 0x1822, 65190 }, { 0x1823, 65193 }, { 0x1824, 65196 }, { 0x1825, 65229 }, { 0x1826, 65247 }, { 0x1827, 65205 }, { 0x1828, 65226 }, { 0x1829, 65400 }, { 0x182A, 65199 }, { 0x182B, 65232 }, { 0x182C, 65235 }, { 0x182D, 65211 }, { 0x182E, 65223 }, { 0x182F, 65220 }, { 0x1830, 65241 }, { 0x1831, 65418 }, { 0x1832, 65244 }, { 0x1833, 65202 }, { 0x1834, 65403 }, { 0x1835, 65214 }, { 0x1836, 65253 }, { 0x1837, 65238 }, { 0x1838, 65250 }, { 0x1839, 65208 }, { 0x183A, 65217 }, { 0x183B, 65412 }, { 0x183C, 65421 }, { 0x183D, 65256 }, { 0x183E, 65409 }, { 0x183F, 65427 }, { 0x1840, 65415 }, { 0x1841, 65424 }, { 0x1842, 65406 }, { 0x1843, 65630 }, { 0x1844, 65518 }, { 0x1845, 65522 }, { 0x1846, 65526 }, { 0x1847, 65530 }, { 0x1848, 65558 }, { 0x1849, 65574 }, { 0x184A, 65598 }, { 0x184B, 65534 }, { 0x184C, 65562 }, { 0x184D, 65566 }, { 0x184E, 65542 }, { 0x184F, 65554 }, { 0x1850, 65570 }, { 0x1851, 65538 }, { 0x1852, 65602 }, { 0x1853, 65546 }, { 0x1854, 65626 }, { 0x1855, 65582 }, { 0x1856, 65578 }, { 0x1857, 65550 }, { 0x1858, 65610 }, { 0x1859, 65614 }, { 0x185A, 65618 }, { 0x185B, 65622 }, { 0x185C, 65606 }, { 0x185D, 65430 }, { 0x185E, 65434 }, { 0x185F, 65458 }, { 0x1860, 65478 }, { 0x1861, 65438 }, { 0x1862, 65486 }, { 0x1863, 65466 }, { 0x1864, 65450 }, { 0x1865, 65454 }, { 0x1866, 65470 }, { 0x1867, 65506 }, { 0x1868, 65474 }, { 0x1869, 65442 }, { 0x186A, 65462 }, { 0x186B, 65446 }, { 0x186C, 65494 }, { 0x186D, 65498 }, { 0x186E, 65510 }, { 0x186F, 65482 }, { 0x1870, 65502 }, { 0x1871, 65490 }, { 0x1872, 65514 }, { 0x1873, 65636 }, { 0x1874, 65644 }, { 0x1875, 65648 }, { 0x1876, 65640 }, { 0x1877, 65736 }, { 0x1880, 65388 }, { 0x1881, 65382 }, { 0x1882, 65367 }, { 0x1883, 65377 }, { 0x1884, 65394 }, { 0x1885, 65362 }, { 0x1886, 65356 }, { 0x1887, 65259 }, { 0x1888, 65264 }, { 0x1889, 65284 }, { 0x188A, 65309 }, { 0x188B, 65274 }, { 0x188C, 65329 }, { 0x188D, 65351 }, { 0x188E, 65304 }, { 0x188F, 65314 }, { 0x1890, 65294 }, { 0x1891, 65279 }, { 0x1892, 65289 }, { 0x1893, 65319 }, { 0x1894, 65324 }, { 0x1895, 65334 }, { 0x1896, 65299 }, { 0x1897, 65269 }, { 0x1898, 65586 }, { 0x1899, 65592 }, { 0x189A, 65688 }, { 0x189B, 65706 }, { 0x189C, 65652 }, { 0x189D, 65694 }, { 0x189E, 65718 }, { 0x189F, 65730 }, { 0x18A0, 65658 }, { 0x18A1, 65682 }, { 0x18A2, 65712 }, { 0x18A3, 65676 }, { 0x18A4, 65724 }, { 0x18A5, 65664 }, { 0x18A6, 65339 }, { 0x18A7, 65345 }, { 0x18A8, 65670 }, { 0x18A9, 65372 }, { 0x18AA, 65700 }, { 0x1900, 21091 }, { 0x1901, 21007 }, { 0x1902, 21052 }, { 0x1903, 20998 }, { 0x1904, 21046 }, { 0x1905, 21055 }, { 0x1906, 20992 }, { 0x1907, 21040 }, { 0x1908, 21004 }, { 0x1909, 21049 }, { 0x190A, 21070 }, { 0x190B, 21028 }, { 0x190C, 21067 }, { 0x190D, 20995 }, { 0x190E, 21043 }, { 0x190F, 21016 }, { 0x1910, 21019 }, { 0x1911, 21058 }, { 0x1912, 20989 }, { 0x1913, 21037 }, { 0x1914, 21013 }, { 0x1915, 21034 }, { 0x1916, 21022 }, { 0x1917, 21010 }, { 0x1918, 21031 }, { 0x1919, 21061 }, { 0x191A, 21064 }, { 0x191B, 21025 }, { 0x191C, 21001 }, { 0x1920, 20953 }, { 0x1921, 20961 }, { 0x1922, 20969 }, { 0x1923, 20981 }, { 0x1924, 20973 }, { 0x1925, 20985 }, { 0x1926, 20977 }, { 0x1927, 20957 }, { 0x1928, 20965 }, { 0x1929, 21084 }, { 0x192A, 21076 }, { 0x192B, 21080 }, { 0x1930, 20917 }, { 0x1931, 20945 }, { 0x1932, 20949 }, { 0x1933, 20941 }, { 0x1934, 20929 }, { 0x1935, 20933 }, { 0x1936, 20925 }, { 0x1937, 20937 }, { 0x1938, 20921 }, { 0x1939, 20884 }, { 0x193A, 20881 }, { 0x193B, 20878 }, { 0x1940, 20875 }, { 0x1944, 21088 }, { 0x1945, 21073 }, { 0x1946, 20905 }, { 0x1947, 20887 }, { 0x1948, 20893 }, { 0x1949, 20914 }, { 0x194A, 20899 }, { 0x194B, 20896 }, { 0x194C, 20890 }, { 0x194D, 20911 }, { 0x194E, 20908 }, { 0x194F, 20902 }, { 0x1950, 7612 }, { 0x1951, 7656 }, { 0x1952, 7672 }, { 0x1953, 7684 }, { 0x1954, 7640 }, { 0x1955, 7660 }, { 0x1956, 7644 }, { 0x1957, 7680 }, { 0x1958, 7616 }, { 0x1959, 7632 }, { 0x195A, 7676 }, { 0x195B, 7620 }, { 0x195C, 7604 }, { 0x195D, 7652 }, { 0x195E, 7608 }, { 0x195F, 7636 }, { 0x1960, 7668 }, { 0x1961, 7688 }, { 0x1962, 7624 }, { 0x1963, 7572 }, { 0x1964, 7580 }, { 0x1965, 7596 }, { 0x1966, 7600 }, { 0x1967, 7588 }, { 0x1968, 7628 }, { 0x1969, 7584 }, { 0x196A, 7648 }, { 0x196B, 7576 }, { 0x196C, 7664 }, { 0x196D, 7592 }, { 0x1970, 7692 }, { 0x1971, 7696 }, { 0x1972, 7700 }, { 0x1973, 7704 }, { 0x1974, 7708 }, { 0x1980, 6393 }, { 0x1981, 6267 }, { 0x1982, 6363 }, { 0x1983, 6417 }, { 0x1984, 6435 }, { 0x1985, 6237 }, { 0x1986, 6291 }, { 0x1987, 6309 }, { 0x1988, 6453 }, { 0x1989, 6399 }, { 0x198A, 6423 }, { 0x198B, 6327 }, { 0x198C, 6273 }, { 0x198D, 6297 }, { 0x198E, 6405 }, { 0x198F, 6447 }, { 0x1990, 6381 }, { 0x1991, 6279 }, { 0x1992, 6321 }, { 0x1993, 6255 }, { 0x1994, 6387 }, { 0x1995, 6441 }, { 0x1996, 6375 }, { 0x1997, 6261 }, { 0x1998, 6315 }, { 0x1999, 6249 }, { 0x199A, 6351 }, { 0x199B, 6411 }, { 0x199C, 6369 }, { 0x199D, 6225 }, { 0x199E, 6285 }, { 0x199F, 6243 }, { 0x19A0, 6357 }, { 0x19A1, 6345 }, { 0x19A2, 6339 }, { 0x19A3, 6231 }, { 0x19A4, 6219 }, { 0x19A5, 6213 }, { 0x19A6, 6429 }, { 0x19A7, 6459 }, { 0x19A8, 6303 }, { 0x19A9, 6333 }, { 0x19B0, 6206 }, { 0x19B1, 6128 }, { 0x19B2, 6146 }, { 0x19B3, 6122 }, { 0x19B4, 6176 }, { 0x19B5, 6110 }, { 0x19B6, 6134 }, { 0x19B7, 6116 }, { 0x19B8, 6158 }, { 0x19B9, 6170 }, { 0x19BA, 6140 }, { 0x19BB, 6188 }, { 0x19BC, 6182 }, { 0x19BD, 6164 }, { 0x19BE, 6194 }, { 0x19BF, 6200 }, { 0x19C0, 6152 }, { 0x19C1, 6495 }, { 0x19C2, 6501 }, { 0x19C3, 6489 }, { 0x19C4, 6483 }, { 0x19C5, 6477 }, { 0x19C6, 6471 }, { 0x19C7, 6465 }, { 0x19C8, 6050 }, { 0x19C9, 6055 }, { 0x19D0, 6090 }, { 0x19D1, 6060 }, { 0x19D2, 6070 }, { 0x19D3, 6105 }, { 0x19D4, 6080 }, { 0x19D5, 6075 }, { 0x19D6, 6065 }, { 0x19D7, 6100 }, { 0x19D8, 6095 }, { 0x19D9, 6085 }, { 0x19DE, 6040 }, { 0x19DF, 6045 }, { 0x19E0, 14375 }, { 0x19E1, 14288 }, { 0x19E2, 14272 }, { 0x19E3, 14206 }, { 0x19E4, 14280 }, { 0x19E5, 14296 }, { 0x19E6, 14368 }, { 0x19E7, 14352 }, { 0x19E8, 14344 }, { 0x19E9, 14360 }, { 0x19EA, 14214 }, { 0x19EB, 14328 }, { 0x19EC, 14312 }, { 0x19ED, 14304 }, { 0x19EE, 14320 }, { 0x19EF, 14336 }, { 0x19F0, 14372 }, { 0x19F1, 14284 }, { 0x19F2, 14268 }, { 0x19F3, 14202 }, { 0x19F4, 14276 }, { 0x19F5, 14292 }, { 0x19F6, 14364 }, { 0x19F7, 14348 }, { 0x19F8, 14340 }, { 0x19F9, 14356 }, { 0x19FA, 14210 }, { 0x19FB, 14324 }, { 0x19FC, 14308 }, { 0x19FD, 14300 }, { 0x19FE, 14316 }, { 0x19FF, 14332 }, { 0x1A00, 45814 }, { 0x1A01, 45805 }, { 0x1A02, 45847 }, { 0x1A03, 45856 }, { 0x1A04, 45826 }, { 0x1A05, 45796 }, { 0x1A06, 45820 }, { 0x1A07, 45844 }, { 0x1A08, 45835 }, { 0x1A09, 45802 }, { 0x1A0A, 45823 }, { 0x1A0B, 45850 }, { 0x1A0C, 45799 }, { 0x1A0D, 45811 }, { 0x1A0E, 45853 }, { 0x1A0F, 45859 }, { 0x1A10, 45841 }, { 0x1A11, 45829 }, { 0x1A12, 45817 }, { 0x1A13, 45838 }, { 0x1A14, 45832 }, { 0x1A15, 45793 }, { 0x1A16, 45808 }, { 0x1A17, 45777 }, { 0x1A18, 45785 }, { 0x1A19, 45773 }, { 0x1A1A, 45781 }, { 0x1A1B, 45789 }, { 0x1A1E, 45862 }, { 0x1A1F, 45769 }, { 0x1B00, 45088 }, { 0x1B01, 45092 }, { 0x1B02, 45099 }, { 0x1B03, 45102 }, { 0x1B04, 45096 }, { 0x1B05, 45383 }, { 0x1B06, 45386 }, { 0x1B07, 45393 }, { 0x1B08, 45396 }, { 0x1B09, 45407 }, { 0x1B0A, 45410 }, { 0x1B0B, 45315 }, { 0x1B0C, 45319 }, { 0x1B0D, 45286 }, { 0x1B0E, 45290 }, { 0x1B0F, 45390 }, { 0x1B10, 45414 }, { 0x1B11, 45400 }, { 0x1B12, 45403 }, { 0x1B13, 45276 }, { 0x1B14, 45279 }, { 0x1B15, 45259 }, { 0x1B16, 45262 }, { 0x1B17, 45365 }, { 0x1B18, 45231 }, { 0x1B19, 45234 }, { 0x1B1A, 45269 }, { 0x1B1B, 45272 }, { 0x1B1C, 45368 }, { 0x1B1D, 45342 }, { 0x1B1E, 45346 }, { 0x1B1F, 45245 }, { 0x1B20, 45250 }, { 0x1B21, 45301 }, { 0x1B22, 45335 }, { 0x1B23, 45338 }, { 0x1B24, 45238 }, { 0x1B25, 45241 }, { 0x1B26, 45298 }, { 0x1B27, 45305 }, { 0x1B28, 45308 }, { 0x1B29, 45224 }, { 0x1B2A, 45227 }, { 0x1B2B, 45295 }, { 0x1B2C, 45358 }, { 0x1B2D, 45312 }, { 0x1B2E, 45283 }, { 0x1B2F, 45355 }, { 0x1B30, 45327 }, { 0x1B31, 45331 }, { 0x1B32, 45324 }, { 0x1B33, 45266 }, { 0x1B34, 45105 }, { 0x1B35, 45218 }, { 0x1B36, 45171 }, { 0x1B37, 45175 }, { 0x1B38, 45180 }, { 0x1B39, 45184 }, { 0x1B3A, 45160 }, { 0x1B3B, 45165 }, { 0x1B3C, 45149 }, { 0x1B3D, 45154 }, { 0x1B3E, 45198 }, { 0x1B3F, 45202 }, { 0x1B40, 45213 }, { 0x1B41, 45207 }, { 0x1B42, 45189 }, { 0x1B43, 45193 }, { 0x1B44, 45085 }, { 0x1B45, 45361 }, { 0x1B46, 45375 }, { 0x1B47, 45379 }, { 0x1B48, 45255 }, { 0x1B49, 45351 }, { 0x1B4A, 45371 }, { 0x1B4B, 45417 }, { 0x1B50, 45135 }, { 0x1B51, 45117 }, { 0x1B52, 45123 }, { 0x1B53, 45144 }, { 0x1B54, 45129 }, { 0x1B55, 45126 }, { 0x1B56, 45120 }, { 0x1B57, 45141 }, { 0x1B58, 45138 }, { 0x1B59, 45132 }, { 0x1B5A, 45147 }, { 0x1B5B, 45421 }, { 0x1B5C, 45222 }, { 0x1B5D, 45114 }, { 0x1B5E, 45108 }, { 0x1B5F, 45111 }, { 0x1B60, 45568 }, { 0x1B61, 45445 }, { 0x1B62, 45437 }, { 0x1B63, 45449 }, { 0x1B64, 45423 }, { 0x1B65, 45432 }, { 0x1B66, 45441 }, { 0x1B67, 45453 }, { 0x1B68, 45461 }, { 0x1B69, 45457 }, { 0x1B6A, 45427 }, { 0x1B6B, 45480 }, { 0x1B6C, 45475 }, { 0x1B6D, 45497 }, { 0x1B6E, 45485 }, { 0x1B6F, 45509 }, { 0x1B70, 45502 }, { 0x1B71, 45490 }, { 0x1B72, 45470 }, { 0x1B73, 45465 }, { 0x1B74, 45550 }, { 0x1B75, 45544 }, { 0x1B76, 45562 }, { 0x1B77, 45556 }, { 0x1B78, 45514 }, { 0x1B79, 45526 }, { 0x1B7A, 45532 }, { 0x1B7B, 45538 }, { 0x1B7C, 45520 }, { 0x1B80, 65869 }, { 0x1B81, 65872 }, { 0x1B82, 65875 }, { 0x1B83, 65932 }, { 0x1B84, 65938 }, { 0x1B85, 65944 }, { 0x1B86, 65947 }, { 0x1B87, 65941 }, { 0x1B88, 65935 }, { 0x1B89, 65959 }, { 0x1B8A, 65974 }, { 0x1B8B, 65989 }, { 0x1B8C, 65965 }, { 0x1B8D, 66019 }, { 0x1B8E, 65953 }, { 0x1B8F, 65971 }, { 0x1B90, 66013 }, { 0x1B91, 66022 }, { 0x1B92, 65998 }, { 0x1B93, 65956 }, { 0x1B94, 65983 }, { 0x1B95, 65986 }, { 0x1B96, 65962 }, { 0x1B97, 66001 }, { 0x1B98, 65950 }, { 0x1B99, 65980 }, { 0x1B9A, 66010 }, { 0x1B9B, 65992 }, { 0x1B9C, 65977 }, { 0x1B9D, 66004 }, { 0x1B9E, 65995 }, { 0x1B9F, 66007 }, { 0x1BA0, 65968 }, { 0x1BA1, 66036 }, { 0x1BA2, 66032 }, { 0x1BA3, 66028 }, { 0x1BA4, 65916 }, { 0x1BA5, 65912 }, { 0x1BA6, 65924 }, { 0x1BA7, 65920 }, { 0x1BA8, 65908 }, { 0x1BA9, 65928 }, { 0x1BAA, 65866 }, { 0x1BAE, 66016 }, { 0x1BAF, 66025 }, { 0x1BB0, 65896 }, { 0x1BB1, 65878 }, { 0x1BB2, 65884 }, { 0x1BB3, 65905 }, { 0x1BB4, 65890 }, { 0x1BB5, 65887 }, { 0x1BB6, 65881 }, { 0x1BB7, 65902 }, { 0x1BB8, 65899 }, { 0x1BB9, 65893 }, { 0x1C00, 34194 }, { 0x1C01, 34251 }, { 0x1C02, 34248 }, { 0x1C03, 34185 }, { 0x1C04, 34242 }, { 0x1C05, 34257 }, { 0x1C06, 34176 }, { 0x1C07, 34230 }, { 0x1C08, 34191 }, { 0x1C09, 34260 }, { 0x1C0A, 34215 }, { 0x1C0B, 34272 }, { 0x1C0C, 34179 }, { 0x1C0D, 34203 }, { 0x1C0E, 34206 }, { 0x1C0F, 34266 }, { 0x1C10, 34263 }, { 0x1C11, 34182 }, { 0x1C12, 34239 }, { 0x1C13, 34173 }, { 0x1C14, 34227 }, { 0x1C15, 34200 }, { 0x1C16, 34254 }, { 0x1C17, 34275 }, { 0x1C18, 34281 }, { 0x1C19, 34236 }, { 0x1C1A, 34224 }, { 0x1C1B, 34209 }, { 0x1C1C, 34197 }, { 0x1C1D, 34188 }, { 0x1C1E, 34245 }, { 0x1C1F, 34218 }, { 0x1C20, 34212 }, { 0x1C21, 34269 }, { 0x1C22, 34221 }, { 0x1C23, 34170 }, { 0x1C24, 34327 }, { 0x1C25, 34323 }, { 0x1C26, 34158 }, { 0x1C27, 34146 }, { 0x1C28, 34150 }, { 0x1C29, 34162 }, { 0x1C2A, 34154 }, { 0x1C2B, 34166 }, { 0x1C2C, 34142 }, { 0x1C2D, 34287 }, { 0x1C2E, 34295 }, { 0x1C2F, 34291 }, { 0x1C30, 34299 }, { 0x1C31, 34303 }, { 0x1C32, 34307 }, { 0x1C33, 34311 }, { 0x1C34, 34319 }, { 0x1C35, 34315 }, { 0x1C36, 34106 }, { 0x1C37, 34109 }, { 0x1C3B, 34339 }, { 0x1C3C, 34331 }, { 0x1C3D, 34336 }, { 0x1C3E, 34345 }, { 0x1C3F, 34342 }, { 0x1C40, 34130 }, { 0x1C41, 34112 }, { 0x1C42, 34118 }, { 0x1C43, 34139 }, { 0x1C44, 34124 }, { 0x1C45, 34121 }, { 0x1C46, 34115 }, { 0x1C47, 34136 }, { 0x1C48, 34133 }, { 0x1C49, 34127 }, { 0x1C4D, 34278 }, { 0x1C4E, 34284 }, { 0x1C4F, 34233 }, { 0x1C50, 112 }, { 0x1C51, 88 }, { 0x1C52, 96 }, { 0x1C53, 124 }, { 0x1C54, 104 }, { 0x1C55, 100 }, { 0x1C56, 92 }, { 0x1C57, 120 }, { 0x1C58, 116 }, { 0x1C59, 108 }, { 0x1C5A, 163 }, { 0x1C5B, 139 }, { 0x1C5C, 131 }, { 0x1C5D, 223 }, { 0x1C5E, 135 }, { 0x1C5F, 239 }, { 0x1C60, 211 }, { 0x1C61, 207 }, { 0x1C62, 215 }, { 0x1C63, 219 }, { 0x1C64, 171 }, { 0x1C65, 159 }, { 0x1C66, 151 }, { 0x1C67, 235 }, { 0x1C68, 155 }, { 0x1C69, 179 }, { 0x1C6A, 195 }, { 0x1C6B, 199 }, { 0x1C6C, 247 }, { 0x1C6D, 203 }, { 0x1C6E, 167 }, { 0x1C6F, 147 }, { 0x1C70, 227 }, { 0x1C71, 143 }, { 0x1C72, 231 }, { 0x1C73, 175 }, { 0x1C74, 243 }, { 0x1C75, 183 }, { 0x1C76, 191 }, { 0x1C77, 187 }, { 0x1C78, 81 }, { 0x1C79, 251 }, { 0x1C7A, 258 }, { 0x1C7B, 128 }, { 0x1C7C, 255 }, { 0x1C7D, 85 }, { 0x1C7E, 267 }, { 0x1C7F, 262 }, { 0x1D00, 17949 }, { 0x1D01, 18083 }, { 0x1D02, 17650 }, { 0x1D03, 18119 }, { 0x1D04, 17959 }, { 0x1D05, 17964 }, { 0x1D06, 18098 }, { 0x1D07, 17969 }, { 0x1D08, 17660 }, { 0x1D09, 17575 }, { 0x1D0A, 18001 }, { 0x1D0B, 18006 }, { 0x1D0C, 18016 }, { 0x1D0D, 18023 }, { 0x1D0E, 18143 }, { 0x1D0F, 18033 }, { 0x1D10, 18113 }, { 0x1D11, 17804 }, { 0x1D12, 17821 }, { 0x1D13, 17809 }, { 0x1D14, 17655 }, { 0x1D15, 18093 }, { 0x1D16, 17292 }, { 0x1D17, 17499 }, { 0x1D18, 18038 }, { 0x1D19, 18149 }, { 0x1D1A, 18131 }, { 0x1D1B, 18053 }, { 0x1D1C, 18058 }, { 0x1D1D, 17816 }, { 0x1D1E, 17833 }, { 0x1D1F, 17827 }, { 0x1D20, 18063 }, { 0x1D21, 18068 }, { 0x1D22, 18078 }, { 0x1D23, 18103 }, { 0x1D24, 18159 }, { 0x1D25, 17938 }, { 0x1D26, 12051 }, { 0x1D27, 12056 }, { 0x1D28, 12036 }, { 0x1D29, 12046 }, { 0x1D2A, 12041 }, { 0x1D2B, 49409 }, { 0x1D2C, 54616 }, { 0x1D2D, 54692 }, { 0x1D2E, 54620 }, { 0x1D2F, 54700 }, { 0x1D30, 54624 }, { 0x1D31, 54628 }, { 0x1D32, 54705 }, { 0x1D33, 54632 }, { 0x1D34, 54636 }, { 0x1D35, 54640 }, { 0x1D36, 54644 }, { 0x1D37, 54648 }, { 0x1D38, 54652 }, { 0x1D39, 54656 }, { 0x1D3A, 54660 }, { 0x1D3B, 54710 }, { 0x1D3C, 54664 }, { 0x1D3D, 54696 }, { 0x1D3E, 54668 }, { 0x1D3F, 54672 }, { 0x1D40, 54676 }, { 0x1D41, 54680 }, { 0x1D42, 54688 }, { 0x1D43, 54136 }, { 0x1D44, 54421 }, { 0x1D45, 54375 }, { 0x1D46, 54466 }, { 0x1D47, 54140 }, { 0x1D48, 54154 }, { 0x1D49, 54158 }, { 0x1D4A, 54397 }, { 0x1D4B, 54365 }, { 0x1D4C, 54471 }, { 0x1D4D, 54166 }, { 0x1D4E, 54431 }, { 0x1D4F, 54196 }, { 0x1D50, 54218 }, { 0x1D51, 54331 }, { 0x1D52, 54242 }, { 0x1D53, 54370 }, { 0x1D54, 54351 }, { 0x1D55, 54410 }, { 0x1D56, 54246 }, { 0x1D57, 54264 }, { 0x1D58, 54275 }, { 0x1D59, 54538 }, { 0x1D5A, 54436 }, { 0x1D5B, 54284 }, { 0x1D5C, 54323 }, { 0x1D5D, 54357 }, { 0x1D5E, 54392 }, { 0x1D5F, 54379 }, { 0x1D60, 54387 }, { 0x1D61, 54327 }, { 0x1D62, 20792 }, { 0x1D63, 20807 }, { 0x1D64, 20812 }, { 0x1D65, 20817 }, { 0x1D66, 13101 }, { 0x1D67, 13106 }, { 0x1D68, 13096 }, { 0x1D69, 13091 }, { 0x1D6A, 13086 }, { 0x1D6B, 17177 }, { 0x1D6C, 14742 }, { 0x1D6D, 14886 }, { 0x1D6E, 15140 }, { 0x1D6F, 15661 }, { 0x1D70, 15745 }, { 0x1D71, 16100 }, { 0x1D72, 16239 }, { 0x1D73, 16271 }, { 0x1D74, 16370 }, { 0x1D75, 16446 }, { 0x1D76, 16999 }, { 0x1D77, 17549 }, { 0x1D78, 54782 }, { 0x1D79, 17723 }, { 0x1D7A, 17162 }, { 0x1D7B, 17883 }, { 0x1D7C, 17331 }, { 0x1D7D, 16107 }, { 0x1D7E, 17890 }, { 0x1D7F, 17747 }, { 0x1D80, 14761 }, { 0x1D81, 14911 }, { 0x1D82, 15147 }, { 0x1D83, 15207 }, { 0x1D84, 15493 }, { 0x1D85, 15610 }, { 0x1D86, 15668 }, { 0x1D87, 15758 }, { 0x1D88, 16121 }, { 0x1D89, 16258 }, { 0x1D8A, 16383 }, { 0x1D8B, 17211 }, { 0x1D8C, 16764 }, { 0x1D8D, 16844 }, { 0x1D8E, 17012 }, { 0x1D8F, 14656 }, { 0x1D90, 17433 }, { 0x1D91, 14859 }, { 0x1D92, 15061 }, { 0x1D93, 17375 }, { 0x1D94, 17791 }, { 0x1D95, 17458 }, { 0x1D96, 15395 }, { 0x1D97, 17388 }, { 0x1D98, 17218 }, { 0x1D99, 16708 }, { 0x1D9A, 17251 }, { 0x1D9B, 54477 }, { 0x1D9C, 54144 }, { 0x1D9D, 54148 }, { 0x1D9E, 54339 }, { 0x1D9F, 54526 }, { 0x1DA0, 54162 }, { 0x1DA1, 54515 }, { 0x1DA2, 54416 }, { 0x1DA3, 54426 }, { 0x1DA4, 54180 }, { 0x1DA5, 54361 }, { 0x1DA6, 54482 }, { 0x1DA7, 54487 }, { 0x1DA8, 54190 }, { 0x1DA9, 54211 }, { 0x1DAA, 54204 }, { 0x1DAB, 54494 }, { 0x1DAC, 54222 }, { 0x1DAD, 54441 }, { 0x1DAE, 54228 }, { 0x1DAF, 54235 }, { 0x1DB0, 54499 }, { 0x1DB1, 54405 }, { 0x1DB2, 54347 }, { 0x1DB3, 54258 }, { 0x1DB4, 54335 }, { 0x1DB5, 54268 }, { 0x1DB6, 54279 }, { 0x1DB7, 54522 }, { 0x1DB8, 54504 }, { 0x1DB9, 54288 }, { 0x1DBA, 54461 }, { 0x1DBB, 54306 }, { 0x1DBC, 54316 }, { 0x1DBD, 54310 }, { 0x1DBE, 54343 }, { 0x1DBF, 54401 }, { 0x1DC0, 57864 }, { 0x1DC1, 57860 }, { 0x1DC2, 57834 }, { 0x1DC3, 58302 }, { 0x1DC4, 58317 }, { 0x1DC5, 58315 }, { 0x1DC6, 58321 }, { 0x1DC7, 58311 }, { 0x1DC8, 58333 }, { 0x1DC9, 58331 }, { 0x1DCA, 57657 }, { 0x1DCB, 58313 }, { 0x1DCC, 58319 }, { 0x1DCD, 57933 }, { 0x1DCE, 57961 }, { 0x1DCF, 57977 }, { 0x1DD0, 57389 }, { 0x1DD1, 57396 }, { 0x1DD2, 57399 }, { 0x1DD3, 57731 }, { 0x1DD4, 57699 }, { 0x1DD5, 57704 }, { 0x1DD6, 57709 }, { 0x1DD7, 57596 }, { 0x1DD8, 57725 }, { 0x1DD9, 57714 }, { 0x1DDA, 57612 }, { 0x1DDB, 57739 }, { 0x1DDC, 57627 }, { 0x1DDD, 57632 }, { 0x1DDE, 57745 }, { 0x1DDF, 57751 }, { 0x1DE0, 57642 }, { 0x1DE1, 57757 }, { 0x1DE2, 57763 }, { 0x1DE3, 57663 }, { 0x1DE4, 57669 }, { 0x1DE5, 57719 }, { 0x1DE6, 57694 }, { 0x1DFE, 57476 }, { 0x1DFF, 57806 }, { 0x1E00, 18281 }, { 0x1E01, 14523 }, { 0x1E02, 18458 }, { 0x1E03, 14715 }, { 0x1E04, 18465 }, { 0x1E05, 14722 }, { 0x1E06, 18478 }, { 0x1E07, 14735 }, { 0x1E08, 18538 }, { 0x1E09, 14815 }, { 0x1E0A, 18556 }, { 0x1E0B, 14833 }, { 0x1E0C, 18563 }, { 0x1E0D, 14840 }, { 0x1E0E, 18576 }, { 0x1E0F, 14867 }, { 0x1E10, 18619 }, { 0x1E11, 14905 }, { 0x1E12, 18625 }, { 0x1E13, 14918 }, { 0x1E14, 18715 }, { 0x1E15, 15014 }, { 0x1E16, 18707 }, { 0x1E17, 15006 }, { 0x1E18, 18810 }, { 0x1E19, 15116 }, { 0x1E1A, 18687 }, { 0x1E1B, 14986 }, { 0x1E1C, 18741 }, { 0x1E1D, 15040 }, { 0x1E1E, 18821 }, { 0x1E1F, 15127 }, { 0x1E20, 18869 }, { 0x1E21, 15189 }, { 0x1E22, 18897 }, { 0x1E23, 15224 }, { 0x1E24, 18904 }, { 0x1E25, 15231 }, { 0x1E26, 18942 }, { 0x1E27, 15282 }, { 0x1E28, 18930 }, { 0x1E29, 15270 }, { 0x1E2A, 18911 }, { 0x1E2B, 15251 }, { 0x1E2C, 19009 }, { 0x1E2D, 15342 }, { 0x1E2E, 19054 }, { 0x1E2F, 15387 }, { 0x1E30, 19108 }, { 0x1E31, 15460 }, { 0x1E32, 19088 }, { 0x1E33, 15440 }, { 0x1E34, 19101 }, { 0x1E35, 15453 }, { 0x1E36, 19164 }, { 0x1E37, 15523 }, { 0x1E38, 19171 }, { 0x1E39, 15530 }, { 0x1E3A, 19187 }, { 0x1E3B, 15558 }, { 0x1E3C, 19247 }, { 0x1E3D, 15624 }, { 0x1E3E, 19278 }, { 0x1E3F, 15655 }, { 0x1E40, 19258 }, { 0x1E41, 15635 }, { 0x1E42, 19265 }, { 0x1E43, 15642 }, { 0x1E44, 19288 }, { 0x1E45, 15679 }, { 0x1E46, 19295 }, { 0x1E47, 15686 }, { 0x1E48, 19309 }, { 0x1E49, 15706 }, { 0x1E4A, 19362 }, { 0x1E4B, 15772 }, { 0x1E4C, 19495 }, { 0x1E4D, 15920 }, { 0x1E4E, 19511 }, { 0x1E4F, 15936 }, { 0x1E50, 19547 }, { 0x1E51, 15972 }, { 0x1E52, 19539 }, { 0x1E53, 15964 }, { 0x1E54, 19676 }, { 0x1E55, 16094 }, { 0x1E56, 19663 }, { 0x1E57, 16081 }, { 0x1E58, 19732 }, { 0x1E59, 16177 }, { 0x1E5A, 19739 }, { 0x1E5B, 16184 }, { 0x1E5C, 19746 }, { 0x1E5D, 16191 }, { 0x1E5E, 19755 }, { 0x1E5F, 16200 }, { 0x1E60, 19815 }, { 0x1E61, 16296 }, { 0x1E62, 19822 }, { 0x1E63, 16303 }, { 0x1E64, 19845 }, { 0x1E65, 16332 }, { 0x1E66, 19860 }, { 0x1E67, 16347 }, { 0x1E68, 19829 }, { 0x1E69, 16310 }, { 0x1E6A, 19892 }, { 0x1E6B, 16400 }, { 0x1E6C, 19899 }, { 0x1E6D, 16407 }, { 0x1E6E, 19912 }, { 0x1E6F, 16426 }, { 0x1E70, 19958 }, { 0x1E71, 16492 }, { 0x1E72, 20167 }, { 0x1E73, 16701 }, { 0x1E74, 20081 }, { 0x1E75, 16615 }, { 0x1E76, 20180 }, { 0x1E77, 16721 }, { 0x1E78, 20073 }, { 0x1E79, 16607 }, { 0x1E7A, 20108 }, { 0x1E7B, 16642 }, { 0x1E7C, 20204 }, { 0x1E7D, 16758 }, { 0x1E7E, 20191 }, { 0x1E7F, 16732 }, { 0x1E80, 20247 }, { 0x1E81, 16815 }, { 0x1E82, 20241 }, { 0x1E83, 16809 }, { 0x1E84, 20253 }, { 0x1E85, 16821 }, { 0x1E86, 20221 }, { 0x1E87, 16782 }, { 0x1E88, 20228 }, { 0x1E89, 16789 }, { 0x1E8A, 20269 }, { 0x1E8B, 16837 }, { 0x1E8C, 20276 }, { 0x1E8D, 16851 }, { 0x1E8E, 20286 }, { 0x1E8F, 16861 }, { 0x1E90, 20416 }, { 0x1E91, 17032 }, { 0x1E92, 20372 }, { 0x1E93, 16954 }, { 0x1E94, 20385 }, { 0x1E95, 16973 }, { 0x1E96, 15244 }, { 0x1E97, 16479 }, { 0x1E98, 16802 }, { 0x1E99, 16894 }, { 0x1E9A, 14596 }, { 0x1E9B, 17346 }, { 0x1E9C, 17362 }, { 0x1E9D, 17354 }, { 0x1E9E, 20613 }, { 0x1E9F, 17440 }, { 0x1EA0, 18251 }, { 0x1EA1, 14493 }, { 0x1EA2, 18258 }, { 0x1EA3, 14500 }, { 0x1EA4, 18430 }, { 0x1EA5, 14687 }, { 0x1EA6, 18438 }, { 0x1EA7, 14695 }, { 0x1EA8, 18421 }, { 0x1EA9, 14678 }, { 0x1EAA, 18446 }, { 0x1EAB, 14703 }, { 0x1EAC, 18412 }, { 0x1EAD, 14669 }, { 0x1EAE, 18318 }, { 0x1EAF, 14560 }, { 0x1EB0, 18326 }, { 0x1EB1, 14568 }, { 0x1EB2, 18309 }, { 0x1EB3, 14551 }, { 0x1EB4, 18334 }, { 0x1EB5, 14576 }, { 0x1EB6, 18300 }, { 0x1EB7, 14542 }, { 0x1EB8, 18643 }, { 0x1EB9, 14936 }, { 0x1EBA, 18650 }, { 0x1EBB, 14943 }, { 0x1EBC, 18681 }, { 0x1EBD, 14980 }, { 0x1EBE, 18786 }, { 0x1EBF, 15092 }, { 0x1EC0, 18794 }, { 0x1EC1, 15100 }, { 0x1EC2, 18777 }, { 0x1EC3, 15083 }, { 0x1EC4, 18802 }, { 0x1EC5, 15108 }, { 0x1EC6, 18768 }, { 0x1EC7, 15074 }, { 0x1EC8, 18972 }, { 0x1EC9, 15305 }, { 0x1ECA, 18965 }, { 0x1ECB, 15298 }, { 0x1ECC, 19389 }, { 0x1ECD, 15806 }, { 0x1ECE, 19396 }, { 0x1ECF, 15821 }, { 0x1ED0, 19635 }, { 0x1ED1, 16053 }, { 0x1ED2, 19643 }, { 0x1ED3, 16061 }, { 0x1ED4, 19626 }, { 0x1ED5, 16044 }, { 0x1ED6, 19651 }, { 0x1ED7, 16069 }, { 0x1ED8, 19617 }, { 0x1ED9, 16035 }, { 0x1EDA, 19427 }, { 0x1EDB, 15852 }, { 0x1EDC, 19435 }, { 0x1EDD, 15860 }, { 0x1EDE, 19418 }, { 0x1EDF, 15843 }, { 0x1EE0, 19443 }, { 0x1EE1, 15868 }, { 0x1EE2, 19409 }, { 0x1EE3, 15834 }, { 0x1EE4, 19974 }, { 0x1EE5, 16508 }, { 0x1EE6, 19981 }, { 0x1EE7, 16515 }, { 0x1EE8, 20012 }, { 0x1EE9, 16546 }, { 0x1EEA, 20020 }, { 0x1EEB, 16554 }, { 0x1EEC, 20003 }, { 0x1EED, 16537 }, { 0x1EEE, 20028 }, { 0x1EEF, 16562 }, { 0x1EF0, 19994 }, { 0x1EF1, 16528 }, { 0x1EF2, 20325 }, { 0x1EF3, 16907 }, { 0x1EF4, 20293 }, { 0x1EF5, 16868 }, { 0x1EF6, 20306 }, { 0x1EF7, 16881 }, { 0x1EF8, 20331 }, { 0x1EF9, 16913 }, { 0x1EFA, 20759 }, { 0x1EFB, 17868 }, { 0x1EFC, 20754 }, { 0x1EFD, 17863 }, { 0x1EFE, 20313 }, { 0x1EFF, 16888 }, { 0x1F00, 11230 }, { 0x1F01, 11162 }, { 0x1F02, 11254 }, { 0x1F03, 11186 }, { 0x1F04, 11236 }, { 0x1F05, 11168 }, { 0x1F06, 11272 }, { 0x1F07, 11204 }, { 0x1F08, 12506 }, { 0x1F09, 12438 }, { 0x1F0A, 12530 }, { 0x1F0B, 12462 }, { 0x1F0C, 12512 }, { 0x1F0D, 12444 }, { 0x1F0E, 12548 }, { 0x1F0F, 12480 }, { 0x1F10, 11631 }, { 0x1F11, 11609 }, { 0x1F12, 11645 }, { 0x1F13, 11623 }, { 0x1F14, 11637 }, { 0x1F15, 11615 }, { 0x1F18, 12829 }, { 0x1F19, 12807 }, { 0x1F1A, 12843 }, { 0x1F1B, 12821 }, { 0x1F1C, 12835 }, { 0x1F1D, 12813 }, { 0x1F20, 10850 }, { 0x1F21, 10782 }, { 0x1F22, 10874 }, { 0x1F23, 10806 }, { 0x1F24, 10856 }, { 0x1F25, 10788 }, { 0x1F26, 10892 }, { 0x1F27, 10824 }, { 0x1F28, 12200 }, { 0x1F29, 12132 }, { 0x1F2A, 12224 }, { 0x1F2B, 12156 }, { 0x1F2C, 12206 }, { 0x1F2D, 12138 }, { 0x1F2E, 12242 }, { 0x1F2F, 12174 }, { 0x1F30, 11042 }, { 0x1F31, 11012 }, { 0x1F32, 11056 }, { 0x1F33, 11026 }, { 0x1F34, 11048 }, { 0x1F35, 11018 }, { 0x1F36, 11064 }, { 0x1F37, 11034 }, { 0x1F38, 12364 }, { 0x1F39, 12334 }, { 0x1F3A, 12378 }, { 0x1F3B, 12348 }, { 0x1F3C, 12370 }, { 0x1F3D, 12340 }, { 0x1F3E, 12386 }, { 0x1F3F, 12356 }, { 0x1F40, 11697 }, { 0x1F41, 11675 }, { 0x1F42, 11711 }, { 0x1F43, 11689 }, { 0x1F44, 11703 }, { 0x1F45, 11681 }, { 0x1F48, 12895 }, { 0x1F49, 12873 }, { 0x1F4A, 12909 }, { 0x1F4B, 12887 }, { 0x1F4C, 12901 }, { 0x1F4D, 12879 }, { 0x1F50, 11771 }, { 0x1F51, 11741 }, { 0x1F52, 11785 }, { 0x1F53, 11755 }, { 0x1F54, 11777 }, { 0x1F55, 11747 }, { 0x1F56, 11793 }, { 0x1F57, 11763 }, { 0x1F59, 12939 }, { 0x1F5B, 12953 }, { 0x1F5D, 12945 }, { 0x1F5F, 12961 }, { 0x1F60, 11461 }, { 0x1F61, 11393 }, { 0x1F62, 11485 }, { 0x1F63, 11417 }, { 0x1F64, 11467 }, { 0x1F65, 11399 }, { 0x1F66, 11503 }, { 0x1F67, 11435 }, { 0x1F68, 12698 }, { 0x1F69, 12630 }, { 0x1F6A, 12722 }, { 0x1F6B, 12654 }, { 0x1F6C, 12704 }, { 0x1F6D, 12636 }, { 0x1F6E, 12740 }, { 0x1F6F, 12672 }, { 0x1F70, 11304 }, { 0x1F71, 11148 }, { 0x1F72, 11659 }, { 0x1F73, 11603 }, { 0x1F74, 10924 }, { 0x1F75, 10768 }, { 0x1F76, 11078 }, { 0x1F77, 11006 }, { 0x1F78, 11725 }, { 0x1F79, 11669 }, { 0x1F7A, 11807 }, { 0x1F7B, 11735 }, { 0x1F7C, 11535 }, { 0x1F7D, 11379 }, { 0x1F80, 11290 }, { 0x1F81, 11222 }, { 0x1F82, 11262 }, { 0x1F83, 11194 }, { 0x1F84, 11244 }, { 0x1F85, 11176 }, { 0x1F86, 11280 }, { 0x1F87, 11212 }, { 0x1F88, 12566 }, { 0x1F89, 12498 }, { 0x1F8A, 12538 }, { 0x1F8B, 12470 }, { 0x1F8C, 12520 }, { 0x1F8D, 12452 }, { 0x1F8E, 12556 }, { 0x1F8F, 12488 }, { 0x1F90, 10910 }, { 0x1F91, 10842 }, { 0x1F92, 10882 }, { 0x1F93, 10814 }, { 0x1F94, 10864 }, { 0x1F95, 10796 }, { 0x1F96, 10900 }, { 0x1F97, 10832 }, { 0x1F98, 12260 }, { 0x1F99, 12192 }, { 0x1F9A, 12232 }, { 0x1F9B, 12164 }, { 0x1F9C, 12214 }, { 0x1F9D, 12146 }, { 0x1F9E, 12250 }, { 0x1F9F, 12182 }, { 0x1FA0, 11521 }, { 0x1FA1, 11453 }, { 0x1FA2, 11493 }, { 0x1FA3, 11425 }, { 0x1FA4, 11475 }, { 0x1FA5, 11407 }, { 0x1FA6, 11511 }, { 0x1FA7, 11443 }, { 0x1FA8, 12758 }, { 0x1FA9, 12690 }, { 0x1FAA, 12730 }, { 0x1FAB, 12662 }, { 0x1FAC, 12712 }, { 0x1FAD, 12644 }, { 0x1FAE, 12748 }, { 0x1FAF, 12680 }, { 0x1FB0, 11324 }, { 0x1FB1, 11318 }, { 0x1FB2, 11310 }, { 0x1FB3, 11344 }, { 0x1FB4, 11154 }, { 0x1FB6, 11330 }, { 0x1FB7, 11336 }, { 0x1FB8, 12592 }, { 0x1FB9, 12586 }, { 0x1FBA, 12580 }, { 0x1FBB, 12432 }, { 0x1FBC, 12598 }, { 0x1FBD, 13025 }, { 0x1FBE, 13524 }, { 0x1FBF, 10724 }, { 0x1FC0, 13372 }, { 0x1FC1, 13079 }, { 0x1FC2, 10930 }, { 0x1FC3, 10952 }, { 0x1FC4, 10774 }, { 0x1FC6, 10938 }, { 0x1FC7, 10944 }, { 0x1FC8, 12857 }, { 0x1FC9, 12801 }, { 0x1FCA, 12274 }, { 0x1FCB, 12126 }, { 0x1FCC, 12280 }, { 0x1FCD, 10730 }, { 0x1FCE, 10726 }, { 0x1FCF, 10734 }, { 0x1FD0, 11090 }, { 0x1FD1, 11084 }, { 0x1FD2, 11118 }, { 0x1FD3, 11102 }, { 0x1FD6, 11134 }, { 0x1FD7, 11126 }, { 0x1FD8, 12412 }, { 0x1FD9, 12406 }, { 0x1FDA, 12400 }, { 0x1FDB, 12328 }, { 0x1FDD, 10706 }, { 0x1FDE, 10702 }, { 0x1FDF, 10710 }, { 0x1FE0, 11819 }, { 0x1FE1, 11813 }, { 0x1FE2, 11847 }, { 0x1FE3, 11831 }, { 0x1FE4, 10976 }, { 0x1FE5, 10970 }, { 0x1FE6, 11863 }, { 0x1FE7, 11855 }, { 0x1FE8, 12987 }, { 0x1FE9, 12981 }, { 0x1FEA, 12975 }, { 0x1FEB, 12933 }, { 0x1FEC, 12298 }, { 0x1FED, 13075 }, { 0x1FEE, 13071 }, { 0x1FEF, 11900 }, { 0x1FF2, 11541 }, { 0x1FF3, 11563 }, { 0x1FF4, 11385 }, { 0x1FF6, 11549 }, { 0x1FF7, 11555 }, { 0x1FF8, 12923 }, { 0x1FF9, 12867 }, { 0x1FFA, 12772 }, { 0x1FFB, 12624 }, { 0x1FFC, 12778 }, { 0x1FFD, 10692 }, { 0x1FFE, 10700 }, { 0x2000, 77 }, { 0x2001, 71 }, { 0x2002, 79 }, { 0x2003, 73 }, { 0x2004, 74478 }, { 0x2005, 68661 }, { 0x2006, 68597 }, { 0x2007, 31771 }, { 0x2008, 69272 }, { 0x2009, 10051 }, { 0x200A, 9123 }, { 0x200B, 10089 }, { 0x200C, 10099 }, { 0x200D, 10092 }, { 0x200E, 74617 }, { 0x200F, 75041 }, { 0x2010, 33424 }, { 0x2011, 74240 }, { 0x2012, 31769 }, { 0x2013, 75 }, { 0x2014, 69 }, { 0x2015, 67636 }, { 0x2016, 31692 }, { 0x2017, 31548 }, { 0x2018, 9381 }, { 0x2019, 21908 }, { 0x201A, 35854 }, { 0x201B, 35868 }, { 0x201C, 9365 }, { 0x201D, 21892 }, { 0x201E, 31570 }, { 0x201F, 31700 }, { 0x2020, 31169 }, { 0x2021, 31587 }, { 0x2022, 30312 }, { 0x2023, 68599 }, { 0x2024, 7161 }, { 0x2025, 7766 }, { 0x2026, 67661 }, { 0x2027, 68663 }, { 0x2028, 9483 }, { 0x2029, 65751 }, { 0x202A, 74621 }, { 0x202B, 75045 }, { 0x202C, 7173 }, { 0x202D, 74619 }, { 0x202E, 75043 }, { 0x202F, 35576 }, { 0x2030, 7170 }, { 0x2031, 7164 }, { 0x2032, 21742 }, { 0x2033, 31574 }, { 0x2034, 37619 }, { 0x2035, 55468 }, { 0x2036, 55475 }, { 0x2037, 55491 }, { 0x2038, 10441 }, { 0x2039, 35858 }, { 0x203A, 35863 }, { 0x203B, 65808 }, { 0x203C, 31695 }, { 0x203D, 69263 }, { 0x203E, 54945 }, { 0x203F, 56009 }, { 0x2040, 57360 }, { 0x2041, 10442 }, { 0x2042, 45084 }, { 0x2043, 33428 }, { 0x2044, 51779 }, { 0x2045, 9404 }, { 0x2046, 21931 }, { 0x2047, 31668 }, { 0x2048, 55448 }, { 0x2049, 68658 }, { 0x204A, 55895 }, { 0x204B, 55494 }, { 0x204C, 10314 }, { 0x204D, 10331 }, { 0x204E, 6038 }, { 0x204F, 55505 }, { 0x2050, 10452 }, { 0x2051, 7789 }, { 0x2052, 66839 }, { 0x2053, 22751 }, { 0x2054, 53355 }, { 0x2055, 31779 }, { 0x2056, 22989 }, { 0x2057, 65761 }, { 0x2058, 9100 }, { 0x2059, 9094 }, { 0x205A, 7769 }, { 0x205B, 9097 }, { 0x205C, 31529 }, { 0x205D, 55910 }, { 0x205E, 56031 }, { 0x205F, 35557 }, { 0x2060, 10087 }, { 0x2061, 51784 }, { 0x2062, 64310 }, { 0x2063, 64312 }, { 0x2064, 64308 }, { 0x206A, 40633 }, { 0x206B, 44713 }, { 0x206C, 40629 }, { 0x206D, 44709 }, { 0x206E, 54880 }, { 0x206F, 42828 }, { 0x2070, 69298 }, { 0x2071, 69302 }, { 0x2074, 69288 }, { 0x2075, 69286 }, { 0x2076, 69282 }, { 0x2077, 69317 }, { 0x2078, 69300 }, { 0x2079, 69293 }, { 0x207A, 69295 }, { 0x207B, 69312 }, { 0x207C, 69321 }, { 0x207D, 69290 }, { 0x207E, 69314 }, { 0x207F, 69307 }, { 0x2080, 65843 }, { 0x2081, 65825 }, { 0x2082, 65829 }, { 0x2083, 65854 }, { 0x2084, 65833 }, { 0x2085, 65831 }, { 0x2086, 65827 }, { 0x2087, 65852 }, { 0x2088, 65845 }, { 0x2089, 65838 }, { 0x208A, 65840 }, { 0x208B, 65847 }, { 0x208C, 65856 }, { 0x208D, 65835 }, { 0x208E, 65849 }, { 0x2090, 20782 }, { 0x2091, 20787 }, { 0x2092, 20802 }, { 0x2093, 20822 }, { 0x2094, 20827 }, { 0x20A0, 74597 }, { 0x20A1, 10456 }, { 0x20A2, 48519 }, { 0x20A3, 31787 }, { 0x20A4, 9505 }, { 0x20A5, 9596 }, { 0x20A6, 21269 }, { 0x20A7, 35651 }, { 0x20A8, 22442 }, { 0x20A9, 8709 }, { 0x20AA, 6507 }, { 0x20AB, 9068 }, { 0x20AC, 9089 }, { 0x20AD, 5797 }, { 0x20AE, 37669 }, { 0x20AF, 40498 }, { 0x20B0, 31791 }, { 0x20B1, 9631 }, { 0x20B2, 40560 }, { 0x20B3, 37779 }, { 0x20B4, 40627 }, { 0x20B5, 8727 }, { 0x20D0, 57472 }, { 0x20D1, 57795 }, { 0x20D2, 57497 }, { 0x20D3, 57829 }, { 0x20D4, 58327 }, { 0x20D5, 58236 }, { 0x20D6, 57454 }, { 0x20D7, 57787 }, { 0x20D8, 57512 }, { 0x20D9, 58232 }, { 0x20DA, 58323 }, { 0x20DB, 57837 }, { 0x20DC, 57423 }, { 0x20DD, 58245 }, { 0x20DE, 58258 }, { 0x20DF, 58266 }, { 0x20E0, 58248 }, { 0x20E1, 57462 }, { 0x20E2, 58255 }, { 0x20E3, 58252 }, { 0x20E4, 58261 }, { 0x20E5, 57987 }, { 0x20E6, 57928 }, { 0x20E7, 57980 }, { 0x20E8, 57967 }, { 0x20E9, 57515 }, { 0x20EA, 58269 }, { 0x20EB, 57484 }, { 0x20EC, 58296 }, { 0x20ED, 58273 }, { 0x20EE, 57458 }, { 0x20EF, 57791 }, { 0x20F0, 57998 }, { 0x2100, 37774 }, { 0x2101, 56104 }, { 0x2102, 74558 }, { 0x2103, 31181 }, { 0x2104, 30465 }, { 0x2105, 8725 }, { 0x2106, 8723 }, { 0x2107, 10628 }, { 0x2108, 43021 }, { 0x2109, 31183 }, { 0x210A, 35815 }, { 0x210B, 35833 }, { 0x210C, 69390 }, { 0x210D, 74561 }, { 0x210E, 35654 }, { 0x210F, 35656 }, { 0x2110, 35836 }, { 0x2111, 69393 }, { 0x2112, 35839 }, { 0x2113, 35818 }, { 0x2114, 0 }, { 0x2115, 74564 }, { 0x2116, 35635 }, { 0x2117, 22671 }, { 0x2118, 35845 }, { 0x2119, 74567 }, { 0x211A, 74570 }, { 0x211B, 35848 }, { 0x211C, 69396 }, { 0x211D, 74573 }, { 0x211E, 74242 }, { 0x211F, 55455 }, { 0x2120, 43025 }, { 0x2121, 66040 }, { 0x2122, 23055 }, { 0x2123, 56010 }, { 0x2124, 74576 }, { 0x2125, 21731 }, { 0x2126, 6813 }, { 0x2127, 53346 }, { 0x2128, 69399 }, { 0x2129, 37676 }, { 0x212A, 34094 }, { 0x212B, 44717 }, { 0x212C, 35824 }, { 0x212D, 69387 }, { 0x212E, 63380 }, { 0x212F, 35812 }, { 0x2130, 35827 }, { 0x2131, 35830 }, { 0x2132, 37684 }, { 0x2133, 35842 }, { 0x2134, 35821 }, { 0x2135, 8716 }, { 0x2136, 4380 }, { 0x2137, 10636 }, { 0x2138, 10477 }, { 0x2139, 69246 }, { 0x213A, 43017 }, { 0x213B, 63383 }, { 0x213C, 74532 }, { 0x213D, 74535 }, { 0x213E, 74582 }, { 0x213F, 74579 }, { 0x2140, 74529 }, { 0x2141, 37689 }, { 0x2142, 37693 }, { 0x2143, 55507 }, { 0x2144, 37697 }, { 0x2145, 74554 }, { 0x2146, 74538 }, { 0x2147, 74542 }, { 0x2148, 74546 }, { 0x2149, 74550 }, { 0x214A, 55384 }, { 0x214B, 37687 }, { 0x214C, 7168 }, { 0x214D, 69338 }, { 0x214E, 37681 }, { 0x214F, 36848 }, { 0x2153, 37724 }, { 0x2154, 37740 }, { 0x2155, 37716 }, { 0x2156, 37736 }, { 0x2157, 37760 }, { 0x2158, 37752 }, { 0x2159, 37720 }, { 0x215A, 37744 }, { 0x215B, 37728 }, { 0x215C, 37764 }, { 0x215D, 37748 }, { 0x215E, 37756 }, { 0x215F, 51781 }, { 0x2160, 22020 }, { 0x2161, 22057 }, { 0x2162, 22095 }, { 0x2163, 22071 }, { 0x2164, 22060 }, { 0x2165, 22042 }, { 0x2166, 22092 }, { 0x2167, 22077 }, { 0x2168, 22074 }, { 0x2169, 22050 }, { 0x216A, 22098 }, { 0x216B, 22101 }, { 0x216C, 22080 }, { 0x216D, 22023 }, { 0x216E, 22063 }, { 0x216F, 22032 }, { 0x2170, 22521 }, { 0x2171, 22543 }, { 0x2172, 22576 }, { 0x2173, 22556 }, { 0x2174, 22547 }, { 0x2175, 22535 }, { 0x2176, 22572 }, { 0x2177, 22564 }, { 0x2178, 22560 }, { 0x2179, 22539 }, { 0x217A, 22580 }, { 0x217B, 22584 }, { 0x217C, 22568 }, { 0x217D, 22525 }, { 0x217E, 22551 }, { 0x217F, 22530 }, { 0x2180, 22036 }, { 0x2181, 22067 }, { 0x2182, 22053 }, { 0x2183, 22104 }, { 0x2184, 17753 }, { 0x2185, 22045 }, { 0x2186, 22083 }, { 0x2187, 22088 }, { 0x2188, 22027 }, { 0x2190, 64325 }, { 0x2191, 44542 }, { 0x2192, 67992 }, { 0x2193, 63251 }, { 0x2194, 9258 }, { 0x2195, 303 }, { 0x2196, 21324 }, { 0x2197, 21277 }, { 0x2198, 22674 }, { 0x2199, 22713 }, { 0x219A, 64414 }, { 0x219B, 68077 }, { 0x219C, 64322 }, { 0x219D, 67989 }, { 0x219E, 64318 }, { 0x219F, 44538 }, { 0x21A0, 67985 }, { 0x21A1, 63247 }, { 0x21A2, 64384 }, { 0x21A3, 68042 }, { 0x21A4, 64345 }, { 0x21A5, 44548 }, { 0x21A6, 68003 }, { 0x21A7, 63257 }, { 0x21A8, 306 }, { 0x21A9, 64371 }, { 0x21AA, 68029 }, { 0x21AB, 64375 }, { 0x21AC, 68033 }, { 0x21AD, 9254 }, { 0x21AE, 9268 }, { 0x21AF, 63312 }, { 0x21B0, 44552 }, { 0x21B1, 44557 }, { 0x21B2, 63261 }, { 0x21B3, 63266 }, { 0x21B4, 68061 }, { 0x21B5, 63271 }, { 0x21B6, 74484 }, { 0x21B7, 57362 }, { 0x21B8, 21327 }, { 0x21B9, 64331 }, { 0x21BA, 74488 }, { 0x21BB, 57366 }, { 0x21BC, 64592 }, { 0x21BD, 64597 }, { 0x21BE, 44689 }, { 0x21BF, 44684 }, { 0x21C0, 68257 }, { 0x21C1, 68262 }, { 0x21C2, 63370 }, { 0x21C3, 63365 }, { 0x21C4, 68014 }, { 0x21C5, 44572 }, { 0x21C6, 64356 }, { 0x21C7, 64500 }, { 0x21C8, 44628 }, { 0x21C9, 68165 }, { 0x21CA, 63306 }, { 0x21CB, 64510 }, { 0x21CC, 68175 }, { 0x21CD, 64486 }, { 0x21CE, 9297 }, { 0x21CF, 68151 }, { 0x21D0, 64478 }, { 0x21D1, 44625 }, { 0x21D2, 68143 }, { 0x21D3, 63303 }, { 0x21D4, 9293 }, { 0x21D5, 319 }, { 0x21D6, 21365 }, { 0x21D7, 21314 }, { 0x21D8, 22709 }, { 0x21D9, 22736 }, { 0x21DA, 64507 }, { 0x21DB, 68172 }, { 0x21DC, 64602 }, { 0x21DD, 68267 }, { 0x21DE, 44562 }, { 0x21DF, 63276 }, { 0x21E0, 64471 }, { 0x21E1, 44622 }, { 0x21E2, 68136 }, { 0x21E3, 63300 }, { 0x21E4, 64327 }, { 0x21E5, 67994 }, { 0x21E6, 64468 }, { 0x21E7, 44581 }, { 0x21E8, 68128 }, { 0x21E9, 63295 }, { 0x21EA, 44605 }, { 0x21EB, 44584 }, { 0x21EC, 44597 }, { 0x21ED, 44589 }, { 0x21EE, 44610 }, { 0x21EF, 44614 }, { 0x21F0, 68131 }, { 0x21F1, 21333 }, { 0x21F2, 22677 }, { 0x21F3, 315 }, { 0x21F4, 21805 }, { 0x21F5, 63286 }, { 0x21F6, 22995 }, { 0x21F7, 64418 }, { 0x21F8, 68081 }, { 0x21F9, 9273 }, { 0x21FA, 64408 }, { 0x21FB, 68071 }, { 0x21FC, 9261 }, { 0x21FD, 64655 }, { 0x21FE, 68320 }, { 0x21FF, 9310 }, { 0x2200, 5791 }, { 0x2201, 66842 }, { 0x2202, 42971 }, { 0x2203, 22987 }, { 0x2204, 22983 }, { 0x2205, 10570 }, { 0x2206, 64305 }, { 0x2207, 21268 }, { 0x2208, 40500 }, { 0x2209, 6719 }, { 0x220A, 22599 }, { 0x220B, 48398 }, { 0x220C, 9033 }, { 0x220D, 22626 }, { 0x220E, 5788 }, { 0x220F, 21260 }, { 0x2210, 21262 }, { 0x2211, 21264 }, { 0x2212, 21178 }, { 0x2213, 74623 }, { 0x2214, 5780 }, { 0x2215, 50310 }, { 0x2216, 7176 }, { 0x2217, 45082 }, { 0x2218, 9706 }, { 0x2219, 30313 }, { 0x221A, 36200 }, { 0x221B, 9013 }, { 0x221C, 31785 }, { 0x221D, 74470 }, { 0x221E, 53300 }, { 0x221F, 21771 }, { 0x2220, 10106 }, { 0x2221, 53732 }, { 0x2222, 65815 }, { 0x2223, 40489 }, { 0x2224, 9023 }, { 0x2225, 54946 }, { 0x2226, 6764 }, { 0x2227, 40959 }, { 0x2228, 40927 }, { 0x2229, 69570 }, { 0x222A, 23058 }, { 0x222B, 53306 }, { 0x222C, 31664 }, { 0x222D, 37633 }, { 0x222E, 39790 }, { 0x222F, 43581 }, { 0x2230, 37710 }, { 0x2231, 57381 }, { 0x2232, 57378 }, { 0x2233, 74500 }, { 0x2234, 66307 }, { 0x2235, 37781 }, { 0x2236, 21746 }, { 0x2237, 67972 }, { 0x2238, 5784 }, { 0x2239, 31766 }, { 0x223A, 63794 }, { 0x223B, 67635 }, { 0x223C, 23021 }, { 0x223D, 55470 }, { 0x223E, 53349 }, { 0x223F, 9708 }, { 0x2240, 37772 }, { 0x2241, 6733 }, { 0x2242, 21204 }, { 0x2243, 75048 }, { 0x2244, 6777 }, { 0x2245, 74516 }, { 0x2246, 74505 }, { 0x2247, 42821 }, { 0x2248, 23692 }, { 0x2249, 6735 }, { 0x224A, 23687 }, { 0x224B, 37621 }, { 0x224C, 4011 }, { 0x224D, 67226 }, { 0x224E, 74602 }, { 0x224F, 67222 }, { 0x2250, 66827 }, { 0x2251, 74599 }, { 0x2252, 74519 }, { 0x2253, 13722 }, { 0x2254, 10458 }, { 0x2255, 31764 }, { 0x2256, 9695 }, { 0x2257, 9701 }, { 0x2258, 68616 }, { 0x2259, 63382 }, { 0x225A, 68654 }, { 0x225B, 9718 }, { 0x225C, 10479 }, { 0x225D, 10596 }, { 0x225E, 53730 }, { 0x225F, 67976 }, { 0x2260, 6730 }, { 0x2261, 64292 }, { 0x2262, 6767 }, { 0x2263, 55525 }, { 0x2264, 64658 }, { 0x2265, 69429 }, { 0x2266, 64722 }, { 0x2267, 69493 }, { 0x2268, 64712 }, { 0x2269, 69483 }, { 0x226A, 9599 }, { 0x226B, 9601 }, { 0x226C, 38099 }, { 0x226D, 6772 }, { 0x226E, 6770 }, { 0x226F, 6775 }, { 0x2270, 42793 }, { 0x2271, 42807 }, { 0x2272, 64692 }, { 0x2273, 69466 }, { 0x2274, 42798 }, { 0x2275, 42816 }, { 0x2276, 64699 }, { 0x2277, 69463 }, { 0x2278, 42803 }, { 0x2279, 42812 }, { 0x227A, 55334 }, { 0x227B, 55528 }, { 0x227C, 55335 }, { 0x227D, 55529 }, { 0x227E, 55339 }, { 0x227F, 55533 }, { 0x2280, 9052 }, { 0x2281, 9060 }, { 0x2282, 36469 }, { 0x2283, 55576 }, { 0x2284, 6711 }, { 0x2285, 6715 }, { 0x2286, 36471 }, { 0x2287, 55578 }, { 0x2288, 42779 }, { 0x2289, 42786 }, { 0x228A, 36484 }, { 0x228B, 55591 }, { 0x228C, 54875 }, { 0x228D, 54878 }, { 0x228E, 54876 }, { 0x228F, 36310 }, { 0x2290, 36425 }, { 0x2291, 36320 }, { 0x2292, 36435 }, { 0x2293, 36092 }, { 0x2294, 36094 }, { 0x2295, 38882 }, { 0x2296, 39182 }, { 0x2297, 39184 }, { 0x2298, 39468 }, { 0x2299, 38871 }, { 0x229A, 38884 }, { 0x229B, 39462 }, { 0x229C, 39194 }, { 0x229D, 38874 }, { 0x229E, 43560 }, { 0x229F, 43562 }, { 0x22A0, 43567 }, { 0x22A1, 43553 }, { 0x22A2, 21769 }, { 0x22A3, 9202 }, { 0x22A4, 9073 }, { 0x22A5, 326 }, { 0x22A6, 56111 }, { 0x22A7, 35572 }, { 0x22A8, 10054 }, { 0x22A9, 31782 }, { 0x22AA, 37641 }, { 0x22AB, 31686 }, { 0x22AC, 9020 }, { 0x22AD, 6725 }, { 0x22AE, 9017 }, { 0x22AF, 42772 }, { 0x22B0, 55379 }, { 0x22B1, 55573 }, { 0x22B2, 35580 }, { 0x22B3, 48401 }, { 0x22B4, 35583 }, { 0x22B5, 48405 }, { 0x22B6, 54929 }, { 0x22B7, 13720 }, { 0x22B8, 54874 }, { 0x22B9, 64288 }, { 0x22BA, 69248 }, { 0x22BB, 8711 }, { 0x22BC, 9603 }, { 0x22BD, 6710 }, { 0x22BE, 21773 }, { 0x22BF, 21972 }, { 0x22C0, 21257 }, { 0x22C1, 21254 }, { 0x22C2, 21266 }, { 0x22C3, 21218 }, { 0x22C4, 40327 }, { 0x22C5, 5786 }, { 0x22C6, 9720 }, { 0x22C7, 50312 }, { 0x22C8, 30294 }, { 0x22C9, 9372 }, { 0x22CA, 21899 }, { 0x22CB, 9461 }, { 0x22CC, 21988 }, { 0x22CD, 55472 }, { 0x22CE, 10471 }, { 0x22CF, 10474 }, { 0x22D0, 31610 }, { 0x22D1, 31673 }, { 0x22D2, 31698 }, { 0x22D3, 31585 }, { 0x22D4, 65756 }, { 0x22D5, 10616 }, { 0x22D6, 64728 }, { 0x22D7, 69499 }, { 0x22D8, 10057 }, { 0x22D9, 10060 }, { 0x22DA, 64775 }, { 0x22DB, 69546 }, { 0x22DC, 10608 }, { 0x22DD, 10612 }, { 0x22DE, 10600 }, { 0x22DF, 10604 }, { 0x22E0, 9055 }, { 0x22E1, 9063 }, { 0x22E2, 6750 }, { 0x22E3, 6757 }, { 0x22E4, 36313 }, { 0x22E5, 36428 }, { 0x22E6, 64717 }, { 0x22E7, 69488 }, { 0x22E8, 55343 }, { 0x22E9, 55537 }, { 0x22EA, 6739 }, { 0x22EB, 9038 }, { 0x22EC, 6743 }, { 0x22ED, 9044 }, { 0x22EE, 56096 }, { 0x22EF, 41192 }, { 0x22F0, 337 }, { 0x22F1, 9080 }, { 0x22F2, 40513 }, { 0x22F3, 40527 }, { 0x22F4, 22607 }, { 0x22F5, 40502 }, { 0x22F6, 40519 }, { 0x22F7, 22602 }, { 0x22F8, 40523 }, { 0x22F9, 40507 }, { 0x22FA, 48412 }, { 0x22FB, 48420 }, { 0x22FC, 22634 }, { 0x22FD, 48417 }, { 0x22FE, 22630 }, { 0x22FF, 12 }, { 0x2300, 50306 }, { 0x2301, 50318 }, { 0x2302, 13719 }, { 0x2303, 341 }, { 0x2304, 9084 }, { 0x2305, 67971 }, { 0x2306, 69271 }, { 0x2307, 10080 }, { 0x2308, 9431 }, { 0x2309, 21958 }, { 0x230A, 9249 }, { 0x230B, 21842 }, { 0x230C, 30268 }, { 0x230D, 30255 }, { 0x230E, 7747 }, { 0x230F, 7734 }, { 0x2310, 55456 }, { 0x2311, 36399 }, { 0x2312, 4379 }, { 0x2313, 43024 }, { 0x2314, 35851 }, { 0x2315, 66045 }, { 0x2316, 55332 }, { 0x2317, 56102 }, { 0x2318, 21735 }, { 0x2319, 37671 }, { 0x231A, 23154 }, { 0x231B, 64291 }, { 0x231C, 7741 }, { 0x231D, 7754 }, { 0x231E, 30262 }, { 0x231F, 30275 }, { 0x2320, 7731 }, { 0x2321, 30252 }, { 0x2322, 10635 }, { 0x2323, 22670 }, { 0x2324, 343 }, { 0x2325, 35641 }, { 0x2326, 10624 }, { 0x2327, 7 }, { 0x2328, 53725 }, { 0x2329, 74605 }, { 0x232A, 75087 }, { 0x232B, 10620 }, { 0x232C, 38093 }, { 0x232D, 69402 }, { 0x232E, 4014 }, { 0x232F, 55656 }, { 0x2330, 23053 }, { 0x2331, 63245 }, { 0x2332, 39788 }, { 0x2333, 22479 }, { 0x2334, 68618 }, { 0x2335, 68619 }, { 0x2336, 4325 }, { 0x2337, 4329 }, { 0x2338, 4159 }, { 0x2339, 4174 }, { 0x233A, 4179 }, { 0x233B, 4132 }, { 0x233C, 4169 }, { 0x233D, 4305 }, { 0x233E, 4295 }, { 0x233F, 4276 }, { 0x2340, 4349 }, { 0x2341, 4164 }, { 0x2342, 4195 }, { 0x2343, 4212 }, { 0x2344, 4223 }, { 0x2345, 4359 }, { 0x2346, 4369 }, { 0x2347, 4206 }, { 0x2348, 4217 }, { 0x2349, 4315 }, { 0x234A, 4090 }, { 0x234B, 4247 }, { 0x234C, 4143 }, { 0x234D, 4154 }, { 0x234E, 4084 }, { 0x234F, 4344 }, { 0x2350, 4184 }, { 0x2351, 4031 }, { 0x2352, 4049 }, { 0x2353, 4121 }, { 0x2354, 4127 }, { 0x2355, 4025 }, { 0x2356, 4354 }, { 0x2357, 4200 }, { 0x2358, 4271 }, { 0x2359, 4252 }, { 0x235A, 4334 }, { 0x235B, 4064 }, { 0x235C, 4310 }, { 0x235D, 4019 }, { 0x235E, 4266 }, { 0x235F, 4300 }, { 0x2360, 4149 }, { 0x2361, 4037 }, { 0x2362, 4059 }, { 0x2363, 4228 }, { 0x2364, 4069 }, { 0x2365, 4320 }, { 0x2366, 4078 }, { 0x2367, 4111 }, { 0x2368, 4286 }, { 0x2369, 4374 }, { 0x236A, 4242 }, { 0x236B, 4054 }, { 0x236C, 4291 }, { 0x236D, 4281 }, { 0x236E, 4364 }, { 0x236F, 4137 }, { 0x2370, 4190 }, { 0x2371, 4096 }, { 0x2372, 4043 }, { 0x2373, 4102 }, { 0x2374, 4074 }, { 0x2375, 4257 }, { 0x2376, 4237 }, { 0x2377, 4339 }, { 0x2378, 4106 }, { 0x2379, 4261 }, { 0x237A, 4233 }, { 0x237B, 6727 }, { 0x237C, 21777 }, { 0x237D, 68594 }, { 0x237E, 8721 }, { 0x237F, 56078 }, { 0x2380, 64306 }, { 0x2381, 66843 }, { 0x2382, 74526 }, { 0x2383, 50320 }, { 0x2384, 68613 }, { 0x2385, 23322 }, { 0x2386, 10594 }, { 0x2387, 68603 }, { 0x2388, 9125 }, { 0x2389, 39769 }, { 0x238A, 39614 }, { 0x238B, 30307 }, { 0x238C, 10055 }, { 0x238D, 67877 }, { 0x238E, 67663 }, { 0x238F, 75142 }, { 0x2390, 75145 }, { 0x2391, 75150 }, { 0x2392, 75148 }, { 0x2393, 31220 }, { 0x2394, 75137 }, { 0x2395, 4117 }, { 0x2396, 39959 }, { 0x2397, 55382 }, { 0x2398, 9604 }, { 0x2399, 21743 }, { 0x239A, 10449 }, { 0x239B, 9470 }, { 0x239C, 9474 }, { 0x239D, 9466 }, { 0x239E, 21997 }, { 0x239F, 22001 }, { 0x23A0, 21993 }, { 0x23A1, 9419 }, { 0x23A2, 9424 }, { 0x23A3, 9414 }, { 0x23A4, 21946 }, { 0x23A5, 21951 }, { 0x23A6, 21941 }, { 0x23A7, 9239 }, { 0x23A8, 9244 }, { 0x23A9, 9234 }, { 0x23AA, 10468 }, { 0x23AB, 21832 }, { 0x23AC, 21837 }, { 0x23AD, 21827 }, { 0x23AE, 53342 }, { 0x23AF, 67638 }, { 0x23B0, 23099 }, { 0x23B1, 23123 }, { 0x23B2, 65859 }, { 0x23B3, 65864 }, { 0x23B4, 7757 }, { 0x23B5, 30278 }, { 0x23B6, 30281 }, { 0x23B7, 42979 }, { 0x23B8, 9457 }, { 0x23B9, 21984 }, { 0x23BA, 67646 }, { 0x23BB, 67649 }, { 0x23BC, 67652 }, { 0x23BD, 67655 }, { 0x23BE, 63205 }, { 0x23BF, 63225 }, { 0x23C0, 63232 }, { 0x23C1, 63182 }, { 0x23C2, 63152 }, { 0x23C3, 63238 }, { 0x23C4, 63190 }, { 0x23C5, 63160 }, { 0x23C6, 63212 }, { 0x23C7, 63174 }, { 0x23C8, 63144 }, { 0x23C9, 63168 }, { 0x23CA, 63138 }, { 0x23CB, 63198 }, { 0x23CC, 63218 }, { 0x23CD, 36165 }, { 0x23CE, 35797 }, { 0x23CF, 10568 }, { 0x23D0, 56083 }, { 0x23D1, 53857 }, { 0x23D2, 53853 }, { 0x23D3, 53859 }, { 0x23D4, 53848 }, { 0x23D5, 53839 }, { 0x23D6, 53844 }, { 0x23D7, 53863 }, { 0x23D8, 53867 }, { 0x23D9, 53865 }, { 0x23DA, 10541 }, { 0x23DB, 9119 }, { 0x23DC, 7764 }, { 0x23DD, 30292 }, { 0x23DE, 7744 }, { 0x23DF, 30265 }, { 0x23E0, 7760 }, { 0x23E1, 30288 }, { 0x23E2, 23412 }, { 0x23E3, 38095 }, { 0x23E4, 74477 }, { 0x23E5, 51778 }, { 0x23E6, 67 }, { 0x23E7, 67224 }, { 0x2400, 36757 }, { 0x2401, 36784 }, { 0x2402, 36779 }, { 0x2403, 36716 }, { 0x2404, 36726 }, { 0x2405, 36827 }, { 0x2406, 36864 }, { 0x2407, 36737 }, { 0x2408, 36845 }, { 0x2409, 36852 }, { 0x240A, 36753 }, { 0x240B, 36841 }, { 0x240C, 36749 }, { 0x240D, 36833 }, { 0x240E, 36772 }, { 0x240F, 36768 }, { 0x2410, 36740 }, { 0x2411, 36800 }, { 0x2412, 36805 }, { 0x2413, 36815 }, { 0x2414, 36810 }, { 0x2415, 36837 }, { 0x2416, 36867 }, { 0x2417, 36731 }, { 0x2418, 36789 }, { 0x2419, 36721 }, { 0x241A, 36856 }, { 0x241B, 36820 }, { 0x241C, 36745 }, { 0x241D, 36764 }, { 0x241E, 36823 }, { 0x241F, 36760 }, { 0x2420, 36776 }, { 0x2421, 36792 }, { 0x2422, 10376 }, { 0x2423, 9606 }, { 0x2424, 36830 }, { 0x2425, 36795 }, { 0x2426, 36859 }, { 0x2440, 6791 }, { 0x2441, 6793 }, { 0x2442, 6789 }, { 0x2443, 6810 }, { 0x2444, 6784 }, { 0x2445, 6781 }, { 0x2446, 6799 }, { 0x2447, 6795 }, { 0x2448, 6787 }, { 0x2449, 6806 }, { 0x244A, 6803 }, { 0x2460, 38887 }, { 0x2461, 38893 }, { 0x2462, 38914 }, { 0x2463, 38899 }, { 0x2464, 38896 }, { 0x2465, 38890 }, { 0x2466, 38911 }, { 0x2467, 38908 }, { 0x2468, 38902 }, { 0x2469, 39306 }, { 0x246A, 39351 }, { 0x246B, 39393 }, { 0x246C, 39450 }, { 0x246D, 39444 }, { 0x246E, 39435 }, { 0x246F, 39438 }, { 0x2470, 39453 }, { 0x2471, 39441 }, { 0x2472, 39447 }, { 0x2473, 39396 }, { 0x2474, 74628 }, { 0x2475, 74634 }, { 0x2476, 74652 }, { 0x2477, 74640 }, { 0x2478, 74637 }, { 0x2479, 74631 }, { 0x247A, 74649 }, { 0x247B, 74646 }, { 0x247C, 74643 }, { 0x247D, 74896 }, { 0x247E, 74899 }, { 0x247F, 74902 }, { 0x2480, 74923 }, { 0x2481, 74917 }, { 0x2482, 74908 }, { 0x2483, 74911 }, { 0x2484, 74926 }, { 0x2485, 74914 }, { 0x2486, 74920 }, { 0x2487, 74905 }, { 0x2488, 10484 }, { 0x2489, 10496 }, { 0x248A, 10534 }, { 0x248B, 10508 }, { 0x248C, 10502 }, { 0x248D, 10490 }, { 0x248E, 10528 }, { 0x248F, 10522 }, { 0x2490, 10514 }, { 0x2491, 35589 }, { 0x2492, 35595 }, { 0x2493, 35599 }, { 0x2494, 35627 }, { 0x2495, 35619 }, { 0x2496, 35607 }, { 0x2497, 35611 }, { 0x2498, 35631 }, { 0x2499, 35615 }, { 0x249A, 35623 }, { 0x249B, 35603 }, { 0x249C, 74655 }, { 0x249D, 74660 }, { 0x249E, 74665 }, { 0x249F, 74670 }, { 0x24A0, 74675 }, { 0x24A1, 74680 }, { 0x24A2, 74685 }, { 0x24A3, 74690 }, { 0x24A4, 74695 }, { 0x24A5, 74700 }, { 0x24A6, 74705 }, { 0x24A7, 74710 }, { 0x24A8, 74715 }, { 0x24A9, 74720 }, { 0x24AA, 74725 }, { 0x24AB, 74730 }, { 0x24AC, 74735 }, { 0x24AD, 74740 }, { 0x24AE, 74745 }, { 0x24AF, 74750 }, { 0x24B0, 74755 }, { 0x24B1, 74760 }, { 0x24B2, 74765 }, { 0x24B3, 74770 }, { 0x24B4, 74775 }, { 0x24B5, 74780 }, { 0x24B6, 39052 }, { 0x24B7, 39057 }, { 0x24B8, 39062 }, { 0x24B9, 39067 }, { 0x24BA, 39072 }, { 0x24BB, 39077 }, { 0x24BC, 39082 }, { 0x24BD, 39087 }, { 0x24BE, 39092 }, { 0x24BF, 39097 }, { 0x24C0, 39102 }, { 0x24C1, 39107 }, { 0x24C2, 39112 }, { 0x24C3, 39117 }, { 0x24C4, 39122 }, { 0x24C5, 39127 }, { 0x24C6, 39132 }, { 0x24C7, 39137 }, { 0x24C8, 39142 }, { 0x24C9, 39147 }, { 0x24CA, 39152 }, { 0x24CB, 39157 }, { 0x24CC, 39162 }, { 0x24CD, 39167 }, { 0x24CE, 39172 }, { 0x24CF, 39177 }, { 0x24D0, 38922 }, { 0x24D1, 38927 }, { 0x24D2, 38932 }, { 0x24D3, 38937 }, { 0x24D4, 38942 }, { 0x24D5, 38947 }, { 0x24D6, 38952 }, { 0x24D7, 38957 }, { 0x24D8, 38962 }, { 0x24D9, 38967 }, { 0x24DA, 38972 }, { 0x24DB, 38977 }, { 0x24DC, 38982 }, { 0x24DD, 38987 }, { 0x24DE, 38992 }, { 0x24DF, 38997 }, { 0x24E0, 39002 }, { 0x24E1, 39007 }, { 0x24E2, 39012 }, { 0x24E3, 39017 }, { 0x24E4, 39022 }, { 0x24E5, 39027 }, { 0x24E6, 39032 }, { 0x24E7, 39037 }, { 0x24E8, 39042 }, { 0x24E9, 39047 }, { 0x24EA, 38905 }, { 0x24EB, 54887 }, { 0x24EC, 54891 }, { 0x24ED, 54919 }, { 0x24EE, 54911 }, { 0x24EF, 54899 }, { 0x24F0, 54903 }, { 0x24F1, 54923 }, { 0x24F2, 54907 }, { 0x24F3, 54915 }, { 0x24F4, 54895 }, { 0x24F5, 31612 }, { 0x24F6, 31620 }, { 0x24F7, 31644 }, { 0x24F8, 31628 }, { 0x24F9, 31624 }, { 0x24FA, 31616 }, { 0x24FB, 31640 }, { 0x24FC, 31636 }, { 0x24FD, 31632 }, { 0x24FE, 31648 }, { 0x24FF, 54883 }, { 0x2500, 5020 }, { 0x2501, 4841 }, { 0x2502, 4986 }, { 0x2503, 4807 }, { 0x2504, 4957 }, { 0x2505, 4801 }, { 0x2506, 4951 }, { 0x2507, 4795 }, { 0x2508, 5014 }, { 0x2509, 4835 }, { 0x250A, 5008 }, { 0x250B, 4829 }, { 0x250C, 4912 }, { 0x250D, 4595 }, { 0x250E, 4550 }, { 0x250F, 4756 }, { 0x2510, 4906 }, { 0x2511, 4580 }, { 0x2512, 4535 }, { 0x2513, 4750 }, { 0x2514, 4862 }, { 0x2515, 4463 }, { 0x2516, 4418 }, { 0x2517, 4734 }, { 0x2518, 4849 }, { 0x2519, 4448 }, { 0x251A, 4403 }, { 0x251B, 4721 }, { 0x251C, 4996 }, { 0x251D, 5180 }, { 0x251E, 4410 }, { 0x251F, 4542 }, { 0x2520, 5159 }, { 0x2521, 4587 }, { 0x2522, 4455 }, { 0x2523, 4817 }, { 0x2524, 4990 }, { 0x2525, 5173 }, { 0x2526, 4395 }, { 0x2527, 4527 }, { 0x2528, 5152 }, { 0x2529, 4572 }, { 0x252A, 4440 }, { 0x252B, 4811 }, { 0x252C, 4918 }, { 0x252D, 4677 }, { 0x252E, 5050 }, { 0x252F, 4602 }, { 0x2530, 4557 }, { 0x2531, 5074 }, { 0x2532, 4701 }, { 0x2533, 4762 }, { 0x2534, 4868 }, { 0x2535, 4669 }, { 0x2536, 5042 }, { 0x2537, 4470 }, { 0x2538, 4425 }, { 0x2539, 5066 }, { 0x253A, 4693 }, { 0x253B, 4740 }, { 0x253C, 5002 }, { 0x253D, 4685 }, { 0x253E, 5058 }, { 0x253F, 5187 }, { 0x2540, 4387 }, { 0x2541, 4519 }, { 0x2542, 5166 }, { 0x2543, 4651 }, { 0x2544, 5024 }, { 0x2545, 4660 }, { 0x2546, 5033 }, { 0x2547, 4564 }, { 0x2548, 4432 }, { 0x2549, 5082 }, { 0x254A, 4709 }, { 0x254B, 4823 }, { 0x254C, 4945 }, { 0x254D, 4789 }, { 0x254E, 4939 }, { 0x254F, 4783 }, { 0x2550, 5148 }, { 0x2551, 5126 }, { 0x2552, 4637 }, { 0x2553, 4616 }, { 0x2554, 5114 }, { 0x2555, 4630 }, { 0x2556, 4609 }, { 0x2557, 5108 }, { 0x2558, 4505 }, { 0x2559, 4484 }, { 0x255A, 5096 }, { 0x255B, 4498 }, { 0x255C, 4477 }, { 0x255D, 5090 }, { 0x255E, 5222 }, { 0x255F, 5201 }, { 0x2560, 5136 }, { 0x2561, 5215 }, { 0x2562, 5194 }, { 0x2563, 5130 }, { 0x2564, 4644 }, { 0x2565, 4623 }, { 0x2566, 5120 }, { 0x2567, 4512 }, { 0x2568, 4491 }, { 0x2569, 5102 }, { 0x256A, 5229 }, { 0x256B, 5208 }, { 0x256C, 5142 }, { 0x256D, 4895 }, { 0x256E, 4888 }, { 0x256F, 4874 }, { 0x2570, 4881 }, { 0x2571, 4977 }, { 0x2572, 4968 }, { 0x2573, 4963 }, { 0x2574, 4924 }, { 0x2575, 4845 }, { 0x2576, 4935 }, { 0x2577, 4902 }, { 0x2578, 4768 }, { 0x2579, 4717 }, { 0x257A, 4779 }, { 0x257B, 4746 }, { 0x257C, 4928 }, { 0x257D, 4855 }, { 0x257E, 4772 }, { 0x257F, 4727 }, { 0x2580, 23088 }, { 0x2581, 21094 }, { 0x2582, 21098 }, { 0x2583, 21168 }, { 0x2584, 21106 }, { 0x2585, 21102 }, { 0x2586, 21172 }, { 0x2587, 21164 }, { 0x2588, 9114 }, { 0x2589, 9314 }, { 0x258A, 9322 }, { 0x258B, 9191 }, { 0x258C, 9199 }, { 0x258D, 9318 }, { 0x258E, 9156 }, { 0x258F, 9152 }, { 0x2590, 21766 }, { 0x2591, 20870 }, { 0x2592, 35535 }, { 0x2593, 9015 }, { 0x2594, 23084 }, { 0x2595, 21755 }, { 0x2596, 55386 }, { 0x2597, 55389 }, { 0x2598, 55392 }, { 0x2599, 55395 }, { 0x259A, 55404 }, { 0x259B, 55410 }, { 0x259C, 55419 }, { 0x259D, 55428 }, { 0x259E, 55431 }, { 0x259F, 55437 }, { 0x25A0, 10270 }, { 0x25A1, 23296 }, { 0x25A2, 23328 }, { 0x25A3, 23349 }, { 0x25A4, 36279 }, { 0x25A5, 36271 }, { 0x25A6, 36283 }, { 0x25A7, 36231 }, { 0x25A8, 36246 }, { 0x25A9, 36266 }, { 0x25AA, 10212 }, { 0x25AB, 23225 }, { 0x25AC, 10317 }, { 0x25AD, 23408 }, { 0x25AE, 10309 }, { 0x25AF, 23403 }, { 0x25B0, 10361 }, { 0x25B1, 23461 }, { 0x25B2, 10341 }, { 0x25B3, 23421 }, { 0x25B4, 10337 }, { 0x25B5, 23417 }, { 0x25B6, 10373 }, { 0x25B7, 23473 }, { 0x25B8, 10363 }, { 0x25B9, 23463 }, { 0x25BA, 10367 }, { 0x25BB, 23467 }, { 0x25BC, 10348 }, { 0x25BD, 23448 }, { 0x25BE, 10344 }, { 0x25BF, 23444 }, { 0x25C0, 10358 }, { 0x25C1, 23458 }, { 0x25C2, 10351 }, { 0x25C3, 23451 }, { 0x25C4, 10355 }, { 0x25C5, 23455 }, { 0x25C6, 10272 }, { 0x25C7, 23355 }, { 0x25C8, 23365 }, { 0x25C9, 40556 }, { 0x25CA, 40990 }, { 0x25CB, 23236 }, { 0x25CC, 31533 }, { 0x25CD, 30518 }, { 0x25CE, 45864 }, { 0x25CF, 10238 }, { 0x25D0, 30485 }, { 0x25D1, 30495 }, { 0x25D2, 30490 }, { 0x25D3, 30507 }, { 0x25D4, 30512 }, { 0x25D5, 30469 }, { 0x25D6, 9195 }, { 0x25D7, 21762 }, { 0x25D8, 40639 }, { 0x25D9, 40636 }, { 0x25DA, 23094 }, { 0x25DB, 21112 }, { 0x25DC, 23112 }, { 0x25DD, 23134 }, { 0x25DE, 21141 }, { 0x25DF, 21117 }, { 0x25E0, 23091 }, { 0x25E1, 21109 }, { 0x25E2, 10198 }, { 0x25E3, 10194 }, { 0x25E4, 10224 }, { 0x25E5, 10228 }, { 0x25E6, 23234 }, { 0x25E7, 36207 }, { 0x25E8, 36226 }, { 0x25E9, 36239 }, { 0x25EA, 36219 }, { 0x25EB, 23333 }, { 0x25EC, 23424 }, { 0x25ED, 69326 }, { 0x25EE, 69332 }, { 0x25EF, 14464 }, { 0x25F0, 23310 }, { 0x25F1, 23298 }, { 0x25F2, 23304 }, { 0x25F3, 23316 }, { 0x25F4, 23265 }, { 0x25F5, 23253 }, { 0x25F6, 23259 }, { 0x25F7, 23271 }, { 0x25F8, 23117 }, { 0x25F9, 23144 }, { 0x25FA, 21122 }, { 0x25FB, 23284 }, { 0x25FC, 10261 }, { 0x25FD, 23280 }, { 0x25FE, 10257 }, { 0x25FF, 21151 }, { 0x2600, 10141 }, { 0x2601, 10454 }, { 0x2602, 56004 }, { 0x2603, 43547 }, { 0x2604, 10460 }, { 0x2605, 10161 }, { 0x2606, 23185 }, { 0x2607, 64791 }, { 0x2608, 74480 }, { 0x2609, 7188 }, { 0x260A, 56109 }, { 0x260B, 66846 }, { 0x260C, 68615 }, { 0x260D, 67880 }, { 0x260E, 10319 }, { 0x260F, 23410 }, { 0x2610, 30232 }, { 0x2611, 30238 }, { 0x2612, 30234 }, { 0x2613, 43020 }, { 0x2614, 56005 }, { 0x2615, 5795 }, { 0x2616, 23219 }, { 0x2617, 10206 }, { 0x2618, 55522 }, { 0x2619, 55497 }, { 0x261A, 10154 }, { 0x261B, 10202 }, { 0x261C, 23181 }, { 0x261D, 23158 }, { 0x261E, 23215 }, { 0x261F, 23171 }, { 0x2620, 22476 }, { 0x2621, 38868 }, { 0x2622, 69274 }, { 0x2623, 56112 }, { 0x2624, 45865 }, { 0x2625, 8718 }, { 0x2626, 54931 }, { 0x2627, 5236 }, { 0x2628, 10462 }, { 0x2629, 10465 }, { 0x262A, 9715 }, { 0x262B, 10630 }, { 0x262C, 4009 }, { 0x262D, 31881 }, { 0x262E, 21733 }, { 0x262F, 8714 }, { 0x2630, 44529 }, { 0x2631, 44517 }, { 0x2632, 44514 }, { 0x2633, 44532 }, { 0x2634, 44520 }, { 0x2635, 44526 }, { 0x2636, 44535 }, { 0x2637, 44523 }, { 0x2638, 23155 }, { 0x2639, 23384 }, { 0x263A, 23373 }, { 0x263B, 10291 }, { 0x263C, 23164 }, { 0x263D, 10632 }, { 0x263E, 9132 }, { 0x263F, 41191 }, { 0x2640, 31767 }, { 0x2641, 10540 }, { 0x2642, 9580 }, { 0x2643, 40641 }, { 0x2644, 35810 }, { 0x2645, 37705 }, { 0x2646, 42827 }, { 0x2647, 21739 }, { 0x2648, 10114 }, { 0x2649, 37129 }, { 0x264A, 31790 }, { 0x264B, 30317 }, { 0x264C, 6030 }, { 0x264D, 23153 }, { 0x264E, 20857 }, { 0x264F, 55511 }, { 0x2650, 69278 }, { 0x2651, 57359 }, { 0x2652, 44719 }, { 0x2653, 35653 }, { 0x2654, 23191 }, { 0x2655, 23200 }, { 0x2656, 23197 }, { 0x2657, 23203 }, { 0x2658, 23206 }, { 0x2659, 23194 }, { 0x265A, 10167 }, { 0x265B, 10176 }, { 0x265C, 10173 }, { 0x265D, 10179 }, { 0x265E, 10182 }, { 0x265F, 10170 }, { 0x2660, 10221 }, { 0x2661, 23209 }, { 0x2662, 23357 }, { 0x2663, 10145 }, { 0x2664, 23231 }, { 0x2665, 10185 }, { 0x2666, 10274 }, { 0x2667, 23168 }, { 0x2668, 5793 }, { 0x2669, 42977 }, { 0x266A, 31704 }, { 0x266B, 30242 }, { 0x266C, 30245 }, { 0x266D, 21206 }, { 0x266E, 21212 }, { 0x266F, 21209 }, { 0x2670, 10084 }, { 0x2671, 9086 }, { 0x2672, 66308 }, { 0x2673, 65768 }, { 0x2674, 65773 }, { 0x2675, 65778 }, { 0x2676, 65783 }, { 0x2677, 65788 }, { 0x2678, 65793 }, { 0x2679, 65798 }, { 0x267A, 65803 }, { 0x267B, 10321 }, { 0x267C, 55452 }, { 0x267D, 75139 }, { 0x267E, 65753 }, { 0x267F, 68601 }, { 0x2680, 5768 }, { 0x2681, 5770 }, { 0x2682, 5772 }, { 0x2683, 5774 }, { 0x2684, 5776 }, { 0x2685, 5778 }, { 0x2686, 23238 }, { 0x2687, 23243 }, { 0x2688, 10251 }, { 0x2689, 10240 }, { 0x268A, 54868 }, { 0x268B, 54865 }, { 0x268C, 31212 }, { 0x268D, 31192 }, { 0x268E, 31196 }, { 0x268F, 31208 }, { 0x2690, 23175 }, { 0x2691, 10148 }, { 0x2692, 31878 }, { 0x2693, 23701 }, { 0x2694, 39792 }, { 0x2695, 22748 }, { 0x2696, 35811 }, { 0x2697, 37778 }, { 0x2698, 31778 }, { 0x2699, 9120 }, { 0x269A, 22745 }, { 0x269B, 8719 }, { 0x269C, 69423 }, { 0x269D, 54942 }, { 0x26A0, 44705 }, { 0x26A1, 9127 }, { 0x26A2, 40495 }, { 0x26A3, 40492 }, { 0x26A4, 69258 }, { 0x26A5, 9576 }, { 0x26A6, 9590 }, { 0x26A7, 9582 }, { 0x26A8, 56086 }, { 0x26A9, 67641 }, { 0x26AA, 35541 }, { 0x26AB, 35523 }, { 0x26AC, 35537 }, { 0x26AD, 53728 }, { 0x26AE, 40490 }, { 0x26AF, 66311 }, { 0x26B0, 30571 }, { 0x26B1, 40558 }, { 0x26B2, 35579 }, { 0x26B3, 10446 }, { 0x26B4, 35649 }, { 0x26B5, 9131 }, { 0x26B6, 23152 }, { 0x26B7, 30468 }, { 0x26B8, 10158 }, { 0x26B9, 43027 }, { 0x26BA, 69279 }, { 0x26BB, 55451 }, { 0x26BC, 75099 }, { 0x26C0, 23376 }, { 0x26C1, 23379 }, { 0x26C2, 10294 }, { 0x26C3, 10297 }, { 0x2701, 23120 }, { 0x2702, 10304 }, { 0x2703, 21130 }, { 0x2704, 23389 }, { 0x2706, 66042 }, { 0x2707, 9722 }, { 0x2708, 44716 }, { 0x2709, 50322 }, { 0x270C, 44703 }, { 0x270D, 44707 }, { 0x270E, 21138 }, { 0x270F, 35650 }, { 0x2710, 23131 }, { 0x2711, 23162 }, { 0x2712, 10139 }, { 0x2713, 10447 }, { 0x2714, 13551 }, { 0x2715, 75053 }, { 0x2716, 13671 }, { 0x2717, 30230 }, { 0x2718, 13593 }, { 0x2719, 54936 }, { 0x271A, 13565 }, { 0x271B, 9612 }, { 0x271C, 13530 }, { 0x271D, 14471 }, { 0x271E, 55515 }, { 0x271F, 54939 }, { 0x2720, 41189 }, { 0x2721, 9712 }, { 0x2722, 9109 }, { 0x2723, 9106 }, { 0x2724, 13526 }, { 0x2725, 9103 }, { 0x2726, 10150 }, { 0x2727, 23177 }, { 0x2729, 36465 }, { 0x272A, 39186 }, { 0x272B, 9608 }, { 0x272C, 10234 }, { 0x272D, 54933 }, { 0x272E, 13634 }, { 0x272F, 55330 }, { 0x2730, 55512 }, { 0x2731, 13632 }, { 0x2732, 9615 }, { 0x2733, 10543 }, { 0x2734, 10546 }, { 0x2735, 10550 }, { 0x2736, 7178 }, { 0x2737, 10554 }, { 0x2738, 13554 }, { 0x2739, 37701 }, { 0x273A, 43505 }, { 0x273B, 75114 }, { 0x273C, 9618 }, { 0x273D, 13704 }, { 0x273E, 7182 }, { 0x273F, 10300 }, { 0x2740, 23382 }, { 0x2741, 10559 }, { 0x2742, 38876 }, { 0x2743, 13707 }, { 0x2744, 65814 }, { 0x2745, 23005 }, { 0x2746, 13627 }, { 0x2747, 43552 }, { 0x2748, 13630 }, { 0x2749, 75051 }, { 0x274A, 10564 }, { 0x274B, 13560 }, { 0x274D, 55519 }, { 0x274F, 21159 }, { 0x2750, 23147 }, { 0x2751, 21146 }, { 0x2752, 23139 }, { 0x2756, 10282 }, { 0x2758, 20872 }, { 0x2759, 35544 }, { 0x275A, 13638 }, { 0x275B, 13620 }, { 0x275C, 13614 }, { 0x275D, 13607 }, { 0x275E, 13601 }, { 0x2761, 31164 }, { 0x2762, 13644 }, { 0x2763, 13568 }, { 0x2764, 13534 }, { 0x2765, 43008 }, { 0x2766, 31776 }, { 0x2767, 43013 }, { 0x2768, 35519 }, { 0x2769, 35531 }, { 0x276A, 35547 }, { 0x276B, 35552 }, { 0x276C, 35560 }, { 0x276D, 35565 }, { 0x276E, 13665 }, { 0x276F, 13679 }, { 0x2770, 13660 }, { 0x2771, 13674 }, { 0x2772, 20858 }, { 0x2773, 20864 }, { 0x2774, 35514 }, { 0x2775, 35526 }, { 0x2776, 40379 }, { 0x2777, 40389 }, { 0x2778, 40419 }, { 0x2779, 40399 }, { 0x277A, 40394 }, { 0x277B, 40384 }, { 0x277C, 40414 }, { 0x277D, 40409 }, { 0x277E, 40404 }, { 0x277F, 40424 }, { 0x2780, 40329 }, { 0x2781, 40339 }, { 0x2782, 40369 }, { 0x2783, 40349 }, { 0x2784, 40344 }, { 0x2785, 40334 }, { 0x2786, 40364 }, { 0x2787, 40359 }, { 0x2788, 40354 }, { 0x2789, 40374 }, { 0x278A, 40429 }, { 0x278B, 40441 }, { 0x278C, 40477 }, { 0x278D, 40453 }, { 0x278E, 40447 }, { 0x278F, 40435 }, { 0x2790, 40471 }, { 0x2791, 40465 }, { 0x2792, 40459 }, { 0x2793, 40483 }, { 0x2794, 13648 }, { 0x2798, 13583 }, { 0x2799, 13641 }, { 0x279A, 13579 }, { 0x279B, 50314 }, { 0x279C, 13652 }, { 0x279D, 75116 }, { 0x279E, 13711 }, { 0x279F, 31175 }, { 0x27A0, 13596 }, { 0x27A1, 10328 }, { 0x27A2, 43645 }, { 0x27A3, 43649 }, { 0x27A4, 10334 }, { 0x27A5, 13544 }, { 0x27A6, 13537 }, { 0x27A7, 22741 }, { 0x27A8, 13699 }, { 0x27A9, 74472 }, { 0x27AA, 69264 }, { 0x27AB, 68606 }, { 0x27AC, 69424 }, { 0x27AD, 13573 }, { 0x27AE, 13587 }, { 0x27AF, 42831 }, { 0x27B1, 42837 }, { 0x27B2, 38917 }, { 0x27B3, 75119 }, { 0x27B4, 75104 }, { 0x27B5, 75108 }, { 0x27B6, 75100 }, { 0x27B7, 13690 }, { 0x27B8, 13695 }, { 0x27B9, 13685 }, { 0x27BA, 75111 }, { 0x27BB, 13715 }, { 0x27BC, 74481 }, { 0x27BD, 13656 }, { 0x27BE, 74625 }, { 0x27C0, 23002 }, { 0x27C1, 23391 }, { 0x27C2, 75037 }, { 0x27C3, 9622 }, { 0x27C4, 9624 }, { 0x27C5, 9435 }, { 0x27C6, 21960 }, { 0x27C7, 271 }, { 0x27C8, 43004 }, { 0x27C9, 55653 }, { 0x27CA, 56011 }, { 0x27CC, 9530 }, { 0x27D0, 23360 }, { 0x27D1, 4016 }, { 0x27D2, 40537 }, { 0x27D3, 21133 }, { 0x27D4, 23107 }, { 0x27D5, 9251 }, { 0x27D6, 21844 }, { 0x27D7, 9116 }, { 0x27D8, 14454 }, { 0x27D9, 14457 }, { 0x27DA, 9139 }, { 0x27DB, 9135 }, { 0x27DC, 9433 }, { 0x27DD, 9527 }, { 0x27DE, 9515 }, { 0x27DF, 328 }, { 0x27E0, 40991 }, { 0x27E1, 23429 }, { 0x27E2, 23432 }, { 0x27E3, 23438 }, { 0x27E4, 23339 }, { 0x27E5, 23344 }, { 0x27E6, 71159 }, { 0x27E7, 71183 }, { 0x27E8, 71155 }, { 0x27E9, 71179 }, { 0x27EA, 71170 }, { 0x27EB, 71194 }, { 0x27EC, 71164 }, { 0x27ED, 71188 }, { 0x27EE, 71175 }, { 0x27EF, 71199 }, { 0x27F0, 44694 }, { 0x27F1, 63375 }, { 0x27F2, 74496 }, { 0x27F3, 57374 }, { 0x27F4, 21810 }, { 0x27F5, 9532 }, { 0x27F6, 9554 }, { 0x27F7, 9518 }, { 0x27F8, 9540 }, { 0x27F9, 9562 }, { 0x27FA, 9522 }, { 0x27FB, 9535 }, { 0x27FC, 9557 }, { 0x27FD, 9544 }, { 0x27FE, 9566 }, { 0x27FF, 9572 }, { 0x2800, 38100 }, { 0x2801, 38103 }, { 0x2802, 38106 }, { 0x2803, 38127 }, { 0x2804, 38109 }, { 0x2805, 38130 }, { 0x2806, 38148 }, { 0x2807, 38211 }, { 0x2808, 38112 }, { 0x2809, 38133 }, { 0x280A, 38151 }, { 0x280B, 38214 }, { 0x280C, 38166 }, { 0x280D, 38229 }, { 0x280E, 38274 }, { 0x280F, 38379 }, { 0x2810, 38115 }, { 0x2811, 38136 }, { 0x2812, 38154 }, { 0x2813, 38217 }, { 0x2814, 38169 }, { 0x2815, 38232 }, { 0x2816, 38277 }, { 0x2817, 38382 }, { 0x2818, 38181 }, { 0x2819, 38244 }, { 0x281A, 38289 }, { 0x281B, 38394 }, { 0x281C, 38319 }, { 0x281D, 38424 }, { 0x281E, 38484 }, { 0x281F, 38589 }, { 0x2820, 38118 }, { 0x2821, 38139 }, { 0x2822, 38157 }, { 0x2823, 38220 }, { 0x2824, 38172 }, { 0x2825, 38235 }, { 0x2826, 38280 }, { 0x2827, 38385 }, { 0x2828, 38184 }, { 0x2829, 38247 }, { 0x282A, 38292 }, { 0x282B, 38397 }, { 0x282C, 38322 }, { 0x282D, 38427 }, { 0x282E, 38487 }, { 0x282F, 38592 }, { 0x2830, 38193 }, { 0x2831, 38256 }, { 0x2832, 38301 }, { 0x2833, 38406 }, { 0x2834, 38331 }, { 0x2835, 38436 }, { 0x2836, 38496 }, { 0x2837, 38601 }, { 0x2838, 38349 }, { 0x2839, 38454 }, { 0x283A, 38514 }, { 0x283B, 38619 }, { 0x283C, 38544 }, { 0x283D, 38649 }, { 0x283E, 38694 }, { 0x283F, 38757 }, { 0x2840, 38121 }, { 0x2841, 38142 }, { 0x2842, 38160 }, { 0x2843, 38223 }, { 0x2844, 38175 }, { 0x2845, 38238 }, { 0x2846, 38283 }, { 0x2847, 38388 }, { 0x2848, 38187 }, { 0x2849, 38250 }, { 0x284A, 38295 }, { 0x284B, 38400 }, { 0x284C, 38325 }, { 0x284D, 38430 }, { 0x284E, 38490 }, { 0x284F, 38595 }, { 0x2850, 38196 }, { 0x2851, 38259 }, { 0x2852, 38304 }, { 0x2853, 38409 }, { 0x2854, 38334 }, { 0x2855, 38439 }, { 0x2856, 38499 }, { 0x2857, 38604 }, { 0x2858, 38352 }, { 0x2859, 38457 }, { 0x285A, 38517 }, { 0x285B, 38622 }, { 0x285C, 38547 }, { 0x285D, 38652 }, { 0x285E, 38697 }, { 0x285F, 38760 }, { 0x2860, 38202 }, { 0x2861, 38265 }, { 0x2862, 38310 }, { 0x2863, 38415 }, { 0x2864, 38340 }, { 0x2865, 38445 }, { 0x2866, 38505 }, { 0x2867, 38610 }, { 0x2868, 38358 }, { 0x2869, 38463 }, { 0x286A, 38523 }, { 0x286B, 38628 }, { 0x286C, 38553 }, { 0x286D, 38658 }, { 0x286E, 38703 }, { 0x286F, 38766 }, { 0x2870, 38367 }, { 0x2871, 38472 }, { 0x2872, 38532 }, { 0x2873, 38637 }, { 0x2874, 38562 }, { 0x2875, 38667 }, { 0x2876, 38712 }, { 0x2877, 38775 }, { 0x2878, 38574 }, { 0x2879, 38679 }, { 0x287A, 38724 }, { 0x287B, 38787 }, { 0x287C, 38739 }, { 0x287D, 38802 }, { 0x287E, 38820 }, { 0x287F, 38841 }, { 0x2880, 38124 }, { 0x2881, 38145 }, { 0x2882, 38163 }, { 0x2883, 38226 }, { 0x2884, 38178 }, { 0x2885, 38241 }, { 0x2886, 38286 }, { 0x2887, 38391 }, { 0x2888, 38190 }, { 0x2889, 38253 }, { 0x288A, 38298 }, { 0x288B, 38403 }, { 0x288C, 38328 }, { 0x288D, 38433 }, { 0x288E, 38493 }, { 0x288F, 38598 }, { 0x2890, 38199 }, { 0x2891, 38262 }, { 0x2892, 38307 }, { 0x2893, 38412 }, { 0x2894, 38337 }, { 0x2895, 38442 }, { 0x2896, 38502 }, { 0x2897, 38607 }, { 0x2898, 38355 }, { 0x2899, 38460 }, { 0x289A, 38520 }, { 0x289B, 38625 }, { 0x289C, 38550 }, { 0x289D, 38655 }, { 0x289E, 38700 }, { 0x289F, 38763 }, { 0x28A0, 38205 }, { 0x28A1, 38268 }, { 0x28A2, 38313 }, { 0x28A3, 38418 }, { 0x28A4, 38343 }, { 0x28A5, 38448 }, { 0x28A6, 38508 }, { 0x28A7, 38613 }, { 0x28A8, 38361 }, { 0x28A9, 38466 }, { 0x28AA, 38526 }, { 0x28AB, 38631 }, { 0x28AC, 38556 }, { 0x28AD, 38661 }, { 0x28AE, 38706 }, { 0x28AF, 38769 }, { 0x28B0, 38370 }, { 0x28B1, 38475 }, { 0x28B2, 38535 }, { 0x28B3, 38640 }, { 0x28B4, 38565 }, { 0x28B5, 38670 }, { 0x28B6, 38715 }, { 0x28B7, 38778 }, { 0x28B8, 38577 }, { 0x28B9, 38682 }, { 0x28BA, 38727 }, { 0x28BB, 38790 }, { 0x28BC, 38742 }, { 0x28BD, 38805 }, { 0x28BE, 38823 }, { 0x28BF, 38844 }, { 0x28C0, 38208 }, { 0x28C1, 38271 }, { 0x28C2, 38316 }, { 0x28C3, 38421 }, { 0x28C4, 38346 }, { 0x28C5, 38451 }, { 0x28C6, 38511 }, { 0x28C7, 38616 }, { 0x28C8, 38364 }, { 0x28C9, 38469 }, { 0x28CA, 38529 }, { 0x28CB, 38634 }, { 0x28CC, 38559 }, { 0x28CD, 38664 }, { 0x28CE, 38709 }, { 0x28CF, 38772 }, { 0x28D0, 38373 }, { 0x28D1, 38478 }, { 0x28D2, 38538 }, { 0x28D3, 38643 }, { 0x28D4, 38568 }, { 0x28D5, 38673 }, { 0x28D6, 38718 }, { 0x28D7, 38781 }, { 0x28D8, 38580 }, { 0x28D9, 38685 }, { 0x28DA, 38730 }, { 0x28DB, 38793 }, { 0x28DC, 38745 }, { 0x28DD, 38808 }, { 0x28DE, 38826 }, { 0x28DF, 38847 }, { 0x28E0, 38376 }, { 0x28E1, 38481 }, { 0x28E2, 38541 }, { 0x28E3, 38646 }, { 0x28E4, 38571 }, { 0x28E5, 38676 }, { 0x28E6, 38721 }, { 0x28E7, 38784 }, { 0x28E8, 38583 }, { 0x28E9, 38688 }, { 0x28EA, 38733 }, { 0x28EB, 38796 }, { 0x28EC, 38748 }, { 0x28ED, 38811 }, { 0x28EE, 38829 }, { 0x28EF, 38850 }, { 0x28F0, 38586 }, { 0x28F1, 38691 }, { 0x28F2, 38736 }, { 0x28F3, 38799 }, { 0x28F4, 38751 }, { 0x28F5, 38814 }, { 0x28F6, 38832 }, { 0x28F7, 38853 }, { 0x28F8, 38754 }, { 0x28F9, 38817 }, { 0x28FA, 38835 }, { 0x28FB, 38856 }, { 0x28FC, 38838 }, { 0x28FD, 38859 }, { 0x28FE, 38862 }, { 0x28FF, 38865 }, { 0x2900, 68309 }, { 0x2901, 68302 }, { 0x2902, 64491 }, { 0x2903, 68156 }, { 0x2904, 9303 }, { 0x2905, 68275 }, { 0x2906, 64481 }, { 0x2907, 68146 }, { 0x2908, 63281 }, { 0x2909, 44567 }, { 0x290A, 44631 }, { 0x290B, 63309 }, { 0x290C, 64474 }, { 0x290D, 68139 }, { 0x290E, 64503 }, { 0x290F, 68168 }, { 0x2910, 68315 }, { 0x2911, 68066 }, { 0x2912, 44544 }, { 0x2913, 63253 }, { 0x2914, 68054 }, { 0x2915, 68046 }, { 0x2916, 68280 }, { 0x2917, 68294 }, { 0x2918, 68285 }, { 0x2919, 64608 }, { 0x291A, 68273 }, { 0x291B, 64497 }, { 0x291C, 68162 }, { 0x291D, 64340 }, { 0x291E, 67998 }, { 0x291F, 64349 }, { 0x2920, 68007 }, { 0x2921, 21318 }, { 0x2922, 21271 }, { 0x2923, 21345 }, { 0x2924, 21287 }, { 0x2925, 22689 }, { 0x2926, 22723 }, { 0x2927, 21338 }, { 0x2928, 21280 }, { 0x2929, 22682 }, { 0x292A, 22716 }, { 0x292B, 35805 }, { 0x292C, 40551 }, { 0x292D, 22694 }, { 0x292E, 21299 }, { 0x292F, 40545 }, { 0x2930, 35799 }, { 0x2931, 21292 }, { 0x2932, 21350 }, { 0x2933, 10070 }, { 0x2934, 10127 }, { 0x2935, 10133 }, { 0x2936, 10115 }, { 0x2937, 10121 }, { 0x2938, 67981 }, { 0x2939, 64314 }, { 0x293A, 7721 }, { 0x293B, 30248 }, { 0x293C, 7715 }, { 0x293D, 7725 }, { 0x293E, 21154 }, { 0x293F, 21125 }, { 0x2940, 74492 }, { 0x2941, 57370 }, { 0x2942, 68086 }, { 0x2943, 64423 }, { 0x2944, 22470 }, { 0x2945, 68037 }, { 0x2946, 64379 }, { 0x2947, 68116 }, { 0x2948, 9279 }, { 0x2949, 44697 }, { 0x294A, 9167 }, { 0x294B, 9174 }, { 0x294C, 289 }, { 0x294D, 282 }, { 0x294E, 9160 }, { 0x294F, 296 }, { 0x2950, 9181 }, { 0x2951, 275 }, { 0x2952, 64515 }, { 0x2953, 68180 }, { 0x2954, 44670 }, { 0x2955, 63351 }, { 0x2956, 64559 }, { 0x2957, 68224 }, { 0x2958, 44634 }, { 0x2959, 63315 }, { 0x295A, 64522 }, { 0x295B, 68187 }, { 0x295C, 44677 }, { 0x295D, 63358 }, { 0x295E, 64566 }, { 0x295F, 68231 }, { 0x2960, 44641 }, { 0x2961, 63322 }, { 0x2962, 64537 }, { 0x2963, 44648 }, { 0x2964, 68213 }, { 0x2965, 63340 }, { 0x2966, 64548 }, { 0x2967, 64573 }, { 0x2968, 68202 }, { 0x2969, 68238 }, { 0x296A, 64529 }, { 0x296B, 64584 }, { 0x296C, 68194 }, { 0x296D, 68249 }, { 0x296E, 44659 }, { 0x296F, 63329 }, { 0x2970, 21882 }, { 0x2971, 31756 }, { 0x2972, 23038 }, { 0x2973, 64429 }, { 0x2974, 68092 }, { 0x2975, 68097 }, { 0x2976, 64759 }, { 0x2977, 64461 }, { 0x2978, 69536 }, { 0x2979, 36531 }, { 0x297A, 64457 }, { 0x297B, 55638 }, { 0x297C, 9188 }, { 0x297D, 21759 }, { 0x297E, 323 }, { 0x297F, 9070 }, { 0x2980, 37651 }, { 0x2981, 26 }, { 0x2982, 29 }, { 0x2983, 9326 }, { 0x2984, 21847 }, { 0x2985, 9347 }, { 0x2986, 21868 }, { 0x2987, 16 }, { 0x2988, 37 }, { 0x2989, 21 }, { 0x298A, 42 }, { 0x298B, 9409 }, { 0x298C, 21936 }, { 0x298D, 9388 }, { 0x298E, 21923 }, { 0x298F, 9396 }, { 0x2990, 21915 }, { 0x2991, 9207 }, { 0x2992, 21791 }, { 0x2993, 9144 }, { 0x2994, 21747 }, { 0x2995, 31554 }, { 0x2996, 31580 }, { 0x2997, 9222 }, { 0x2998, 21815 }, { 0x2999, 31531 }, { 0x299A, 56093 }, { 0x299B, 53830 }, { 0x299C, 21796 }, { 0x299D, 53834 }, { 0x299E, 10107 }, { 0x299F, 10102 }, { 0x29A0, 65821 }, { 0x29A1, 65817 }, { 0x29A2, 37674 }, { 0x29A3, 55459 }, { 0x29A4, 10111 }, { 0x29A5, 55461 }, { 0x29A6, 42843 }, { 0x29A7, 42847 }, { 0x29A8, 53746 }, { 0x29A9, 53734 }, { 0x29AA, 53770 }, { 0x29AB, 53758 }, { 0x29AC, 53806 }, { 0x29AD, 53782 }, { 0x29AE, 53818 }, { 0x29AF, 53794 }, { 0x29B0, 55465 }, { 0x29B1, 10590 }, { 0x29B2, 10584 }, { 0x29B3, 10578 }, { 0x29B4, 10572 }, { 0x29B5, 30522 }, { 0x29B6, 39617 }, { 0x29B7, 39612 }, { 0x29B8, 39459 }, { 0x29B9, 39776 }, { 0x29BA, 30530 }, { 0x29BB, 30526 }, { 0x29BC, 39784 }, { 0x29BD, 333 }, { 0x29BE, 39189 }, { 0x29BF, 39192 }, { 0x29C0, 39767 }, { 0x29C1, 39774 }, { 0x29C2, 30500 }, { 0x29C3, 30477 }, { 0x29C4, 43569 }, { 0x29C5, 43575 }, { 0x29C6, 43579 }, { 0x29C7, 43564 }, { 0x29C8, 43573 }, { 0x29C9, 7778 }, { 0x29CA, 55898 }, { 0x29CB, 55907 }, { 0x29CC, 4 }, { 0x29CD, 55902 }, { 0x29CE, 21974 }, { 0x29CF, 9447 }, { 0x29D0, 56016 }, { 0x29D1, 30295 }, { 0x29D2, 30300 }, { 0x29D3, 10232 }, { 0x29D4, 23043 }, { 0x29D5, 23048 }, { 0x29D6, 23406 }, { 0x29D7, 10312 }, { 0x29D8, 9428 }, { 0x29D9, 21955 }, { 0x29DA, 9361 }, { 0x29DB, 21888 }, { 0x29DC, 67665 }, { 0x29DD, 7712 }, { 0x29DE, 53301 }, { 0x29DF, 69403 }, { 0x29E0, 36275 }, { 0x29E1, 64303 }, { 0x29E2, 43172 }, { 0x29E3, 31708 }, { 0x29E4, 31713 }, { 0x29E5, 64294 }, { 0x29E6, 31794 }, { 0x29E7, 75047 }, { 0x29E8, 74585 }, { 0x29E9, 74591 }, { 0x29EA, 10277 }, { 0x29EB, 10289 }, { 0x29EC, 23248 }, { 0x29ED, 10246 }, { 0x29EE, 69417 }, { 0x29EF, 69408 }, { 0x29F0, 69420 }, { 0x29F1, 69411 }, { 0x29F2, 69414 }, { 0x29F3, 69405 }, { 0x29F4, 74476 }, { 0x29F5, 43001 }, { 0x29F6, 43549 }, { 0x29F7, 42996 }, { 0x29F8, 4385 }, { 0x29F9, 4382 }, { 0x29FA, 31559 }, { 0x29FB, 37614 }, { 0x29FC, 74608 }, { 0x29FD, 75090 }, { 0x29FE, 10053 }, { 0x29FF, 9598 }, { 0x2A00, 21242 }, { 0x2A01, 21246 }, { 0x2A02, 21250 }, { 0x2A03, 21220 }, { 0x2A04, 21225 }, { 0x2A05, 21238 }, { 0x2A06, 21234 }, { 0x2A07, 7785 }, { 0x2A08, 7781 }, { 0x2A09, 21215 }, { 0x2A0A, 35573 }, { 0x2A0B, 65861 }, { 0x2A0C, 65763 }, { 0x2A0D, 31773 }, { 0x2A0E, 53314 }, { 0x2A0F, 53338 }, { 0x2A10, 68611 }, { 0x2A11, 74503 }, { 0x2A12, 9491 }, { 0x2A13, 9498 }, { 0x2A14, 9485 }, { 0x2A15, 53333 }, { 0x2A16, 67973 }, { 0x2A17, 53324 }, { 0x2A18, 53307 }, { 0x2A19, 53330 }, { 0x2A1A, 53311 }, { 0x2A1B, 53318 }, { 0x2A1C, 53321 }, { 0x2A1D, 9130 }, { 0x2A1E, 14460 }, { 0x2A1F, 59 }, { 0x2A20, 51 }, { 0x2A21, 55 }, { 0x2A22, 9661 }, { 0x2A23, 9682 }, { 0x2A24, 9667 }, { 0x2A25, 9651 }, { 0x2A26, 9672 }, { 0x2A27, 9677 }, { 0x2A28, 9656 }, { 0x2A29, 21189 }, { 0x2A2A, 21184 }, { 0x2A2B, 21199 }, { 0x2A2C, 21194 }, { 0x2A2D, 9635 }, { 0x2A2E, 9641 }, { 0x2A2F, 37706 }, { 0x2A30, 75078 }, { 0x2A31, 75083 }, { 0x2A32, 68589 }, { 0x2A33, 22668 }, { 0x2A34, 75057 }, { 0x2A35, 75063 }, { 0x2A36, 39778 }, { 0x2A37, 75069 }, { 0x2A38, 39465 }, { 0x2A39, 9647 }, { 0x2A3A, 21180 }, { 0x2A3B, 75074 }, { 0x2A3C, 53344 }, { 0x2A3D, 65810 }, { 0x2A3E, 63 }, { 0x2A3F, 69339 }, { 0x2A40, 69571 }, { 0x2A41, 23059 }, { 0x2A42, 23067 }, { 0x2A43, 69578 }, { 0x2A44, 69574 }, { 0x2A45, 23063 }, { 0x2A46, 23075 }, { 0x2A47, 69586 }, { 0x2A48, 23070 }, { 0x2A49, 69581 }, { 0x2A4A, 23078 }, { 0x2A4B, 69589 }, { 0x2A4C, 30542 }, { 0x2A4D, 30567 }, { 0x2A4E, 31603 }, { 0x2A4F, 31600 }, { 0x2A50, 30546 }, { 0x2A51, 40961 }, { 0x2A52, 40929 }, { 0x2A53, 31655 }, { 0x2A54, 31652 }, { 0x2A55, 7801 }, { 0x2A56, 7797 }, { 0x2A57, 43534 }, { 0x2A58, 43537 }, { 0x2A59, 40954 }, { 0x2A5A, 40976 }, { 0x2A5B, 40944 }, { 0x2A5C, 40985 }, { 0x2A5D, 40949 }, { 0x2A5E, 40966 }, { 0x2A5F, 40981 }, { 0x2A60, 40971 }, { 0x2A61, 22483 }, { 0x2A62, 40934 }, { 0x2A63, 40939 }, { 0x2A64, 47 }, { 0x2A65, 33 }, { 0x2A66, 31721 }, { 0x2A67, 64299 }, { 0x2A68, 37655 }, { 0x2A69, 37662 }, { 0x2A6A, 23023 }, { 0x2A6B, 23028 }, { 0x2A6C, 43192 }, { 0x2A6D, 58345 }, { 0x2A6E, 31761 }, { 0x2A6F, 23695 }, { 0x2A70, 74511 }, { 0x2A71, 31741 }, { 0x2A72, 9688 }, { 0x2A73, 31746 }, { 0x2A74, 31567 }, { 0x2A75, 7793 }, { 0x2A76, 22998 }, { 0x2A77, 31726 }, { 0x2A78, 67228 }, { 0x2A79, 64731 }, { 0x2A7A, 69502 }, { 0x2A7B, 64735 }, { 0x2A7C, 69506 }, { 0x2A7D, 64662 }, { 0x2A7E, 69433 }, { 0x2A7F, 64684 }, { 0x2A80, 69455 }, { 0x2A81, 64667 }, { 0x2A82, 69438 }, { 0x2A83, 64675 }, { 0x2A84, 69446 }, { 0x2A85, 64696 }, { 0x2A86, 69470 }, { 0x2A87, 64706 }, { 0x2A88, 69477 }, { 0x2A89, 64702 }, { 0x2A8A, 69473 }, { 0x2A8B, 64763 }, { 0x2A8C, 69540 }, { 0x2A8D, 64740 }, { 0x2A8E, 69511 }, { 0x2A8F, 64745 }, { 0x2A90, 69516 }, { 0x2A91, 64769 }, { 0x2A92, 69530 }, { 0x2A93, 64750 }, { 0x2A94, 69521 }, { 0x2A95, 43508 }, { 0x2A96, 43521 }, { 0x2A97, 43513 }, { 0x2A98, 43526 }, { 0x2A99, 68620 }, { 0x2A9A, 68625 }, { 0x2A9B, 68630 }, { 0x2A9C, 68636 }, { 0x2A9D, 43174 }, { 0x2A9E, 43177 }, { 0x2A9F, 43180 }, { 0x2AA0, 43186 }, { 0x2AA1, 31589 }, { 0x2AA2, 31597 }, { 0x2AA3, 31592 }, { 0x2AA4, 69565 }, { 0x2AA5, 69551 }, { 0x2AA6, 64780 }, { 0x2AA7, 69554 }, { 0x2AA8, 64784 }, { 0x2AA9, 69558 }, { 0x2AAA, 43540 }, { 0x2AAB, 34099 }, { 0x2AAC, 43542 }, { 0x2AAD, 34101 }, { 0x2AAE, 31736 }, { 0x2AAF, 55374 }, { 0x2AB0, 55568 }, { 0x2AB1, 55368 }, { 0x2AB2, 55562 }, { 0x2AB3, 55364 }, { 0x2AB4, 55558 }, { 0x2AB5, 55348 }, { 0x2AB6, 55542 }, { 0x2AB7, 55359 }, { 0x2AB8, 55553 }, { 0x2AB9, 55353 }, { 0x2ABA, 55547 }, { 0x2ABB, 31666 }, { 0x2ABC, 31671 }, { 0x2ABD, 36512 }, { 0x2ABE, 55619 }, { 0x2ABF, 36515 }, { 0x2AC0, 55622 }, { 0x2AC1, 36520 }, { 0x2AC2, 55627 }, { 0x2AC3, 36476 }, { 0x2AC4, 55583 }, { 0x2AC5, 36507 }, { 0x2AC6, 55614 }, { 0x2AC7, 36496 }, { 0x2AC8, 55603 }, { 0x2AC9, 36501 }, { 0x2ACA, 55608 }, { 0x2ACB, 36490 }, { 0x2ACC, 55597 }, { 0x2ACD, 36177 }, { 0x2ACE, 36346 }, { 0x2ACF, 30553 }, { 0x2AD0, 30560 }, { 0x2AD1, 30555 }, { 0x2AD2, 30562 }, { 0x2AD3, 36528 }, { 0x2AD4, 55632 }, { 0x2AD5, 36525 }, { 0x2AD6, 55635 }, { 0x2AD7, 55650 }, { 0x2AD8, 55642 }, { 0x2AD9, 40541 }, { 0x2ADA, 65757 }, { 0x2ADB, 69324 }, { 0x2ADC, 40557 }, { 0x2ADD, 67879 }, { 0x2ADE, 22467 }, { 0x2ADF, 22459 }, { 0x2AE0, 22444 }, { 0x2AE1, 75038 }, { 0x2AE2, 56026 }, { 0x2AE3, 31675 }, { 0x2AE4, 56021 }, { 0x2AE5, 31680 }, { 0x2AE6, 9507 }, { 0x2AE7, 22462 }, { 0x2AE8, 22447 }, { 0x2AE9, 22452 }, { 0x2AEA, 31551 }, { 0x2AEB, 31545 }, { 0x2AEC, 31606 }, { 0x2AED, 55483 }, { 0x2AEE, 9026 }, { 0x2AEF, 56068 }, { 0x2AF0, 56073 }, { 0x2AF1, 9075 }, { 0x2AF2, 54952 }, { 0x2AF3, 54948 }, { 0x2AF4, 37646 }, { 0x2AF5, 37635 }, { 0x2AF6, 37616 }, { 0x2AF7, 37623 }, { 0x2AF8, 37626 }, { 0x2AF9, 68642 }, { 0x2AFA, 68648 }, { 0x2AFB, 37629 }, { 0x2AFC, 14466 }, { 0x2AFD, 31661 }, { 0x2AFE, 23397 }, { 0x2AFF, 21230 }, { 0x2B00, 21310 }, { 0x2B01, 21361 }, { 0x2B02, 22705 }, { 0x2B03, 22732 }, { 0x2B04, 9289 }, { 0x2B05, 64465 }, { 0x2B06, 44578 }, { 0x2B07, 63292 }, { 0x2B08, 21306 }, { 0x2B09, 21357 }, { 0x2B0A, 22701 }, { 0x2B0B, 22728 }, { 0x2B0C, 9285 }, { 0x2B0D, 311 }, { 0x2B0E, 68024 }, { 0x2B0F, 68019 }, { 0x2B10, 64366 }, { 0x2B11, 64361 }, { 0x2B12, 36202 }, { 0x2B13, 36261 }, { 0x2B14, 36254 }, { 0x2B15, 36212 }, { 0x2B16, 40312 }, { 0x2B17, 40317 }, { 0x2B18, 40307 }, { 0x2B19, 40322 }, { 0x2B1A, 31537 }, { 0x2B1B, 10191 }, { 0x2B1C, 23212 }, { 0x2B1D, 10163 }, { 0x2B1E, 23187 }, { 0x2B1F, 10302 }, { 0x2B20, 23387 }, { 0x2B21, 23371 }, { 0x2B22, 10287 }, { 0x2B23, 67658 }, { 0x2B24, 10188 }, { 0x2B25, 10264 }, { 0x2B26, 23287 }, { 0x2B27, 10267 }, { 0x2B28, 23290 }, { 0x2B29, 10215 }, { 0x2B2A, 10218 }, { 0x2B2B, 23228 }, { 0x2B2C, 10325 }, { 0x2B2D, 23414 }, { 0x2B2E, 10306 }, { 0x2B2F, 23400 }, { 0x2B30, 9212 }, { 0x2B31, 22992 }, { 0x2B32, 9217 }, { 0x2B33, 9550 }, { 0x2B34, 64644 }, { 0x2B35, 64637 }, { 0x2B36, 64610 }, { 0x2B37, 64650 }, { 0x2B38, 64403 }, { 0x2B39, 64396 }, { 0x2B3A, 64388 }, { 0x2B3B, 64615 }, { 0x2B3C, 64629 }, { 0x2B3D, 64620 }, { 0x2B3E, 64453 }, { 0x2B3F, 10065 }, { 0x2B40, 31751 }, { 0x2B41, 42982 }, { 0x2B42, 64446 }, { 0x2B43, 68124 }, { 0x2B44, 68120 }, { 0x2B45, 64605 }, { 0x2B46, 68270 }, { 0x2B47, 42988 }, { 0x2B48, 68109 }, { 0x2B49, 23033 }, { 0x2B4A, 64434 }, { 0x2B4B, 64440 }, { 0x2B4C, 68103 }, { 0x2B50, 23277 }, { 0x2B51, 10209 }, { 0x2B52, 23222 }, { 0x2B53, 10370 }, { 0x2B54, 23470 }, { 0x2C00, 67450 }, { 0x2C01, 67479 }, { 0x2C02, 67503 }, { 0x2C03, 67579 }, { 0x2C04, 67519 }, { 0x2C05, 67555 }, { 0x2C06, 67621 }, { 0x2C07, 67523 }, { 0x2C08, 67575 }, { 0x2C09, 67491 }, { 0x2C0A, 67583 }, { 0x2C0B, 67434 }, { 0x2C0C, 67563 }, { 0x2C0D, 67495 }, { 0x2C0E, 67604 }, { 0x2C0F, 67608 }, { 0x2C10, 67531 }, { 0x2C11, 67459 }, { 0x2C12, 67567 }, { 0x2C13, 67535 }, { 0x2C14, 67539 }, { 0x2C15, 67571 }, { 0x2C16, 67475 }, { 0x2C17, 67527 }, { 0x2C18, 67487 }, { 0x2C19, 67463 }, { 0x2C1A, 67438 }, { 0x2C1B, 67499 }, { 0x2C1C, 67471 }, { 0x2C1D, 67559 }, { 0x2C1E, 67467 }, { 0x2C1F, 67515 }, { 0x2C20, 67511 }, { 0x2C21, 67507 }, { 0x2C22, 67616 }, { 0x2C23, 67446 }, { 0x2C24, 67543 }, { 0x2C25, 67548 }, { 0x2C26, 67442 }, { 0x2C27, 67594 }, { 0x2C28, 67454 }, { 0x2C29, 67588 }, { 0x2C2A, 67483 }, { 0x2C2B, 67600 }, { 0x2C2C, 67612 }, { 0x2C2D, 67630 }, { 0x2C2E, 67625 }, { 0x2C30, 67249 }, { 0x2C31, 67278 }, { 0x2C32, 67302 }, { 0x2C33, 67378 }, { 0x2C34, 67318 }, { 0x2C35, 67354 }, { 0x2C36, 67420 }, { 0x2C37, 67322 }, { 0x2C38, 67374 }, { 0x2C39, 67290 }, { 0x2C3A, 67382 }, { 0x2C3B, 67233 }, { 0x2C3C, 67362 }, { 0x2C3D, 67294 }, { 0x2C3E, 67403 }, { 0x2C3F, 67407 }, { 0x2C40, 67330 }, { 0x2C41, 67258 }, { 0x2C42, 67366 }, { 0x2C43, 67334 }, { 0x2C44, 67338 }, { 0x2C45, 67370 }, { 0x2C46, 67274 }, { 0x2C47, 67326 }, { 0x2C48, 67286 }, { 0x2C49, 67262 }, { 0x2C4A, 67237 }, { 0x2C4B, 67298 }, { 0x2C4C, 67270 }, { 0x2C4D, 67358 }, { 0x2C4E, 67266 }, { 0x2C4F, 67314 }, { 0x2C50, 67310 }, { 0x2C51, 67306 }, { 0x2C52, 67415 }, { 0x2C53, 67245 }, { 0x2C54, 67342 }, { 0x2C55, 67347 }, { 0x2C56, 67241 }, { 0x2C57, 67393 }, { 0x2C58, 67253 }, { 0x2C59, 67387 }, { 0x2C5A, 67282 }, { 0x2C5B, 67399 }, { 0x2C5C, 67411 }, { 0x2C5D, 67429 }, { 0x2C5E, 67424 }, { 0x2C60, 19214 }, { 0x2C61, 15577 }, { 0x2C62, 19228 }, { 0x2C63, 19682 }, { 0x2C64, 19762 }, { 0x2C65, 14629 }, { 0x2C66, 16472 }, { 0x2C67, 18936 }, { 0x2C68, 15276 }, { 0x2C69, 19148 }, { 0x2C6A, 15507 }, { 0x2C6B, 20410 }, { 0x2C6C, 17019 }, { 0x2C6D, 20597 }, { 0x2C6E, 19272 }, { 0x2C6F, 20649 }, { 0x2C71, 16751 }, { 0x2C72, 20235 }, { 0x2C73, 16796 }, { 0x2C74, 16739 }, { 0x2C75, 20547 }, { 0x2C76, 17312 }, { 0x2C77, 17839 }, { 0x2C78, 14974 }, { 0x2C79, 17623 }, { 0x2C7A, 15813 }, { 0x2C7B, 18125 }, { 0x2C7C, 20797 }, { 0x2C7D, 54684 }, { 0x2C80, 31044 }, { 0x2C81, 30751 }, { 0x2C82, 31072 }, { 0x2C83, 30779 }, { 0x2C84, 31084 }, { 0x2C85, 30791 }, { 0x2C86, 31080 }, { 0x2C87, 30787 }, { 0x2C88, 30922 }, { 0x2C89, 30629 }, { 0x2C8A, 31036 }, { 0x2C8B, 30743 }, { 0x2C8C, 31076 }, { 0x2C8D, 30783 }, { 0x2C8E, 31048 }, { 0x2C8F, 30755 }, { 0x2C90, 31108 }, { 0x2C91, 30815 }, { 0x2C92, 31088 }, { 0x2C93, 30795 }, { 0x2C94, 31056 }, { 0x2C95, 30763 }, { 0x2C96, 31092 }, { 0x2C97, 30799 }, { 0x2C98, 30898 }, { 0x2C99, 30605 }, { 0x2C9A, 30902 }, { 0x2C9B, 30609 }, { 0x2C9C, 30934 }, { 0x2C9D, 30641 }, { 0x2C9E, 30890 }, { 0x2C9F, 30597 }, { 0x2CA0, 30906 }, { 0x2CA1, 30613 }, { 0x2CA2, 30910 }, { 0x2CA3, 30617 }, { 0x2CA4, 31068 }, { 0x2CA5, 30775 }, { 0x2CA6, 31040 }, { 0x2CA7, 30747 }, { 0x2CA8, 30914 }, { 0x2CA9, 30621 }, { 0x2CAA, 30894 }, { 0x2CAB, 30601 }, { 0x2CAC, 30930 }, { 0x2CAD, 30637 }, { 0x2CAE, 31032 }, { 0x2CAF, 30739 }, { 0x2CB0, 31028 }, { 0x2CB1, 30735 }, { 0x2CB2, 31132 }, { 0x2CB3, 30839 }, { 0x2CB4, 30944 }, { 0x2CB5, 30651 }, { 0x2CB6, 31152 }, { 0x2CB7, 30859 }, { 0x2CB8, 31142 }, { 0x2CB9, 30849 }, { 0x2CBA, 31127 }, { 0x2CBB, 30834 }, { 0x2CBC, 31147 }, { 0x2CBD, 30854 }, { 0x2CBE, 30974 }, { 0x2CBF, 30681 }, { 0x2CC0, 31096 }, { 0x2CC1, 30803 }, { 0x2CC2, 31112 }, { 0x2CC3, 30819 }, { 0x2CC4, 30986 }, { 0x2CC5, 30693 }, { 0x2CC6, 30956 }, { 0x2CC7, 30663 }, { 0x2CC8, 31117 }, { 0x2CC9, 30824 }, { 0x2CCA, 31137 }, { 0x2CCB, 30844 }, { 0x2CCC, 30980 }, { 0x2CCD, 30687 }, { 0x2CCE, 30938 }, { 0x2CCF, 30645 }, { 0x2CD0, 31122 }, { 0x2CD1, 30829 }, { 0x2CD2, 30968 }, { 0x2CD3, 30675 }, { 0x2CD4, 30962 }, { 0x2CD5, 30669 }, { 0x2CD6, 30998 }, { 0x2CD7, 30705 }, { 0x2CD8, 30950 }, { 0x2CD9, 30657 }, { 0x2CDA, 30992 }, { 0x2CDB, 30699 }, { 0x2CDC, 31022 }, { 0x2CDD, 30729 }, { 0x2CDE, 31004 }, { 0x2CDF, 30711 }, { 0x2CE0, 31010 }, { 0x2CE1, 30717 }, { 0x2CE2, 31016 }, { 0x2CE3, 30723 }, { 0x2CE4, 30872 }, { 0x2CE5, 30864 }, { 0x2CE6, 30868 }, { 0x2CE7, 30887 }, { 0x2CE8, 30879 }, { 0x2CE9, 30875 }, { 0x2CEA, 30883 }, { 0x2CF9, 30572 }, { 0x2CFA, 30582 }, { 0x2CFB, 30588 }, { 0x2CFC, 30577 }, { 0x2CFD, 31157 }, { 0x2CFE, 30594 }, { 0x2CFF, 31161 }, { 0x2D00, 51786 }, { 0x2D01, 51814 }, { 0x2D02, 51830 }, { 0x2D03, 51826 }, { 0x2D04, 51790 }, { 0x2D05, 51894 }, { 0x2D06, 51902 }, { 0x2D07, 51886 }, { 0x2D08, 51798 }, { 0x2D09, 51854 }, { 0x2D0A, 51858 }, { 0x2D0B, 51862 }, { 0x2D0C, 51866 }, { 0x2D0D, 51802 }, { 0x2D0E, 51870 }, { 0x2D0F, 51934 }, { 0x2D10, 51878 }, { 0x2D11, 51882 }, { 0x2D12, 51890 }, { 0x2D13, 51806 }, { 0x2D14, 51926 }, { 0x2D15, 51922 }, { 0x2D16, 51914 }, { 0x2D17, 51874 }, { 0x2D18, 51930 }, { 0x2D19, 51910 }, { 0x2D1A, 51818 }, { 0x2D1B, 51850 }, { 0x2D1C, 51822 }, { 0x2D1D, 51906 }, { 0x2D1E, 51898 }, { 0x2D1F, 51918 }, { 0x2D20, 51834 }, { 0x2D21, 51794 }, { 0x2D22, 51842 }, { 0x2D23, 51810 }, { 0x2D24, 51838 }, { 0x2D25, 51846 }, { 0x2D30, 55713 }, { 0x2D31, 55725 }, { 0x2D32, 55789 }, { 0x2D33, 55734 }, { 0x2D34, 55834 }, { 0x2D35, 55845 }, { 0x2D36, 55740 }, { 0x2D37, 55728 }, { 0x2D38, 55798 }, { 0x2D39, 55795 }, { 0x2D3A, 55831 }, { 0x2D3B, 55782 }, { 0x2D3C, 55731 }, { 0x2D3D, 55743 }, { 0x2D3E, 55854 }, { 0x2D3F, 55837 }, { 0x2D40, 55737 }, { 0x2D41, 55840 }, { 0x2D42, 55850 }, { 0x2D43, 55804 }, { 0x2D44, 55722 }, { 0x2D45, 55807 }, { 0x2D46, 55870 }, { 0x2D47, 55758 }, { 0x2D48, 55858 }, { 0x2D49, 55716 }, { 0x2D4A, 55825 }, { 0x2D4B, 55882 }, { 0x2D4C, 55878 }, { 0x2D4D, 55746 }, { 0x2D4E, 55749 }, { 0x2D4F, 55752 }, { 0x2D50, 55866 }, { 0x2D51, 55874 }, { 0x2D52, 55755 }, { 0x2D53, 55719 }, { 0x2D54, 55761 }, { 0x2D55, 55810 }, { 0x2D56, 55801 }, { 0x2D57, 55862 }, { 0x2D58, 55785 }, { 0x2D59, 55764 }, { 0x2D5A, 55816 }, { 0x2D5B, 55813 }, { 0x2D5C, 55767 }, { 0x2D5D, 55819 }, { 0x2D5E, 55792 }, { 0x2D5F, 55822 }, { 0x2D60, 55770 }, { 0x2D61, 55773 }, { 0x2D62, 55776 }, { 0x2D63, 55779 }, { 0x2D64, 55886 }, { 0x2D65, 55828 }, { 0x2D6F, 55890 }, { 0x2D80, 50999 }, { 0x2D81, 51011 }, { 0x2D82, 51140 }, { 0x2D83, 51170 }, { 0x2D84, 51542 }, { 0x2D85, 50762 }, { 0x2D86, 51227 }, { 0x2D87, 50810 }, { 0x2D88, 51032 }, { 0x2D89, 51488 }, { 0x2D8A, 51672 }, { 0x2D8B, 51344 }, { 0x2D8C, 50837 }, { 0x2D8D, 51407 }, { 0x2D8E, 50939 }, { 0x2D8F, 51569 }, { 0x2D90, 51395 }, { 0x2D91, 51500 }, { 0x2D92, 51074 }, { 0x2D93, 51422 }, { 0x2D94, 51428 }, { 0x2D95, 51629 }, { 0x2D96, 51425 }, { 0x2DA0, 51173 }, { 0x2DA1, 51185 }, { 0x2DA2, 51179 }, { 0x2DA3, 51548 }, { 0x2DA4, 51551 }, { 0x2DA5, 51176 }, { 0x2DA6, 51182 }, { 0x2DA8, 50777 }, { 0x2DA9, 50789 }, { 0x2DAA, 50783 }, { 0x2DAB, 51368 }, { 0x2DAC, 51371 }, { 0x2DAD, 50780 }, { 0x2DAE, 50786 }, { 0x2DB0, 51350 }, { 0x2DB1, 51362 }, { 0x2DB2, 51356 }, { 0x2DB3, 51614 }, { 0x2DB4, 51617 }, { 0x2DB5, 51353 }, { 0x2DB6, 51359 }, { 0x2DB8, 51374 }, { 0x2DB9, 51386 }, { 0x2DBA, 51380 }, { 0x2DBB, 51620 }, { 0x2DBC, 51623 }, { 0x2DBD, 51377 }, { 0x2DBE, 51383 }, { 0x2DC0, 51119 }, { 0x2DC1, 51131 }, { 0x2DC2, 51125 }, { 0x2DC3, 51530 }, { 0x2DC4, 51533 }, { 0x2DC5, 51122 }, { 0x2DC6, 51128 }, { 0x2DC8, 50978 }, { 0x2DC9, 50990 }, { 0x2DCA, 50984 }, { 0x2DCB, 51473 }, { 0x2DCC, 51476 }, { 0x2DCD, 50981 }, { 0x2DCE, 50987 }, { 0x2DD0, 51299 }, { 0x2DD1, 51311 }, { 0x2DD2, 51305 }, { 0x2DD3, 51599 }, { 0x2DD4, 51602 }, { 0x2DD5, 51302 }, { 0x2DD6, 51308 }, { 0x2DD8, 50894 }, { 0x2DD9, 50906 }, { 0x2DDA, 50900 }, { 0x2DDB, 51437 }, { 0x2DDC, 51440 }, { 0x2DDD, 50897 }, { 0x2DDE, 50903 }, { 0x2DE0, 58034 }, { 0x2DE1, 58082 }, { 0x2DE2, 58103 }, { 0x2DE3, 58038 }, { 0x2DE4, 58119 }, { 0x2DE5, 58090 }, { 0x2DE6, 58070 }, { 0x2DE7, 58042 }, { 0x2DE8, 58046 }, { 0x2DE9, 58050 }, { 0x2DEA, 58030 }, { 0x2DEB, 58074 }, { 0x2DEC, 58054 }, { 0x2DED, 58058 }, { 0x2DEE, 58078 }, { 0x2DEF, 58062 }, { 0x2DF0, 58111 }, { 0x2DF1, 58099 }, { 0x2DF2, 58107 }, { 0x2DF3, 58135 }, { 0x2DF4, 58123 }, { 0x2DF5, 58131 }, { 0x2DF6, 58026 }, { 0x2DF7, 58066 }, { 0x2DF8, 58127 }, { 0x2DF9, 58155 }, { 0x2DFA, 58115 }, { 0x2DFB, 58086 }, { 0x2DFC, 58144 }, { 0x2DFD, 58139 }, { 0x2DFE, 58094 }, { 0x2DFF, 58149 }, { 0x2E00, 21801 }, { 0x2E01, 21783 }, { 0x2E02, 9477 }, { 0x2E03, 22004 }, { 0x2E04, 9353 }, { 0x2E05, 21874 }, { 0x2E06, 35672 }, { 0x2E07, 35666 }, { 0x2E08, 31539 }, { 0x2E09, 9480 }, { 0x2E0A, 22007 }, { 0x2E0B, 35670 }, { 0x2E0C, 9377 }, { 0x2E0D, 21904 }, { 0x2E0E, 63378 }, { 0x2E0F, 69268 }, { 0x2E10, 31783 }, { 0x2E11, 55488 }, { 0x2E12, 69569 }, { 0x2E13, 31535 }, { 0x2E14, 63298 }, { 0x2E15, 44620 }, { 0x2E16, 31542 }, { 0x2E17, 31658 }, { 0x2E18, 53360 }, { 0x2E19, 9626 }, { 0x2E1A, 33425 }, { 0x2E1B, 23017 }, { 0x2E1C, 9148 }, { 0x2E1D, 21751 }, { 0x2E1E, 23009 }, { 0x2E1F, 23013 }, { 0x2E20, 9452 }, { 0x2E21, 21979 }, { 0x2E22, 7737 }, { 0x2E23, 7750 }, { 0x2E24, 30258 }, { 0x2E25, 30271 }, { 0x2E26, 9439 }, { 0x2E27, 21964 }, { 0x2E28, 9369 }, { 0x2E29, 21896 }, { 0x2E2A, 7772 }, { 0x2E2B, 7155 }, { 0x2E2C, 43556 }, { 0x2E2D, 9091 }, { 0x2E2E, 55502 }, { 0x2E2F, 56091 }, { 0x2E30, 9704 }, { 0x2E80, 5603 }, { 0x2E81, 5510 }, { 0x2E82, 5606 }, { 0x2E83, 5610 }, { 0x2E84, 5614 }, { 0x2E85, 5600 }, { 0x2E86, 5346 }, { 0x2E87, 5577 }, { 0x2E88, 5539 }, { 0x2E89, 5543 }, { 0x2E8A, 5638 }, { 0x2E8B, 5477 }, { 0x2E8C, 5558 }, { 0x2E8D, 5562 }, { 0x2E8E, 5441 }, { 0x2E8F, 5445 }, { 0x2E90, 5453 }, { 0x2E91, 5449 }, { 0x2E92, 5566 }, { 0x2E93, 5626 }, { 0x2E94, 5569 }, { 0x2E95, 5573 }, { 0x2E96, 5531 }, { 0x2E97, 5535 }, { 0x2E98, 5429 }, { 0x2E99, 5403 }, { 0x2E9B, 5507 }, { 0x2E9C, 5406 }, { 0x2E9D, 5471 }, { 0x2E9E, 5513 }, { 0x2E9F, 5597 }, { 0x2EA0, 5635 }, { 0x2EA1, 5583 }, { 0x2EA2, 5587 }, { 0x2EA3, 5423 }, { 0x2EA4, 5392 }, { 0x2EA5, 5396 }, { 0x2EA6, 5641 }, { 0x2EA7, 5349 }, { 0x2EA8, 5352 }, { 0x2EA9, 5438 }, { 0x2EAA, 5412 }, { 0x2EAB, 5370 }, { 0x2EAC, 5618 }, { 0x2EAD, 5622 }, { 0x2EAE, 5591 }, { 0x2EAF, 5480 }, { 0x2EB0, 5715 }, { 0x2EB1, 5373 }, { 0x2EB2, 5377 }, { 0x2EB3, 5385 }, { 0x2EB4, 5381 }, { 0x2EB5, 5468 }, { 0x2EB6, 5555 }, { 0x2EB7, 5400 }, { 0x2EB8, 5367 }, { 0x2EB9, 5389 }, { 0x2EBA, 5499 }, { 0x2EBB, 5503 }, { 0x2EBC, 5465 }, { 0x2EBD, 5594 }, { 0x2EBE, 5519 }, { 0x2EBF, 5523 }, { 0x2EC0, 5527 }, { 0x2EC1, 5580 }, { 0x2EC2, 5632 }, { 0x2EC3, 5491 }, { 0x2EC4, 5495 }, { 0x2EC5, 5671 }, { 0x2EC6, 5647 }, { 0x2EC7, 5435 }, { 0x2EC8, 5739 }, { 0x2EC9, 5727 }, { 0x2ECA, 5426 }, { 0x2ECB, 5679 }, { 0x2ECC, 5651 }, { 0x2ECD, 5483 }, { 0x2ECE, 5487 }, { 0x2ECF, 5420 }, { 0x2ED0, 5699 }, { 0x2ED1, 5457 }, { 0x2ED2, 5461 }, { 0x2ED3, 5707 }, { 0x2ED4, 5695 }, { 0x2ED5, 5547 }, { 0x2ED6, 5551 }, { 0x2ED7, 5474 }, { 0x2ED8, 5409 }, { 0x2ED9, 5743 }, { 0x2EDA, 5703 }, { 0x2EDB, 5719 }, { 0x2EDC, 5667 }, { 0x2EDD, 5355 }, { 0x2EDE, 5359 }, { 0x2EDF, 5363 }, { 0x2EE0, 5663 }, { 0x2EE1, 5432 }, { 0x2EE2, 5723 }, { 0x2EE3, 5417 }, { 0x2EE4, 5516 }, { 0x2EE5, 5687 }, { 0x2EE6, 5675 }, { 0x2EE7, 5711 }, { 0x2EE8, 5655 }, { 0x2EE9, 5659 }, { 0x2EEA, 5691 }, { 0x2EEB, 5752 }, { 0x2EEC, 5683 }, { 0x2EED, 5756 }, { 0x2EEE, 5731 }, { 0x2EEF, 5760 }, { 0x2EF0, 5735 }, { 0x2EF1, 5629 }, { 0x2EF2, 5764 }, { 0x2EF3, 5748 }, { 0x2F00, 33501 }, { 0x2F01, 33669 }, { 0x2F02, 33459 }, { 0x2F03, 33860 }, { 0x2F04, 33981 }, { 0x2F05, 33639 }, { 0x2F06, 33531 }, { 0x2F07, 33486 }, { 0x2F08, 33489 }, { 0x2F09, 33663 }, { 0x2F0A, 33792 }, { 0x2F0B, 33789 }, { 0x2F0C, 33588 }, { 0x2F0D, 33780 }, { 0x2F0E, 33480 }, { 0x2F0F, 33896 }, { 0x2F10, 33688 }, { 0x2F11, 33819 }, { 0x2F12, 33831 }, { 0x2F13, 33753 }, { 0x2F14, 33881 }, { 0x2F15, 33834 }, { 0x2F16, 33962 }, { 0x2F17, 33528 }, { 0x2F18, 34081 }, { 0x2F19, 33707 }, { 0x2F1A, 33774 }, { 0x2F1B, 34048 }, { 0x2F1C, 33756 }, { 0x2F1D, 33828 }, { 0x2F1E, 34078 }, { 0x2F1F, 33786 }, { 0x2F20, 34051 }, { 0x2F21, 33434 }, { 0x2F22, 33437 }, { 0x2F23, 34030 }, { 0x2F24, 33447 }, { 0x2F25, 33917 }, { 0x2F26, 33771 }, { 0x2F27, 33701 }, { 0x2F28, 33645 }, { 0x2F29, 33869 }, { 0x2F2A, 33654 }, { 0x2F2B, 33938 }, { 0x2F2C, 33990 }, { 0x2F2D, 34066 }, { 0x2F2E, 33839 }, { 0x2F2F, 33750 }, { 0x2F30, 34045 }, { 0x2F31, 34006 }, { 0x2F32, 33462 }, { 0x2F33, 33856 }, { 0x2F34, 33948 }, { 0x2F35, 33675 }, { 0x2F36, 33534 }, { 0x2F37, 33848 }, { 0x2F38, 33450 }, { 0x2F39, 33872 }, { 0x2F3A, 34021 }, { 0x2F3B, 33719 }, { 0x2F3C, 33813 }, { 0x2F3D, 34036 }, { 0x2F3E, 33585 }, { 0x2F3F, 33630 }, { 0x2F40, 33935 }, { 0x2F41, 33507 }, { 0x2F42, 33978 }, { 0x2F43, 33941 }, { 0x2F44, 33444 }, { 0x2F45, 33993 }, { 0x2F46, 33495 }, { 0x2F47, 33525 }, { 0x2F48, 33519 }, { 0x2F49, 33682 }, { 0x2F4A, 33731 }, { 0x2F4B, 33651 }, { 0x2F4C, 33722 }, { 0x2F4D, 33783 }, { 0x2F4E, 34015 }, { 0x2F4F, 33430 }, { 0x2F50, 34027 }, { 0x2F51, 33477 }, { 0x2F52, 33573 }, { 0x2F53, 33887 }, { 0x2F54, 33908 }, { 0x2F55, 33604 }, { 0x2F56, 33576 }, { 0x2F57, 33959 }, { 0x2F58, 33952 }, { 0x2F59, 33625 }, { 0x2F5A, 33866 }, { 0x2F5B, 33601 }, { 0x2F5C, 33453 }, { 0x2F5D, 33456 }, { 0x2F5E, 34069 }, { 0x2F5F, 33648 }, { 0x2F60, 33822 }, { 0x2F61, 33728 }, { 0x2F62, 33893 }, { 0x2F63, 33666 }, { 0x2F64, 33538 }, { 0x2F65, 33795 }, { 0x2F66, 33556 }, { 0x2F67, 34072 }, { 0x2F68, 33944 }, { 0x2F69, 33914 }, { 0x2F6A, 33716 }, { 0x2F6B, 33582 }, { 0x2F6C, 33471 }, { 0x2F6D, 33878 }, { 0x2F6E, 33759 }, { 0x2F6F, 33890 }, { 0x2F70, 33987 }, { 0x2F71, 33905 }, { 0x2F72, 33807 }, { 0x2F73, 33567 }, { 0x2F74, 33884 }, { 0x2F75, 33929 }, { 0x2F76, 33698 }, { 0x2F77, 33713 }, { 0x2F78, 33483 }, { 0x2F79, 33492 }, { 0x2F7A, 33842 }, { 0x2F7B, 34033 }, { 0x2F7C, 33498 }, { 0x2F7D, 33441 }, { 0x2F7E, 33692 }, { 0x2F7F, 33465 }, { 0x2F80, 33768 }, { 0x2F81, 33679 }, { 0x2F82, 34063 }, { 0x2F83, 33710 }, { 0x2F84, 33923 }, { 0x2F85, 33972 }, { 0x2F86, 34000 }, { 0x2F87, 33975 }, { 0x2F88, 33550 }, { 0x2F89, 34075 }, { 0x2F8A, 33777 }, { 0x2F8B, 33810 }, { 0x2F8C, 33899 }, { 0x2F8D, 33966 }, { 0x2F8E, 33765 }, { 0x2F8F, 33737 }, { 0x2F90, 34024 }, { 0x2F91, 33741 }, { 0x2F92, 33522 }, { 0x2F93, 33642 }, { 0x2F94, 33984 }, { 0x2F95, 34012 }, { 0x2F96, 33541 }, { 0x2F97, 33504 }, { 0x2F98, 33926 }, { 0x2F99, 33845 }, { 0x2F9A, 33513 }, { 0x2F9B, 33516 }, { 0x2F9C, 33610 }, { 0x2F9D, 33553 }, { 0x2F9E, 33564 }, { 0x2F9F, 33932 }, { 0x2FA0, 34042 }, { 0x2FA1, 33734 }, { 0x2FA2, 33570 }, { 0x2FA3, 33747 }, { 0x2FA4, 34087 }, { 0x2FA5, 34054 }, { 0x2FA6, 33619 }, { 0x2FA7, 33672 }, { 0x2FA8, 33616 }, { 0x2FA9, 33825 }, { 0x2FAA, 33863 }, { 0x2FAB, 33851 }, { 0x2FAC, 33695 }, { 0x2FAD, 33547 }, { 0x2FAE, 33920 }, { 0x2FAF, 33598 }, { 0x2FB0, 34039 }, { 0x2FB1, 33996 }, { 0x2FB2, 33660 }, { 0x2FB3, 33875 }, { 0x2FB4, 33657 }, { 0x2FB5, 33744 }, { 0x2FB6, 33474 }, { 0x2FB7, 33468 }, { 0x2FB8, 33633 }, { 0x2FB9, 34060 }, { 0x2FBA, 33816 }, { 0x2FBB, 33561 }, { 0x2FBC, 33725 }, { 0x2FBD, 33622 }, { 0x2FBE, 33798 }, { 0x2FBF, 34090 }, { 0x2FC0, 34057 }, { 0x2FC1, 33804 }, { 0x2FC2, 33607 }, { 0x2FC3, 33544 }, { 0x2FC4, 33704 }, { 0x2FC5, 33579 }, { 0x2FC6, 33911 }, { 0x2FC7, 33636 }, { 0x2FC8, 34018 }, { 0x2FC9, 33969 }, { 0x2FCA, 33762 }, { 0x2FCB, 34084 }, { 0x2FCC, 33613 }, { 0x2FCD, 34003 }, { 0x2FCE, 33592 }, { 0x2FCF, 33510 }, { 0x2FD0, 33685 }, { 0x2FD1, 33595 }, { 0x2FD2, 33902 }, { 0x2FD3, 33956 }, { 0x2FD4, 34009 }, { 0x2FD5, 33801 }, { 0x2FF0, 69175 }, { 0x2FF1, 69189 }, { 0x2FF2, 69181 }, { 0x2FF3, 69195 }, { 0x2FF4, 69170 }, { 0x2FF5, 69213 }, { 0x2FF6, 69219 }, { 0x2FF7, 69207 }, { 0x2FF8, 69232 }, { 0x2FF9, 69239 }, { 0x2FFA, 69225 }, { 0x2FFB, 69203 }, { 0x3000, 68678 }, { 0x3001, 68672 }, { 0x3002, 68665 }, { 0x3003, 10538 }, { 0x3004, 53362 }, { 0x3005, 68698 }, { 0x3006, 68687 }, { 0x3007, 68680 }, { 0x3008, 9204 }, { 0x3009, 21788 }, { 0x300A, 9357 }, { 0x300B, 21878 }, { 0x300C, 9350 }, { 0x300D, 21871 }, { 0x300E, 9330 }, { 0x300F, 21851 }, { 0x3010, 9227 }, { 0x3011, 21820 }, { 0x3012, 35661 }, { 0x3013, 9121 }, { 0x3014, 9443 }, { 0x3015, 21968 }, { 0x3016, 9343 }, { 0x3017, 21864 }, { 0x3018, 9338 }, { 0x3019, 21859 }, { 0x301A, 9334 }, { 0x301B, 21855 }, { 0x301C, 10063 }, { 0x301D, 55478 }, { 0x301E, 31576 }, { 0x301F, 6033 }, { 0x3020, 35663 }, { 0x3021, 52741 }, { 0x3022, 52750 }, { 0x3023, 52768 }, { 0x3024, 52756 }, { 0x3025, 52753 }, { 0x3026, 52744 }, { 0x3027, 52765 }, { 0x3028, 52762 }, { 0x3029, 52759 }, { 0x302A, 68674 }, { 0x302B, 68683 }, { 0x302C, 68694 }, { 0x302D, 68690 }, { 0x302E, 32170 }, { 0x302F, 31884 }, { 0x3030, 10078 }, { 0x3031, 56034 }, { 0x3032, 56050 }, { 0x3033, 56044 }, { 0x3034, 56057 }, { 0x3035, 56038 }, { 0x3036, 39456 }, { 0x3037, 68701 }, { 0x3038, 52747 }, { 0x3039, 52774 }, { 0x303A, 52771 }, { 0x303B, 56098 }, { 0x303C, 9594 }, { 0x303D, 9628 }, { 0x303E, 69103 }, { 0x303F, 68668 }, { 0x3041, 53242 }, { 0x3042, 53020 }, { 0x3043, 53250 }, { 0x3044, 53026 }, { 0x3045, 53258 }, { 0x3046, 53035 }, { 0x3047, 53246 }, { 0x3048, 53023 }, { 0x3049, 53254 }, { 0x304A, 53032 }, { 0x304B, 53098 }, { 0x304C, 53068 }, { 0x304D, 53104 }, { 0x304E, 53074 }, { 0x304F, 53110 }, { 0x3050, 53080 }, { 0x3051, 53101 }, { 0x3052, 53071 }, { 0x3053, 53107 }, { 0x3054, 53077 }, { 0x3055, 53173 }, { 0x3056, 53227 }, { 0x3057, 53179 }, { 0x3058, 53233 }, { 0x3059, 53185 }, { 0x305A, 53239 }, { 0x305B, 53176 }, { 0x305C, 53230 }, { 0x305D, 53182 }, { 0x305E, 53236 }, { 0x305F, 53188 }, { 0x3060, 53053 }, { 0x3061, 53194 }, { 0x3062, 53059 }, { 0x3063, 53270 }, { 0x3064, 53200 }, { 0x3065, 53065 }, { 0x3066, 53191 }, { 0x3067, 53056 }, { 0x3068, 53197 }, { 0x3069, 53062 }, { 0x306A, 53128 }, { 0x306B, 53134 }, { 0x306C, 53140 }, { 0x306D, 53131 }, { 0x306E, 53137 }, { 0x306F, 53083 }, { 0x3070, 53038 }, { 0x3071, 53143 }, { 0x3072, 53089 }, { 0x3073, 53044 }, { 0x3074, 53149 }, { 0x3075, 53095 }, { 0x3076, 53050 }, { 0x3077, 53155 }, { 0x3078, 53086 }, { 0x3079, 53041 }, { 0x307A, 53146 }, { 0x307B, 53092 }, { 0x307C, 53047 }, { 0x307D, 53152 }, { 0x307E, 53113 }, { 0x307F, 53119 }, { 0x3080, 53125 }, { 0x3081, 53116 }, { 0x3082, 53122 }, { 0x3083, 53278 }, { 0x3084, 53218 }, { 0x3085, 53286 }, { 0x3086, 53224 }, { 0x3087, 53282 }, { 0x3088, 53221 }, { 0x3089, 53158 }, { 0x308A, 53164 }, { 0x308B, 53170 }, { 0x308C, 53161 }, { 0x308D, 53167 }, { 0x308E, 53274 }, { 0x308F, 53206 }, { 0x3090, 53212 }, { 0x3091, 53209 }, { 0x3092, 53215 }, { 0x3093, 53029 }, { 0x3094, 53203 }, { 0x3095, 53262 }, { 0x3096, 53266 }, { 0x3099, 58335 }, { 0x309A, 58340 }, { 0x309B, 75125 }, { 0x309C, 75133 }, { 0x309D, 53297 }, { 0x309E, 53290 }, { 0x309F, 53294 }, { 0x30A0, 75122 }, { 0x30A1, 53600 }, { 0x30A2, 53366 }, { 0x30A3, 53608 }, { 0x30A4, 53372 }, { 0x30A5, 53616 }, { 0x30A6, 53381 }, { 0x30A7, 53604 }, { 0x30A8, 53369 }, { 0x30A9, 53612 }, { 0x30AA, 53378 }, { 0x30AB, 53444 }, { 0x30AC, 53414 }, { 0x30AD, 53450 }, { 0x30AE, 53420 }, { 0x30AF, 53456 }, { 0x30B0, 53426 }, { 0x30B1, 53447 }, { 0x30B2, 53417 }, { 0x30B3, 53453 }, { 0x30B4, 53423 }, { 0x30B5, 53519 }, { 0x30B6, 53585 }, { 0x30B7, 53525 }, { 0x30B8, 53591 }, { 0x30B9, 53531 }, { 0x30BA, 53597 }, { 0x30BB, 53522 }, { 0x30BC, 53588 }, { 0x30BD, 53528 }, { 0x30BE, 53594 }, { 0x30BF, 53534 }, { 0x30C0, 53399 }, { 0x30C1, 53540 }, { 0x30C2, 53405 }, { 0x30C3, 53692 }, { 0x30C4, 53546 }, { 0x30C5, 53411 }, { 0x30C6, 53537 }, { 0x30C7, 53402 }, { 0x30C8, 53543 }, { 0x30C9, 53408 }, { 0x30CA, 53474 }, { 0x30CB, 53480 }, { 0x30CC, 53486 }, { 0x30CD, 53477 }, { 0x30CE, 53483 }, { 0x30CF, 53429 }, { 0x30D0, 53384 }, { 0x30D1, 53489 }, { 0x30D2, 53435 }, { 0x30D3, 53390 }, { 0x30D4, 53495 }, { 0x30D5, 53441 }, { 0x30D6, 53396 }, { 0x30D7, 53501 }, { 0x30D8, 53432 }, { 0x30D9, 53387 }, { 0x30DA, 53492 }, { 0x30DB, 53438 }, { 0x30DC, 53393 }, { 0x30DD, 53498 }, { 0x30DE, 53459 }, { 0x30DF, 53465 }, { 0x30E0, 53471 }, { 0x30E1, 53462 }, { 0x30E2, 53468 }, { 0x30E3, 53700 }, { 0x30E4, 53576 }, { 0x30E5, 53708 }, { 0x30E6, 53582 }, { 0x30E7, 53704 }, { 0x30E8, 53579 }, { 0x30E9, 53504 }, { 0x30EA, 53510 }, { 0x30EB, 53516 }, { 0x30EC, 53507 }, { 0x30ED, 53513 }, { 0x30EE, 53696 }, { 0x30EF, 53564 }, { 0x30F0, 53570 }, { 0x30F1, 53567 }, { 0x30F2, 53573 }, { 0x30F3, 53375 }, { 0x30F4, 53561 }, { 0x30F5, 53640 }, { 0x30F6, 53644 }, { 0x30F7, 53549 }, { 0x30F8, 53555 }, { 0x30F9, 53552 }, { 0x30FA, 53558 }, { 0x30FB, 53712 }, { 0x30FC, 75129 }, { 0x30FD, 53722 }, { 0x30FE, 53715 }, { 0x30FF, 53719 }, { 0x3105, 45589 }, { 0x3106, 45631 }, { 0x3107, 45622 }, { 0x3108, 45601 }, { 0x3109, 45595 }, { 0x310A, 45643 }, { 0x310B, 45625 }, { 0x310C, 45619 }, { 0x310D, 45604 }, { 0x310E, 45616 }, { 0x310F, 45607 }, { 0x3110, 45613 }, { 0x3111, 45634 }, { 0x3112, 45652 }, { 0x3113, 45727 }, { 0x3114, 45673 }, { 0x3115, 45724 }, { 0x3116, 45637 }, { 0x3117, 45655 }, { 0x3118, 45592 }, { 0x3119, 45640 }, { 0x311A, 45586 }, { 0x311B, 45628 }, { 0x311C, 45598 }, { 0x311D, 45679 }, { 0x311E, 45658 }, { 0x311F, 45682 }, { 0x3120, 45667 }, { 0x3121, 45721 }, { 0x3122, 45664 }, { 0x3123, 45685 }, { 0x3124, 45733 }, { 0x3125, 45739 }, { 0x3126, 45688 }, { 0x3127, 45610 }, { 0x3128, 45646 }, { 0x3129, 45706 }, { 0x312A, 45649 }, { 0x312B, 45712 }, { 0x312C, 45691 }, { 0x312D, 45697 }, { 0x3131, 31996 }, { 0x3132, 32095 }, { 0x3133, 32065 }, { 0x3134, 31978 }, { 0x3135, 32071 }, { 0x3136, 32074 }, { 0x3137, 31999 }, { 0x3138, 32098 }, { 0x3139, 31984 }, { 0x313A, 32113 }, { 0x313B, 32083 }, { 0x313C, 32086 }, { 0x313D, 32038 }, { 0x313E, 32140 }, { 0x313F, 32137 }, { 0x3140, 32080 }, { 0x3141, 31975 }, { 0x3142, 31981 }, { 0x3143, 32062 }, { 0x3144, 32035 }, { 0x3145, 31954 }, { 0x3146, 32026 }, { 0x3147, 31972 }, { 0x3148, 31966 }, { 0x3149, 32050 }, { 0x314A, 32008 }, { 0x314B, 32011 }, { 0x314C, 32020 }, { 0x314D, 32017 }, { 0x314E, 31969 }, { 0x314F, 31891 }, { 0x3150, 31906 }, { 0x3151, 31927 }, { 0x3152, 31948 }, { 0x3153, 31909 }, { 0x3154, 31894 }, { 0x3155, 31951 }, { 0x3156, 31930 }, { 0x3157, 31900 }, { 0x3158, 31918 }, { 0x3159, 31942 }, { 0x315A, 31915 }, { 0x315B, 31936 }, { 0x315C, 31903 }, { 0x315D, 31945 }, { 0x315E, 31921 }, { 0x315F, 31924 }, { 0x3160, 31939 }, { 0x3161, 31912 }, { 0x3162, 31933 }, { 0x3163, 31897 }, { 0x3164, 31889 }, { 0x3165, 32059 }, { 0x3166, 32104 }, { 0x3167, 32032 }, { 0x3168, 32128 }, { 0x3169, 32161 }, { 0x316A, 32116 }, { 0x316B, 32149 }, { 0x316C, 32134 }, { 0x316D, 32164 }, { 0x316E, 32068 }, { 0x316F, 32029 }, { 0x3170, 32125 }, { 0x3171, 32119 }, { 0x3172, 32107 }, { 0x3173, 32110 }, { 0x3174, 32155 }, { 0x3175, 32158 }, { 0x3176, 32077 }, { 0x3177, 32131 }, { 0x3178, 32122 }, { 0x3179, 32167 }, { 0x317A, 32089 }, { 0x317B, 32044 }, { 0x317C, 32092 }, { 0x317D, 32047 }, { 0x317E, 32041 }, { 0x317F, 32014 }, { 0x3180, 32056 }, { 0x3181, 32023 }, { 0x3182, 32143 }, { 0x3183, 32152 }, { 0x3184, 32146 }, { 0x3185, 32053 }, { 0x3186, 32101 }, { 0x3187, 31987 }, { 0x3188, 32002 }, { 0x3189, 31957 }, { 0x318A, 32005 }, { 0x318B, 31990 }, { 0x318C, 31960 }, { 0x318D, 31963 }, { 0x318E, 31993 }, { 0x3190, 69162 }, { 0x3191, 69166 }, { 0x3192, 69110 }, { 0x3193, 69118 }, { 0x3194, 69138 }, { 0x3195, 69122 }, { 0x3196, 69114 }, { 0x3197, 69154 }, { 0x3198, 69142 }, { 0x3199, 69130 }, { 0x319A, 69158 }, { 0x319B, 69134 }, { 0x319C, 69146 }, { 0x319D, 69150 }, { 0x319E, 69126 }, { 0x319F, 69106 }, { 0x31A0, 45670 }, { 0x31A1, 45730 }, { 0x31A2, 45709 }, { 0x31A3, 45694 }, { 0x31A4, 45676 }, { 0x31A5, 45742 }, { 0x31A6, 45718 }, { 0x31A7, 45754 }, { 0x31A8, 45703 }, { 0x31A9, 45736 }, { 0x31AA, 45745 }, { 0x31AB, 45757 }, { 0x31AC, 45700 }, { 0x31AD, 45748 }, { 0x31AE, 45760 }, { 0x31AF, 45763 }, { 0x31B0, 45661 }, { 0x31B1, 45715 }, { 0x31B2, 45751 }, { 0x31B3, 45766 }, { 0x31B4, 45578 }, { 0x31B5, 45582 }, { 0x31B6, 45574 }, { 0x31B7, 45570 }, { 0x31C0, 5256 }, { 0x31C1, 5295 }, { 0x31C2, 5298 }, { 0x31C3, 5301 }, { 0x31C4, 5286 }, { 0x31C5, 5313 }, { 0x31C6, 5304 }, { 0x31C7, 5262 }, { 0x31C8, 5331 }, { 0x31C9, 5340 }, { 0x31CA, 5307 }, { 0x31CB, 5334 }, { 0x31CC, 5325 }, { 0x31CD, 5310 }, { 0x31CE, 5337 }, { 0x31CF, 5244 }, { 0x31D0, 5241 }, { 0x31D1, 5253 }, { 0x31D2, 5247 }, { 0x31D3, 5280 }, { 0x31D4, 5238 }, { 0x31D5, 5265 }, { 0x31D6, 5259 }, { 0x31D7, 5289 }, { 0x31D8, 5319 }, { 0x31D9, 5283 }, { 0x31DA, 5277 }, { 0x31DB, 5268 }, { 0x31DC, 5274 }, { 0x31DD, 5292 }, { 0x31DE, 5322 }, { 0x31DF, 5316 }, { 0x31E0, 5328 }, { 0x31E1, 5343 }, { 0x31E2, 5271 }, { 0x31E3, 5250 }, { 0x31F0, 53648 }, { 0x31F1, 53680 }, { 0x31F2, 53684 }, { 0x31F3, 53688 }, { 0x31F4, 53656 }, { 0x31F5, 53620 }, { 0x31F6, 53628 }, { 0x31F7, 53636 }, { 0x31F8, 53624 }, { 0x31F9, 53632 }, { 0x31FA, 53652 }, { 0x31FB, 53660 }, { 0x31FC, 53668 }, { 0x31FD, 53676 }, { 0x31FE, 53664 }, { 0x31FF, 53672 }, { 0x3200, 74845 }, { 0x3201, 74824 }, { 0x3202, 74852 }, { 0x3203, 74838 }, { 0x3204, 74817 }, { 0x3205, 74831 }, { 0x3206, 74785 }, { 0x3207, 74810 }, { 0x3208, 74792 }, { 0x3209, 74859 }, { 0x320A, 74866 }, { 0x320B, 74880 }, { 0x320C, 74873 }, { 0x320D, 74803 }, { 0x320E, 74848 }, { 0x320F, 74827 }, { 0x3210, 74855 }, { 0x3211, 74841 }, { 0x3212, 74820 }, { 0x3213, 74834 }, { 0x3214, 74788 }, { 0x3215, 74813 }, { 0x3216, 74795 }, { 0x3217, 74862 }, { 0x3218, 74869 }, { 0x3219, 74883 }, { 0x321A, 74876 }, { 0x321B, 74806 }, { 0x321C, 74799 }, { 0x321D, 74892 }, { 0x321E, 74887 }, { 0x3220, 74929 }, { 0x3221, 74941 }, { 0x3222, 75001 }, { 0x3223, 74953 }, { 0x3224, 74950 }, { 0x3225, 74932 }, { 0x3226, 74992 }, { 0x3227, 74980 }, { 0x3228, 74965 }, { 0x3229, 74938 }, { 0x322A, 74959 }, { 0x322B, 74947 }, { 0x322C, 75004 }, { 0x322D, 74974 }, { 0x322E, 74986 }, { 0x322F, 74977 }, { 0x3230, 74935 }, { 0x3231, 74995 }, { 0x3232, 74956 }, { 0x3233, 75007 }, { 0x3234, 74962 }, { 0x3235, 75010 }, { 0x3236, 75022 }, { 0x3237, 75034 }, { 0x3238, 74983 }, { 0x3239, 75025 }, { 0x323A, 74944 }, { 0x323B, 74998 }, { 0x323C, 75028 }, { 0x323D, 75031 }, { 0x323E, 75019 }, { 0x323F, 75013 }, { 0x3240, 75016 }, { 0x3241, 74968 }, { 0x3242, 74971 }, { 0x3243, 74989 }, { 0x3250, 69269 }, { 0x3251, 39399 }, { 0x3252, 39407 }, { 0x3253, 39431 }, { 0x3254, 39415 }, { 0x3255, 39411 }, { 0x3256, 39403 }, { 0x3257, 39427 }, { 0x3258, 39423 }, { 0x3259, 39419 }, { 0x325A, 39354 }, { 0x325B, 39357 }, { 0x325C, 39365 }, { 0x325D, 39389 }, { 0x325E, 39373 }, { 0x325F, 39369 }, { 0x3260, 39256 }, { 0x3261, 39235 }, { 0x3262, 39263 }, { 0x3263, 39249 }, { 0x3264, 39228 }, { 0x3265, 39242 }, { 0x3266, 39196 }, { 0x3267, 39217 }, { 0x3268, 39203 }, { 0x3269, 39270 }, { 0x326A, 39277 }, { 0x326B, 39291 }, { 0x326C, 39284 }, { 0x326D, 39210 }, { 0x326E, 39259 }, { 0x326F, 39238 }, { 0x3270, 39266 }, { 0x3271, 39252 }, { 0x3272, 39231 }, { 0x3273, 39245 }, { 0x3274, 39199 }, { 0x3275, 39220 }, { 0x3276, 39206 }, { 0x3277, 39273 }, { 0x3278, 39280 }, { 0x3279, 39294 }, { 0x327A, 39287 }, { 0x327B, 39213 }, { 0x327C, 39302 }, { 0x327D, 39298 }, { 0x327E, 39224 }, { 0x327F, 34096 }, { 0x3280, 39623 }, { 0x3281, 39635 }, { 0x3282, 39710 }, { 0x3283, 39647 }, { 0x3284, 39644 }, { 0x3285, 39626 }, { 0x3286, 39701 }, { 0x3287, 39683 }, { 0x3288, 39671 }, { 0x3289, 39632 }, { 0x328A, 39665 }, { 0x328B, 39641 }, { 0x328C, 39713 }, { 0x328D, 39677 }, { 0x328E, 39689 }, { 0x328F, 39680 }, { 0x3290, 39629 }, { 0x3291, 39704 }, { 0x3292, 39650 }, { 0x3293, 39728 }, { 0x3294, 39668 }, { 0x3295, 39731 }, { 0x3296, 39755 }, { 0x3297, 39764 }, { 0x3298, 39686 }, { 0x3299, 39722 }, { 0x329A, 39662 }, { 0x329B, 39719 }, { 0x329C, 39746 }, { 0x329D, 39752 }, { 0x329E, 39695 }, { 0x329F, 39749 }, { 0x32A0, 39656 }, { 0x32A1, 39674 }, { 0x32A2, 39638 }, { 0x32A3, 39725 }, { 0x32A4, 39653 }, { 0x32A5, 39716 }, { 0x32A6, 39620 }, { 0x32A7, 39659 }, { 0x32A8, 39698 }, { 0x32A9, 39737 }, { 0x32AA, 39740 }, { 0x32AB, 39707 }, { 0x32AC, 39758 }, { 0x32AD, 39761 }, { 0x32AE, 39743 }, { 0x32AF, 39734 }, { 0x32B0, 39692 }, { 0x32B1, 39361 }, { 0x32B2, 39385 }, { 0x32B3, 39381 }, { 0x32B4, 39377 }, { 0x32B5, 39312 }, { 0x32B6, 39315 }, { 0x32B7, 39323 }, { 0x32B8, 39347 }, { 0x32B9, 39331 }, { 0x32BA, 39327 }, { 0x32BB, 39319 }, { 0x32BC, 39343 }, { 0x32BD, 39339 }, { 0x32BE, 39335 }, { 0x32BF, 39309 }, { 0x32C0, 69073 }, { 0x32C1, 69088 }, { 0x32C2, 69063 }, { 0x32C3, 69058 }, { 0x32C4, 68893 }, { 0x32C5, 69053 }, { 0x32C6, 69048 }, { 0x32C7, 69068 }, { 0x32C8, 69098 }, { 0x32C9, 69078 }, { 0x32CA, 69093 }, { 0x32CB, 69083 }, { 0x32CC, 35949 }, { 0x32CD, 36112 }, { 0x32CE, 35939 }, { 0x32CF, 40924 }, { 0x32D0, 39471 }, { 0x32D1, 39477 }, { 0x32D2, 39483 }, { 0x32D3, 39474 }, { 0x32D4, 39480 }, { 0x32D5, 39501 }, { 0x32D6, 39507 }, { 0x32D7, 39513 }, { 0x32D8, 39504 }, { 0x32D9, 39510 }, { 0x32DA, 39561 }, { 0x32DB, 39567 }, { 0x32DC, 39573 }, { 0x32DD, 39564 }, { 0x32DE, 39570 }, { 0x32DF, 39576 }, { 0x32E0, 39582 }, { 0x32E1, 39588 }, { 0x32E2, 39579 }, { 0x32E3, 39585 }, { 0x32E4, 39531 }, { 0x32E5, 39537 }, { 0x32E6, 39543 }, { 0x32E7, 39534 }, { 0x32E8, 39540 }, { 0x32E9, 39486 }, { 0x32EA, 39492 }, { 0x32EB, 39498 }, { 0x32EC, 39489 }, { 0x32ED, 39495 }, { 0x32EE, 39516 }, { 0x32EF, 39522 }, { 0x32F0, 39528 }, { 0x32F1, 39519 }, { 0x32F2, 39525 }, { 0x32F3, 39603 }, { 0x32F4, 39609 }, { 0x32F5, 39606 }, { 0x32F6, 39546 }, { 0x32F7, 39552 }, { 0x32F8, 39558 }, { 0x32F9, 39549 }, { 0x32FA, 39555 }, { 0x32FB, 39591 }, { 0x32FC, 39597 }, { 0x32FD, 39594 }, { 0x32FE, 39600 }, { 0x3300, 36363 }, { 0x3301, 36365 }, { 0x3302, 36290 }, { 0x3303, 36157 }, { 0x3304, 36375 }, { 0x3305, 36171 }, { 0x3306, 36155 }, { 0x3307, 36421 }, { 0x3308, 36296 }, { 0x3309, 36188 }, { 0x330A, 36190 }, { 0x330B, 36326 }, { 0x330C, 36393 }, { 0x330D, 36395 }, { 0x330E, 36300 }, { 0x330F, 36298 }, { 0x3310, 36167 }, { 0x3311, 36302 }, { 0x3312, 36379 }, { 0x3313, 36391 }, { 0x3314, 36175 }, { 0x3315, 36459 }, { 0x3316, 36463 }, { 0x3317, 36451 }, { 0x3318, 36369 }, { 0x3319, 36447 }, { 0x331A, 36453 }, { 0x331B, 36397 }, { 0x331C, 36328 }, { 0x331D, 36377 }, { 0x331E, 36330 }, { 0x331F, 36415 }, { 0x3320, 36445 }, { 0x3321, 36417 }, { 0x3322, 36353 }, { 0x3323, 36355 }, { 0x3324, 36294 }, { 0x3325, 36161 }, { 0x3326, 36163 }, { 0x3327, 36153 }, { 0x3328, 36186 }, { 0x3329, 36336 }, { 0x332A, 36304 }, { 0x332B, 36441 }, { 0x332C, 36338 }, { 0x332D, 36389 }, { 0x332E, 36457 }, { 0x332F, 36385 }, { 0x3330, 36194 }, { 0x3331, 36159 }, { 0x3332, 36423 }, { 0x3333, 36373 }, { 0x3334, 36419 }, { 0x3335, 36308 }, { 0x3336, 36449 }, { 0x3337, 36192 }, { 0x3338, 36383 }, { 0x3339, 36371 }, { 0x333A, 36342 }, { 0x333B, 36340 }, { 0x333C, 36292 }, { 0x333D, 36387 }, { 0x333E, 36367 }, { 0x333F, 36120 }, { 0x3340, 36344 }, { 0x3341, 36306 }, { 0x3342, 36169 }, { 0x3343, 36401 }, { 0x3344, 36334 }, { 0x3345, 36332 }, { 0x3346, 36381 }, { 0x3347, 36403 }, { 0x3348, 36409 }, { 0x3349, 36184 }, { 0x334A, 36455 }, { 0x334B, 36182 }, { 0x334C, 36407 }, { 0x334D, 36405 }, { 0x334E, 36359 }, { 0x334F, 36361 }, { 0x3350, 36288 }, { 0x3351, 36411 }, { 0x3352, 36198 }, { 0x3353, 36351 }, { 0x3354, 36413 }, { 0x3355, 36196 }, { 0x3356, 36443 }, { 0x3357, 36357 }, { 0x3358, 68940 }, { 0x3359, 68898 }, { 0x335A, 68916 }, { 0x335B, 68958 }, { 0x335C, 68928 }, { 0x335D, 68922 }, { 0x335E, 68904 }, { 0x335F, 68952 }, { 0x3360, 68946 }, { 0x3361, 68934 }, { 0x3362, 68910 }, { 0x3363, 68964 }, { 0x3364, 68970 }, { 0x3365, 69012 }, { 0x3366, 69000 }, { 0x3367, 68982 }, { 0x3368, 68988 }, { 0x3369, 69018 }, { 0x336A, 68994 }, { 0x336B, 69006 }, { 0x336C, 68976 }, { 0x336D, 69024 }, { 0x336E, 69030 }, { 0x336F, 69042 }, { 0x3370, 69036 }, { 0x3371, 36122 }, { 0x3372, 35925 }, { 0x3373, 35907 }, { 0x3374, 36088 }, { 0x3375, 36059 }, { 0x3376, 36066 }, { 0x3377, 35931 }, { 0x3378, 35936 }, { 0x3379, 35933 }, { 0x337A, 35957 }, { 0x337B, 36100 }, { 0x337C, 36104 }, { 0x337D, 36108 }, { 0x337E, 36096 }, { 0x337F, 36461 }, { 0x3380, 36063 }, { 0x3381, 36047 }, { 0x3382, 36013 }, { 0x3383, 35992 }, { 0x3384, 35959 }, { 0x3385, 35961 }, { 0x3386, 35994 }, { 0x3387, 35943 }, { 0x3388, 36090 }, { 0x3389, 36173 }, { 0x338A, 36068 }, { 0x338B, 36049 }, { 0x338C, 36016 }, { 0x338D, 36019 }, { 0x338E, 35999 }, { 0x338F, 35963 }, { 0x3390, 35953 }, { 0x3391, 36124 }, { 0x3392, 36130 }, { 0x3393, 36116 }, { 0x3394, 36151 }, { 0x3395, 36022 }, { 0x3396, 36001 }, { 0x3397, 35929 }, { 0x3398, 35967 }, { 0x3399, 35941 }, { 0x339A, 36051 }, { 0x339B, 36025 }, { 0x339C, 36003 }, { 0x339D, 35915 }, { 0x339E, 35969 }, { 0x339F, 36008 }, { 0x33A0, 35920 }, { 0x33A1, 35898 }, { 0x33A2, 35977 }, { 0x33A3, 36005 }, { 0x33A4, 35917 }, { 0x33A5, 35895 }, { 0x33A6, 35971 }, { 0x33A7, 35886 }, { 0x33A8, 35890 }, { 0x33A9, 36061 }, { 0x33AA, 36126 }, { 0x33AB, 36136 }, { 0x33AC, 36118 }, { 0x33AD, 36140 }, { 0x33AE, 36142 }, { 0x33AF, 36146 }, { 0x33B0, 36076 }, { 0x33B1, 36053 }, { 0x33B2, 36028 }, { 0x33B3, 36011 }, { 0x33B4, 36078 }, { 0x33B5, 36055 }, { 0x33B6, 36031 }, { 0x33B7, 36037 }, { 0x33B8, 35982 }, { 0x33B9, 36039 }, { 0x33BA, 36080 }, { 0x33BB, 36057 }, { 0x33BC, 36034 }, { 0x33BD, 36042 }, { 0x33BE, 35984 }, { 0x33BF, 36044 }, { 0x33C0, 35880 }, { 0x33C1, 35883 }, { 0x33C2, 35905 }, { 0x33C3, 35909 }, { 0x33C4, 35911 }, { 0x33C5, 35913 }, { 0x33C6, 35876 }, { 0x33C7, 35923 }, { 0x33C8, 35927 }, { 0x33C9, 35945 }, { 0x33CA, 35947 }, { 0x33CB, 35951 }, { 0x33CC, 35955 }, { 0x33CD, 35965 }, { 0x33CE, 35974 }, { 0x33CF, 35980 }, { 0x33D0, 35986 }, { 0x33D1, 35988 }, { 0x33D2, 36128 }, { 0x33D3, 35990 }, { 0x33D4, 35996 }, { 0x33D5, 36132 }, { 0x33D6, 36134 }, { 0x33D7, 36070 }, { 0x33D8, 36072 }, { 0x33D9, 36138 }, { 0x33DA, 36074 }, { 0x33DB, 36082 }, { 0x33DC, 36084 }, { 0x33DD, 36086 }, { 0x33DE, 35901 }, { 0x33DF, 35872 }, { 0x33E0, 68707 }, { 0x33E1, 68725 }, { 0x33E2, 68761 }, { 0x33E3, 68737 }, { 0x33E4, 68731 }, { 0x33E5, 68713 }, { 0x33E6, 68755 }, { 0x33E7, 68749 }, { 0x33E8, 68743 }, { 0x33E9, 68719 }, { 0x33EA, 68767 }, { 0x33EB, 68779 }, { 0x33EC, 68821 }, { 0x33ED, 68809 }, { 0x33EE, 68791 }, { 0x33EF, 68797 }, { 0x33F0, 68827 }, { 0x33F1, 68803 }, { 0x33F2, 68815 }, { 0x33F3, 68785 }, { 0x33F4, 68839 }, { 0x33F5, 68851 }, { 0x33F6, 68887 }, { 0x33F7, 68863 }, { 0x33F8, 68857 }, { 0x33F9, 68845 }, { 0x33FA, 68881 }, { 0x33FB, 68875 }, { 0x33FC, 68869 }, { 0x33FD, 68773 }, { 0x33FE, 68833 }, { 0x33FF, 36114 }, { 0x4DC0, 52824 }, { 0x4DC1, 52838 }, { 0x4DC2, 52975 }, { 0x4DC3, 52945 }, { 0x4DC4, 52921 }, { 0x4DC5, 52927 }, { 0x4DC6, 52777 }, { 0x4DC7, 52907 }, { 0x4DC8, 52883 }, { 0x4DC9, 52942 }, { 0x4DCA, 52880 }, { 0x4DCB, 53002 }, { 0x4DCC, 52987 }, { 0x4DCD, 52864 }, { 0x4DCE, 52911 }, { 0x4DCF, 52984 }, { 0x4DD0, 52958 }, { 0x4DD1, 52843 }, { 0x4DD2, 52924 }, { 0x4DD3, 53017 }, { 0x4DD4, 52895 }, { 0x4DD5, 52853 }, { 0x4DD6, 52971 }, { 0x4DD7, 52904 }, { 0x4DD8, 52968 }, { 0x4DD9, 52860 }, { 0x4DDA, 52876 }, { 0x4DDB, 52868 }, { 0x4DDC, 52799 }, { 0x4DDD, 52819 }, { 0x4DDE, 52965 }, { 0x4DDF, 52933 }, { 0x4DE0, 52918 }, { 0x4DE1, 52856 }, { 0x4DE2, 52939 }, { 0x4DE3, 52952 }, { 0x4DE4, 52785 }, { 0x4DE5, 52993 }, { 0x4DE6, 53011 }, { 0x4DE7, 53005 }, { 0x4DE8, 52930 }, { 0x4DE9, 52936 }, { 0x4DEA, 53014 }, { 0x4DEB, 52899 }, { 0x4DEC, 52961 }, { 0x4DED, 52914 }, { 0x4DEE, 52996 }, { 0x4DEF, 52781 }, { 0x4DF0, 52999 }, { 0x4DF1, 52815 }, { 0x4DF2, 52810 }, { 0x4DF3, 52804 }, { 0x4DF4, 53008 }, { 0x4DF5, 52829 }, { 0x4DF6, 52949 }, { 0x4DF7, 52834 }, { 0x4DF8, 52789 }, { 0x4DF9, 52794 }, { 0x4DFA, 52981 }, { 0x4DFB, 52990 }, { 0x4DFC, 52872 }, { 0x4DFD, 52887 }, { 0x4DFE, 52849 }, { 0x4DFF, 52891 }, { 0x5000, 634 }, { 0x5001, 637 }, { 0x5002, 520 }, { 0x5003, 631 }, { 0x5004, 1300 }, { 0x5005, 1303 }, { 0x5006, 628 }, { 0x5007, 1297 }, { 0x5008, 529 }, { 0x5009, 532 }, { 0x500A, 514 }, { 0x500B, 526 }, { 0x500C, 2011 }, { 0x500D, 802 }, { 0x500E, 2008 }, { 0x500F, 721 }, { 0x5010, 724 }, { 0x5011, 523 }, { 0x5012, 718 }, { 0x5013, 586 }, { 0x5014, 517 }, { 0x5015, 829 }, { 0x5016, 910 }, { 0x5017, 913 }, { 0x5018, 541 }, { 0x5019, 907 }, { 0x501A, 2341 }, { 0x501B, 2344 }, { 0x501C, 904 }, { 0x501D, 2338 }, { 0x501E, 874 }, { 0x501F, 877 }, { 0x5020, 535 }, { 0x5021, 871 }, { 0x5022, 2350 }, { 0x5023, 925 }, { 0x5024, 2347 }, { 0x5025, 919 }, { 0x5026, 922 }, { 0x5027, 544 }, { 0x5028, 916 }, { 0x5029, 901 }, { 0x502A, 538 }, { 0x502B, 898 }, { 0x502C, 934 }, { 0x502D, 937 }, { 0x502E, 547 }, { 0x502F, 928 }, { 0x5030, 2353 }, { 0x5031, 931 }, { 0x5032, 946 }, { 0x5033, 949 }, { 0x5034, 550 }, { 0x5035, 940 }, { 0x5036, 2356 }, { 0x5037, 943 }, { 0x5038, 1705 }, { 0x5039, 1708 }, { 0x503A, 730 }, { 0x503B, 1702 }, { 0x503C, 3274 }, { 0x503D, 1699 }, { 0x503E, 3271 }, { 0x503F, 1693 }, { 0x5040, 1696 }, { 0x5041, 727 }, { 0x5042, 1690 }, { 0x5043, 3280 }, { 0x5044, 1720 }, { 0x5045, 3277 }, { 0x5046, 1714 }, { 0x5047, 1717 }, { 0x5048, 733 }, { 0x5049, 1711 }, { 0x504A, 1729 }, { 0x504B, 1732 }, { 0x504C, 736 }, { 0x504D, 1723 }, { 0x504E, 3283 }, { 0x504F, 1726 }, { 0x5050, 1741 }, { 0x5051, 1744 }, { 0x5052, 739 }, { 0x5053, 1735 }, { 0x5054, 3286 }, { 0x5055, 1738 }, { 0x5056, 2299 }, { 0x5057, 2302 }, { 0x5058, 886 }, { 0x5059, 2296 }, { 0x505A, 3709 }, { 0x505B, 3712 }, { 0x505C, 2293 }, { 0x505D, 3706 }, { 0x505E, 2281 }, { 0x505F, 2284 }, { 0x5060, 880 }, { 0x5061, 2278 }, { 0x5062, 3718 }, { 0x5063, 2314 }, { 0x5064, 3715 }, { 0x5065, 2308 }, { 0x5066, 2311 }, { 0x5067, 889 }, { 0x5068, 2305 }, { 0x5069, 2290 }, { 0x506A, 883 }, { 0x506B, 2287 }, { 0x506C, 2323 }, { 0x506D, 2326 }, { 0x506E, 892 }, { 0x506F, 2317 }, { 0x5070, 3721 }, { 0x5071, 2320 }, { 0x5072, 2332 }, { 0x5073, 2335 }, { 0x5074, 895 }, { 0x5075, 2329 }, { 0x5076, 2959 }, { 0x5077, 2962 }, { 0x5078, 1561 }, { 0x5079, 2956 }, { 0x507A, 3871 }, { 0x507B, 2953 }, { 0x507C, 3868 }, { 0x507D, 2947 }, { 0x507E, 2950 }, { 0x507F, 1558 }, { 0x5080, 2944 }, { 0x5081, 2968 }, { 0x5082, 2971 }, { 0x5083, 1564 }, { 0x5084, 2965 }, { 0x5085, 2980 }, { 0x5086, 2983 }, { 0x5087, 1567 }, { 0x5088, 2974 }, { 0x5089, 3874 }, { 0x508A, 2977 }, { 0x508B, 2992 }, { 0x508C, 2995 }, { 0x508D, 1570 }, { 0x508E, 2986 }, { 0x508F, 3877 }, { 0x5090, 2989 }, { 0x5091, 2647 }, { 0x5092, 2650 }, { 0x5093, 1252 }, { 0x5094, 2644 }, { 0x5095, 3793 }, { 0x5096, 2641 }, { 0x5097, 3790 }, { 0x5098, 2635 }, { 0x5099, 2638 }, { 0x509A, 1249 }, { 0x509B, 2632 }, { 0x509C, 3799 }, { 0x509D, 2662 }, { 0x509E, 3796 }, { 0x509F, 2656 }, { 0x50A0, 2659 }, { 0x50A1, 1255 }, { 0x50A2, 2653 }, { 0x50A3, 2671 }, { 0x50A4, 2674 }, { 0x50A5, 1258 }, { 0x50A6, 2665 }, { 0x50A7, 3802 }, { 0x50A8, 2668 }, { 0x50A9, 2683 }, { 0x50AA, 1261 }, { 0x50AB, 2677 }, { 0x50AC, 3805 }, { 0x50AD, 2680 }, { 0x50AE, 1513 }, { 0x50AF, 1516 }, { 0x50B0, 691 }, { 0x50B1, 1510 }, { 0x50B2, 2929 }, { 0x50B3, 1507 }, { 0x50B4, 2926 }, { 0x50B5, 1486 }, { 0x50B6, 1489 }, { 0x50B7, 685 }, { 0x50B8, 1483 }, { 0x50B9, 2935 }, { 0x50BA, 2938 }, { 0x50BB, 1528 }, { 0x50BC, 2932 }, { 0x50BD, 1522 }, { 0x50BE, 1525 }, { 0x50BF, 694 }, { 0x50C0, 1519 }, { 0x50C1, 1492 }, { 0x50C2, 688 }, { 0x50C3, 1537 }, { 0x50C4, 1540 }, { 0x50C5, 697 }, { 0x50C6, 1531 }, { 0x50C7, 2941 }, { 0x50C8, 1534 }, { 0x50C9, 1546 }, { 0x50CA, 1549 }, { 0x50CB, 700 }, { 0x50CC, 1543 }, { 0x50CD, 1108 }, { 0x50CE, 1111 }, { 0x50CF, 592 }, { 0x50D0, 1105 }, { 0x50D1, 1099 }, { 0x50D2, 1102 }, { 0x50D3, 589 }, { 0x50D4, 1096 }, { 0x50D5, 1117 }, { 0x50D6, 595 }, { 0x50D7, 1114 }, { 0x50D8, 1126 }, { 0x50D9, 1129 }, { 0x50DA, 598 }, { 0x50DB, 1120 }, { 0x50DC, 2494 }, { 0x50DD, 1123 }, { 0x50DE, 1135 }, { 0x50DF, 1138 }, { 0x50E0, 601 }, { 0x50E1, 1132 }, { 0x50E2, 2035 }, { 0x50E3, 2038 }, { 0x50E4, 808 }, { 0x50E5, 2032 }, { 0x50E6, 3523 }, { 0x50E7, 3526 }, { 0x50E8, 2029 }, { 0x50E9, 3520 }, { 0x50EA, 2017 }, { 0x50EB, 2020 }, { 0x50EC, 805 }, { 0x50ED, 2014 }, { 0x50EE, 2044 }, { 0x50EF, 2047 }, { 0x50F0, 811 }, { 0x50F1, 2041 }, { 0x50F2, 2026 }, { 0x50F3, 2023 }, { 0x50F4, 2056 }, { 0x50F5, 2059 }, { 0x50F6, 814 }, { 0x50F7, 2050 }, { 0x50F8, 3529 }, { 0x50F9, 2053 }, { 0x50FA, 2068 }, { 0x50FB, 2071 }, { 0x50FC, 817 }, { 0x50FD, 2062 }, { 0x50FE, 3532 }, { 0x50FF, 2065 }, { 0x5100, 1066 }, { 0x5101, 1069 }, { 0x5102, 577 }, { 0x5103, 1063 }, { 0x5104, 2485 }, { 0x5105, 1060 }, { 0x5106, 2482 }, { 0x5107, 1033 }, { 0x5108, 1036 }, { 0x5109, 571 }, { 0x510A, 1030 }, { 0x510B, 2488 }, { 0x510C, 1081 }, { 0x510D, 1075 }, { 0x510E, 1078 }, { 0x510F, 580 }, { 0x5110, 1072 }, { 0x5111, 1057 }, { 0x5112, 574 }, { 0x5113, 1054 }, { 0x5114, 1090 }, { 0x5115, 1093 }, { 0x5116, 583 }, { 0x5117, 1084 }, { 0x5118, 2491 }, { 0x5119, 1087 }, { 0x511A, 1978 }, { 0x511B, 1981 }, { 0x511C, 793 }, { 0x511D, 1975 }, { 0x511E, 3505 }, { 0x511F, 1972 }, { 0x5120, 3502 }, { 0x5121, 1960 }, { 0x5122, 1963 }, { 0x5123, 787 }, { 0x5124, 1957 }, { 0x5125, 3511 }, { 0x5126, 3514 }, { 0x5127, 1993 }, { 0x5128, 3508 }, { 0x5129, 1987 }, { 0x512A, 1990 }, { 0x512B, 796 }, { 0x512C, 1984 }, { 0x512D, 1969 }, { 0x512E, 790 }, { 0x512F, 1966 }, { 0x5130, 2002 }, { 0x5131, 2005 }, { 0x5132, 799 }, { 0x5133, 1996 }, { 0x5134, 3517 }, { 0x5135, 1999 }, { 0x5136, 2452 }, { 0x5137, 2455 }, { 0x5138, 1045 }, { 0x5139, 2449 }, { 0x513A, 3742 }, { 0x513B, 2446 }, { 0x513C, 3739 }, { 0x513D, 2434 }, { 0x513E, 2437 }, { 0x513F, 1039 }, { 0x5140, 2431 }, { 0x5141, 3748 }, { 0x5142, 2467 }, { 0x5143, 3745 }, { 0x5144, 2461 }, { 0x5145, 2464 }, { 0x5146, 1048 }, { 0x5147, 2458 }, { 0x5148, 2443 }, { 0x5149, 1042 }, { 0x514A, 2440 }, { 0x514B, 2476 }, { 0x514C, 2479 }, { 0x514D, 1051 }, { 0x514E, 2470 }, { 0x514F, 3751 }, { 0x5150, 2473 }, { 0x5151, 3019 }, { 0x5152, 3022 }, { 0x5153, 1579 }, { 0x5154, 3016 }, { 0x5155, 3880 }, { 0x5156, 3013 }, { 0x5157, 3001 }, { 0x5158, 3004 }, { 0x5159, 1573 }, { 0x515A, 2998 }, { 0x515B, 3028 }, { 0x515C, 3031 }, { 0x515D, 1582 }, { 0x515E, 3025 }, { 0x515F, 3010 }, { 0x5160, 1576 }, { 0x5161, 3007 }, { 0x5162, 3040 }, { 0x5163, 3043 }, { 0x5164, 1585 }, { 0x5165, 3034 }, { 0x5166, 3883 }, { 0x5167, 3037 }, { 0x5168, 2707 }, { 0x5169, 2710 }, { 0x516A, 1270 }, { 0x516B, 2704 }, { 0x516C, 3811 }, { 0x516D, 3814 }, { 0x516E, 2701 }, { 0x516F, 3808 }, { 0x5170, 2689 }, { 0x5171, 2692 }, { 0x5172, 1264 }, { 0x5173, 2686 }, { 0x5174, 3817 }, { 0x5175, 2722 }, { 0x5176, 2716 }, { 0x5177, 2719 }, { 0x5178, 2713 }, { 0x5179, 2698 }, { 0x517A, 1267 }, { 0x517B, 2695 }, { 0x517C, 2725 }, { 0x517D, 1609 }, { 0x517E, 1612 }, { 0x517F, 709 }, { 0x5180, 1606 }, { 0x5181, 3079 }, { 0x5182, 1603 }, { 0x5183, 3076 }, { 0x5184, 1555 }, { 0x5185, 703 }, { 0x5186, 1552 }, { 0x5187, 3178 }, { 0x5188, 1651 }, { 0x5189, 3175 }, { 0x518A, 1630 }, { 0x518B, 1633 }, { 0x518C, 712 }, { 0x518D, 1627 }, { 0x518E, 1591 }, { 0x518F, 706 }, { 0x5190, 1588 }, { 0x5191, 1660 }, { 0x5192, 1663 }, { 0x5193, 715 }, { 0x5194, 1654 }, { 0x5195, 3181 }, { 0x5196, 1657 }, { 0x5197, 2593 }, { 0x5198, 2596 }, { 0x5199, 1237 }, { 0x519A, 2590 }, { 0x519B, 3775 }, { 0x519C, 2587 }, { 0x519D, 3772 }, { 0x519E, 2575 }, { 0x519F, 2578 }, { 0x51A0, 1231 }, { 0x51A1, 2572 }, { 0x51A2, 3781 }, { 0x51A3, 2605 }, { 0x51A4, 3778 }, { 0x51A5, 2602 }, { 0x51A6, 1240 }, { 0x51A7, 2599 }, { 0x51A8, 2584 }, { 0x51A9, 1234 }, { 0x51AA, 2581 }, { 0x51AB, 2614 }, { 0x51AC, 2617 }, { 0x51AD, 1243 }, { 0x51AE, 2608 }, { 0x51AF, 3784 }, { 0x51B0, 2611 }, { 0x51B1, 2626 }, { 0x51B2, 2629 }, { 0x51B3, 1246 }, { 0x51B4, 2620 }, { 0x51B5, 3787 }, { 0x51B6, 2623 }, { 0x51B7, 1441 }, { 0x51B8, 1444 }, { 0x51B9, 673 }, { 0x51BA, 1438 }, { 0x51BB, 2863 }, { 0x51BC, 2866 }, { 0x51BD, 1435 }, { 0x51BE, 2860 }, { 0x51BF, 1423 }, { 0x51C0, 1426 }, { 0x51C1, 667 }, { 0x51C2, 1420 }, { 0x51C3, 2872 }, { 0x51C4, 2875 }, { 0x51C5, 1456 }, { 0x51C6, 2869 }, { 0x51C7, 1450 }, { 0x51C8, 1453 }, { 0x51C9, 676 }, { 0x51CA, 1447 }, { 0x51CB, 1432 }, { 0x51CC, 670 }, { 0x51CD, 1429 }, { 0x51CE, 1465 }, { 0x51CF, 1468 }, { 0x51D0, 679 }, { 0x51D1, 1459 }, { 0x51D2, 2878 }, { 0x51D3, 1462 }, { 0x51D4, 1477 }, { 0x51D5, 1480 }, { 0x51D6, 682 }, { 0x51D7, 1471 }, { 0x51D8, 2881 }, { 0x51D9, 1474 }, { 0x51DA, 1180 }, { 0x51DB, 1183 }, { 0x51DC, 610 }, { 0x51DD, 1177 }, { 0x51DE, 2551 }, { 0x51DF, 2554 }, { 0x51E0, 1174 }, { 0x51E1, 2548 }, { 0x51E2, 1144 }, { 0x51E3, 1147 }, { 0x51E4, 604 }, { 0x51E5, 1141 }, { 0x51E6, 2560 }, { 0x51E7, 2563 }, { 0x51E8, 1195 }, { 0x51E9, 2557 }, { 0x51EA, 1189 }, { 0x51EB, 1192 }, { 0x51EC, 613 }, { 0x51ED, 1186 }, { 0x51EE, 1153 }, { 0x51EF, 1156 }, { 0x51F0, 607 }, { 0x51F1, 1150 }, { 0x51F2, 1204 }, { 0x51F3, 1207 }, { 0x51F4, 616 }, { 0x51F5, 1198 }, { 0x51F6, 2566 }, { 0x51F7, 1201 }, { 0x51F8, 1390 }, { 0x51F9, 1393 }, { 0x51FA, 658 }, { 0x51FB, 1387 }, { 0x51FC, 2848 }, { 0x51FD, 1384 }, { 0x51FE, 2845 }, { 0x51FF, 1369 }, { 0x5200, 1372 }, { 0x5201, 652 }, { 0x5202, 1366 }, { 0x5203, 2854 }, { 0x5204, 1405 }, { 0x5205, 2851 }, { 0x5206, 1399 }, { 0x5207, 1402 }, { 0x5208, 661 }, { 0x5209, 1396 }, { 0x520A, 1378 }, { 0x520B, 1381 }, { 0x520C, 655 }, { 0x520D, 1375 }, { 0x520E, 1414 }, { 0x520F, 1417 }, { 0x5210, 664 }, { 0x5211, 1408 }, { 0x5212, 2857 }, { 0x5213, 1411 }, { 0x5214, 2518 }, { 0x5215, 2521 }, { 0x5216, 1165 }, { 0x5217, 3757 }, { 0x5218, 2515 }, { 0x5219, 3754 }, { 0x521A, 2500 }, { 0x521B, 2503 }, { 0x521C, 1159 }, { 0x521D, 2497 }, { 0x521E, 3763 }, { 0x521F, 3766 }, { 0x5220, 2533 }, { 0x5221, 3760 }, { 0x5222, 2527 }, { 0x5223, 2530 }, { 0x5224, 1168 }, { 0x5225, 2524 }, { 0x5226, 2509 }, { 0x5227, 2512 }, { 0x5228, 1162 }, { 0x5229, 2506 }, { 0x522A, 2542 }, { 0x522B, 2545 }, { 0x522C, 1171 }, { 0x522D, 2536 }, { 0x522E, 3769 }, { 0x522F, 2539 }, { 0x5230, 3856 }, { 0x5231, 2899 }, { 0x5232, 2887 }, { 0x5233, 2890 }, { 0x5234, 1495 }, { 0x5235, 2884 }, { 0x5236, 3862 }, { 0x5237, 2911 }, { 0x5238, 3859 }, { 0x5239, 2905 }, { 0x523A, 2908 }, { 0x523B, 1501 }, { 0x523C, 2902 }, { 0x523D, 2896 }, { 0x523E, 1498 }, { 0x523F, 2893 }, { 0x5240, 2920 }, { 0x5241, 2923 }, { 0x5242, 1504 }, { 0x5243, 2914 }, { 0x5244, 3865 }, { 0x5245, 2917 }, { 0x5246, 2758 }, { 0x5247, 2761 }, { 0x5248, 1291 }, { 0x5249, 2755 }, { 0x524A, 3823 }, { 0x524B, 3826 }, { 0x524C, 2752 }, { 0x524D, 3820 }, { 0x524E, 2740 }, { 0x524F, 2743 }, { 0x5250, 1285 }, { 0x5251, 2737 }, { 0x5252, 3832 }, { 0x5253, 3835 }, { 0x5254, 2773 }, { 0x5255, 3829 }, { 0x5256, 2767 }, { 0x5257, 2770 }, { 0x5258, 1294 }, { 0x5259, 2764 }, { 0x525A, 2749 }, { 0x525B, 1288 }, { 0x525C, 2746 }, { 0x525D, 3889 }, { 0x525E, 3061 }, { 0x525F, 3886 }, { 0x5260, 3049 }, { 0x5261, 3052 }, { 0x5262, 1594 }, { 0x5263, 3046 }, { 0x5264, 3892 }, { 0x5265, 3895 }, { 0x5266, 3073 }, { 0x5267, 3067 }, { 0x5268, 3070 }, { 0x5269, 1600 }, { 0x526A, 3064 }, { 0x526B, 3058 }, { 0x526C, 1597 }, { 0x526D, 3055 }, { 0x526E, 1228 }, { 0x526F, 2569 }, { 0x5270, 1225 }, { 0x5271, 1213 }, { 0x5272, 1216 }, { 0x5273, 619 }, { 0x5274, 1210 }, { 0x5275, 2731 }, { 0x5276, 2734 }, { 0x5277, 1282 }, { 0x5278, 2728 }, { 0x5279, 1276 }, { 0x527A, 1279 }, { 0x527B, 625 }, { 0x527C, 1273 }, { 0x527D, 1222 }, { 0x527E, 622 }, { 0x527F, 1219 }, { 0x5280, 2077 }, { 0x5281, 2080 }, { 0x5282, 820 }, { 0x5283, 2074 }, { 0x5284, 3538 }, { 0x5285, 2095 }, { 0x5286, 3535 }, { 0x5287, 2092 }, { 0x5288, 826 }, { 0x5289, 2089 }, { 0x528A, 2086 }, { 0x528B, 823 }, { 0x528C, 2083 }, { 0x528D, 2218 }, { 0x528E, 2221 }, { 0x528F, 859 }, { 0x5290, 2215 }, { 0x5291, 3637 }, { 0x5292, 2212 }, { 0x5293, 3634 }, { 0x5294, 2185 }, { 0x5295, 2188 }, { 0x5296, 853 }, { 0x5297, 2182 }, { 0x5298, 3643 }, { 0x5299, 2233 }, { 0x529A, 3640 }, { 0x529B, 2227 }, { 0x529C, 2230 }, { 0x529D, 862 }, { 0x529E, 2224 }, { 0x529F, 2194 }, { 0x52A0, 856 }, { 0x52A1, 2191 }, { 0x52A2, 2242 }, { 0x52A3, 2245 }, { 0x52A4, 865 }, { 0x52A5, 2236 }, { 0x52A6, 3646 }, { 0x52A7, 2239 }, { 0x52A8, 2254 }, { 0x52A9, 2257 }, { 0x52AA, 868 }, { 0x52AB, 2248 }, { 0x52AC, 3649 }, { 0x52AD, 2251 }, { 0x52AE, 988 }, { 0x52AF, 991 }, { 0x52B0, 559 }, { 0x52B1, 985 }, { 0x52B2, 2413 }, { 0x52B3, 2416 }, { 0x52B4, 982 }, { 0x52B5, 2410 }, { 0x52B6, 955 }, { 0x52B7, 958 }, { 0x52B8, 553 }, { 0x52B9, 952 }, { 0x52BA, 2422 }, { 0x52BB, 1003 }, { 0x52BC, 2419 }, { 0x52BD, 997 }, { 0x52BE, 1000 }, { 0x52BF, 562 }, { 0x52C0, 994 }, { 0x52C1, 964 }, { 0x52C2, 556 }, { 0x52C3, 961 }, { 0x52C4, 1012 }, { 0x52C5, 1015 }, { 0x52C6, 565 }, { 0x52C7, 1006 }, { 0x52C8, 2425 }, { 0x52C9, 1009 }, { 0x52CA, 1024 }, { 0x52CB, 1027 }, { 0x52CC, 568 }, { 0x52CD, 1018 }, { 0x52CE, 2428 }, { 0x52CF, 1021 }, { 0x52D0, 3673 }, { 0x52D1, 3676 }, { 0x52D2, 2266 }, { 0x52D3, 3670 }, { 0x52D4, 3997 }, { 0x52D5, 4000 }, { 0x52D6, 3667 }, { 0x52D7, 3994 }, { 0x52D8, 3655 }, { 0x52D9, 3658 }, { 0x52DA, 2260 }, { 0x52DB, 3652 }, { 0x52DC, 3682 }, { 0x52DD, 2269 }, { 0x52DE, 3679 }, { 0x52DF, 3664 }, { 0x52E0, 2263 }, { 0x52E1, 3661 }, { 0x52E2, 3691 }, { 0x52E3, 2272 }, { 0x52E4, 3685 }, { 0x52E5, 4003 }, { 0x52E6, 3688 }, { 0x52E7, 3700 }, { 0x52E8, 3703 }, { 0x52E9, 2275 }, { 0x52EA, 3694 }, { 0x52EB, 4006 }, { 0x52EC, 3697 }, { 0x52ED, 3235 }, { 0x52EE, 3238 }, { 0x52EF, 1681 }, { 0x52F0, 3232 }, { 0x52F1, 3940 }, { 0x52F2, 3229 }, { 0x52F3, 3937 }, { 0x52F4, 3220 }, { 0x52F5, 3223 }, { 0x52F6, 1675 }, { 0x52F7, 3217 }, { 0x52F8, 3943 }, { 0x52F9, 3247 }, { 0x52FA, 3244 }, { 0x52FB, 3241 }, { 0x52FC, 3226 }, { 0x52FD, 1678 }, { 0x52FE, 3256 }, { 0x52FF, 1684 }, { 0x5300, 3250 }, { 0x5301, 3946 }, { 0x5302, 3253 }, { 0x5303, 3265 }, { 0x5304, 3268 }, { 0x5305, 1687 }, { 0x5306, 3259 }, { 0x5307, 3949 }, { 0x5308, 3262 }, { 0x5309, 1897 }, { 0x530A, 1900 }, { 0x530B, 775 }, { 0x530C, 1894 }, { 0x530D, 3430 }, { 0x530E, 1891 }, { 0x530F, 3427 }, { 0x5310, 1864 }, { 0x5311, 1867 }, { 0x5312, 769 }, { 0x5313, 1861 }, { 0x5314, 3493 }, { 0x5315, 1930 }, { 0x5316, 3490 }, { 0x5317, 1906 }, { 0x5318, 1909 }, { 0x5319, 778 }, { 0x531A, 1903 }, { 0x531B, 1873 }, { 0x531C, 772 }, { 0x531D, 1870 }, { 0x531E, 1939 }, { 0x531F, 1942 }, { 0x5320, 781 }, { 0x5321, 1933 }, { 0x5322, 3496 }, { 0x5323, 1936 }, { 0x5324, 1951 }, { 0x5325, 1954 }, { 0x5326, 784 }, { 0x5327, 1945 }, { 0x5328, 3499 }, { 0x5329, 1948 }, { 0x532A, 3454 }, { 0x532B, 3457 }, { 0x532C, 1918 }, { 0x532D, 3451 }, { 0x532E, 3976 }, { 0x532F, 3448 }, { 0x5330, 3973 }, { 0x5331, 3436 }, { 0x5332, 3439 }, { 0x5333, 1912 }, { 0x5334, 3433 }, { 0x5335, 3463 }, { 0x5336, 3466 }, { 0x5337, 1921 }, { 0x5338, 3460 }, { 0x5339, 3445 }, { 0x533A, 1915 }, { 0x533B, 3442 }, { 0x533C, 3472 }, { 0x533D, 3475 }, { 0x533E, 1924 }, { 0x533F, 3469 }, { 0x5340, 3484 }, { 0x5341, 3487 }, { 0x5342, 1927 }, { 0x5343, 3478 }, { 0x5344, 3979 }, { 0x5345, 3481 }, { 0x5346, 3583 }, { 0x5347, 3586 }, { 0x5348, 2197 }, { 0x5349, 3580 }, { 0x534A, 3985 }, { 0x534B, 3607 }, { 0x534C, 3982 }, { 0x534D, 3601 }, { 0x534E, 3604 }, { 0x534F, 2203 }, { 0x5350, 3598 }, { 0x5351, 3592 }, { 0x5352, 3595 }, { 0x5353, 2200 }, { 0x5354, 3589 }, { 0x5355, 3616 }, { 0x5356, 3619 }, { 0x5357, 2206 }, { 0x5358, 3610 }, { 0x5359, 3988 }, { 0x535A, 3613 }, { 0x535B, 3628 }, { 0x535C, 3631 }, { 0x535D, 2209 }, { 0x535E, 3622 }, { 0x535F, 3991 }, { 0x5360, 3625 }, { 0x5361, 2362 }, { 0x5362, 2365 }, { 0x5363, 967 }, { 0x5364, 2359 }, { 0x5365, 3727 }, { 0x5366, 3730 }, { 0x5367, 2386 }, { 0x5368, 3724 }, { 0x5369, 2380 }, { 0x536A, 2383 }, { 0x536B, 973 }, { 0x536C, 2377 }, { 0x536D, 2371 }, { 0x536E, 2374 }, { 0x536F, 970 }, { 0x5370, 2368 }, { 0x5371, 2395 }, { 0x5372, 976 }, { 0x5373, 2389 }, { 0x5374, 3733 }, { 0x5375, 2392 }, { 0x5376, 2404 }, { 0x5377, 2407 }, { 0x5378, 979 }, { 0x5379, 2398 }, { 0x537A, 3736 }, { 0x537B, 2401 }, { 0x537C, 3313 }, { 0x537D, 1819 }, { 0x537E, 3952 }, { 0x537F, 3334 }, { 0x5380, 3328 }, { 0x5381, 3331 }, { 0x5382, 1825 }, { 0x5383, 3325 }, { 0x5384, 3319 }, { 0x5385, 3322 }, { 0x5386, 1822 }, { 0x5387, 3316 }, { 0x5388, 3343 }, { 0x5389, 3346 }, { 0x538A, 1828 }, { 0x538B, 3337 }, { 0x538C, 3955 }, { 0x538D, 3340 }, { 0x538E, 3355 }, { 0x538F, 3358 }, { 0x5390, 1831 }, { 0x5391, 3349 }, { 0x5392, 3958 }, { 0x5393, 3352 }, { 0x5394, 3130 }, { 0x5395, 3133 }, { 0x5396, 1636 }, { 0x5397, 3127 }, { 0x5398, 3148 }, { 0x5399, 1642 }, { 0x539A, 3145 }, { 0x539B, 3139 }, { 0x539C, 3142 }, { 0x539D, 1639 }, { 0x539E, 3136 }, { 0x539F, 3157 }, { 0x53A0, 3160 }, { 0x53A1, 1645 }, { 0x53A2, 3151 }, { 0x53A3, 3916 }, { 0x53A4, 3154 }, { 0x53A5, 3169 }, { 0x53A6, 3172 }, { 0x53A7, 1648 }, { 0x53A8, 3163 }, { 0x53A9, 3919 }, { 0x53AA, 3166 }, { 0x53AB, 3376 }, { 0x53AC, 3379 }, { 0x53AD, 1876 }, { 0x53AE, 3373 }, { 0x53AF, 3964 }, { 0x53B0, 3400 }, { 0x53B1, 3961 }, { 0x53B2, 3394 }, { 0x53B3, 3397 }, { 0x53B4, 1882 }, { 0x53B5, 3391 }, { 0x53B6, 3385 }, { 0x53B7, 3388 }, { 0x53B8, 1879 }, { 0x53B9, 3382 }, { 0x53BA, 3409 }, { 0x53BB, 3412 }, { 0x53BC, 1885 }, { 0x53BD, 3403 }, { 0x53BE, 3967 }, { 0x53BF, 3406 }, { 0x53C0, 3421 }, { 0x53C1, 3424 }, { 0x53C2, 1888 }, { 0x53C3, 3415 }, { 0x53C4, 3970 }, { 0x53C5, 3418 }, { 0x53C6, 1798 }, { 0x53C7, 1801 }, { 0x53C8, 754 }, { 0x53C9, 1795 }, { 0x53CA, 3364 }, { 0x53CB, 1834 }, { 0x53CC, 3361 }, { 0x53CD, 1813 }, { 0x53CE, 1816 }, { 0x53CF, 760 }, { 0x53D0, 1810 }, { 0x53D1, 1807 }, { 0x53D2, 757 }, { 0x53D3, 1804 }, { 0x53D4, 1843 }, { 0x53D5, 1846 }, { 0x53D6, 763 }, { 0x53D7, 1837 }, { 0x53D8, 3367 }, { 0x53D9, 1840 }, { 0x53DA, 1855 }, { 0x53DB, 1858 }, { 0x53DC, 766 }, { 0x53DD, 1849 }, { 0x53DE, 3370 }, { 0x53DF, 1852 }, { 0x53E0, 1312 }, { 0x53E1, 1315 }, { 0x53E2, 640 }, { 0x53E3, 1309 }, { 0x53E4, 2779 }, { 0x53E5, 2782 }, { 0x53E6, 1306 }, { 0x53E7, 2776 }, { 0x53E8, 2833 }, { 0x53E9, 2836 }, { 0x53EA, 1339 }, { 0x53EB, 2830 }, { 0x53EC, 1333 }, { 0x53ED, 1336 }, { 0x53EE, 643 }, { 0x53EF, 1330 }, { 0x53F0, 1348 }, { 0x53F1, 1351 }, { 0x53F2, 646 }, { 0x53F3, 1342 }, { 0x53F4, 2839 }, { 0x53F5, 1345 }, { 0x53F6, 1360 }, { 0x53F7, 1363 }, { 0x53F8, 649 }, { 0x53F9, 1354 }, { 0x53FA, 2842 }, { 0x53FB, 1357 }, { 0x53FC, 1753 }, { 0x53FD, 1756 }, { 0x53FE, 742 }, { 0x53FF, 1750 }, { 0x5400, 3292 }, { 0x5401, 3295 }, { 0x5402, 1747 }, { 0x5403, 3289 }, { 0x5404, 3301 }, { 0x5405, 3304 }, { 0x5406, 1768 }, { 0x5407, 3298 }, { 0x5408, 1762 }, { 0x5409, 1765 }, { 0x540A, 745 }, { 0x540B, 1759 }, { 0x540C, 1777 }, { 0x540D, 1780 }, { 0x540E, 748 }, { 0x540F, 1771 }, { 0x5410, 3307 }, { 0x5411, 1774 }, { 0x5412, 1789 }, { 0x5413, 1792 }, { 0x5414, 751 }, { 0x5415, 1783 }, { 0x5416, 3310 }, { 0x5417, 1786 }, { 0x5418, 2791 }, { 0x5419, 2794 }, { 0x541A, 1318 }, { 0x541B, 2788 }, { 0x541C, 3841 }, { 0x541D, 3844 }, { 0x541E, 2785 }, { 0x541F, 3838 }, { 0x5420, 3850 }, { 0x5421, 2806 }, { 0x5422, 3847 }, { 0x5423, 2800 }, { 0x5424, 2803 }, { 0x5425, 1321 }, { 0x5426, 2797 }, { 0x5427, 2815 }, { 0x5428, 2818 }, { 0x5429, 1324 }, { 0x542A, 2809 }, { 0x542B, 3853 }, { 0x542C, 2812 }, { 0x542D, 2824 }, { 0x542E, 2827 }, { 0x542F, 1327 }, { 0x5430, 2821 }, { 0x5431, 3088 }, { 0x5432, 3091 }, { 0x5433, 1615 }, { 0x5434, 3085 }, { 0x5435, 3901 }, { 0x5436, 3904 }, { 0x5437, 3082 }, { 0x5438, 3898 }, { 0x5439, 3907 }, { 0x543A, 3103 }, { 0x543B, 3097 }, { 0x543C, 3100 }, { 0x543D, 1618 }, { 0x543E, 3094 }, { 0x543F, 3112 }, { 0x5440, 1621 }, { 0x5441, 3106 }, { 0x5442, 3910 }, { 0x5443, 3109 }, { 0x5444, 3121 }, { 0x5445, 3124 }, { 0x5446, 1624 }, { 0x5447, 3115 }, { 0x5448, 3913 }, { 0x5449, 3118 }, { 0x544A, 3190 }, { 0x544B, 3193 }, { 0x544C, 1666 }, { 0x544D, 3187 }, { 0x544E, 3925 }, { 0x544F, 3928 }, { 0x5450, 3184 }, { 0x5451, 3922 }, { 0x5452, 3934 }, { 0x5453, 3205 }, { 0x5454, 3931 }, { 0x5455, 3199 }, { 0x5456, 3202 }, { 0x5457, 1669 }, { 0x5458, 3196 }, { 0x5459, 3211 }, { 0x545A, 3214 }, { 0x545B, 1672 }, { 0x545C, 3208 }, { 0x545D, 2104 }, { 0x545E, 2107 }, { 0x545F, 832 }, { 0x5460, 2101 }, { 0x5461, 3544 }, { 0x5462, 3547 }, { 0x5463, 2098 }, { 0x5464, 3541 }, { 0x5465, 3550 }, { 0x5466, 2119 }, { 0x5467, 2113 }, { 0x5468, 2116 }, { 0x5469, 835 }, { 0x546A, 2110 }, { 0x546B, 2128 }, { 0x546C, 2131 }, { 0x546D, 838 }, { 0x546E, 2122 }, { 0x546F, 3553 }, { 0x5470, 2125 }, { 0x5471, 2140 }, { 0x5472, 2143 }, { 0x5473, 841 }, { 0x5474, 2137 }, { 0x5475, 3559 }, { 0x5476, 3562 }, { 0x5477, 2134 }, { 0x5478, 3556 }, { 0x5479, 3568 }, { 0x547A, 3571 }, { 0x547B, 2155 }, { 0x547C, 3565 }, { 0x547D, 2149 }, { 0x547E, 2152 }, { 0x547F, 844 }, { 0x5480, 2146 }, { 0x5481, 2164 }, { 0x5482, 2167 }, { 0x5483, 847 }, { 0x5484, 2158 }, { 0x5485, 3574 }, { 0x5486, 2161 }, { 0x5487, 2176 }, { 0x5488, 2179 }, { 0x5489, 850 }, { 0x548A, 2170 }, { 0x548B, 3577 }, { 0x548C, 2173 }, { 0x5490, 430 }, { 0x5491, 364 }, { 0x5492, 412 }, { 0x5493, 493 }, { 0x5494, 394 }, { 0x5495, 436 }, { 0x5496, 469 }, { 0x5497, 400 }, { 0x5498, 367 }, { 0x5499, 475 }, { 0x549A, 418 }, { 0x549B, 460 }, { 0x549C, 421 }, { 0x549D, 379 }, { 0x549E, 424 }, { 0x549F, 481 }, { 0x54A0, 439 }, { 0x54A1, 355 }, { 0x54A2, 454 }, { 0x54A3, 397 }, { 0x54A4, 466 }, { 0x54A5, 385 }, { 0x54A6, 472 }, { 0x54A7, 496 }, { 0x54A8, 373 }, { 0x54A9, 370 }, { 0x54AA, 487 }, { 0x54AB, 451 }, { 0x54AC, 427 }, { 0x54AD, 406 }, { 0x54AE, 448 }, { 0x54AF, 445 }, { 0x54B0, 433 }, { 0x54B1, 442 }, { 0x54B2, 382 }, { 0x54B3, 358 }, { 0x54B4, 499 }, { 0x54B5, 409 }, { 0x54B6, 403 }, { 0x54B7, 484 }, { 0x54B8, 376 }, { 0x54B9, 352 }, { 0x54BA, 508 }, { 0x54BB, 415 }, { 0x54BC, 349 }, { 0x54BD, 463 }, { 0x54BE, 391 }, { 0x54BF, 478 }, { 0x54C0, 502 }, { 0x54C1, 457 }, { 0x54C2, 505 }, { 0x54C3, 388 }, { 0x54C4, 511 }, { 0x54C5, 490 }, { 0x54C6, 361 }, { 0x5500, 7945 }, { 0x5501, 8254 }, { 0x5502, 8290 }, { 0x5503, 8482 }, { 0x5504, 8653 }, { 0x5505, 8419 }, { 0x5506, 8527 }, { 0x5507, 8206 }, { 0x5508, 8578 }, { 0x5509, 8569 }, { 0x550A, 8671 }, { 0x550B, 8554 }, { 0x550C, 8257 }, { 0x550D, 8473 }, { 0x550E, 8452 }, { 0x550F, 8647 }, { 0x5510, 8533 }, { 0x5511, 8665 }, { 0x5512, 8338 }, { 0x5513, 8425 }, { 0x5514, 8233 }, { 0x5515, 8599 }, { 0x5516, 8431 }, { 0x5517, 8641 }, { 0x5518, 8506 }, { 0x5519, 8659 }, { 0x551A, 8227 }, { 0x551B, 8308 }, { 0x551C, 8629 }, { 0x551D, 8500 }, { 0x551E, 8317 }, { 0x551F, 8697 }, { 0x5520, 8278 }, { 0x5521, 8359 }, { 0x5522, 8380 }, { 0x5523, 8635 }, { 0x5524, 7888 }, { 0x5525, 7996 }, { 0x5526, 7987 }, { 0x5527, 8296 }, { 0x5528, 8167 }, { 0x5529, 8488 }, { 0x552A, 8089 }, { 0x552B, 8215 }, { 0x552C, 7906 }, { 0x552D, 8350 }, { 0x552E, 8329 }, { 0x552F, 8590 }, { 0x5530, 8269 }, { 0x5531, 7957 }, { 0x5532, 8152 }, { 0x5533, 8134 }, { 0x5534, 8461 }, { 0x5535, 8242 }, { 0x5536, 8542 }, { 0x5537, 8035 }, { 0x5538, 8104 }, { 0x5539, 7936 }, { 0x553A, 8371 }, { 0x553B, 8119 }, { 0x553C, 8440 }, { 0x553D, 8197 }, { 0x553E, 8515 }, { 0x553F, 7921 }, { 0x5540, 8005 }, { 0x5541, 8389 }, { 0x5542, 8182 }, { 0x5543, 8020 }, { 0x5544, 8617 }, { 0x5545, 7972 }, { 0x5546, 8050 }, { 0x5547, 8068 }, { 0x5548, 8407 }, { 0x5549, 7882 }, { 0x554A, 7897 }, { 0x554B, 8605 }, { 0x554C, 7981 }, { 0x554D, 8287 }, { 0x554E, 8161 }, { 0x554F, 8479 }, { 0x5550, 8083 }, { 0x5551, 8209 }, { 0x5552, 7900 }, { 0x5553, 8344 }, { 0x5554, 8323 }, { 0x5555, 8566 }, { 0x5556, 8584 }, { 0x5557, 8263 }, { 0x5558, 7951 }, { 0x5559, 8146 }, { 0x555A, 8128 }, { 0x555B, 8455 }, { 0x555C, 8236 }, { 0x555D, 8536 }, { 0x555E, 8029 }, { 0x555F, 8098 }, { 0x5560, 7930 }, { 0x5561, 8365 }, { 0x5562, 8113 }, { 0x5563, 8434 }, { 0x5564, 8191 }, { 0x5565, 8509 }, { 0x5566, 7915 }, { 0x5567, 7999 }, { 0x5568, 8383 }, { 0x5569, 8176 }, { 0x556A, 8014 }, { 0x556B, 8314 }, { 0x556C, 8611 }, { 0x556D, 7966 }, { 0x556E, 8044 }, { 0x556F, 8059 }, { 0x5570, 8401 }, { 0x5571, 8080 }, { 0x5572, 8416 }, { 0x5573, 8302 }, { 0x5574, 8494 }, { 0x5575, 8656 }, { 0x5576, 8422 }, { 0x5577, 8530 }, { 0x5578, 8224 }, { 0x5579, 8581 }, { 0x557A, 8575 }, { 0x557B, 8674 }, { 0x557C, 8563 }, { 0x557D, 8260 }, { 0x557E, 8476 }, { 0x557F, 8470 }, { 0x5580, 8650 }, { 0x5581, 8551 }, { 0x5582, 8668 }, { 0x5583, 8341 }, { 0x5584, 8428 }, { 0x5585, 8251 }, { 0x5586, 8602 }, { 0x5587, 8449 }, { 0x5588, 8644 }, { 0x5589, 8524 }, { 0x558A, 8662 }, { 0x558B, 8230 }, { 0x558C, 8311 }, { 0x558D, 8632 }, { 0x558E, 8503 }, { 0x558F, 8320 }, { 0x5590, 8703 }, { 0x5591, 8284 }, { 0x5592, 8362 }, { 0x5593, 8398 }, { 0x5594, 8638 }, { 0x5595, 7894 }, { 0x5596, 8143 }, { 0x5597, 7993 }, { 0x5598, 8305 }, { 0x5599, 8173 }, { 0x559A, 8497 }, { 0x559B, 8095 }, { 0x559C, 8221 }, { 0x559D, 7912 }, { 0x559E, 8356 }, { 0x559F, 8335 }, { 0x55A0, 8596 }, { 0x55A1, 8275 }, { 0x55A2, 7963 }, { 0x55A3, 8158 }, { 0x55A4, 8140 }, { 0x55A5, 8467 }, { 0x55A6, 8248 }, { 0x55A7, 8548 }, { 0x55A8, 8041 }, { 0x55A9, 8110 }, { 0x55AA, 7942 }, { 0x55AB, 8377 }, { 0x55AC, 8125 }, { 0x55AD, 8446 }, { 0x55AE, 8203 }, { 0x55AF, 8521 }, { 0x55B0, 7927 }, { 0x55B1, 8011 }, { 0x55B2, 8395 }, { 0x55B3, 8188 }, { 0x55B4, 8026 }, { 0x55B5, 8623 }, { 0x55B6, 7978 }, { 0x55B7, 8056 }, { 0x55B8, 8074 }, { 0x55B9, 8413 }, { 0x55BA, 7891 }, { 0x55BB, 8077 }, { 0x55BC, 8626 }, { 0x55BD, 7990 }, { 0x55BE, 8299 }, { 0x55BF, 8170 }, { 0x55C0, 8491 }, { 0x55C1, 8092 }, { 0x55C2, 8218 }, { 0x55C3, 7909 }, { 0x55C4, 8353 }, { 0x55C5, 8332 }, { 0x55C6, 8593 }, { 0x55C7, 8272 }, { 0x55C8, 8560 }, { 0x55C9, 7960 }, { 0x55CA, 8155 }, { 0x55CB, 8137 }, { 0x55CC, 8464 }, { 0x55CD, 8245 }, { 0x55CE, 8545 }, { 0x55CF, 8038 }, { 0x55D0, 8107 }, { 0x55D1, 7939 }, { 0x55D2, 8374 }, { 0x55D3, 8122 }, { 0x55D4, 8443 }, { 0x55D5, 8200 }, { 0x55D6, 8518 }, { 0x55D7, 7924 }, { 0x55D8, 8008 }, { 0x55D9, 8392 }, { 0x55DA, 8185 }, { 0x55DB, 8023 }, { 0x55DC, 8620 }, { 0x55DD, 7975 }, { 0x55DE, 8053 }, { 0x55DF, 8071 }, { 0x55E0, 8410 }, { 0x55E1, 7885 }, { 0x55E2, 7948 }, { 0x55E3, 8608 }, { 0x55E4, 7984 }, { 0x55E5, 8293 }, { 0x55E6, 8164 }, { 0x55E7, 8485 }, { 0x55E8, 8086 }, { 0x55E9, 8212 }, { 0x55EA, 7903 }, { 0x55EB, 8347 }, { 0x55EC, 8326 }, { 0x55ED, 8572 }, { 0x55EE, 8587 }, { 0x55EF, 8266 }, { 0x55F0, 8557 }, { 0x55F1, 7954 }, { 0x55F2, 8149 }, { 0x55F3, 8131 }, { 0x55F4, 8458 }, { 0x55F5, 8239 }, { 0x55F6, 8539 }, { 0x55F7, 8032 }, { 0x55F8, 8101 }, { 0x55F9, 7933 }, { 0x55FA, 8368 }, { 0x55FB, 8116 }, { 0x55FC, 8437 }, { 0x55FD, 8194 }, { 0x55FE, 8512 }, { 0x55FF, 7918 }, { 0x5600, 8002 }, { 0x5601, 8386 }, { 0x5602, 8179 }, { 0x5603, 8017 }, { 0x5604, 8614 }, { 0x5605, 8700 }, { 0x5606, 7969 }, { 0x5607, 8281 }, { 0x5608, 8047 }, { 0x5609, 8062 }, { 0x560A, 8404 }, { 0x560B, 8065 }, { 0x560C, 8706 }, { 0x560D, 7808 }, { 0x560E, 7805 }, { 0x560F, 7879 }, { 0x5610, 8681 }, { 0x5611, 8685 }, { 0x5612, 8693 }, { 0x5613, 7873 }, { 0x5614, 7876 }, { 0x5615, 7864 }, { 0x5616, 7843 }, { 0x5617, 7849 }, { 0x5618, 7840 }, { 0x5619, 7846 }, { 0x561A, 7852 }, { 0x561B, 7870 }, { 0x561C, 7861 }, { 0x561D, 7867 }, { 0x561E, 7855 }, { 0x561F, 7858 }, { 0x5620, 7828 }, { 0x5621, 7810 }, { 0x5622, 7816 }, { 0x5623, 7837 }, { 0x5624, 7822 }, { 0x5625, 7819 }, { 0x5626, 7813 }, { 0x5627, 7834 }, { 0x5628, 7831 }, { 0x5629, 7825 }, { 0x562A, 8689 }, { 0x562B, 8677 }, { 0x5640, 50137 }, { 0x5641, 49239 }, { 0x5642, 50054 }, { 0x5643, 49156 }, { 0x5644, 50212 }, { 0x5645, 49318 }, { 0x5646, 49931 }, { 0x5647, 49033 }, { 0x5648, 50050 }, { 0x5649, 49152 }, { 0x564A, 50266 }, { 0x564B, 49372 }, { 0x564C, 50045 }, { 0x564D, 49147 }, { 0x564E, 50163 }, { 0x564F, 49265 }, { 0x5650, 50023 }, { 0x5651, 49125 }, { 0x5652, 50184 }, { 0x5653, 49286 }, { 0x5654, 50202 }, { 0x5655, 49308 }, { 0x5656, 50168 }, { 0x5657, 49270 }, { 0x5658, 50120 }, { 0x5659, 49222 }, { 0x565A, 50146 }, { 0x565B, 49248 }, { 0x565C, 50189 }, { 0x565D, 49291 }, { 0x565E, 49727 }, { 0x565F, 48829 }, { 0x5662, 49983 }, { 0x5663, 49085 }, { 0x5664, 49988 }, { 0x5665, 49090 }, { 0x5666, 49993 }, { 0x5667, 49095 }, { 0x5668, 50261 }, { 0x5669, 49367 }, { 0x566A, 50256 }, { 0x566B, 49362 }, { 0x566C, 50126 }, { 0x566D, 49228 }, { 0x566E, 49417 }, { 0x566F, 58020 }, { 0x5670, 58004 }, { 0x5671, 58160 }, { 0x5672, 58180 }, { 0x5673, 55523 }, { 0x567C, 58023 }, { 0x567D, 58170 }, { 0x567E, 49407 }, { 0x567F, 50301 }, { 0x5680, 49783 }, { 0x5681, 48885 }, { 0x5682, 49914 }, { 0x5683, 49016 }, { 0x5684, 50036 }, { 0x5685, 49138 }, { 0x5686, 49906 }, { 0x5687, 49008 }, { 0x5688, 49918 }, { 0x5689, 49020 }, { 0x568A, 49694 }, { 0x568B, 48796 }, { 0x568C, 49872 }, { 0x568D, 48974 }, { 0x568E, 50015 }, { 0x568F, 49117 }, { 0x5690, 50011 }, { 0x5691, 49113 }, { 0x5692, 50003 }, { 0x5693, 49105 }, { 0x5694, 49832 }, { 0x5695, 48934 }, { 0x5696, 49979 }, { 0x5697, 49081 }, { 0x5700, 54739 }, { 0x5701, 54763 }, { 0x5702, 54745 }, { 0x5703, 54769 }, { 0x5704, 54727 }, { 0x5705, 54751 }, { 0x5706, 54733 }, { 0x5707, 54757 }, { 0x5708, 54839 }, { 0x5709, 54039 }, { 0x570A, 53996 }, { 0x570B, 53952 }, { 0x570C, 54808 }, { 0x570D, 54845 }, { 0x570E, 54045 }, { 0x570F, 54002 }, { 0x5710, 53958 }, { 0x5711, 54814 }, { 0x5712, 54852 }, { 0x5713, 54052 }, { 0x5714, 54009 }, { 0x5715, 53980 }, { 0x5716, 54821 }, { 0x5717, 53884 }, { 0x5718, 53880 }, { 0x5719, 53889 }, { 0x571A, 54106 }, { 0x571B, 54571 }, { 0x571C, 54576 }, { 0x571D, 54591 }, { 0x571E, 54585 }, { 0x571F, 53969 }, { 0x5720, 54606 }, { 0x5721, 54600 }, { 0x5722, 20769 }, { 0x5723, 17878 }, { 0x5724, 20764 }, { 0x5725, 17873 }, { 0x5726, 20552 }, { 0x5727, 17317 }, { 0x5728, 20503 }, { 0x5729, 17173 }, { 0x572A, 20735 }, { 0x572B, 17844 }, { 0x572C, 20739 }, { 0x572D, 17848 }, { 0x572E, 20743 }, { 0x572F, 17852 }, { 0x5730, 17974 }, { 0x5731, 18048 }, { 0x5732, 20422 }, { 0x5733, 17038 }, { 0x5734, 20442 }, { 0x5735, 17058 }, { 0x5736, 20446 }, { 0x5737, 17062 }, { 0x5738, 20450 }, { 0x5739, 17066 }, { 0x573A, 20454 }, { 0x573B, 17070 }, { 0x573C, 20461 }, { 0x573D, 17077 }, { 0x573E, 20719 }, { 0x573F, 17758 }, { 0x5740, 19120 }, { 0x5741, 15472 }, { 0x5742, 19141 }, { 0x5743, 15500 }, { 0x5744, 19126 }, { 0x5745, 15478 }, { 0x5746, 20644 }, { 0x5747, 17505 }, { 0x5748, 19180 }, { 0x5749, 15551 }, { 0x574A, 19451 }, { 0x574B, 15876 }, { 0x574C, 19459 }, { 0x574D, 15884 }, { 0x574E, 20495 }, { 0x574F, 17142 }, { 0x5750, 19688 }, { 0x5751, 16113 }, { 0x5752, 19696 }, { 0x5753, 16128 }, { 0x5754, 19702 }, { 0x5755, 16134 }, { 0x5756, 19713 }, { 0x5757, 16158 }, { 0x5758, 19721 }, { 0x5759, 16166 }, { 0x575A, 19806 }, { 0x575B, 16287 }, { 0x575C, 20542 }, { 0x575D, 17287 }, { 0x575E, 20210 }, { 0x575F, 16771 }, { 0x5760, 20507 }, { 0x5761, 17185 }, { 0x5762, 20749 }, { 0x5763, 17858 }, { 0x5764, 20630 }, { 0x5765, 17480 }, { 0x5766, 20636 }, { 0x5767, 17486 }, { 0x5768, 20585 }, { 0x5769, 17421 }, { 0x576A, 20475 }, { 0x576B, 17108 }, { 0x576C, 20479 }, { 0x576D, 17116 }, { 0x576E, 20511 }, { 0x576F, 17189 }, { 0x5770, 53877 }, { 0x5771, 17193 }, { 0x5772, 17267 }, { 0x5773, 17271 }, { 0x5774, 17275 }, { 0x5775, 17283 }, { 0x5776, 18108 }, { 0x5777, 17298 }, { 0x5778, 17181 }, { 0x5779, 20685 }, { 0x577A, 17713 }, { 0x577B, 20690 }, { 0x577C, 17718 }, { 0x577D, 20695 }, { 0x577E, 20669 }, { 0x577F, 17676 }, { 0x5780, 20654 }, { 0x5781, 17585 }, { 0x5782, 20700 }, { 0x5783, 17728 }, { 0x5784, 20705 }, { 0x5785, 17733 }, { 0x5786, 20710 }, { 0x5787, 17738 }, { 0x5788, 53986 }, { 0x5789, 54095 }, { 0x578A, 54131 }, { 0x578B, 20731 }, { 0x578C, 17800 }, { 0x57FB, 20847 }, { 0x57FC, 20852 }, { 0x57FD, 20842 }, { 0x57FE, 20832 }, { 0x57FF, 20837 }, { 0x5800, 36572 }, { 0x5801, 36580 }, { 0x5802, 36543 }, { 0x5803, 36588 }, { 0x5804, 36576 }, { 0x5805, 36584 }, { 0x5806, 36535 }, { 0x5807, 36616 }, { 0x5808, 36672 }, { 0x5809, 36604 }, { 0x580A, 36664 }, { 0x580B, 36539 }, { 0x580C, 36596 }, { 0x580D, 36652 }, { 0x580E, 36612 }, { 0x580F, 36668 }, { 0x5810, 36688 }, { 0x5811, 36696 }, { 0x5812, 36656 }, { 0x5813, 36692 }, { 0x5814, 36644 }, { 0x5815, 36684 }, { 0x5816, 36600 }, { 0x5817, 36660 }, { 0x5818, 36628 }, { 0x5819, 36632 }, { 0x581A, 36676 }, { 0x581B, 36592 }, { 0x581C, 36648 }, { 0x581D, 36624 }, { 0x581E, 36636 }, { 0x581F, 36620 }, { 0x5820, 36680 }, { 0x5821, 36640 }, { 0x5822, 36608 }, { 0x5823, 36547 }, { 0x5824, 36557 }, { 0x5825, 36562 }, { 0x5826, 36552 }, { 0x5827, 36567 }, { 0x5828, 36700 }, { 0x5829, 36704 }, { 0x582A, 36708 }, { 0x582B, 36712 }, { 0x5840, 55006 }, { 0x5841, 55057 }, { 0x5842, 54997 }, { 0x5843, 55060 }, { 0x5844, 54985 }, { 0x5845, 55045 }, { 0x5846, 55003 }, { 0x5847, 55066 }, { 0x5848, 55030 }, { 0x5849, 55075 }, { 0x584A, 54988 }, { 0x584B, 55015 }, { 0x584C, 55018 }, { 0x584D, 55069 }, { 0x584E, 54982 }, { 0x584F, 55012 }, { 0x5850, 55078 }, { 0x5851, 55087 }, { 0x5852, 55051 }, { 0x5853, 55033 }, { 0x5854, 55084 }, { 0x5855, 55042 }, { 0x5856, 55093 }, { 0x5857, 55039 }, { 0x5858, 55024 }, { 0x5859, 55009 }, { 0x585A, 55072 }, { 0x585B, 55027 }, { 0x585C, 55000 }, { 0x585D, 54967 }, { 0x585E, 54973 }, { 0x585F, 54979 }, { 0x5860, 54970 }, { 0x5861, 54976 }, { 0x5862, 55021 }, { 0x5863, 55036 }, { 0x5864, 54994 }, { 0x5865, 55054 }, { 0x5866, 54991 }, { 0x5867, 55124 }, { 0x5868, 55128 }, { 0x5869, 55081 }, { 0x586A, 55090 }, { 0x586B, 55048 }, { 0x586C, 55063 }, { 0x586D, 55101 }, { 0x586E, 55109 }, { 0x586F, 55097 }, { 0x5870, 55105 }, { 0x5871, 55120 }, { 0x5872, 55132 }, { 0x5873, 55113 }, { 0x5874, 55116 }, { 0x5875, 54963 }, { 0x5876, 54956 }, { 0x5877, 54959 }, { 0x5880, 68329 }, { 0x5881, 68326 }, { 0x5882, 68431 }, { 0x5883, 68446 }, { 0x5884, 68437 }, { 0x5885, 68473 }, { 0x5886, 68443 }, { 0x5887, 68506 }, { 0x5888, 68573 }, { 0x5889, 68581 }, { 0x588A, 68569 }, { 0x588B, 68577 }, { 0x588C, 68434 }, { 0x588D, 68464 }, { 0x588E, 68449 }, { 0x588F, 68440 }, { 0x5890, 68491 }, { 0x5891, 68452 }, { 0x5892, 68479 }, { 0x5893, 68533 }, { 0x5894, 68467 }, { 0x5895, 68527 }, { 0x5896, 68539 }, { 0x5897, 68458 }, { 0x5898, 68518 }, { 0x5899, 68476 }, { 0x589A, 68530 }, { 0x589B, 68545 }, { 0x589C, 68560 }, { 0x589D, 68566 }, { 0x589E, 68521 }, { 0x589F, 68563 }, { 0x58A0, 68542 }, { 0x58A1, 68503 }, { 0x58A2, 68557 }, { 0x58A3, 68461 }, { 0x58A4, 68524 }, { 0x58A5, 68488 }, { 0x58A6, 68494 }, { 0x58A7, 68548 }, { 0x58A8, 68455 }, { 0x58A9, 68515 }, { 0x58AA, 68485 }, { 0x58AB, 68512 }, { 0x58AC, 68497 }, { 0x58AD, 68482 }, { 0x58AE, 68509 }, { 0x58AF, 68551 }, { 0x58B0, 68554 }, { 0x58B1, 68500 }, { 0x58B2, 68470 }, { 0x58B3, 68536 }, { 0x58B4, 68585 }, { 0x58B5, 68380 }, { 0x58B6, 68368 }, { 0x58B7, 68396 }, { 0x58B8, 68376 }, { 0x58B9, 68404 }, { 0x58BA, 68413 }, { 0x58BB, 68423 }, { 0x58BC, 68408 }, { 0x58BD, 68418 }, { 0x58BE, 68364 }, { 0x58BF, 68392 }, { 0x58C0, 68384 }, { 0x58C1, 68372 }, { 0x58C2, 68400 }, { 0x58C3, 68388 }, { 0x58C4, 68323 }, { 0x58CE, 68332 }, { 0x58CF, 68428 }, { 0x58D0, 68352 }, { 0x58D1, 68334 }, { 0x58D2, 68340 }, { 0x58D3, 68361 }, { 0x58D4, 68346 }, { 0x58D5, 68343 }, { 0x58D6, 68337 }, { 0x58D7, 68358 }, { 0x58D8, 68355 }, { 0x58D9, 68349 }, { 0x5900, 13773 }, { 0x5901, 13749 }, { 0x5902, 13757 }, { 0x5903, 13785 }, { 0x5904, 13765 }, { 0x5905, 13761 }, { 0x5906, 13753 }, { 0x5907, 13781 }, { 0x5908, 13777 }, { 0x5909, 13769 }, { 0x590A, 13837 }, { 0x590B, 13897 }, { 0x590C, 13829 }, { 0x590D, 13901 }, { 0x590E, 13869 }, { 0x590F, 13913 }, { 0x5910, 13889 }, { 0x5911, 13905 }, { 0x5912, 13873 }, { 0x5913, 13893 }, { 0x5914, 13849 }, { 0x5915, 13861 }, { 0x5916, 13909 }, { 0x5917, 13845 }, { 0x5918, 13825 }, { 0x5919, 13817 }, { 0x591A, 13865 }, { 0x591B, 13885 }, { 0x591C, 13841 }, { 0x591D, 13881 }, { 0x591E, 13917 }, { 0x591F, 13833 }, { 0x5920, 13877 }, { 0x5921, 13821 }, { 0x5922, 13809 }, { 0x5923, 13853 }, { 0x5924, 13813 }, { 0x5925, 13857 }, { 0x5926, 13805 }, { 0x5927, 13789 }, { 0x5928, 13797 }, { 0x5929, 13801 }, { 0x592A, 13793 }, { 0x592B, 13745 }, { 0x592C, 13736 }, { 0x592D, 13740 }, { 0x592E, 13728 }, { 0x592F, 13732 }, { 0x5930, 35728 }, { 0x5931, 35719 }, { 0x5932, 35764 }, { 0x5933, 35749 }, { 0x5934, 35716 }, { 0x5935, 35737 }, { 0x5936, 35740 }, { 0x5937, 35710 }, { 0x5938, 35734 }, { 0x5939, 35713 }, { 0x593A, 35725 }, { 0x593B, 35767 }, { 0x593C, 35746 }, { 0x593D, 35743 }, { 0x593E, 35731 }, { 0x593F, 35755 }, { 0x5940, 35752 }, { 0x5941, 35722 }, { 0x5942, 35758 }, { 0x5943, 35770 }, { 0x5944, 35761 }, { 0x5945, 35773 }, { 0x5946, 35707 }, { 0x5947, 35679 }, { 0x5948, 35687 }, { 0x5949, 35675 }, { 0x594A, 35691 }, { 0x594B, 35683 }, { 0x594C, 35695 }, { 0x594D, 35703 }, { 0x594E, 35699 }, { 0x594F, 35793 }, { 0x5950, 35785 }, { 0x5951, 35789 }, { 0x5952, 35781 }, { 0x5953, 35776 }, { 0x595F, 35778 }, { 0x5A00, 8801 }, { 0x5A01, 8807 }, { 0x5A02, 8813 }, { 0x5A03, 8804 }, { 0x5A04, 8816 }, { 0x5A05, 8810 }, { 0x5A06, 8834 }, { 0x5A07, 8885 }, { 0x5A08, 8825 }, { 0x5A09, 8879 }, { 0x5A0A, 8915 }, { 0x5A0B, 8891 }, { 0x5A0C, 8870 }, { 0x5A0D, 8912 }, { 0x5A0E, 8831 }, { 0x5A0F, 8882 }, { 0x5A10, 8921 }, { 0x5A11, 8894 }, { 0x5A12, 8918 }, { 0x5A13, 8855 }, { 0x5A14, 8909 }, { 0x5A15, 8822 }, { 0x5A16, 8876 }, { 0x5A17, 8897 }, { 0x5A18, 8843 }, { 0x5A19, 8873 }, { 0x5A1A, 8846 }, { 0x5A1B, 8903 }, { 0x5A1C, 8900 }, { 0x5A1D, 8819 }, { 0x5A1E, 8867 }, { 0x5A1F, 8888 }, { 0x5A20, 8840 }, { 0x5A21, 8864 }, { 0x5A22, 8861 }, { 0x5A23, 8849 }, { 0x5A24, 8837 }, { 0x5A25, 8858 }, { 0x5A26, 8906 }, { 0x5A27, 8852 }, { 0x5A28, 8828 }, { 0x5A29, 8773 }, { 0x5A2A, 8761 }, { 0x5A2B, 8789 }, { 0x5A2C, 8785 }, { 0x5A2D, 8769 }, { 0x5A2E, 8793 }, { 0x5A2F, 8765 }, { 0x5A30, 8777 }, { 0x5A31, 8781 }, { 0x5A32, 8797 }, { 0x5A33, 8980 }, { 0x5A34, 8972 }, { 0x5A35, 8968 }, { 0x5A36, 8976 }, { 0x5A40, 8928 }, { 0x5A41, 8924 }, { 0x5A42, 8960 }, { 0x5A43, 8994 }, { 0x5A44, 8956 }, { 0x5A45, 8948 }, { 0x5A46, 8936 }, { 0x5A47, 8940 }, { 0x5A48, 8952 }, { 0x5A49, 8944 }, { 0x5A4A, 8932 }, { 0x5A4B, 8964 }, { 0x5A4C, 8989 }, { 0x5A4D, 8984 }, { 0x5A50, 8749 }, { 0x5A51, 8731 }, { 0x5A52, 8737 }, { 0x5A53, 8758 }, { 0x5A54, 8743 }, { 0x5A55, 8740 }, { 0x5A56, 8734 }, { 0x5A57, 8755 }, { 0x5A58, 8752 }, { 0x5A59, 8746 }, { 0x5A5C, 9006 }, { 0x5A5D, 8999 }, { 0x5A5E, 9002 }, { 0x5A5F, 9009 }, { 0x6B00, 17897 }, { 0x6B01, 17901 }, { 0x6B02, 17905 }, { 0x6B03, 17921 }, { 0x6B04, 17925 }, { 0x6B05, 17929 }, { 0x6B06, 17917 }, { 0x6B13, 44892 }, { 0x6B14, 44882 }, { 0x6B15, 44887 }, { 0x6B16, 44902 }, { 0x6B17, 44897 }, { 0x6B1D, 33182 }, { 0x6B1E, 32972 }, { 0x6B1F, 33388 }, { 0x6B20, 33370 }, { 0x6B21, 33269 }, { 0x6B22, 33277 }, { 0x6B23, 33257 }, { 0x6B24, 33261 }, { 0x6B25, 33286 }, { 0x6B26, 33281 }, { 0x6B27, 33273 }, { 0x6B28, 33265 }, { 0x6B29, 33374 }, { 0x6B2A, 33230 }, { 0x6B2B, 33224 }, { 0x6B2C, 33249 }, { 0x6B2D, 33241 }, { 0x6B2E, 33200 }, { 0x6B2F, 33205 }, { 0x6B30, 33195 }, { 0x6B31, 33105 }, { 0x6B32, 33333 }, { 0x6B33, 33293 }, { 0x6B34, 33079 }, { 0x6B35, 33174 }, { 0x6B36, 33357 }, { 0x6B38, 33161 }, { 0x6B39, 33187 }, { 0x6B3A, 33312 }, { 0x6B3B, 33121 }, { 0x6B3C, 33341 }, { 0x6B3E, 33129 }, { 0x6B40, 33137 }, { 0x6B41, 33365 }, { 0x6B43, 33302 }, { 0x6B44, 33092 }, { 0x6B46, 33349 }, { 0x6B47, 33145 }, { 0x6B48, 33216 }, { 0x6B49, 33236 }, { 0x6B4A, 33153 }, { 0x6B4B, 33169 }, { 0x6B4C, 33100 }, { 0x6B4D, 33116 }, { 0x6B4E, 33087 }, { 0x6B4F, 33379 }, { 0x6B50, 25426 }, { 0x6B51, 25420 }, { 0x6B52, 25471 }, { 0x6B53, 25456 }, { 0x6B54, 25466 }, { 0x6B55, 25461 }, { 0x6B56, 24792 }, { 0x6B57, 24777 }, { 0x6B58, 24787 }, { 0x6B59, 24782 }, { 0x6B5A, 25928 }, { 0x6B5B, 25913 }, { 0x6B5C, 25923 }, { 0x6B5D, 25918 }, { 0x6B5E, 26308 }, { 0x6B5F, 26293 }, { 0x6B60, 26303 }, { 0x6B61, 26298 }, { 0x6B62, 26272 }, { 0x6B63, 26257 }, { 0x6B64, 26267 }, { 0x6B65, 26262 }, { 0x6B66, 25892 }, { 0x6B67, 25877 }, { 0x6B68, 25887 }, { 0x6B69, 25882 }, { 0x6B6A, 25071 }, { 0x6B6B, 25056 }, { 0x6B6C, 25066 }, { 0x6B6D, 25061 }, { 0x6B6E, 26164 }, { 0x6B6F, 26149 }, { 0x6B70, 26159 }, { 0x6B71, 26154 }, { 0x6B72, 25507 }, { 0x6B73, 25492 }, { 0x6B74, 25502 }, { 0x6B75, 25497 }, { 0x6B76, 25729 }, { 0x6B77, 25714 }, { 0x6B78, 25724 }, { 0x6B79, 25719 }, { 0x6B7A, 26249 }, { 0x6B7B, 26234 }, { 0x6B7C, 26244 }, { 0x6B7D, 26239 }, { 0x6B7E, 26393 }, { 0x6B7F, 26378 }, { 0x6B80, 26388 }, { 0x6B81, 26383 }, { 0x6B82, 26285 }, { 0x6B83, 26280 }, { 0x6B84, 25941 }, { 0x6B85, 25936 }, { 0x6B86, 24341 }, { 0x6B87, 24336 }, { 0x6B88, 25484 }, { 0x6B89, 25479 }, { 0x6B8A, 24667 }, { 0x6B8B, 24662 }, { 0x6B8C, 25742 }, { 0x6B8D, 25737 }, { 0x6B8E, 26118 }, { 0x6B8F, 26103 }, { 0x6B90, 26113 }, { 0x6B91, 26108 }, { 0x6B92, 24442 }, { 0x6B93, 24427 }, { 0x6B94, 24437 }, { 0x6B95, 24432 }, { 0x6B96, 25530 }, { 0x6B97, 25515 }, { 0x6B98, 25525 }, { 0x6B99, 25520 }, { 0x6B9A, 26141 }, { 0x6B9B, 26126 }, { 0x6B9C, 26136 }, { 0x6B9D, 26131 }, { 0x6B9E, 25690 }, { 0x6B9F, 25684 }, { 0x6BA0, 26187 }, { 0x6BA1, 26172 }, { 0x6BA2, 26182 }, { 0x6BA3, 26177 }, { 0x6BA4, 24597 }, { 0x6BA5, 24589 }, { 0x6BA6, 24577 }, { 0x6BA7, 24559 }, { 0x6BA8, 24571 }, { 0x6BA9, 24565 }, { 0x6BAA, 24653 }, { 0x6BAB, 24635 }, { 0x6BAC, 24647 }, { 0x6BAD, 24641 }, { 0x6BAE, 25266 }, { 0x6BAF, 25260 }, { 0x6BB0, 25231 }, { 0x6BB1, 25222 }, { 0x6BD3, 24046 }, { 0x6BD4, 24031 }, { 0x6BD5, 24041 }, { 0x6BD6, 24036 }, { 0x6BD7, 24020 }, { 0x6BD8, 24015 }, { 0x6BD9, 24059 }, { 0x6BDA, 24054 }, { 0x6BDB, 24085 }, { 0x6BDC, 24080 }, { 0x6BDD, 24007 }, { 0x6BDE, 24072 }, { 0x6BDF, 24067 }, { 0x6BE0, 26353 }, { 0x6BE1, 26347 }, { 0x6BE2, 26369 }, { 0x6BE3, 26363 }, { 0x6BE4, 23993 }, { 0x6BE5, 23978 }, { 0x6BE6, 23988 }, { 0x6BE7, 23983 }, { 0x6BE8, 26322 }, { 0x6BE9, 26313 }, { 0x6BEA, 28622 }, { 0x6BEB, 28590 }, { 0x6BEC, 28450 }, { 0x6BED, 28440 }, { 0x6BEE, 28560 }, { 0x6BEF, 28550 }, { 0x6BF0, 28430 }, { 0x6BF1, 28420 }, { 0x6BF2, 28470 }, { 0x6BF3, 28460 }, { 0x6BF4, 28490 }, { 0x6BF5, 28480 }, { 0x6BF6, 28410 }, { 0x6BF7, 28390 }, { 0x6BF8, 28400 }, { 0x6BF9, 30178 }, { 0x6BFA, 30152 }, { 0x6BFB, 30165 }, { 0x6BFC, 26021 }, { 0x6BFD, 26003 }, { 0x6BFE, 26015 }, { 0x6BFF, 26009 }, { 0x6C00, 28642 }, { 0x6C01, 28510 }, { 0x6C02, 28692 }, { 0x6C03, 28611 }, { 0x6C04, 28580 }, { 0x6C05, 26665 }, { 0x6C06, 26600 }, { 0x6C07, 26688 }, { 0x6C08, 26716 }, { 0x6C09, 26650 }, { 0x6C0A, 26635 }, { 0x6C0B, 28073 }, { 0x6C0C, 27980 }, { 0x6C0D, 28115 }, { 0x6C0E, 28189 }, { 0x6C0F, 28030 }, { 0x6C10, 28015 }, { 0x6C11, 29671 }, { 0x6C12, 29699 }, { 0x6C13, 29663 }, { 0x6C14, 29648 }, { 0x6C15, 28801 }, { 0x6C16, 28882 }, { 0x6C17, 27033 }, { 0x6C18, 27066 }, { 0x6C19, 28933 }, { 0x6C1A, 28889 }, { 0x6C1B, 28947 }, { 0x6C1C, 29506 }, { 0x6C1D, 29408 }, { 0x6C1E, 29546 }, { 0x6C1F, 29612 }, { 0x6C20, 27755 }, { 0x6C21, 27838 }, { 0x6C22, 26821 }, { 0x6C23, 26763 }, { 0x6C24, 26853 }, { 0x6C25, 26867 }, { 0x6C26, 27852 }, { 0x6C27, 27939 }, { 0x6C28, 28736 }, { 0x6C29, 26526 }, { 0x6C2A, 26577 }, { 0x6C2B, 29767 }, { 0x6C2C, 29809 }, { 0x6C2D, 26925 }, { 0x6C2E, 26881 }, { 0x6C2F, 26957 }, { 0x6C30, 26980 }, { 0x6C31, 26910 }, { 0x6C32, 26895 }, { 0x6C33, 27626 }, { 0x6C34, 27706 }, { 0x6C35, 27655 }, { 0x6C36, 27640 }, { 0x6C37, 27221 }, { 0x6C38, 27235 }, { 0x6C39, 27149 }, { 0x6C3A, 27249 }, { 0x6C3B, 27177 }, { 0x6C3C, 27304 }, { 0x6C3D, 27213 }, { 0x6C3E, 27191 }, { 0x6C3F, 27525 }, { 0x6C40, 27355 }, { 0x6C41, 27557 }, { 0x6C42, 27612 }, { 0x6C43, 27458 }, { 0x6C44, 27376 }, { 0x6C45, 29060 }, { 0x6C46, 28988 }, { 0x6C47, 29101 }, { 0x6C48, 29131 }, { 0x6C49, 29009 }, { 0x6C4A, 28995 }, { 0x6C4B, 29293 }, { 0x6C4C, 29173 }, { 0x6C4D, 29307 }, { 0x6C4E, 29354 }, { 0x6C4F, 29223 }, { 0x6C50, 29208 }, { 0x6C51, 27095 }, { 0x6C52, 27127 }, { 0x6C53, 27080 }, { 0x6C54, 27073 }, { 0x6C55, 28300 }, { 0x6C56, 28226 }, { 0x6C57, 28314 }, { 0x6C58, 28369 }, { 0x6C59, 28276 }, { 0x6C5A, 28261 }, { 0x6C5B, 29619 }, { 0x6C5C, 27713 }, { 0x6C5D, 28766 }, { 0x6C5E, 30130 }, { 0x6C5F, 30137 }, { 0x6C60, 30109 }, { 0x6C61, 30095 }, { 0x6C62, 30123 }, { 0x6C63, 30144 }, { 0x6C64, 28540 }, { 0x6C65, 28712 }, { 0x6C66, 28662 }, { 0x6C67, 28702 }, { 0x6C68, 28600 }, { 0x6C69, 28570 }, { 0x6C6A, 26621 }, { 0x6C6B, 26730 }, { 0x6C6C, 26695 }, { 0x6C6D, 26723 }, { 0x6C6E, 26642 }, { 0x6C6F, 26628 }, { 0x6C70, 28001 }, { 0x6C71, 28203 }, { 0x6C72, 28168 }, { 0x6C73, 28196 }, { 0x6C74, 28022 }, { 0x6C75, 28008 }, { 0x6C76, 29634 }, { 0x6C77, 29713 }, { 0x6C78, 29678 }, { 0x6C79, 29706 }, { 0x6C7A, 29655 }, { 0x6C7B, 29641 }, { 0x6C7C, 26902 }, { 0x6C7D, 26888 }, { 0x6C7E, 27647 }, { 0x6C7F, 27633 }, { 0x6C80, 27198 }, { 0x6C81, 27156 }, { 0x6C82, 27283 }, { 0x6C83, 27205 }, { 0x6C84, 27184 }, { 0x6C85, 27591 }, { 0x6C86, 27450 }, { 0x6C87, 27369 }, { 0x6C88, 29002 }, { 0x6C89, 29117 }, { 0x6C8A, 29194 }, { 0x6C8B, 29368 }, { 0x6C8C, 29333 }, { 0x6C8D, 29361 }, { 0x6C8E, 29215 }, { 0x6C8F, 29201 }, { 0x6C90, 28757 }, { 0x6C91, 28247 }, { 0x6C92, 28383 }, { 0x6C93, 28348 }, { 0x6C94, 28376 }, { 0x6C95, 28268 }, { 0x6C96, 28254 }, { 0x6C97, 28632 }, { 0x6C98, 28500 }, { 0x6C99, 28652 }, { 0x6C9A, 28682 }, { 0x6C9B, 28530 }, { 0x6C9C, 26658 }, { 0x6C9D, 26593 }, { 0x6C9E, 26681 }, { 0x6C9F, 26709 }, { 0x6CA0, 26614 }, { 0x6CA1, 28066 }, { 0x6CA2, 27973 }, { 0x6CA3, 28108 }, { 0x6CA4, 28182 }, { 0x6CA5, 27994 }, { 0x6CA6, 29692 }, { 0x6CA7, 28794 }, { 0x6CA8, 28875 }, { 0x6CA9, 27026 }, { 0x6CAA, 27059 }, { 0x6CAB, 28926 }, { 0x6CAC, 28940 }, { 0x6CAD, 29499 }, { 0x6CAE, 29401 }, { 0x6CAF, 29539 }, { 0x6CB0, 29605 }, { 0x6CB1, 27748 }, { 0x6CB2, 27806 }, { 0x6CB3, 27831 }, { 0x6CB4, 26814 }, { 0x6CB5, 26756 }, { 0x6CB6, 26846 }, { 0x6CB7, 26860 }, { 0x6CB8, 27845 }, { 0x6CB9, 28729 }, { 0x6CBA, 26519 }, { 0x6CBB, 26570 }, { 0x6CBC, 29760 }, { 0x6CBD, 29802 }, { 0x6CBE, 26918 }, { 0x6CBF, 26874 }, { 0x6CC0, 26950 }, { 0x6CC1, 26973 }, { 0x6CC2, 27619 }, { 0x6CC3, 27699 }, { 0x6CC4, 27228 }, { 0x6CC5, 27142 }, { 0x6CC6, 27242 }, { 0x6CC7, 27170 }, { 0x6CC8, 27297 }, { 0x6CC9, 27518 }, { 0x6CCA, 27348 }, { 0x6CCB, 27550 }, { 0x6CCC, 27605 }, { 0x6CCD, 27362 }, { 0x6CCE, 29053 }, { 0x6CCF, 28981 }, { 0x6CD0, 29094 }, { 0x6CD1, 29124 }, { 0x6CD2, 29286 }, { 0x6CD3, 29166 }, { 0x6CD4, 29300 }, { 0x6CD5, 29347 }, { 0x6CD6, 29187 }, { 0x6CD7, 27088 }, { 0x6CD8, 27120 }, { 0x6CD9, 27134 }, { 0x6CDA, 28293 }, { 0x6CDB, 28219 }, { 0x6CDC, 28307 }, { 0x6CDD, 28362 }, { 0x6CDE, 28240 }, { 0x6CDF, 28672 }, { 0x6CE0, 28520 }, { 0x6CE1, 26702 }, { 0x6CE2, 26607 }, { 0x6CE3, 28175 }, { 0x6CE4, 27987 }, { 0x6CE5, 29685 }, { 0x6CE6, 29627 }, { 0x6CE7, 29598 }, { 0x6CE8, 29415 }, { 0x6CE9, 30057 }, { 0x6CEA, 29891 }, { 0x6CEB, 27163 }, { 0x6CEC, 27290 }, { 0x6CED, 27598 }, { 0x6CEE, 29340 }, { 0x6CEF, 29180 }, { 0x6CF0, 28355 }, { 0x6CF1, 28233 }, { 0x6CF2, 30102 }, { 0x6CF3, 30088 }, { 0x6CF4, 30116 }, { 0x6CF5, 27881 }, { 0x6CF6, 27866 }, { 0x6CF7, 26493 }, { 0x6CF8, 26478 }, { 0x6CF9, 29752 }, { 0x6CFA, 29737 }, { 0x6CFB, 29465 }, { 0x6CFC, 29450 }, { 0x6CFD, 29941 }, { 0x6CFE, 29926 }, { 0x6CFF, 27009 }, { 0x6D00, 26994 }, { 0x6D01, 28830 }, { 0x6D02, 28815 }, { 0x6D03, 28918 }, { 0x6D04, 28903 }, { 0x6D05, 27798 }, { 0x6D06, 27783 }, { 0x6D07, 26806 }, { 0x6D08, 26791 }, { 0x6D09, 29979 }, { 0x6D0A, 29884 }, { 0x6D0B, 30007 }, { 0x6D0C, 30071 }, { 0x6D0D, 29912 }, { 0x6D0E, 29436 }, { 0x6D0F, 27769 }, { 0x6D10, 26777 }, { 0x6D11, 27873 }, { 0x6D12, 27859 }, { 0x6D13, 26485 }, { 0x6D14, 26471 }, { 0x6D15, 29744 }, { 0x6D16, 29730 }, { 0x6D17, 29457 }, { 0x6D18, 29443 }, { 0x6D19, 29933 }, { 0x6D1A, 29919 }, { 0x6D1B, 27001 }, { 0x6D1C, 26987 }, { 0x6D1D, 28822 }, { 0x6D1E, 28808 }, { 0x6D1F, 28910 }, { 0x6D20, 28896 }, { 0x6D21, 27790 }, { 0x6D22, 27776 }, { 0x6D23, 26798 }, { 0x6D24, 26784 }, { 0x6D25, 29958 }, { 0x6D26, 29863 }, { 0x6D27, 29986 }, { 0x6D28, 30050 }, { 0x6D29, 29905 }, { 0x6D2A, 29429 }, { 0x6D2B, 27762 }, { 0x6D2C, 26770 }, { 0x6D2D, 29972 }, { 0x6D2E, 29877 }, { 0x6D2F, 30000 }, { 0x6D30, 30064 }, { 0x6D31, 29422 }, { 0x6D32, 29898 }, { 0x6D33, 27932 }, { 0x6D34, 29492 }, { 0x6D35, 29394 }, { 0x6D36, 29532 }, { 0x6D37, 29965 }, { 0x6D38, 29870 }, { 0x6D39, 29993 }, { 0x6D3A, 27925 }, { 0x6D3B, 28722 }, { 0x6D3C, 28743 }, { 0x6D3D, 28750 }, { 0x6D3E, 35643 }, { 0x6D3F, 35646 }, { 0x6D50, 28057 }, { 0x6D51, 27946 }, { 0x6D52, 27955 }, { 0x6D53, 27964 }, { 0x6D54, 28099 }, { 0x6D55, 28150 }, { 0x6D56, 28122 }, { 0x6D57, 28159 }, { 0x6D58, 28838 }, { 0x6D59, 28847 }, { 0x6D5A, 27040 }, { 0x6D5B, 27049 }, { 0x6D5C, 29385 }, { 0x6D5D, 29473 }, { 0x6D5E, 29482 }, { 0x6D5F, 29553 }, { 0x6D60, 29562 }, { 0x6D61, 29571 }, { 0x6D62, 29580 }, { 0x6D63, 29589 }, { 0x6D64, 27721 }, { 0x6D65, 27730 }, { 0x6D66, 27813 }, { 0x6D67, 29845 }, { 0x6D68, 29854 }, { 0x6D69, 29949 }, { 0x6D6A, 30014 }, { 0x6D6B, 30023 }, { 0x6D6C, 30032 }, { 0x6D6D, 30041 }, { 0x6D6E, 26746 }, { 0x6D6F, 26828 }, { 0x6D70, 26837 }, { 0x6D71, 27889 }, { 0x6D72, 27898 }, { 0x6D73, 27916 }, { 0x6D74, 27907 }, { 0x6D75, 26501 }, { 0x6D76, 26552 }, { 0x6D77, 26561 }, { 0x6D78, 26542 }, { 0x6D79, 29793 }, { 0x6D7A, 29774 }, { 0x6D7B, 29783 }, { 0x6D7C, 26932 }, { 0x6D7D, 26941 }, { 0x6D7E, 27663 }, { 0x6D7F, 27690 }, { 0x6D80, 27330 }, { 0x6D81, 27311 }, { 0x6D82, 27320 }, { 0x6D83, 27491 }, { 0x6D84, 27482 }, { 0x6D85, 27532 }, { 0x6D86, 27541 }, { 0x6D87, 27564 }, { 0x6D88, 27573 }, { 0x6D89, 28963 }, { 0x6D8A, 28972 }, { 0x6D8B, 28954 }, { 0x6D8C, 29017 }, { 0x6D8D, 29044 }, { 0x6D8E, 29076 }, { 0x6D8F, 29085 }, { 0x6D92, 29035 }, { 0x6D93, 27102 }, { 0x6D94, 27111 }, { 0x6D95, 29157 }, { 0x6D96, 29147 }, { 0x6D97, 29268 }, { 0x6D98, 29277 }, { 0x6D99, 29258 }, { 0x6D9A, 29314 }, { 0x6D9B, 29323 }, { 0x6D9C, 28330 }, { 0x6D9D, 28339 }, { 0x6D9E, 26672 }, { 0x6D9F, 28038 }, { 0x6DA0, 28047 }, { 0x6DA1, 28080 }, { 0x6DA2, 28089 }, { 0x6DA3, 28131 }, { 0x6DA4, 28140 }, { 0x6DA5, 28856 }, { 0x6DA6, 28784 }, { 0x6DA7, 28865 }, { 0x6DA8, 29522 }, { 0x6DA9, 27739 }, { 0x6DAA, 29836 }, { 0x6DAB, 26737 }, { 0x6DAC, 27473 }, { 0x6DAD, 27582 }, { 0x6DAE, 28210 }, { 0x6DAF, 28284 }, { 0x6DB0, 28321 }, { 0x6DB1, 29108 }, { 0x6DB2, 27681 }, { 0x6DB3, 29138 }, { 0x6DB4, 27672 }, { 0x6DB5, 27339 }, { 0x6DB6, 26533 }, { 0x6DB7, 27256 }, { 0x6DB8, 29240 }, { 0x6DB9, 29067 }, { 0x6DBA, 27509 }, { 0x6DBB, 27265 }, { 0x6DBC, 27500 }, { 0x6DBD, 29231 }, { 0x6DBE, 28775 }, { 0x6DBF, 27017 }, { 0x6DC0, 29026 }, { 0x6DC1, 26964 }, { 0x6DC2, 26584 }, { 0x6DC3, 27274 }, { 0x6DC4, 26510 }, { 0x6DC5, 27822 }, { 0x6DC6, 29513 }, { 0x6DC7, 29249 }, { 0x6DF0, 29821 }, { 0x6DF1, 29375 }, { 0x6DF2, 29725 }, { 0x6DF3, 29720 }, { 0x6DF4, 30191 }, { 0x6DF5, 29816 }, { 0x6DF6, 30083 }, { 0x6DF7, 30078 }, { 0x6DF8, 30196 }, { 0x6DF9, 29831 }, { 0x6DFA, 30206 }, { 0x6DFB, 30211 }, { 0x6DFC, 9693 }, { 0x6DFD, 30201 }, { 0x6E00, 66314 }, { 0x6E01, 66316 }, { 0x6E02, 66318 }, { 0x6E03, 66320 }, { 0x6E04, 66322 }, { 0x6E05, 66324 }, { 0x6E06, 66326 }, { 0x6E07, 66328 }, { 0x6E08, 66330 }, { 0x6E09, 66332 }, { 0x6E0A, 66334 }, { 0x6E0B, 66336 }, { 0x6E0C, 66338 }, { 0x6E0D, 66340 }, { 0x6E0E, 66342 }, { 0x6E0F, 66344 }, { 0x6E10, 74355 }, { 0x6E11, 74464 }, { 0x6E12, 74457 }, { 0x6E13, 74350 }, { 0x6E14, 74440 }, { 0x6E15, 74451 }, { 0x6E16, 74434 }, { 0x6E17, 74299 }, { 0x6E18, 74390 }, { 0x6E19, 74445 }, { 0x6E20, 58207 }, { 0x6E21, 58211 }, { 0x6E22, 57894 }, { 0x6E23, 57899 }, { 0x6E24, 57948 }, { 0x6E25, 57955 }, { 0x6E26, 58290 }, { 0x6E30, 74262 }, { 0x6E31, 74244 }, { 0x6E32, 74250 }, { 0x6E33, 74256 }, { 0x6E34, 74343 }, { 0x6E35, 74337 }, { 0x6E36, 74428 }, { 0x6E37, 74284 }, { 0x6E38, 74375 }, { 0x6E39, 74329 }, { 0x6E3A, 74420 }, { 0x6E3B, 74276 }, { 0x6E3C, 74367 }, { 0x6E3D, 74314 }, { 0x6E3E, 74405 }, { 0x6E3F, 74269 }, { 0x6E40, 74360 }, { 0x6E41, 74307 }, { 0x6E42, 74398 }, { 0x6E43, 74291 }, { 0x6E44, 74382 }, { 0x6E45, 35852 }, { 0x6E46, 23293 }, { 0x6E47, 74322 }, { 0x6E48, 74413 }, { 0x6E49, 31173 }, { 0x6E4A, 66833 }, { 0x6E4B, 10082 }, { 0x6E4C, 31561 }, { 0x6E4D, 31170 }, { 0x6E4E, 66830 }, { 0x6E4F, 10075 }, { 0x6E50, 22507 }, { 0x6E51, 22660 }, { 0x6E52, 22487 }, { 0x6E54, 22652 }, { 0x6E55, 22505 }, { 0x6E56, 22644 }, { 0x6E57, 22657 }, { 0x6E58, 22480 }, { 0x6E59, 22499 }, { 0x6E5A, 22518 }, { 0x6E5B, 22490 }, { 0x6E5C, 22509 }, { 0x6E5D, 22494 }, { 0x6E5E, 22513 }, { 0x6E5F, 22596 }, { 0x6E60, 22647 }, { 0x6E61, 22624 }, { 0x6E62, 22502 }, { 0x6E63, 22666 }, { 0x6E64, 22649 }, { 0x6E65, 22663 }, { 0x6E66, 22593 }, { 0x6E68, 22621 }, { 0x6E69, 22590 }, { 0x6E6A, 22618 }, { 0x6E6B, 22654 }, { 0x6E70, 26455 }, { 0x6E71, 26442 }, { 0x6E72, 26449 }, { 0x6E73, 23761 }, { 0x6E74, 26467 }, { 0x6E76, 23797 }, { 0x6E77, 23793 }, { 0x6E78, 23772 }, { 0x6E79, 23768 }, { 0x6E7A, 23813 }, { 0x6E7B, 23809 }, { 0x6E7C, 26418 }, { 0x6E7D, 26414 }, { 0x6E7E, 23953 }, { 0x6E7F, 23949 }, { 0x6E80, 26059 }, { 0x6E81, 25385 }, { 0x6E82, 25377 }, { 0x6E83, 25341 }, { 0x6E84, 25333 }, { 0x6E85, 25111 }, { 0x6E86, 25103 }, { 0x6E87, 25363 }, { 0x6E88, 25355 }, { 0x6E89, 25185 }, { 0x6E8A, 25161 }, { 0x6E8B, 25177 }, { 0x6E8C, 25169 }, { 0x6E8D, 25448 }, { 0x6E8E, 25411 }, { 0x6E8F, 24226 }, { 0x6E90, 24211 }, { 0x6E91, 24221 }, { 0x6E92, 24216 }, { 0x6E93, 25042 }, { 0x6E94, 25036 }, { 0x6E95, 25048 }, { 0x6E96, 25012 }, { 0x6E97, 25022 }, { 0x6E98, 25017 }, { 0x6E99, 25869 }, { 0x6E9A, 25854 }, { 0x6E9B, 25864 }, { 0x6E9C, 25859 }, { 0x6E9D, 25572 }, { 0x6E9E, 25557 }, { 0x6E9F, 25567 }, { 0x6EA0, 25562 }, { 0x6EA1, 24540 }, { 0x6EA2, 24525 }, { 0x6EA3, 24535 }, { 0x6EA4, 24530 }, { 0x6EA5, 25595 }, { 0x6EA6, 25580 }, { 0x6EA7, 25590 }, { 0x6EA8, 25585 }, { 0x6EA9, 24328 }, { 0x6EAA, 24323 }, { 0x6EAB, 25846 }, { 0x6EAC, 25841 }, { 0x6EAD, 24924 }, { 0x6EAE, 24919 }, { 0x6EAF, 25905 }, { 0x6EB0, 25900 }, { 0x6EB1, 25833 }, { 0x6EB2, 25818 }, { 0x6EB3, 25828 }, { 0x6EB4, 25823 }, { 0x6EB5, 26216 }, { 0x6EB6, 26201 }, { 0x6EB7, 26211 }, { 0x6EB8, 26206 }, { 0x6EB9, 24961 }, { 0x6EBA, 24946 }, { 0x6EBB, 24956 }, { 0x6EBC, 24951 }, { 0x6EBD, 24255 }, { 0x6EBE, 24240 }, { 0x6EBF, 24250 }, { 0x6EC0, 24245 }, { 0x6EC1, 24991 }, { 0x6EC2, 24976 }, { 0x6EC3, 24986 }, { 0x6EC4, 24981 }, { 0x6EC5, 25305 }, { 0x6EC6, 25290 }, { 0x6EC7, 25300 }, { 0x6EC8, 25295 }, { 0x6EC9, 24139 }, { 0x6ECA, 24124 }, { 0x6ECB, 24134 }, { 0x6ECC, 24129 }, { 0x6ECD, 26051 }, { 0x6ECE, 26036 }, { 0x6ECF, 26046 }, { 0x6ED0, 26041 }, { 0x6ED1, 24400 }, { 0x6ED2, 24385 }, { 0x6ED3, 24395 }, { 0x6ED4, 24390 }, { 0x6ED5, 24828 }, { 0x6ED6, 24813 }, { 0x6ED7, 24823 }, { 0x6ED8, 24818 }, { 0x6ED9, 24715 }, { 0x6EDA, 24700 }, { 0x6EDB, 24710 }, { 0x6EDC, 24705 }, { 0x6EDD, 24769 }, { 0x6EDE, 24754 }, { 0x6EDF, 24764 }, { 0x6EE0, 24759 }, { 0x6EE1, 25630 }, { 0x6EE2, 25615 }, { 0x6EE3, 25625 }, { 0x6EE4, 25620 }, { 0x6EE5, 25706 }, { 0x6EE6, 25675 }, { 0x6EE7, 25701 }, { 0x6EE8, 25696 }, { 0x6EE9, 24626 }, { 0x6EEA, 24611 }, { 0x6EEB, 24621 }, { 0x6EEC, 24616 }, { 0x6EED, 25142 }, { 0x6EEE, 25137 }, { 0x6EEF, 25442 }, { 0x6EF0, 25436 }, { 0x6EF1, 25282 }, { 0x6EF2, 25206 }, { 0x6EF3, 25277 }, { 0x6EF4, 25272 }, { 0x6EF5, 27433 }, { 0x6EF6, 27423 }, { 0x6EF7, 27393 }, { 0x6EF8, 27383 }, { 0x6EF9, 27413 }, { 0x6EFA, 27403 }, { 0x6EFB, 27466 }, { 0x6EFC, 27443 }, { 0x6EFF, 10095 }, { 0x6F01, 63786 }, { 0x6F02, 63773 }, { 0x6F03, 63749 }, { 0x6F04, 63741 }, { 0x6F05, 63752 }, { 0x6F06, 63768 }, { 0x6F07, 63778 }, { 0x6F08, 63415 }, { 0x6F09, 63733 }, { 0x6F0A, 63760 }, { 0x6F0B, 63418 }, { 0x6F0C, 63423 }, { 0x6F0D, 63792 }, { 0x6F0E, 63400 }, { 0x6F0F, 63758 }, { 0x6F10, 63443 }, { 0x6F11, 63425 }, { 0x6F12, 63431 }, { 0x6F13, 63452 }, { 0x6F14, 63437 }, { 0x6F15, 63434 }, { 0x6F16, 63428 }, { 0x6F17, 63449 }, { 0x6F18, 63446 }, { 0x6F19, 63440 }, { 0x6F1A, 63421 }, { 0x6F1B, 63776 }, { 0x6F1C, 63770 }, { 0x6F1D, 63744 }, { 0x6F1E, 63789 }, { 0x6F1F, 63762 }, { 0x6F20, 63783 }, { 0x6F21, 63588 }, { 0x6F22, 63593 }, { 0x6F23, 63598 }, { 0x6F24, 63603 }, { 0x6F25, 63608 }, { 0x6F26, 63613 }, { 0x6F27, 63618 }, { 0x6F28, 63623 }, { 0x6F29, 63628 }, { 0x6F2A, 63633 }, { 0x6F2B, 63638 }, { 0x6F2C, 63643 }, { 0x6F2D, 63648 }, { 0x6F2E, 63653 }, { 0x6F2F, 63658 }, { 0x6F30, 63663 }, { 0x6F31, 63668 }, { 0x6F32, 63673 }, { 0x6F33, 63678 }, { 0x6F34, 63683 }, { 0x6F35, 63688 }, { 0x6F36, 63693 }, { 0x6F37, 63698 }, { 0x6F38, 63703 }, { 0x6F39, 63708 }, { 0x6F3A, 63713 }, { 0x6F3B, 63411 }, { 0x6F3C, 63755 }, { 0x6F3D, 63729 }, { 0x6F3E, 63780 }, { 0x6F3F, 63385 }, { 0x6F40, 63455 }, { 0x6F41, 63458 }, { 0x6F42, 63463 }, { 0x6F43, 63468 }, { 0x6F44, 63473 }, { 0x6F45, 63478 }, { 0x6F46, 63483 }, { 0x6F47, 63488 }, { 0x6F48, 63493 }, { 0x6F49, 63498 }, { 0x6F4A, 63503 }, { 0x6F4B, 63508 }, { 0x6F4C, 63513 }, { 0x6F4D, 63518 }, { 0x6F4E, 63523 }, { 0x6F4F, 63528 }, { 0x6F50, 63533 }, { 0x6F51, 63538 }, { 0x6F52, 63543 }, { 0x6F53, 63548 }, { 0x6F54, 63553 }, { 0x6F55, 63558 }, { 0x6F56, 63563 }, { 0x6F57, 63568 }, { 0x6F58, 63573 }, { 0x6F59, 63578 }, { 0x6F5A, 63583 }, { 0x6F5B, 63403 }, { 0x6F5C, 63765 }, { 0x6F5D, 63721 }, { 0x6F5E, 63736 }, { 0x6F5F, 63407 }, { 0x6F60, 63725 }, { 0x6F61, 64276 }, { 0x6F62, 63796 }, { 0x6F63, 63807 }, { 0x6F64, 64280 }, { 0x6F65, 64253 }, { 0x6F66, 64192 }, { 0x6F67, 64208 }, { 0x6F68, 64218 }, { 0x6F69, 64228 }, { 0x6F6A, 64213 }, { 0x6F6B, 64223 }, { 0x6F6C, 64238 }, { 0x6F6D, 64248 }, { 0x6F6E, 64243 }, { 0x6F6F, 64233 }, { 0x6F70, 64283 }, { 0x6F71, 64024 }, { 0x6F72, 64032 }, { 0x6F73, 64044 }, { 0x6F74, 64028 }, { 0x6F75, 64040 }, { 0x6F76, 64068 }, { 0x6F77, 64076 }, { 0x6F78, 64084 }, { 0x6F79, 64072 }, { 0x6F7A, 64080 }, { 0x6F7B, 64148 }, { 0x6F7C, 64156 }, { 0x6F7D, 64164 }, { 0x6F7E, 64152 }, { 0x6F7F, 64160 }, { 0x6F80, 64168 }, { 0x6F81, 64176 }, { 0x6F82, 64184 }, { 0x6F83, 64172 }, { 0x6F84, 64180 }, { 0x6F85, 64108 }, { 0x6F86, 64116 }, { 0x6F87, 64124 }, { 0x6F88, 64112 }, { 0x6F89, 64120 }, { 0x6F8A, 64048 }, { 0x6F8B, 64056 }, { 0x6F8C, 64064 }, { 0x6F8D, 64052 }, { 0x6F8E, 64060 }, { 0x6F8F, 64088 }, { 0x6F90, 64096 }, { 0x6F91, 64104 }, { 0x6F92, 64092 }, { 0x6F93, 64100 }, { 0x6F94, 64196 }, { 0x6F95, 64204 }, { 0x6F96, 64200 }, { 0x6F97, 64128 }, { 0x6F98, 64136 }, { 0x6F99, 64144 }, { 0x6F9A, 64132 }, { 0x6F9B, 64140 }, { 0x6F9C, 64188 }, { 0x6F9D, 64036 }, { 0x6F9E, 64257 }, { 0x6F9F, 64262 }, { 0x6FA0, 63814 }, { 0x6FA1, 63933 }, { 0x6FA2, 64001 }, { 0x6FA3, 63977 }, { 0x6FA4, 63921 }, { 0x6FA5, 63981 }, { 0x6FA6, 63985 }, { 0x6FA7, 63937 }, { 0x6FA8, 64005 }, { 0x6FA9, 63929 }, { 0x6FAA, 64009 }, { 0x6FAB, 63993 }, { 0x6FAC, 63997 }, { 0x6FAD, 63965 }, { 0x6FAE, 64017 }, { 0x6FAF, 64013 }, { 0x6FB0, 63989 }, { 0x6FB1, 63917 }, { 0x6FB2, 63925 }, { 0x6FB3, 63973 }, { 0x6FB4, 63961 }, { 0x6FB5, 63901 }, { 0x6FB6, 63957 }, { 0x6FB7, 63913 }, { 0x6FB8, 63905 }, { 0x6FB9, 63969 }, { 0x6FBA, 63941 }, { 0x6FBB, 63945 }, { 0x6FBC, 63953 }, { 0x6FBD, 63949 }, { 0x6FBE, 63909 }, { 0x6FC2, 63817 }, { 0x6FC3, 63837 }, { 0x6FC4, 63865 }, { 0x6FC5, 63893 }, { 0x6FC6, 63841 }, { 0x6FC7, 63821 }, { 0x6FCA, 63897 }, { 0x6FCB, 63869 }, { 0x6FCC, 63829 }, { 0x6FCD, 63853 }, { 0x6FCE, 63885 }, { 0x6FCF, 63849 }, { 0x6FD2, 63877 }, { 0x6FD3, 63833 }, { 0x6FD4, 63889 }, { 0x6FD5, 63857 }, { 0x6FD6, 63861 }, { 0x6FD7, 63881 }, { 0x6FDA, 63845 }, { 0x6FDB, 63873 }, { 0x6FDC, 63825 }, { 0x6FE0, 63397 }, { 0x6FE1, 63718 }, { 0x6FE2, 63388 }, { 0x6FE3, 63747 }, { 0x6FE4, 63738 }, { 0x6FE5, 63394 }, { 0x6FE6, 63391 }, { 0x6FE8, 63803 }, { 0x6FE9, 64270 }, { 0x6FEA, 64021 }, { 0x6FEB, 64273 }, { 0x6FEC, 64267 }, { 0x6FED, 63800 }, { 0x6FEE, 63811 }, { 0x6FF9, 69249 }, { 0x6FFA, 69252 }, { 0x6FFB, 69255 }, { 0x6FFC, 35637 }, { 0x6FFD, 69276 }, { 0x7000, 35010 }, { 0x7001, 35135 }, { 0x7002, 35095 }, { 0x7003, 35235 }, { 0x7004, 35020 }, { 0x7005, 34975 }, { 0x7006, 35170 }, { 0x7007, 35005 }, { 0x7008, 35040 }, { 0x7009, 35190 }, { 0x700A, 35215 }, { 0x700B, 35175 }, { 0x700D, 35125 }, { 0x700E, 35245 }, { 0x700F, 35305 }, { 0x7010, 35165 }, { 0x7011, 35255 }, { 0x7012, 35270 }, { 0x7013, 35320 }, { 0x7014, 35315 }, { 0x7015, 35035 }, { 0x7016, 35285 }, { 0x7017, 35045 }, { 0x7018, 35070 }, { 0x7019, 35000 }, { 0x701A, 35075 }, { 0x701B, 35105 }, { 0x701C, 35195 }, { 0x701D, 35210 }, { 0x701E, 34985 }, { 0x701F, 35280 }, { 0x7020, 35140 }, { 0x7021, 35025 }, { 0x7022, 35185 }, { 0x7023, 35050 }, { 0x7024, 35310 }, { 0x7025, 35065 }, { 0x7026, 35115 }, { 0x7028, 35230 }, { 0x7029, 35090 }, { 0x702A, 35200 }, { 0x702B, 34980 }, { 0x702C, 35085 }, { 0x702D, 35110 }, { 0x702E, 35015 }, { 0x702F, 35150 }, { 0x7030, 35030 }, { 0x7031, 35220 }, { 0x7032, 35225 }, { 0x7033, 34990 }, { 0x7034, 35130 }, { 0x7035, 34995 }, { 0x7036, 35265 }, { 0x7037, 35205 }, { 0x7038, 35295 }, { 0x7039, 35145 }, { 0x703A, 35155 }, { 0x703C, 35055 }, { 0x703D, 35290 }, { 0x703F, 35060 }, { 0x7040, 35080 }, { 0x7041, 35160 }, { 0x7042, 35325 }, { 0x7043, 35275 }, { 0x7044, 35335 }, { 0x7045, 35180 }, { 0x7046, 35100 }, { 0x7047, 35240 }, { 0x7048, 35300 }, { 0x7049, 35120 }, { 0x704A, 35260 }, { 0x704B, 35250 }, { 0x704C, 35330 }, { 0x704D, 35340 }, { 0x7050, 34349 }, { 0x7051, 34353 }, { 0x7052, 34357 }, { 0x7053, 34361 }, { 0x7054, 34365 }, { 0x7055, 34369 }, { 0x7056, 34373 }, { 0x7057, 34377 }, { 0x7058, 34381 }, { 0x7059, 34385 }, { 0x705A, 34389 }, { 0x705B, 34393 }, { 0x705C, 34397 }, { 0x705D, 34401 }, { 0x7080, 34405 }, { 0x7081, 34410 }, { 0x7082, 34415 }, { 0x7083, 34420 }, { 0x7084, 34750 }, { 0x7085, 34755 }, { 0x7086, 34760 }, { 0x7087, 34765 }, { 0x7088, 34770 }, { 0x7089, 34775 }, { 0x708A, 34780 }, { 0x708B, 34785 }, { 0x708C, 34790 }, { 0x708D, 34795 }, { 0x708E, 34425 }, { 0x708F, 34430 }, { 0x7090, 34435 }, { 0x7091, 34440 }, { 0x7092, 34445 }, { 0x7093, 34945 }, { 0x7094, 34950 }, { 0x7095, 34450 }, { 0x7096, 34455 }, { 0x7097, 34460 }, { 0x7098, 34955 }, { 0x7099, 34960 }, { 0x709A, 34464 }, { 0x709B, 34469 }, { 0x709C, 34474 }, { 0x709D, 34478 }, { 0x709E, 34483 }, { 0x709F, 34487 }, { 0x70A0, 34491 }, { 0x70A1, 34496 }, { 0x70A2, 34500 }, { 0x70A3, 34504 }, { 0x70A4, 34965 }, { 0x70A5, 34508 }, { 0x70A6, 34512 }, { 0x70A7, 34516 }, { 0x70A8, 34521 }, { 0x70A9, 34525 }, { 0x70AA, 34529 }, { 0x70AB, 34534 }, { 0x70AC, 34539 }, { 0x70AD, 34543 }, { 0x70AE, 34547 }, { 0x70AF, 34551 }, { 0x70B0, 34555 }, { 0x70B1, 34559 }, { 0x70B2, 34563 }, { 0x70B3, 34567 }, { 0x70B4, 34571 }, { 0x70B5, 34575 }, { 0x70B6, 34580 }, { 0x70B7, 34584 }, { 0x70B8, 34589 }, { 0x70B9, 34593 }, { 0x70BA, 34597 }, { 0x70BB, 34601 }, { 0x70BC, 34605 }, { 0x70BD, 34609 }, { 0x70BE, 34613 }, { 0x70BF, 34617 }, { 0x70C0, 34621 }, { 0x70C1, 34625 }, { 0x70C2, 34629 }, { 0x70C3, 34633 }, { 0x70C4, 34638 }, { 0x70C5, 34643 }, { 0x70C6, 34648 }, { 0x70C7, 34653 }, { 0x70C8, 34658 }, { 0x70C9, 34662 }, { 0x70CA, 34667 }, { 0x70CB, 34671 }, { 0x70CC, 34675 }, { 0x70CD, 34681 }, { 0x70CE, 34686 }, { 0x70CF, 34692 }, { 0x70D0, 34697 }, { 0x70D1, 34701 }, { 0x70D2, 34970 }, { 0x70D3, 34705 }, { 0x70D4, 34709 }, { 0x70D5, 34713 }, { 0x70D6, 34717 }, { 0x70D7, 34721 }, { 0x70D8, 34725 }, { 0x70D9, 34730 }, { 0x70DA, 34734 }, { 0x70DB, 34738 }, { 0x70DC, 34742 }, { 0x70DD, 34746 }, { 0x70DE, 34800 }, { 0x70DF, 34805 }, { 0x70E0, 34810 }, { 0x70E1, 34815 }, { 0x70E2, 34820 }, { 0x70E3, 34825 }, { 0x70E4, 34830 }, { 0x70E5, 34835 }, { 0x70E6, 34840 }, { 0x70E7, 34845 }, { 0x70E8, 34850 }, { 0x70E9, 34855 }, { 0x70EA, 34860 }, { 0x70EB, 34865 }, { 0x70EC, 34870 }, { 0x70ED, 34875 }, { 0x70EE, 34880 }, { 0x70EF, 34885 }, { 0x70F0, 34890 }, { 0x70F1, 34895 }, { 0x70F2, 34900 }, { 0x70F3, 34905 }, { 0x70F4, 34910 }, { 0x70F5, 34915 }, { 0x70F6, 34920 }, { 0x70F7, 34925 }, { 0x70F8, 34930 }, { 0x70F9, 34935 }, { 0x70FA, 34940 }, { 0x7100, 23485 }, { 0x7101, 23481 }, { 0x7102, 23489 }, { 0x7107, 23497 }, { 0x7108, 23526 }, { 0x7109, 23613 }, { 0x710A, 23548 }, { 0x710B, 23537 }, { 0x710C, 23508 }, { 0x710D, 23595 }, { 0x710E, 23570 }, { 0x710F, 23559 }, { 0x7110, 23519 }, { 0x7111, 23645 }, { 0x7112, 23638 }, { 0x7113, 23588 }, { 0x7114, 23581 }, { 0x7115, 23606 }, { 0x7116, 23652 }, { 0x7117, 23624 }, { 0x7118, 23631 }, { 0x7119, 23500 }, { 0x711A, 23529 }, { 0x711B, 23616 }, { 0x711C, 23551 }, { 0x711D, 23540 }, { 0x711E, 23511 }, { 0x711F, 23598 }, { 0x7120, 23573 }, { 0x7121, 23562 }, { 0x7122, 23504 }, { 0x7123, 23533 }, { 0x7124, 23620 }, { 0x7125, 23555 }, { 0x7126, 23544 }, { 0x7127, 23515 }, { 0x7128, 23602 }, { 0x7129, 23577 }, { 0x712A, 23566 }, { 0x712B, 23522 }, { 0x712C, 23648 }, { 0x712D, 23641 }, { 0x712E, 23591 }, { 0x712F, 23584 }, { 0x7130, 23609 }, { 0x7131, 23655 }, { 0x7132, 23627 }, { 0x7133, 23634 }, { 0x7137, 23659 }, { 0x7138, 23663 }, { 0x7139, 23675 }, { 0x713A, 23667 }, { 0x713B, 23671 }, { 0x713C, 23476 }, { 0x713D, 23492 }, { 0x713E, 23683 }, { 0x713F, 23679 }, { 0x7140, 13133 }, { 0x7141, 13111 }, { 0x7142, 13116 }, { 0x7143, 13171 }, { 0x7144, 13213 }, { 0x7145, 13175 }, { 0x7146, 13202 }, { 0x7147, 13227 }, { 0x7148, 13197 }, { 0x7149, 13160 }, { 0x714A, 13222 }, { 0x714B, 13127 }, { 0x714C, 13186 }, { 0x714D, 13144 }, { 0x714E, 13207 }, { 0x714F, 13192 }, { 0x7150, 13155 }, { 0x7151, 13217 }, { 0x7152, 13121 }, { 0x7153, 13180 }, { 0x7154, 13138 }, { 0x7155, 13165 }, { 0x7156, 13232 }, { 0x7157, 13150 }, { 0x7158, 13248 }, { 0x7159, 13263 }, { 0x715A, 13331 }, { 0x715B, 13317 }, { 0x715C, 13281 }, { 0x715D, 13253 }, { 0x715E, 13321 }, { 0x715F, 13353 }, { 0x7160, 13343 }, { 0x7161, 13347 }, { 0x7162, 13335 }, { 0x7163, 13313 }, { 0x7164, 13277 }, { 0x7165, 13304 }, { 0x7166, 13362 }, { 0x7167, 13366 }, { 0x7168, 13339 }, { 0x7169, 13295 }, { 0x716A, 13267 }, { 0x716B, 13299 }, { 0x716C, 13326 }, { 0x716D, 13357 }, { 0x716E, 13285 }, { 0x716F, 13308 }, { 0x7170, 13238 }, { 0x7171, 13272 }, { 0x7172, 13290 }, { 0x7173, 13243 }, { 0x7174, 13258 }, { 0x7175, 10649 }, { 0x7176, 10653 }, { 0x7177, 10674 }, { 0x7178, 11894 }, { 0x7179, 10694 }, { 0x717A, 12082 }, { 0x717B, 13022 }, { 0x717C, 10689 }, { 0x717D, 10670 }, { 0x717E, 11890 }, { 0x717F, 10685 }, { 0x7180, 10681 }, { 0x7181, 13056 }, { 0x7182, 13027 }, { 0x7183, 10717 }, { 0x7184, 12079 }, { 0x7185, 12085 }, { 0x7186, 12021 }, { 0x7187, 12018 }, { 0x7188, 12024 }, { 0x7189, 13067 }, { 0x718A, 10697 }, { 0x7190, 22109 }, { 0x7191, 22013 }, { 0x7192, 22121 }, { 0x7193, 22112 }, { 0x7194, 22016 }, { 0x7195, 22115 }, { 0x7196, 22118 }, { 0x7197, 22130 }, { 0x7198, 22133 }, { 0x7199, 22127 }, { 0x719A, 22010 }, { 0x719B, 22124 }, { 0x71D0, 55326 }, { 0x71D1, 55265 }, { 0x71D2, 55306 }, { 0x71D3, 55278 }, { 0x71D4, 55211 }, { 0x71D5, 55245 }, { 0x71D6, 55261 }, { 0x71D7, 55294 }, { 0x71D8, 55237 }, { 0x71D9, 55202 }, { 0x71DA, 55145 }, { 0x71DB, 55270 }, { 0x71DC, 55165 }, { 0x71DD, 55298 }, { 0x71DE, 55282 }, { 0x71DF, 55161 }, { 0x71E0, 55153 }, { 0x71E1, 55311 }, { 0x71E2, 55315 }, { 0x71E3, 55253 }, { 0x71E4, 55169 }, { 0x71E5, 55228 }, { 0x71E6, 55249 }, { 0x71E7, 55274 }, { 0x71E8, 55189 }, { 0x71E9, 55181 }, { 0x71EA, 55177 }, { 0x71EB, 55206 }, { 0x71EC, 55149 }, { 0x71ED, 55157 }, { 0x71EE, 55215 }, { 0x71EF, 55173 }, { 0x71F0, 55241 }, { 0x71F1, 55141 }, { 0x71F2, 55223 }, { 0x71F3, 55193 }, { 0x71F4, 55286 }, { 0x71F5, 55290 }, { 0x71F6, 55185 }, { 0x71F7, 55136 }, { 0x71F8, 55219 }, { 0x71F9, 55257 }, { 0x71FA, 55302 }, { 0x71FB, 55232 }, { 0x71FC, 55197 }, { 0x71FD, 55320 }, { 0x7280, 35345 }, { 0x7281, 35354 }, { 0x7282, 35348 }, { 0x7283, 35411 }, { 0x7284, 35357 }, { 0x7285, 35351 }, { 0x7286, 35363 }, { 0x7287, 35399 }, { 0x7288, 35405 }, { 0x7289, 35426 }, { 0x728A, 35366 }, { 0x728B, 35369 }, { 0x728C, 35384 }, { 0x728D, 35372 }, { 0x728E, 35375 }, { 0x728F, 35378 }, { 0x7290, 35420 }, { 0x7291, 35423 }, { 0x7292, 35396 }, { 0x7293, 35381 }, { 0x7294, 35417 }, { 0x7295, 35387 }, { 0x7296, 35390 }, { 0x7297, 35393 }, { 0x7298, 35429 }, { 0x7299, 35408 }, { 0x729A, 35414 }, { 0x729B, 35360 }, { 0x729C, 35402 }, { 0x72A0, 30318 }, { 0x72A1, 30405 }, { 0x72A2, 30324 }, { 0x72A3, 30339 }, { 0x72A4, 30447 }, { 0x72A5, 30357 }, { 0x72A6, 30390 }, { 0x72A7, 30372 }, { 0x72A8, 30354 }, { 0x72A9, 30321 }, { 0x72AA, 30342 }, { 0x72AB, 30348 }, { 0x72AC, 30375 }, { 0x72AD, 30363 }, { 0x72AE, 30411 }, { 0x72AF, 30438 }, { 0x72B0, 30360 }, { 0x72B1, 30450 }, { 0x72B2, 30366 }, { 0x72B3, 30402 }, { 0x72B4, 30369 }, { 0x72B5, 30345 }, { 0x72B6, 30444 }, { 0x72B7, 30351 }, { 0x72B8, 30414 }, { 0x72B9, 30333 }, { 0x72BA, 30327 }, { 0x72BB, 30462 }, { 0x72BC, 30336 }, { 0x72BD, 30387 }, { 0x72BE, 30396 }, { 0x72BF, 30423 }, { 0x72C0, 30330 }, { 0x72C1, 30381 }, { 0x72C2, 30417 }, { 0x72C3, 30441 }, { 0x72C4, 30399 }, { 0x72C5, 30384 }, { 0x72C6, 30453 }, { 0x72C7, 30420 }, { 0x72C8, 30456 }, { 0x72C9, 30408 }, { 0x72CA, 30393 }, { 0x72CB, 30429 }, { 0x72CC, 30432 }, { 0x72CD, 30435 }, { 0x72CE, 30426 }, { 0x72CF, 30378 }, { 0x72D0, 30459 }, { 0x7300, 6815 }, { 0x7301, 6835 }, { 0x7302, 6879 }, { 0x7303, 6839 }, { 0x7304, 6819 }, { 0x7305, 6899 }, { 0x7306, 6903 }, { 0x7307, 6867 }, { 0x7308, 6935 }, { 0x7309, 6823 }, { 0x730A, 6875 }, { 0x730B, 6847 }, { 0x730C, 6851 }, { 0x730D, 6855 }, { 0x730E, 6919 }, { 0x730F, 6827 }, { 0x7310, 6887 }, { 0x7311, 6931 }, { 0x7312, 6883 }, { 0x7313, 6859 }, { 0x7314, 6863 }, { 0x7315, 6891 }, { 0x7316, 6831 }, { 0x7317, 6911 }, { 0x7318, 6927 }, { 0x7319, 6923 }, { 0x731A, 6843 }, { 0x731B, 6915 }, { 0x731C, 6907 }, { 0x731D, 6871 }, { 0x731E, 6895 }, { 0x7320, 6939 }, { 0x7321, 6947 }, { 0x7322, 6943 }, { 0x7323, 6951 }, { 0x7330, 31802 }, { 0x7331, 31869 }, { 0x7332, 31808 }, { 0x7333, 31805 }, { 0x7334, 31857 }, { 0x7335, 31875 }, { 0x7336, 31814 }, { 0x7337, 31811 }, { 0x7338, 31866 }, { 0x7339, 31796 }, { 0x733A, 31833 }, { 0x733B, 31836 }, { 0x733C, 31839 }, { 0x733D, 31860 }, { 0x733E, 31799 }, { 0x733F, 31821 }, { 0x7340, 31872 }, { 0x7341, 31863 }, { 0x7342, 31845 }, { 0x7343, 31848 }, { 0x7344, 31851 }, { 0x7345, 31854 }, { 0x7346, 31824 }, { 0x7347, 31830 }, { 0x7348, 31827 }, { 0x7349, 31842 }, { 0x734A, 31817 }, { 0x7380, 55959 }, { 0x7381, 55962 }, { 0x7382, 55986 }, { 0x7383, 55941 }, { 0x7384, 55983 }, { 0x7385, 55920 }, { 0x7386, 55929 }, { 0x7387, 55980 }, { 0x7388, 55968 }, { 0x7389, 55953 }, { 0x738A, 55956 }, { 0x738B, 55938 }, { 0x738C, 55977 }, { 0x738D, 55992 }, { 0x738E, 55944 }, { 0x738F, 55965 }, { 0x7390, 55947 }, { 0x7391, 55932 }, { 0x7392, 55998 }, { 0x7393, 55935 }, { 0x7394, 55923 }, { 0x7395, 55974 }, { 0x7396, 55971 }, { 0x7397, 55995 }, { 0x7398, 56001 }, { 0x7399, 55989 }, { 0x739A, 55926 }, { 0x739B, 55914 }, { 0x739C, 55917 }, { 0x739D, 55950 }, { 0x739F, 55911 }, { 0x73A0, 6955 }, { 0x73A1, 6959 }, { 0x73A2, 6963 }, { 0x73A3, 7011 }, { 0x73A4, 7015 }, { 0x73A5, 6991 }, { 0x73A6, 6995 }, { 0x73A7, 7075 }, { 0x73A8, 6971 }, { 0x73A9, 7003 }, { 0x73AA, 7007 }, { 0x73AB, 7059 }, { 0x73AC, 7063 }, { 0x73AD, 6975 }, { 0x73AE, 6979 }, { 0x73AF, 6983 }, { 0x73B0, 7095 }, { 0x73B1, 7043 }, { 0x73B2, 6967 }, { 0x73B3, 6987 }, { 0x73B4, 7035 }, { 0x73B5, 7039 }, { 0x73B6, 7023 }, { 0x73B7, 7027 }, { 0x73B8, 7031 }, { 0x73B9, 7079 }, { 0x73BA, 7067 }, { 0x73BB, 7071 }, { 0x73BC, 7047 }, { 0x73BD, 7051 }, { 0x73BE, 7019 }, { 0x73BF, 7055 }, { 0x73C0, 7083 }, { 0x73C1, 7087 }, { 0x73C2, 7091 }, { 0x73C3, 6999 }, { 0x73C8, 7111 }, { 0x73C9, 7119 }, { 0x73CA, 7123 }, { 0x73CB, 7127 }, { 0x73CC, 7107 }, { 0x73CD, 7115 }, { 0x73CE, 7099 }, { 0x73CF, 7103 }, { 0x73D0, 7131 }, { 0x73D1, 7135 }, { 0x73D2, 7143 }, { 0x73D3, 7139 }, { 0x73D4, 7147 }, { 0x73D5, 7151 }, { 0x7400, 40249 }, { 0x7401, 40244 }, { 0x7402, 40239 }, { 0x7403, 40259 }, { 0x7404, 40254 }, { 0x7405, 40264 }, { 0x7406, 40287 }, { 0x7407, 40282 }, { 0x7408, 40277 }, { 0x7409, 40297 }, { 0x740A, 40292 }, { 0x740B, 40302 }, { 0x740C, 40139 }, { 0x740D, 40175 }, { 0x740E, 40179 }, { 0x740F, 40227 }, { 0x7410, 40135 }, { 0x7411, 40215 }, { 0x7412, 40183 }, { 0x7413, 40219 }, { 0x7414, 40187 }, { 0x7415, 40235 }, { 0x7416, 40207 }, { 0x7417, 40211 }, { 0x7418, 40203 }, { 0x7419, 40143 }, { 0x741A, 40223 }, { 0x741B, 40199 }, { 0x741C, 40269 }, { 0x741D, 40163 }, { 0x741E, 40231 }, { 0x741F, 40195 }, { 0x7420, 40273 }, { 0x7421, 40159 }, { 0x7422, 40147 }, { 0x7423, 40151 }, { 0x7424, 40155 }, { 0x7425, 40191 }, { 0x7426, 40171 }, { 0x7427, 40167 }, { 0x7428, 40077 }, { 0x7429, 40072 }, { 0x742A, 40067 }, { 0x742B, 40087 }, { 0x742C, 40082 }, { 0x742D, 40092 }, { 0x742E, 40115 }, { 0x742F, 40110 }, { 0x7430, 40105 }, { 0x7431, 40125 }, { 0x7432, 40120 }, { 0x7433, 40130 }, { 0x7434, 39967 }, { 0x7435, 40003 }, { 0x7436, 40007 }, { 0x7437, 40055 }, { 0x7438, 39963 }, { 0x7439, 40043 }, { 0x743A, 40011 }, { 0x743B, 40047 }, { 0x743C, 40015 }, { 0x743D, 40063 }, { 0x743E, 40035 }, { 0x743F, 40039 }, { 0x7440, 40031 }, { 0x7441, 39971 }, { 0x7442, 40051 }, { 0x7443, 40027 }, { 0x7444, 40097 }, { 0x7445, 39991 }, { 0x7446, 40059 }, { 0x7447, 40023 }, { 0x7448, 40101 }, { 0x7449, 39987 }, { 0x744A, 39975 }, { 0x744B, 39979 }, { 0x744C, 39983 }, { 0x744D, 40019 }, { 0x744E, 39999 }, { 0x744F, 39995 }, { 0x7450, 43139 }, { 0x7451, 43103 }, { 0x7452, 43127 }, { 0x7453, 43079 }, { 0x7454, 43163 }, { 0x7455, 43040 }, { 0x7456, 43145 }, { 0x7457, 43166 }, { 0x7458, 43112 }, { 0x7459, 43124 }, { 0x745A, 43064 }, { 0x745B, 43121 }, { 0x745C, 43082 }, { 0x745D, 43106 }, { 0x745E, 43148 }, { 0x745F, 43118 }, { 0x7460, 43169 }, { 0x7461, 43160 }, { 0x7462, 43109 }, { 0x7463, 43157 }, { 0x7464, 43130 }, { 0x7465, 43133 }, { 0x7466, 43031 }, { 0x7467, 43073 }, { 0x7468, 43058 }, { 0x7469, 43046 }, { 0x746A, 43034 }, { 0x746B, 43151 }, { 0x746C, 43100 }, { 0x746D, 43028 }, { 0x746E, 43142 }, { 0x746F, 43091 }, { 0x7470, 43070 }, { 0x7471, 43049 }, { 0x7472, 43088 }, { 0x7473, 43043 }, { 0x7474, 43094 }, { 0x7475, 43136 }, { 0x7476, 43097 }, { 0x7477, 43061 }, { 0x7478, 43055 }, { 0x7479, 43037 }, { 0x747A, 43052 }, { 0x747B, 43076 }, { 0x747C, 43154 }, { 0x747D, 43067 }, { 0x747E, 43085 }, { 0x747F, 43115 }, { 0x7480, 42944 }, { 0x7481, 42899 }, { 0x7482, 42926 }, { 0x7483, 42914 }, { 0x7484, 42929 }, { 0x7485, 42938 }, { 0x7486, 42950 }, { 0x7487, 42920 }, { 0x7488, 42923 }, { 0x7489, 42968 }, { 0x748A, 42935 }, { 0x748B, 42947 }, { 0x748C, 42908 }, { 0x748D, 42905 }, { 0x748E, 42965 }, { 0x748F, 42953 }, { 0x7490, 42956 }, { 0x7491, 42959 }, { 0x7492, 42962 }, { 0x7493, 42941 }, { 0x7494, 42911 }, { 0x7495, 42932 }, { 0x7496, 42881 }, { 0x7497, 42884 }, { 0x7498, 42887 }, { 0x7499, 42890 }, { 0x749A, 42893 }, { 0x749B, 42896 }, { 0x749C, 42902 }, { 0x749D, 42917 }, { 0x74A0, 42869 }, { 0x74A1, 42851 }, { 0x74A2, 42857 }, { 0x74A3, 42878 }, { 0x74A4, 42863 }, { 0x74A5, 42860 }, { 0x74A6, 42854 }, { 0x74A7, 42875 }, { 0x74A8, 42872 }, { 0x74A9, 42866 }, { 0x7800, 39794 }, { 0x7801, 39797 }, { 0x7802, 39800 }, { 0x7803, 39803 }, { 0x7804, 39806 }, { 0x7805, 39809 }, { 0x7808, 39812 }, { 0x780A, 39815 }, { 0x780B, 39818 }, { 0x780C, 39821 }, { 0x780D, 39824 }, { 0x780E, 39827 }, { 0x780F, 39830 }, { 0x7810, 39833 }, { 0x7811, 39836 }, { 0x7812, 39839 }, { 0x7813, 39842 }, { 0x7814, 39845 }, { 0x7815, 39848 }, { 0x7816, 39851 }, { 0x7817, 39854 }, { 0x7818, 39857 }, { 0x7819, 39860 }, { 0x781A, 39863 }, { 0x781B, 39866 }, { 0x781C, 39869 }, { 0x781D, 39872 }, { 0x781E, 39875 }, { 0x781F, 39878 }, { 0x7820, 39881 }, { 0x7821, 39884 }, { 0x7822, 39887 }, { 0x7823, 39890 }, { 0x7824, 39893 }, { 0x7825, 39896 }, { 0x7826, 39899 }, { 0x7827, 39902 }, { 0x7828, 39905 }, { 0x7829, 39908 }, { 0x782A, 39911 }, { 0x782B, 39914 }, { 0x782C, 39917 }, { 0x782D, 39920 }, { 0x782E, 39923 }, { 0x782F, 39926 }, { 0x7830, 39929 }, { 0x7831, 39932 }, { 0x7832, 39935 }, { 0x7833, 39938 }, { 0x7834, 39941 }, { 0x7835, 39944 }, { 0x7837, 39947 }, { 0x7838, 39950 }, { 0x783C, 39953 }, { 0x783F, 39956 }, { 0x7900, 67899 }, { 0x7901, 67902 }, { 0x7902, 67938 }, { 0x7903, 67935 }, { 0x7904, 67890 }, { 0x7905, 67926 }, { 0x7906, 67932 }, { 0x7907, 67905 }, { 0x7908, 67923 }, { 0x7909, 67929 }, { 0x790A, 67908 }, { 0x790B, 67941 }, { 0x790C, 67911 }, { 0x790D, 67914 }, { 0x790E, 67950 }, { 0x790F, 67896 }, { 0x7910, 67893 }, { 0x7911, 67947 }, { 0x7912, 67917 }, { 0x7913, 67944 }, { 0x7914, 67953 }, { 0x7915, 67920 }, { 0x7916, 67956 }, { 0x7917, 67963 }, { 0x7918, 67966 }, { 0x7919, 67959 }, { 0x791F, 67887 }, { 0x7920, 35432 }, { 0x7921, 35435 }, { 0x7922, 35450 }, { 0x7923, 35441 }, { 0x7924, 35444 }, { 0x7925, 35486 }, { 0x7926, 35453 }, { 0x7927, 35489 }, { 0x7928, 35456 }, { 0x7929, 35459 }, { 0x792A, 35462 }, { 0x792B, 35465 }, { 0x792C, 35468 }, { 0x792D, 35474 }, { 0x792E, 35504 }, { 0x792F, 35480 }, { 0x7930, 35483 }, { 0x7931, 35447 }, { 0x7932, 35471 }, { 0x7933, 35477 }, { 0x7934, 35507 }, { 0x7935, 35492 }, { 0x7936, 35495 }, { 0x7937, 35498 }, { 0x7938, 35501 }, { 0x7939, 35438 }, { 0x793F, 35510 }, { 0x7A00, 67726 }, { 0x7A01, 67705 }, { 0x7A02, 67713 }, { 0x7A03, 67717 }, { 0x7A05, 67701 }, { 0x7A06, 67709 }, { 0x7A0C, 67722 }, { 0x7A0D, 67678 }, { 0x7A0E, 67686 }, { 0x7A0F, 67683 }, { 0x7A10, 67747 }, { 0x7A11, 67795 }, { 0x7A12, 67738 }, { 0x7A13, 67792 }, { 0x7A15, 67732 }, { 0x7A16, 67783 }, { 0x7A17, 67744 }, { 0x7A19, 67804 }, { 0x7A1A, 67819 }, { 0x7A1B, 67825 }, { 0x7A1C, 67786 }, { 0x7A1D, 67822 }, { 0x7A1E, 67801 }, { 0x7A1F, 67768 }, { 0x7A20, 67816 }, { 0x7A21, 67735 }, { 0x7A22, 67789 }, { 0x7A23, 67756 }, { 0x7A24, 67759 }, { 0x7A25, 67807 }, { 0x7A26, 67729 }, { 0x7A27, 67780 }, { 0x7A28, 67753 }, { 0x7A29, 67774 }, { 0x7A2A, 67762 }, { 0x7A2B, 67750 }, { 0x7A2C, 67771 }, { 0x7A2D, 67810 }, { 0x7A2E, 67813 }, { 0x7A2F, 67765 }, { 0x7A30, 67777 }, { 0x7A31, 67741 }, { 0x7A32, 67798 }, { 0x7A33, 67828 }, { 0x7A38, 67667 }, { 0x7A39, 67675 }, { 0x7A3A, 67671 }, { 0x7A3F, 67845 }, { 0x7A40, 67689 }, { 0x7A41, 67692 }, { 0x7A42, 67698 }, { 0x7A43, 67695 }, { 0x7A44, 67839 }, { 0x7A45, 67842 }, { 0x7A46, 67831 }, { 0x7A47, 67835 }, { 0x7A50, 67847 }, { 0x7A51, 67859 }, { 0x7A52, 67863 }, { 0x7A53, 67870 }, { 0x7A54, 67874 }, { 0x7A55, 67856 }, { 0x7A56, 67850 }, { 0x7A57, 67866 }, { 0x7A58, 67853 }, { 0x8000, 58351 }, { 0x8001, 58354 }, { 0x8002, 58364 }, { 0x8003, 58379 }, { 0x8004, 58359 }, { 0x8005, 58369 }, { 0x8006, 58390 }, { 0x8007, 58385 }, { 0x8008, 58374 }, { 0x8009, 58460 }, { 0x800A, 58463 }, { 0x800B, 58495 }, { 0x800C, 58500 }, { 0x800D, 58484 }, { 0x800E, 58506 }, { 0x800F, 58479 }, { 0x8010, 58489 }, { 0x8011, 58512 }, { 0x8012, 58517 }, { 0x8013, 58522 }, { 0x8014, 58470 }, { 0x8015, 58466 }, { 0x8016, 59529 }, { 0x8017, 59555 }, { 0x8018, 59539 }, { 0x8019, 59532 }, { 0x801A, 59545 }, { 0x801B, 59550 }, { 0x801C, 58527 }, { 0x801D, 58530 }, { 0x801E, 58533 }, { 0x801F, 58538 }, { 0x8020, 58545 }, { 0x8021, 58548 }, { 0x8022, 58573 }, { 0x8023, 58578 }, { 0x8024, 58553 }, { 0x8025, 58583 }, { 0x8026, 58558 }, { 0x8027, 58563 }, { 0x8028, 58568 }, { 0x8029, 61180 }, { 0x802A, 61793 }, { 0x802B, 61183 }, { 0x802C, 61186 }, { 0x802D, 58588 }, { 0x802E, 58591 }, { 0x802F, 58611 }, { 0x8030, 58602 }, { 0x8031, 58596 }, { 0x8032, 61796 }, { 0x8033, 61191 }, { 0x8034, 61194 }, { 0x8035, 61197 }, { 0x8036, 61799 }, { 0x8037, 61802 }, { 0x8038, 59560 }, { 0x8039, 59600 }, { 0x803A, 59563 }, { 0x803B, 59588 }, { 0x803C, 59568 }, { 0x803D, 59575 }, { 0x803E, 61202 }, { 0x803F, 62374 }, { 0x8040, 58616 }, { 0x8041, 59605 }, { 0x8042, 61205 }, { 0x8043, 62377 }, { 0x8044, 59608 }, { 0x8045, 59611 }, { 0x8046, 61805 }, { 0x8047, 59616 }, { 0x8048, 61808 }, { 0x8049, 58619 }, { 0x804A, 58622 }, { 0x804B, 58627 }, { 0x804C, 58632 }, { 0x804D, 58638 }, { 0x804E, 58641 }, { 0x804F, 58647 }, { 0x8050, 58653 }, { 0x8051, 61811 }, { 0x8052, 61814 }, { 0x8053, 59619 }, { 0x8054, 61208 }, { 0x8055, 58658 }, { 0x8056, 59622 }, { 0x8057, 59625 }, { 0x8058, 59751 }, { 0x8059, 59769 }, { 0x805A, 59633 }, { 0x805B, 59639 }, { 0x805C, 59645 }, { 0x805D, 59653 }, { 0x805E, 59757 }, { 0x805F, 59719 }, { 0x8060, 59659 }, { 0x8061, 59665 }, { 0x8062, 59671 }, { 0x8063, 59725 }, { 0x8064, 59679 }, { 0x8065, 59685 }, { 0x8066, 59691 }, { 0x8067, 59731 }, { 0x8068, 59699 }, { 0x8069, 59737 }, { 0x806A, 59705 }, { 0x806B, 59763 }, { 0x806C, 59711 }, { 0x806D, 59745 }, { 0x806E, 59775 }, { 0x806F, 59778 }, { 0x8070, 61819 }, { 0x8071, 61822 }, { 0x8072, 58661 }, { 0x8073, 59781 }, { 0x8074, 59784 }, { 0x8075, 59787 }, { 0x8076, 61211 }, { 0x8077, 59792 }, { 0x8078, 59795 }, { 0x8079, 61214 }, { 0x807A, 58664 }, { 0x807B, 58671 }, { 0x807C, 58667 }, { 0x807D, 58676 }, { 0x807E, 59802 }, { 0x807F, 59805 }, { 0x8080, 61217 }, { 0x8081, 59810 }, { 0x8082, 61825 }, { 0x8083, 59813 }, { 0x8084, 59816 }, { 0x8085, 61220 }, { 0x8086, 61223 }, { 0x8087, 61227 }, { 0x8088, 61232 }, { 0x8089, 61235 }, { 0x808A, 58396 }, { 0x808B, 58407 }, { 0x808C, 58399 }, { 0x808D, 58680 }, { 0x808E, 58683 }, { 0x808F, 58702 }, { 0x8090, 58697 }, { 0x8091, 58707 }, { 0x8092, 58712 }, { 0x8093, 58692 }, { 0x8094, 61238 }, { 0x8095, 61241 }, { 0x8096, 58717 }, { 0x8097, 58720 }, { 0x8098, 58728 }, { 0x8099, 58733 }, { 0x809A, 58723 }, { 0x809B, 58743 }, { 0x809C, 58748 }, { 0x809D, 58739 }, { 0x809E, 61244 }, { 0x809F, 61828 }, { 0x80A0, 61247 }, { 0x80A1, 61250 }, { 0x80A2, 61253 }, { 0x80A3, 61258 }, { 0x80A4, 61265 }, { 0x80A5, 61274 }, { 0x80A6, 61315 }, { 0x80A7, 61338 }, { 0x80A8, 61344 }, { 0x80A9, 61279 }, { 0x80AA, 61284 }, { 0x80AB, 61320 }, { 0x80AC, 61351 }, { 0x80AD, 61356 }, { 0x80AE, 61326 }, { 0x80AF, 61290 }, { 0x80B0, 61331 }, { 0x80B1, 61295 }, { 0x80B2, 61300 }, { 0x80B3, 61305 }, { 0x80B4, 61310 }, { 0x80B5, 58753 }, { 0x80B6, 58756 }, { 0x80B7, 59819 }, { 0x80B8, 59827 }, { 0x80B9, 59836 }, { 0x80BA, 59843 }, { 0x80BB, 59950 }, { 0x80BC, 59855 }, { 0x80BD, 59958 }, { 0x80BE, 60106 }, { 0x80BF, 59963 }, { 0x80C0, 59968 }, { 0x80C1, 59975 }, { 0x80C2, 59980 }, { 0x80C3, 59860 }, { 0x80C4, 59865 }, { 0x80C5, 59987 }, { 0x80C6, 59994 }, { 0x80C7, 59870 }, { 0x80C8, 59875 }, { 0x80C9, 59882 }, { 0x80CA, 59887 }, { 0x80CB, 60113 }, { 0x80CC, 59999 }, { 0x80CD, 59895 }, { 0x80CE, 60004 }, { 0x80CF, 60009 }, { 0x80D0, 60119 }, { 0x80D1, 59900 }, { 0x80D2, 60016 }, { 0x80D3, 60021 }, { 0x80D4, 59909 }, { 0x80D5, 60126 }, { 0x80D6, 60028 }, { 0x80D7, 60034 }, { 0x80D8, 60043 }, { 0x80D9, 60141 }, { 0x80DA, 60048 }, { 0x80DB, 60053 }, { 0x80DC, 60060 }, { 0x80DD, 59916 }, { 0x80DE, 59921 }, { 0x80DF, 59928 }, { 0x80E0, 60067 }, { 0x80E1, 60072 }, { 0x80E2, 59933 }, { 0x80E3, 60079 }, { 0x80E4, 60084 }, { 0x80E5, 60089 }, { 0x80E6, 60094 }, { 0x80E7, 60131 }, { 0x80E8, 60101 }, { 0x80E9, 60136 }, { 0x80EA, 59850 }, { 0x80EB, 59938 }, { 0x80EC, 59943 }, { 0x80ED, 59822 }, { 0x80EE, 61362 }, { 0x80EF, 61365 }, { 0x80F0, 60146 }, { 0x80F1, 60149 }, { 0x80F2, 60157 }, { 0x80F3, 60160 }, { 0x80F4, 61831 }, { 0x80F5, 60169 }, { 0x80F6, 60172 }, { 0x80F7, 61370 }, { 0x80F8, 61378 }, { 0x80F9, 61373 }, { 0x80FA, 61382 }, { 0x80FB, 60175 }, { 0x80FC, 61387 }, { 0x80FD, 62380 }, { 0x80FE, 62539 }, { 0x80FF, 62542 }, { 0x8100, 58760 }, { 0x8101, 58763 }, { 0x8102, 58768 }, { 0x8103, 58773 }, { 0x8104, 60178 }, { 0x8105, 60181 }, { 0x8106, 60186 }, { 0x8107, 61834 }, { 0x8108, 61390 }, { 0x8109, 61393 }, { 0x810A, 61397 }, { 0x810B, 61400 }, { 0x810C, 61424 }, { 0x810D, 61419 }, { 0x810E, 61407 }, { 0x810F, 61414 }, { 0x8110, 61837 }, { 0x8111, 61430 }, { 0x8112, 61447 }, { 0x8113, 61437 }, { 0x8114, 61442 }, { 0x8115, 61433 }, { 0x8116, 58778 }, { 0x8117, 58781 }, { 0x8118, 60191 }, { 0x8119, 60198 }, { 0x811A, 60203 }, { 0x811B, 60211 }, { 0x811C, 60216 }, { 0x811D, 60194 }, { 0x811E, 60223 }, { 0x811F, 60232 }, { 0x8120, 60239 }, { 0x8121, 60226 }, { 0x8122, 60244 }, { 0x8123, 60247 }, { 0x8124, 60250 }, { 0x8125, 60255 }, { 0x8126, 61452 }, { 0x8127, 61840 }, { 0x8128, 62383 }, { 0x8129, 58786 }, { 0x812A, 58793 }, { 0x812B, 58789 }, { 0x812C, 60258 }, { 0x812D, 58797 }, { 0x812E, 58805 }, { 0x812F, 58835 }, { 0x8130, 58810 }, { 0x8131, 58840 }, { 0x8132, 58815 }, { 0x8133, 58820 }, { 0x8134, 58825 }, { 0x8135, 58830 }, { 0x8136, 58800 }, { 0x8137, 58845 }, { 0x8138, 61455 }, { 0x8139, 61458 }, { 0x813A, 61468 }, { 0x813B, 61478 }, { 0x813C, 61473 }, { 0x813D, 61463 }, { 0x813E, 61483 }, { 0x813F, 58412 }, { 0x8140, 58415 }, { 0x8141, 58848 }, { 0x8142, 61486 }, { 0x8143, 61489 }, { 0x8144, 61495 }, { 0x8145, 58851 }, { 0x8146, 60261 }, { 0x8147, 60268 }, { 0x8148, 60264 }, { 0x8149, 60276 }, { 0x814A, 60272 }, { 0x814B, 58854 }, { 0x814C, 58857 }, { 0x814D, 60287 }, { 0x814E, 58863 }, { 0x814F, 58866 }, { 0x8150, 58875 }, { 0x8151, 58880 }, { 0x8152, 58871 }, { 0x8153, 61501 }, { 0x8154, 58885 }, { 0x8155, 58888 }, { 0x8156, 60290 }, { 0x8157, 58891 }, { 0x8158, 58894 }, { 0x8159, 58904 }, { 0x815A, 58909 }, { 0x815B, 59113 }, { 0x815C, 59029 }, { 0x815D, 59165 }, { 0x815E, 59034 }, { 0x815F, 58916 }, { 0x8160, 59170 }, { 0x8161, 59118 }, { 0x8162, 58921 }, { 0x8163, 59039 }, { 0x8164, 59123 }, { 0x8165, 59044 }, { 0x8166, 59049 }, { 0x8167, 58926 }, { 0x8168, 59129 }, { 0x8169, 59134 }, { 0x816A, 59141 }, { 0x816B, 58931 }, { 0x816C, 59148 }, { 0x816D, 59058 }, { 0x816E, 58936 }, { 0x816F, 59063 }, { 0x8170, 58941 }, { 0x8171, 59068 }, { 0x8172, 58946 }, { 0x8173, 58951 }, { 0x8174, 58956 }, { 0x8175, 58961 }, { 0x8176, 58968 }, { 0x8177, 58975 }, { 0x8178, 58982 }, { 0x8179, 58987 }, { 0x817A, 58994 }, { 0x817B, 59073 }, { 0x817C, 58999 }, { 0x817D, 59004 }, { 0x817E, 59009 }, { 0x817F, 59078 }, { 0x8180, 59083 }, { 0x8181, 59088 }, { 0x8182, 59153 }, { 0x8183, 59093 }, { 0x8184, 59098 }, { 0x8185, 59175 }, { 0x8186, 59103 }, { 0x8187, 58899 }, { 0x8188, 59014 }, { 0x8189, 59019 }, { 0x818A, 59158 }, { 0x818B, 59108 }, { 0x818C, 59024 }, { 0x818D, 60293 }, { 0x818E, 60296 }, { 0x818F, 60301 }, { 0x8190, 61504 }, { 0x8191, 61507 }, { 0x8192, 61510 }, { 0x8193, 61513 }, { 0x8194, 61516 }, { 0x8195, 60304 }, { 0x8196, 60307 }, { 0x8197, 60313 }, { 0x8198, 60316 }, { 0x8199, 60321 }, { 0x819A, 61521 }, { 0x819B, 61524 }, { 0x819C, 62386 }, { 0x819D, 62401 }, { 0x819E, 62389 }, { 0x819F, 61843 }, { 0x81A0, 59180 }, { 0x81A1, 59193 }, { 0x81A2, 59183 }, { 0x81A3, 59188 }, { 0x81A4, 60326 }, { 0x81A5, 60329 }, { 0x81A6, 61846 }, { 0x81A7, 61527 }, { 0x81A8, 62411 }, { 0x81A9, 62414 }, { 0x81AA, 59198 }, { 0x81AB, 59201 }, { 0x81AC, 60332 }, { 0x81AD, 60335 }, { 0x81AE, 60338 }, { 0x81AF, 60343 }, { 0x81B0, 60346 }, { 0x81B1, 60349 }, { 0x81B2, 60353 }, { 0x81B3, 60356 }, { 0x81B4, 60359 }, { 0x81B5, 62419 }, { 0x81B6, 62422 }, { 0x81B7, 59213 }, { 0x81B8, 61849 }, { 0x81B9, 61852 }, { 0x81BA, 61857 }, { 0x81BB, 61866 }, { 0x81BC, 61873 }, { 0x81BD, 61901 }, { 0x81BE, 61906 }, { 0x81BF, 62007 }, { 0x81C0, 62014 }, { 0x81C1, 61911 }, { 0x81C2, 62019 }, { 0x81C3, 61916 }, { 0x81C4, 61921 }, { 0x81C5, 62024 }, { 0x81C6, 62029 }, { 0x81C7, 62034 }, { 0x81C8, 61926 }, { 0x81C9, 62041 }, { 0x81CA, 61931 }, { 0x81CB, 62046 }, { 0x81CC, 61938 }, { 0x81CD, 61943 }, { 0x81CE, 61950 }, { 0x81CF, 61957 }, { 0x81D0, 62052 }, { 0x81D1, 62057 }, { 0x81D2, 62062 }, { 0x81D3, 62067 }, { 0x81D4, 62130 }, { 0x81D5, 62103 }, { 0x81D6, 61962 }, { 0x81D7, 62076 }, { 0x81D8, 61967 }, { 0x81D9, 61972 }, { 0x81DA, 62108 }, { 0x81DB, 61979 }, { 0x81DC, 62081 }, { 0x81DD, 62135 }, { 0x81DE, 62144 }, { 0x81DF, 62113 }, { 0x81E0, 62118 }, { 0x81E1, 62088 }, { 0x81E2, 62093 }, { 0x81E3, 62125 }, { 0x81E4, 61984 }, { 0x81E5, 61880 }, { 0x81E6, 61885 }, { 0x81E7, 61892 }, { 0x81E8, 61995 }, { 0x81E9, 62002 }, { 0x81EA, 62098 }, { 0x81EB, 62152 }, { 0x81EC, 62156 }, { 0x81ED, 62171 }, { 0x81EE, 62176 }, { 0x81EF, 62159 }, { 0x81F0, 62163 }, { 0x81F1, 62425 }, { 0x81F2, 60364 }, { 0x81F3, 60367 }, { 0x81F4, 60372 }, { 0x81F5, 60375 }, { 0x81F6, 60380 }, { 0x81F7, 59216 }, { 0x81F8, 60387 }, { 0x81F9, 62428 }, { 0x81FA, 61530 }, { 0x81FB, 59219 }, { 0x81FC, 59222 }, { 0x81FD, 60390 }, { 0x81FE, 60397 }, { 0x81FF, 60450 }, { 0x8200, 60455 }, { 0x8201, 60460 }, { 0x8202, 60466 }, { 0x8203, 60402 }, { 0x8204, 60409 }, { 0x8205, 60472 }, { 0x8206, 60477 }, { 0x8207, 60482 }, { 0x8208, 60414 }, { 0x8209, 60419 }, { 0x820A, 60501 }, { 0x820B, 60426 }, { 0x820C, 60433 }, { 0x820D, 60438 }, { 0x820E, 60443 }, { 0x820F, 60489 }, { 0x8210, 60496 }, { 0x8211, 60393 }, { 0x8212, 60514 }, { 0x8213, 60519 }, { 0x8214, 60510 }, { 0x8215, 60506 }, { 0x8216, 60524 }, { 0x8217, 62183 }, { 0x8218, 62186 }, { 0x8219, 62195 }, { 0x821A, 62191 }, { 0x821B, 60527 }, { 0x821C, 60530 }, { 0x821D, 60533 }, { 0x821E, 60536 }, { 0x821F, 60541 }, { 0x8220, 59227 }, { 0x8221, 59234 }, { 0x8222, 59230 }, { 0x8223, 60549 }, { 0x8224, 60552 }, { 0x8225, 60555 }, { 0x8226, 61533 }, { 0x8227, 62200 }, { 0x8228, 59239 }, { 0x8229, 60558 }, { 0x822A, 59242 }, { 0x822B, 60561 }, { 0x822C, 59245 }, { 0x822D, 59248 }, { 0x822E, 60564 }, { 0x822F, 60567 }, { 0x8230, 62431 }, { 0x8231, 62434 }, { 0x8232, 61536 }, { 0x8233, 61553 }, { 0x8234, 61563 }, { 0x8235, 61558 }, { 0x8236, 61539 }, { 0x8237, 61544 }, { 0x8238, 61568 }, { 0x8239, 62203 }, { 0x823A, 62210 }, { 0x823B, 62215 }, { 0x823C, 62222 }, { 0x823D, 62206 }, { 0x823E, 59253 }, { 0x823F, 60571 }, { 0x8240, 61573 }, { 0x8241, 61582 }, { 0x8242, 61576 }, { 0x8243, 61586 }, { 0x8244, 62227 }, { 0x8245, 60577 }, { 0x8246, 60574 }, { 0x8247, 61591 }, { 0x8248, 59256 }, { 0x8249, 59259 }, { 0x824A, 59264 }, { 0x824B, 59269 }, { 0x824C, 59273 }, { 0x824D, 59276 }, { 0x824E, 60581 }, { 0x824F, 60584 }, { 0x8250, 60595 }, { 0x8251, 60587 }, { 0x8252, 62437 }, { 0x8253, 62440 }, { 0x8254, 62465 }, { 0x8255, 62470 }, { 0x8256, 62477 }, { 0x8257, 62445 }, { 0x8258, 62453 }, { 0x8259, 62482 }, { 0x825A, 62487 }, { 0x825B, 62492 }, { 0x825C, 62500 }, { 0x825D, 62507 }, { 0x825E, 62458 }, { 0x825F, 62516 }, { 0x8260, 62230 }, { 0x8261, 59281 }, { 0x8262, 61594 }, { 0x8263, 60601 }, { 0x8264, 60613 }, { 0x8265, 60642 }, { 0x8266, 60619 }, { 0x8267, 60625 }, { 0x8268, 60636 }, { 0x8269, 60609 }, { 0x826A, 60604 }, { 0x826B, 60648 }, { 0x826C, 60653 }, { 0x826D, 62233 }, { 0x826E, 62291 }, { 0x826F, 62236 }, { 0x8270, 62260 }, { 0x8271, 62266 }, { 0x8272, 62272 }, { 0x8273, 62279 }, { 0x8274, 62242 }, { 0x8275, 62248 }, { 0x8276, 62285 }, { 0x8277, 62254 }, { 0x8278, 62297 }, { 0x8279, 62303 }, { 0x827A, 59284 }, { 0x827B, 60661 }, { 0x827C, 60664 }, { 0x827D, 60667 }, { 0x827E, 62310 }, { 0x827F, 59287 }, { 0x8280, 59290 }, { 0x8281, 59310 }, { 0x8282, 59315 }, { 0x8283, 59320 }, { 0x8284, 59295 }, { 0x8285, 59300 }, { 0x8286, 59325 }, { 0x8287, 59305 }, { 0x8288, 59330 }, { 0x8289, 59335 }, { 0x828A, 62313 }, { 0x828B, 62326 }, { 0x828C, 62316 }, { 0x828D, 62321 }, { 0x828E, 62331 }, { 0x828F, 59340 }, { 0x8290, 60670 }, { 0x8291, 59343 }, { 0x8292, 59346 }, { 0x8293, 59349 }, { 0x8294, 60770 }, { 0x8295, 60673 }, { 0x8296, 60685 }, { 0x8297, 60690 }, { 0x8298, 60725 }, { 0x8299, 60695 }, { 0x829A, 60730 }, { 0x829B, 60735 }, { 0x829C, 60740 }, { 0x829D, 60700 }, { 0x829E, 60745 }, { 0x829F, 60750 }, { 0x82A0, 60765 }, { 0x82A1, 60755 }, { 0x82A2, 60705 }, { 0x82A3, 60710 }, { 0x82A4, 60715 }, { 0x82A5, 60720 }, { 0x82A6, 60760 }, { 0x82A7, 60680 }, { 0x82A8, 60676 }, { 0x82A9, 60774 }, { 0x82AA, 60777 }, { 0x82AB, 62521 }, { 0x82AC, 60783 }, { 0x82AD, 60786 }, { 0x82AE, 61597 }, { 0x82AF, 61600 }, { 0x82B0, 61622 }, { 0x82B1, 61632 }, { 0x82B2, 61617 }, { 0x82B3, 61637 }, { 0x82B4, 61627 }, { 0x82B5, 61605 }, { 0x82B6, 61610 }, { 0x82B7, 61642 }, { 0x82B8, 62336 }, { 0x82B9, 62339 }, { 0x82BA, 60789 }, { 0x82BB, 60792 }, { 0x82BC, 60796 }, { 0x82BD, 60807 }, { 0x82BE, 62342 }, { 0x82BF, 61645 }, { 0x82C0, 62345 }, { 0x82C1, 62524 }, { 0x82C2, 62547 }, { 0x82C3, 61648 }, { 0x82C4, 61651 }, { 0x82C5, 61656 }, { 0x82C6, 61661 }, { 0x82C7, 61664 }, { 0x82C8, 61669 }, { 0x82C9, 61710 }, { 0x82CA, 61674 }, { 0x82CB, 61679 }, { 0x82CC, 61684 }, { 0x82CD, 61689 }, { 0x82CE, 61715 }, { 0x82CF, 61695 }, { 0x82D0, 61700 }, { 0x82D1, 61705 }, { 0x82D2, 62527 }, { 0x82D3, 61720 }, { 0x82D4, 61731 }, { 0x82D5, 61723 }, { 0x82D6, 62348 }, { 0x82D7, 60818 }, { 0x82D8, 60821 }, { 0x82D9, 61735 }, { 0x82DA, 62530 }, { 0x82DB, 59352 }, { 0x82DC, 59355 }, { 0x82DD, 60827 }, { 0x82DE, 61738 }, { 0x82DF, 61741 }, { 0x82E0, 61747 }, { 0x82E1, 62351 }, { 0x82E2, 59359 }, { 0x82E3, 59362 }, { 0x82E4, 60830 }, { 0x82E5, 61750 }, { 0x82E6, 62354 }, { 0x82E7, 60833 }, { 0x82E8, 62533 }, { 0x82E9, 60836 }, { 0x82EA, 61753 }, { 0x82EB, 59367 }, { 0x82EC, 59384 }, { 0x82ED, 59374 }, { 0x82EE, 59379 }, { 0x82EF, 59370 }, { 0x82F0, 60839 }, { 0x82F1, 60842 }, { 0x82F2, 60853 }, { 0x82F3, 60857 }, { 0x82F4, 60860 }, { 0x82F5, 60870 }, { 0x82F6, 60875 }, { 0x82F7, 60880 }, { 0x82F8, 60885 }, { 0x82F9, 60865 }, { 0x82FA, 61756 }, { 0x82FB, 60890 }, { 0x82FC, 59388 }, { 0x82FD, 59391 }, { 0x82FE, 59395 }, { 0x82FF, 59398 }, { 0x8300, 60893 }, { 0x8301, 60896 }, { 0x8302, 60915 }, { 0x8303, 60899 }, { 0x8304, 60904 }, { 0x8305, 59402 }, { 0x8306, 61759 }, { 0x8307, 60920 }, { 0x8308, 60923 }, { 0x8309, 60926 }, { 0x830A, 60929 }, { 0x830B, 58419 }, { 0x830C, 58427 }, { 0x830D, 58422 }, { 0x830E, 58441 }, { 0x830F, 58452 }, { 0x8310, 58431 }, { 0x8311, 59405 }, { 0x8312, 59408 }, { 0x8313, 59411 }, { 0x8314, 59447 }, { 0x8315, 59442 }, { 0x8316, 59437 }, { 0x8317, 59418 }, { 0x8318, 59427 }, { 0x8319, 59414 }, { 0x831A, 59451 }, { 0x831B, 59455 }, { 0x831C, 61762 }, { 0x831D, 59461 }, { 0x831E, 59481 }, { 0x831F, 59469 }, { 0x8320, 59476 }, { 0x8321, 59464 }, { 0x8322, 62357 }, { 0x8323, 61765 }, { 0x8324, 61773 }, { 0x8325, 61768 }, { 0x8326, 59486 }, { 0x8327, 59489 }, { 0x8328, 59493 }, { 0x8329, 59500 }, { 0x832A, 59496 }, { 0x832B, 60937 }, { 0x832C, 60940 }, { 0x832D, 60947 }, { 0x832E, 60954 }, { 0x832F, 60959 }, { 0x8330, 60983 }, { 0x8331, 60964 }, { 0x8332, 60976 }, { 0x8333, 60969 }, { 0x8334, 60988 }, { 0x8335, 60991 }, { 0x8336, 61778 }, { 0x8337, 60994 }, { 0x8338, 60997 }, { 0x8339, 61110 }, { 0x833A, 61049 }, { 0x833B, 61054 }, { 0x833C, 61009 }, { 0x833D, 61059 }, { 0x833E, 61094 }, { 0x833F, 61064 }, { 0x8340, 61014 }, { 0x8341, 61019 }, { 0x8342, 61069 }, { 0x8343, 61024 }, { 0x8344, 61074 }, { 0x8345, 61029 }, { 0x8346, 61079 }, { 0x8347, 61084 }, { 0x8348, 61034 }, { 0x8349, 61089 }, { 0x834A, 61100 }, { 0x834B, 61039 }, { 0x834C, 61002 }, { 0x834D, 61044 }, { 0x834E, 61105 }, { 0x834F, 62360 }, { 0x8350, 62363 }, { 0x8351, 61115 }, { 0x8352, 61118 }, { 0x8353, 61123 }, { 0x8354, 61128 }, { 0x8355, 61133 }, { 0x8356, 61784 }, { 0x8357, 61781 }, { 0x8358, 62536 }, { 0x8359, 62368 }, { 0x835A, 61138 }, { 0x835B, 61141 }, { 0x835C, 61146 }, { 0x835D, 59505 }, { 0x835E, 59508 }, { 0x835F, 59512 }, { 0x8360, 61149 }, { 0x8361, 61787 }, { 0x8362, 61152 }, { 0x8363, 59518 }, { 0x8364, 59521 }, { 0x8365, 61155 }, { 0x8366, 61158 }, { 0x8367, 61161 }, { 0x8368, 61166 }, { 0x8369, 61790 }, { 0x836A, 59526 }, { 0x836B, 61169 }, { 0x836C, 61172 }, { 0x836D, 62371 }, { 0x836E, 61177 }, { 0x8400, 62658 }, { 0x8401, 63027 }, { 0x8402, 62787 }, { 0x8403, 62723 }, { 0x8404, 62625 }, { 0x8405, 62968 }, { 0x8406, 62929 }, { 0x8407, 62875 }, { 0x8408, 63055 }, { 0x8409, 62815 }, { 0x840A, 62751 }, { 0x840B, 62636 }, { 0x840C, 62973 }, { 0x840D, 62934 }, { 0x840E, 62880 }, { 0x840F, 62782 }, { 0x8410, 62718 }, { 0x8411, 62620 }, { 0x8412, 62963 }, { 0x8413, 62924 }, { 0x8414, 62870 }, { 0x8415, 62579 }, { 0x8416, 62684 }, { 0x8417, 63060 }, { 0x8418, 62820 }, { 0x8419, 62756 }, { 0x841A, 62641 }, { 0x841B, 62978 }, { 0x841C, 62939 }, { 0x841D, 62885 }, { 0x841E, 62584 }, { 0x841F, 62689 }, { 0x8420, 63065 }, { 0x8421, 62825 }, { 0x8422, 62761 }, { 0x8423, 62694 }, { 0x8424, 63070 }, { 0x8425, 63075 }, { 0x8426, 62830 }, { 0x8427, 62766 }, { 0x8428, 62646 }, { 0x8429, 62983 }, { 0x842A, 62944 }, { 0x842B, 62890 }, { 0x842C, 62589 }, { 0x842D, 62699 }, { 0x842E, 63082 }, { 0x842F, 63087 }, { 0x8430, 62835 }, { 0x8431, 62771 }, { 0x8432, 63019 }, { 0x8433, 63011 }, { 0x8434, 62569 }, { 0x8435, 62674 }, { 0x8436, 63043 }, { 0x8437, 63048 }, { 0x8438, 62810 }, { 0x8439, 62746 }, { 0x843A, 63094 }, { 0x843B, 63101 }, { 0x843C, 62840 }, { 0x843D, 62863 }, { 0x843E, 62847 }, { 0x843F, 62855 }, { 0x8440, 62651 }, { 0x8441, 63004 }, { 0x8442, 62988 }, { 0x8443, 62996 }, { 0x8444, 62949 }, { 0x8445, 62956 }, { 0x8446, 62895 }, { 0x8447, 62910 }, { 0x8448, 62917 }, { 0x8449, 62902 }, { 0x844A, 62663 }, { 0x844B, 63032 }, { 0x844C, 62792 }, { 0x844D, 62728 }, { 0x844E, 62630 }, { 0x844F, 62564 }, { 0x8450, 62669 }, { 0x8451, 63038 }, { 0x8452, 62798 }, { 0x8453, 62803 }, { 0x8454, 62734 }, { 0x8455, 62739 }, { 0x8456, 63112 }, { 0x8457, 63108 }, { 0x8458, 62574 }, { 0x8459, 62679 }, { 0x845A, 62594 }, { 0x845B, 62704 }, { 0x845C, 62776 }, { 0x845D, 62600 }, { 0x845E, 62710 }, { 0x845F, 62608 }, { 0x8460, 62614 }, { 0x8461, 62550 }, { 0x8462, 62557 }, { 0x8470, 63116 }, { 0x8471, 63133 }, { 0x8472, 63123 }, { 0x8473, 63128 }, { 0x9000, 56261 }, { 0x9001, 56295 }, { 0x9002, 57281 }, { 0x9003, 56256 }, { 0x9004, 56251 }, { 0x9005, 56625 }, { 0x9006, 56620 }, { 0x9007, 56920 }, { 0x9008, 57186 }, { 0x9009, 57267 }, { 0x900A, 57194 }, { 0x900B, 57198 }, { 0x900C, 56937 }, { 0x900D, 56209 }, { 0x900E, 56118 }, { 0x900F, 56607 }, { 0x9010, 57136 }, { 0x9011, 57219 }, { 0x9012, 57228 }, { 0x9013, 56812 }, { 0x9014, 56282 }, { 0x9015, 56566 }, { 0x9016, 56484 }, { 0x9017, 56590 }, { 0x9018, 56847 }, { 0x9019, 56286 }, { 0x901A, 56132 }, { 0x901B, 56743 }, { 0x901C, 57158 }, { 0x901D, 57035 }, { 0x901E, 57022 }, { 0x901F, 56791 }, { 0x9020, 56575 }, { 0x9021, 56824 }, { 0x9022, 56838 }, { 0x9023, 56843 }, { 0x9024, 56512 }, { 0x9025, 56265 }, { 0x9026, 56585 }, { 0x9027, 56820 }, { 0x9028, 57295 }, { 0x9029, 56594 }, { 0x902A, 56807 }, { 0x902B, 56801 }, { 0x902C, 57172 }, { 0x902D, 56273 }, { 0x902E, 56242 }, { 0x902F, 56114 }, { 0x9030, 56147 }, { 0x9031, 56816 }, { 0x9032, 57163 }, { 0x9033, 56203 }, { 0x9034, 56400 }, { 0x9035, 57128 }, { 0x9036, 57099 }, { 0x9037, 56507 }, { 0x9038, 57026 }, { 0x9039, 57177 }, { 0x903A, 56924 }, { 0x903B, 56856 }, { 0x903C, 56783 }, { 0x903D, 57262 }, { 0x903E, 57276 }, { 0x903F, 56721 }, { 0x9040, 56137 }, { 0x9041, 56775 }, { 0x9042, 56928 }, { 0x9043, 57094 }, { 0x9044, 57303 }, { 0x9045, 57299 }, { 0x9046, 56127 }, { 0x9047, 56561 }, { 0x9048, 56246 }, { 0x9049, 56779 }, { 0x904A, 56933 }, { 0x904B, 57335 }, { 0x904C, 57327 }, { 0x904D, 57030 }, { 0x904E, 57140 }, { 0x904F, 56725 }, { 0x9050, 56663 }, { 0x9051, 57223 }, { 0x9052, 57213 }, { 0x9053, 56829 }, { 0x9054, 57331 }, { 0x9055, 56710 }, { 0x9056, 56702 }, { 0x9057, 56556 }, { 0x9058, 56615 }, { 0x9059, 56580 }, { 0x905A, 57181 }, { 0x905B, 56571 }, { 0x905C, 57203 }, { 0x905D, 56771 }, { 0x905E, 57271 }, { 0x905F, 57257 }, { 0x9060, 56337 }, { 0x9061, 56767 }, { 0x9062, 57323 }, { 0x9063, 57089 }, { 0x9064, 57233 }, { 0x9065, 56796 }, { 0x9066, 56269 }, { 0x9067, 56851 }, { 0x9068, 56912 }, { 0x9069, 56598 }, { 0x906A, 56290 }, { 0x906B, 57347 }, { 0x906C, 57339 }, { 0x906D, 57315 }, { 0x906E, 57351 }, { 0x906F, 57355 }, { 0x9070, 57319 }, { 0x9071, 57343 }, { 0x9072, 57311 }, { 0x9073, 57307 }, { 0x9074, 56342 }, { 0x9075, 57167 }, { 0x9076, 57285 }, { 0x9077, 57290 }, { 0x9078, 56277 }, { 0x9079, 56141 }, { 0x907A, 57132 }, { 0x907B, 57109 }, { 0x907C, 56156 }, { 0x907D, 56151 }, { 0x907E, 56787 }, { 0x907F, 56516 }, { 0x9080, 56237 }, { 0x9081, 56762 }, { 0x9082, 56757 }, { 0x9083, 56752 }, { 0x9084, 56833 }, { 0x9085, 56123 }, { 0x9086, 56233 }, { 0x9087, 56611 }, { 0x9088, 57085 }, { 0x9089, 56748 }, { 0x908A, 56532 }, { 0x908B, 56526 }, { 0x908C, 56538 }, { 0x908D, 56550 }, { 0x908E, 56544 }, { 0x908F, 56472 }, { 0x9090, 56495 }, { 0x9091, 56489 }, { 0x9092, 56883 }, { 0x9093, 56900 }, { 0x9094, 56893 }, { 0x9095, 56887 }, { 0x9096, 57190 }, { 0x9097, 56214 }, { 0x9098, 57249 }, { 0x9099, 56706 }, { 0x909A, 56171 }, { 0x909B, 56193 }, { 0x909C, 56161 }, { 0x909D, 56188 }, { 0x909E, 56166 }, { 0x909F, 56183 }, { 0x90A0, 56198 }, { 0x90A1, 56177 }, { 0x90A2, 56961 }, { 0x90A3, 56941 }, { 0x90A4, 56992 }, { 0x90A5, 56948 }, { 0x90A6, 56967 }, { 0x90A7, 57011 }, { 0x90A8, 56998 }, { 0x90A9, 57004 }, { 0x90AA, 56973 }, { 0x90AB, 56979 }, { 0x90AC, 56501 }, { 0x90AD, 57207 }, { 0x90AE, 57123 }, { 0x90AF, 57118 }, { 0x90B0, 57113 }, { 0x90B1, 56955 }, { 0x90B2, 57016 }, { 0x90B3, 56985 }, { 0x90B4, 57237 }, { 0x90B5, 57243 }, { 0x90B6, 56714 }, { 0x90B7, 56916 }, { 0x90B8, 57253 }, { 0x90B9, 56405 }, { 0x90BA, 56438 }, { 0x90BB, 56450 }, { 0x90BC, 56361 }, { 0x90BD, 56412 }, { 0x90BE, 56393 }, { 0x90BF, 56418 }, { 0x90C0, 56444 }, { 0x90C1, 56431 }, { 0x90C2, 56424 }, { 0x90C3, 56372 }, { 0x90C4, 56379 }, { 0x90C5, 56347 }, { 0x90C6, 56386 }, { 0x90C7, 56367 }, { 0x90C8, 56218 }, { 0x90C9, 56223 }, { 0x90CA, 56228 }, { 0x90CB, 56354 }, { 0x90CC, 56456 }, { 0x90CD, 56658 }, { 0x90CE, 56327 }, { 0x90CF, 56332 }, { 0x90D0, 56299 }, { 0x90D1, 56320 }, { 0x90D2, 56306 }, { 0x90D3, 56313 }, { 0x90D4, 56630 }, { 0x90D5, 56651 }, { 0x90D6, 56637 }, { 0x90D7, 56644 }, { 0x90D8, 56462 }, { 0x90D9, 56467 }, { 0x90DA, 56861 }, { 0x90DB, 56867 }, { 0x90DC, 56873 }, { 0x90DD, 56878 }, { 0x90DE, 57062 }, { 0x90DF, 57067 }, { 0x90E0, 57073 }, { 0x90E1, 57079 }, { 0x90E2, 57039 }, { 0x90E3, 57044 }, { 0x90E4, 57050 }, { 0x90E5, 57056 }, { 0x90E6, 56907 }, { 0x90E7, 57104 }, { 0x90E8, 56603 }, { 0x90E9, 56687 }, { 0x90EA, 56697 }, { 0x90EB, 56672 }, { 0x90EC, 56667 }, { 0x90ED, 56677 }, { 0x90EE, 56692 }, { 0x90EF, 56682 }, { 0x90F0, 57152 }, { 0x90F1, 56737 }, { 0x90F2, 57146 }, { 0x90F3, 56731 }, { 0x90F4, 56521 }, { 0x90F5, 56478 }, { 0x9100, 41562 }, { 0x9101, 41524 }, { 0x9102, 41404 }, { 0x9103, 41695 }, { 0x9104, 41508 }, { 0x9105, 41470 }, { 0x9106, 41337 }, { 0x9107, 41454 }, { 0x9108, 41558 }, { 0x9109, 41249 }, { 0x910A, 41238 }, { 0x910B, 41459 }, { 0x910C, 41290 }, { 0x910D, 41776 }, { 0x910E, 41780 }, { 0x910F, 41784 }, { 0x9110, 41659 }, { 0x9111, 41662 }, { 0x9112, 41485 }, { 0x9113, 41646 }, { 0x9114, 41395 }, { 0x9115, 41643 }, { 0x9116, 41728 }, { 0x9117, 41861 }, { 0x9118, 42079 }, { 0x9119, 41999 }, { 0x911A, 41995 }, { 0x911B, 41788 }, { 0x911C, 42075 }, { 0x911D, 42086 }, { 0x911E, 41215 }, { 0x911F, 41219 }, { 0x9120, 41225 }, { 0x9121, 41195 }, { 0x9122, 41199 }, { 0x9123, 41203 }, { 0x9124, 41209 }, { 0x9125, 41300 }, { 0x9126, 41304 }, { 0x9129, 41719 }, { 0x912A, 41520 }, { 0x912B, 41516 }, { 0x912C, 41308 }, { 0x912D, 41312 }, { 0x912E, 41666 }, { 0x912F, 41670 }, { 0x9130, 41462 }, { 0x9131, 41466 }, { 0x9132, 41690 }, { 0x9133, 41685 }, { 0x9134, 41504 }, { 0x9135, 41245 }, { 0x9136, 41550 }, { 0x9137, 41554 }, { 0x9138, 42103 }, { 0x9139, 42107 }, { 0x913A, 41438 }, { 0x913B, 41481 }, { 0x913C, 41328 }, { 0x913D, 41681 }, { 0x913E, 41532 }, { 0x913F, 42039 }, { 0x9140, 42123 }, { 0x9141, 42115 }, { 0x9142, 41280 }, { 0x9143, 41231 }, { 0x9144, 41356 }, { 0x9145, 41496 }, { 0x9146, 41575 }, { 0x9147, 41570 }, { 0x9148, 41819 }, { 0x9149, 41799 }, { 0x914A, 41843 }, { 0x914B, 41837 }, { 0x914C, 41855 }, { 0x914D, 41849 }, { 0x914E, 41831 }, { 0x914F, 41825 }, { 0x9150, 41812 }, { 0x9151, 41805 }, { 0x9152, 41347 }, { 0x9153, 41342 }, { 0x9154, 42133 }, { 0x9155, 42127 }, { 0x9156, 42096 }, { 0x9157, 41371 }, { 0x9158, 41724 }, { 0x9159, 41352 }, { 0x915A, 41654 }, { 0x915B, 41649 }, { 0x915C, 41398 }, { 0x915D, 41477 }, { 0x915E, 41324 }, { 0x915F, 41677 }, { 0x9160, 41528 }, { 0x9161, 42035 }, { 0x9162, 42119 }, { 0x9163, 42111 }, { 0x9164, 41274 }, { 0x9165, 41896 }, { 0x9166, 41975 }, { 0x9167, 41958 }, { 0x9168, 41962 }, { 0x9169, 41966 }, { 0x916A, 41703 }, { 0x916B, 41707 }, { 0x916C, 41711 }, { 0x916D, 41970 }, { 0x916E, 41917 }, { 0x916F, 41921 }, { 0x9170, 41925 }, { 0x9171, 41929 }, { 0x9172, 41933 }, { 0x9173, 41383 }, { 0x9174, 41262 }, { 0x9175, 41379 }, { 0x9176, 41258 }, { 0x9177, 41387 }, { 0x9178, 41266 }, { 0x9179, 41391 }, { 0x917A, 41270 }, { 0x917B, 41908 }, { 0x917C, 41954 }, { 0x917D, 41937 }, { 0x917E, 41980 }, { 0x917F, 41946 }, { 0x9180, 41988 }, { 0x9181, 41984 }, { 0x9182, 41900 }, { 0x9183, 42043 }, { 0x9184, 42047 }, { 0x9185, 41878 }, { 0x9186, 41870 }, { 0x9187, 41887 }, { 0x9188, 41904 }, { 0x9189, 41874 }, { 0x918A, 41912 }, { 0x918B, 41941 }, { 0x918C, 42100 }, { 0x918D, 41580 }, { 0x918E, 41235 }, { 0x918F, 41451 }, { 0x9190, 41435 }, { 0x9191, 41408 }, { 0x9192, 41992 }, { 0x9193, 42083 }, { 0x9194, 41417 }, { 0x9195, 41411 }, { 0x9196, 41242 }, { 0x9197, 41360 }, { 0x9198, 41715 }, { 0x9199, 41367 }, { 0x919A, 41363 }, { 0x919B, 41732 }, { 0x919C, 41736 }, { 0x919D, 41740 }, { 0x919E, 41744 }, { 0x919F, 41748 }, { 0x91A0, 41752 }, { 0x91A1, 41756 }, { 0x91A2, 41760 }, { 0x91A3, 41764 }, { 0x91A4, 41768 }, { 0x91A5, 41772 }, { 0x91A6, 42090 }, { 0x91A7, 42093 }, { 0x91A8, 41253 }, { 0x91A9, 41512 }, { 0x91AA, 41882 }, { 0x91AB, 41865 }, { 0x91AC, 41950 }, { 0x91AD, 41891 }, { 0x91AE, 41447 }, { 0x91AF, 41442 }, { 0x91B0, 41332 }, { 0x91B1, 42003 }, { 0x91B2, 42007 }, { 0x91B3, 41375 }, { 0x91B4, 41293 }, { 0x91B5, 41296 }, { 0x91B6, 41536 }, { 0x91B7, 41422 }, { 0x91B8, 41489 }, { 0x91B9, 42059 }, { 0x91BA, 42055 }, { 0x91BB, 41539 }, { 0x91BC, 41546 }, { 0x91BD, 42071 }, { 0x91BE, 42067 }, { 0x91BF, 41320 }, { 0x91C0, 41316 }, { 0x91C1, 41425 }, { 0x91C2, 41430 }, { 0x91C3, 41492 }, { 0x91C4, 42051 }, { 0x91C5, 41542 }, { 0x91C6, 42063 }, { 0x91C7, 41583 }, { 0x91C8, 41598 }, { 0x91C9, 41590 }, { 0x91CA, 41605 }, { 0x91CB, 41612 }, { 0x91CC, 41619 }, { 0x91CD, 41627 }, { 0x91CE, 41635 }, { 0x91CF, 41401 }, { 0x91D0, 42011 }, { 0x91D1, 42016 }, { 0x91D2, 41566 }, { 0x91D3, 41474 }, { 0x91D4, 41674 }, { 0x91D5, 41501 }, { 0x91D6, 42028 }, { 0x91D7, 41700 }, { 0x91D8, 41792 }, { 0x91D9, 42021 }, { 0x91DA, 42024 }, { 0x91DB, 42031 }, { 0x91DC, 41795 }, { 0x91DD, 41286 }, { 0x9200, 11902 }, { 0x9201, 11906 }, { 0x9202, 11910 }, { 0x9203, 11914 }, { 0x9204, 11918 }, { 0x9205, 11922 }, { 0x9206, 11926 }, { 0x9207, 11930 }, { 0x9208, 11934 }, { 0x9209, 11938 }, { 0x920A, 11942 }, { 0x920B, 11946 }, { 0x920C, 11950 }, { 0x920D, 11954 }, { 0x920E, 11958 }, { 0x920F, 11962 }, { 0x9210, 11966 }, { 0x9211, 11970 }, { 0x9212, 11974 }, { 0x9213, 11978 }, { 0x9214, 11982 }, { 0x9215, 11986 }, { 0x9216, 11990 }, { 0x9217, 11994 }, { 0x9218, 11998 }, { 0x9219, 12002 }, { 0x921A, 12006 }, { 0x921B, 12010 }, { 0x921C, 12014 }, { 0x921D, 13374 }, { 0x921E, 13378 }, { 0x921F, 13382 }, { 0x9220, 13386 }, { 0x9221, 13390 }, { 0x9222, 13394 }, { 0x9223, 13398 }, { 0x9224, 13402 }, { 0x9225, 13406 }, { 0x9226, 13410 }, { 0x9227, 13414 }, { 0x9228, 13418 }, { 0x9229, 13422 }, { 0x922A, 13426 }, { 0x922B, 13430 }, { 0x922C, 13434 }, { 0x922D, 13438 }, { 0x922E, 13442 }, { 0x922F, 13446 }, { 0x9230, 13450 }, { 0x9231, 13454 }, { 0x9232, 13458 }, { 0x9233, 13462 }, { 0x9234, 13466 }, { 0x9235, 13470 }, { 0x9236, 13474 }, { 0x9237, 13478 }, { 0x9238, 13482 }, { 0x9239, 13486 }, { 0x923A, 13490 }, { 0x923B, 13494 }, { 0x923C, 13498 }, { 0x923D, 13502 }, { 0x923E, 13506 }, { 0x923F, 13510 }, { 0x9240, 13514 }, { 0x9241, 13518 }, { 0x9242, 57564 }, { 0x9243, 57572 }, { 0x9244, 57568 }, { 0x9245, 13031 }, { 0x9300, 54871 }, { 0x9301, 31216 }, { 0x9302, 31188 }, { 0x9303, 31204 }, { 0x9304, 31200 }, { 0x9305, 31185 }, { 0x9306, 66100 }, { 0x9307, 66067 }, { 0x9308, 66082 }, { 0x9309, 66128 }, { 0x930A, 66147 }, { 0x930B, 66272 }, { 0x930C, 66097 }, { 0x930D, 66263 }, { 0x930E, 66201 }, { 0x930F, 66299 }, { 0x9310, 66254 }, { 0x9311, 66296 }, { 0x9312, 66184 }, { 0x9313, 66281 }, { 0x9314, 66085 }, { 0x9315, 66134 }, { 0x9316, 66143 }, { 0x9317, 66172 }, { 0x9318, 66220 }, { 0x9319, 66125 }, { 0x931A, 66166 }, { 0x931B, 66266 }, { 0x931C, 66064 }, { 0x931D, 66052 }, { 0x931E, 66251 }, { 0x931F, 66217 }, { 0x9320, 66110 }, { 0x9321, 66103 }, { 0x9322, 66287 }, { 0x9323, 66060 }, { 0x9324, 66160 }, { 0x9325, 66116 }, { 0x9326, 66205 }, { 0x9327, 66151 }, { 0x9328, 66226 }, { 0x9329, 66193 }, { 0x932A, 66119 }, { 0x932B, 66178 }, { 0x932C, 66239 }, { 0x932D, 66055 }, { 0x932E, 66187 }, { 0x932F, 66074 }, { 0x9330, 66257 }, { 0x9331, 66088 }, { 0x9332, 66233 }, { 0x9333, 66275 }, { 0x9334, 66163 }, { 0x9335, 66122 }, { 0x9336, 66113 }, { 0x9337, 66196 }, { 0x9338, 66208 }, { 0x9339, 66157 }, { 0x933A, 66175 }, { 0x933B, 66091 }, { 0x933C, 66293 }, { 0x933D, 66106 }, { 0x933E, 66278 }, { 0x933F, 66229 }, { 0x9340, 66154 }, { 0x9341, 66284 }, { 0x9342, 66304 }, { 0x9343, 66071 }, { 0x9344, 66094 }, { 0x9345, 66169 }, { 0x9346, 66079 }, { 0x9347, 66214 }, { 0x9348, 66211 }, { 0x9349, 66137 }, { 0x934A, 66260 }, { 0x934B, 66242 }, { 0x934C, 66190 }, { 0x934D, 66181 }, { 0x934E, 66245 }, { 0x934F, 66131 }, { 0x9350, 66140 }, { 0x9351, 66269 }, { 0x9352, 66248 }, { 0x9353, 66047 }, { 0x9354, 66290 }, { 0x9355, 66236 }, { 0x9356, 66223 }, { 0x9360, 48474 }, { 0x9361, 48484 }, { 0x9362, 48514 }, { 0x9363, 48494 }, { 0x9364, 48489 }, { 0x9365, 48479 }, { 0x9366, 48509 }, { 0x9367, 48504 }, { 0x9368, 48499 }, { 0x9369, 48429 }, { 0x936A, 48439 }, { 0x936B, 48469 }, { 0x936C, 48449 }, { 0x936D, 48444 }, { 0x936E, 48434 }, { 0x936F, 48464 }, { 0x9370, 48459 }, { 0x9371, 48454 }, { 0x9400, 70678 }, { 0x9401, 70682 }, { 0x9402, 70686 }, { 0x9403, 70690 }, { 0x9404, 70694 }, { 0x9405, 70698 }, { 0x9406, 70702 }, { 0x9407, 70706 }, { 0x9408, 70710 }, { 0x9409, 70714 }, { 0x940A, 70718 }, { 0x940B, 70722 }, { 0x940C, 70726 }, { 0x940D, 70730 }, { 0x940E, 70734 }, { 0x940F, 70738 }, { 0x9410, 70742 }, { 0x9411, 70746 }, { 0x9412, 70750 }, { 0x9413, 70754 }, { 0x9414, 70758 }, { 0x9415, 70762 }, { 0x9416, 70766 }, { 0x9417, 70770 }, { 0x9418, 70774 }, { 0x9419, 70778 }, { 0x941A, 69654 }, { 0x941B, 69658 }, { 0x941C, 69662 }, { 0x941D, 69666 }, { 0x941E, 69670 }, { 0x941F, 69674 }, { 0x9420, 69678 }, { 0x9421, 69682 }, { 0x9422, 69686 }, { 0x9423, 69690 }, { 0x9424, 69694 }, { 0x9425, 69698 }, { 0x9426, 69702 }, { 0x9427, 69706 }, { 0x9428, 69710 }, { 0x9429, 69714 }, { 0x942A, 69718 }, { 0x942B, 69722 }, { 0x942C, 69726 }, { 0x942D, 69730 }, { 0x942E, 69734 }, { 0x942F, 69738 }, { 0x9430, 69742 }, { 0x9431, 69746 }, { 0x9432, 69750 }, { 0x9433, 69754 }, { 0x9434, 71437 }, { 0x9435, 71441 }, { 0x9436, 71445 }, { 0x9437, 71449 }, { 0x9438, 71453 }, { 0x9439, 71457 }, { 0x943A, 71461 }, { 0x943B, 71465 }, { 0x943C, 71469 }, { 0x943D, 71473 }, { 0x943E, 71477 }, { 0x943F, 71481 }, { 0x9440, 71485 }, { 0x9441, 71489 }, { 0x9442, 71493 }, { 0x9443, 71497 }, { 0x9444, 71501 }, { 0x9445, 71505 }, { 0x9446, 71509 }, { 0x9447, 71513 }, { 0x9448, 71517 }, { 0x9449, 71521 }, { 0x944A, 71525 }, { 0x944B, 71529 }, { 0x944C, 71533 }, { 0x944D, 71537 }, { 0x944E, 71222 }, { 0x944F, 71226 }, { 0x9450, 71230 }, { 0x9451, 71234 }, { 0x9452, 71238 }, { 0x9453, 71242 }, { 0x9454, 71246 }, { 0x9456, 71250 }, { 0x9457, 71254 }, { 0x9458, 71258 }, { 0x9459, 71262 }, { 0x945A, 71266 }, { 0x945B, 71270 }, { 0x945C, 71274 }, { 0x945D, 71278 }, { 0x945E, 71282 }, { 0x945F, 71286 }, { 0x9460, 71290 }, { 0x9461, 71294 }, { 0x9462, 71298 }, { 0x9463, 71302 }, { 0x9464, 71306 }, { 0x9465, 71310 }, { 0x9466, 71314 }, { 0x9467, 71318 }, { 0x9468, 70152 }, { 0x9469, 70157 }, { 0x946A, 70162 }, { 0x946B, 70167 }, { 0x946C, 70172 }, { 0x946D, 70177 }, { 0x946E, 70182 }, { 0x946F, 70187 }, { 0x9470, 70192 }, { 0x9471, 70197 }, { 0x9472, 70202 }, { 0x9473, 70207 }, { 0x9474, 70212 }, { 0x9475, 70217 }, { 0x9476, 70222 }, { 0x9477, 70227 }, { 0x9478, 70232 }, { 0x9479, 70237 }, { 0x947A, 70242 }, { 0x947B, 70247 }, { 0x947C, 70252 }, { 0x947D, 70257 }, { 0x947E, 70262 }, { 0x947F, 70267 }, { 0x9480, 70272 }, { 0x9481, 70277 }, { 0x9482, 69891 }, { 0x9483, 69896 }, { 0x9484, 69901 }, { 0x9485, 69906 }, { 0x9486, 69911 }, { 0x9487, 69916 }, { 0x9488, 69921 }, { 0x9489, 69926 }, { 0x948A, 69931 }, { 0x948B, 69936 }, { 0x948C, 69941 }, { 0x948D, 69946 }, { 0x948E, 69951 }, { 0x948F, 69956 }, { 0x9490, 69961 }, { 0x9491, 69966 }, { 0x9492, 69971 }, { 0x9493, 69976 }, { 0x9494, 69981 }, { 0x9495, 69986 }, { 0x9496, 69991 }, { 0x9497, 69996 }, { 0x9498, 70001 }, { 0x9499, 70006 }, { 0x949A, 70011 }, { 0x949B, 70016 }, { 0x949C, 71742 }, { 0x949E, 71746 }, { 0x949F, 71750 }, { 0x94A2, 71754 }, { 0x94A5, 71758 }, { 0x94A6, 71762 }, { 0x94A9, 71766 }, { 0x94AA, 71770 }, { 0x94AB, 71774 }, { 0x94AC, 71778 }, { 0x94AE, 71782 }, { 0x94AF, 71786 }, { 0x94B0, 71790 }, { 0x94B1, 71794 }, { 0x94B2, 71798 }, { 0x94B3, 71802 }, { 0x94B4, 71806 }, { 0x94B5, 71810 }, { 0x94B6, 71650 }, { 0x94B7, 71654 }, { 0x94B8, 71658 }, { 0x94B9, 71662 }, { 0x94BB, 71666 }, { 0x94BD, 71670 }, { 0x94BE, 71674 }, { 0x94BF, 71678 }, { 0x94C0, 71682 }, { 0x94C1, 71686 }, { 0x94C2, 71690 }, { 0x94C3, 71694 }, { 0x94C5, 71698 }, { 0x94C6, 71702 }, { 0x94C7, 71706 }, { 0x94C8, 71710 }, { 0x94C9, 71714 }, { 0x94CA, 71718 }, { 0x94CB, 71722 }, { 0x94CC, 71726 }, { 0x94CD, 71730 }, { 0x94CE, 71734 }, { 0x94CF, 71738 }, { 0x94D0, 70548 }, { 0x94D1, 70553 }, { 0x94D2, 70558 }, { 0x94D3, 70563 }, { 0x94D4, 70568 }, { 0x94D5, 70573 }, { 0x94D6, 70578 }, { 0x94D7, 70583 }, { 0x94D8, 70588 }, { 0x94D9, 70593 }, { 0x94DA, 70598 }, { 0x94DB, 70603 }, { 0x94DC, 70608 }, { 0x94DD, 70613 }, { 0x94DE, 70618 }, { 0x94DF, 70623 }, { 0x94E0, 70628 }, { 0x94E1, 70633 }, { 0x94E2, 70638 }, { 0x94E3, 70643 }, { 0x94E4, 70648 }, { 0x94E5, 70653 }, { 0x94E6, 70658 }, { 0x94E7, 70663 }, { 0x94E8, 70668 }, { 0x94E9, 70673 }, { 0x94EA, 70418 }, { 0x94EB, 70423 }, { 0x94EC, 70428 }, { 0x94ED, 70433 }, { 0x94EE, 70438 }, { 0x94EF, 70443 }, { 0x94F0, 70448 }, { 0x94F1, 70453 }, { 0x94F2, 70458 }, { 0x94F3, 70463 }, { 0x94F4, 70468 }, { 0x94F5, 70473 }, { 0x94F6, 70478 }, { 0x94F7, 70483 }, { 0x94F8, 70488 }, { 0x94F9, 70493 }, { 0x94FA, 70498 }, { 0x94FB, 70503 }, { 0x94FC, 70508 }, { 0x94FD, 70513 }, { 0x94FE, 70518 }, { 0x94FF, 70523 }, { 0x9500, 70528 }, { 0x9501, 70533 }, { 0x9502, 70538 }, { 0x9503, 70543 }, { 0x9504, 71918 }, { 0x9505, 71922 }, { 0x9507, 71926 }, { 0x9508, 71930 }, { 0x9509, 71934 }, { 0x950A, 71938 }, { 0x950D, 71942 }, { 0x950E, 71946 }, { 0x950F, 71950 }, { 0x9510, 71954 }, { 0x9511, 71958 }, { 0x9512, 71962 }, { 0x9513, 71966 }, { 0x9514, 71970 }, { 0x9516, 71974 }, { 0x9517, 71978 }, { 0x9518, 71982 }, { 0x9519, 71986 }, { 0x951A, 71990 }, { 0x951B, 71994 }, { 0x951C, 71998 }, { 0x951E, 71814 }, { 0x951F, 71818 }, { 0x9520, 71822 }, { 0x9521, 71826 }, { 0x9522, 71830 }, { 0x9523, 71834 }, { 0x9524, 71838 }, { 0x9525, 71842 }, { 0x9526, 71846 }, { 0x9527, 71850 }, { 0x9528, 71854 }, { 0x9529, 71858 }, { 0x952A, 71862 }, { 0x952B, 71866 }, { 0x952C, 71870 }, { 0x952D, 71874 }, { 0x952E, 71878 }, { 0x952F, 71882 }, { 0x9530, 71886 }, { 0x9531, 71890 }, { 0x9532, 71894 }, { 0x9533, 71898 }, { 0x9534, 71902 }, { 0x9535, 71906 }, { 0x9536, 71910 }, { 0x9537, 71914 }, { 0x9538, 74164 }, { 0x9539, 74168 }, { 0x953B, 74172 }, { 0x953C, 74176 }, { 0x953D, 74180 }, { 0x953E, 74184 }, { 0x9540, 74188 }, { 0x9541, 74192 }, { 0x9542, 74196 }, { 0x9543, 74200 }, { 0x9544, 74204 }, { 0x9546, 74208 }, { 0x954A, 74212 }, { 0x954B, 74216 }, { 0x954C, 74220 }, { 0x954D, 74224 }, { 0x954E, 74228 }, { 0x954F, 74232 }, { 0x9550, 74236 }, { 0x9552, 74060 }, { 0x9553, 74064 }, { 0x9554, 74068 }, { 0x9555, 74072 }, { 0x9556, 74076 }, { 0x9557, 74080 }, { 0x9558, 74084 }, { 0x9559, 74088 }, { 0x955A, 74092 }, { 0x955B, 74096 }, { 0x955C, 74100 }, { 0x955D, 74104 }, { 0x955E, 74108 }, { 0x955F, 74112 }, { 0x9560, 74116 }, { 0x9561, 74120 }, { 0x9562, 74124 }, { 0x9563, 74128 }, { 0x9564, 74132 }, { 0x9565, 74136 }, { 0x9566, 74140 }, { 0x9567, 74144 }, { 0x9568, 74148 }, { 0x9569, 74152 }, { 0x956A, 74156 }, { 0x956B, 74160 }, { 0x956C, 71021 }, { 0x956D, 71026 }, { 0x956E, 71031 }, { 0x956F, 71036 }, { 0x9570, 71041 }, { 0x9571, 71046 }, { 0x9572, 71051 }, { 0x9573, 71056 }, { 0x9574, 71061 }, { 0x9575, 71066 }, { 0x9576, 71071 }, { 0x9577, 71076 }, { 0x9578, 71081 }, { 0x9579, 71086 }, { 0x957A, 71091 }, { 0x957B, 71096 }, { 0x957C, 71101 }, { 0x957D, 71106 }, { 0x957E, 71111 }, { 0x957F, 71116 }, { 0x9580, 71121 }, { 0x9581, 71126 }, { 0x9582, 71131 }, { 0x9583, 71136 }, { 0x9584, 71141 }, { 0x9585, 71146 }, { 0x9586, 70891 }, { 0x9587, 70896 }, { 0x9588, 70901 }, { 0x9589, 70906 }, { 0x958A, 70911 }, { 0x958B, 70916 }, { 0x958C, 70921 }, { 0x958D, 70926 }, { 0x958E, 70931 }, { 0x958F, 70936 }, { 0x9590, 70941 }, { 0x9591, 70946 }, { 0x9592, 70951 }, { 0x9593, 70956 }, { 0x9594, 70961 }, { 0x9595, 70966 }, { 0x9596, 70971 }, { 0x9597, 70976 }, { 0x9598, 70981 }, { 0x9599, 70986 }, { 0x959A, 70991 }, { 0x959B, 70996 }, { 0x959C, 71001 }, { 0x959D, 71006 }, { 0x959E, 71011 }, { 0x959F, 71016 }, { 0x95A0, 73916 }, { 0x95A1, 73920 }, { 0x95A2, 73924 }, { 0x95A3, 73928 }, { 0x95A4, 73932 }, { 0x95A5, 73936 }, { 0x95A6, 73940 }, { 0x95A7, 73944 }, { 0x95A8, 73948 }, { 0x95A9, 73952 }, { 0x95AA, 73956 }, { 0x95AB, 73960 }, { 0x95AC, 73964 }, { 0x95AD, 73968 }, { 0x95AE, 73972 }, { 0x95AF, 73976 }, { 0x95B0, 73980 }, { 0x95B1, 73984 }, { 0x95B2, 73988 }, { 0x95B3, 73992 }, { 0x95B4, 73996 }, { 0x95B5, 74000 }, { 0x95B6, 74004 }, { 0x95B7, 74008 }, { 0x95B8, 74012 }, { 0x95B9, 74016 }, { 0x95BA, 73552 }, { 0x95BB, 73556 }, { 0x95BC, 73560 }, { 0x95BD, 73564 }, { 0x95BE, 73568 }, { 0x95BF, 73572 }, { 0x95C0, 73576 }, { 0x95C1, 73580 }, { 0x95C2, 73584 }, { 0x95C3, 73588 }, { 0x95C4, 73592 }, { 0x95C5, 73596 }, { 0x95C6, 73600 }, { 0x95C7, 73604 }, { 0x95C8, 73608 }, { 0x95C9, 73612 }, { 0x95CA, 73616 }, { 0x95CB, 73620 }, { 0x95CC, 73624 }, { 0x95CD, 73628 }, { 0x95CE, 73632 }, { 0x95CF, 73636 }, { 0x95D0, 73640 }, { 0x95D1, 73644 }, { 0x95D2, 73648 }, { 0x95D3, 73652 }, { 0x95D4, 73246 }, { 0x95D5, 73251 }, { 0x95D6, 73256 }, { 0x95D7, 73261 }, { 0x95D8, 73266 }, { 0x95D9, 73271 }, { 0x95DA, 73276 }, { 0x95DB, 73281 }, { 0x95DC, 73286 }, { 0x95DD, 73291 }, { 0x95DE, 73296 }, { 0x95DF, 73301 }, { 0x95E0, 73306 }, { 0x95E1, 73311 }, { 0x95E2, 73316 }, { 0x95E3, 73321 }, { 0x95E4, 73326 }, { 0x95E5, 73331 }, { 0x95E6, 73336 }, { 0x95E7, 73341 }, { 0x95E8, 73346 }, { 0x95E9, 73351 }, { 0x95EA, 73356 }, { 0x95EB, 73361 }, { 0x95EC, 73366 }, { 0x95ED, 73371 }, { 0x95EE, 72324 }, { 0x95EF, 72329 }, { 0x95F0, 72334 }, { 0x95F1, 72339 }, { 0x95F2, 72344 }, { 0x95F3, 72349 }, { 0x95F4, 72354 }, { 0x95F5, 72359 }, { 0x95F6, 72364 }, { 0x95F7, 72369 }, { 0x95F8, 72374 }, { 0x95F9, 72379 }, { 0x95FA, 72384 }, { 0x95FB, 72389 }, { 0x95FC, 72394 }, { 0x95FD, 72399 }, { 0x95FE, 72404 }, { 0x95FF, 72409 }, { 0x9600, 72414 }, { 0x9601, 72419 }, { 0x9602, 72424 }, { 0x9603, 72429 }, { 0x9604, 72434 }, { 0x9605, 72439 }, { 0x9606, 72444 }, { 0x9607, 72449 }, { 0x9608, 73786 }, { 0x9609, 73791 }, { 0x960A, 73796 }, { 0x960B, 73801 }, { 0x960C, 73806 }, { 0x960D, 73811 }, { 0x960E, 73816 }, { 0x960F, 73821 }, { 0x9610, 73826 }, { 0x9611, 73831 }, { 0x9612, 73836 }, { 0x9613, 73841 }, { 0x9614, 73846 }, { 0x9615, 73851 }, { 0x9616, 73856 }, { 0x9617, 73861 }, { 0x9618, 73866 }, { 0x9619, 73871 }, { 0x961A, 73876 }, { 0x961B, 73881 }, { 0x961C, 73886 }, { 0x961D, 73891 }, { 0x961E, 73896 }, { 0x961F, 73901 }, { 0x9620, 73906 }, { 0x9621, 73911 }, { 0x9622, 73656 }, { 0x9623, 73661 }, { 0x9624, 73666 }, { 0x9625, 73671 }, { 0x9626, 73676 }, { 0x9627, 73681 }, { 0x9628, 73686 }, { 0x9629, 73691 }, { 0x962A, 73696 }, { 0x962B, 73701 }, { 0x962C, 73706 }, { 0x962D, 73711 }, { 0x962E, 73716 }, { 0x962F, 73721 }, { 0x9630, 73726 }, { 0x9631, 73731 }, { 0x9632, 73736 }, { 0x9633, 73741 }, { 0x9634, 73746 }, { 0x9635, 73751 }, { 0x9636, 73756 }, { 0x9637, 73761 }, { 0x9638, 73766 }, { 0x9639, 73771 }, { 0x963A, 73776 }, { 0x963B, 73781 }, { 0x963C, 72927 }, { 0x963D, 72933 }, { 0x963E, 72939 }, { 0x963F, 72945 }, { 0x9640, 72951 }, { 0x9641, 72957 }, { 0x9642, 72963 }, { 0x9643, 72969 }, { 0x9644, 72975 }, { 0x9645, 72981 }, { 0x9646, 72987 }, { 0x9647, 72993 }, { 0x9648, 72999 }, { 0x9649, 73005 }, { 0x964A, 73011 }, { 0x964B, 73017 }, { 0x964C, 73023 }, { 0x964D, 73029 }, { 0x964E, 73035 }, { 0x964F, 73041 }, { 0x9650, 73047 }, { 0x9651, 73053 }, { 0x9652, 73059 }, { 0x9653, 73065 }, { 0x9654, 73071 }, { 0x9655, 73077 }, { 0x9656, 72614 }, { 0x9657, 72620 }, { 0x9658, 72626 }, { 0x9659, 72632 }, { 0x965A, 72638 }, { 0x965B, 72644 }, { 0x965C, 72650 }, { 0x965D, 72656 }, { 0x965E, 72662 }, { 0x965F, 72668 }, { 0x9660, 72674 }, { 0x9661, 72680 }, { 0x9662, 72686 }, { 0x9663, 72692 }, { 0x9664, 72698 }, { 0x9665, 72704 }, { 0x9666, 72710 }, { 0x9667, 72716 }, { 0x9668, 72722 }, { 0x9669, 72728 }, { 0x966A, 72734 }, { 0x966B, 72740 }, { 0x966C, 72746 }, { 0x966D, 72752 }, { 0x966E, 72758 }, { 0x966F, 72764 }, { 0x9670, 72146 }, { 0x9671, 72150 }, { 0x9672, 72154 }, { 0x9673, 72158 }, { 0x9674, 72162 }, { 0x9675, 72166 }, { 0x9676, 72170 }, { 0x9677, 72174 }, { 0x9678, 72178 }, { 0x9679, 72182 }, { 0x967A, 72186 }, { 0x967B, 72190 }, { 0x967C, 72194 }, { 0x967D, 72198 }, { 0x967E, 72202 }, { 0x967F, 72206 }, { 0x9680, 72210 }, { 0x9681, 72214 }, { 0x9682, 72218 }, { 0x9683, 72222 }, { 0x9684, 72226 }, { 0x9685, 72230 }, { 0x9686, 72234 }, { 0x9687, 72238 }, { 0x9688, 72242 }, { 0x9689, 72246 }, { 0x968A, 72042 }, { 0x968B, 72046 }, { 0x968C, 72050 }, { 0x968D, 72054 }, { 0x968E, 72058 }, { 0x968F, 72062 }, { 0x9690, 72066 }, { 0x9691, 72070 }, { 0x9692, 72074 }, { 0x9693, 72078 }, { 0x9694, 72082 }, { 0x9695, 72086 }, { 0x9696, 72090 }, { 0x9697, 72094 }, { 0x9698, 72098 }, { 0x9699, 72102 }, { 0x969A, 72106 }, { 0x969B, 72110 }, { 0x969C, 72114 }, { 0x969D, 72118 }, { 0x969E, 72122 }, { 0x969F, 72126 }, { 0x96A0, 72130 }, { 0x96A1, 72134 }, { 0x96A2, 72138 }, { 0x96A3, 72142 }, { 0x96A4, 71411 }, { 0x96A5, 71416 }, { 0x96A8, 70834 }, { 0x96A9, 70822 }, { 0x96AA, 70842 }, { 0x96AB, 70838 }, { 0x96AC, 70875 }, { 0x96AD, 70830 }, { 0x96AE, 70802 }, { 0x96AF, 70862 }, { 0x96B0, 70826 }, { 0x96B1, 70846 }, { 0x96B2, 70850 }, { 0x96B3, 70782 }, { 0x96B4, 70786 }, { 0x96B5, 70794 }, { 0x96B6, 70879 }, { 0x96B7, 70790 }, { 0x96B8, 70814 }, { 0x96B9, 70866 }, { 0x96BA, 70858 }, { 0x96BB, 70818 }, { 0x96BC, 70883 }, { 0x96BD, 70806 }, { 0x96BE, 70798 }, { 0x96BF, 70810 }, { 0x96C0, 70854 }, { 0x96C1, 69651 }, { 0x96C2, 69810 }, { 0x96C3, 69798 }, { 0x96C4, 69823 }, { 0x96C5, 69814 }, { 0x96C6, 69851 }, { 0x96C7, 69806 }, { 0x96C8, 69778 }, { 0x96C9, 69843 }, { 0x96CA, 69802 }, { 0x96CB, 69827 }, { 0x96CC, 69831 }, { 0x96CD, 69758 }, { 0x96CE, 69762 }, { 0x96CF, 69770 }, { 0x96D0, 69855 }, { 0x96D1, 69766 }, { 0x96D2, 69790 }, { 0x96D3, 69818 }, { 0x96D4, 69839 }, { 0x96D5, 69794 }, { 0x96D6, 69859 }, { 0x96D7, 69782 }, { 0x96D8, 69774 }, { 0x96D9, 69786 }, { 0x96DA, 69835 }, { 0x96DB, 71151 }, { 0x96DC, 70887 }, { 0x96DD, 69863 }, { 0x96DE, 69647 }, { 0x96DF, 69599 }, { 0x96E0, 69603 }, { 0x96E1, 69595 }, { 0x96E2, 71593 }, { 0x96E3, 71581 }, { 0x96E4, 71601 }, { 0x96E5, 71597 }, { 0x96E6, 71630 }, { 0x96E7, 71589 }, { 0x96E8, 71561 }, { 0x96E9, 71621 }, { 0x96EA, 71585 }, { 0x96EB, 71605 }, { 0x96EC, 71609 }, { 0x96ED, 71541 }, { 0x96EE, 71545 }, { 0x96EF, 71553 }, { 0x96F0, 71634 }, { 0x96F1, 71549 }, { 0x96F2, 71573 }, { 0x96F3, 71625 }, { 0x96F4, 71617 }, { 0x96F5, 71577 }, { 0x96F6, 71638 }, { 0x96F7, 71565 }, { 0x96F8, 71557 }, { 0x96F9, 71569 }, { 0x96FA, 71613 }, { 0x96FB, 71219 }, { 0x96FC, 71374 }, { 0x96FD, 71362 }, { 0x96FE, 71387 }, { 0x96FF, 71378 }, { 0x9700, 71421 }, { 0x9701, 71370 }, { 0x9702, 71342 }, { 0x9703, 71407 }, { 0x9704, 71366 }, { 0x9705, 71391 }, { 0x9706, 71395 }, { 0x9707, 71322 }, { 0x9708, 71326 }, { 0x9709, 71334 }, { 0x970A, 71425 }, { 0x970B, 71330 }, { 0x970C, 71354 }, { 0x970D, 71382 }, { 0x970E, 71403 }, { 0x970F, 71358 }, { 0x9710, 71429 }, { 0x9711, 71346 }, { 0x9712, 71338 }, { 0x9713, 71350 }, { 0x9714, 71399 }, { 0x9715, 71646 }, { 0x9716, 71642 }, { 0x9717, 71433 }, { 0x9718, 71215 }, { 0x9719, 71207 }, { 0x971A, 71211 }, { 0x971B, 71203 }, { 0x971C, 70347 }, { 0x971D, 70332 }, { 0x971E, 70357 }, { 0x971F, 70352 }, { 0x9720, 70393 }, { 0x9721, 70342 }, { 0x9722, 70307 }, { 0x9723, 70382 }, { 0x9724, 70337 }, { 0x9725, 70362 }, { 0x9726, 70367 }, { 0x9727, 70282 }, { 0x9728, 70287 }, { 0x9729, 70297 }, { 0x972A, 70398 }, { 0x972B, 70292 }, { 0x972C, 70322 }, { 0x972D, 70387 }, { 0x972E, 70377 }, { 0x972F, 70327 }, { 0x9730, 70403 }, { 0x9731, 70312 }, { 0x9732, 70302 }, { 0x9733, 70317 }, { 0x9734, 70372 }, { 0x9735, 69887 }, { 0x9736, 70086 }, { 0x9737, 70071 }, { 0x9738, 70102 }, { 0x9739, 70091 }, { 0x973A, 70132 }, { 0x973B, 70081 }, { 0x973C, 70046 }, { 0x973D, 70127 }, { 0x973E, 70076 }, { 0x973F, 70107 }, { 0x9740, 70112 }, { 0x9741, 70021 }, { 0x9742, 70026 }, { 0x9743, 70036 }, { 0x9744, 70137 }, { 0x9745, 70031 }, { 0x9746, 70061 }, { 0x9747, 70096 }, { 0x9748, 70122 }, { 0x9749, 70066 }, { 0x974A, 70142 }, { 0x974B, 70051 }, { 0x974C, 70041 }, { 0x974D, 70056 }, { 0x974E, 70117 }, { 0x974F, 70413 }, { 0x9750, 70408 }, { 0x9751, 70147 }, { 0x9752, 69882 }, { 0x9753, 69872 }, { 0x9754, 69877 }, { 0x9755, 69867 }, { 0x9756, 73441 }, { 0x9757, 73426 }, { 0x9758, 73451 }, { 0x9759, 73446 }, { 0x975A, 73487 }, { 0x975B, 73436 }, { 0x975C, 73401 }, { 0x975D, 73476 }, { 0x975E, 73431 }, { 0x975F, 73456 }, { 0x9760, 73461 }, { 0x9761, 73376 }, { 0x9762, 73381 }, { 0x9763, 73391 }, { 0x9764, 73492 }, { 0x9765, 73386 }, { 0x9766, 73416 }, { 0x9767, 73481 }, { 0x9768, 73471 }, { 0x9769, 73421 }, { 0x976A, 73497 }, { 0x976B, 73406 }, { 0x976C, 73396 }, { 0x976D, 73411 }, { 0x976E, 73466 }, { 0x976F, 72320 }, { 0x9770, 72519 }, { 0x9771, 72504 }, { 0x9772, 72535 }, { 0x9773, 72524 }, { 0x9774, 72565 }, { 0x9775, 72514 }, { 0x9776, 72479 }, { 0x9777, 72560 }, { 0x9778, 72509 }, { 0x9779, 72540 }, { 0x977A, 72545 }, { 0x977B, 72454 }, { 0x977C, 72459 }, { 0x977D, 72469 }, { 0x977E, 72570 }, { 0x977F, 72464 }, { 0x9780, 72494 }, { 0x9781, 72529 }, { 0x9782, 72555 }, { 0x9783, 72499 }, { 0x9784, 72575 }, { 0x9785, 72484 }, { 0x9786, 72474 }, { 0x9787, 72489 }, { 0x9788, 72550 }, { 0x9789, 73507 }, { 0x978A, 73502 }, { 0x978B, 72580 }, { 0x978C, 72315 }, { 0x978D, 72255 }, { 0x978E, 72260 }, { 0x978F, 72250 }, { 0x9790, 73161 }, { 0x9791, 73143 }, { 0x9792, 73173 }, { 0x9793, 73167 }, { 0x9794, 73216 }, { 0x9795, 73155 }, { 0x9796, 73113 }, { 0x9797, 73203 }, { 0x9798, 73149 }, { 0x9799, 73179 }, { 0x979A, 73185 }, { 0x979B, 73083 }, { 0x979C, 73089 }, { 0x979D, 73101 }, { 0x979E, 73222 }, { 0x979F, 73095 }, { 0x97A0, 73131 }, { 0x97A1, 73209 }, { 0x97A2, 73197 }, { 0x97A3, 73137 }, { 0x97A4, 73228 }, { 0x97A5, 73119 }, { 0x97A6, 73107 }, { 0x97A7, 73125 }, { 0x97A8, 73191 }, { 0x97A9, 72609 }, { 0x97AA, 72848 }, { 0x97AB, 72830 }, { 0x97AC, 72867 }, { 0x97AD, 72854 }, { 0x97AE, 72903 }, { 0x97AF, 72842 }, { 0x97B0, 72800 }, { 0x97B1, 72897 }, { 0x97B2, 72836 }, { 0x97B3, 72873 }, { 0x97B4, 72879 }, { 0x97B5, 72770 }, { 0x97B6, 72776 }, { 0x97B7, 72788 }, { 0x97B8, 72909 }, { 0x97B9, 72782 }, { 0x97BA, 72818 }, { 0x97BB, 72860 }, { 0x97BC, 72891 }, { 0x97BD, 72824 }, { 0x97BE, 72915 }, { 0x97BF, 72806 }, { 0x97C0, 72794 }, { 0x97C1, 72812 }, { 0x97C2, 72885 }, { 0x97C3, 73240 }, { 0x97C4, 73234 }, { 0x97C5, 72921 }, { 0x97C6, 72603 }, { 0x97C7, 72591 }, { 0x97C8, 72597 }, { 0x97C9, 72585 }, { 0x97CA, 70871 }, { 0x97CB, 69847 }, { 0x97CE, 69631 }, { 0x97CF, 69607 }, { 0x97D0, 69615 }, { 0x97D1, 69643 }, { 0x97D2, 69623 }, { 0x97D3, 69619 }, { 0x97D4, 69611 }, { 0x97D5, 69639 }, { 0x97D6, 69635 }, { 0x97D7, 69627 }, { 0x97D8, 74044 }, { 0x97D9, 74020 }, { 0x97DA, 74028 }, { 0x97DB, 74056 }, { 0x97DC, 74036 }, { 0x97DD, 74032 }, { 0x97DE, 74024 }, { 0x97DF, 74052 }, { 0x97E0, 74048 }, { 0x97E1, 74040 }, { 0x97E2, 73536 }, { 0x97E3, 73512 }, { 0x97E4, 73520 }, { 0x97E5, 73548 }, { 0x97E6, 73528 }, { 0x97E7, 73524 }, { 0x97E8, 73516 }, { 0x97E9, 73544 }, { 0x97EA, 73540 }, { 0x97EB, 73532 }, { 0x97EC, 72295 }, { 0x97ED, 72265 }, { 0x97EE, 72275 }, { 0x97EF, 72310 }, { 0x97F0, 72285 }, { 0x97F1, 72280 }, { 0x97F2, 72270 }, { 0x97F3, 72305 }, { 0x97F4, 72300 }, { 0x97F5, 72290 }, { 0x97F6, 72026 }, { 0x97F7, 72002 }, { 0x97F8, 72010 }, { 0x97F9, 72038 }, { 0x97FA, 72018 }, { 0x97FB, 72014 }, { 0x97FC, 72006 }, { 0x97FD, 72034 }, { 0x97FE, 72030 }, { 0x97FF, 72022 }, { 0xA000, 41048 }, { 0xA001, 41145 }, { 0xA002, 41100 }, { 0xA003, 41126 }, { 0xA004, 41011 }, { 0xA005, 41119 }, { 0xA006, 41164 }, { 0xA007, 41006 }, { 0xA008, 41040 }, { 0xA009, 41159 }, { 0xA00A, 41077 }, { 0xA00B, 41062 }, { 0xA00C, 41025 }, { 0xA00D, 41140 }, { 0xA00E, 41114 }, { 0xA00F, 41092 }, { 0xA010, 40996 }, { 0xA011, 41030 }, { 0xA012, 41149 }, { 0xA013, 41067 }, { 0xA014, 41052 }, { 0xA015, 41015 }, { 0xA016, 41130 }, { 0xA017, 41104 }, { 0xA018, 41082 }, { 0xA019, 41001 }, { 0xA01A, 41035 }, { 0xA01B, 41154 }, { 0xA01C, 41072 }, { 0xA01D, 41057 }, { 0xA01E, 41020 }, { 0xA01F, 41135 }, { 0xA020, 41109 }, { 0xA021, 41087 }, { 0xA022, 41097 }, { 0xA023, 41174 }, { 0xA024, 41171 }, { 0xA025, 41186 }, { 0xA026, 41177 }, { 0xA027, 41180 }, { 0xA028, 41168 }, { 0xA029, 41183 }, { 0xA02A, 41123 }, { 0xA02B, 41045 }, { 0xA030, 31231 }, { 0xA031, 31382 }, { 0xA032, 31385 }, { 0xA033, 31388 }, { 0xA034, 31391 }, { 0xA035, 31394 }, { 0xA036, 31397 }, { 0xA037, 31400 }, { 0xA038, 31403 }, { 0xA039, 31406 }, { 0xA03A, 31409 }, { 0xA03B, 31412 }, { 0xA03C, 31415 }, { 0xA03D, 31418 }, { 0xA03E, 31421 }, { 0xA03F, 31424 }, { 0xA040, 31427 }, { 0xA041, 31430 }, { 0xA042, 31433 }, { 0xA043, 31436 }, { 0xA044, 31439 }, { 0xA045, 31442 }, { 0xA046, 31445 }, { 0xA047, 31448 }, { 0xA048, 31451 }, { 0xA049, 31454 }, { 0xA04A, 31457 }, { 0xA04B, 31460 }, { 0xA04C, 31463 }, { 0xA04D, 31466 }, { 0xA04E, 31469 }, { 0xA04F, 31472 }, { 0xA050, 31475 }, { 0xA051, 31478 }, { 0xA052, 31481 }, { 0xA053, 31484 }, { 0xA054, 31487 }, { 0xA055, 31490 }, { 0xA056, 31493 }, { 0xA057, 31496 }, { 0xA058, 31499 }, { 0xA059, 31502 }, { 0xA05A, 31505 }, { 0xA05B, 31508 }, { 0xA05C, 31511 }, { 0xA05D, 31514 }, { 0xA05E, 31517 }, { 0xA05F, 31520 }, { 0xA060, 31523 }, { 0xA061, 31526 }, { 0xA062, 31227 }, { 0xA063, 31235 }, { 0xA064, 31238 }, { 0xA065, 31241 }, { 0xA066, 31244 }, { 0xA067, 31247 }, { 0xA068, 31250 }, { 0xA069, 31253 }, { 0xA06A, 31256 }, { 0xA06B, 31259 }, { 0xA06C, 31262 }, { 0xA06D, 31265 }, { 0xA06E, 31268 }, { 0xA06F, 31271 }, { 0xA070, 31274 }, { 0xA071, 31277 }, { 0xA072, 31280 }, { 0xA073, 31283 }, { 0xA074, 31286 }, { 0xA075, 31289 }, { 0xA076, 31292 }, { 0xA077, 31295 }, { 0xA078, 31298 }, { 0xA079, 31301 }, { 0xA07A, 31304 }, { 0xA07B, 31307 }, { 0xA07C, 31310 }, { 0xA07D, 31313 }, { 0xA07E, 31316 }, { 0xA07F, 31319 }, { 0xA080, 31322 }, { 0xA081, 31325 }, { 0xA082, 31328 }, { 0xA083, 31331 }, { 0xA084, 31334 }, { 0xA085, 31337 }, { 0xA086, 31340 }, { 0xA087, 31343 }, { 0xA088, 31346 }, { 0xA089, 31349 }, { 0xA08A, 31352 }, { 0xA08B, 31355 }, { 0xA08C, 31358 }, { 0xA08D, 31361 }, { 0xA08E, 31364 }, { 0xA08F, 31367 }, { 0xA090, 31370 }, { 0xA091, 31373 }, { 0xA092, 31376 }, { 0xA093, 31379 }, { 0xC001, 53726 }, { 0xC020, 7517 }, { 0xC021, 7564 }, { 0xC022, 7551 }, { 0xC023, 7527 }, { 0xC024, 7521 }, { 0xC025, 7530 }, { 0xC026, 7546 }, { 0xC027, 7556 }, { 0xC028, 7203 }, { 0xC029, 7514 }, { 0xC02A, 7538 }, { 0xC02B, 7206 }, { 0xC02C, 7211 }, { 0xC02D, 7570 }, { 0xC02E, 7192 }, { 0xC02F, 7536 }, { 0xC030, 7231 }, { 0xC031, 7213 }, { 0xC032, 7219 }, { 0xC033, 7240 }, { 0xC034, 7225 }, { 0xC035, 7222 }, { 0xC036, 7216 }, { 0xC037, 7237 }, { 0xC038, 7234 }, { 0xC039, 7228 }, { 0xC03A, 7209 }, { 0xC03B, 7554 }, { 0xC03C, 7548 }, { 0xC03D, 7524 }, { 0xC03E, 7567 }, { 0xC03F, 7540 }, { 0xC040, 7561 }, { 0xC041, 7376 }, { 0xC042, 7381 }, { 0xC043, 7386 }, { 0xC044, 7391 }, { 0xC045, 7396 }, { 0xC046, 7401 }, { 0xC047, 7406 }, { 0xC048, 7411 }, { 0xC049, 7416 }, { 0xC04A, 7421 }, { 0xC04B, 7426 }, { 0xC04C, 7431 }, { 0xC04D, 7436 }, { 0xC04E, 7441 }, { 0xC04F, 7446 }, { 0xC050, 7451 }, { 0xC051, 7456 }, { 0xC052, 7461 }, { 0xC053, 7466 }, { 0xC054, 7471 }, { 0xC055, 7476 }, { 0xC056, 7481 }, { 0xC057, 7486 }, { 0xC058, 7491 }, { 0xC059, 7496 }, { 0xC05A, 7501 }, { 0xC05B, 7199 }, { 0xC05C, 7533 }, { 0xC05D, 7510 }, { 0xC05E, 7558 }, { 0xC05F, 7189 }, { 0xC060, 7243 }, { 0xC061, 7246 }, { 0xC062, 7251 }, { 0xC063, 7256 }, { 0xC064, 7261 }, { 0xC065, 7266 }, { 0xC066, 7271 }, { 0xC067, 7276 }, { 0xC068, 7281 }, { 0xC069, 7286 }, { 0xC06A, 7291 }, { 0xC06B, 7296 }, { 0xC06C, 7301 }, { 0xC06D, 7306 }, { 0xC06E, 7311 }, { 0xC06F, 7316 }, { 0xC070, 7321 }, { 0xC071, 7326 }, { 0xC072, 7331 }, { 0xC073, 7336 }, { 0xC074, 7341 }, { 0xC075, 7346 }, { 0xC076, 7351 }, { 0xC077, 7356 }, { 0xC078, 7361 }, { 0xC079, 7366 }, { 0xC07A, 7371 }, { 0xC07B, 7195 }, { 0xC07C, 7543 }, { 0xC07D, 7506 }, { 0xC07E, 7519 }, { 0xC07F, 30315 }, { 0xC100, 66346 }, { 0xC101, 66348 }, { 0xC102, 66350 }, { 0xC103, 66352 }, { 0xC104, 66354 }, { 0xC105, 66356 }, { 0xC106, 66358 }, { 0xC107, 66360 }, { 0xC108, 66362 }, { 0xC109, 66364 }, { 0xC10A, 66366 }, { 0xC10B, 66368 }, { 0xC10C, 66370 }, { 0xC10D, 66372 }, { 0xC10E, 66374 }, { 0xC10F, 66376 }, { 0xC110, 66378 }, { 0xC111, 66380 }, { 0xC112, 66382 }, { 0xC113, 66384 }, { 0xC114, 66386 }, { 0xC115, 66388 }, { 0xC116, 66390 }, { 0xC117, 66392 }, { 0xC118, 66394 }, { 0xC119, 66396 }, { 0xC11A, 66398 }, { 0xC11B, 66400 }, { 0xC11C, 66402 }, { 0xC11D, 66404 }, { 0xC11E, 66406 }, { 0xC11F, 66408 }, { 0xC120, 66410 }, { 0xC121, 66412 }, { 0xC122, 66414 }, { 0xC123, 66416 }, { 0xC124, 66418 }, { 0xC125, 66420 }, { 0xC126, 66422 }, { 0xC127, 66424 }, { 0xC128, 66426 }, { 0xC129, 66428 }, { 0xC12A, 66430 }, { 0xC12B, 66432 }, { 0xC12C, 66434 }, { 0xC12D, 66436 }, { 0xC12E, 66438 }, { 0xC12F, 66440 }, { 0xC130, 66442 }, { 0xC131, 66444 }, { 0xC132, 66446 }, { 0xC133, 66448 }, { 0xC134, 66450 }, { 0xC135, 66452 }, { 0xC136, 66454 }, { 0xC137, 66456 }, { 0xC138, 66458 }, { 0xC139, 66460 }, { 0xC13A, 66462 }, { 0xC13B, 66464 }, { 0xC13C, 66466 }, { 0xC13D, 66468 }, { 0xC13E, 66470 }, { 0xC13F, 66472 }, { 0xC140, 66474 }, { 0xC141, 66476 }, { 0xC142, 66478 }, { 0xC143, 66480 }, { 0xC144, 66482 }, { 0xC145, 66484 }, { 0xC146, 66486 }, { 0xC147, 66488 }, { 0xC148, 66490 }, { 0xC149, 66492 }, { 0xC14A, 66494 }, { 0xC14B, 66496 }, { 0xC14C, 66498 }, { 0xC14D, 66500 }, { 0xC14E, 66502 }, { 0xC14F, 66504 }, { 0xC150, 66506 }, { 0xC151, 66508 }, { 0xC152, 66510 }, { 0xC153, 66512 }, { 0xC154, 66514 }, { 0xC155, 66516 }, { 0xC156, 66518 }, { 0xC157, 66520 }, { 0xC158, 66522 }, { 0xC159, 66524 }, { 0xC15A, 66526 }, { 0xC15B, 66528 }, { 0xC15C, 66530 }, { 0xC15D, 66532 }, { 0xC15E, 66534 }, { 0xC15F, 66536 }, { 0xC160, 66538 }, { 0xC161, 66540 }, { 0xC162, 66542 }, { 0xC163, 66544 }, { 0xC164, 66546 }, { 0xC165, 66548 }, { 0xC166, 66550 }, { 0xC167, 66552 }, { 0xC168, 66554 }, { 0xC169, 66556 }, { 0xC16A, 66558 }, { 0xC16B, 66560 }, { 0xC16C, 66562 }, { 0xC16D, 66564 }, { 0xC16E, 66566 }, { 0xC16F, 66568 }, { 0xC170, 66570 }, { 0xC171, 66572 }, { 0xC172, 66574 }, { 0xC173, 66576 }, { 0xC174, 66578 }, { 0xC175, 66580 }, { 0xC176, 66582 }, { 0xC177, 66584 }, { 0xC178, 66586 }, { 0xC179, 66588 }, { 0xC17A, 66590 }, { 0xC17B, 66592 }, { 0xC17C, 66594 }, { 0xC17D, 66596 }, { 0xC17E, 66598 }, { 0xC17F, 66600 }, { 0xC180, 66602 }, { 0xC181, 66604 }, { 0xC182, 66606 }, { 0xC183, 66608 }, { 0xC184, 66610 }, { 0xC185, 66612 }, { 0xC186, 66614 }, { 0xC187, 66616 }, { 0xC188, 66618 }, { 0xC189, 66620 }, { 0xC18A, 66622 }, { 0xC18B, 66624 }, { 0xC18C, 66626 }, { 0xC18D, 66628 }, { 0xC18E, 66630 }, { 0xC18F, 66632 }, { 0xC190, 66634 }, { 0xC191, 66636 }, { 0xC192, 66638 }, { 0xC193, 66640 }, { 0xC194, 66642 }, { 0xC195, 66644 }, { 0xC196, 66646 }, { 0xC197, 66648 }, { 0xC198, 66650 }, { 0xC199, 66652 }, { 0xC19A, 66654 }, { 0xC19B, 66656 }, { 0xC19C, 66658 }, { 0xC19D, 66660 }, { 0xC19E, 66662 }, { 0xC19F, 66664 }, { 0xC1A0, 66666 }, { 0xC1A1, 66668 }, { 0xC1A2, 66670 }, { 0xC1A3, 66672 }, { 0xC1A4, 66674 }, { 0xC1A5, 66676 }, { 0xC1A6, 66678 }, { 0xC1A7, 66680 }, { 0xC1A8, 66682 }, { 0xC1A9, 66684 }, { 0xC1AA, 66686 }, { 0xC1AB, 66688 }, { 0xC1AC, 66690 }, { 0xC1AD, 66692 }, { 0xC1AE, 66694 }, { 0xC1AF, 66696 }, { 0xC1B0, 66698 }, { 0xC1B1, 66700 }, { 0xC1B2, 66702 }, { 0xC1B3, 66704 }, { 0xC1B4, 66706 }, { 0xC1B5, 66708 }, { 0xC1B6, 66710 }, { 0xC1B7, 66712 }, { 0xC1B8, 66714 }, { 0xC1B9, 66716 }, { 0xC1BA, 66718 }, { 0xC1BB, 66720 }, { 0xC1BC, 66722 }, { 0xC1BD, 66724 }, { 0xC1BE, 66726 }, { 0xC1BF, 66728 }, { 0xC1C0, 66730 }, { 0xC1C1, 66732 }, { 0xC1C2, 66734 }, { 0xC1C3, 66736 }, { 0xC1C4, 66738 }, { 0xC1C5, 66740 }, { 0xC1C6, 66742 }, { 0xC1C7, 66744 }, { 0xC1C8, 66746 }, { 0xC1C9, 66748 }, { 0xC1CA, 66750 }, { 0xC1CB, 66752 }, { 0xC1CC, 66754 }, { 0xC1CD, 66756 }, { 0xC1CE, 66758 }, { 0xC1CF, 66760 }, { 0xC1D0, 66762 }, { 0xC1D1, 66764 }, { 0xC1D2, 66766 }, { 0xC1D3, 66768 }, { 0xC1D4, 66770 }, { 0xC1D5, 66772 }, { 0xC1D6, 66774 }, { 0xC1D7, 66776 }, { 0xC1D8, 66778 }, { 0xC1D9, 66780 }, { 0xC1DA, 66782 }, { 0xC1DB, 66784 }, { 0xC1DC, 66786 }, { 0xC1DD, 66788 }, { 0xC1DE, 66790 }, { 0xC1DF, 66792 }, { 0xC1E0, 66794 }, { 0xC1E1, 66796 }, { 0xC1E2, 66798 }, { 0xC1E3, 66800 }, { 0xC1E4, 66802 }, { 0xC1E5, 66804 }, { 0xC1E6, 66806 }, { 0xC1E7, 66808 }, { 0xC1E8, 66810 }, { 0xC1E9, 66812 }, { 0xC1EA, 66814 }, { 0xC1EB, 66816 }, { 0xC1EC, 66818 }, { 0xC1ED, 66820 }, { 0xC1EE, 66822 }, { 0xC1EF, 66824 }, }; #define UNICODE_CHARNAME_MAX_LENGTH 83 #define UNICODE_CHARNAME_MAX_WORDS 13 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uninorm.in.h�������������������������������������������������������������0000664�0000000�0000000�00000024322�11671051007�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization forms (composition and decomposition) of Unicode strings. Copyright (C) 2001-2002, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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); /* 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); /* 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 *resultbuf, size_t *lengthp); extern uint16_t * u16_normalize (uninorm_t nf, const uint16_t *s, size_t n, uint16_t *resultbuf, size_t *lengthp); extern uint32_t * u32_normalize (uninorm_t nf, const uint32_t *s, size_t n, uint32_t *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; /* 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); /* 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); /* 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); #ifdef __cplusplus } #endif #endif /* _UNINORM_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uninorm/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016727�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uninorm/canonical-decomposition.c����������������������������������������0000664�0000000�0000000�00000006364�11671051007�0023705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical decomposition of Unicode characters. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include <stdlib.h> #include "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 <http://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-20111211-stable/lib/uninorm/compat-decomposition.c�������������������������������������������0000664�0000000�0000000�00000002047�11671051007�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compatibility decomposition of Unicode characters. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/composition-table.gperf������������������������������������������0000664�0000000�0000000�00000101702�11671051007�0023405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Canonical composition of Unicode characters. */ /* Generated automatically by gen-uni-tables for Unicode 6.0.0. */ /* 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 <http://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 ��������������������������������������������������������������gnulib-20111211-stable/lib/uninorm/composition.c����������������������������������������������������0000664�0000000�0000000�00000005744�11671051007�0021450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Canonical composition of Unicode characters. Copyright (C) 2002, 2006, 2009, 2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/decompose-internal.c���������������������������������������������0000664�0000000�0000000�00000002174�11671051007�0022667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 merge_sort_fromto gl_uninorm_decompose_merge_sort_fromto #define merge_sort_inplace gl_uninorm_decompose_merge_sort_inplace #include "array-mergesort.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uninorm/decompose-internal.h���������������������������������������������0000664�0000000�0000000�00000002550�11671051007�0022672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/decomposing-form.c�����������������������������������������������0000664�0000000�0000000�00000001765�11671051007�0022354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposing variant of a normalization form. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/decomposition-table.c��������������������������������������������0000664�0000000�0000000�00000001662�11671051007�0023041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode characters. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm/decomposition-table.h" #include "uninorm/decomposition-table2.h" ������������������������������������������������������������������������������gnulib-20111211-stable/lib/uninorm/decomposition-table.h��������������������������������������������0000664�0000000�0000000�00000003504�11671051007�0023043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode characters. Copyright (C) 2001-2003, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 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-20111211-stable/lib/uninorm/decomposition-table1.h�������������������������������������������0000664�0000000�0000000�00000001045�11671051007�0023122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Decomposition of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ 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[20 << 5]; unsigned short level3[263 << 5]; } decomp_index_table_t; extern const decomp_index_table_t gl_uninorm_decomp_index_table; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uninorm/decomposition-table2.h�������������������������������������������0000664�0000000�0000000�00000665630�11671051007�0023143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Decomposition of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 6.0.0. */ 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, 0xA7, 0x6F, 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, 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, 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, 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, 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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 416, 448, -1, -1, -1, -1, 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, 512, 544, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 608 }, { -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, -1, -1, -1, -1, -1, -1, -1, 4640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4672, 4704, 4736, 4768, 4800, 4832, 4864, 4896, 4928, 4960, 4992, 5024, 5056, 5088, 5120, -1, 5152, 5184, 5216, 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, -1, -1, -1, -1, 6432, 6464, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6496, 6528, -1, 6560, 6592, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6624, 6656, 6688, 6720, 6752, 6784, 6816, 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, -1, -1, -1, -1, -1, -1, -1, -1, 7648, 7680, 7712, -1, 7744, -1, -1, -1, 7776, 7808, 7840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7872, 7904, 7936, 7968, 8000, 8032, 8064, 8096, 8128, 8160, 8192, 8224, 8256, 8288, 8320, 8352, 8384, -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, 37078, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 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, -1, -1, 4581, -1, 4582, -1, -1, 4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 4592, -1, 4593, -1, 4594, -1, -1, 4595, 4596, -1, -1, -1, 4597, 4598, 4599, 4600, -1, -1, 4601, 4602, 4603, 4604, 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, -1, -1, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 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, -1, -1, -1, -1, -1, -1, 37537, 37539, 37541, 37543, 37546, 37549, 37551, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37553, 37555, 37557, 37559, 37561, -1, -1, -1, -1, -1, 4795, -1, 4797, 37567, 37568, 37569, 37570, 37571, 37572, 37573, 37574, 37575, 37576, 4809, 4811, 4813, 4815, 4817, 4819, 4821, 4823, 4825, 4827, 4829, 4831, 4833, -1, 4835, 4837, 4839, 4841, 4843, -1, 4845, -1, 4847, 4849, -1, 4851, 4853, -1, 4855, 4857, 4859, 4861, 4863, 4865, 4867, 4869, 4871, 37641, 37643, 37644, 37645, 37646, 37647, 37648, 37649, 37650, 37651, 37652, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37741, 37742, 37743, 37744, 37745, 37746, 37747, 37748, 37749, 37750, 37751, 37752, 37753, 37754, 37755, 37756, 37757, 37758, 37759, 37760, 37761, 37762, 37763, 37764, 37766, 37768, 37770, 37772, 37774, 37776, 37778, 37780, 37782, 37784, 37786, 37788, 37790, 37792, 37794, 37796, 37798, 37800, 37801, 37802, 37803, 37804, 37806, 37808, 37810, 37812, 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, 37995, 37998, 38001, 38004, 38007, 38010, 38012, 38014, 38016, 38018, 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, 38297, 38300, 38303, 38305, 38307, 38309, 38311, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38449, 38452, 38455, 38458, 38461, 38464, 38467, 38470, 38473, 38476, 38479, 38482, 38485, 38488, 38491, 38494, 38497, 38500, 38503, 38506, 38509, 38512, 38515, 38518, 38521, 38524, 38527, 38530, 38533, 38536, 38539, 38542, 38545, 38548, 38551, 38554, 38557, 38560, 38563, 38566, 38569, 38572, 38575, 38578, 38581, 38584, 38587, 38590, 38593, 38596, 38599, 38602, 38605, 38608, 38611, 38614, 38617, 38620, 38623, 38626, 38629, 38632, 38635, 38638, -1, -1, 38641, 38644, 38647, 38650, 38653, 38656, 38659, 38662, 38665, 38668, 38671, 38674, 38677, 38680, 38683, 38686, 38689, 38692, 38695, 38698, 38701, 38704, 38707, 38710, 38713, 38716, 38719, 38722, 38725, 38728, 38731, 38734, 38737, 38740, 38743, 38746, 38749, 38752, 38755, 38758, 38761, 38764, 38767, 38770, 38773, 38776, 38779, 38782, 38785, 38788, 38791, 38794, 38797, 38800, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38803, 38806, 38809, 38813, 38817, 38821, 38825, 38829, 38833, 38837, 38840, 38858, 38866, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 38870, 38871, 38872, 38873, 38874, 38875, 38876, 38877, 38878, 38879, -1, -1, -1, -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, 38890, 38891, 38892, 38893, 38894, 38895, 38896, 38897, 38898, 38899, 38900, -1, -1, 38901, 38902, 38903, 38904, 38905, 38906, 38907, 38908, 38909, 38910, 38911, 38912, -1, 38913, 38914, 38915, 38916, 38917, 38918, 38919, 38920, 38921, 38922, 38923, 38924, 38925, 38926, 38927, 38928, 38929, 38930, 38931, -1, 38932, 38933, 38934, 38935, -1, -1, -1, -1, 38936, 38938, 38940, -1, 38942, -1, 38944, 38946, 38948, 38950, 38952, 38954, 38956, 38958, 38960, 38962, 38964, 38965, 38966, 38967, 38968, 38969, 38970, 38971, 38972, 38973, 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, 39083, 39085, 39087, 39089, 39091, 39093, 39095, -1, -1, -1, -1, 39097, 39098, 39099, 39100, 39101, 39102, 39103, 39104, 39105, 39106, 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, -1, -1, -1, 39287, 39288, 39289, 39290, 39291, 39292, -1, -1, 39293, 39294, 39295, 39296, 39297, 39298, -1, -1, 39299, 39300, 39301, 39302, 39303, 39304, -1, -1, 39305, 39306, 39307, -1, -1, -1, 39308, 39309, 39310, 39311, 39312, 39313, 39314, -1, 39315, 39316, 39317, 39318, 39319, 39320, 39321, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6554, -1, 6556, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6558, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6560, 6562, 6564, 6566, 6568, 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, -1, -1, -1, -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, 6578, 6580, 6582, 6584, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 39354, 39355, 39356, 39357, 39358, 39359, 39360, 39361, 39362, 39363, 39364, 39365, 39366, 39367, 39368, 39369, 39370, 39371, 39372, 39373, 39374, 39375, 39376, 39377, 39378, 39379, 39380, 39381, 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, -1, 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, 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, -1, 39510, 39511, -1, -1, 39512, -1, -1, 39513, 39514, -1, -1, 39515, 39516, 39517, 39518, -1, 39519, 39520, 39521, 39522, 39523, 39524, 39525, 39526, 39527, 39528, 39529, 39530, -1, 39531, -1, 39532, 39533, 39534, 39535, 39536, 39537, 39538, -1, 39539, 39540, 39541, 39542, 39543, 39544, 39545, 39546, 39547, 39548, 39549, 39550, 39551, 39552, 39553, 39554, 39555, 39556, 39557, 39558, 39559, 39560, 39561, 39562, 39563, 39564, 39565, 39566, 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, -1, 39604, 39605, 39606, 39607, -1, -1, 39608, 39609, 39610, 39611, 39612, 39613, 39614, 39615, -1, 39616, 39617, 39618, 39619, 39620, 39621, 39622, -1, 39623, 39624, 39625, 39626, 39627, 39628, 39629, 39630, 39631, 39632, 39633, 39634, 39635, 39636, 39637, 39638, 39639, 39640, 39641, 39642, 39643, 39644, 39645, 39646, 39647, 39648, 39649, 39650, -1, 39651, 39652, 39653, 39654, -1, 39655, 39656, 39657, 39658, 39659, -1, 39660, -1, -1, -1, 39661, 39662, 39663, 39664, 39665, 39666, 39667, -1, 39668, 39669, 39670, 39671, 39672, 39673, 39674, 39675, 39676, 39677, 39678, 39679, 39680, 39681, 39682, 39683, 39684, 39685, 39686, 39687, 39688, 39689, 39690, 39691, 39692, 39693, 39694, 39695, 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, -1, -1, 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, 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, -1, -1, 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, 40328, 40329, 40330, 40331, 40332, 40333, 40334, 40335, 40336, 40337, 40338, 40339, 40340, 40341, 40342, 40343, 40344, 40345, 40346, 40347, 40348, 40349, 40350, 40352, 40354, 40356, 40358, 40360, 40362, 40364, 40366, 40368, 40370, -1, -1, -1, -1, -1, 40372, 40375, 40378, 40381, 40384, 40387, 40390, 40393, 40396, 40399, 40402, 40405, 40408, 40411, 40414, 40417, 40420, 40423, 40426, 40429, 40432, 40435, 40438, 40441, 40444, 40447, 40450, 40453, 40454, 40455, 40457, -1, 40459, 40460, 40461, 40462, 40463, 40464, 40465, 40466, 40467, 40468, 40469, 40470, 40471, 40472, 40473, 40474, 40475, 40476, 40477, 40478, 40479, 40480, 40481, 40482, 40483, 40484, 40485, 40487, 40489, 40491, 40493, 40496, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40498, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40500, 40502, 40504, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40505, 40506, 40507, 40508, 40509, 40510, 40511, 40512, 40513, 40514, 40515, 40516, 40517, 40518, 40519, 40520, 40521, 40522, 40523, 40524, 40525, 40526, 40527, 40528, 40529, 40530, 40531, 40532, 40533, 40534, 40535, 40536, 40537, 40538, 40539, 40540, 40541, 40542, 40543, 40544, 40545, 40546, 40547, -1, -1, -1, -1, -1, 40548, 40551, 40554, 40557, 40560, 40563, 40566, 40569, 40572, -1, -1, -1, -1, -1, -1, -1, 40575, 40576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7809, 7810, 7811, 7812, 7813, 7814, 7815, 7816, 7817, 7818, 7819, 7820, 7821, 7822, 7823, 7824, 7825, 7826, 7827, 7828, 7829, 7830, 7831, 7832, 7833, 7834, 7835, 7836, 7837, 7838, 7839, 7840, 7841, 7842, 7843, 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7851, 7852, 7853, 7854, 7855, 7856, 7857, 7858, 7859, 7860, 7861, 7862, 7863, 7864, 7865, 7866, 7867, 7868, 7869, 7870, 7871, 7872, 7873, 7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881, 7882, 7883, 7884, 7885, 7886, 7887, 7888, 7889, 7890, 7891, 7892, 7893, 7894, 7895, 7896, 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7906, 7907, 7908, 7909, 7910, 7911, 7912, 7913, 7914, 7915, 7916, 7917, 7918, 7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7927, 7928, 7929, 7930, 7931, 7932, 7933, 7934, 7935, 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957, 7958, 7959, 7960, 7961, 7962, 7963, 7964, 7965, 7966, 7967, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, 7976, 7977, 7978, 7979, 7980, 7981, 7982, 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, -1, -1 } }; ��������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uninorm/decomposition.c��������������������������������������������������0000664�0000000�0000000�00000006115�11671051007�0021752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition of Unicode characters. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "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 <http://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-20111211-stable/lib/uninorm/nfc.c������������������������������������������������������������0000664�0000000�0000000�00000002047�11671051007�0017644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode Normalization Form C. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/nfd.c������������������������������������������������������������0000664�0000000�0000000�00000002017�11671051007�0017642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode Normalization Form D. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/nfkc.c�����������������������������������������������������������0000664�0000000�0000000�00000002142�11671051007�0020013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode Normalization Form KC. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "normalize-internal.h" #include "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-20111211-stable/lib/uninorm/nfkd.c�����������������������������������������������������������0000664�0000000�0000000�00000002106�11671051007�0020014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode Normalization Form KD. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uninorm.h" #include "normalize-internal.h" #include "decompose-internal.h" const struct unicode_normalization_form uninorm_nfkd = { NF_IS_COMPAT_DECOMPOSING, uc_compat_decomposition, NULL, &uninorm_nfkd }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uninorm/normalize-internal.h���������������������������������������������0000664�0000000�0000000�00000002715�11671051007�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u-normalize-internal.h�������������������������������������������0000664�0000000�0000000�00000033076�11671051007�0023165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposition and composition of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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)); 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-20111211-stable/lib/uninorm/u-normcmp.h������������������������������������������������������0000664�0000000�0000000�00000003555�11671051007�0021025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u-normcoll.h�����������������������������������������������������0000664�0000000�0000000�00000003760�11671051007�0021175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, normalization insensitive comparison of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u-normxfrm.h�����������������������������������������������������0000664�0000000�0000000�00000004754�11671051007�0021224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for comparison of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u16-normalize.c��������������������������������������������������0000664�0000000�0000000�00000002332�11671051007�0021504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization of UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "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-20111211-stable/lib/uninorm/u16-normcmp.c����������������������������������������������������0000664�0000000�0000000�00000002130�11671051007�0021153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u16-normcoll.c���������������������������������������������������0000664�0000000�0000000�00000002077�11671051007�0021337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, normalization insensitive comparison of UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u16-normxfrm.c���������������������������������������������������0000664�0000000�0000000�00000002231�11671051007�0021352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for comparison of UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u32-normalize.c��������������������������������������������������0000664�0000000�0000000�00000002332�11671051007�0021502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization of UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "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-20111211-stable/lib/uninorm/u32-normcmp.c����������������������������������������������������0000664�0000000�0000000�00000002130�11671051007�0021151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u32-normcoll.c���������������������������������������������������0000664�0000000�0000000�00000002077�11671051007�0021335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, normalization insensitive comparison of UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u32-normxfrm.c���������������������������������������������������0000664�0000000�0000000�00000002231�11671051007�0021350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for comparison of UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u8-normalize.c���������������������������������������������������0000664�0000000�0000000�00000002324�11671051007�0021426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization of UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "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-20111211-stable/lib/uninorm/u8-normcmp.c�����������������������������������������������������0000664�0000000�0000000�00000002123�11671051007�0021076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u8-normcoll.c����������������������������������������������������0000664�0000000�0000000�00000002073�11671051007�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent, normalization insensitive comparison of UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/u8-normxfrm.c����������������������������������������������������0000664�0000000�0000000�00000002224�11671051007�0021275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale dependent transformation for comparison of UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uninorm/uninorm-filter.c�������������������������������������������������0000664�0000000�0000000�00000031752�11671051007�0022055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stream-based normalization of Unicode strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 "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 * const 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)); 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; } filter->sortbuf[sortbuf_count].code = uc; filter->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-20111211-stable/lib/unistd--.h���������������������������������������������������������������0000664�0000000�0000000�00000001743�11671051007�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like unistd.h, but redefine some names to avoid glitches. Copyright (C) 2005, 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 <http://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-20111211-stable/lib/unistd-safer.h�����������������������������������������������������������0000664�0000000�0000000�00000002034�11671051007�0020014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke unistd-like functions, but avoid some glitches. Copyright (C) 2001, 2003, 2005, 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 <http://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-20111211-stable/lib/unistd.in.h��������������������������������������������������������������0000664�0000000�0000000�00000141532�11671051007�0017332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <unistd.h>. Copyright (C) 2003-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Special invocation convention: - On mingw, several headers, including <winsock2.h>, include <unistd.h>, but we need to ensure that both the system <unistd.h> and <winsock2.h> are completely included before we replace gethostname. */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_WINSOCK2_H_WITNESS && defined _WINSOCK2_H /* <unistd.h> is being indirectly included for the first time from <winsock2.h>; avoid declaring any overrides. */ # if @HAVE_UNISTD_H@ # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # else # error unexpected; report this to bug-gnulib@gnu.org # endif # define _GL_WINSOCK2_H_WITNESS /* Normal invocation. */ #elif !defined _@GUARD_PREFIX@_UNISTD_H /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # @INCLUDE_NEXT@ @NEXT_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. */ #include <stddef.h> /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ /* 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_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include <stdio.h> #endif /* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ && ! 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>. */ /* But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stdlib.h> #endif /* Native Windows platforms declare chdir, getcwd, rmdir in <io.h> and/or <direct.h>, not in <unistd.h>. */ #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #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 /* MSVC defines off_t in <sys/types.h>. */ #if !@HAVE_UNISTD_H@ /* Get off_t. */ # include <sys/types.h> #endif #if (@GNULIB_READ@ || @GNULIB_WRITE@ \ || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) /* Get ssize_t. */ # include <sys/types.h> #endif /* Get getopt(), optarg, optind, opterr, optopt. But avoid namespace pollution on glibc systems. */ #if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT # include <getopt.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. */ /* 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 defined GNULIB_POSIXCHECK /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "the access function is a security risk - " "use the gnulib module faccessat instead"); #endif #if @GNULIB_CHDIR@ _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); _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 #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 <http://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)); # 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"); #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)); # 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 #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 <http://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)); # else # if !@HAVE_DUP2@ _GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); # endif _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 #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 <http://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 !@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 <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 static inline char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is unportable - " "use gnulib module environ for portability"); # 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_FACCESSAT@ # 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)); _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 <http://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 openat 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 <http://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 <http://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 <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); _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 <http://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)); # 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 #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 !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif _GL_CXXALIAS_SYS (getdtablesize, int, (void)); _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_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 <http://www.opengroup.org/susv3xsh/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_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 <http://www.opengroup.org/susv3xsh/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 # 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 static 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_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_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 <http://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 <http://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 <http://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)); # 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 #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 <http://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 <http://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 <http://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 <http://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)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (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 <http://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 *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *file, char *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 !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len)); _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)); # 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 #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 <http://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_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 !@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)); _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_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)); # 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 #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 openat 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 <http://www.opengroup.org/susv3xsh/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 _GL_CXXALIAS_SYS (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 <http://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)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistdio.in.h������������������������������������������������������������0000664�0000000�0000000�00000022354�11671051007�0017662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Elementary Unicode string functions. Copyright (C) 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 *buf, const char *format, ...); extern int ulc_snprintf (char *buf, size_t size, const char *format, ...); extern int ulc_asprintf (char **resultp, const char *format, ...); extern char * ulc_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...); extern int ulc_vsprintf (char *buf, const char *format, va_list ap); extern int ulc_vsnprintf (char *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 *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 *buf, const uint8_t *format, ...); extern int u8_u8_snprintf (uint8_t *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 *resultbuf, size_t *lengthp, const uint8_t *format, ...); extern int u8_u8_vsprintf (uint8_t *buf, const uint8_t *format, va_list ap); extern int u8_u8_vsnprintf (uint8_t *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 *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 *buf, const uint16_t *format, ...); extern int u16_u16_snprintf (uint16_t *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 *resultbuf, size_t *lengthp, const uint16_t *format, ...); extern int u16_u16_vsprintf (uint16_t *buf, const uint16_t *format, va_list ap); extern int u16_u16_vsnprintf (uint16_t *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 *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 *buf, const uint32_t *format, ...); extern int u32_u32_snprintf (uint32_t *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 *resultbuf, size_t *lengthp, const uint32_t *format, ...); extern int u32_u32_vsprintf (uint32_t *buf, const uint32_t *format, va_list ap); extern int u32_u32_vsnprintf (uint32_t *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 *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-20111211-stable/lib/unistdio/����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017076�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistdio/u-asnprintf.h���������������������������������������������������0000664�0000000�0000000�00000002006�11671051007�0021513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u-asprintf.h����������������������������������������������������0000664�0000000�0000000�00000001734�11671051007�0021344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u-printf-args.c�������������������������������������������������0000664�0000000�0000000�00000001576�11671051007�0021751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistdio/u-printf-args.h" #include "printf-args.c" ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistdio/u-printf-args.h�������������������������������������������������0000664�0000000�0000000�00000002006�11671051007�0021743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u-printf-parse.h������������������������������������������������0000664�0000000�0000000�00000002000�11671051007�0022113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse printf format string. Copyright (C) 1999, 2002, 2005, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u-snprintf.h����������������������������������������������������0000664�0000000�0000000�00000001746�11671051007�0021364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u-sprintf.h�����������������������������������������������������0000664�0000000�0000000�00000001721�11671051007�0021177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u-vasprintf.h���������������������������������������������������0000664�0000000�0000000�00000002230�11671051007�0021522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2011 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 <http://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-20111211-stable/lib/unistdio/u-vsnprintf.h���������������������������������������������������0000664�0000000�0000000�00000003041�11671051007�0021540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2011 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 <http://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-20111211-stable/lib/unistdio/u-vsprintf.h����������������������������������������������������0000664�0000000�0000000�00000003702�11671051007�0021366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2011 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 <http://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-20111211-stable/lib/unistdio/u16-asnprintf.c�������������������������������������������������0000664�0000000�0000000�00000001761�11671051007�0021664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-asprintf.c��������������������������������������������������0000664�0000000�0000000�00000001754�11671051007�0021510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-printf-parse.c����������������������������������������������0000664�0000000�0000000�00000002001�11671051007�0022256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-snprintf.c��������������������������������������������������0000664�0000000�0000000�00000001754�11671051007�0021525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-sprintf.c���������������������������������������������������0000664�0000000�0000000�00000001747�11671051007�0021351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-u16-asnprintf.c���������������������������������������������0000664�0000000�0000000�00000001775�11671051007�0022302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-u16-asprintf.c����������������������������������������������0000664�0000000�0000000�00000001770�11671051007�0022117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-u16-snprintf.c����������������������������������������������0000664�0000000�0000000�00000001770�11671051007�0022134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-u16-sprintf.c�����������������������������������������������0000664�0000000�0000000�00000001763�11671051007�0021760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-u16-vasnprintf.c��������������������������������������������0000664�0000000�0000000�00000003267�11671051007�0022466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-16 strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-u16-vasprintf.c���������������������������������������������0000664�0000000�0000000�00000002044�11671051007�0022300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-u16-vsnprintf.c���������������������������������������������0000664�0000000�0000000�00000002146�11671051007�0022320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-u16-vsprintf.c����������������������������������������������0000664�0000000�0000000�00000002111�11671051007�0022132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-vasnprintf.c������������������������������������������������0000664�0000000�0000000�00000003306�11671051007�0022047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-16 strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 ASCII_ONLY 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-20111211-stable/lib/unistdio/u16-vasprintf.c�������������������������������������������������0000664�0000000�0000000�00000002030�11671051007�0021662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-vsnprintf.c�������������������������������������������������0000664�0000000�0000000�00000002132�11671051007�0021702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u16-vsprintf.c��������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0021532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-asnprintf.c�������������������������������������������������0000664�0000000�0000000�00000001761�11671051007�0021662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-asprintf.c��������������������������������������������������0000664�0000000�0000000�00000001754�11671051007�0021506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-printf-parse.c����������������������������������������������0000664�0000000�0000000�00000002001�11671051007�0022254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-snprintf.c��������������������������������������������������0000664�0000000�0000000�00000001754�11671051007�0021523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-sprintf.c���������������������������������������������������0000664�0000000�0000000�00000001747�11671051007�0021347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-u32-asnprintf.c���������������������������������������������0000664�0000000�0000000�00000001775�11671051007�0022276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-u32-asprintf.c����������������������������������������������0000664�0000000�0000000�00000001770�11671051007�0022113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-u32-snprintf.c����������������������������������������������0000664�0000000�0000000�00000001770�11671051007�0022130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-u32-sprintf.c�����������������������������������������������0000664�0000000�0000000�00000001763�11671051007�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-u32-vasnprintf.c��������������������������������������������0000664�0000000�0000000�00000003267�11671051007�0022462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-32 strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-u32-vasprintf.c���������������������������������������������0000664�0000000�0000000�00000002044�11671051007�0022274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-u32-vsnprintf.c���������������������������������������������0000664�0000000�0000000�00000002146�11671051007�0022314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-u32-vsprintf.c����������������������������������������������0000664�0000000�0000000�00000002111�11671051007�0022126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-vasnprintf.c������������������������������������������������0000664�0000000�0000000�00000003306�11671051007�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-32 strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 ASCII_ONLY 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-20111211-stable/lib/unistdio/u32-vasprintf.c�������������������������������������������������0000664�0000000�0000000�00000002030�11671051007�0021660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-vsnprintf.c�������������������������������������������������0000664�0000000�0000000�00000002132�11671051007�0021700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u32-vsprintf.c��������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0021530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-asnprintf.c��������������������������������������������������0000664�0000000�0000000�00000001756�11671051007�0021611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-asprintf.c���������������������������������������������������0000664�0000000�0000000�00000001751�11671051007�0021426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-printf-parse.c�����������������������������������������������0000664�0000000�0000000�00000001775�11671051007�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-snprintf.c���������������������������������������������������0000664�0000000�0000000�00000001751�11671051007�0021443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-sprintf.c����������������������������������������������������0000664�0000000�0000000�00000001744�11671051007�0021267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-u8-asnprintf.c�����������������������������������������������0000664�0000000�0000000�00000001767�11671051007�0022145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-u8-asprintf.c������������������������������������������������0000664�0000000�0000000�00000001762�11671051007�0021762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-u8-snprintf.c������������������������������������������������0000664�0000000�0000000�00000001762�11671051007�0021777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-u8-sprintf.c�������������������������������������������������0000664�0000000�0000000�00000001755�11671051007�0021623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-u8-vasnprintf.c����������������������������������������������0000664�0000000�0000000�00000003251�11671051007�0022321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-8 strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-u8-vasprintf.c�����������������������������������������������0000664�0000000�0000000�00000002036�11671051007�0022143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-u8-vsnprintf.c�����������������������������������������������0000664�0000000�0000000�00000002137�11671051007�0022162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-u8-vsprintf.c������������������������������������������������0000664�0000000�0000000�00000002103�11671051007�0021775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-vasnprintf.c�������������������������������������������������0000664�0000000�0000000�00000003275�11671051007�0021775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to UTF-8 strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 ASCII_ONLY 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-20111211-stable/lib/unistdio/u8-vasprintf.c��������������������������������������������������0000664�0000000�0000000�00000002025�11671051007�0021607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-vsnprintf.c��������������������������������������������������0000664�0000000�0000000�00000002126�11671051007�0021626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/u8-vsprintf.c���������������������������������������������������0000664�0000000�0000000�00000002072�11671051007�0021450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-asnprintf.c�������������������������������������������������0000664�0000000�0000000�00000001755�11671051007�0022037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-asprintf.c��������������������������������������������������0000664�0000000�0000000�00000001750�11671051007�0021654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-fprintf.c���������������������������������������������������0000664�0000000�0000000�00000003321�11671051007�0021472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-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 <http://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-20111211-stable/lib/unistdio/ulc-printf-parse.c����������������������������������������������0000664�0000000�0000000�00000002033�11671051007�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-snprintf.c��������������������������������������������������0000664�0000000�0000000�00000001750�11671051007�0021671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-sprintf.c���������������������������������������������������0000664�0000000�0000000�00000001743�11671051007�0021515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2005-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-vasnprintf.c������������������������������������������������0000664�0000000�0000000�00000003046�11671051007�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-vasprintf.c�������������������������������������������������0000664�0000000�0000000�00000002024�11671051007�0022035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-vfprintf.c��������������������������������������������������0000664�0000000�0000000�00000003237�11671051007�0021666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-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 <http://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-20111211-stable/lib/unistdio/ulc-vsnprintf.c�������������������������������������������������0000664�0000000�0000000�00000002125�11671051007�0022054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistdio/ulc-vsprintf.c��������������������������������������������������0000664�0000000�0000000�00000002071�11671051007�0021676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr.in.h��������������������������������������������������������������0000664�0000000�0000000�00000052256�11671051007�0017354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Elementary Unicode string functions. Copyright (C) 2001-2002, 2005-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _UNISTR_H #define _UNISTR_H #include "unitypes.h" /* Get common macros for C. */ #include "unused-parameter.h" /* Get bool. */ #include <stdbool.h> /* Get size_t. */ #include <stddef.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); /* 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); /* 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); /* 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); extern int u16_mblen (const uint16_t *s, size_t n); extern int u32_mblen (const uint32_t *s, size_t n); /* 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 _safe suffix are safe, even if the library is compiled without --enable-safety. */ #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, size_t n _GL_UNUSED_PARAMETER) { uint32_t c = *s; # if CONFIG_UNICODE_SAFETY if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) # endif *puc = c; # if CONFIG_UNICODE_SAFETY else /* invalid multibyte character */ *puc = 0xfffd; # endif 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, size_t n _GL_UNUSED_PARAMETER) { 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, int n); # if !HAVE_INLINE extern int u8_uctomb (uint8_t *s, ucs4_t uc, int n); # else static inline int u8_uctomb (uint8_t *s, ucs4_t uc, int 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, int n); # if !HAVE_INLINE extern int u16_uctomb (uint16_t *s, ucs4_t uc, int n); # else static inline int u16_uctomb (uint16_t *s, ucs4_t uc, int 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, int n); # else static inline int u32_uctomb (uint32_t *s, ucs4_t uc, int 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 *dest, const uint8_t *src, size_t n); extern uint16_t * u16_cpy (uint16_t *dest, const uint16_t *src, size_t n); extern uint32_t * u32_cpy (uint32_t *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); extern int u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n); extern int u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n); /* 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); extern int u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2); extern int u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2); /* 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); extern uint16_t * u16_chr (const uint16_t *s, size_t n, ucs4_t uc); extern uint32_t * u32_chr (const uint32_t *s, size_t n, ucs4_t uc); /* 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); extern size_t u16_mbsnlen (const uint16_t *s, size_t n); extern size_t u32_mbsnlen (const uint32_t *s, size_t n); /* 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); extern int u16_strmblen (const uint16_t *s); extern int u32_strmblen (const uint32_t *s); /* 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); extern size_t u16_strlen (const uint16_t *s); extern size_t u32_strlen (const uint32_t *s); /* 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); extern size_t u16_strnlen (const uint16_t *s, size_t maxlen); extern size_t u32_strnlen (const uint32_t *s, size_t maxlen); /* Copy SRC to DEST. */ /* Similar to strcpy(), wcscpy(). */ extern uint8_t * u8_strcpy (uint8_t *dest, const uint8_t *src); extern uint16_t * u16_strcpy (uint16_t *dest, const uint16_t *src); extern uint32_t * u32_strcpy (uint32_t *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 *dest, const uint8_t *src); extern uint16_t * u16_stpcpy (uint16_t *dest, const uint16_t *src); extern uint32_t * u32_stpcpy (uint32_t *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 *dest, const uint8_t *src, size_t n); extern uint16_t * u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n); extern uint32_t * u32_strncpy (uint32_t *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 *dest, const uint8_t *src, size_t n); extern uint16_t * u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n); extern uint32_t * u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n); /* Append SRC onto DEST. */ /* Similar to strcat(), wcscat(). */ extern uint8_t * u8_strcat (uint8_t *dest, const uint8_t *src); extern uint16_t * u16_strcat (uint16_t *dest, const uint16_t *src); extern uint32_t * u32_strcat (uint32_t *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 *dest, const uint8_t *src, size_t n); extern uint16_t * u16_strncat (uint16_t *dest, const uint16_t *src, size_t n); extern uint32_t * u32_strncat (uint32_t *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); # define u8_strcmp u8_strcmp_gnu #else extern int u8_strcmp (const uint8_t *s1, const uint8_t *s2); #endif extern int u16_strcmp (const uint16_t *s1, const uint16_t *s2); extern int u32_strcmp (const uint32_t *s1, const uint32_t *s2); /* 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); extern int u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n); extern int u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n); /* Duplicate S, returning an identical malloc'd string. */ /* Similar to strdup(), wcsdup(). */ extern uint8_t * u8_strdup (const uint8_t *s); extern uint16_t * u16_strdup (const uint16_t *s); extern uint32_t * u32_strdup (const uint32_t *s); /* Find the first occurrence of UC in STR. */ /* Similar to strchr(), wcschr(). */ extern uint8_t * u8_strchr (const uint8_t *str, ucs4_t uc); extern uint16_t * u16_strchr (const uint16_t *str, ucs4_t uc); extern uint32_t * u32_strchr (const uint32_t *str, ucs4_t uc); /* Find the last occurrence of UC in STR. */ /* Similar to strrchr(), wcsrchr(). */ extern uint8_t * u8_strrchr (const uint8_t *str, ucs4_t uc); extern uint16_t * u16_strrchr (const uint16_t *str, ucs4_t uc); extern uint32_t * u32_strrchr (const uint32_t *str, ucs4_t uc); /* 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); extern size_t u16_strcspn (const uint16_t *str, const uint16_t *reject); extern size_t u32_strcspn (const uint32_t *str, const uint32_t *reject); /* 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); extern size_t u16_strspn (const uint16_t *str, const uint16_t *accept); extern size_t u32_strspn (const uint32_t *str, const uint32_t *accept); /* 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); extern uint16_t * u16_strpbrk (const uint16_t *str, const uint16_t *accept); extern uint32_t * u32_strpbrk (const uint32_t *str, const uint32_t *accept); /* 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); extern uint16_t * u16_strstr (const uint16_t *haystack, const uint16_t *needle); extern uint32_t * u32_strstr (const uint32_t *haystack, const uint32_t *needle); /* Test whether STR starts with PREFIX. */ extern bool u8_startswith (const uint8_t *str, const uint8_t *prefix); extern bool u16_startswith (const uint16_t *str, const uint16_t *prefix); extern bool u32_startswith (const uint32_t *str, const uint32_t *prefix); /* Test whether STR ends with SUFFIX. */ extern bool u8_endswith (const uint8_t *str, const uint8_t *suffix); extern bool u16_endswith (const uint16_t *str, const uint16_t *suffix); extern bool u32_endswith (const uint32_t *str, const uint32_t *suffix); /* 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 *str, const uint8_t *delim, uint8_t **ptr); extern uint16_t * u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr); extern uint32_t * u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr); #ifdef __cplusplus } #endif #endif /* _UNISTR_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/������������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016564�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u-cmp2.h����������������������������������������������������������0000664�0000000�0000000�00000002045�11671051007�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-8/UTF-16/UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) { if (n1 < n2) cmp = -1; else if (n1 > n2) cmp = 1; } return cmp; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u-cpy-alloc.h�����������������������������������������������������0000664�0000000�0000000�00000002304�11671051007�0021061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 memcpy ((char *) dest, (const char *) s, n * sizeof (UNIT)); #endif } return dest; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u-cpy.h�����������������������������������������������������������0000664�0000000�0000000�00000002101�11671051007�0017764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 memcpy ((char *) dest, (const char *) src, n * sizeof (UNIT)); #endif return dest; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u-endswith.h������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8/UTF-16/UTF-32 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-move.h����������������������������������������������������������0000664�0000000�0000000�00000002470�11671051007�0020150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-set.h�����������������������������������������������������������0000664�0000000�0000000�00000002174�11671051007�0017776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-startswith.h����������������������������������������������������0000664�0000000�0000000�00000002037�11671051007�0021415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8/UTF-16/UTF-32 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-stpcpy.h��������������������������������������������������������0000664�0000000�0000000�00000001661�11671051007�0020525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *dest, const UNIT *src) { for (; (*dest = *src) != 0; src++, dest++) ; return dest; } �������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u-stpncpy.h�������������������������������������������������������0000664�0000000�0000000�00000002202�11671051007�0020673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strcat.h��������������������������������������������������������0000664�0000000�0000000�00000001752�11671051007�0020504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-8/UTF-16/UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strcoll.h�������������������������������������������������������0000664�0000000�0000000�00000006044�11671051007�0020665�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-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u-strcpy.h��������������������������������������������������������0000664�0000000�0000000�00000001720�11671051007�0020523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ UNIT * FUNC (UNIT *dest, const UNIT *src) { UNIT *destptr = dest; for (; (*destptr = *src) != 0; src++, destptr++) ; return dest; } ������������������������������������������������gnulib-20111211-stable/lib/unistr/u-strcspn.h�������������������������������������������������������0000664�0000000�0000000�00000003124�11671051007�0020673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strdup.h��������������������������������������������������������0000664�0000000�0000000�00000002304�11671051007�0020517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strlen.h��������������������������������������������������������0000664�0000000�0000000�00000001676�11671051007�0020520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine length of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ size_t FUNC (const UNIT *s) { const UNIT *ptr; for (ptr = s; *ptr != 0; ptr++) ; return ptr - s; } ������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u-strncat.h�������������������������������������������������������0000664�0000000�0000000�00000002042�11671051007�0020653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-8/UTF-16/UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strncpy.h�������������������������������������������������������0000664�0000000�0000000�00000002172�11671051007�0020703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strnlen.h�������������������������������������������������������0000664�0000000�0000000�00000001755�11671051007�0020674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine bounded length of UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strpbrk.h�������������������������������������������������������0000664�0000000�0000000�00000002612�11671051007�0020667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strspn.h��������������������������������������������������������0000664�0000000�0000000�00000003124�11671051007�0020530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u-strstr.h��������������������������������������������������������0000664�0000000�0000000�00000010761�11671051007�0020545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8/UTF-16/UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2010-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002, 2005. 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 <http://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-20111211-stable/lib/unistr/u-strtok.h��������������������������������������������������������0000664�0000000�0000000�00000002667�11671051007�0020540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenize UTF-8/UTF-16/UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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) { /* NUL-terminate the token. */ *token_end = 0; *ptr = token_end + 1; } else *ptr = NULL; } return str; } �������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-check.c�������������������������������������������������������0000664�0000000�0000000�00000002671�11671051007�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check UTF-16 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 utf16-ucs4.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-20111211-stable/lib/unistr/u16-chr.c���������������������������������������������������������0000664�0000000�0000000�00000002776�11671051007�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in piece of UTF-16 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-cmp.c���������������������������������������������������������0000664�0000000�0000000�00000003336�11671051007�0020125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-cmp2.c��������������������������������������������������������0000664�0000000�0000000�00000001733�11671051007�0020206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u16-cpy-alloc.c���������������������������������������������������0000664�0000000�0000000�00000001707�11671051007�0021231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-cpy.c���������������������������������������������������������0000664�0000000�0000000�00000001673�11671051007�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_cpy #define UNIT uint16_t #include "u-cpy.h" ���������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-endswith.c����������������������������������������������������0000664�0000000�0000000�00000001767�11671051007�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-16 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-mblen.c�������������������������������������������������������0000664�0000000�0000000�00000002645�11671051007�0020445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 utf16-ucs4.c. */ uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) return (c != 0 ? 1 : 0); #if CONFIG_UNICODE_SAFETY if (c < 0xdc00) { if (n >= 2 && s[1] >= 0xdc00 && s[1] < 0xe000) return 2; } #else { if (n >= 2) return 2; } #endif } /* invalid or incomplete multibyte character */ return -1; } �������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-mbsnlen.c�����������������������������������������������������0000664�0000000�0000000�00000002310�11671051007�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count characters in UTF-16 string. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u16-mbtouc-aux.c��������������������������������������������������0000664�0000000�0000000�00000002663�11671051007�0021434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UTF-16 to UCS-4. Copyright (C) 2001-2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u16-mbtouc-unsafe-aux.c�������������������������������������������0000664�0000000�0000000�00000002774�11671051007�0022716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UTF-16 to UCS-4. Copyright (C) 2001-2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 CONFIG_UNICODE_SAFETY if (c < 0xdc00) #endif { if (n >= 2) { #if CONFIG_UNICODE_SAFETY if (s[1] >= 0xdc00 && s[1] < 0xe000) #endif { *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-20111211-stable/lib/unistr/u16-mbtouc-unsafe.c�����������������������������������������������0000664�0000000�0000000�00000003326�11671051007�0022115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 CONFIG_UNICODE_SAFETY if (c < 0xdc00) #endif { if (n >= 2) { #if CONFIG_UNICODE_SAFETY if (s[1] >= 0xdc00 && s[1] < 0xe000) #endif { *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-20111211-stable/lib/unistr/u16-mbtouc.c������������������������������������������������������0000664�0000000�0000000�00000003203�11671051007�0020630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u16-mbtoucr.c�����������������������������������������������������0000664�0000000�0000000�00000003037�11671051007�0021017�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-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u16-move.c��������������������������������������������������������0000664�0000000�0000000�00000001675�11671051007�0020320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_move #define UNIT uint16_t #include "u-move.h" �������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-next.c��������������������������������������������������������0000664�0000000�0000000�00000002160�11671051007�0020316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over next character in UTF-16 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-prev.c��������������������������������������������������������0000664�0000000�0000000�00000003073�11671051007�0020320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over previous character in UTF-16 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if (c_1 >= 0xdc00) #endif if (s - 1 != start) { uint16_t c_2 = s[-2]; #if CONFIG_UNICODE_SAFETY if (c_2 >= 0xd800 && c_2 < 0xdc00) #endif { *puc = 0x10000 + ((c_2 - 0xd800) << 10) + (c_1 - 0xdc00); return s - 2; } } } return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-set.c���������������������������������������������������������0000664�0000000�0000000�00000001775�11671051007�0020146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-startswith.c��������������������������������������������������0000664�0000000�0000000�00000001711�11671051007�0021555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-16 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_startswith #define UNIT uint16_t #include "u-startswith.h" �������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-stpcpy.c������������������������������������������������������0000664�0000000�0000000�00000001700�11671051007�0020661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_stpcpy #define UNIT uint16_t #include "u-stpcpy.h" ����������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-stpncpy.c�����������������������������������������������������0000664�0000000�0000000�00000001672�11671051007�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_stpncpy #define UNIT uint16_t #include "u-stpncpy.h" ����������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-strcat.c������������������������������������������������������0000664�0000000�0000000�00000001734�11671051007�0020646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strchr.c������������������������������������������������������0000664�0000000�0000000�00000003145�11671051007�0020651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-16 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strcmp.c������������������������������������������������������0000664�0000000�0000000�00000003241�11671051007�0020651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strcoll.c�����������������������������������������������������0000664�0000000�0000000�00000002200�11671051007�0021015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-16 strings using the collation rules of the current locale. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u16-strcpy.c������������������������������������������������������0000664�0000000�0000000�00000001670�11671051007�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strcpy #define UNIT uint16_t #include "u-strcpy.h" ������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-strcspn.c�����������������������������������������������������0000664�0000000�0000000�00000002055�11671051007�0021037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strdup.c������������������������������������������������������0000664�0000000�0000000�00000001724�11671051007�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strlen.c������������������������������������������������������0000664�0000000�0000000�00000001707�11671051007�0020655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine length of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strlen #define UNIT uint16_t #include "u-strlen.h" ���������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-strmblen.c����������������������������������������������������0000664�0000000�0000000�00000002450�11671051007�0021170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 utf16-ucs4.c. */ uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) return (c != 0 ? 1 : 0); #if CONFIG_UNICODE_SAFETY if (c < 0xdc00) { if (s[1] >= 0xdc00 && s[1] < 0xe000) return 2; } #else if (s[1] != 0) return 2; #endif /* invalid or incomplete multibyte character */ return -1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-strmbtouc.c���������������������������������������������������0000664�0000000�0000000�00000002704�11671051007�0021366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-16 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 utf16-ucs4.c. */ uint16_t c = *s; if (c < 0xd800 || c >= 0xe000) { *puc = c; return (c != 0 ? 1 : 0); } #if CONFIG_UNICODE_SAFETY if (c < 0xdc00) #endif { #if CONFIG_UNICODE_SAFETY if (s[1] >= 0xdc00 && s[1] < 0xe000) #else if (s[1] != 0) #endif { *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); return 2; } } /* invalid or incomplete multibyte character */ return -1; } ������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-strncat.c�����������������������������������������������������0000664�0000000�0000000�00000001736�11671051007�0021026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strncmp.c�����������������������������������������������������0000664�0000000�0000000�00000003400�11671051007�0021024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strncpy.c�����������������������������������������������������0000664�0000000�0000000�00000001672�11671051007�0021051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strncpy #define UNIT uint16_t #include "u-strncpy.h" ����������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u16-strnlen.c�����������������������������������������������������0000664�0000000�0000000�00000001721�11671051007�0021027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine bounded length of UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u16_strnlen #define UNIT uint16_t #include "u-strnlen.h" �����������������������������������������������gnulib-20111211-stable/lib/unistr/u16-strpbrk.c�����������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0021023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strrchr.c�����������������������������������������������������0000664�0000000�0000000�00000003475�11671051007�0021041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-16 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strspn.c������������������������������������������������������0000664�0000000�0000000�00000002101�11671051007�0020664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strstr.c������������������������������������������������������0000664�0000000�0000000�00000002307�11671051007�0020704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-16 strings. Copyright (C) 1999, 2002, 2006, 2010-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-strtok.c������������������������������������������������������0000664�0000000�0000000�00000001766�11671051007�0020701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenize UTF-16 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 #include "u-strtok.h" ����������gnulib-20111211-stable/lib/unistr/u16-to-u32.c������������������������������������������������������0000664�0000000�0000000�00000006561�11671051007�0020402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-16 string to UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-to-u8.c�������������������������������������������������������0000664�0000000�0000000�00000007305�11671051007�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-16 string to UTF-8 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u16-uctomb-aux.c��������������������������������������������������0000664�0000000�0000000�00000003005�11671051007�0021423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UCS-4 to UTF-16. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u16_uctomb_aux (uint16_t *s, ucs4_t uc, int 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-20111211-stable/lib/unistr/u16-uctomb.c������������������������������������������������������0000664�0000000�0000000�00000003351�11671051007�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Store a character in UTF-16 string. Copyright (C) 2002, 2005-2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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, int 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-20111211-stable/lib/unistr/u32-check.c�������������������������������������������������������0000664�0000000�0000000�00000002236�11671051007�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check UTF-32 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-chr.c���������������������������������������������������������0000664�0000000�0000000�00000002064�11671051007�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in piece of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-cmp.c���������������������������������������������������������0000664�0000000�0000000�00000002402�11671051007�0020114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-cmp2.c��������������������������������������������������������0000664�0000000�0000000�00000001733�11671051007�0020204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u32-cpy-alloc.c���������������������������������������������������0000664�0000000�0000000�00000001707�11671051007�0021227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-cpy.c���������������������������������������������������������0000664�0000000�0000000�00000001673�11671051007�0020141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_cpy #define UNIT uint32_t #include "u-cpy.h" ���������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-endswith.c����������������������������������������������������0000664�0000000�0000000�00000001767�11671051007�0021177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-32 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-mblen.c�������������������������������������������������������0000664�0000000�0000000�00000002242�11671051007�0020434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) #endif return (c != 0 ? 1 : 0); } /* invalid or incomplete multibyte character */ return -1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-mbsnlen.c�����������������������������������������������������0000664�0000000�0000000�00000001670�11671051007�0021001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count characters in UTF-32 string. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u32-mbtouc-unsafe.c�����������������������������������������������0000664�0000000�0000000�00000002550�11671051007�0022111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) #endif *puc = c; #if CONFIG_UNICODE_SAFETY else /* invalid multibyte character */ *puc = 0xfffd; #endif return 1; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-mbtouc.c������������������������������������������������������0000664�0000000�0000000�00000002425�11671051007�0020633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-mbtoucr.c�����������������������������������������������������0000664�0000000�0000000�00000002265�11671051007�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string, returning an error code. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-move.c��������������������������������������������������������0000664�0000000�0000000�00000001675�11671051007�0020316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_move #define UNIT uint32_t #include "u-move.h" �������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-next.c��������������������������������������������������������0000664�0000000�0000000�00000002226�11671051007�0020317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over next character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if (count < 0) *puc = 0xfffd; #endif return NULL; } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-prev.c��������������������������������������������������������0000664�0000000�0000000�00000002321�11671051007�0020311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over previous character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if (c_1 < 0xd800 || (c_1 >= 0xe000 && c_1 < 0x110000)) #endif { *puc = c_1; return s - 1; } } return NULL; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-set.c���������������������������������������������������������0000664�0000000�0000000�00000001776�11671051007�0020145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-startswith.c��������������������������������������������������0000664�0000000�0000000�00000001711�11671051007�0021553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-32 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_startswith #define UNIT uint32_t #include "u-startswith.h" �������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-stpcpy.c������������������������������������������������������0000664�0000000�0000000�00000001670�11671051007�0020665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_stpcpy #define UNIT uint32_t #include "u-stpcpy.h" ������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-stpncpy.c�����������������������������������������������������0000664�0000000�0000000�00000001672�11671051007�0021045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_stpncpy #define UNIT uint32_t #include "u-stpncpy.h" ����������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-strcat.c������������������������������������������������������0000664�0000000�0000000�00000001734�11671051007�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strchr.c������������������������������������������������������0000664�0000000�0000000�00000002126�11671051007�0020645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strcmp.c������������������������������������������������������0000664�0000000�0000000�00000002306�11671051007�0020650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strcoll.c�����������������������������������������������������0000664�0000000�0000000�00000002200�11671051007�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-32 strings using the collation rules of the current locale. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u32-strcpy.c������������������������������������������������������0000664�0000000�0000000�00000001670�11671051007�0020667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strcpy #define UNIT uint32_t #include "u-strcpy.h" ������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-strcspn.c�����������������������������������������������������0000664�0000000�0000000�00000002724�11671051007�0021040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strdup.c������������������������������������������������������0000664�0000000�0000000�00000001724�11671051007�0020664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strlen.c������������������������������������������������������0000664�0000000�0000000�00000001707�11671051007�0020653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine length of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strlen #define UNIT uint32_t #include "u-strlen.h" ���������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-strmblen.c����������������������������������������������������0000664�0000000�0000000�00000002211�11671051007�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u32_strmblen (const uint32_t *s) { uint32_t c = *s; #if CONFIG_UNICODE_SAFETY if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) #endif return (c != 0 ? 1 : 0); #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ return -1; #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-strmbtouc.c���������������������������������������������������0000664�0000000�0000000�00000002265�11671051007�0021366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) #endif { *puc = c; return (c != 0 ? 1 : 0); } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ return -1; #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-strncat.c�����������������������������������������������������0000664�0000000�0000000�00000001736�11671051007�0021024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strncmp.c�����������������������������������������������������0000664�0000000�0000000�00000002450�11671051007�0021026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strncpy.c�����������������������������������������������������0000664�0000000�0000000�00000001672�11671051007�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strncpy #define UNIT uint32_t #include "u-strncpy.h" ����������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u32-strnlen.c�����������������������������������������������������0000664�0000000�0000000�00000001721�11671051007�0021025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine bounded length of UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u32_strnlen #define UNIT uint32_t #include "u-strnlen.h" �����������������������������������������������gnulib-20111211-stable/lib/unistr/u32-strpbrk.c�����������������������������������������������������0000664�0000000�0000000�00000002700�11671051007�0021025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strrchr.c�����������������������������������������������������0000664�0000000�0000000�00000002370�11671051007�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strspn.c������������������������������������������������������0000664�0000000�0000000�00000002653�11671051007�0020676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strstr.c������������������������������������������������������0000664�0000000�0000000�00000002145�11671051007�0020702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-32 strings. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-strtok.c������������������������������������������������������0000664�0000000�0000000�00000001766�11671051007�0020677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenize UTF-32 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 #include "u-strtok.h" ����������gnulib-20111211-stable/lib/unistr/u32-to-u16.c������������������������������������������������������0000664�0000000�0000000�00000007132�11671051007�0020375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-32 string to UTF-16 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-to-u8.c�������������������������������������������������������0000664�0000000�0000000�00000007124�11671051007�0020317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-32 string to UTF-8 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u32-uctomb.c������������������������������������������������������0000664�0000000�0000000�00000002445�11671051007�0020635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Store a character in UTF-32 string. Copyright (C) 2002, 2005-2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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, int n) { if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) { if (n > 0) { *s = uc; return 1; } else return -2; } else return -1; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-check.c��������������������������������������������������������0000664�0000000�0000000�00000005767�11671051007�0020356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check UTF-8 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif ) { s += 4; continue; } } #if 0 else if (c < 0xfc) { if (s + 5 <= s_end && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (c >= 0xf9 || s[1] >= 0x88)) { s += 5; continue; } } else if (c < 0xfe) { if (s + 6 <= s_end && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (s[5] ^ 0x80) < 0x40 && (c >= 0xfd || s[1] >= 0x84)) { s += 6; continue; } } #endif } /* invalid or incomplete multibyte character */ return s; } return NULL; } ���������gnulib-20111211-stable/lib/unistr/u8-chr.c����������������������������������������������������������0000664�0000000�0000000�00000014660�11671051007�0020045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in piece of UTF-8 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-cmp.c����������������������������������������������������������0000664�0000000�0000000�00000002130�11671051007�0020035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-8 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 memcmp ((const char *) s1, (const char *) s2, n); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-cmp2.c���������������������������������������������������������0000664�0000000�0000000�00000001727�11671051007�0020132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare pieces of UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u8-cpy-alloc.c����������������������������������������������������0000664�0000000�0000000�00000001676�11671051007�0021157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-cpy.c����������������������������������������������������������0000664�0000000�0000000�00000001662�11671051007�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_cpy #define UNIT uint8_t #include "u-cpy.h" ������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-endswith.c�����������������������������������������������������0000664�0000000�0000000�00000001762�11671051007�0021115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-mblen.c��������������������������������������������������������0000664�0000000�0000000�00000005477�11671051007�0020374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 #if CONFIG_UNICODE_SAFETY && (s[1] ^ 0x80) < 0x40 #endif ) return 2; } else if (c < 0xf0) { if (n >= 3 #if CONFIG_UNICODE_SAFETY && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0) #endif ) return 3; } else if (c < 0xf8) { if (n >= 4 #if CONFIG_UNICODE_SAFETY && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif #endif ) return 4; } #if 0 else if (c < 0xfc) { if (n >= 5 #if CONFIG_UNICODE_SAFETY && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (c >= 0xf9 || s[1] >= 0x88) #endif ) return 5; } else if (c < 0xfe) { if (n >= 6 #if CONFIG_UNICODE_SAFETY && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (s[5] ^ 0x80) < 0x40 && (c >= 0xfd || s[1] >= 0x84) #endif ) return 6; } #endif } } /* invalid or incomplete multibyte character */ return -1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-mbsnlen.c������������������������������������������������������0000664�0000000�0000000�00000002405�11671051007�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Count characters in UTF-8 string. Copyright (C) 2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u8-mbtouc-aux.c���������������������������������������������������0000664�0000000�0000000�00000020234�11671051007�0021347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UTF-8 to UCS-4. Copyright (C) 2001-2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif ) { *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; } } #if 0 else if (c < 0xfc) { if (n >= 5) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((s[4] ^ 0x80) < 0x40) { if (c >= 0xf9 || s[1] >= 0x88) { *puc = ((unsigned int) (c & 0x03) << 24) | ((unsigned int) (s[1] ^ 0x80) << 18) | ((unsigned int) (s[2] ^ 0x80) << 12) | ((unsigned int) (s[3] ^ 0x80) << 6) | (unsigned int) (s[4] ^ 0x80); return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return n; } } else if (c < 0xfe) { if (n >= 6) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((s[4] ^ 0x80) < 0x40) { if ((s[5] ^ 0x80) < 0x40) { if (c >= 0xfd || s[1] >= 0x84) { *puc = ((unsigned int) (c & 0x01) << 30) | ((unsigned int) (s[1] ^ 0x80) << 24) | ((unsigned int) (s[2] ^ 0x80) << 18) | ((unsigned int) (s[3] ^ 0x80) << 12) | ((unsigned int) (s[4] ^ 0x80) << 6) | (unsigned int) (s[5] ^ 0x80); return 6; } /* invalid multibyte character */ *puc = 0xfffd; return 6; } /* invalid multibyte character */ *puc = 0xfffd; return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return n; } } #endif } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-mbtouc-unsafe-aux.c��������������������������������������������0000664�0000000�0000000�00000020755�11671051007�0022636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UTF-8 to UCS-4. Copyright (C) 2001-2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) #endif { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ #endif } else { /* incomplete multibyte character */ *puc = 0xfffd; return 1; } } else if (c < 0xf0) { if (n >= 3) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) #endif { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ #endif } 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 CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((c >= 0xf1 || s[1] >= 0x90) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif ) #endif { *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; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ #endif } 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; } } #if 0 else if (c < 0xfc) { if (n >= 5) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((s[4] ^ 0x80) < 0x40) { if (c >= 0xf9 || s[1] >= 0x88) #endif { *puc = ((unsigned int) (c & 0x03) << 24) | ((unsigned int) (s[1] ^ 0x80) << 18) | ((unsigned int) (s[2] ^ 0x80) << 12) | ((unsigned int) (s[3] ^ 0x80) << 6) | (unsigned int) (s[4] ^ 0x80); return 5; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ *puc = 0xfffd; return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ return 2; } /* invalid multibyte character */ #endif } else { /* incomplete multibyte character */ *puc = 0xfffd; return n; } } else if (c < 0xfe) { if (n >= 6) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((s[4] ^ 0x80) < 0x40) { if ((s[5] ^ 0x80) < 0x40) { if (c >= 0xfd || s[1] >= 0x84) #endif { *puc = ((unsigned int) (c & 0x01) << 30) | ((unsigned int) (s[1] ^ 0x80) << 24) | ((unsigned int) (s[2] ^ 0x80) << 18) | ((unsigned int) (s[3] ^ 0x80) << 12) | ((unsigned int) (s[4] ^ 0x80) << 6) | (unsigned int) (s[5] ^ 0x80); return 6; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ *puc = 0xfffd; return 6; } /* invalid multibyte character */ *puc = 0xfffd; return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ return 2; } /* invalid multibyte character */ #endif } else { /* incomplete multibyte character */ *puc = 0xfffd; return n; } } #endif } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif �������������������gnulib-20111211-stable/lib/unistr/u8-mbtouc-unsafe.c������������������������������������������������0000664�0000000�0000000�00000021272�11671051007�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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 CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) #endif { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ #endif } else { /* incomplete multibyte character */ *puc = 0xfffd; return 1; } } else if (c < 0xf0) { if (n >= 3) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) #endif { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ #endif } 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 CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((c >= 0xf1 || s[1] >= 0x90) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif ) #endif { *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; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ *puc = 0xfffd; return 2; } /* invalid multibyte character */ #endif } 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; } } #if 0 else if (c < 0xfc) { if (n >= 5) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((s[4] ^ 0x80) < 0x40) { if (c >= 0xf9 || s[1] >= 0x88) #endif { *puc = ((unsigned int) (c & 0x03) << 24) | ((unsigned int) (s[1] ^ 0x80) << 18) | ((unsigned int) (s[2] ^ 0x80) << 12) | ((unsigned int) (s[3] ^ 0x80) << 6) | (unsigned int) (s[4] ^ 0x80); return 5; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ *puc = 0xfffd; return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ return 2; } /* invalid multibyte character */ #endif } else { /* incomplete multibyte character */ *puc = 0xfffd; return n; } } else if (c < 0xfe) { if (n >= 6) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((s[4] ^ 0x80) < 0x40) { if ((s[5] ^ 0x80) < 0x40) { if (c >= 0xfd || s[1] >= 0x84) #endif { *puc = ((unsigned int) (c & 0x01) << 30) | ((unsigned int) (s[1] ^ 0x80) << 24) | ((unsigned int) (s[2] ^ 0x80) << 18) | ((unsigned int) (s[3] ^ 0x80) << 12) | ((unsigned int) (s[4] ^ 0x80) << 6) | (unsigned int) (s[5] ^ 0x80); return 6; } #if CONFIG_UNICODE_SAFETY /* invalid multibyte character */ *puc = 0xfffd; return 6; } /* invalid multibyte character */ *puc = 0xfffd; return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ return 2; } /* invalid multibyte character */ #endif } else { /* incomplete multibyte character */ *puc = 0xfffd; return n; } } #endif } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-mbtouc.c�������������������������������������������������������0000664�0000000�0000000�00000020537�11671051007�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2002, 2006-2007, 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif ) { *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; } } #if 0 else if (c < 0xfc) { if (n >= 5) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((s[4] ^ 0x80) < 0x40) { if (c >= 0xf9 || s[1] >= 0x88) { *puc = ((unsigned int) (c & 0x03) << 24) | ((unsigned int) (s[1] ^ 0x80) << 18) | ((unsigned int) (s[2] ^ 0x80) << 12) | ((unsigned int) (s[3] ^ 0x80) << 6) | (unsigned int) (s[4] ^ 0x80); return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return n; } } else if (c < 0xfe) { if (n >= 6) { if ((s[1] ^ 0x80) < 0x40) { if ((s[2] ^ 0x80) < 0x40) { if ((s[3] ^ 0x80) < 0x40) { if ((s[4] ^ 0x80) < 0x40) { if ((s[5] ^ 0x80) < 0x40) { if (c >= 0xfd || s[1] >= 0x84) { *puc = ((unsigned int) (c & 0x01) << 30) | ((unsigned int) (s[1] ^ 0x80) << 24) | ((unsigned int) (s[2] ^ 0x80) << 18) | ((unsigned int) (s[3] ^ 0x80) << 12) | ((unsigned int) (s[4] ^ 0x80) << 6) | (unsigned int) (s[5] ^ 0x80); return 6; } /* invalid multibyte character */ *puc = 0xfffd; return 6; } /* invalid multibyte character */ *puc = 0xfffd; return 5; } /* invalid multibyte character */ *puc = 0xfffd; return 4; } /* invalid multibyte character */ *puc = 0xfffd; return 3; } /* invalid multibyte character */ return 2; } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return n; } } #endif } /* invalid multibyte character */ *puc = 0xfffd; return 1; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-mbtoucr.c������������������������������������������������������0000664�0000000�0000000�00000024371�11671051007�0020744�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-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif ) { 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; } } #if 0 else if (c < 0xfc) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40 && (c >= 0xf9 || s[1] >= 0x88)) { if (n >= 3) { if ((s[2] ^ 0x80) < 0x40) { if (n >= 4) { if ((s[3] ^ 0x80) < 0x40) { if (n >= 5) { if ((s[4] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x03) << 24) | ((unsigned int) (s[1] ^ 0x80) << 18) | ((unsigned int) (s[2] ^ 0x80) << 12) | ((unsigned int) (s[3] ^ 0x80) << 6) | (unsigned int) (s[4] ^ 0x80); return 5; } /* 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 */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } else if (c < 0xfe) { if (n >= 2) { if ((s[1] ^ 0x80) < 0x40 && (c >= 0xfd || s[1] >= 0x84)) { if (n >= 3) { if ((s[2] ^ 0x80) < 0x40) { if (n >= 4) { if ((s[3] ^ 0x80) < 0x40) { if (n >= 5) { if ((s[4] ^ 0x80) < 0x40) { if (n >= 6) { if ((s[5] ^ 0x80) < 0x40) { *puc = ((unsigned int) (c & 0x01) << 30) | ((unsigned int) (s[1] ^ 0x80) << 24) | ((unsigned int) (s[2] ^ 0x80) << 18) | ((unsigned int) (s[3] ^ 0x80) << 12) | ((unsigned int) (s[4] ^ 0x80) << 6) | (unsigned int) (s[5] ^ 0x80); return 6; } /* 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 */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } /* invalid multibyte character */ } else { /* incomplete multibyte character */ *puc = 0xfffd; return -2; } } #endif } /* invalid multibyte character */ *puc = 0xfffd; return -1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-move.c���������������������������������������������������������0000664�0000000�0000000�00000001664�11671051007�0020237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy piece of UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_move #define UNIT uint8_t #include "u-move.h" ����������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-next.c���������������������������������������������������������0000664�0000000�0000000�00000002153�11671051007�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over next character in UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-prev.c���������������������������������������������������������0000664�0000000�0000000�00000006012�11671051007�0020235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterate over previous character in UTF-8 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if ((c_1 ^ 0x80) < 0x40) #endif 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 CONFIG_UNICODE_SAFETY if ((c_2 ^ 0x80) < 0x40) #endif if (s - 2 != start) { uint8_t c_3 = s[-3]; if (c_3 >= 0xe0 && c_3 < 0xf0 #if CONFIG_UNICODE_SAFETY && (c_3 >= 0xe1 || c_2 >= 0xa0) && (c_3 != 0xed || c_2 < 0xa0) #endif ) { *puc = ((unsigned int) (c_3 & 0x0f) << 12) | ((unsigned int) (c_2 ^ 0x80) << 6) | (unsigned int) (c_1 ^ 0x80); return s - 3; } #if CONFIG_UNICODE_SAFETY if ((c_3 ^ 0x80) < 0x40) #endif if (s - 3 != start) { uint8_t c_4 = s[-4]; if (c_4 >= 0xf0 && c_4 < 0xf8 #if CONFIG_UNICODE_SAFETY && (c_4 >= 0xf1 || c_3 >= 0x90) && (c_4 < 0xf4 || (c_4 == 0xf4 && c_3 < 0x90)) #endif ) { *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-20111211-stable/lib/unistr/u8-set.c����������������������������������������������������������0000664�0000000�0000000�00000002315�11671051007�0020056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-startswith.c���������������������������������������������������0000664�0000000�0000000�00000001706�11671051007�0021502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #define FUNC u8_startswith #define UNIT uint8_t #include "u-startswith.h" ����������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-stpcpy.c�������������������������������������������������������0000664�0000000�0000000�00000002305�11671051007�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-stpncpy.c������������������������������������������������������0000664�0000000�0000000�00000002361�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strcat.c�������������������������������������������������������0000664�0000000�0000000�00000002007�11671051007�0020561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-8 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strchr.c�������������������������������������������������������0000664�0000000�0000000�00000016324�11671051007�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-8 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strcmp.c�������������������������������������������������������0000664�0000000�0000000�00000002104�11671051007�0020567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-8 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strcoll.c������������������������������������������������������0000664�0000000�0000000�00000002173�11671051007�0020747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-8 strings using the collation rules of the current locale. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/unistr/u8-strcpy.c�������������������������������������������������������0000664�0000000�0000000�00000001777�11671051007�0020622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strcspn.c������������������������������������������������������0000664�0000000�0000000�00000002047�11671051007�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strdup.c�������������������������������������������������������0000664�0000000�0000000�00000002140�11671051007�0020600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" #if HAVE_STRDUP # include <string.h> uint8_t * u8_strdup (const uint8_t *s) { return (uint8_t *) strdup ((const char *) s); } #else # define FUNC u8_strdup # define UNIT uint8_t # define U_STRLEN u8_strlen # include "u-strdup.h" #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-strlen.c�������������������������������������������������������0000664�0000000�0000000�00000001735�11671051007�0020577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine length of UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strmblen.c�����������������������������������������������������0000664�0000000�0000000�00000005274�11671051007�0021120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) #else if (s[1] != 0) #endif return 2; } else if (c < 0xf0) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) #else if (s[1] != 0 && s[2] != 0) #endif return 3; } else if (c < 0xf8) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif ) #else if (s[1] != 0 && s[2] != 0 && s[3] != 0) #endif return 4; } #if 0 else if (c < 0xfc) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (c >= 0xf9 || s[1] >= 0x88)) #else if (s[1] != 0 && s[2] != 0 && s[3] != 0 && s[4] != 0) #endif return 5; } else if (c < 0xfe) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (s[5] ^ 0x80) < 0x40 && (c >= 0xfd || s[1] >= 0x84)) #else if (s[1] != 0 && s[2] != 0 && s[3] != 0 && s[4] != 0 && s[5] != 0) #endif return 6; } #endif } /* invalid or incomplete multibyte character */ return -1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-strmbtouc.c����������������������������������������������������0000664�0000000�0000000�00000007755�11671051007�0021322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look at first character in UTF-8 string. Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40) #else if (s[1] != 0) #endif { *puc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (s[1] ^ 0x80); return 2; } } else if (c < 0xf0) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0) && (c != 0xed || s[1] < 0xa0)) #else if (s[1] != 0 && s[2] != 0) #endif { *puc = ((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (s[1] ^ 0x80) << 6) | (unsigned int) (s[2] ^ 0x80); return 3; } } else if (c < 0xf8) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90) #if 1 && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif ) #else if (s[1] != 0 && s[2] != 0 && s[3] != 0) #endif { *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; } } #if 0 else if (c < 0xfc) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (c >= 0xf9 || s[1] >= 0x88)) #else if (s[1] != 0 && s[2] != 0 && s[3] != 0 && s[4] != 0) #endif { *puc = ((unsigned int) (c & 0x03) << 24) | ((unsigned int) (s[1] ^ 0x80) << 18) | ((unsigned int) (s[2] ^ 0x80) << 12) | ((unsigned int) (s[3] ^ 0x80) << 6) | (unsigned int) (s[4] ^ 0x80); return 5; } } else if (c < 0xfe) { #if CONFIG_UNICODE_SAFETY if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (s[5] ^ 0x80) < 0x40 && (c >= 0xfd || s[1] >= 0x84)) #else if (s[1] != 0 && s[2] != 0 && s[3] != 0 && s[4] != 0 && s[5] != 0) #endif { *puc = ((unsigned int) (c & 0x01) << 30) | ((unsigned int) (s[1] ^ 0x80) << 24) | ((unsigned int) (s[2] ^ 0x80) << 18) | ((unsigned int) (s[3] ^ 0x80) << 12) | ((unsigned int) (s[4] ^ 0x80) << 6) | (unsigned int) (s[5] ^ 0x80); return 6; } } #endif } /* invalid or incomplete multibyte character */ return -1; } �������������������gnulib-20111211-stable/lib/unistr/u8-strncat.c������������������������������������������������������0000664�0000000�0000000�00000002026�11671051007�0020740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate UTF-8 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strncmp.c������������������������������������������������������0000664�0000000�0000000�00000002123�11671051007�0020746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare UTF-8 strings. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strncpy.c������������������������������������������������������0000664�0000000�0000000�00000002016�11671051007�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy UTF-8 string. Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strnlen.c������������������������������������������������������0000664�0000000�0000000�00000002340�11671051007�0020746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine bounded length of UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strpbrk.c������������������������������������������������������0000664�0000000�0000000�00000002014�11671051007�0020746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strrchr.c������������������������������������������������������0000664�0000000�0000000�00000005367�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search character in UTF-8 string. Copyright (C) 1999, 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strspn.c�������������������������������������������������������0000664�0000000�0000000�00000002072�11671051007�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search for some characters in UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strstr.c�������������������������������������������������������0000664�0000000�0000000�00000002156�11671051007�0020627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substring test for UTF-8 strings. Copyright (C) 1999, 2002, 2006, 2010-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-strtok.c�������������������������������������������������������0000664�0000000�0000000�00000001761�11671051007�0020615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenize UTF-8 string. Copyright (C) 1999, 2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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 #include "u-strtok.h" ���������������gnulib-20111211-stable/lib/unistr/u8-to-u16.c�������������������������������������������������������0000664�0000000�0000000�00000007306�11671051007�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-8 string to UTF-16 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-to-u32.c�������������������������������������������������������0000664�0000000�0000000�00000006555�11671051007�0020326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTF-8 string to UTF-32 string. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/unistr/u8-uctomb-aux.c���������������������������������������������������0000664�0000000�0000000�00000003573�11671051007�0021356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Conversion UCS-4 to UTF-8. Copyright (C) 2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unistr.h" int u8_uctomb_aux (uint8_t *s, ucs4_t uc, int 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; } #if 0 else if (uc < 0x200000) count = 4; else if (uc < 0x4000000) count = 5; else if (uc <= 0x7fffffff) count = 6; #else else if (uc < 0x110000) count = 4; #endif else return -1; if (n < count) return -2; switch (count) /* note: code falls through cases! */ { #if 0 case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000; case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000; #endif case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; /*case 1:*/ s[0] = uc; } return count; } �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unistr/u8-uctomb.c�������������������������������������������������������0000664�0000000�0000000�00000004441�11671051007�0020556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Store a character in UTF-8 string. Copyright (C) 2002, 2005-2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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" #if !HAVE_INLINE int u8_uctomb (uint8_t *s, ucs4_t uc, int 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; } #if 0 else if (uc < 0x200000) count = 4; else if (uc < 0x4000000) count = 5; else if (uc <= 0x7fffffff) count = 6; #else else if (uc < 0x110000) count = 4; #endif else return -1; if (n >= count) { switch (count) /* note: code falls through cases! */ { #if 0 case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000; case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000; #endif case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; /*case 1:*/ s[0] = uc; } return count; } } return -2; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unitypes.in.h������������������������������������������������������������0000664�0000000�0000000�00000001742�11671051007�0017702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Elementary types for the GNU UniString library. Copyright (C) 2002, 2005-2006, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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; #endif /* _UNITYPES_H */ ������������������������������gnulib-20111211-stable/lib/uniwbrk.in.h�������������������������������������������������������������0000664�0000000�0000000�00000004653�11671051007�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in Unicode strings. Copyright (C) 2001-2003, 2005-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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" <http://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 }; /* Return the Word_Break property of a Unicode character. */ extern int uc_wordbreak_property (ucs4_t uc); /* ========================================================================= */ /* 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 *p); /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNIWBRK_H */ �������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniwbrk/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016721�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniwbrk/u-wordbreaks.h���������������������������������������������������0000664�0000000�0000000�00000012627�11671051007�0021507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in UTF-8/UTF-16/UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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; /* 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. */ if (last_char_prop == WBP_CR && prop == WBP_LF) /* *p = 0 */; /* Break before and after newlines. */ else if (last_char_prop >= WBP_NEWLINE /* same as: last_char_prop == WBP_CR || last_char_prop == WBP_LF || last_char_prop == WBP_NEWLINE */ || prop >= WBP_NEWLINE /* same as: prop == WBP_CR || prop == WBP_LF || prop == WBP_NEWLINE */) *p = 1; /* Ignore Format and Extend characters. */ else if (!(prop == WBP_EXTEND || prop == WBP_FORMAT)) { /* No break in these situations (see UAX #29): secondlast last current ALetter (MidLetter | MidNumLet) × ALetter (WB7) ALetter × (MidLetter | MidNumLet) ALetter (WB6) Numeric (MidNum | MidNumLet) × Numeric (WB11) Numeric × (MidNum | MidNumLet) Numeric (WB12) ALetter × ALetter (WB5) ALetter × Numeric (WB9) Numeric × ALetter (WB10) Numeric × Numeric (WB8) Katakana × Katakana (WB13) (ALetter | Numeric | Katakana) × ExtendNumLet (WB13a) ExtendNumLet × ExtendNumLet (WB13a) ExtendNumLet × (ALetter | Numeric | Katakana) (WB13b) */ /* 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 && (last_compchar_prop == WBP_MIDLETTER || last_compchar_prop == WBP_MIDNUMLET) && secondlast_compchar_prop == WBP_ALETTER) || (prop == WBP_NUMERIC && (last_compchar_prop == WBP_MIDNUM || last_compchar_prop == WBP_MIDNUMLET) && secondlast_compchar_prop == WBP_NUMERIC)) { *last_compchar_ptr = 0; /* *p = 0; */ } else { /* Perform a single table lookup. */ if (uniwbrk_table[last_compchar_prop][prop]) *p = 1; /* else *p = 0; */ } } } last_char_prop = prop; /* Ignore Format and Extend characters, except at the start of the string. */ if (last_compchar_prop < 0 || !(prop == WBP_EXTEND || prop == WBP_FORMAT)) { secondlast_compchar_prop = last_compchar_prop; last_compchar_prop = prop; last_compchar_ptr = p; } s += count; p += count; } } } ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniwbrk/u16-wordbreaks.c�������������������������������������������������0000664�0000000�0000000�00000002055�11671051007�0021643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in UTF-16 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniwbrk/u32-wordbreaks.c�������������������������������������������������0000664�0000000�0000000�00000002055�11671051007�0021641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in UTF-32 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniwbrk/u8-wordbreaks.c��������������������������������������������������0000664�0000000�0000000�00000005540�11671051007�0021566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in UTF-8 strings. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniwbrk/ulc-wordbreaks.c�������������������������������������������������0000664�0000000�0000000�00000012466�11671051007�0022022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word breaks in strings. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniwbrk/wbrkprop.h�������������������������������������������������������0000664�0000000�0000000�00000653426�11671051007�0020760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Line breaking properties of Unicode characters. */ /* Generated automatically by gen-uni-tables for Unicode 6.0.0. */ /* Copyright (C) 2000-2002, 2004, 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 <http://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[122 << 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, -1, 1792, 1920, 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, 256, 256, 3840, 3968, 4096, 4224, 4352, 256, 256, 256, 4480, 4608, 4736, 4864, 4992, 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, 6144, 256, 6272, 256, 256, 6400, 6528, 6656, 6784, 6912, 7040, -1, -1, -1, -1, -1, 7168, -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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, 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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10496, 10624, 256, 256, 10752, 10880, 11008, 11136, 11264, 11392, 11520, 11648, 11776, 11904, -1, 12032, 12160, 12288, 256, 12416, -1, -1, -1, -1, -1, -1, 12544, -1, 12672, -1, 12800, -1, 12928, -1, 13056, -1, -1, -1, -1, -1, -1, -1, 13184, 13312, -1, -1, -1, -1, -1, -1, -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, 13440, -1, 13568, -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, 13696, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 13952, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14080, 14208, 14336, -1, -1, -1, 14464, 14592, 14720, 256, 256, 14848, 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, 15232, -1, 15360, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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_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_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_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_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_OTHER, 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_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_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_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_OTHER, WBP_OTHER, 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_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_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_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_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, 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_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_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_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_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_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_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_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_OTHER, WBP_OTHER, 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_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_OTHER, 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_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, 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_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_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_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_OTHER, 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_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_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_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_FORMAT, 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_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_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_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_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_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_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_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_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, 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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_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_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_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_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_EXTEND, 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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, 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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_OTHER, WBP_OTHER, WBP_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_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_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_OTHER, 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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_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_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_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_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_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_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_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_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_EXTEND, WBP_EXTEND, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_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_ALETTER, WBP_EXTEND, 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_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, 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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_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_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_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_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_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_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_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_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, 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_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_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-20111211-stable/lib/uniwbrk/wbrktable.c������������������������������������������������������0000664�0000000�0000000�00000005112�11671051007�0021041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word break auxiliary table. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "wbrktable.h" /* This table contains the following rules (see UAX #29): last current ALetter × ALetter (WB5) ALetter × Numeric (WB9) Numeric × ALetter (WB10) Numeric × Numeric (WB8) Katakana × Katakana (WB13) (ALetter | Numeric | Katakana) × ExtendNumLet (WB13a) ExtendNumLet × ExtendNumLet (WB13a) ExtendNumLet × (ALetter | Numeric | Katakana) (WB13b) */ const unsigned char uniwbrk_table[10][8] = { /* current: OTHER MIDNUMLET NUMERIC */ /* KATAKANA MIDLETTER EXTENDNUMLET */ /* ALETTER MIDNUM */ /* last */ /* WBP_OTHER */ { 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_KATAKANA */ { 1, 0, 1, 1, 1, 1, 1, 0 }, /* WBP_ALETTER */ { 1, 1, 0, 1, 1, 1, 0, 0 }, /* WBP_MIDNUMLET */ { 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_MIDLETTER */ { 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_MIDNUM */ { 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_NUMERIC */ { 1, 1, 0, 1, 1, 1, 0, 0 }, /* WBP_EXTENDNUMLET */ { 1, 0, 0, 1, 1, 1, 0, 0 }, /* WBP_EXTEND */ { 1, 1, 1, 1, 1, 1, 1, 1 }, /* WBP_FORMAT */ { 1, 1, 1, 1, 1, 1, 1, 1 } }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniwbrk/wbrktable.h������������������������������������������������������0000664�0000000�0000000�00000001533�11671051007�0021051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word break auxiliary table. Copyright (C) 2009-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ extern const unsigned char uniwbrk_table[10][8]; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniwbrk/wordbreak-property.c���������������������������������������������0000664�0000000�0000000�00000002673�11671051007�0022737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word break property. Copyright (C) 2001-2003, 2006-2011 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/lib/uniwidth.in.h������������������������������������������������������������0000664�0000000�0000000�00000004025�11671051007�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Display width functions. Copyright (C) 2001-2002, 2005, 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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) #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) __attribute__ ((__pure__)) #endif ; /* 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); extern int u16_width (const uint16_t *s, size_t n, const char *encoding); extern int u32_width (const uint32_t *s, size_t n, const char *encoding); /* Determine number of column positions required for S. */ extern int u8_strwidth (const uint8_t *s, const char *encoding); extern int u16_strwidth (const uint16_t *s, const char *encoding); extern int u32_strwidth (const uint32_t *s, const char *encoding); #ifdef __cplusplus } #endif #endif /* _UNIWIDTH_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniwidth/����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017073�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniwidth/cjk.h�����������������������������������������������������������0000664�0000000�0000000�00000003132�11671051007�0020012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for CJK encoding. Copyright (C) 2001-2002, 2005-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://www.gnu.org/licenses/>. */ #include "streq.h" static int is_cjk_encoding (const char *encoding) { if (0 /* Legacy Japanese encodings */ || STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) /* Legacy Chinese encodings */ || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) /* Legacy Korean encodings */ || STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) || STREQ (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) return 1; return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/uniwidth/u16-strwidth.c��������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0021513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-16 string. Copyright (C) 2001-2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/uniwidth/u16-width.c�����������������������������������������������������0000664�0000000�0000000�00000002527�11671051007�0020775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-16 string. Copyright (C) 2001-2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/uniwidth/u32-strwidth.c��������������������������������������������������0000664�0000000�0000000�00000002021�11671051007�0021511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-32 string. Copyright (C) 2001-2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/uniwidth/u32-width.c�����������������������������������������������������0000664�0000000�0000000�00000002421�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-32 string. Copyright (C) 2001-2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/uniwidth/u8-strwidth.c���������������������������������������������������0000664�0000000�0000000�00000002014�11671051007�0021436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-8 string. Copyright (C) 2001-2002, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/uniwidth/u8-width.c������������������������������������������������������0000664�0000000�0000000�00000002522�11671051007�0020711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of UTF-8 string. Copyright (C) 2001-2002, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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-20111211-stable/lib/uniwidth/width.c���������������������������������������������������������0000664�0000000�0000000�00000050565�11671051007�0020371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of Unicode character. Copyright (C) 2001-2002, 2006-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. 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 <http://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[27*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 */ 0x0f, 0x00, 0xff, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 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 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */ 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ 0x00, 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, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ 0x00, 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, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ 0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 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, 0x03, 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, 0x00, 0x00, /* 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, 0x7f, 0x00, 0x00, 0xf0, /* 0x1dc0-0x1dff */ /* 0x2000-0x21ff */ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 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, 0xfc, 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, 0x07, 0x30, /* 0xa640-0xa67f */ 0x00, 0x00, 0x00, 0x00, 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 */ 0x10, 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, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ /* 0xaa00-0xabff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x7f, 0x00, 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 */ /* 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, 0x00, 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, 0x00, /* 0x11040-0x1107f */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11100-0x1113f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11140-0x1117f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11180-0x111bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */ /* 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 */ }; static const signed char nonspacing_table_ind[240] = { 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, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */ 24, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, /* 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, -1, -1, /* 0x1b000-0x1bfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */ 25, 26, -1, -1, -1, -1, -1, -1 /* 0x1d000-0x1dfff */ }; /* 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) < 240) { 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-20111211-stable/lib/unlink.c�����������������������������������������������������������������0000664�0000000�0000000�00000006527�11671051007�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around unlink bugs. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "dosname.h" #undef unlink /* 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) { /* 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 && (lstat (short_name, &st) || S_ISLNK (st.st_mode))) { free (short_name); errno = EPERM; return -1; } free (short_name); } } 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-20111211-stable/lib/unlinkat.c���������������������������������������������������������������0000664�0000000�0000000�00000006325�11671051007�0017237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around unlinkat bugs on Solaris 9 and Hurd. Copyright (C) 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 <http://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 "dosname.h" #include "openat.h" #if HAVE_UNLINKAT # undef unlinkat /* unlinkat without AT_REMOVEDIR does not honor trailing / on Solaris 9. Solve it in a similar manner to unlink. Hurd has the same issue. */ 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) { /* 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); } } if (!result) result = unlinkat (fd, name, flag); return result; } #else /* !HAVE_UNLINKAT */ /* Replacement for Solaris' function by the same name. <http://www.google.com/search?q=unlinkat+site:docs.sun.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-20111211-stable/lib/unlinkdir.c��������������������������������������������������������������0000664�0000000�0000000�00000003077�11671051007�0017412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* unlinkdir.c - determine whether we can unlink directories Copyright (C) 2005-2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, Jim Meyering, and David Bartley. */ #include <config.h> #include "unlinkdir.h" #include "priv-set.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 () != 0); # endif initialized = true; } return cannot; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/unlinkdir.h��������������������������������������������������������������0000664�0000000�0000000�00000001713�11671051007�0017412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* unlinkdir.h - determine (and maybe change) whether we can unlink directories Copyright (C) 2005, 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 <http://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-20111211-stable/lib/unlocked-io.h������������������������������������������������������������0000664�0000000�0000000�00000006726�11671051007�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Prefer faster, non-thread-safe stdio functions if available. Copyright (C) 2001-2004, 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 <http://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 # undef clearerr # define clearerr(x) clearerr_unlocked (x) # else # define clearerr_unlocked(x) clearerr (x) # endif # if HAVE_DECL_FEOF_UNLOCKED # undef feof # define feof(x) feof_unlocked (x) # else # define feof_unlocked(x) feof (x) # endif # if HAVE_DECL_FERROR_UNLOCKED # undef ferror # define ferror(x) ferror_unlocked (x) # else # define ferror_unlocked(x) ferror (x) # endif # if HAVE_DECL_FFLUSH_UNLOCKED # undef fflush # define fflush(x) fflush_unlocked (x) # else # define fflush_unlocked(x) fflush (x) # endif # if HAVE_DECL_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 # 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 # 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 # 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 # 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 # undef getc # define getc(x) getc_unlocked (x) # else # define getc_unlocked(x) getc (x) # endif # if HAVE_DECL_GETCHAR_UNLOCKED # undef getchar # define getchar() getchar_unlocked () # else # define getchar_unlocked() getchar () # endif # if HAVE_DECL_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 # 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-20111211-stable/lib/unlockpt.c���������������������������������������������������������������0000664�0000000�0000000�00000002621�11671051007�0017244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unlock the slave side of a pseudo-terminal from its master side. Copyright (C) 1998, 2010-2011 Free Software Foundation, Inc. Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 /* MacOS 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-20111211-stable/lib/unsetenv.c���������������������������������������������������������������0000664�0000000�0000000�00000005472�11671051007�0017263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2002, 2005-2011 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ #define _GL_ARG_NONNULL(params) /* 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-20111211-stable/lib/userspec.c���������������������������������������������������������������0000664�0000000�0000000�00000017575�11671051007�0017254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* userspec.c -- Parse a user and group string. Copyright (C) 1989-1992, 1997-1998, 2000, 2002-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 <http://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; error_msg = NULL; *username = *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 { size_t ulen = separator - spec; if (ulen != 0) { u = xmemdup (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; *gid = gnum; *username = u; *groupname = gname; u = NULL; } else free (gname); free (u); return _(error_msg); } /* Extract from SPEC, which has the form "[user][:.][group]", a USERNAME, UID U, GROUPNAME, and GID G. 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 = strchr (spec, ':'); char const *error_msg = parse_with_separator (spec, colon, uid, gid, username, groupname); if (!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-20111211-stable/lib/userspec.h���������������������������������������������������������������0000664�0000000�0000000�00000000324�11671051007�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/usleep.c�����������������������������������������������������������������0000664�0000000�0000000�00000003502�11671051007�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Pausing execution of the current thread. Copyright (C) 2009-2011 Free Software Foundation, Inc. Written by Eric Blake <ebb9@byu.net>, 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 <http://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> #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) { 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); #undef usleep #if !HAVE_USLEEP # define usleep(x) 0 #endif return usleep (micro % 1000000); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/utimecmp.c���������������������������������������������������������������0000664�0000000�0000000�00000031456�11671051007�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* utimecmp.c -- compare file time stamps Copyright (C) 2004-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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "utimecmp.h" #include <limits.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include "hash.h" #include "intprops.h" #include "stat-time.h" #include "utimens.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 ((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 time stamp resolution in nanoseconds. */ struct fs_res { /* Device number of file system. */ dev_t dev; /* An upper bound on the time stamp 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 (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 time stamps 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 time stamps). */ int utimecmp (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)); verify (TYPE_TWOS_COMPLEMENT (int)); /* Destination and source time stamps. */ 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) { /* Look up the time stamp 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; /* Time stamp 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 = pathconf (dst_name, _PC_TIMESTAMP_RESOLUTION); 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 time stamp information that must necessarily be lost when filtered through utimens. */ src_ns -= src_ns % SYSCALL_RESOLUTION; /* If the time stamps disagree widely enough, there's no need to interrogate the file system to deduce the exact time stamp resolution; return the answer directly. */ { time_t s = src_s & ~ (res == 2 * BILLION); 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 time stamp resolution for the destination file system (after truncation due to SYSCALL_RESOLUTION) by setting the access time stamp 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; /* Set the modification time. But don't try to set the modification time of symbolic links; on many hosts this sets the time of the pointed-to file. */ if ((S_ISLNK (dst_stat->st_mode) ? lutimens (dst_name, timespec) : utimens (dst_name, timespec)) != 0) return -2; /* Read the modification time that was set. */ { int stat_result = (S_ISLNK (dst_stat->st_mode) ? lstat (dst_name, &dst_status) : stat (dst_name, &dst_status)); 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; if (S_ISLNK (dst_stat->st_mode)) lutimens (dst_name, timespec); else utimens (dst_name, timespec); } 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 time stamp according to the resolution. */ src_s &= ~ (res == 2 * BILLION); src_ns -= src_ns % res; } /* Compare the time stamps and return -1, 0, 1 accordingly. */ return (dst_s < src_s ? -1 : dst_s > src_s ? 1 : dst_ns < src_ns ? -1 : dst_ns > src_ns); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/utimecmp.h���������������������������������������������������������������0000664�0000000�0000000�00000002234�11671051007�0017235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* utimecmp.h -- compare file time stamps Copyright (C) 2004, 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 <http://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 time stamp 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); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/utimens.c����������������������������������������������������������������0000664�0000000�0000000�00000042776�11671051007�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set file access and modification times. Copyright (C) 2003-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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* derived from a function in touch.c */ #include <config.h> #include "utimens.h" #include <assert.h> #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <sys/stat.h> #include <sys/time.h> #include <unistd.h> #include "stat-time.h" #include "timespec.h" #if HAVE_UTIME_H # include <utime.h> #endif /* Some systems (even some that do have <utime.h>) don't declare this structure anywhere. */ #ifndef HAVE_STRUCT_UTIMBUF struct utimbuf { long actime; long modtime; }; #endif /* Avoid recursion with rpl_futimens or rpl_utimensat. */ #undef futimens #undef utimensat /* 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; assert (timespec); if ((timespec[0].tv_nsec != UTIME_NOW && timespec[0].tv_nsec != UTIME_OMIT && (timespec[0].tv_nsec < 0 || 1000000000 <= timespec[0].tv_nsec)) || (timespec[1].tv_nsec != UTIME_NOW && timespec[1].tv_nsec != UTIME_OMIT && (timespec[1].tv_nsec < 0 || 1000000000 <= timespec[1].tv_nsec))) { 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, using stat buffer 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[2]) { 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 time stamps 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 time stamps 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 time stamps of files in NFS file systems in some cases. We have no configure-time test for this, but please see <http://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__ /* 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. FIXME: Simplify this in 2012, 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 /* __linux__ */ # if HAVE_UTIMENSAT if (fd < 0) { result = utimensat (AT_FDCWD, file, ts, 0); # ifdef __linux__ /* Work around a kernel bug: http://bugzilla.redhat.com/442352 http://bugzilla.redhat.com/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 */ /* 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; } #if 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 time stamps 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 time stamps 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__ /* 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. FIXME: Simplify this in 2012, 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 /* __linux__ */ result = utimensat (AT_FDCWD, file, ts, AT_SYMLINK_NOFOLLOW); # ifdef __linux__ /* Work around a kernel bug: http://bugzilla.redhat.com/442352 http://bugzilla.redhat.com/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-20111211-stable/lib/utimens.h����������������������������������������������������������������0000664�0000000�0000000�00000001133�11671051007�0017073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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> int fdutimensat (int fd, int dir, char const *name, struct timespec const [2], int atflag); /* Using this function makes application code slightly more readable. */ static inline int lutimensat (int dir, char const *file, struct timespec const times[2]) { return utimensat (dir, file, times, AT_SYMLINK_NOFOLLOW); } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/utimensat.c��������������������������������������������������������������0000664�0000000�0000000�00000013334�11671051007�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the access and modification time of a file relative to directory fd. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #include <sys/stat.h> #include <errno.h> #include <fcntl.h> #include "stat-time.h" #include "timespec.h" #include "utimens.h" #if HAVE_UTIMENSAT # undef 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) { # ifdef __linux__ 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; # ifdef __linux__ 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. FIXME: Simplify this in 2012, when file system bugs are no longer common. */ 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 && (times[0].tv_nsec < 0 || times[0].tv_nsec >= 1000000000)) || (times[1].tv_nsec != UTIME_NOW && (times[1].tv_nsec < 0 || times[1].tv_nsec >= 1000000000)))) { errno = EINVAL; return -1; } # endif # endif /* __linux__ */ 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 time stamps 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 time stamps 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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/vasnprintf.c�������������������������������������������������������������0000664�0000000�0000000�00000664757�11671051007�0017627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* 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. */ /* 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 #ifndef IN_LIBINTL # include <alloca.h> #endif /* 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 "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 # 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 # define SNPRINTF _snprintf # 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. */ #ifdef 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) && !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) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (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) && 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 (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 MacOS 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) 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); char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); 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 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 inline 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 HAVE_LONG_LONG_INT 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 # endif 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 HAVE_LONG_LONG_INT 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 # endif 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 HAVE_LONG_LONG_INT 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 # endif 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; 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; #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(needed) \ 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)) \ goto out_of_memory; \ if (result == resultbuf || result == NULL) \ memory = (DCHAR_T *) malloc (memory_size); \ else \ memory = (DCHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ goto out_of_memory; \ if (result == resultbuf && length > 0) \ DCHAR_CPY (memory, result, length); \ result = 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++] = (unsigned char) *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; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; #endif 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; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } 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 (has_width && width > characters && !(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) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (has_width && width > characters && (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 (has_width && width > characters && !(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) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (has_width && width > characters && (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 (has_width && width > characters && !(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) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (has_width && width > characters && (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 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && 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; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } 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 (has_width && width > characters && !(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 (has_width && width > characters && (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; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg_end, &state); # else count = wctomb (cbuf, *arg_end); # endif 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 < 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; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg_end, &state); # else count = wctomb (cbuf, *arg_end); # endif 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 (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif 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) { int saved_errno = errno; free (tmpsrc); if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } free (tmpsrc); # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferrable 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 (has_width && width > w && !(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 (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif 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 (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif 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 (xsum (length, tmpdst_len)); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (has_width && width > w && (dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # endif } #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; int has_width; size_t width; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; 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; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } 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; } } /* 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. */ if (has_width && p - tmp < width) { size_t pad = width - (p - tmp); 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; } { size_t 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; int has_width; size_t width; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; 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; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } 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; } } /* 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 count = exponent + 1; /* Note: count <= precision = ndigits. */ for (; count > 0; count--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t count = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; count > 0; count--) *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 __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 __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 count = exponent + 1; /* Note: count <= precision = ndigits. */ for (; count > 0; count--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t count = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; count > 0; count--) *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 __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 __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 __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. */ if (has_width && p - tmp < width) { size_t pad = width - (p - tmp); 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; } { size_t 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 !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_width; size_t width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || 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 !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_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; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || 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++ = (unsigned char) *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++ = (unsigned char) *mp++; while (--n > 0); } } } switch (type) { #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *fbp++ = 'I'; *fbp++ = '6'; *fbp++ = '4'; break; # else *fbp++ = 'l'; /*FALLTHROUGH*/ # endif #endif 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 !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) fbp[1] = '%'; fbp[2] = 'n'; fbp[3] = '\0'; # else /* On glibc2 systems from glibc >= 2.3 - probably also older ones - we know that snprintf's return value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and gl_SNPRINTF_TRUNCATION_C99 pass. Therefore we can avoid using %n in this situation. 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), so we should avoid it in this situation. */ /* On native Win32 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 Win32 systems (such as mingw) where the OS is Windows Vista, the use of %n in format strings by default crashes the program. See <http://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and <http://msdn2.microsoft.com/en-us/library/ms175782(VS.80).aspx> So we should avoid %n in this situation. */ fbp[1] = '\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; #if HAVE_LONG_LONG_INT 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; #endif 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 (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 /* 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. Save and use the errno that it has set, if any. */ int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = (saved_errno != 0 ? saved_errno : (dp->conversion == 'c' || dp->conversion == 's' ? EILSEQ : EINVAL)); 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) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } ENSURE_ALLOCATION (xsum (length, tmpdst_len)); 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 = (unsigned char) *--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 preferrable 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-20111211-stable/lib/vasnprintf.h�������������������������������������������������������������0000664�0000000�0000000�00000005711�11671051007�0017607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation. Copyright (C) 2002-2004, 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* Get va_list. */ #include <stdarg.h> /* Get size_t. */ #include <stddef.h> /* 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. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #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 *resultbuf, size_t *lengthp, const char *format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ �������������������������������������������������������gnulib-20111211-stable/lib/vasprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000002603�11671051007�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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-20111211-stable/lib/vdprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000003015�11671051007�0017237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a file descriptor. Copyright (C) 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 <http://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) { int saved_errno = errno; free (output); errno = saved_errno; } return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/verify.h�����������������������������������������������������������������0000664�0000000�0000000�00000022762�11671051007�0016726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile-time assert-like macros. Copyright (C) 2005-2006, 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 <http://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 works as per the C1X draft N1548 section 6.7.10. This is supported by GCC 4.6.0 and later, in C mode, and its use here generates easier-to-read diagnostics when verify (R) fails. Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per the C++0X draft N3242 section 7.(4). This will likely be supported by future GCC versions, in C++ mode. Use this only with GCC. 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? */ # if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined __cplusplus # define _GL_HAVE__STATIC_ASSERT 1 # endif /* The condition (99 < __GNUC__) is temporary, until we know about the first G++ release that supports static_assert. */ # if (99 < __GNUC__) && defined __cplusplus # define _GL_HAVE_STATIC_ASSERT 1 # 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. * 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, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. Unfortunately, unlike C1X, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ # ifdef _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY _Static_assert # 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_ASSERT && !defined _Static_assert # define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) # endif # if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert # define static_assert _Static_assert /* Draft C1X requires this #define. */ # endif # endif /* @assert.h omit start@ */ /* 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_true (R) 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, as an integer constant expression. Return 1. This is equivalent to verify_expr (R, 1). verify_true is obsolescent; please use verify_expr instead. */ # define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") /* 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 ';'. */ # define verify(R) _GL_VERIFY (R, "verify (" #R ")") /* @assert.h omit end@ */ #endif ��������������gnulib-20111211-stable/lib/verror.c�����������������������������������������������������������������0000664�0000000�0000000�00000005105�11671051007�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* va_list error handler for noninteractive utilities Copyright (C) 2006-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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include <config.h> #include "verror.h" #include "xvasprintf.h" #include <errno.h> #include <stdarg.h> #include <stdlib.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 http://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-20111211-stable/lib/verror.h�����������������������������������������������������������������0000664�0000000�0000000�00000003775�11671051007�0016744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declaration for va_list error-reporting function Copyright (C) 2006-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 <http://www.gnu.org/licenses/>. */ #ifndef _VERROR_H #define _VERROR_H 1 #include <stdarg.h> #include "error.h" /* for _GL_ATTRIBUTE_FORMAT */ #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 ((__printf__, 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 ((__printf__, 5, 0)); #ifdef __cplusplus } #endif #endif /* verror.h */ ���gnulib-20111211-stable/lib/version-etc-fsf.c��������������������������������������������������������0000664�0000000�0000000�00000002202�11671051007�0020412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable with FSF copyright information, for version-etc. Copyright (C) 1999-2006, 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 <http://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-20111211-stable/lib/version-etc.c������������������������������������������������������������0000664�0000000�0000000�00000021765�11671051007�0017655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999-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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> /* Specification. */ #include "version-etc.h" #include <stdarg.h> #include <stdio.h> #include <stdlib.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 = 2011 }; /* 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\ License GPLv3+: GNU GPL version 3 or later <http://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\ \n\ "), stream); switch (n_authors) { case 0: /* The caller must provide at least one author name. */ abort (); 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) { /* 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 (_("\nReport 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: <http://www.gnu.org/software/%s/>\n"), PACKAGE_NAME, PACKAGE); #endif fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>\n"), stdout); } �����������gnulib-20111211-stable/lib/version-etc.h������������������������������������������������������������0000664�0000000�0000000�00000005552�11671051007�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999, 2003, 2005, 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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #ifndef VERSION_ETC_H # define VERSION_ETC_H 1 # include <stdarg.h> # include <stdio.h> /* The `sentinel' attribute was added in gcc 4.0. */ #ifndef _GL_ATTRIBUTE_SENTINEL # if 4 <= __GNUC__ # define _GL_ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) # else # define _GL_ATTRIBUTE_SENTINEL /* empty */ # endif #endif 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 asumed 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; /* Display the usual `Report bugs to' stanza */ extern void emit_bug_reporting_address (void); #endif /* VERSION_ETC_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/vfprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000003302�11671051007�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-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 <http://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) { int saved_errno = errno; free (output); errno = saved_errno; } return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; fseterr (fp); return -1; } return len; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/vma-iter.c���������������������������������������������������������������0000664�0000000�0000000�00000043521�11671051007�0017135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iteration over virtual memory areas. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "vma-iter.h" #include <errno.h> /* errno */ #include <stdlib.h> /* size_t */ #include <fcntl.h> /* open, O_RDONLY */ #include <unistd.h> /* getpagesize, read, close */ #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 __APPLE__ && defined __MACH__ /* MacOS X */ # include <mach/mach.h> #endif #if (defined _WIN32 || 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 /* Support for reading text files in the /proc file system. */ #if defined __linux__ || defined __FreeBSD__ || defined __NetBSD__ /* || 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. */ struct rofile { int fd; size_t position; size_t filled; int eof_seen; char buffer[1024]; }; /* Open a read-only file stream. */ static int rof_open (struct rofile *rof, const char *filename) { int fd = open (filename, O_RDONLY); if (fd < 0) return -1; rof->fd = fd; rof->position = 0; rof->filled = 0; rof->eof_seen = 0; return 0; } /* 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) { if (rof->eof_seen) return -1; else for (;;) { int n = read (rof->fd, rof->buffer, sizeof (rof->buffer)); # ifdef EINTR if (n < 0 && errno == EINTR) continue; # endif if (n <= 0) { rof->eof_seen = 1; return -1; } rof->filled = n; rof->position = 0; break; } } 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) { close (rof->fd); } #endif void vma_iterate (vma_iterate_callback_fn callback, void *data) { #if defined __linux__ /* || defined __CYGWIN__ */ struct rofile rof; int c; /* Open the current process' maps file. It describes one VMA per line. */ if (rof_open (&rof, "/proc/self/maps") < 0) return; for (;;) { unsigned long start, end; unsigned int flags; /* 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 (callback (data, start, end, flags)) break; } rof_close (&rof); #elif defined __FreeBSD__ || defined __NetBSD__ struct rofile rof; int c; /* Open the current process' maps file. It describes one VMA per line. */ if (rof_open (&rof, "/proc/curproc/map") < 0) return; for (;;) { unsigned long start, end; unsigned int flags; /* 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; /* 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 (callback (data, start, end, flags)) break; } rof_close (&rof); #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); if (fd < 0) return; 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 = (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; fail1: munmap (auxmap, memneed); fail2: close (fd); return; #elif defined __APPLE__ && defined __MACH__ /* MacOS 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 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 __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; } #elif (defined _WIN32 || defined __WIN32__) || defined __CYGWIN__ /* Windows platform. Use the native Windows API. */ MEMORY_BASIC_INFORMATION info; unsigned long 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) { unsigned long start, end; unsigned int flags; start = (unsigned long)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 = (unsigned long)info.BaseAddress + info.RegionSize; } #elif defined __BEOS__ || defined __HAIKU__ /* Use the BeOS specific API. */ area_info info; int32 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; } #elif HAVE_MQUERY /* OpenBSD */ 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; } #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; } #endif /* TEST */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/vma-iter.h���������������������������������������������������������������0000664�0000000�0000000�00000005152�11671051007�0017140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iteration over virtual memory areas. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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(). */ extern void 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 __FreeBSD__ || defined __NetBSD__ || defined __sgi || defined __osf__ || (defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __WIN32__) || defined __CYGWIN__ || defined __BEOS__ || defined __HAIKU__ || HAVE_MQUERY # define VMA_ITERATE_SUPPORTED 1 #endif #ifdef __cplusplus } #endif #endif /* _VMA_ITER_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/vprintf.c����������������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0017100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. 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 <http://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-20111211-stable/lib/vsnprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000003651�11671051007�0017442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-2011 Free Software Foundation, Inc. Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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. */ #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-20111211-stable/lib/vsprintf.c���������������������������������������������������������������0000664�0000000�0000000�00000004062�11671051007�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-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 <http://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-20111211-stable/lib/w32sock.h����������������������������������������������������������������0000664�0000000�0000000�00000006336�11671051007�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* w32sock.h --- internal auxilliary functions for Windows socket functions Copyright (C) 2008-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 <http://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(). */ #include "msvc-nothrow.h" #define FD_TO_SOCKET(fd) ((SOCKET) _get_osfhandle ((fd))) #define SOCKET_TO_FD(fh) (_open_osfhandle ((long) (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-20111211-stable/lib/w32spawn.h���������������������������������������������������������������0000664�0000000�0000000�00000015367�11671051007�0017111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary functions for the creation of subprocesses. Native Woe32 API. Copyright (C) 2001, 2003-2011 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 <http://www.gnu.org/licenses/>. */ /* Get declarations of the Win32 API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> /* Get _open_osfhandle(). */ #include <io.h> #include <stdbool.h> #include <string.h> #include <unistd.h> #include <errno.h> /* Get _get_osfhandle(). */ #include "msvc-nothrow.h" #include "cloexec.h" #include "xalloc.h" /* 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; } /* 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. */ static int dup_safer_noinherit (int fd) { return fd_safer_noinherit (dup_noinherit (fd)); } /* Undoes the effect of TEMPFD = dup_safer_noinherit (ORIGFD); */ static 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); } } /* 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 Win32 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): \" -> " \\\" -> \" \\\\\" -> \\" */ #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" static char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XNMALLOC (1 + argc + 1, 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 Win32 CreateProcess(). */ *new_argv++ = "sh.exe"; /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { bool quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; 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; quoted_string = (char *) xmalloc (length + 1); p = quoted_string; 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'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wait-process.c�����������������������������������������������������������0000664�0000000�0000000�00000026103�11671051007�0020026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Waiting for a subprocess to finish. Copyright (C) 2001-2003, 2005-2011 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 <http://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 _MSC_VER || defined __MINGW32__ #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 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); } } } /* 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); at_fatal_signal (cleanup_slaves); 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 inline 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-20111211-stable/lib/wait-process.h�����������������������������������������������������������0000664�0000000�0000000�00000005706�11671051007�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Waiting for a subprocess to finish. Copyright (C) 2001-2003, 2006, 2008-2011 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 <http://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-20111211-stable/lib/waitpid.c����������������������������������������������������������������0000664�0000000�0000000�00000002063�11671051007�0017046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wait for process state change. Copyright (C) 2001-2003, 2005-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <config.h> /* Specification. */ #include <sys/wait.h> /* Implementation for native Win32 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-20111211-stable/lib/wchar.in.h���������������������������������������������������������������0000664�0000000�0000000�00000077606�11671051007�0017142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. 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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Eric Blake. */ /* * ISO C 99 <wchar.h> for platforms that have issues. * <http://www.opengroup.org/susv3xbd/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 __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H /* Special invocation convention: - Inside glibc and uClibc header files. - 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>. - 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 /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. 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 #ifndef __GLIBC__ # include <stdio.h> # include <time.h> #endif /* 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 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 /* MSVC defines wint_t as 'unsigned short' in <crtdefs.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 defined _MSC_VER # if !GNULIB_defined_wint_t # include <crtdefs.h> 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. */ #if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ # if !GNULIB_defined_mbstate_t typedef int rpl_mbstate_t; # undef mbstate_t # define mbstate_t rpl_mbstate_t # 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_CXXALIAS_RPL (btowc, wint_t, (int c)); # else # if !@HAVE_BTOWC@ _GL_FUNCDECL_SYS (btowc, wint_t, (int c)); # endif _GL_CXXALIAS_SYS (btowc, wint_t, (int c)); # endif _GL_CXXALIASWARN (btowc); #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_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)); # endif _GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); # endif _GL_CXXALIASWARN (wctob); #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 _GL_CXXALIASWARN (mbsinit); #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 *pwc, const char *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRTOWC@ _GL_FUNCDECL_SYS (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrtowc, size_t, (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbrtowc); #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 *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRLEN@ _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbrlen); #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 *dest, const char **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)); # else # if !@HAVE_MBSRTOWCS@ _GL_FUNCDECL_SYS (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (mbsrtowcs); #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 *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps)); # else # if !@HAVE_MBSNRTOWCS@ _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *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 *s, wchar_t wc, mbstate_t *ps)); _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # else # if !@HAVE_WCRTOMB@ _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcrtomb); #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 *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)); # else # if !@HAVE_WCSRTOMBS@ _GL_FUNCDECL_SYS (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsrtombs, size_t, (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcsrtombs); #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 *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps)); # else # if !@HAVE_WCSNRTOMBS@ _GL_FUNCDECL_SYS (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsnrtombs, size_t, (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps)); # endif _GL_CXXALIASWARN (wcsnrtombs); #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_CXXALIAS_RPL (wcwidth, int, (wchar_t)); # else # if !@HAVE_DECL_WCWIDTH@ /* wcwidth exists but is not declared. */ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t)); # endif _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); # endif _GL_CXXALIASWARN (wcwidth); #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)); # 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)); # else _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)); # endif _GL_CXXALIAS_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wmemcmp); #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 *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wmemcpy); #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)); _GL_CXXALIASWARN (wmemmove); #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 /* 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)); _GL_CXXALIASWARN (wmemset); #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)); # endif _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); _GL_CXXALIASWARN (wcslen); #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)); # 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 *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); _GL_CXXALIASWARN (wcscpy); #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 *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *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 *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wcsncpy); #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 *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, (wchar_t *dest, const wchar_t *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 *dest, const wchar_t *src)); # endif _GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); _GL_CXXALIASWARN (wcscat); #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 *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncat, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); _GL_CXXALIASWARN (wcsncat); #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)); # endif _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscmp); #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)); # endif _GL_CXXALIAS_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncmp); #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)); # 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)); # 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)); _GL_CXXALIASWARN (wcscoll); #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 *s1, const wchar_t *s2, size_t n)); # endif _GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsxfrm); #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 !@HAVE_WCSDUP@ _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); _GL_CXXALIASWARN (wcsdup); #elif 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 #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)); # 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)); # else _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)); # 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)); # else _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)); # endif _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); _GL_CXXALIASWARN (wcscspn); #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)); # endif _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN (wcsspn); #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)); # 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)); # else _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 *haystack, const wchar_t *needle)); # 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 *, 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 (wcsstr, wchar_t *, (wchar_t *haystack, const wchar_t *needle)); _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, (const wchar_t *haystack, const wchar_t *needle)); # else _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 !@HAVE_WCSTOK@ _GL_FUNCDECL_SYS (wcstok, wchar_t *, (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); # endif _GL_CXXALIAS_SYS (wcstok, wchar_t *, (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); _GL_CXXALIASWARN (wcstok); #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_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)); # endif _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); # endif _GL_CXXALIASWARN (wcswidth); #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 #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcpcpy-impl.h������������������������������������������������������������0000664�0000000�0000000�00000001625�11671051007�0017661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcpcpy.c�����������������������������������������������������������������0000664�0000000�0000000�00000001540�11671051007�0016711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcpcpy-impl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcpncpy-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002114�11671051007�0020031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a size-bounded wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcpncpy.c����������������������������������������������������������������0000664�0000000�0000000�00000001556�11671051007�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a size-bounded wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcpncpy-impl.h" ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcrtomb.c����������������������������������������������������������������0000664�0000000�0000000�00000002715�11671051007�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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) { /* This implementation of wcrtomb on top of wctomb() supports only stateless encodings. ps must be in the initial state. */ if (ps != NULL && !mbsinit (ps)) { errno = EINVAL; return (size_t)(-1); } if (s == NULL) /* We know the NUL wide character corresponds to the NUL character. */ return 1; else { int ret = wctomb (s, wc); if (ret >= 0) return ret; else { errno = EILSEQ; return (size_t)(-1); } } } ���������������������������������������������������gnulib-20111211-stable/lib/wcscasecmp-impl.h��������������������������������������������������������0000664�0000000�0000000�00000002311�11671051007�0020475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings ignoring case. Copyright (C) 1999, 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcscasecmp.c�������������������������������������������������������������0000664�0000000�0000000�00000001615�11671051007�0017537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings ignoring case. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <wctype.h> #include "wcscasecmp-impl.h" �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcscat-impl.h������������������������������������������������������������0000664�0000000�0000000�00000001721�11671051007�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two wide strings. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcscat.c�����������������������������������������������������������������0000664�0000000�0000000�00000001552�11671051007�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two wide strings. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcscat-impl.h" ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcschr-impl.h������������������������������������������������������������0000664�0000000�0000000�00000002010�11671051007�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide string for a wide character. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcschr.c�����������������������������������������������������������������0000664�0000000�0000000�00000001565�11671051007�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide string for a wide character. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcschr-impl.h" �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcscmp-impl.h������������������������������������������������������������0000664�0000000�0000000�00000002241�11671051007�0017643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcscmp.c�����������������������������������������������������������������0000664�0000000�0000000�00000001546�11671051007�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcscmp-impl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcscoll-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000005336�11671051007�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings using the current locale. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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) { int saved_errno = errno; free (mbs1); errno = saved_errno; } if (mbs2 != mbbuf2) { int saved_errno = errno; free (mbs2); errno = saved_errno; } 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-20111211-stable/lib/wcscoll.c����������������������������������������������������������������0000664�0000000�0000000�00000001674�11671051007�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings using the current locale. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcscpy-impl.h������������������������������������������������������������0000664�0000000�0000000�00000001667�11671051007�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcscpy.c�����������������������������������������������������������������0000664�0000000�0000000�00000001540�11671051007�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcscpy-impl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcscspn-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002575�11671051007�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search a wide string for any of a set of wide characters. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcscspn.c����������������������������������������������������������������0000664�0000000�0000000�00000001607�11671051007�0017070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search a wide string for any of a set of wide characters. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcscspn-impl.h" �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsdup-impl.h������������������������������������������������������������0000664�0000000�0000000�00000002102�11671051007�0017650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsdup.c�����������������������������������������������������������������0000664�0000000�0000000�00000001572�11671051007�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdlib.h> #include "wcsdup-impl.h" ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcslen-impl.h������������������������������������������������������������0000664�0000000�0000000�00000001643�11671051007�0017647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the length of a wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcslen.c�����������������������������������������������������������������0000664�0000000�0000000�00000001563�11671051007�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the length of a wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcslen-impl.h" ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsncasecmp-impl.h�������������������������������������������������������0000664�0000000�0000000�00000002413�11671051007�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings ignoring case. Copyright (C) 1999, 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsncasecmp.c������������������������������������������������������������0000664�0000000�0000000�00000001616�11671051007�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings ignoring case. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <wctype.h> #include "wcsncasecmp-impl.h" ������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsncat-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002047�11671051007�0020015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Append part of a wide string to a wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsncat.c����������������������������������������������������������������0000664�0000000�0000000�00000001574�11671051007�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Append part of a wide string to a wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsncat-impl.h" ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsncmp-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002343�11671051007�0020024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsncmp.c����������������������������������������������������������������0000664�0000000�0000000�00000001547�11671051007�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare two wide strings. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsncmp-impl.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsncpy-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002155�11671051007�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a size-bounded wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsncpy.c����������������������������������������������������������������0000664�0000000�0000000�00000001556�11671051007�0017101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy a size-bounded wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsncpy-impl.h" ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsnlen-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000001730�11671051007�0020022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the length of a size-bounded wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsnlen.c����������������������������������������������������������������0000664�0000000�0000000�00000001601�11671051007�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the length of a size-bounded wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsnlen-impl.h" �������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsnrtombs-impl.h��������������������������������������������������������0000664�0000000�0000000�00000004735�11671051007�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ size_t wcsnrtombs (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &_gl_wcsrtombs_state; { const wchar_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--) { wchar_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--) { wchar_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-20111211-stable/lib/wcsnrtombs.c�������������������������������������������������������������0000664�0000000�0000000�00000001730�11671051007�0017606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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; #include "wcsnrtombs-impl.h" ����������������������������������������gnulib-20111211-stable/lib/wcspbrk-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002620�11671051007�0020023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search a wide string for any of a set of wide characters. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcspbrk.c����������������������������������������������������������������0000664�0000000�0000000�00000001607�11671051007�0017063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search a wide string for any of a set of wide characters. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcspbrk-impl.h" �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsrchr-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002244�11671051007�0020025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide string for a wide character. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsrchr.c����������������������������������������������������������������0000664�0000000�0000000�00000001566�11671051007�0017067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide string for a wide character. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsrchr-impl.h" ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsrtombs-impl.h���������������������������������������������������������0000664�0000000�0000000�00000004646�11671051007�0020405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ size_t wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) { if (ps == NULL) ps = &_gl_wcsrtombs_state; { const wchar_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++) { wchar_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++) { wchar_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-20111211-stable/lib/wcsrtombs-state.c��������������������������������������������������������0000664�0000000�0000000�00000003123�11671051007�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 MacOS X 10.3, see <http://lists.gnu.org/archive/html/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-20111211-stable/lib/wcsrtombs.c��������������������������������������������������������������0000664�0000000�0000000�00000003036�11671051007�0017431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide string to string. Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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> # include "wcsrtombs-impl.h" #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsspn-impl.h������������������������������������������������������������0000664�0000000�0000000�00000002574�11671051007�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Advance in a wide string, skipping any of a set of wide characters. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsspn.c�����������������������������������������������������������������0000664�0000000�0000000�00000001620�11671051007�0016720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Advance in a wide string, skipping any of a set of wide characters. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsspn-impl.h" ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsstr-impl.h������������������������������������������������������������0000664�0000000�0000000�00000003127�11671051007�0017700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locate a substring in a wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcsstr.c�����������������������������������������������������������������0000664�0000000�0000000�00000001561�11671051007�0016734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locate a substring in a wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcsstr-impl.h" �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcstok-impl.h������������������������������������������������������������0000664�0000000�0000000�00000002661�11671051007�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a wide string into tokens. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcstok.c�����������������������������������������������������������������0000664�0000000�0000000�00000001555�11671051007�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a wide string into tokens. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wcstok-impl.h" ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcswidth-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002374�11671051007�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine number of screen columns needed for a size-bounded wide string. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wcswidth.c���������������������������������������������������������������0000664�0000000�0000000�00000001655�11671051007�0017247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine number of screen columns needed for a size-bounded wide string. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <limits.h> #include "wcswidth-impl.h" �����������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcsxfrm-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000005172�11671051007�0020046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Transform wide string for comparison using the current locale. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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) { saved_errno = errno; free (mbs2); errno = saved_errno; } 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-20111211-stable/lib/wcsxfrm.c����������������������������������������������������������������0000664�0000000�0000000�00000001710�11671051007�0017074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Transform wide string for comparison using the current locale. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wctob.c������������������������������������������������������������������0000664�0000000�0000000�00000002264�11671051007�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to unibyte character. Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wctomb-impl.h������������������������������������������������������������0000664�0000000�0000000�00000002105�11671051007�0017641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wctomb.c�����������������������������������������������������������������0000664�0000000�0000000�00000001616�11671051007�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "wctomb-impl.h" ������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wctrans-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002266�11671051007�0020037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character case conversion. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wctrans.c����������������������������������������������������������������0000664�0000000�0000000�00000001630�11671051007�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character case conversion. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include <string.h> #include "wctrans-impl.h" ��������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wctype-impl.h������������������������������������������������������������0000664�0000000�0000000�00000005055�11671051007�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character property. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wctype.c�����������������������������������������������������������������0000664�0000000�0000000�00000001620�11671051007�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character property. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include <string.h> #include "wctype-impl.h" ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wctype.in.h��������������������������������������������������������������0000664�0000000�0000000�00000031244�11671051007�0017335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wctype.h>, for platforms that lack it. Copyright (C) 2006-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible and Paul Eggert. */ /* * ISO C 99 <wctype.h> for platforms that lack it. * <http://www.opengroup.org/susv3xbd/wctype.h.html> * * iswctype, towctrans, towlower, towupper, wctrans, wctype, * wctrans_t, and wctype_t are not yet implemented. */ #ifndef _@GUARD_PREFIX@_WCTYPE_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_WINT_T@ /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ # include <stddef.h> # include <stdio.h> # include <time.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 /* 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 /* MSVC defines wint_t as 'unsigned short' in <crtdefs.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 defined _MSC_VER # if !GNULIB_defined_wint_t # include <crtdefs.h> 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. Assume all 11 functions (all isw* except iswblank) are implemented the same way, or not at all. */ # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ /* 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 static inline int # if @REPLACE_ISWCNTRL@ rpl_iswalnum # else iswalnum # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswalpha # else iswalpha # endif (wint_t wc) { return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswblank # else iswblank # endif (wint_t wc) { return wc == ' ' || wc == '\t'; } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswcntrl # else iswcntrl # endif (wint_t wc) { return (wc & ~0x1f) == 0 || wc == 0x7f; } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswdigit # else iswdigit # endif (wint_t wc) { return wc >= '0' && wc <= '9'; } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswgraph # else iswgraph # endif (wint_t wc) { return wc >= '!' && wc <= '~'; } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswlower # else iswlower # endif (wint_t wc) { return wc >= 'a' && wc <= 'z'; } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswprint # else iswprint # endif (wint_t wc) { return wc >= ' ' && wc <= '~'; } static 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'))); } static 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'); } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswupper # else iswupper # endif (wint_t wc) { return wc >= 'A' && wc <= 'Z'; } static inline int # if @REPLACE_ISWCNTRL@ rpl_iswxdigit # else iswxdigit # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); } static inline wint_t # if @REPLACE_TOWLOWER@ rpl_towlower # else towlower # endif (wint_t wc) { return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); } static inline wint_t # if @REPLACE_TOWLOWER@ rpl_towupper # else towupper # endif (wint_t wc) { return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); } # elif @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 defined __MINGW32__ /* 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. */ static 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 static 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__ */ # define GNULIB_defined_wctype_functions 1 #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); #endif _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); #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 _GL_CXXALIASWARN (iswblank); #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)); _GL_CXXALIASWARN (wctype); #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 !@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)); _GL_CXXALIASWARN (iswctype); #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 _GL_CXXALIASWARN (towlower); _GL_CXXALIASWARN (towupper); #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)); _GL_CXXALIASWARN (wctrans); #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)); _GL_CXXALIASWARN (towctrans); #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 #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif /* _@GUARD_PREFIX@_WCTYPE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wcwidth.c����������������������������������������������������������������0000664�0000000�0000000�00000002773�11671051007�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the number of screen columns needed for a character. Copyright (C) 2006-2007, 2010-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 <http://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" int wcwidth (wchar_t wc) #undef wcwidth { /* In UTF-8 locales, use a Unicode aware width function. */ const char *encoding = locale_charset (); if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0)) { /* We assume that in a UTF-8 locale, a wide character is the same as a Unicode character. */ return uc_width (wc, encoding); } 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-20111211-stable/lib/wmemchr-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000001720�11671051007�0020012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide character array for a wide character. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wmemchr.c����������������������������������������������������������������0000664�0000000�0000000�00000001577�11671051007�0017060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Search wide character array for a wide character. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemchr-impl.h" ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wmemcmp-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000002236�11671051007�0020020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare wide character arrays. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wmemcmp.c����������������������������������������������������������������0000664�0000000�0000000�00000001554�11671051007�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare wide character arrays. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemcmp-impl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wmemcpy-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000001662�11671051007�0020036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wmemcpy.c����������������������������������������������������������������0000664�0000000�0000000�00000001550�11671051007�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemcpy-impl.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wmemmove-impl.h����������������������������������������������������������0000664�0000000�0000000�00000002260�11671051007�0020204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wmemmove.c���������������������������������������������������������������0000664�0000000�0000000�00000001551�11671051007�0017242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy wide character array. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemmove-impl.h" �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/wmemset-impl.h�����������������������������������������������������������0000664�0000000�0000000�00000001623�11671051007�0020033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill wide character array. Copyright (C) 1999, 2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 1999. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/wmemset.c����������������������������������������������������������������0000664�0000000�0000000�00000001550�11671051007�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Fill wide character array. 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 General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "wmemset-impl.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/write-any-file.c���������������������������������������������������������0000664�0000000�0000000�00000002562�11671051007�0020245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether we can write any file. 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "write-any-file.h" #include "priv-set.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 () == 0); #endif can_write = can; initialized = true; } return can_write; } ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/write-any-file.h���������������������������������������������������������0000664�0000000�0000000�00000000065�11671051007�0020246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdbool.h> bool can_write_any_file (void); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/write.c������������������������������������������������������������������0000664�0000000�0000000�00000012020�11671051007�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible write() function. Copyright (C) 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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 __WIN32__) && ! defined __CYGWIN__ # include <errno.h> # include <signal.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "msvc-inval.h" # include "msvc-nothrow.h" # undef write # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static inline 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-20111211-stable/lib/xalloc-die.c�������������������������������������������������������������0000664�0000000�0000000�00000002434�11671051007�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a memory allocation failure and exit. Copyright (C) 1997-2000, 2002-2004, 2006, 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 <http://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-20111211-stable/lib/xalloc-oversized.h�������������������������������������������������������0000664�0000000�0000000�00000003237�11671051007�0020710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc-oversized.h -- memory allocation size checking Copyright (C) 1990-2000, 2003-2004, 2006-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 <http://www.gnu.org/licenses/>. */ #ifndef XALLOC_OVERSIZED_H_ # define XALLOC_OVERSIZED_H_ # include <stddef.h> /* Return 1 if an array of N objects, each of size S, cannot exist due to size arithmetic overflow. S must be positive and N must be nonnegative. This is a macro, not an inline function, so that it works correctly even when SIZE_MAX < N. By gnulib convention, SIZE_MAX represents overflow in size calculations, so the conservative dividend to use here is SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. However, malloc (SIZE_MAX) fails on all known hosts where sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for exactly-SIZE_MAX allocations on such hosts; this avoids a test and branch when S is known to be 1. */ # define xalloc_oversized(n, s) \ ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) #endif /* !XALLOC_OVERSIZED_H_ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xalloc.h�����������������������������������������������������������������0000664�0000000�0000000�00000017452�11671051007�0016704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc.h -- malloc with out-of-memory checking Copyright (C) 1990-2000, 2003-2004, 2006-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 <http://www.gnu.org/licenses/>. */ #ifndef XALLOC_H_ # define XALLOC_H_ # include <stddef.h> # include "xalloc-oversized.h" # ifdef __cplusplus extern "C" { # endif # if __GNUC__ >= 3 # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif # if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) # else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) # endif /* 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); void *xmalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); void *xzalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); void *xcalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); void *xrealloc (void *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); void *x2realloc (void *p, size_t *pn); void *xmemdup (void const *p, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((2)); char *xstrdup (char const *str) _GL_ATTRIBUTE_MALLOC; /* 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)))) # if HAVE_INLINE # define static_inline static inline # else void *xnmalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); void *xnrealloc (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); void *x2nrealloc (void *p, size_t *pn, size_t s); char *xcharalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); # endif # ifdef static_inline /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ static_inline void *xnmalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); static_inline void * xnmalloc (size_t n, size_t s) { if (xalloc_oversized (n, s)) xalloc_die (); return xmalloc (n * s); } /* 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. */ static_inline void *xnrealloc (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); static_inline void * xnrealloc (void *p, size_t n, size_t s) { if (xalloc_oversized (n, s)) xalloc_die (); return xrealloc (p, n * s); } /* 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. *PN must be nonzero unless P is null, and 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; } */ static_inline 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 = ceil (1.5 * N) so that progress is made if N == 1. Check for overflow, so that N * S stays in size_t range. The check is slightly conservative, but an exact check isn't worth the trouble. */ if ((size_t) -1 / 3 * 2 / s <= n) xalloc_die (); n += (n + 1) / 2; } *pn = n; return xrealloc (p, n * s); } /* Return a pointer to a new buffer of N bytes. This is like xmalloc, except it returns char *. */ static_inline char *xcharalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); static_inline char * xcharalloc (size_t n) { return XNMALLOC (n, char); } # endif # ifdef __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 * xnrealloc (T *p, size_t n, size_t s) { return (T *) xnrealloc ((void *) 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 #endif /* !XALLOC_H_ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xasprintf.c��������������������������������������������������������������0000664�0000000�0000000�00000002013�11671051007�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf with out-of-memory checking. Copyright (C) 1999, 2002-2004, 2006, 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 <http://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-20111211-stable/lib/xconcat-filename.c�������������������������������������������������������0000664�0000000�0000000�00000002654�11671051007�0020630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2006-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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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-20111211-stable/lib/xfreopen.c���������������������������������������������������������������0000664�0000000�0000000�00000002636�11671051007�0017241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* a wrapper for frepoen Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "xfreopen.h" #include <errno.h> #include "error.h" #include "exitfail.h" #include "quote.h" #include "stdio--.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-20111211-stable/lib/xfreopen.h���������������������������������������������������������������0000664�0000000�0000000�00000000125�11671051007�0017235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> void xfreopen (char const *filename, char const *mode, FILE *fp); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xgetcwd.c����������������������������������������������������������������0000664�0000000�0000000�00000002273�11671051007�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgetcwd.c -- return current directory with unlimited length Copyright (C) 2001, 2003-2004, 2006-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 <http://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. */ char * xgetcwd (void) { char *cwd = getcwd (NULL, 0); if (! cwd && errno == ENOMEM) xalloc_die (); return cwd; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xgetcwd.h����������������������������������������������������������������0000664�0000000�0000000�00000001412�11671051007�0017054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* prototype for xgetcwd Copyright (C) 1995, 2001, 2003, 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 <http://www.gnu.org/licenses/>. */ extern char *xgetcwd (void); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xgetdomainname.c���������������������������������������������������������0000664�0000000�0000000�00000004232�11671051007�0020405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgetdomainname.c -- Return the NIS domain name, without size limitations. Copyright (C) 1992, 1996, 2000-2001, 2003-2004, 2006, 2008-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 <http://www.gnu.org/licenses/>. */ /* Based on xgethostname.c, written by Jim Meyering. */ #include <config.h> /* Specification. */ #include "xgetdomainname.h" /* Get getdomainname. */ #include <unistd.h> /* Get errno. */ #include <errno.h> /* Get free. */ #include <stdlib.h> #include "xalloc.h" #ifndef INITIAL_DOMAINNAME_LENGTH # define INITIAL_DOMAINNAME_LENGTH 34 #endif /* 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. */ char * xgetdomainname (void) { char *domainname; size_t size; size = INITIAL_DOMAINNAME_LENGTH; domainname = xmalloc (size); while (1) { int k = size - 1; int err; errno = 0; domainname[k] = '\0'; err = getdomainname (domainname, size); if (err >= 0 && domainname[k] == '\0') break; else if (err < 0 && errno != EINVAL) { int saved_errno = errno; free (domainname); errno = saved_errno; return NULL; } size *= 2; domainname = xrealloc (domainname, size); } return domainname; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xgetdomainname.h���������������������������������������������������������0000664�0000000�0000000�00000002473�11671051007�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgetdomainname.h -- Return the NIS domain name, without size limitations. Copyright (C) 1992, 1996, 2000-2001, 2003, 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 <http://www.gnu.org/licenses/>. */ #ifndef _XGETDOMAINNAME_H #define _XGETDOMAINNAME_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); #endif /* _XGETDOMAINNAME_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xgetgroups.c�������������������������������������������������������������0000664�0000000�0000000�00000002233�11671051007�0017613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgetgroups.c -- return a list of the groups a user or current process is in 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 <http://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-20111211-stable/lib/xgethostname.c�����������������������������������������������������������0000664�0000000�0000000�00000004133�11671051007�0020113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xgethostname.c -- return current hostname with unlimited length Copyright (C) 1992, 1996, 2000-2001, 2003-2006, 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 <http://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> /* Specification. */ #include "xgethostname.h" #include <stdlib.h> #include <errno.h> #include <unistd.h> #include "xalloc.h" #ifndef INITIAL_HOSTNAME_LENGTH # define INITIAL_HOSTNAME_LENGTH 34 #endif /* Return the current hostname in malloc'd storage. If malloc fails, exit. Upon any other failure, return NULL and set errno. */ char * xgethostname (void) { char *hostname = NULL; size_t size = INITIAL_HOSTNAME_LENGTH; 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. */ size_t size_1; hostname = x2realloc (hostname, &size); size_1 = size - 1; hostname[size_1 - 1] = '\0'; errno = 0; if (gethostname (hostname, size_1) == 0) { if (! hostname[size_1 - 1]) break; } else if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL /* OSX/Darwin does this when the buffer is not large enough */ && errno != ENOMEM) { int saved_errno = errno; free (hostname); errno = saved_errno; return NULL; } } return hostname; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xgethostname.h�����������������������������������������������������������0000664�0000000�0000000�00000000033�11671051007�0020113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������char *xgethostname (void); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xmalloc.c����������������������������������������������������������������0000664�0000000�0000000�00000006523�11671051007�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmalloc.c -- malloc with out of memory checking Copyright (C) 1990-2000, 2002-2006, 2008-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #if ! HAVE_INLINE # define static_inline #endif #include "xalloc.h" #undef static_inline #include <stdlib.h> #include <string.h> /* 1 if calloc is known to be compatible with GNU calloc. This matters if we are not also using the calloc module, which defines HAVE_CALLOC_GNU and supports the GNU API even on non-GNU platforms. */ #if defined HAVE_CALLOC_GNU || (defined __GLIBC__ && !defined __UCLIBC__) enum { HAVE_GNU_CALLOC = 1 }; #else enum { HAVE_GNU_CALLOC = 0 }; #endif /* Allocate N bytes of memory dynamically, with error checking. */ void * xmalloc (size_t n) { void *p = malloc (n); if (!p && n != 0) xalloc_die (); return p; } /* Change the size of an allocated block of memory P to N bytes, with error checking. */ void * xrealloc (void *p, size_t n) { if (!n && p) { /* The GNU and C99 realloc behaviors disagree here. Act like GNU, even if the underlying realloc is C99. */ free (p); return NULL; } p = realloc (p, n); if (!p && n) xalloc_die (); return p; } /* If P is null, allocate a block of at least *PN bytes; otherwise, reallocate P so that it contains more than *PN bytes. *PN must be nonzero unless P is null. Set *PN to the new block's size, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. */ void * x2realloc (void *p, size_t *pn) { return x2nrealloc (p, pn, 1); } /* 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 memset (xmalloc (s), 0, s); } /* Allocate zeroed memory for N elements of S bytes, with error checking. S must be nonzero. */ void * xcalloc (size_t n, size_t s) { void *p; /* Test for overflow, since some calloc implementations don't have proper overflow checks. But omit overflow and size-zero tests if HAVE_GNU_CALLOC, since GNU calloc catches overflow and never returns NULL if successful. */ if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s)) || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0))) xalloc_die (); return p; } /* 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); } /* Clone STRING. */ char * xstrdup (char const *string) { return xmemdup (string, strlen (string) + 1); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xmalloca.c���������������������������������������������������������������0000664�0000000�0000000�00000002050�11671051007�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation with out of memory checking. Copyright (C) 2003, 2006-2007, 2009-2011 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 <http://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-20111211-stable/lib/xmalloca.h���������������������������������������������������������������0000664�0000000�0000000�00000004062�11671051007�0017213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation with out of memory checking. Copyright (C) 2003, 2005, 2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _XMALLOCA_H #define _XMALLOCA_H #include "malloca.h" #include "xalloc.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. Upon failure, it exits with an error message. */ #if HAVE_ALLOCA # define xmalloca(N) \ ((N) < 4032 - sa_increment \ ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ : xmmalloca (N)) extern void * xmmalloca (size_t n); #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. 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) * (s)) #else # define xnmalloca(n, s) \ xnmalloc ((n), (s)) #endif #ifdef __cplusplus } #endif #endif /* _XMALLOCA_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xmemcoll.c���������������������������������������������������������������0000664�0000000�0000000�00000005061�11671051007�0017226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locale-specific memory comparison. Copyright (C) 2002-2004, 2006, 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 <http://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-20111211-stable/lib/xmemcoll.h���������������������������������������������������������������0000664�0000000�0000000�00000000177�11671051007�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stddef.h> int xmemcoll (char *, size_t, char *, size_t); int xmemcoll0 (char const *, size_t, char const *, size_t); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xmemdup0.c���������������������������������������������������������������0000664�0000000�0000000�00000003202�11671051007�0017140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmemdup0.c -- copy a block of arbitrary bytes, plus a trailing NUL Copyright (C) 2008-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 <http://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); memcpy (result, p, s); result[s] = 0; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xmemdup0.h���������������������������������������������������������������0000664�0000000�0000000�00000002430�11671051007�0017147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmemdup0.h -- copy a block of arbitrary bytes, plus a trailing NUL Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #ifndef XMEMDUP_H_ # define XMEMDUP_H_ # include <stddef.h> # ifdef __cplusplus extern "C" { # endif /* 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); char *xmemdup0 (void const *p, size_t s); # ifdef __cplusplus } # endif #endif /* !XMEMDUP0_H_ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xnanosleep.c�������������������������������������������������������������0000664�0000000�0000000�00000003727�11671051007�0017571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xnanosleep.c -- a more convenient interface to nanosleep Copyright (C) 2002-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 <http://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 <timespec.h> #include <errno.h> #include <time.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) { 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). */ errno = 0; if (nanosleep (&ts_sleep, NULL) == 0) break; if (errno != EINTR && errno != 0) return -1; } return 0; } �����������������������������������������gnulib-20111211-stable/lib/xnanosleep.h�������������������������������������������������������������0000664�0000000�0000000�00000000031�11671051007�0017557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������int xnanosleep (double); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xprintf.c����������������������������������������������������������������0000664�0000000�0000000�00000004303�11671051007�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* printf wrappers that fail immediately for non-file-related errors 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 <http://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-20111211-stable/lib/xprintf.h����������������������������������������������������������������0000664�0000000�0000000�00000003605�11671051007�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* printf wrappers that fail immediately for non-file-related errors 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 <http://www.gnu.org/licenses/>. */ #ifndef _XPRINTF_H #define _XPRINTF_H #include <stdarg.h> #include <stdio.h> /* 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. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif extern int xprintf (char const *restrict format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)); extern int xvprintf (char const *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 0)); extern int xfprintf (FILE *restrict stream, char const *restrict format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); extern int xvfprintf (FILE *restrict stream, char const *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 0)); #endif ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xreadlink.c��������������������������������������������������������������0000664�0000000�0000000�00000002700�11671051007�0017364�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-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 <http://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-20111211-stable/lib/xreadlink.h��������������������������������������������������������������0000664�0000000�0000000�00000001712�11671051007�0017373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reading symbolic links without size limitation. Copyright (C) 2001, 2003-2004, 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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering <jim@meyering.net> */ extern char *xreadlink (char const *filename); #if GNULIB_XREADLINKAT extern char *xreadlinkat (int fd, char const *filename); #endif ������������������������������������������������������gnulib-20111211-stable/lib/xreadlinkat.c������������������������������������������������������������0000664�0000000�0000000�00000003123�11671051007�0017711�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-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 <http://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-20111211-stable/lib/xsetenv.c����������������������������������������������������������������0000664�0000000�0000000�00000002322�11671051007�0017077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Setting environment variables, with out-of-memory checking. Copyright (C) 2001-2002, 2005-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 <http://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-20111211-stable/lib/xsetenv.h����������������������������������������������������������������0000664�0000000�0000000�00000002157�11671051007�0017112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Setting environment variables, with out-of-memory checking. Copyright (C) 2001-2002, 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 <http://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-20111211-stable/lib/xsize.h������������������������������������������������������������������0000664�0000000�0000000�00000006706�11671051007�0016564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xsize.h -- Checked size_t computations. Copyright (C) 2003, 2008-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 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #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 /* 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. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif 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. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif 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. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif 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 an inline 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) #endif /* _XSIZE_H */ ����������������������������������������������������������gnulib-20111211-stable/lib/xstriconv.c��������������������������������������������������������������0000664�0000000�0000000�00000003117�11671051007�0017445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion with out-of-memory checking. Copyright (C) 2001-2004, 2006, 2009-2011 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 <http://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-20111211-stable/lib/xstriconv.h��������������������������������������������������������������0000664�0000000�0000000�00000006056�11671051007�0017457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion with out-of-memory checking. Copyright (C) 2001-2004, 2006-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _XSTRICONV_H #define _XSTRICONV_H #include <stddef.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); #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); #ifdef __cplusplus } #endif #endif /* _XSTRICONV_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xstriconveh.c������������������������������������������������������������0000664�0000000�0000000�00000004456�11671051007�0017771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion with out-of-memory checking. Copyright (C) 2009-2011 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 <http://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-20111211-stable/lib/xstriconveh.h������������������������������������������������������������0000664�0000000�0000000�00000011772�11671051007�0017775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Charset conversion with out-of-memory checking. Copyright (C) 2001-2007, 2009-2011 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 <http://www.gnu.org/licenses/>. */ #ifndef _XSTRICONVEH_H #define _XSTRICONVEH_H #include <stddef.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); #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); #ifdef __cplusplus } #endif #endif /* _XSTRICONVEH_H */ ������gnulib-20111211-stable/lib/xstrndup.c���������������������������������������������������������������0000664�0000000�0000000�00000002245�11671051007�0017276�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-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 <http://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-20111211-stable/lib/xstrndup.h���������������������������������������������������������������0000664�0000000�0000000�00000001774�11671051007�0017311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a bounded initial segment of a string, with out-of-memory checking. Copyright (C) 2003, 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 <http://www.gnu.org/licenses/>. */ #include <stddef.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); ����gnulib-20111211-stable/lib/xstrtod.c����������������������������������������������������������������0000664�0000000�0000000�00000004012�11671051007�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* error-checking interface to strtod-like functions Copyright (C) 1996, 1999-2000, 2003-2006, 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 <http://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 upon successful conversion put the result in *RESULT and return true. Return false and don't modify *RESULT upon any failure. 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. */ if (val != 0 && errno == ERANGE) ok = false; } if (ptr != NULL) *ptr = terminator; *result = val; return ok; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xstrtod.h����������������������������������������������������������������0000664�0000000�0000000�00000002227�11671051007�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error-checking interface to strtod-like functions. Copyright (C) 1996, 1998, 2003-2004, 2006, 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 <http://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-20111211-stable/lib/xstrtoimax.c�������������������������������������������������������������0000664�0000000�0000000�00000000261�11671051007�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/xstrtol-error.c����������������������������������������������������������0000664�0000000�0000000�00000005370�11671051007�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more useful interface to strtol. Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "xstrtol.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-20111211-stable/lib/xstrtol.c����������������������������������������������������������������0000664�0000000�0000000�00000014034�11671051007�0017125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more useful interface to strtol. Copyright (C) 1995-1996, 1998-2001, 2003-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 <http://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 <assert.h> #include <ctype.h> #include <errno.h> #include <limits.h> #include <stdlib.h> #include <string.h> #include "intprops.h" /* xstrtoll.c and xstrtoull.c, which include this file, require that ULLONG_MAX, LLONG_MAX, LLONG_MIN are defined, but <limits.h> does not define them on all platforms. */ #ifndef ULLONG_MAX # define ULLONG_MAX TYPE_MAXIMUM (unsigned long long) #endif #ifndef LLONG_MAX # define LLONG_MAX TYPE_MAXIMUM (long long int) #endif #ifndef LLONG_MIN # define LLONG_MIN TYPE_MINIMUM (long long int) #endif 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; assert (0 <= strtol_base && strtol_base <= 36); p = (ptr ? ptr : &t_ptr); if (! TYPE_SIGNED (__strtol_t)) { const char *q = s; unsigned char ch = *q; while (isspace (ch)) ch = *++q; if (ch == '-') return LONGINT_INVALID; } errno = 0; 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; } if (strchr (valid_suffixes, '0')) { /* 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. */ 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': overflow = bkm_scale (&tmp, 1024); break; case 'c': overflow = 0; 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-20111211-stable/lib/xstrtol.h����������������������������������������������������������������0000664�0000000�0000000�00000004735�11671051007�0017141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more useful interface to strtol. Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-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 <http://www.gnu.org/licenses/>. */ #ifndef XSTRTOL_H_ # define XSTRTOL_H_ 1 # include <getopt.h> # 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 (xstrtoimax, intmax_t) _DECLARE_XSTRTOL (xstrtoumax, uintmax_t) #if HAVE_LONG_LONG_INT _DECLARE_XSTRTOL (xstrtoll, long long int) _DECLARE_XSTRTOL (xstrtoull, unsigned long long int) #endif /* 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. */ void _Noreturn xstrtol_fatal (enum strtol_error, int, char, struct option const *, char const *); #endif /* not XSTRTOL_H_ */ �����������������������������������gnulib-20111211-stable/lib/xstrtold.c���������������������������������������������������������������0000664�0000000�0000000�00000000044�11671051007�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define LONG 1 #include "xstrtod.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xstrtoll.c���������������������������������������������������������������0000664�0000000�0000000�00000000260�11671051007�0017275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/xstrtoul.c���������������������������������������������������������������0000664�0000000�0000000�00000000254�11671051007�0017311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/xstrtoull.c��������������������������������������������������������������0000664�0000000�0000000�00000000264�11671051007�0017466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/xstrtoumax.c�������������������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0017641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#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-20111211-stable/lib/xtime.h������������������������������������������������������������������0000664�0000000�0000000�00000004500�11671051007�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xtime -- extended-resolution integer time stamps Copyright (C) 2005-2006, 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef XTIME_H_ # define XTIME_H_ 1 /* xtime_t is a signed type used for time stamps. It is an integer type that is a count of nanoseconds -- except for obsolescent hosts without sufficiently-wide integers, where it is a count of seconds. */ # if HAVE_LONG_LONG_INT typedef long long int xtime_t; # define XTIME_PRECISION 1000000000 # else # include <limits.h> typedef long int xtime_t; # if LONG_MAX >> 31 >> 31 == 0 # define XTIME_PRECISION 1 # else # define XTIME_PRECISION 1000000000 # endif # endif /* Return an extended time value that contains S seconds and NS nanoseconds, without any overflow checking. */ static inline xtime_t xtime_make (xtime_t s, long int ns) { if (XTIME_PRECISION == 1) return s; else return XTIME_PRECISION * s + ns; } /* Return the number of seconds in T, which must be nonnegative. */ static inline xtime_t xtime_nonnegative_sec (xtime_t t) { return t / XTIME_PRECISION; } /* Return the number of seconds in T. */ static inline xtime_t xtime_sec (xtime_t t) { return (XTIME_PRECISION == 1 ? t : t < 0 ? (t + XTIME_PRECISION - 1) / XTIME_PRECISION - 1 : xtime_nonnegative_sec (t)); } /* Return the number of nanoseconds in T, which must be nonnegative. */ static inline long int xtime_nonnegative_nsec (xtime_t t) { return t % XTIME_PRECISION; } /* Return the number of nanoseconds in T. */ static inline long int xtime_nsec (xtime_t t) { long int ns = t % XTIME_PRECISION; if (ns < 0) ns += XTIME_PRECISION; return ns; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/xvasprintf.c�������������������������������������������������������������0000664�0000000�0000000�00000005315�11671051007�0017614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf with out-of-memory checking. Copyright (C) 1999, 2002-2004, 2006-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 <http://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 inline 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-20111211-stable/lib/xvasprintf.h�������������������������������������������������������������0000664�0000000�0000000�00000004074�11671051007�0017622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vasprintf and asprintf with out-of-memory checking. Copyright (C) 2002-2004, 2006-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 <http://www.gnu.org/licenses/>. */ #ifndef _XVASPRINTF_H #define _XVASPRINTF_H /* Get va_list. */ #include <stdarg.h> /* 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. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #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_FORMAT ((__printf__, 1, 2)); extern char *xvasprintf (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 0)); #ifdef __cplusplus } #endif #endif /* _XVASPRINTF_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/lib/yesno.c������������������������������������������������������������������0000664�0000000�0000000�00000003167�11671051007�0016550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* yesno.c -- read a yes/no response from stdin Copyright (C) 1990, 1998, 2001, 2003-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 <http://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 { 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-20111211-stable/lib/yesno.h������������������������������������������������������������������0000664�0000000�0000000�00000001457�11671051007�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* declare yesno Copyright (C) 2004, 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 <http://www.gnu.org/licenses/>. */ #ifndef YESNO_H_ # define YESNO_H_ # include <stdbool.h> bool yesno (void); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/��������������������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0015012�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/.cvsignore����������������������������������������������������������������0000664�0000000�0000000�00000000030�11671051007�0017003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile jm-glibc-io.m4 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/00gnulib.m4���������������������������������������������������������������0000664�0000000�0000000�00000002522�11671051007�0016675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 00gnulib.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 such time as we can dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics. # AC_DEFUN_ONCE([NAME], VALUE) # ---------------------------- # Define NAME to expand to VALUE on the first use (whether by direct # expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. # Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This # definition is slower than the version in Autoconf 2.64, because it # can only use interfaces that existed since 2.59; but it achieves the # same effect. Quoting is necessary to avoid confusing Automake. m4_version_prereq([2.63.263], [], [m4_define([AC][_DEFUN_ONCE], [AC][_DEFUN([$1], [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl [AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) # 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-20111211-stable/m4/README��������������������������������������������������������������������0000664�0000000�0000000�00000010472�11671051007�0015676�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-20111211-stable/m4/_Exit.m4������������������������������������������������������������������0000664�0000000�0000000�00000000763�11671051007�0016332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# _Exit.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/absolute-header.m4��������������������������������������������������������0000664�0000000�0000000�00000010347�11671051007�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# absolute-header.m4 serial 16 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. 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])[>], m4_defn([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-20111211-stable/m4/accept4.m4����������������������������������������������������������������0000664�0000000�0000000�00000001047�11671051007�0016601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# accept4.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_FUNCS_ONCE([accept4]) if test $ac_cv_func_accept4 != yes; then HAVE_ACCEPT4=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/acl.m4��������������������������������������������������������������������0000664�0000000�0000000�00000013337�11671051007�0016022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acl.m4 - check for access control list (ACL) primitives # serial 13 # Copyright (C) 2002, 2004-2011 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], [ AC_ARG_ENABLE([acl], AS_HELP_STRING([--disable-acl], [do not support ACLs]), , [enable_acl=auto]) LIB_ACL= use_acl=0 AC_REQUIRE([AC_C_INLINE]) if test "x$enable_acl" != "xno"; 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 (Linux, FreeBSD, MacOS X, IRIX, Tru64). dnl -lacl is needed on Linux, -lpacl is needed 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 Linux, 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 MacOS 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 "x$enable_acl$use_acl" = "xyes0"; then AC_MSG_ERROR([ACLs enabled but support not detected]) elif test "x$enable_acl$use_acl" = "xauto0"; 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 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. # This tests for a Darwin 8.7.0 bug, whereby acl_get_file returns NULL, # but sets errno = ENOENT for an existing file or directory. AC_DEFUN([gl_ACL_GET_FILE], [ AC_CACHE_CHECK([for working acl_get_file], [gl_cv_func_working_acl_get_file], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/acl.h> #include <errno.h> ]], [[if (!acl_get_file (".", ACL_TYPE_ACCESS) && errno == ENOENT) return 1; return 0; ]])], [gl_cv_func_working_acl_get_file=yes], [gl_cv_func_working_acl_get_file=no], [gl_cv_func_working_acl_get_file=cross-compiling])]) AS_IF([test $gl_cv_func_working_acl_get_file = yes], [$1], [$2]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/acos.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0016202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acos.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/acosf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acosf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 ACOSF_LIBM="$ACOS_LIBM" fi AC_SUBST([ACOSF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/acosl.m4������������������������������������������������������������������0000664�0000000�0000000�00000005131�11671051007�0016355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acosl.m4 serial 6 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[return 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 x;]], [[return 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 MacOS 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-20111211-stable/m4/afs.m4��������������������������������������������������������������������0000664�0000000�0000000�00000001165�11671051007�0016030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 # Copyright (C) 1999-2001, 2004, 2008-2011 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_AFS], [ AC_ARG_WITH([afs], AS_HELP_STRING([--with-afs], [support for the Andrew File System [[default=no]]]), test "$withval" = no || with_afs=yes, with_afs=no) if test "$with_afs" = yes; then AC_DEFINE([AFS], [1], [Define if you have the Andrew File System.]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/alloca.m4�����������������������������������������������������������������0000664�0000000�0000000�00000010372�11671051007�0016512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# alloca.m4 serial 13 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2011 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"]) ]) # Prerequisites of lib/alloca.c. # STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. AC_DEFUN([gl_PREREQ_ALLOCA], [:]) # This works around a bug in autoconf <= 2.68. # See <http://lists.gnu.org/archive/html/bug-gnulib/2011-06/msg00277.html>. m4_version_prereq([2.69], [] ,[ # This is taken from the following Autoconf patch: # http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # _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(whether `alloca.c' needs Cray hooks, ac_cv_os_cray, [AC_EGREP_CPP(webecray, [#if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif ], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do AC_CHECK_FUNC($ac_func, [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, [Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems.]) break]) done fi 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-20111211-stable/m4/alphasort.m4��������������������������������������������������������������0000664�0000000�0000000�00000001172�11671051007�0017252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# alphasort.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/ansi-c++.m4���������������������������������������������������������������0000664�0000000�0000000�00000010531�11671051007�0016554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ansi-c++.m4 serial 9 dnl Copyright (C) 2002-2003, 2005, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) else AM_CONDITIONAL([am__fastdepCXX], [false]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/arctwo.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0016557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# arctwo.m4 serial 4 dnl Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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], [ AC_REQUIRE([AC_C_INLINE]) : ]) ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/argp.m4�������������������������������������������������������������������0000664�0000000�0000000�00000006025�11671051007�0016210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# argp.m4 serial 13 dnl Copyright (C) 2003-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_DECL([program_invocation_name], [AC_DEFINE([HAVE_DECL_PROGRAM_INVOCATION_NAME], [1], [Define if program_invocation_name is declared])], [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_DECL([program_invocation_short_name], [AC_DEFINE([HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME], [1], [Define if program_invocation_short_name is declared])], [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([[#include <argp.h>]], [[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([[#include <argp.h>]], [[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]) ]) dnl argp-parse.c depends on GNU getopt internals, therefore use GNU getopt dnl always. AC_DEFUN([gl_REPLACE_GETOPT_ALWAYS], []) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/argz.m4�������������������������������������������������������������������0000664�0000000�0000000�00000005320�11671051007�0016217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Portability macros for glibc argz. -*- Autoconf -*- # # Copyright (C) 2004-2011 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 10 argz.m4 AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ AC_REQUIRE([AC_C_RESTRICT]) 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="guessing no" 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-20111211-stable/m4/arpa_inet_h.m4������������������������������������������������������������0000664�0000000�0000000�00000003571�11671051007�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# arpa_inet_h.m4 serial 13 dnl Copyright (C) 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_HEADER_ARPA_INET], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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]) 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]) ]) AC_DEFUN([gl_ARPA_INET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_ARPA_INET_H_DEFAULTS], [ GNULIB_INET_NTOP=0; AC_SUBST([GNULIB_INET_NTOP]) GNULIB_INET_PTON=0; AC_SUBST([GNULIB_INET_PTON]) 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-20111211-stable/m4/asin.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0016207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asin.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/asinf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0016355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asinf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 ASINF_LIBM="$ASIN_LIBM" fi AC_SUBST([ASINF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/asinl.m4������������������������������������������������������������������0000664�0000000�0000000�00000004561�11671051007�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asinl.m4 serial 6 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[return 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 x;]], [[return 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 MacOS 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-20111211-stable/m4/asm-underscore.m4���������������������������������������������������������0000664�0000000�0000000�00000004317�11671051007�0020210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asm-underscore.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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], [ 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 grep _foo 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 ], [gl_asmext='asm' gl_c_asm_opt='-c -Fa' ], [gl_asmext='s' gl_c_asm_opt='-S' ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/assert.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001660�11671051007�0016560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 7 # Copyright (C) 1998-1999, 2001, 2004, 2008-2011 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-20111211-stable/m4/assert_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000001613�11671051007�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# assert-h.m4 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 (sizeof (char) == 1, "sizeof doesn't work"); ]])], [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-20111211-stable/m4/atan.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0016200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atan.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/atan2.m4������������������������������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0016266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atan2.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/atan2f.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001344�11671051007�0016431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atan2f.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 ATAN2F_LIBM="$ATAN2_LIBM" fi AC_SUBST([ATAN2F_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/atanf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atanf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 ATANF_LIBM="$ATAN_LIBM" fi AC_SUBST([ATANF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/atanl.m4������������������������������������������������������������������0000664�0000000�0000000�00000004565�11671051007�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atanl.m4 serial 6 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[return 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 x;]], [[return 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 MacOS 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-20111211-stable/m4/atexit.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000634�11671051007�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atexit.m4 serial 4 dnl Copyright (C) 2002, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/atoll.m4������������������������������������������������������������������0000664�0000000�0000000�00000001306�11671051007�0016367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# atoll.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) dnl We don't need (and can't compile) the replacement strtoll dnl unless the type 'long long int' exists. AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) if test "$ac_cv_type_long_long_int" = yes; then AC_CHECK_FUNCS([atoll]) if test $ac_cv_func_atoll = no; then HAVE_ATOLL=0 fi fi ]) # Prerequisites of lib/atoll.c. AC_DEFUN([gl_PREREQ_ATOLL], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/autobuild.m4��������������������������������������������������������������0000664�0000000�0000000�00000002010�11671051007�0017235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# autobuild.m4 serial 7 dnl Copyright (C) 2004, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 ifelse([$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-20111211-stable/m4/backupfile.m4�������������������������������������������������������������0000664�0000000�0000000�00000000744�11671051007�0017366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# backupfile.m4 serial 14 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/base32.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000720�11671051007�0016332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# base32.m4 serial 3 dnl Copyright (C) 2004, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) ]) ������������������������������������������������gnulib-20111211-stable/m4/base64.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000720�11671051007�0016337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# base64.m4 serial 3 dnl Copyright (C) 2004, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) ]) ������������������������������������������������gnulib-20111211-stable/m4/bison-i18n.m4�������������������������������������������������������������0000664�0000000�0000000�00000003604�11671051007�0017146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# bison-i18n.m4 serial 3 dnl Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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." 1>&2 exit 1 fi BISON_LOCALEDIR= BISON_USE_NLS=no if test "$USE_NLS" = yes; then dnl Determine bison's localedir. dnl AC_PROG_YACC sets the YACC variable; other macros set the BISON variable. dnl But even is YACC is called "yacc", it may be a script that invokes bison dnl 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 AC_SUBST([BISON_LOCALEDIR]) 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 or empty, he wants all of them. USER_LINGUAS="${LINGUAS-%UNSET%}" if test -n "$USER_LINGUAS"; then BISON_USE_NLS=yes fi fi fi if test $BISON_USE_NLS = yes; then AC_DEFINE([YYENABLE_NLS], [1], [Define to 1 to internationalize bison runtime messages.]) fi ]) ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/bison.m4������������������������������������������������������������������0000664�0000000�0000000�00000002000�11671051007�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 6 # Copyright (C) 2002, 2005, 2009-2011 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_BISON], [ # parse-datetime.y works with bison only. : ${YACC='bison -y'} 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 -y'. AC_ARG_VAR([YACC], [The `Yet Another C Compiler' implementation to use. Defaults to `bison -y'. Values other than `bison -y' 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-20111211-stable/m4/btowc.m4������������������������������������������������������������������0000664�0000000�0000000�00000006133�11671051007�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# btowc.m4 serial 10 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 <http://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 <string.h> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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 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 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 <string.h> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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-20111211-stable/m4/byteswap.m4���������������������������������������������������������������0000664�0000000�0000000�00000001103�11671051007�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# byteswap.m4 serial 4 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/c-stack.m4����������������������������������������������������������������0000664�0000000�0000000�00000027236�11671051007�0016613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check prerequisites for compiling lib/c-stack.c. # Copyright (C) 2002-2004, 2008-2011 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 14 AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([setrlimit]) AC_CHECK_HEADERS_ONCE([ucontext.h]) dnl List of signals that are sent when an invalid virtual memory address dnl is accessed, or when the stack overflows. dnl Either { SIGSEGV } or { SIGSEGV, SIGBUS }. case "$host_os" in sunos4* | freebsd* | dragonfly* | openbsd* | mirbsd* | netbsd* | kfreebsd* | knetbsd*) # BSD systems FAULT_YIELDS_SIGBUS=1 ;; hpux*) # HP-UX FAULT_YIELDS_SIGBUS=1 ;; macos* | darwin*) # MacOS X FAULT_YIELDS_SIGBUS=1 ;; gnu*) # Hurd FAULT_YIELDS_SIGBUS=1 ;; *) FAULT_YIELDS_SIGBUS=0 ;; esac AC_DEFINE_UNQUOTED([FAULT_YIELDS_SIGBUS], [$FAULT_YIELDS_SIGBUS], [Define to 1 if an invalid memory address access may yield a SIGBUS.]) AC_CACHE_CHECK([for working C stack overflow detection], [ac_cv_sys_stack_overflow_works], [AC_RUN_IFELSE([AC_LANG_SOURCE( [[ #include <unistd.h> #include <signal.h> #if HAVE_SETRLIMIT # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> #endif #ifndef SIGSTKSZ # define SIGSTKSZ 16384 #endif static union { char buffer[2 * SIGSTKSZ]; long double ld; long u; void *p; } alternate_signal_stack; static void segv_handler (int signo) { _exit (0); } static int c_stack_action () { stack_t st; struct sigaction act; int r; st.ss_flags = 0; /* Use the midpoint to avoid Irix sigaltstack bug. */ st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; st.ss_size = SIGSTKSZ; r = sigaltstack (&st, 0); if (r != 0) return 1; sigemptyset (&act.sa_mask); act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND; act.sa_handler = segv_handler; #if FAULT_YIELDS_SIGBUS if (sigaction (SIGBUS, &act, 0) < 0) return 2; #endif if (sigaction (SIGSEGV, &act, 0) < 0) return 3; return 0; } 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 result; #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 result = c_stack_action (); if (result != 0) return result; return recurse (0); } ]])], [ac_cv_sys_stack_overflow_works=yes], [ac_cv_sys_stack_overflow_works=no], [ac_cv_sys_stack_overflow_works=cross-compiling])]) if test $ac_cv_sys_stack_overflow_works = yes; then AC_DEFINE([HAVE_STACK_OVERFLOW_HANDLING], [1], [Define to 1 if extending the stack slightly past the limit causes a SIGSEGV which can be handled on an alternate stack established with sigaltstack.]) 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], [gl_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 #ifndef SIGSTKSZ # define SIGSTKSZ 16384 #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); } int main () { char mystack[2 * SIGSTKSZ]; stack_t altstack; struct sigaction action; /* Install the alternate stack. */ altstack.ss_sp = mystack + SIGSTKSZ; altstack.ss_size = SIGSTKSZ; 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 (4); }]])], [gl_cv_sigaltstack_low_base=yes], [gl_cv_sigaltstack_low_base=no], [gl_cv_sigaltstack_low_base=cross-compiling])]) if test "$gl_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 AC_CACHE_CHECK([for precise C stack overflow detection], ac_cv_sys_xsi_stack_overflow_heuristic, [AC_RUN_IFELSE([AC_LANG_SOURCE( [[ #include <unistd.h> #include <signal.h> #if HAVE_UCONTEXT_H # include <ucontext.h> #endif #if HAVE_SETRLIMIT # include <sys/types.h> # include <sys/time.h> # include <sys/resource.h> #endif #ifndef SIGSTKSZ # define SIGSTKSZ 16384 #endif static union { char buffer[2 * SIGSTKSZ]; long double ld; long u; void *p; } alternate_signal_stack; #if STACK_DIRECTION # define find_stack_direction(ptr) STACK_DIRECTION #else static int find_stack_direction (char const *addr) { char dummy; return (! addr ? find_stack_direction (&dummy) : addr < &dummy ? 1 : -1); } #endif static void segv_handler (int signo, siginfo_t *info, void *context) { if (0 < info->si_code) { /* For XSI heuristics to work, we need uc_stack to describe the interrupted stack (as on Solaris), and not the currently executing stack (as on Linux). */ ucontext_t const *user_context = context; char const *stack_min = user_context->uc_stack.ss_sp; size_t stack_size = user_context->uc_stack.ss_size; char const *faulting_address = info->si_addr; size_t s = faulting_address - stack_min; size_t page_size = sysconf (_SC_PAGESIZE); if (find_stack_direction (0) < 0) s += page_size; if (s < stack_size + page_size) _exit (0); _exit (4); } _exit (5); } static int c_stack_action () { stack_t st; struct sigaction act; int r; st.ss_flags = 0; /* Use the midpoint to avoid Irix sigaltstack bug. */ st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; st.ss_size = SIGSTKSZ; r = sigaltstack (&st, 0); if (r != 0) return 1; sigemptyset (&act.sa_mask); act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; act.sa_sigaction = segv_handler; #if FAULT_YIELDS_SIGBUS if (sigaction (SIGBUS, &act, 0) < 0) return 2; #endif if (sigaction (SIGSEGV, &act, 0) < 0) return 3; return 0; } 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 result; #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 result = c_stack_action (); if (result != 0) return result; return recurse (0); } ]])], [ac_cv_sys_xsi_stack_overflow_heuristic=yes], [ac_cv_sys_xsi_stack_overflow_heuristic=no], [ac_cv_sys_xsi_stack_overflow_heuristic=cross-compiling])]) if test $ac_cv_sys_xsi_stack_overflow_heuristic = yes; then AC_DEFINE([HAVE_XSI_STACK_OVERFLOW_HEURISTIC], [1], [Define to 1 if extending the stack slightly past the limit causes a SIGSEGV, and an alternate stack can be established with sigaltstack, and the signal handler is passed a context that specifies the run time stack. This behavior is defined by POSIX 1003.1-2001 with the X/Open System Interface (XSI) option and is a standardized way to implement a SEGV-based stack overflow detection heuristic.]) fi fi]) AC_DEFUN([gl_PREREQ_C_STACK], [AC_REQUIRE([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC]) AC_REQUIRE([gl_LIBSIGSEGV]) # for STACK_DIRECTION AC_REQUIRE([AC_FUNC_ALLOCA]) AC_CHECK_FUNCS_ONCE([sigaltstack]) AC_CHECK_DECLS([sigaltstack], , , [[#include <signal.h>]]) AC_CHECK_HEADERS_ONCE([unistd.h ucontext.h]) AC_CHECK_TYPES([stack_t], , , [#include <signal.h>]) dnl c-stack does not need -lsigsegv if the system has XSI heuristics. if test "$gl_cv_lib_sigsegv" = yes \ && test $"ac_cv_sys_xsi_stack_overflow_heuristic" != yes ; then AC_SUBST([LIBCSTACK], [$LIBSIGSEGV]) AC_SUBST([LTLIBCSTACK], [$LTLIBSIGSEGV]) fi ]) AC_DEFUN([gl_C_STACK], [ dnl Prerequisites of lib/c-stack.c. gl_PREREQ_C_STACK ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/c-strtod.m4���������������������������������������������������������������0000664�0000000�0000000�00000003166�11671051007�0017021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# c-strtod.m4 serial 14 # Copyright (C) 2004-2006, 2009-2011 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_C99_STRTOLD], [ AC_CACHE_CHECK([whether strtold conforms to C99], [gl_cv_func_c99_strtold], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[/* On HP-UX before 11.23, strtold returns a struct instead of long double. Reject implementations like that, by requiring compatibility with the C99 prototype. */ #include <stdlib.h> static long double (*p) (char const *, char **) = strtold; static long double test (char const *nptr, char **endptr) { long double r; r = strtold (nptr, endptr); return r; }]], [[return test ("1.0", NULL) != 1 || p ("1.0", NULL) != 1;]])], [gl_cv_func_c99_strtold=yes], [gl_cv_func_c99_strtold=no])]) if test $gl_cv_func_c99_strtold = yes; then AC_DEFINE([HAVE_C99_STRTOLD], [1], [Define to 1 if strtold conforms to C99.]) fi ]) dnl Prerequisites of lib/c-strtod.c. AC_DEFUN([gl_C_STRTOD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([strtod_l]) AC_REQUIRE([AC_C_INLINE]) : ]) dnl Prerequisites of lib/c-strtold.c. AC_DEFUN([gl_C_STRTOLD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_C99_STRTOLD]) AC_CHECK_FUNCS([strtold_l]) AC_REQUIRE([AC_C_INLINE]) : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/calloc.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004364�11671051007�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# calloc.m4 serial 13 # Copyright (C) 2004-2011 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 (0, 0)' is properly handled, run IF-WORKS, otherwise, IF-NOT. AC_DEFUN([_AC_FUNC_CALLOC_IF], [ AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_CACHE_CHECK([for GNU libc compatible calloc], [ac_cv_func_calloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[int result = 0; if (!calloc (0, 0)) result |= 1; if (calloc ((size_t) -1 / 8 + 1, 8)) result |= 2; return result; ]])], [ac_cv_func_calloc_0_nonnull=yes], [ac_cv_func_calloc_0_nonnull=no], [ac_cv_func_calloc_0_nonnull=no])]) AS_IF([test $ac_cv_func_calloc_0_nonnull = yes], [$1], [$2]) ])# AC_FUNC_CALLOC # gl_FUNC_CALLOC_GNU # ------------------ # Report whether `calloc (0, 0)' is properly handled, and replace calloc if # needed. AC_DEFUN([gl_FUNC_CALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) _AC_FUNC_CALLOC_IF( [AC_DEFINE([HAVE_CALLOC_GNU], [1], [Define to 1 if your system has a GNU libc compatible `calloc' function, and to 0 otherwise.])], [AC_DEFINE([HAVE_CALLOC_GNU], [0]) REPLACE_CALLOC=1 ]) ])# gl_FUNC_CALLOC_GNU # gl_FUNC_CALLOC_POSIX # -------------------- # Test whether 'calloc' is POSIX compliant (sets errno to ENOMEM when it # fails), and replace calloc if it is not. AC_DEFUN([gl_FUNC_CALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix = yes; then AC_DEFINE([HAVE_CALLOC_POSIX], [1], [Define if the 'calloc' function is POSIX compliant.]) else REPLACE_CALLOC=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/canon-host.m4�������������������������������������������������������������0000664�0000000�0000000�00000000515�11671051007�0017326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# canon-host.m4 serial 10 dnl Copyright (C) 2002-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/canonicalize.m4�����������������������������������������������������������0000664�0000000�0000000�00000006315�11671051007�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# canonicalize.m4 serial 23 dnl Copyright (C) 2003-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_CHECK_FUNCS_ONCE([canonicalize_file_name]) 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 elif test "$gl_cv_func_realpath_works" != yes; then REPLACE_CANONICALIZE_FILE_NAME=1 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 elif test "$gl_cv_func_realpath_works" != yes; then REPLACE_REALPATH=1 fi elif test "$gl_cv_func_realpath_works" != yes; then REPLACE_CANONICALIZE_FILE_NAME=1 REPLACE_REALPATH=1 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_CHECK_FUNCS_ONCE([canonicalize_file_name getcwd readlink]) 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]) AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [ touch conftest.a mkdir conftest.d AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ ]GL_NOCRASH[ #include <stdlib.h> #include <string.h> ]], [[ int result = 0; { char *name = realpath ("conftest.a", NULL); if (!(name && *name == '/')) result |= 1; } { char *name = realpath ("conftest.b/../conftest.a", NULL); if (name != NULL) result |= 2; } { char *name = realpath ("conftest.a/", NULL); if (name != NULL) result |= 4; } { char *name1 = realpath (".", NULL); char *name2 = realpath ("conftest.d//./..", NULL); if (strcmp (name1, name2) != 0) result |= 8; } return result; ]]) ], [gl_cv_func_realpath_works=yes], [gl_cv_func_realpath_works=no], [gl_cv_func_realpath_works="guessing no"]) rm -rf conftest.a conftest.d ]) if test "$gl_cv_func_realpath_works" = yes; then AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles trailing slash correctly.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ceil-ieee.m4��������������������������������������������������������������0000664�0000000�0000000�00000001110�11671051007�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceil-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/ceil.m4�������������������������������������������������������������������0000664�0000000�0000000�00000005320�11671051007�0016170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceil.m4 serial 8 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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 (*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], [gl_cv_func_ceil_ieee="guessing no"]) 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 x;]], [[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 x;]], [[x = ceil(x);]])], [gl_cv_func_ceil_libm="-lm"]) LIBS="$save_LIBS" fi ]) CEIL_LIBM="$gl_cv_func_ceil_libm" ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ceilf-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001116�11671051007�0017242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceilf-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/ceilf.m4������������������������������������������������������������������0000664�0000000�0000000�00000006345�11671051007�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceilf.m4 serial 12 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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 (*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], [gl_cv_func_ceilf_ieee="guessing no"]) 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 x;]], [[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 x;]], [[x = ceilf(x);]])], [gl_cv_func_ceilf_libm="-lm"]) LIBS="$save_LIBS" fi ]) CEILF_LIBM="$gl_cv_func_ceilf_libm" ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ceill-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001116�11671051007�0017250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceill-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/ceill.m4������������������������������������������������������������������0000664�0000000�0000000�00000006457�11671051007�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ceill.m4 serial 12 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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 (*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], [gl_cv_func_ceill_ieee="guessing no"]) LIBS="$save_LIBS" ]) case "$gl_cv_func_ceill_ieee" in *yes) ;; *) REPLACE_CEILL=1 ;; esac fi ]) else HAVE_DECL_CEILL=0 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 x;]], [[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 x;]], [[x = ceill(x);]])], [gl_cv_func_ceill_libm="-lm"]) LIBS="$save_LIBS" fi ]) CEILL_LIBM="$gl_cv_func_ceill_libm" ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/chdir-long.m4�������������������������������������������������������������0000664�0000000�0000000�00000002136�11671051007�0017304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 14 # 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-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 has an arbitrary file name length limit], gl_cv_have_arbitrary_file_name_length_limit, [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_arbitrary_file_name_length_limit=yes, gl_cv_have_arbitrary_file_name_length_limit=no)]) ]) AC_DEFUN([gl_PREREQ_CHDIR_LONG], [ AC_REQUIRE([AC_C_INLINE]) : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/chdir-safer.m4������������������������������������������������������������0000664�0000000�0000000�00000000525�11671051007�0017445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 5 dnl Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_CHDIR_SAFER], [ AC_CHECK_FUNCS_ONCE([readlink]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/check-math-lib.m4���������������������������������������������������������0000664�0000000�0000000�00000002015�11671051007�0020022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# check-math-lib.m4 serial 3 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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) 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> double x;]], [$2])], [$1=$libm break]) done LIBS=$save_LIBS ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/chown.m4������������������������������������������������������������������0000664�0000000�0000000�00000010476�11671051007�0016402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 25 # Determine whether we need the chown wrapper. dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009-2011 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. 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_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. if test $gl_cv_func_chown_follows_symlink = no; then REPLACE_CHOWN=1 fi dnl Some old systems tried to use uid/gid -1 literally. if test $ac_cv_func_chown_works = no; then 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 fi 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> ]], [[ 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], [gl_cv_func_chown_slash_works="guessing no"]) rm -f conftest.link conftest.file]) if test "$gl_cv_func_chown_slash_works" != yes; then AC_DEFINE([CHOWN_TRAILING_SLASH_BUG], [1], [Define to 1 if chown mishandles trailing slash.]) REPLACE_CHOWN=1 fi 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> ]], [[ 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], [gl_cv_func_chown_ctime_works="guessing no"]) rm -f conftest.file]) if test "$gl_cv_func_chown_ctime_works" != yes; then 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 fi 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> 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=yes] ) ] ) if test $gl_cv_func_chown_follows_symlink = no; then AC_DEFINE([CHOWN_MODIFIES_SYMLINK], [1], [Define if chown modifies symlinks.]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/clock_time.m4�������������������������������������������������������������0000664�0000000�0000000�00000002520�11671051007�0017364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# clock_time.m4 serial 10 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/close-stream.m4�����������������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0017652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 4 dnl Copyright (C) 2006-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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/close-stream.c. AC_DEFUN([gl_CLOSE_STREAM], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/close.m4������������������������������������������������������������������0000664�0000000�0000000�00000002146�11671051007�0016364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# close.m4 serial 8 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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-20111211-stable/m4/closedir.m4���������������������������������������������������������������0000664�0000000�0000000�00000001341�11671051007�0017057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# closedir.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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 ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/closein.m4����������������������������������������������������������������0000664�0000000�0000000�00000000536�11671051007�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# closein.m4 serial 2 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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/closein.c. AC_DEFUN([gl_CLOSEIN], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/closeout.m4���������������������������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0017117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# closeout.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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/closeout.c. AC_DEFUN([gl_CLOSEOUT], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/codeset.m4����������������������������������������������������������������0000664�0000000�0000000�00000001500�11671051007�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# codeset.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/cond.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0016201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cond.m4 serial 1 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) AC_REQUIRE([AC_C_INLINE]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/config-h.m4���������������������������������������������������������������0000664�0000000�0000000�00000001057�11671051007�0016751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Say that -DHAVE_CONFIG_H is not needed. dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/configmake.m4�������������������������������������������������������������0000664�0000000�0000000�00000003540�11671051007�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# configmake.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_CONFIGMAKE_PREP # ------------------ # Guarantee all of the standard directory variables, even when used with # autoconf 2.59 (datarootdir wasn't supported until 2.59c) or automake # 1.9.6 (pkglibexecdir wasn't supported until 1.10b.). AC_DEFUN([gl_CONFIGMAKE_PREP], [ dnl Technically, datadir should default to datarootdir. But if dnl autoconf is too old to provide datarootdir, then reversing the dnl definition is a reasonable compromise. Only AC_SUBST a variable dnl if it was not already defined earlier by autoconf. if test "x$datarootdir" = x; then AC_SUBST([datarootdir], ['${datadir}']) fi dnl Copy the approach used in autoconf 2.60. if test "x$docdir" = x; then AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) fi dnl The remaining variables missing from autoconf 2.59 are easier. if test "x$htmldir" = x; then AC_SUBST([htmldir], ['${docdir}']) fi if test "x$dvidir" = x; then AC_SUBST([dvidir], ['${docdir}']) fi if test "x$pdfdir" = x; then AC_SUBST([pdfdir], ['${docdir}']) fi if test "x$psdir" = x; then AC_SUBST([psdir], ['${docdir}']) fi if test "x$lispdir" = x; then AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp']) fi if test "x$localedir" = x; then AC_SUBST([localedir], ['${datarootdir}/locale']) fi dnl Automake 1.9.6 only lacks pkglibexecdir; and since 1.11 merely dnl provides it without AC_SUBST, this blind use of AC_SUBST is safe. AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}']) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/copy-file.m4��������������������������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0017145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copy-file.m4 serial 3 dnl Copyright (C) 2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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 utime.h]) AC_CHECK_FUNCS([chown utime utimes]) ]) �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/copysign.m4���������������������������������������������������������������0000664�0000000�0000000�00000001130�11671051007�0017102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copysign.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/copysignf.m4��������������������������������������������������������������0000664�0000000�0000000�00000001136�11671051007�0017256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copysignf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) dnl Determine COPYSIGNF_LIBM. gl_MATHFUNC([copysignf], [float], [(float, float)]) if test $gl_cv_func_copysignf_no_libm = no \ && test $gl_cv_func_copysignf_in_libm = no; then HAVE_COPYSIGNF=0 COPYSIGNF_LIBM= fi AC_SUBST([COPYSIGNF_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/copysignl.m4��������������������������������������������������������������0000664�0000000�0000000�00000001455�11671051007�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copysignl.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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-20111211-stable/m4/cos.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0016044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cos.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/cosf.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001306�11671051007�0016206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cosf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 COSF_LIBM="$COS_LIBM" fi AC_SUBST([COSF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/cosh.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0016211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cosh.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/coshf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0016357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# coshf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 COSHF_LIBM="$COSH_LIBM" fi AC_SUBST([COSHF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/cosl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000005500�11671051007�0016214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# cosl.m4 serial 6 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[return 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 x;]], [[return 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 MacOS 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-20111211-stable/m4/count-one-bits.m4���������������������������������������������������������0000664�0000000�0000000�00000001056�11671051007�0020124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# count-one-bits.m4 serial 2 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_COUNT_ONE_BITS], [ dnl We don't need (and can't compile) count_one_bits_ll dnl unless the type 'unsigned long long int' exists. AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) dnl Prerequisites of lib/count-one-bits.h. AC_REQUIRE([AC_C_INLINE]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/csharp.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001727�11671051007�0016543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# csharp.m4 serial 3 dnl Copyright (C) 2004-2005, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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: # 'pnet' or '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 (pnet or mono)], [CSHARP_CHOICE="$enableval"], CSHARP_CHOICE=any) AC_SUBST([CSHARP_CHOICE]) AC_MSG_RESULT([$CSHARP_CHOICE]) case "$CSHARP_CHOICE" in pnet) AC_DEFINE([CSHARP_CHOICE_PNET], [1], [Define if pnet is the preferred C# implementation.]) ;; mono) AC_DEFINE([CSHARP_CHOICE_MONO], [1], [Define if mono is the preferred C# implementation.]) ;; esac ]) �����������������������������������������gnulib-20111211-stable/m4/csharpcomp.m4�������������������������������������������������������������0000664�0000000�0000000�00000004624�11671051007�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# csharpcomp.m4 serial 8 dnl Copyright (C) 2003-2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_CSCC, 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_CSCC_IN_PATH], [cscc], [yes]) 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" pnet mono sscli no; do case "$impl" in pnet) if test -n "$HAVE_CSCC_IN_PATH" \ && cscc --version >/dev/null 2>/dev/null \ && ( # See if pnetlib is well installed. echo 'class ConfTest { static void Main() { } }' > conftest.cs cscc -o conftest.exe conftest.cs 2>/dev/null error=$? rm -f conftest.cs conftest.exe exit $error ); then HAVE_CSCC=1 ac_result="cscc" break fi ;; 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_CSCC]) 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-20111211-stable/m4/csharpexec.m4�������������������������������������������������������������0000664�0000000�0000000�00000005175�11671051007�0017411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# csharpexec.m4 serial 4 dnl Copyright (C) 2003-2005, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_ILRUN, HAVE_MONO, HAVE_CLIX. # Sets HAVE_CSHARPEXEC to nonempty if csharpexec.sh will work. AC_DEFUN([gt_CSHARPEXEC], [ AC_REQUIRE([gt_CSHARP_CHOICE]) AC_MSG_CHECKING([for C[#] program execution engine]) AC_EGREP_CPP([yes], [ #if defined _WIN32 || 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_ILRUN_IN_PATH], [ilrun], [yes]) 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" pnet mono no; do case "$impl" in pnet) if test -n "$HAVE_ILRUN_IN_PATH" \ && ilrun --version >/dev/null 2>/dev/null \ ifelse([$1], , , [&& ilrun $2/$1 >/dev/null 2>/dev/null]); then HAVE_ILRUN=1 ac_result="ilrun" break fi ;; mono) if test -n "$HAVE_MONO_IN_PATH" \ && mono --version >/dev/null 2>/dev/null \ ifelse([$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" \ ifelse([$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_ILRUN]) AC_SUBST([HAVE_MONO]) AC_SUBST([HAVE_CLIX]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ctype.m4������������������������������������������������������������������0000664�0000000�0000000�00000001775�11671051007�0016412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ctype_h.m4 serial 6 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([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]) ]) AC_DEFUN([gl_CTYPE_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_CTYPE_H_DEFAULTS], [ GNULIB_ISBLANK=0; AC_SUBST([GNULIB_ISBLANK]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK]) ]) ���gnulib-20111211-stable/m4/cycle-check.m4������������������������������������������������������������0000664�0000000�0000000�00000000517�11671051007�0017431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 6 dnl Copyright (C) 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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], [ AC_REQUIRE([AC_C_INLINE]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/d-ino.m4������������������������������������������������������������������0000664�0000000�0000000�00000002604�11671051007�0016264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 12 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-2011 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_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) return 2; if (stat (e->d_name, &st) != 0) return 3; if (e->d_ino != st.st_ino) return 4; return 0; ]])], [gl_cv_struct_dirent_d_ino=yes], [gl_cv_struct_dirent_d_ino=no], [gl_cv_struct_dirent_d_ino=no])]) if test $gl_cv_struct_dirent_d_ino = yes; then AC_DEFINE([D_INO_IN_DIRENT], [1], [Define if struct dirent has a member d_ino that actually works.]) fi ] ) ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/d-type.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001725�11671051007�0016463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 11 dnl From Jim Meyering. dnl dnl Check whether struct dirent has a member named d_type. dnl # Copyright (C) 1997, 1999-2004, 2006, 2009-2011 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-20111211-stable/m4/dirent-safer.m4�����������������������������������������������������������0000664�0000000�0000000�00000000514�11671051007�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/dirent_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000004766�11671051007�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dirent_h.m4 serial 16 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_DIRENT_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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]) ]) AC_DEFUN([gl_DIRENT_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_DIRENT_H_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]) ]) AC_DEFUN([gl_DIRENT_H_DEFAULTS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR GNULIB_OPENDIR=0; AC_SUBST([GNULIB_OPENDIR]) GNULIB_READDIR=0; AC_SUBST([GNULIB_READDIR]) GNULIB_REWINDDIR=0; AC_SUBST([GNULIB_REWINDDIR]) GNULIB_CLOSEDIR=0; AC_SUBST([GNULIB_CLOSEDIR]) GNULIB_DIRFD=0; AC_SUBST([GNULIB_DIRFD]) GNULIB_FDOPENDIR=0; AC_SUBST([GNULIB_FDOPENDIR]) GNULIB_SCANDIR=0; AC_SUBST([GNULIB_SCANDIR]) GNULIB_ALPHASORT=0; AC_SUBST([GNULIB_ALPHASORT]) 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-20111211-stable/m4/dirfd.m4������������������������������������������������������������������0000664�0000000�0000000�00000004655�11671051007�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 22 -*- Autoconf -*- dnl Find out how to get the file descriptor associated with an open DIR*. # Copyright (C) 2001-2006, 2008-2011 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]) 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 only if we have no function or macro with that name. if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no; then if test $ac_cv_have_decl_dirfd = yes; then # If the system declares dirfd already, let's declare rpl_dirfd instead. REPLACE_DIRFD=1 fi fi ]) 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-20111211-stable/m4/dirname.m4����������������������������������������������������������������0000664�0000000�0000000�00000001054�11671051007�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 10 -*- autoconf -*- dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DIRNAME], [ AC_REQUIRE([gl_DIRNAME_LGPL]) ]) AC_DEFUN([gl_DIRNAME_LGPL], [ dnl Prerequisites of lib/dirname.h. AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c, dnl lib/stripslash.c. ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/double-slash-root.m4������������������������������������������������������0000664�0000000�0000000�00000003125�11671051007�0020620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# double-slash-root.m4 serial 4 -*- Autoconf -*- dnl Copyright (C) 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/dprintf-posix.m4����������������������������������������������������������0000664�0000000�0000000�00000010264�11671051007�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dprintf-posix.m4 serial 2 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/dprintf.m4����������������������������������������������������������������0000664�0000000�0000000�00000001321�11671051007�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dprintf.m4 serial 1 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/dup.m4��������������������������������������������������������������������0000664�0000000�0000000�00000001402�11671051007�0016041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dup.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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([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 ]) ]) # Prerequisites of lib/dup.c. AC_DEFUN([gl_PREREQ_DUP], [ AC_REQUIRE([AC_C_INLINE]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/dup2-obsolete.m4����������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0017742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dup2-obsolete.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_OBSOLETE], [ dnl The real code is in dup2.m4. : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/dup2.m4�������������������������������������������������������������������0000664�0000000�0000000�00000005115�11671051007�0016130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 17 dnl Copyright (C) 2002, 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) m4_ifdef([gl_FUNC_DUP2_OBSOLETE], [ AC_CHECK_FUNCS_ONCE([dup2]) if test $ac_cv_func_dup2 = no; then HAVE_DUP2=0 fi ], [ AC_DEFINE([HAVE_DUP2], [1], [Define to 1 if you have the 'dup2' function.]) ]) if test $HAVE_DUP2 = 1; then AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM([[#include <unistd.h> #include <fcntl.h> #include <errno.h>]], [int result = 0; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) == 0) 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, 1000000) == -1 && errno != EBADF) result |= 16; 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=no;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works=no;; linux*) # On linux between 2008-07-27 and 2009-05-11, dup2 of a # closed fd may yield -EBADF instead of -1 / errno=EBADF. gl_cv_func_dup2_works=no;; freebsd*) # on FreeBSD 6.1, dup2(1,1000000) gives EMFILE, not EBADF. gl_cv_func_dup2_works=no;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works=no;; *) gl_cv_func_dup2_works=yes;; esac]) ]) if test "$gl_cv_func_dup2_works" = no; then REPLACE_DUP2=1 fi fi 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 if test $HAVE_DUP2 = 1; then REPLACE_DUP2=1 fi fi ]) ]) # Prerequisites of lib/dup2.c. AC_DEFUN([gl_PREREQ_DUP2], []) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/dup3.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001607�11671051007�0016133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dup3.m4 serial 4 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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-20111211-stable/m4/duplocale.m4��������������������������������������������������������������0000664�0000000�0000000�00000003647�11671051007�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# duplocale.m4 serial 7 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_CHECK_FUNCS_ONCE([duplocale]) if test $ac_cv_func_duplocale = yes; then dnl Check against glibc bug where duplocale crashes. dnl See <http://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. AC_REQUIRE([gl_LOCALE_H]) 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 int main () { if (duplocale (LC_GLOBAL_LOCALE) == (locale_t)0) return 1; return 0; }]])], [gl_cv_func_duplocale_works=yes], [gl_cv_func_duplocale_works=no], [dnl Guess it works except on glibc < 2.12, uClibc, and AIX. case "$host_os" in aix*) gl_cv_func_duplocale_works="guessing no";; *-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 HAVE_DUPLOCALE=0 fi ]) # Prerequisites of lib/duplocale.c. AC_DEFUN([gl_PREREQ_DUPLOCALE], [ : ]) �����������������������������������������������������������������������������������������gnulib-20111211-stable/m4/eaccess.m4����������������������������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0016664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# eaccess.m4 serial 2 dnl Copyright (C) 2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/eealloc.m4����������������������������������������������������������������0000664�0000000�0000000�00000001723�11671051007�0016663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# eealloc.m4 serial 2 dnl Copyright (C) 2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_REQUIRE([AC_C_INLINE]) ]) 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-20111211-stable/m4/environ.m4����������������������������������������������������������������0000664�0000000�0000000�00000002616�11671051007�0016741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# environ.m4 serial 6 dnl Copyright (C) 2001-2004, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation 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_MSG_CHECKING([if $2 is properly declared]) AC_CACHE_VAL([gt_cv_var], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[$1 extern struct { int foo; } $2;]], [[$2.foo = 1;]])], [gt_cv_var=no], [gt_cv_var=yes])]) AC_MSG_RESULT([$gt_cv_var]) 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-20111211-stable/m4/errno_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000006006�11671051007�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# errno_h.m4 serial 10 dnl Copyright (C) 2004, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation 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_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 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 ], [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 ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/error.m4������������������������������������������������������������������0000664�0000000�0000000�00000001544�11671051007�0016411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 14 # Copyright (C) 1996-1998, 2001-2004, 2009-2011 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]) AC_REQUIRE([AC_C_INLINE]) : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/euidaccess.m4�������������������������������������������������������������0000664�0000000�0000000�00000003515�11671051007�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# euidaccess.m4 serial 14 dnl Copyright (C) 2002-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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_ONCE([libgen.h]) AC_CHECK_DECLS_ONCE([setregid]) AC_REQUIRE([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-20111211-stable/m4/execute.m4����������������������������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0016723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execute.m4 serial 4 dnl Copyright (C) 2003, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_C_INLINE]) AC_REQUIRE([AC_TYPE_MODE_T]) ]) ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/exp.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0016054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exp.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/expf.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001306�11671051007�0016216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 EXPF_LIBM="$EXP_LIBM" fi AC_SUBST([EXPF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/expl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000004262�11671051007�0016230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# expl.m4 serial 5 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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 x;]], [[return 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 x;]], [[return 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 MacOS 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>]]) else HAVE_DECL_EXPL=0 HAVE_EXPL=0 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_FLOORL]) EXPL_LIBM="$FLOORL_LIBM" fi fi AC_SUBST([EXPL_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/exponentd.m4��������������������������������������������������������������0000664�0000000�0000000�00000007533�11671051007�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentd.m4 serial 2 dnl Copyright (C) 2007-2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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 consistenly. 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-20111211-stable/m4/exponentf.m4��������������������������������������������������������������0000664�0000000�0000000�00000005456�11671051007�0017274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentf.m4 serial 2 dnl Copyright (C) 2007-2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/exponentl.m4��������������������������������������������������������������0000664�0000000�0000000�00000006121�11671051007�0017270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentl.m4 serial 3 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_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 () { 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.25L); add_to_ored_words (0.5L); add_to_ored_words (1.0L); add_to_ored_words (2.0L); add_to_ored_words (4.0L); /* 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, 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" ]) 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-20111211-stable/m4/extensions.m4�������������������������������������������������������������0000664�0000000�0000000�00000010736�11671051007�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2011 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 definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS # Autoconf. Perhaps we can remove this once we can assume Autoconf # 2.62 or later everywhere, but since CVS 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. # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # Remember that #undef in AH_VERBATIM gets replaced with #define by # AC_DEFINE. The goal here is to define all known feature-enabling # macros, then, if reports of conflicts are made, disable macros that # cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) if test "$MINIX" = yes; then AC_DEFINE([_POSIX_SOURCE], [1], [Define to 1 if you need to in order for `stat' and other things to work.]) AC_DEFINE([_POSIX_1_SOURCE], [2], [Define to 2 if the system does not provide POSIX.1 features except with this defined.]) AC_DEFINE([_MINIX], [1], [Define to 1 if on MINIX.]) fi dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already dnl provided. case "$host_os" in hpux*) AC_DEFINE([_XOPEN_SOURCE], [500], [Define to 500 only on HP-UX.]) ;; esac AH_VERBATIM([__EXTENSIONS__], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on MacOS X. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif ]) 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])]) test $ac_cv_safe_to_define___extensions__ = yes && AC_DEFINE([__EXTENSIONS__]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([_TANDEM_SOURCE]) ])# 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], [ dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. dnl gnulib does not need it. But if it gets required by third-party macros dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. AC_REQUIRE([AC_GNU_SOURCE]) AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) ����������������������������������gnulib-20111211-stable/m4/fabs.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0016171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fabs.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/fabsf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001370�11671051007�0016336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fabsf.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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-20111211-stable/m4/faccessat.m4��������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0017211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # See if we need to provide faccessat replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) 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 fi ]) # Prerequisites of lib/faccessat.m4. AC_DEFUN([gl_PREREQ_FACCESSAT], [ AC_CHECK_FUNCS_ONCE([access]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fatal-signal.m4�����������������������������������������������������������0000664�0000000�0000000�00000000712�11671051007�0017616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fatal-signal.m4 serial 8 dnl Copyright (C) 2003-2004, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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([AC_C_INLINE]) AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) AC_CHECK_HEADERS_ONCE([unistd.h]) gl_PREREQ_SIG_HANDLER_H ]) ������������������������������������������������������gnulib-20111211-stable/m4/fbufmode.m4���������������������������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0017043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fbufmode.m4 serial 1 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_FUNCS_ONCE([__flbf]) ]) ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fchdir.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003322�11671051007�0016513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fchdir.m4 serial 20 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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> ]], [return open(".", O_RDONLY) < 0;])], [gl_cv_func_open_directory_works=yes], [gl_cv_func_open_directory_works=no], [gl_cv_func_open_directory_works="guessing no"])]) if test "$gl_cv_func_open_directory_works" != yes; then AC_DEFINE([REPLACE_OPEN_DIRECTORY], [1], [Define to 1 if open() should work around the inability to open a directory.]) fi 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-20111211-stable/m4/fchmodat.m4���������������������������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0017033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fchmodat.m4 serial 1 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_CHECK_FUNCS_ONCE([fchmodat lchmod]) if test $ac_cv_func_fchmodat != yes; then HAVE_FCHMODAT=0 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fchownat.m4���������������������������������������������������������������0000664�0000000�0000000�00000007065�11671051007�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fchownat.m4 serial 1 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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> #include <stdlib.h> #include <errno.h> #include <sys/types.h> int main () { return (fchownat (AT_FDCWD, "$gl_dangle", -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=no], ) ]) AS_IF([test $gl_cv_func_fchownat_nofollow_works = no], [$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> ]], [[int fd; int ret; if (mkdir ("conftestdir", 0700) < 0) return 2; fd = open ("conftestdir", O_RDONLY); if (fd < 0) return 3; ret = fchownat (fd, "", -1, -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="guessing no"]) ]) AS_IF([test "$gl_cv_func_fchownat_empty_filename_works" != yes], [$1], [$2]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fclose.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001023�11671051007�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fclose.m4 serial 5 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) gl_FUNC_FFLUSH_STDIN if test $gl_cv_func_fflush_stdin = no; then REPLACE_FCLOSE=1 fi AC_REQUIRE([gl_FUNC_CLOSE]) if test $REPLACE_CLOSE = 1; then REPLACE_FCLOSE=1 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fcntl-o.m4����������������������������������������������������������������0000664�0000000�0000000�00000010305�11671051007�0016615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl-o.m4 serial 4 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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. # 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. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) 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> #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 (".", 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], [gl_cv_header_working_fcntl_h=cross-compiling])]) 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-20111211-stable/m4/fcntl-safer.m4������������������������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 9 dnl Copyright (C) 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/fcntl.m4������������������������������������������������������������������0000664�0000000�0000000�00000006005�11671051007�0016363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl.m4 serial 5 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 <fcntl.h> #include <errno.h> ]], [[int result = 0; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; return result; ]])], [gl_cv_func_fcntl_f_dupfd_works=yes], [gl_cv_func_fcntl_f_dupfd_works=no], [# Guess that it works on glibc systems case $host_os in #(( *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";; *) gl_cv_func_fcntl_f_dupfd_works="guessing no";; 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 AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], [gl_cv_func_fcntl_f_dupfd_cloexec], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <fcntl.h> #ifndef F_DUPFD_CLOEXEC choke me #endif ]])], [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])]) if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then gl_REPLACE_FCNTL dnl No witness macro needed for this bug. fi 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-20111211-stable/m4/fcntl_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000003271�11671051007�0016674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 15 # Configure fcntl.h. dnl Copyright (C) 2006-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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]) ]) AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_FCNTL_H_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]) ]) AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ GNULIB_FCNTL=0; AC_SUBST([GNULIB_FCNTL]) GNULIB_NONBLOCKING=0; AC_SUBST([GNULIB_NONBLOCKING]) GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) GNULIB_OPENAT=0; AC_SUBST([GNULIB_OPENAT]) 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_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fdatasync.m4��������������������������������������������������������������0000664�0000000�0000000�00000002064�11671051007�0017232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fdatasync.m4 serial 3 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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 MacOS 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 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 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fdopen.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002476�11671051007�0016540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fdopen.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_FDOPEN=1 else 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> int main (void) { FILE *fp; errno = 0; fp = fdopen (-1, "r"); if (fp != NULL) return 1; if (errno == 0) return 2; 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-20111211-stable/m4/fdopendir.m4��������������������������������������������������������������0000664�0000000�0000000�00000002574�11671051007�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 9 # See if we need to provide fdopendir. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([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> #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], [gl_cv_func_fdopendir_works="guessing no"])]) if test "$gl_cv_func_fdopendir_works" != yes; then REPLACE_FDOPENDIR=1 fi fi ]) ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fegetround.m4�������������������������������������������������������������0000664�0000000�0000000�00000001270�11671051007�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fegetround.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/fflush.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005075�11671051007�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fflush.m4 serial 13 # Copyright (C) 2007-2011 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 if test $gl_cv_func_fflush_stdin = no; then REPLACE_FFLUSH=1 fi ]) dnl Determine whether fflush works on input streams. dnl Sets gl_cv_func_fflush_stdin. AC_DEFUN([gl_FUNC_FFLUSH_STDIN], [ 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 ]], [[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) return 2; /* For deterministic results, ensure f read a bigger buffer. */ if (lseek (fd, 0, SEEK_CUR) == 5) 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) return 4; if (lseek (fd, 0, SEEK_CUR) != 5) return 5; /* Verify behaviour of fflush after ungetc. See <http://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) 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) return 7; return 0; ]])], [gl_cv_func_fflush_stdin=yes], [gl_cv_func_fflush_stdin=no], [dnl Pessimistically assume fflush is broken. gl_cv_func_fflush_stdin=no]) rm conftest.txt ]) ]) # Prerequisites of lib/fflush.c. AC_DEFUN([gl_PREREQ_FFLUSH], [ AC_REQUIRE([AC_C_INLINE]) : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ffs.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0016036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ffs.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([ffs]) if test $ac_cv_func_ffs = no; then HAVE_FFS=0 fi ]) �������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ffsl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0016203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ffsl.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/ffsll.m4������������������������������������������������������������������0000664�0000000�0000000�00000001023�11671051007�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ffsll.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_STRING_H_DEFAULTS]) dnl Persuade glibc <string.h> to declare ffsll(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([ffsll]) if test $ac_cv_func_ffsll = no; then HAVE_FFSLL=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fileblocks.m4�������������������������������������������������������������0000664�0000000�0000000�00000001476�11671051007�0017401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fileblocks.m4 serial 6 dnl Copyright (C) 2002, 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/filemode.m4���������������������������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0017036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# filemode.m4 serial 8 dnl Copyright (C) 2002, 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_REQUIRE([AC_STRUCT_ST_DM_MODE]) AC_CHECK_DECLS_ONCE([strmode]) ]) �����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/filenamecat.m4������������������������������������������������������������0000664�0000000�0000000�00000000755�11671051007�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# filenamecat.m4 serial 11 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/findprog.m4���������������������������������������������������������������0000664�0000000�0000000�00000000643�11671051007�0017067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# findprog.m4 serial 2 dnl Copyright (C) 2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_CHECK_HEADERS_ONCE([unistd.h]) AC_REQUIRE([gl_FUNC_EACCESS]) ]) ���������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/flexmember.m4�������������������������������������������������������������0000664�0000000�0000000�00000003102�11671051007�0017376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 2 # Check for flexible array member support. # Copyright (C) 2006, 2009-2011 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 s { int n; double d[]; };]], [[int m = getchar (); struct s *p = malloc (offsetof (struct s, d) + m * sizeof (double)); 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; double d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack can be used with pre-C99 compilers. When computing the size of such an object, don't use 'sizeof (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' instead. Don't use 'offsetof (struct s, d@<:@0@:>@)', as this doesn't work with MSVC and with C++ compilers.]) else AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/float_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000004663�11671051007�0016701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# float_h.m4 serial 9 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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*) 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_EGREP_CPP([yes], [#if defined __LP64__ || defined __x86_64__ || defined __amd64__ yes #endif], [], [FLOAT_H=float.h]) ;; esac ;; linux*) case "$host_cpu" in powerpc*) FLOAT_H=float.h ;; esac ;; esac case "$host_os" in aix* | freebsd* | 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_EGREP_CPP([yes], [#if defined __LP64__ || defined __arch64__ yes #endif], [gl_cv_func_itold_works="guessing no"], [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-20111211-stable/m4/flock.m4������������������������������������������������������������������0000664�0000000�0000000�00000001276�11671051007�0016360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# flock.m4 serial 3 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/floor-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001116�11671051007�0017301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floor-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/floor.m4������������������������������������������������������������������0000664�0000000�0000000�00000005153�11671051007�0016401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floor.m4 serial 7 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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 (*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], [gl_cv_func_floor_ieee="guessing no"]) 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 x;]], [[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 x;]], [[x = floor(x);]])], [gl_cv_func_floor_libm="-lm"]) LIBS="$save_LIBS" fi ]) FLOOR_LIBM="$gl_cv_func_floor_libm" ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/floorf-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001124�11671051007�0017446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floorf-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/floorf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006201�11671051007�0016542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floorf.m4 serial 11 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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 (*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], [gl_cv_func_floorf_ieee="guessing no"]) 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 x;]], [[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 x;]], [[x = floorf(x);]])], [gl_cv_func_floorf_libm="-lm"]) LIBS="$save_LIBS" fi ]) FLOORF_LIBM="$gl_cv_func_floorf_libm" ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/floorl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004244�11671051007�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floorl.m4 serial 10 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[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 x;]], [[x = floorl(x);]])], [gl_cv_func_floorl_libm="-lm"]) LIBS="$save_LIBS" fi ]) FLOORL_LIBM="$gl_cv_func_floorl_libm" ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fma.m4��������������������������������������������������������������������0000664�0000000�0000000�00000014016�11671051007�0016021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fma.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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)]) if test $gl_cv_func_fma_no_libm = yes \ || test $gl_cv_func_fma_in_libm = yes; then gl_FUNC_FMA_WORKS case "$gl_cv_func_fma_works" in *no) REPLACE_FMA=1 ;; esac 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 no, even on glibc systems. gl_cv_func_fma_works="guessing no" ]) ]) LIBS="$save_LIBS" ]) # Prerequisites of lib/fma.c. AC_DEFUN([gl_PREREQ_FMA], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fmaf.m4�������������������������������������������������������������������0000664�0000000�0000000�00000014130�11671051007�0016164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmaf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 Determine FMAF_LIBM. gl_MATHFUNC([fmaf], [float], [(float, float, float)]) if test $gl_cv_func_fmaf_no_libm = yes \ || test $gl_cv_func_fmaf_in_libm = yes; then gl_FUNC_FMAF_WORKS case "$gl_cv_func_fmaf_works" in *no) REPLACE_FMAF=1 ;; esac 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; } return failed_tests; }]])], [gl_cv_func_fmaf_works=yes], [gl_cv_func_fmaf_works=no], [dnl Guess no, even on glibc systems. gl_cv_func_fmaf_works="guessing no" ]) ]) LIBS="$save_LIBS" ]) # Prerequisites of lib/fmaf.c. AC_DEFUN([gl_PREREQ_FMAF], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fmal.m4�������������������������������������������������������������������0000664�0000000�0000000�00000037537�11671051007�0016212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmal.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 Determine FMAL_LIBM. gl_MATHFUNC([fmal], [long double], [(long double, long double, long double)]) if test $gl_cv_func_fmal_no_libm = yes \ || test $gl_cv_func_fmal_in_libm = yes; then gl_FUNC_FMAL_WORKS case "$gl_cv_func_fmal_works" in *no) REPLACE_FMAL=1 ;; esac 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__ # 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, MacOS 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 no, even on glibc systems. gl_cv_func_fmal_works="guessing no" ]) ]) LIBS="$save_LIBS" ]) # Prerequisites of lib/fmal.c. AC_DEFUN([gl_PREREQ_FMAL], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fmod.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0016202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmod.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [ dnl Determine FMOD_LIBM. gl_COMMON_DOUBLE_MATHFUNC([fmod]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fmodf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0016350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fmodf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_FMOD]) 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" else HAVE_FMODF=0 FMODF_LIBM="$FMOD_LIBM" fi AC_SUBST([FMODF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fnmatch.m4����������������������������������������������������������������0000664�0000000�0000000�00000013575�11671051007�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for fnmatch - serial 8. # Copyright (C) 2000-2007, 2009-2011 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]) 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]) FNMATCH_H= gl_fnmatch_required_lowercase=` echo $gl_fnmatch_required | tr '[[A-Z]]' '[[a-z]]' ` 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"], [eval "$gl_fnmatch_cache_var=\"guessing no\""]) ]) eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" if test "$gl_fnmatch_result" = yes; then dnl Not strictly necessary. Only to avoid spurious leftover files if people dnl don't do "make distclean". rm -f "$gl_source_base/fnmatch.h" else FNMATCH_H=fnmatch.h fi AC_SUBST([FNMATCH_H]) AM_CONDITIONAL([GL_GENERATE_FNMATCH_H], [test -n "$FNMATCH_H"]) ]) # 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 We must choose a different name for our function, since on ELF systems dnl a broken fnmatch() in libc.so would override our fnmatch() if it is dnl compiled into a shared library. AC_DEFINE_UNQUOTED([fnmatch], [${gl_fnmatch_required_lowercase}_fnmatch], [Define to a replacement function name for fnmatch().]) dnl Prerequisites of lib/fnmatch.c. AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) AC_CHECK_FUNCS_ONCE([btowc isblank iswctype mbsrtowcs mempcpy wmemchr wmemcpy wmempcpy]) AC_CHECK_HEADERS_ONCE([wctype.h]) ]) �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fopen.m4������������������������������������������������������������������0000664�0000000�0000000�00000003306�11671051007�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fopen.m4 serial 8 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 () { return fopen ("conftest.sl/", "w") != NULL; }]])], [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 ]) # Prerequisites of lib/fopen.c. AC_DEFUN([gl_PREREQ_FOPEN], [ AC_REQUIRE([AC_C_INLINE]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fpending.m4���������������������������������������������������������������0000664�0000000�0000000�00000007751�11671051007�0017060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 17 # Copyright (C) 2000-2001, 2004-2011 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 FILE struct. AC_DEFUN([gl_FUNC_FPENDING], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h]) AC_CHECK_FUNCS_ONCE([__fpending]) fp_headers=' # include <stdio.h> # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif ' AC_CHECK_DECLS([__fpending], , , $fp_headers) ]) AC_DEFUN([gl_PREREQ_FPENDING], [ AC_CACHE_CHECK( [how to determine the number of pending output bytes on a stream], ac_cv_sys_pending_output_n_bytes, [ for ac_expr in \ \ '# glibc2' \ 'fp->_IO_write_ptr - fp->_IO_write_base' \ \ '# traditional Unix' \ 'fp->_ptr - fp->_base' \ \ '# BSD' \ 'fp->_p - fp->_bf._base' \ \ '# SCO, Unixware' \ '(fp->__ptr ? fp->__ptr - fp->__base : 0)' \ \ '# QNX' \ '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \ \ '# old glibc?' \ 'fp->__bufp - fp->__buffer' \ \ '# old glibc iostream?' \ 'fp->_pptr - fp->_pbase' \ \ '# emx+gcc' \ 'fp->_ptr - fp->_buffer' \ \ '# Minix' \ 'fp->_ptr - fp->_buf' \ \ '# VMS' \ '(*fp)->_ptr - (*fp)->_base' \ \ '# e.g., DGUX R4.11; the info is not available' \ 1 \ ; do # Skip each embedded comment. case "$ac_expr" in '#'*) continue;; esac AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[FILE *fp = stdin; (void) ($ac_expr);]])], [fp_done=yes] ) test "$fp_done" = yes && break done ac_cv_sys_pending_output_n_bytes=$ac_expr ] ) AC_DEFINE_UNQUOTED([PENDING_OUTPUT_N_BYTES], $ac_cv_sys_pending_output_n_bytes, [the number of pending output bytes on stream `fp']) ]) �����������������������gnulib-20111211-stable/m4/fpieee.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004042�11671051007�0016511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fpieee.m4 serial 1 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 # <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/0600____.HTM> if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" else # Compaq (ex-DEC) C has the option -ieee. CPPFLAGS="$CPPFLAGS -ieee" fi ;; sh*) if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" fi ;; esac ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fprintf-posix.m4����������������������������������������������������������0000664�0000000�0000000�00000010430�11671051007�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fprintf-posix.m4 serial 14 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/fpurge.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003207�11671051007�0016546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fpurge.m4 serial 7 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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 is 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') return 2; rewind (f); if (fgetc (f) != 'a') return 3; if (fgetc (f) != EOF) return 4; if (fpurge (f) != 0) return 5; if (putc ('b', f) != 'b') return 6; if (fclose (f) != 0) return 7; if ((f = fopen ("conftest.txt", "r")) == NULL) return 8; if (fgetc (f) != 'a') return 9; if (fgetc (f) != 'b') return 10; if (fgetc (f) != EOF) 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], [gl_cv_func_fpurge_works='guessing no'])]) if test "x$gl_cv_func_fpurge_works" != xyes; then REPLACE_FPURGE=1 fi else HAVE_FPURGE=0 fi if test "x$ac_cv_have_decl_fpurge" = xno; then HAVE_DECL_FPURGE=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/freadable.m4��������������������������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freadable.m4 serial 2 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_FUNCS_ONCE([__freadable]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/freading.m4���������������������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0017033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freading.m4 serial 1 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_FUNCS_ONCE([__freading]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/free.m4�������������������������������������������������������������������0000664�0000000�0000000�00000003030�11671051007�0016171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check whether free (NULL) is supposed to work. # Copyright (C) 2003-2005, 2009-2011 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. # We can't test for free (NULL) even at runtime, since it might # happen to "work" for our test program, but not in general. So, be # conservative and use feature tests for relatively modern hosts, # where free (NULL) is known to work. This costs a bit of # performance on some older hosts, but we can fix that later if # needed. AC_DEFUN([gl_FUNC_FREE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether free (NULL) is known to work], [gl_cv_func_free], [case "$host_os" in mingw*) gl_cv_func_free=yes ;; *) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[@%:@include <unistd.h>]], [[@%:@if _POSIX_VERSION < 199009L && \ (defined unix || defined _unix || defined _unix_ \ || defined __unix || defined __unix__) @%:@error "'free (NULL)' is not known to work" @%:@endif]])], [gl_cv_func_free=yes], [gl_cv_func_free=no]) esac ]) if test $gl_cv_func_free = no; then AC_DEFINE([free], [rpl_free], [Define to rpl_free if the replacement function should be used.]) fi ]) # Prerequisites of lib/free.c. AC_DEFUN([gl_PREREQ_FREE], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/freopen.m4����������������������������������������������������������������0000664�0000000�0000000�00000001054�11671051007�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# freopen.m4 serial 3 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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*) REPLACE_FREOPEN=1 ;; esac ]) # Prerequisites of lib/freopen.c. AC_DEFUN([gl_PREREQ_FREOPEN], [ AC_REQUIRE([AC_C_INLINE]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/frexp.m4������������������������������������������������������������������0000664�0000000�0000000�00000011417�11671051007�0016404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# frexp.m4 serial 13 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_FUNCS_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_ALARM # 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 MacOS 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_ALARM /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite number. Let the test fail in this case. */ 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* | mingw*) gl_cv_func_frexp_works="guessing no";; *) gl_cv_func_frexp_works="guessing yes";; esac ]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/frexpf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005051�11671051007�0016547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# frexpf.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 MacOS 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* | mingw*) gl_cv_func_frexpf_works="guessing no";; *) gl_cv_func_frexpf_works="guessing yes";; esac ]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/frexpl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000015370�11671051007�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# frexpl.m4 serial 18 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 Check whether it's declared. dnl MacOS 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 MacOS 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 MacOS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers dnl (this fails on MacOS 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__ # 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 *); 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 MacOS 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 MacOS X 10.5: exp = -16384, y = 0.5. */ if (exp != LDBL_MIN_EXP - 1) result |= 8; } } /* Test on infinite numbers. */ x = 1.0L / 0.0L; { 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-20111211-stable/m4/fseek.m4������������������������������������������������������������������0000664�0000000�0000000�00000001005�11671051007�0016345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fseek.m4 serial 4 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/fseeko.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003670�11671051007�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fseeko.m4 serial 15 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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([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 $gl_cv_var_stdin_large_offset = no; then REPLACE_FSEEKO=1 fi m4_ifdef([gl_FUNC_FFLUSH_STDIN], [ gl_FUNC_FFLUSH_STDIN if test $gl_cv_func_fflush_stdin = no; then REPLACE_FSEEKO=1 fi ]) 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])]) ]) ������������������������������������������������������������������������gnulib-20111211-stable/m4/fstat.m4������������������������������������������������������������������0000664�0000000�0000000�00000001442�11671051007�0016376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstat.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_FSTAT=1 fi dnl Replace fstat() for supporting the gnulib-defined open() on directories. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0 \ && test "$gl_cv_func_open_directory_works" != yes; then REPLACE_FSTAT=1 fi ]) ]) # Prerequisites of lib/fstat.c. AC_DEFUN([gl_PREREQ_FSTAT], [ AC_REQUIRE([AC_C_INLINE]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fstatat.m4����������������������������������������������������������������0000664�0000000�0000000�00000003670�11671051007�0016730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstatat.m4 serial 2 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) dnl for cross-compiles 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 <http://lists.gnu.org/archive/html/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 case $gl_cv_func_fstatat_zero_flag in *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 ;; esac fi ]) ������������������������������������������������������������������������gnulib-20111211-stable/m4/fstypename.m4�������������������������������������������������������������0000664�0000000�0000000�00000001137�11671051007�0017431�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-2011 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-20111211-stable/m4/fsusage.m4����������������������������������������������������������������0000664�0000000�0000000�00000025313�11671051007�0016715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 29 # Obtaining file system usage information. # Copyright (C) 1997-1998, 2000-2001, 2003-2011 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 MacOS X >= 10.5 (32-bit mode). AC_REQUIRE([AC_SYS_LARGEFILE]) AC_MSG_NOTICE([checking how to get file system space usage]) 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> #if (defined __GLIBC__ || defined __UCLIBC__) && defined __linux__ Do not use statvfs on systems with GNU libc on Linux, because that function stats all preceding entries in /proc/mounts, and that makes df hang if even one of the corresponding file systems is hard-mounted, but not available. statvfs in GNU libc on Hurd, BeOS, Haiku operates differently: it only makes a system call. #endif #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 MacOS 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 if test $ac_fsusage_space = no; then # DEC Alpha running OSF/1 AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)]) AC_CACHE_VAL([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])]) AC_MSG_RESULT([$fu_cv_sys_stat_statfs3_osf1]) 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, MacOS 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_MSG_CHECKING([for two-argument statfs with statfs.f_bsize dnl member (AIX, 4.3BSD)]) AC_CACHE_VAL([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])]) AC_MSG_RESULT([$fu_cv_sys_stat_statfs2_bsize]) 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, AIX PS/2)]) fi fi if test $ac_fsusage_space = no; then # SVR3 # (Solaris already handled above.) AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)]) AC_CACHE_VAL([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])]) AC_MSG_RESULT([$fu_cv_sys_stat_statfs4]) 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, Dynix, old Irix, old AIX, Dolphin)]) 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_MSG_CHECKING([for two-argument statfs with statfs.f_fsize dnl member (4.4BSD and NetBSD)]) AC_CACHE_VAL([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])]) AC_MSG_RESULT([$fu_cv_sys_stat_statfs2_fsize]) 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 if test $ac_fsusage_space = no; then # Ultrix AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)]) AC_CACHE_VAL([fu_cv_sys_stat_fs_data], [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 #ifdef HAVE_SYS_FS_TYPES_H #include <sys/fs_types.h> #endif int main () { struct fs_data fsd; /* Ultrix's statfs returns 1 for success, 0 for not mounted, -1 for failure. */ return statfs (".", &fsd) != 1; }]])], [fu_cv_sys_stat_fs_data=yes], [fu_cv_sys_stat_fs_data=no], [fu_cv_sys_stat_fs_data=no])]) AC_MSG_RESULT([$fu_cv_sys_stat_fs_data]) if test $fu_cv_sys_stat_fs_data = yes; then ac_fsusage_space=yes AC_DEFINE([STAT_STATFS2_FS_DATA], [1], [ Define if statfs takes 2 args and the second argument has type struct fs_data. (Ultrix)]) fi fi if test $ac_fsusage_space = no; then # SVR2 # (AIX, HP-UX, OSF/1 already handled above.) AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <sys/filsys.h> ]])], [AC_DEFINE([STAT_READ_FILSYS], [1], [Define if there is no specific function for reading file systems usage information and you have the <sys/filsys.h> header file. (SVR2)]) ac_fsusage_space=yes]) 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_MSG_CHECKING([for statfs that truncates block counts]) AC_CACHE_VAL([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 AC_MSG_RESULT([$fu_cv_sys_truncating_statfs]) ]) # Prerequisites of lib/fsusage.c not done by gl_FILE_SYSTEM_USAGE. AC_DEFUN([gl_PREREQ_FSUSAGE_EXTRA], [ AC_CHECK_HEADERS([dustat.h sys/fs/s5param.h sys/filsys.h sys/statfs.h]) gl_STATFS_TRUNCATES ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fsync.m4������������������������������������������������������������������0000664�0000000�0000000�00000000764�11671051007�0016405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fsync.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/ftell.m4������������������������������������������������������������������0000664�0000000�0000000�00000001005�11671051007�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ftell.m4 serial 3 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/ftello.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006576�11671051007�0016557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ftello.m4 serial 10 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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 $gl_cv_var_stdin_large_offset = no; then REPLACE_FTELLO=1 else 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 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) 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)) return 74; if (!(getc (fp) == 'h')) return 1; if (!(getc (fp) == EOF)) return 2; if (!(ftell (fp) == 8)) return 3; if (!(ftell (fp) == 8)) return 4; if (!(putc ('!', fp) == '!')) return 5; if (!(ftell (fp) == 9)) 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)) return 10; if (!(memcmp (buf, "foogarsh!", 9) == 0)) 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 fi ]) ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ftruncate.m4��������������������������������������������������������������0000664�0000000�0000000�00000001222�11671051007�0017244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 18 # See if we need to emulate a missing ftruncate function using chsize. # Copyright (C) 2000-2001, 2003-2007, 2009-2011 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 = no; then HAVE_FTRUNCATE=0 fi ]) # Prerequisites of lib/ftruncate.c. AC_DEFUN([gl_PREREQ_FTRUNCATE], [ AC_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS([chsize]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fts.m4��������������������������������������������������������������������0000664�0000000�0000000�00000001144�11671051007�0016050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 19 dnl Copyright (C) 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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. AC_REQUIRE([AC_C_INLINE]) gl_FUNC_OPENAT AC_CHECK_FUNCS_ONCE([fstatfs]) AC_CHECK_HEADERS_ONCE([sys/param.h sys/vfs.h])dnl AC_CHECK_MEMBERS([struct statfs.f_type],,, [$ac_includes_default #include <sys/vfs.h>]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/func.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001313�11671051007�0016205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# func.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/futimens.m4���������������������������������������������������������������0000664�0000000�0000000�00000003653�11671051007�0017115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 6 # See if we need to provide futimens replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([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> ]], [[struct timespec ts[2] = { { 1, UTIME_OMIT }, { 1, UTIME_NOW } }; int fd = creat ("conftest.file", 0600); struct stat st; if (fd < 0) return 1; 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; ]])], dnl FIXME: simplify this in 2012, when file system bugs are no longer common [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef __linux__ /* The Linux kernel added futimens in 2.6.22, but has bugs with UTIME_OMIT in several file systems as recently as 2.6.32. Always replace futimens to support older kernels. */ choke me #endif ]])], [gl_cv_func_futimens_works=yes], [gl_cv_func_futimens_works="needs runtime check"])], [gl_cv_func_futimens_works=no], [gl_cv_func_futimens_works="guessing no"]) rm -f conftest.file]) if test "$gl_cv_func_futimens_works" != yes; then REPLACE_FUTIMENS=1 fi fi ]) �������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fwritable.m4��������������������������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fwritable.m4 serial 2 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_FUNCS_ONCE([__fwritable]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/fwriting.m4���������������������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fwriting.m4 serial 2 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_FUNCS_ONCE([__fwriting]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/gc-arcfour.m4�������������������������������������������������������������0000664�0000000�0000000�00000000530�11671051007�0017302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-arcfour.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-arctwo.m4��������������������������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0017143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-arctwo.m4 serial 2 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-camellia.m4������������������������������������������������������������0000664�0000000�0000000�00000001503�11671051007�0017411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-camellia.m4 serial 3 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-des.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000520�11671051007�0016413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-des.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-hmac-md5.m4������������������������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-hmac-md5.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-hmac-sha1.m4�����������������������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0017412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-hmac-sha1.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-md2.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000472�11671051007�0016330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-md2.m4 serial 2 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-md4.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000612�11671051007�0016326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-md4.m4 serial 2 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-md5.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000612�11671051007�0016327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-md5.m4 serial 2 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-random.m4��������������������������������������������������������������0000664�0000000�0000000�00000006464�11671051007�0017135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-random.m4 serial 5 dnl Copyright (C) 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_RANDOM], [ # Devices with randomness. # FIXME: Are these the best defaults? AC_REQUIRE([AC_CANONICAL_HOST])dnl case "$host_os" in *openbsd* | *mirbsd*) NAME_OF_RANDOM_DEVICE="/dev/srandom" NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/prandom" NAME_OF_NONCE_DEVICE="/dev/urandom" ;; *netbsd*) NAME_OF_RANDOM_DEVICE="/dev/srandom" NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" NAME_OF_NONCE_DEVICE="/dev/urandom" ;; *solaris* | *irix* | *dec-osf* ) NAME_OF_RANDOM_DEVICE="/dev/random" NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/random" NAME_OF_NONCE_DEVICE="/dev/random" ;; *) NAME_OF_RANDOM_DEVICE="/dev/random" NAME_OF_PSEUDO_RANDOM_DEVICE="/dev/urandom" NAME_OF_NONCE_DEVICE="/dev/urandom" ;; esac AC_MSG_CHECKING([device with (strong) random data...]) AC_ARG_ENABLE([random-device], AS_HELP_STRING([--enable-random-device], [device with (strong) randomness (for Nettle)]), NAME_OF_RANDOM_DEVICE=$enableval) AC_MSG_RESULT([$NAME_OF_RANDOM_DEVICE]) AC_MSG_CHECKING([device with pseudo random data...]) AC_ARG_ENABLE([pseudo-random-device], AS_HELP_STRING([--enable-pseudo-random-device], [device with pseudo randomness (for Nettle)]), NAME_OF_PSEUDO_RANDOM_DEVICE=$enableval) AC_MSG_RESULT([$NAME_OF_PSEUDO_RANDOM_DEVICE]) AC_MSG_CHECKING([device with unpredictable data for nonces...]) AC_ARG_ENABLE([nonce-device], AS_HELP_STRING([--enable-nonce-device], [device with unpredictable nonces (for Nettle)]), NAME_OF_NONCE_DEVICE=$enableval) AC_MSG_RESULT([$NAME_OF_NONCE_DEVICE]) if test "$cross_compiling" != yes; then if test "$NAME_OF_RANDOM_DEVICE" != "no"; then AC_CHECK_FILE([$NAME_OF_RANDOM_DEVICE],, AC_MSG_WARN([[Device `$NAME_OF_RANDOM_DEVICE' does not exist, consider to use --enable-random-device]])) fi if test "$NAME_OF_PSEUDO_RANDOM_DEVICE" != "no"; then AC_CHECK_FILE([$NAME_OF_PSEUDO_RANDOM_DEVICE],, AC_MSG_WARN([[Device `$NAME_OF_PSEUDO_RANDOM_DEVICE' does not exist, consider to use --enable-pseudo-random-device]])) fi if test "$NAME_OF_NONCE_DEVICE" != "no"; then AC_CHECK_FILE([$NAME_OF_NONCE_DEVICE],, AC_MSG_WARN([[Device `$NAME_OF_NONCE_DEVICE' does not exist, consider to use --enable-nonce-device]])) fi else AC_MSG_NOTICE([[Cross compiling, assuming random devices exists on the target host...]]) fi # FIXME?: Open+read 42 bytes+close twice and compare data. Should differ. AC_DEFINE_UNQUOTED([NAME_OF_RANDOM_DEVICE], ["$NAME_OF_RANDOM_DEVICE"], [defined to the name of the (strong) random device]) AC_DEFINE_UNQUOTED([NAME_OF_PSEUDO_RANDOM_DEVICE], "$NAME_OF_PSEUDO_RANDOM_DEVICE", [defined to the name of the pseudo random device]) AC_DEFINE_UNQUOTED([NAME_OF_NONCE_DEVICE], ["$NAME_OF_NONCE_DEVICE"], [defined to the name of the unpredictable nonce device]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/gc-rijndael.m4������������������������������������������������������������0000664�0000000�0000000�00000000532�11671051007�0017433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-rijndael.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc-sha1.m4����������������������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0016476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc-sha1.m4 serial 3 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/gc.m4���������������������������������������������������������������������0000664�0000000�0000000�00000001060�11671051007�0015642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gc.m4 serial 8 dnl Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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 AC_LIB_HAVE_LINKFLAGS([gcrypt], [gpg-error], [#include <gcrypt.h>]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/getaddrinfo.m4������������������������������������������������������������0000664�0000000�0000000�00000013507�11671051007�0017550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getaddrinfo.m4 serial 29 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H AC_REQUIRE([gl_HEADER_NETDB])dnl for HAVE_NETDB_H AC_MSG_NOTICE([checking how to do getaddrinfo, freeaddrinfo and getnameinfo]) 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" else HAVE_GETADDRINFO=0 fi fi # 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_HEADER_SYS_SOCKET])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_HEADER_SYS_SOCKET]) AC_REQUIRE([AC_C_INLINE]) 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-20111211-stable/m4/getcwd-abort-bug.m4�������������������������������������������������������0000664�0000000�0000000�00000007401�11671051007�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 7 # 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-2011 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-FOUND[, ACTION-IF-NOT-FOUND]]) AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG], [ AC_CHECK_DECLS_ONCE([getcwd]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CHECK_FUNCS([getpagesize]) AC_CACHE_CHECK([whether getcwd aborts when 4k < cwd_length < 16k], gl_cv_func_getcwd_abort_bug, [# 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 <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[ /* Don't get link errors because mkdir is redefined to rpl_mkdir. */ #undef mkdir #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 const *dir_name = "confdir-14B---"; char *cwd; size_t initial_cwd_len; int fail = 0; size_t desired_depth; size_t d; /* The bug is triggered when PATH_MAX < getpagesize (), so skip this relatively expensive and invasive test if that's not true. */ if (getpagesize () <= PATH_MAX) return 0; cwd = getcwd (NULL, 0); if (cwd == NULL) return 2; initial_cwd_len = strlen (cwd); free (cwd); desired_depth = ((TARGET_LEN - 1 - initial_cwd_len) / (1 + strlen (dir_name))); for (d = 0; d < desired_depth; d++) { if (mkdir (dir_name, S_IRWXU) < 0 || chdir (dir_name) < 0) { 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 failed: it refuses to return a string longer than PATH_MAX. */ 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_abort_bug=no], [dnl An abort will provoke an exit code of something like 134 (128 + 6). dnl An exit code of 4 can also occur (in OpenBSD 4.9, NetBSD 5.1 for dnl example): getcwd (NULL, 0) fails rather than returning a string dnl longer than PATH_MAX. This may be POSIX compliant (in some dnl interpretations of POSIX). But gnulib's getcwd module wants to dnl provide a non-NULL value in this case. ret=$? if test $ret -ge 128 || test $ret = 4; then gl_cv_func_getcwd_abort_bug=yes else gl_cv_func_getcwd_abort_bug=no fi], [gl_cv_func_getcwd_abort_bug=yes]) ]) AS_IF([test $gl_cv_func_getcwd_abort_bug = yes], [$1], [$2]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/getcwd-path-max.m4��������������������������������������������������������0000664�0000000�0000000�00000012742�11671051007�0020254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 19 # 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-2011 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 /* Don't get link errors because mkdir is redefined to rpl_mkdir. */ #undef mkdir #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. 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))) fail = 20; break; } if (PATH_MAX <= cwd_len && cwd_len < PATH_MAX + DIR_NAME_SIZE) { 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; } } 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';; *) gl_cv_func_getcwd_path_max=no;; esac], [case "$host_os" in aix*) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; *) gl_cv_func_getcwd_path_max=no;; esac]) ]) ]) ������������������������������gnulib-20111211-stable/m4/getcwd.m4�����������������������������������������������������������������0000664�0000000�0000000�00000011323�11671051007�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getcwd.m4 - check for working getcwd that is compatible with glibc # Copyright (C) 2001, 2003-2007, 2009-2011 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 11 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([[ # if HAVE_UNISTD_H # include <unistd.h> # else /* on Windows with MSVC */ # include <direct.h> # endif # ifndef getcwd char *getcwd (); # endif ]], [[ #if (defined _WIN32 || 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] != '/') return 3; if (f[1] != '\0') return 4; 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*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_getcwd_null="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_getcwd_null="guessing no";; 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>]], [[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, 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.]) ;; esac if { case "$gl_cv_func_getcwd_null" in *yes) false;; *) true;; esac; } \ || test $gl_cv_func_getcwd_posix_signature != yes \ || test "$gl_cv_func_getcwd_path_max" != yes \ || 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-20111211-stable/m4/getdelim.m4���������������������������������������������������������������0000664�0000000�0000000�00000004644�11671051007�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdelim.m4 serial 9 dnl Copyright (C) 2005-2007, 2009-2011 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]) 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)) return 2; } { /* 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) return 3; } return 0; } ]])], [gl_cv_func_working_getdelim=yes] dnl The library version works. , [gl_cv_func_working_getdelim=no] dnl The library version does NOT work. , dnl We're cross compiling. Assume it works on glibc2 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=yes], [gl_cv_func_working_getdelim=no])] )]) if test $gl_cv_func_working_getdelim = no; then REPLACE_GETDELIM=1 fi 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-20111211-stable/m4/getdomainname.m4����������������������������������������������������������0000664�0000000�0000000�00000006476�11671051007�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdomainname.m4 serial 9 dnl Copyright (C) 2002-2003, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H AC_REQUIRE([gl_HEADER_NETDB])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 <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 MacOS 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-20111211-stable/m4/getdtablesize.m4����������������������������������������������������������0000664�0000000�0000000�00000001112�11671051007�0020075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdtablesize.m4 serial 3 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_CHECK_FUNCS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize != yes; then HAVE_GETDTABLESIZE=0 fi ]) # Prerequisites of lib/getdtablesize.c. AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [ AC_REQUIRE([AC_C_INLINE]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/getgroups.m4��������������������������������������������������������������0000664�0000000�0000000�00000002662�11671051007�0017301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 16 dnl From Jim Meyering. dnl A wrapper around AC_FUNC_GETGROUPS. # Copyright (C) 1996-1997, 1999-2004, 2008-2011 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_GETGROUPS], [ AC_REQUIRE([AC_FUNC_GETGROUPS]) AC_REQUIRE([AC_TYPE_GETGROUPS]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) if test "$ac_cv_func_getgroups" != yes; then HAVE_GETGROUPS=0 elif test "$ac_cv_func_getgroups_works.$ac_cv_type_getgroups" != yes.gid_t 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 FreeBSD bug; POSIX requires getgroups(-1,ptr) 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); return getgroups (-1, list) != -1;]])], [gl_cv_func_getgroups_works=yes], [gl_cv_func_getgroups_works=no], [gl_cv_func_getgroups_works="guessing no"])]) if test "$gl_cv_func_getgroups_works" != yes; then REPLACE_GETGROUPS=1 fi fi test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS" ]) ������������������������������������������������������������������������������gnulib-20111211-stable/m4/gethostname.m4������������������������������������������������������������0000664�0000000�0000000�00000006513�11671051007�0017577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gethostname.m4 serial 12 dnl Copyright (C) 2002, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 dnl Also provide HOST_NAME_MAX when <limits.h> lacks it. 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 <http://msdn.microsoft.com/en-us/library/ms738527.aspx> 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([MAXHOSTNAMELEN], [gl_cv_decl_HOST_NAME_MAX], [ #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-20111211-stable/m4/gethrxtime.m4�������������������������������������������������������������0000664�0000000�0000000�00000004437�11671051007�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gethrxtime.m4 serial 11 dnl Copyright (C) 2005-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([nanouptime]) if test $ac_cv_func_nanouptime != yes; 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], [ AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) : ]) # Prerequisites of lib/gethrxtime.c. AC_DEFUN([gl_PREREQ_GETHRXTIME], [ AC_CHECK_FUNCS_ONCE([microuptime]) : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/getline.m4����������������������������������������������������������������0000664�0000000�0000000�00000005566�11671051007�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getline.m4 serial 25 dnl Copyright (C) 1998-2003, 2005-2007, 2009-2011 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]) 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)) return 2; } { /* 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) return 3; } return 0; } ]])], [am_cv_func_working_getline=yes] dnl The library version works. , [am_cv_func_working_getline=no] dnl The library version does NOT work. , dnl We're cross compiling. Assume it works on glibc2 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=yes], [am_cv_func_working_getline=no])] )]) fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi if test $am_cv_func_working_getline = no; then 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 fi ]) # Prerequisites of lib/getline.c. AC_DEFUN([gl_PREREQ_GETLINE], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/getloadavg.m4�������������������������������������������������������������0000664�0000000�0000000�00000012225�11671051007�0017373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for getloadavg. # Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2011 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 5 # 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 # getloadvg is present in libc on glibc >= 2.2, MacOS 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 LIBS="-L/usr/local/lib $LIBS" 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 # 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. # 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-20111211-stable/m4/getlogin.m4���������������������������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0017062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getlogin.m4 serial 3 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_FUNCS_ONCE([getlogin]) if test $ac_cv_func_getlogin = no; then HAVE_GETLOGIN=0 fi ]) ���������������������������������������������������������������gnulib-20111211-stable/m4/getlogin_r.m4�������������������������������������������������������������0000664�0000000�0000000�00000004206�11671051007�0017407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 11 # Copyright (C) 2005-2007, 2009-2011 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 OSF/1 5.1, getlogin_r returns a truncated result if the buffer is dnl 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 OSF/1. 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 <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 |= 16; if (getlogin_r (buf, 1) == 0) result |= 17; return result; }]])], [gl_cv_func_getlogin_r_works=yes], [case $? in 16 | 17) gl_cv_func_getlogin_r_works=no ;; esac ], [:]) ]) 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-20111211-stable/m4/getndelim2.m4�������������������������������������������������������������0000664�0000000�0000000�00000001167�11671051007�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getndelim2.m4 serial 8 dnl Copyright (C) 2003, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/getnline.m4���������������������������������������������������������������0000664�0000000�0000000�00000000652�11671051007�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getnline.m4 serial 3 dnl Copyright (C) 2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/getopt.m4�����������������������������������������������������������������0000664�0000000�0000000�00000026443�11671051007�0016567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getopt.m4 serial 39 dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) 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], [ gl_GETOPT_IFELSE([], []) REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 gl_GETOPT_IFELSE([ REPLACE_GETOPT=1 ], []) ]) 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], [ m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) AC_REQUIRE([gl_FUNC_GETOPT_POSIX]) ]) # emacs' configure.in uses this. AC_DEFUN([gl_GETOPT_IFELSE], [ AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) AS_IF([test -n "$gl_replace_getopt"], [$1], [$2]) ]) # 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 mingw's getopt (in libmingwex.a) does weird things when the options dnl strings starts with '+' and it's not the first call. Some internal state dnl is left over from earlier calls, and neither setting optind = 0 nor dnl setting optreset = 1 get rid of this internal state. dnl POSIX is silent on optind vs. optreset, so we allow either behavior. 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 BSD getopt_long uses an incompatible method to reset option dnl processing. Existence of the optreset variable, in and of dnl itself, is not a reason to replace getopt, but knowledge dnl of the variable is needed to determine how to reset and dnl whether a reset reparses the environment. Solaris dnl supports neither optreset nor optind=0, but keeps no state dnl that needs a reset beyond setting optind=1; detect Solaris dnl by getopt_clip. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h>]], [[int *p = &optreset; return optreset;]])], [gl_optind_min=1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <getopt.h>]], [[return !getopt_clip;]])], [gl_optind_min=1], [gl_optind_min=0])]) dnl This test fails on mingw and succeeds on many other platforms. gl_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -DOPTIND_MIN=$gl_optind_min" 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; optind = OPTIND_MIN; opterr = 0; 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; } /* Some internal state exists at this point. */ { 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; optind = OPTIND_MIN; opterr = 0; 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; } /* Detect MacOS 10.5, AIX 7.1 bug. */ { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; optind = OPTIND_MIN; opterr = 0; 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], [case "$host_os" in mingw*) gl_cv_func_getopt_posix="guessing no";; darwin* | aix*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac ]) CPPFLAGS=$gl_save_CPPFLAGS ]) 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 MacOS 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 MacOS 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 |= 32; } /* 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 |= 64; else if (getopt (3, argv, "+:a:b") != ':') result |= 64; } /* 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 |= 128; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. Guess based on host and declarations. case $host_os:$ac_cv_have_decl_optreset in *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;; *:yes) gl_cv_func_getopt_gnu=no;; *) gl_cv_func_getopt_gnu=yes;; esac ]) 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" = "no"; then gl_replace_getopt=yes fi fi ]) # emacs' configure.in uses this. AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], [ GETOPT_H=getopt.h AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], [Define to rpl_ if the getopt replacement functions and variables should be used.]) AC_SUBST([GETOPT_H]) ]) # Prerequisites of lib/getopt*. # emacs' configure.in uses this. AC_DEFUN([gl_PREREQ_GETOPT], [ AC_CHECK_DECLS_ONCE([getenv]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/getpagesize.m4������������������������������������������������������������0000664�0000000�0000000�00000001722�11671051007�0017565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getpagesize.m4 serial 9 dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2011 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]) AC_CHECK_FUNCS([getpagesize]) if test $ac_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]) ]) ����������������������������������������������gnulib-20111211-stable/m4/getpass.m4����������������������������������������������������������������0000664�0000000�0000000�00000003560�11671051007�0016726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getpass.m4 serial 14 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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([gl_FUNC_GETPASS], [ dnl Persuade Solaris <unistd.h> and <stdlib.h> to declare getpass(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([getpass]) AC_CHECK_DECLS_ONCE([getpass]) if test $ac_cv_func_getpass = yes; then HAVE_GETPASS=1 else 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], [ dnl Persuade Solaris <unistd.h> and <stdlib.h> to declare getpass(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getpass]) dnl TODO: Detect when GNU getpass() is already found in glibc. REPLACE_GETPASS=1 if test $REPLACE_GETPASS = 1; then dnl We must choose a different name for our function, since on ELF systems dnl an unusable getpass() in libc.so would override our getpass() if it is dnl compiled into a shared library. AC_DEFINE([getpass], [gnu_getpass], [Define to a replacement function name for getpass().]) 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 tcgetattr tcsetattr]) 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]) : ]) ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/getsubopt.m4��������������������������������������������������������������0000664�0000000�0000000�00000001176�11671051007�0017275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getsubopt.m4 serial 5 dnl Copyright (C) 2004, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/gettext.m4����������������������������������������������������������������0000664�0000000�0000000�00000035614�11671051007�0016751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettext.m4 serial 64 (gettext-0.18.2) dnl Copyright (C) 1995-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 can be used in projects which are not available under dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU dnl gettext package 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 can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. 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). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. 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], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) 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], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) 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 only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS 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> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ]])], [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> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ]])], [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> $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ]])], [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.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $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 If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi 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 configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) 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], []) ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/gettime.m4����������������������������������������������������������������0000664�0000000�0000000�00000000720�11671051007�0016711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettime.m4 serial 8 dnl Copyright (C) 2002, 2004-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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 nanotime]) ]) ������������������������������������������������gnulib-20111211-stable/m4/gettimeofday.m4�����������������������������������������������������������0000664�0000000�0000000�00000010761�11671051007�0017742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 17 # Copyright (C) 2001-2003, 2005, 2007, 2009-2011 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([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_SYS_TIME_H]) AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([gettimeofday]) gl_gettimeofday_timezone=void if test $ac_cv_func_gettimeofday != yes; then HAVE_GETTIMEOFDAY=0 else gl_FUNC_GETTIMEOFDAY_CLOBBER 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 m4_ifdef([gl_FUNC_TZSET_CLOBBER], [ gl_FUNC_TZSET_CLOBBER if test $gl_cv_func_tzset_clobber = yes; then REPLACE_GETTIMEOFDAY=1 gl_GETTIMEOFDAY_REPLACE_LOCALTIME AC_DEFINE([tzset], [rpl_tzset], [Define to rpl_tzset if the wrapper function should be used.]) AC_DEFINE([TZSET_CLOBBERS_LOCALTIME], [1], [Define if tzset clobbers localtime's static buffer.]) fi ]) 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.]) ]) dnl See if gettimeofday clobbers the static buffer that localtime uses dnl for its return value. The gettimeofday function from Mac OS X 10.0.4 dnl (i.e., Darwin 1.3.7) has this problem. dnl dnl If it does, then arrange to use gettimeofday and localtime only via dnl the wrapper functions that work around the problem. AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], [ AC_REQUIRE([gl_HEADER_SYS_TIME_H]) AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], [gl_cv_func_gettimeofday_clobber], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> #include <sys/time.h> #include <time.h> #include <stdlib.h> ]], [[ time_t t = 0; struct tm *lt; struct tm saved_lt; struct timeval tv; lt = localtime (&t); saved_lt = *lt; gettimeofday (&tv, NULL); return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; ]])], [gl_cv_func_gettimeofday_clobber=no], [gl_cv_func_gettimeofday_clobber=yes], dnl When crosscompiling, assume it is broken. [gl_cv_func_gettimeofday_clobber=yes])]) if test $gl_cv_func_gettimeofday_clobber = yes; then REPLACE_GETTIMEOFDAY=1 gl_GETTIMEOFDAY_REPLACE_LOCALTIME AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], [Define if gettimeofday clobbers the localtime buffer.]) fi ]) AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [ AC_DEFINE([gmtime], [rpl_gmtime], [Define to rpl_gmtime if the replacement function should be used.]) AC_DEFINE([localtime], [rpl_localtime], [Define to rpl_localtime if the replacement function should be used.]) ]) # Prerequisites of lib/gettimeofday.c. AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ AC_CHECK_HEADERS([sys/timeb.h]) AC_CHECK_FUNCS([_ftime]) ]) ���������������gnulib-20111211-stable/m4/getugroups.m4�������������������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getugroups.m4 serial 9 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/getusershell.m4�����������������������������������������������������������0000664�0000000�0000000�00000001677�11671051007�0017775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getusershell.m4 serial 7 dnl Copyright (C) 2002-2003, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/gl_list.m4����������������������������������������������������������������0000664�0000000�0000000�00000000515�11671051007�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gl_list.m4 serial 2 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LIST], [ AC_REQUIRE([gl_INLINE]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/glibc2.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001476�11671051007�0016426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# glibc2.m4 serial 3 dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2011 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. # Test for the GNU C Library, version 2.0 or newer. # From Bruno Haible. AC_DEFUN([gt_GLIBC2], [ AC_CACHE_CHECK([whether we are using the GNU C Library 2 or newer], [ac_cv_gnu_library_2], [AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [ac_cv_gnu_library_2=yes], [ac_cv_gnu_library_2=no]) ] ) AC_SUBST([GLIBC2]) GLIBC2="$ac_cv_gnu_library_2" ] ) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/glibc21.m4����������������������������������������������������������������0000664�0000000�0000000�00000001613�11671051007�0016500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# glibc21.m4 serial 5 dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2011 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. # Test for the GNU C Library, version 2.1 or newer, or uClibc. # From Bruno Haible. AC_DEFUN([gl_GLIBC21], [ AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc], [ac_cv_gnu_library_2_1], [AC_EGREP_CPP([Lucky], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif #ifdef __UCLIBC__ Lucky user #endif ], [ac_cv_gnu_library_2_1=yes], [ac_cv_gnu_library_2_1=no]) ] ) AC_SUBST([GLIBC21]) GLIBC21="$ac_cv_gnu_library_2_1" ] ) ���������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/glob.m4�������������������������������������������������������������������0000664�0000000�0000000�00000004542�11671051007�0016204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# glob.m4 serial 14 dnl Copyright (C) 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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], [ GLOB_H= AC_CHECK_HEADERS([glob.h], [], [GLOB_H=glob.h]) if test -z "$GLOB_H"; then AC_CACHE_CHECK([for GNU glob interface version 1], [gl_cv_gnu_glob_interface_version_1], [ AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[#include <gnu-versions.h> char a[_GNU_GLOB_INTERFACE_VERSION == 1 ? 1 : -1];]])], [gl_cv_gnu_glob_interface_version_1=yes], [gl_cv_gnu_glob_interface_version_1=no])]) if test "$gl_cv_gnu_glob_interface_version_1" = "no"; then GLOB_H=glob.h fi fi if test -z "$GLOB_H"; then AC_CACHE_CHECK([whether glob lists broken symlinks], [gl_cv_glob_lists_symlinks], [ 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;]])], [gl_cv_glob_lists_symlinks=yes], [gl_cv_glob_lists_symlinks=no], [gl_cv_glob_lists_symlinks=no]) fi]) if test $gl_cv_glob_lists_symlinks = no; then GLOB_H=glob.h fi fi rm -f conf$$-globtest AC_SUBST([GLOB_H]) AM_CONDITIONAL([GL_GENERATE_GLOB_H], [test -n "$GLOB_H"]) ]) # Prerequisites of lib/glob.*. AC_DEFUN([gl_PREREQ_GLOB], [ AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE])dnl AC_REQUIRE([AC_C_RESTRICT])dnl AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])dnl AC_CHECK_HEADERS_ONCE([sys/cdefs.h unistd.h])dnl 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_CHECK_FUNCS_ONCE([fstatat getlogin_r getpwnam_r])dnl ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/gnu-make.m4���������������������������������������������������������������0000664�0000000�0000000�00000001142�11671051007�0016756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Determine whether recent-enough GNU Make is being used. # Copyright (C) 2007, 2009-2011 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. # Use --version AND trailing junk, because SGI Make doesn't fail on --version. AC_DEFUN([gl_GNU_MAKE], [ AM_CONDITIONAL([GNU_MAKE], [${MAKE-make} --version /cannot/make/this >/dev/null 2>&1]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/gnulib-common.m4����������������������������������������������������������0000664�0000000�0000000�00000032760�11671051007�0020032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gnulib-common.m4 serial 31 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of draft C1X. */ #ifndef _Noreturn # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # 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 MacOS 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([unused_parameter], [/* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif ]) 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_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( [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]) ]) # m4_foreach_w # is a backport of autoconf-2.59c's m4_foreach_w. # Remove this macro when we can assume autoconf >= 2.60. m4_ifndef([m4_foreach_w], [m4_define([m4_foreach_w], [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) # AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) # ---------------------------------------------------- # Backport of autoconf-2.63b's macro. # Remove this macro when we can assume autoconf >= 2.64. m4_ifndef([AS_VAR_IF], [m4_define([AS_VAR_IF], [AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. # This is like AC_PROG_CC_C99, except that # - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, # - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC # <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00367.html>, # but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 # <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00441.html>. # Remaining problems: # - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options # to CC twice # <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00431.html>. # - AC_PROG_CC_STDC is likely to change when C1X is an ISO standard. AC_DEFUN([gl_PROG_CC_C99], [ dnl Change that version number to the minimum Autoconf version that supports dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. m4_version_prereq([9.0], [AC_REQUIRE([AC_PROG_CC_C99])], [AC_REQUIRE([AC_PROG_CC_STDC])]) ]) # 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, ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) 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]) ]) if test -z "$AR"; then if test $gl_cv_c_amsterdam_compiler = yes; then AR='cc -c.a' if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl Use the Automake-documented default values for AR and ARFLAGS, dnl but prefer ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi else if test -z "$ARFLAGS"; then ARFLAGS='cru' fi 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_PROG_MKDIR_P # is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix # for interoperability with automake-1.9.6 from autoconf-2.62. # Remove this macro when we can assume autoconf >= 2.62 or # autoconf >= 2.60 && automake >= 1.10. m4_ifdef([AC_PROG_MKDIR_P], [ dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. m4_define([AC_PROG_MKDIR_P], m4_defn([AC_PROG_MKDIR_P])[ AC_SUBST([MKDIR_P])])], [ dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. AC_DEFUN_ONCE([AC_PROG_MKDIR_P], [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake MKDIR_P='$(mkdir_p)' AC_SUBST([MKDIR_P])])]) # AC_C_RESTRICT # This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61, # so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++ # works. # This definition can be removed once autoconf >= 2.62 can be assumed. m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.62]),[-1],[ AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. 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 s[1]; int * $ac_kw t = s; t[0] = 0; return foo(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 directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict, even though the corresponding Sun C compiler does, which causes "#define restrict _Restrict" in the previous line. Perhaps some future version of Sun C++ will work with _Restrict; if so, it'll probably define __RESTRICT, just as Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ]) ]) # 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 ]) # 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], [ saved_as_echo_n="$as_echo_n" as_echo_n=':' AC_CACHE_VAL([$1], [$2]) as_echo_n="$saved_as_echo_n" ]) ����������������gnulib-20111211-stable/m4/gnulib-tool.m4������������������������������������������������������������0000664�0000000�0000000�00000002647�11671051007�0017520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gnulib-tool.m4 serial 2 dnl Copyright (C) 2004-2005, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/grantpt.m4����������������������������������������������������������������0000664�0000000�0000000�00000001174�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# grantpt.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) AC_CHECK_FUNCS([grantpt]) if test $ac_cv_func_grantpt = no; then HAVE_GRANTPT=0 fi ]) # Prerequisites of lib/grantpt.c. AC_DEFUN([gl_PREREQ_GRANTPT], [ AC_CHECK_FUNCS([setrlimit]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/group-member.m4�����������������������������������������������������������0000664�0000000�0000000�00000001412�11671051007�0017653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 14 # Copyright (C) 1999-2001, 2003-2007, 2009-2011 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-20111211-stable/m4/hard-locale.m4������������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0017432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hard-locale.m4 serial 8 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 No prerequisites of lib/hard-locale.c. AC_DEFUN([gl_HARD_LOCALE], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/host-cpu-c-abi.m4���������������������������������������������������������0000664�0000000�0000000�00000014606�11671051007�0017776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# host-cpu-c-abi.m4 serial 1 dnl Copyright (C) 2002-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU_C_ABI}__ as a C macro in 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 * 'arm' and 'armel' are different canonical names, because they use dnl different memory ordering for the C types like 'int', and although dnl the instruction sets of 'arm' and 'armel' are the same. 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 <http://en.wikipedia.org/wiki/X86_instruction_listings>. AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[4567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. AC_EGREP_CPP([yes], [#if defined __LP64__ || defined __x86_64__ || defined __amd64__ yes #endif], [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* ) AC_EGREP_CPP([yes], [#if defined __ARMEL__ yes #endif], [gl_cv_host_cpu_c_abi=armel], [gl_cv_host_cpu_c_abi=arm]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # TODO: Distinguish hppa and hppa64 correctly. gl_cv_host_cpu_c_abi=hppa ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_EGREP_CPP([yes], [#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) yes #endif], [gl_cv_host_cpu_c_abi=mips64], [# Strictly speaking, the MIPS ABI (-32 or -n32) is independent # from the CPU identification (-mips[12] or -mips[34]). But -n32 # is commonly used together with -mips3, and it's easier to test # the CPU identification. AC_EGREP_CPP([yes], [#if __mips >= 3 yes #endif], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc64 ) # On powerpc64 systems, the C compiler may still be generating # 32-bit code. AC_EGREP_CPP([yes], [#if defined __powerpc64__ || defined _ARCH_PPC64 yes #endif], [gl_cv_host_cpu_c_abi=powerpc64], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; # TODO: Distinguish s390 and s390x correctly. sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_EGREP_CPP([yes], [#if defined __sparcv9 || defined __arch64__ yes #endif], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU_C_ABI]) # This was AC_DEFINE_UNQUOTED([__${gl_cv_host_cpu_c_abi}__]) earlier, # but KAI C++ 3.2d doesn't like this. cat >> confdefs.h <<EOF #ifndef __${gl_cv_host_cpu_c_abi}__ #define __${gl_cv_host_cpu_c_abi}__ 1 #endif EOF AH_TOP([/* CPU and C ABI indicator */ #ifndef __i386__ #undef __i386__ #endif #ifndef __x86_64__ #undef __x86_64__ #endif #ifndef __alpha__ #undef __alpha__ #endif #ifndef __arm__ #undef __arm__ #endif #ifndef __armel__ #undef __armel__ #endif #ifndef __hppa__ #undef __hppa__ #endif #ifndef __hppa64__ #undef __hppa64__ #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 __s390__ #undef __s390__ #endif #ifndef __s390x__ #undef __s390x__ #endif #ifndef __sh__ #undef __sh__ #endif #ifndef __sparc__ #undef __sparc__ #endif #ifndef __sparc64__ #undef __sparc64__ #endif ]) ]) ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/host-os.m4����������������������������������������������������������������0000664�0000000�0000000�00000005657�11671051007�0016665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 8 # Copyright (C) 2001, 2003-2004, 2006, 2009-2011 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';; 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';; 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]\)' | 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-20111211-stable/m4/hostent.m4����������������������������������������������������������������0000664�0000000�0000000�00000003166�11671051007�0016746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# hostent.m4 serial 2 dnl Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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, 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_HEADER_SYS_SOCKET])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-20111211-stable/m4/human.m4������������������������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 11 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/i-ring.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0016446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 2 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/iconv.m4������������������������������������������������������������������0000664�0000000�0000000�00000021620�11671051007�0016373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial 18 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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 AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <iconv.h> #include <string.h> int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { 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, (char **) &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 const char input[] = "\263"; 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_ascii_to_88591, (char **) &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 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, (char **) &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 const char input[] = "\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_88591_to_utf8, (char **) &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. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; }]])], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [ changequote(,)dnl case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac changequote([,])dnl ]) 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 for Autoconf >= 2.64, in order to dnl 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. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_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 -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/iconv_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000002541�11671051007�0016703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv_h.m4 serial 8 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([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 Unconditionally enables the replacement of <iconv.h>. AC_DEFUN([gl_REPLACE_ICONV_H], [ AC_REQUIRE([gl_ICONV_H_DEFAULTS]) ICONV_H='iconv.h' AM_CONDITIONAL([GL_GENERATE_ICONV_H], [test -n "$ICONV_H"]) ]) AC_DEFUN([gl_ICONV_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_ICONV_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_ICONV_H_DEFAULTS], [ GNULIB_ICONV=0; AC_SUBST([GNULIB_ICONV]) 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]) AM_CONDITIONAL([GL_GENERATE_ICONV_H], [test -n "$ICONV_H"]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/iconv_open-utf.m4���������������������������������������������������������0000664�0000000�0000000�00000020343�11671051007�0020211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv_open-utf.m4 serial 1 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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, 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=no if test $gl_func_iconv_gnu = yes; then gl_cv_func_iconv_supports_utf=yes else changequote(,)dnl case "$host_os" in solaris2.9 | solaris2.1[0-9]) gl_cv_func_iconv_supports_utf=yes ;; esac changequote([,])dnl fi ]) LIBS="$save_LIBS" ]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/iconv_open.m4�������������������������������������������������������������0000664�0000000�0000000�00000003671�11671051007�0017422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv_open.m4 serial 14 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 ;; 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 if test $gl_cv_func_iconv_supports_utf = no; then 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 fi ]) fi ]) AC_DEFUN([gl_REPLACE_ICONV_OPEN], [ gl_REPLACE_ICONV_H REPLACE_ICONV_OPEN=1 ]) �����������������������������������������������������������������������gnulib-20111211-stable/m4/idcache.m4����������������������������������������������������������������0000664�0000000�0000000�00000000516�11671051007�0016636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# idcache.m4 serial 7 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/idpriv.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001064�11671051007�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# idpriv.m4 serial 1 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/imaxabs.m4����������������������������������������������������������������0000664�0000000�0000000�00000001201�11671051007�0016672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# imaxabs.m4 serial 4 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/imaxdiv.m4����������������������������������������������������������������0000664�0000000�0000000�00000001201�11671051007�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# imaxdiv.m4 serial 4 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 ]) # Prerequisites of lib/imaxdiv.c. AC_DEFUN([gl_PREREQ_IMAXDIV], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/include_next.m4�����������������������������������������������������������0000664�0000000�0000000�00000025424�11671051007�0017744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# include_next.m4 serial 23 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 and PRAGMA_SYSTEM_HEADER. 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]) AC_CACHE_CHECK([whether system header files limit the line length], [gl_cv_pragma_columns], [dnl HP NonStop systems, which define __TANDEM, have this misfeature. AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_pragma_columns=yes], [gl_cv_pragma_columns=no]) ]) if test $gl_cv_pragma_columns = yes; 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]) ]) dnl FIXME: gl_next_header and gl_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. 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])[>], m4_defn([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]) ]) AC_LANG_CONFTEST( [AC_LANG_SOURCE( [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]] )]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header dnl files that contain only a #include of other header files and dnl no non-comment tokens of their own. This leads to a failure dnl to detect the absolute name of <dirent.h>, <signal.h>, dnl <poll.h> and others. The workaround is to force preservation dnl of comments through option -C. This ensures all necessary dnl #line directives 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' changequote([,]) gl_header_literal_regex=`echo ']m4_defn([gl_HEADER_NAME])[' \ | 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/ changequote(,)dnl s|^/[^/]|//&| changequote([,])dnl p q }' 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_next_header, ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`'"']) 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-20111211-stable/m4/inet_ntop.m4��������������������������������������������������������������0000664�0000000�0000000�00000004152�11671051007�0017255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inet_ntop.m4 serial 19 dnl Copyright (C) 2005-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 AC_CHECK_DECLS([inet_ntop],,, [[#include <ws2tcpip.h>]]) if test $ac_cv_have_decl_inet_ntop = yes; then dnl It needs to be overridden, because the stdcall calling convention dnl is not compliant with POSIX. REPLACE_INET_NTOP=1 INET_NTOP_LIB="-lws2_32" else HAVE_DECL_INET_NTOP=0 HAVE_INET_NTOP=0 fi else gl_save_LIBS=$LIBS AC_SEARCH_LIBS([inet_ntop], [nsl resolv], [], [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-20111211-stable/m4/inet_pton.m4��������������������������������������������������������������0000664�0000000�0000000�00000004145�11671051007�0017257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inet_pton.m4 serial 17 dnl Copyright (C) 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 AC_CHECK_DECLS([inet_pton],,, [[#include <ws2tcpip.h>]]) if test $ac_cv_have_decl_inet_pton = yes; then dnl It needs to be overridden, because the stdcall calling convention dnl is not compliant with POSIX. REPLACE_INET_PTON=1 INET_PTON_LIB="-lws2_32" else HAVE_DECL_INET_PTON=0 HAVE_INET_PTON=0 fi else gl_save_LIBS=$LIBS AC_SEARCH_LIBS([inet_pton], [nsl resolv], [], [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-20111211-stable/m4/inline.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003154�11671051007�0016535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inline.m4 serial 4 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/intdiv0.m4����������������������������������������������������������������0000664�0000000�0000000�00000004551�11671051007�0016636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intdiv0.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2002, 2007-2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gt_INTDIV0], [ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], gt_cv_int_divbyzero_sigfpe, [ gt_cv_int_divbyzero_sigfpe= changequote(,)dnl case "$host_os" in macos* | darwin[6-9]* | darwin[1-9][0-9]*) # On MacOS X 10.2 or newer, just assume the same as when cross- # compiling. If we were to perform the real test, 1 Crash Report # dialog window would pop up. case "$host_cpu" in i[34567]86 | x86_64) gt_cv_int_divbyzero_sigfpe="guessing yes" ;; esac ;; esac changequote([,])dnl if test -z "$gt_cv_int_divbyzero_sigfpe"; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdlib.h> #include <signal.h> static void sigfpe_handler (int sig) { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (2); } ]])], [gt_cv_int_divbyzero_sigfpe=yes], [gt_cv_int_divbyzero_sigfpe=no], [ # Guess based on the CPU. changequote(,)dnl case "$host_cpu" in alpha* | i[34567]86 | x86_64 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac changequote([,])dnl ]) fi ]) case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac AC_DEFINE_UNQUOTED([INTDIV0_RAISES_SIGFPE], [$value], [Define if integer division by zero raises signal SIGFPE.]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/intl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000027231�11671051007�0016227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intl.m4 serial 17b dnl Copyright (C) 1995-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 can be used in projects which are not available under dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU dnl gettext package 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-2009. AC_PREREQ([2.53]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([gt_GLIBC2])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([gl_VISIBILITY])dnl AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl AC_REQUIRE([gt_TYPE_WCHAR_T])dnl AC_REQUIRE([gt_TYPE_WINT_T])dnl AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gt_TYPE_INTMAX_T]) AC_REQUIRE([gt_PRINTF_POSIX]) AC_REQUIRE([gl_GLIBC21])dnl AC_REQUIRE([gl_XSIZE])dnl AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl AC_REQUIRE([gt_INTL_MACOSX])dnl dnl Support for automake's --enable-silent-rules. case "$enable_silent_rules" in yes) INTL_DEFAULT_VERBOSITY=0;; no) INTL_DEFAULT_VERBOSITY=1;; *) INTL_DEFAULT_VERBOSITY=1;; esac AC_SUBST([INTL_DEFAULT_VERBOSITY]) 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_CHECK_HEADERS([stddef.h stdlib.h string.h]) AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \ 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). gt_CHECK_DECL(_snprintf, [#include <stdio.h>]) gt_CHECK_DECL(_snwprintf, [#include <stdio.h>]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>]) case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac AC_SUBST([HAVE_POSIX_PRINTF]) if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi AC_SUBST([HAVE_ASPRINTF]) if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi AC_SUBST([HAVE_SNPRINTF]) if test "$ac_cv_func_newlocale" = yes; then HAVE_NEWLOCALE=1 else HAVE_NEWLOCALE=0 fi AC_SUBST([HAVE_NEWLOCALE]) if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi AC_SUBST([HAVE_WPRINTF]) AM_LANGINFO_CODESET gt_LC_MESSAGES dnl Compilation on mingw and Cygwin needs special Makefile rules, because dnl 1. when we install a shared library, we must arrange to export dnl auxiliary pointer variables for every exported variable, dnl 2. when we install a shared library and a static library simultaneously, dnl the include file specifies __declspec(dllimport) and therefore we dnl must arrange to define the auxiliary pointer variables for the dnl exported variables _also_ in the static library. if test "$enable_shared" = yes; then case "$host_os" in mingw* | cygwin*) is_woe32dll=yes ;; *) is_woe32dll=no ;; esac else is_woe32dll=no fi WOE32DLL=$is_woe32dll AC_SUBST([WOE32DLL]) dnl On mingw and Cygwin, we can activate special Makefile rules which add dnl version information to the shared libraries and executables. case "$host_os" in mingw* | cygwin*) is_woe32=yes ;; *) is_woe32=no ;; esac WOE32=$is_woe32 AC_SUBST([WOE32]) if test $WOE32 = yes; then dnl Check for a program that compiles Windows resource files. AC_CHECK_TOOL([WINDRES], [windres]) fi dnl Determine whether when creating a library, "-lc" should be passed to dnl libtool or not. On many platforms, it is required for the libtool option dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool dnl in the *.la files - makes it impossible to create multithreaded programs, dnl because libtool also reorders the -lc to come before the -pthread, and dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>. case "$host_os" in hpux*) LTLIBC="" ;; *) LTLIBC="-lc" ;; esac AC_SUBST([LTLIBC]) dnl Rename some macros and functions used for locking. AH_BOTTOM([ #define __libc_lock_t gl_lock_t #define __libc_lock_define gl_lock_define #define __libc_lock_define_initialized gl_lock_define_initialized #define __libc_lock_init gl_lock_init #define __libc_lock_lock gl_lock_lock #define __libc_lock_unlock gl_lock_unlock #define __libc_lock_recursive_t gl_recursive_lock_t #define __libc_lock_define_recursive gl_recursive_lock_define #define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized #define __libc_lock_init_recursive gl_recursive_lock_init #define __libc_lock_lock_recursive gl_recursive_lock_lock #define __libc_lock_unlock_recursive gl_recursive_lock_unlock #define glthread_in_use libintl_thread_in_use #define glthread_lock_init_func libintl_lock_init_func #define glthread_lock_lock_func libintl_lock_lock_func #define glthread_lock_unlock_func libintl_lock_unlock_func #define glthread_lock_destroy_func libintl_lock_destroy_func #define glthread_rwlock_init_multithreaded libintl_rwlock_init_multithreaded #define glthread_rwlock_init_func libintl_rwlock_init_func #define glthread_rwlock_rdlock_multithreaded libintl_rwlock_rdlock_multithreaded #define glthread_rwlock_rdlock_func libintl_rwlock_rdlock_func #define glthread_rwlock_wrlock_multithreaded libintl_rwlock_wrlock_multithreaded #define glthread_rwlock_wrlock_func libintl_rwlock_wrlock_func #define glthread_rwlock_unlock_multithreaded libintl_rwlock_unlock_multithreaded #define glthread_rwlock_unlock_func libintl_rwlock_unlock_func #define glthread_rwlock_destroy_multithreaded libintl_rwlock_destroy_multithreaded #define glthread_rwlock_destroy_func libintl_rwlock_destroy_func #define glthread_recursive_lock_init_multithreaded libintl_recursive_lock_init_multithreaded #define glthread_recursive_lock_init_func libintl_recursive_lock_init_func #define glthread_recursive_lock_lock_multithreaded libintl_recursive_lock_lock_multithreaded #define glthread_recursive_lock_lock_func libintl_recursive_lock_lock_func #define glthread_recursive_lock_unlock_multithreaded libintl_recursive_lock_unlock_multithreaded #define glthread_recursive_lock_unlock_func libintl_recursive_lock_unlock_func #define glthread_recursive_lock_destroy_multithreaded libintl_recursive_lock_destroy_multithreaded #define glthread_recursive_lock_destroy_func libintl_recursive_lock_destroy_func #define glthread_once_func libintl_once_func #define glthread_once_singlethreaded libintl_once_singlethreaded #define glthread_once_multithreaded libintl_once_multithreaded ]) ]) dnl Checks for the core files of the intl subdirectory: dnl dcigettext.c dnl eval-plural.h dnl explodename.c dnl finddomain.c dnl gettextP.h dnl gmo.h dnl hash-string.h hash-string.c dnl l10nflist.c dnl libgnuintl.h.in (except the *printf stuff) dnl loadinfo.h dnl loadmsgcat.c dnl localealias.c dnl log.c dnl plural-exp.h plural-exp.c dnl plural.y dnl Used by libglocale. AC_DEFUN([gt_INTL_SUBDIR_CORE], [ AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_REQUIRE([gl_LOCK])dnl AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]], [[]])], [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1], [Define to 1 if the compiler understands __builtin_expect.])]) AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h]) AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \ stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \ argz_stringify argz_next __fsetlocking]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. gt_CHECK_DECL([feof_unlocked], [#include <stdio.h>]) gt_CHECK_DECL([fgets_unlocked], [#include <stdio.h>]) AM_ICONV dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) dnl gt_CHECK_DECL(FUNC, INCLUDES) dnl Check whether a function is declared. AC_DEFUN([gt_CHECK_DECL], [ AC_CACHE_CHECK([whether $1 is declared], [ac_cv_have_decl_$1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[$2]], [[ #ifndef $1 char *p = (char *) $1; #endif ]])], [ac_cv_have_decl_$1=yes], [ac_cv_have_decl_$1=no])]) if test $ac_cv_have_decl_$1 = yes; then gt_value=1 else gt_value=0 fi AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/intldir.m4����������������������������������������������������������������0000664�0000000�0000000�00000001633�11671051007�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intldir.m4 serial 2 (gettext-0.18) dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 can be used in projects which are not available under dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. AC_PREREQ([2.52]) dnl Tells the AM_GNU_GETTEXT macro to consider an intl/ directory. AC_DEFUN([AM_GNU_GETTEXT_INTL_SUBDIR], []) �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/intlmacosx.m4�������������������������������������������������������������0000664�0000000�0000000�00000004746�11671051007�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intlmacosx.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 can be used in projects which are not available under dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on MacOS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in MacOS X 10.2. 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 MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in MacOS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFLocale.h>]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) ��������������������������gnulib-20111211-stable/m4/intmax.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0016554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intmax.m4 serial 6 (gettext-0.18.2) dnl Copyright (C) 2002-2005, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 the system has the 'intmax_t' type, but don't attempt to dnl find a replacement if it is lacking. AC_DEFUN([gt_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>.]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/intmax_t.m4���������������������������������������������������������������0000664�0000000�0000000�00000004166�11671051007�0017106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intmax_t.m4 serial 8 dnl Copyright (C) 1997-2004, 2006-2007, 2009-2011 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_REQUIRE([AC_TYPE_LONG_LONG_INT]) test $ac_cv_type_long_long_int = yes \ && ac_type='long long' \ || ac_type='long' AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], [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_REQUIRE([AC_TYPE_LONG_LONG_INT]) test $ac_cv_type_long_long_int = yes \ && ac_type='long long' \ || ac_type='long' AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], [Define to long or long long if <stdint.h> and <inttypes.h> don't define.]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/inttostr.m4���������������������������������������������������������������0000664�0000000�0000000�00000001454�11671051007�0017146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 8 dnl Copyright (C) 2004-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/inttypes-pri.m4�����������������������������������������������������������0000664�0000000�0000000�00000002345�11671051007�0017727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes-pri.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1997-2002, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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.53]) # Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_CHECK_HEADERS([inttypes.h]) if test $ac_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], [gt_cv_inttypes_pri_broken], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <inttypes.h> #ifdef PRId32 char *p = PRId32; #endif ]], [[]])], [gt_cv_inttypes_pri_broken=no], [gt_cv_inttypes_pri_broken=yes]) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1], [Define if <inttypes.h> exists and defines unusable PRI* macros.]) PRI_MACROS_BROKEN=1 else PRI_MACROS_BROKEN=0 fi AC_SUBST([PRI_MACROS_BROKEN]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/inttypes.m4���������������������������������������������������������������0000664�0000000�0000000�00000013617�11671051007�0017143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes.m4 serial 24 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([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 Ensure that <stdint.h> defines the limit macros, since gnulib's dnl <inttypes.h> relies on them. This macro is only needed when a dnl C++ compiler is in use; it has no effect for a C compiler. dnl Also be careful to define __STDC_LIMIT_MACROS only when gnulib's dnl <inttypes.h> is going to be created, and to avoid redefinition warnings dnl if the __STDC_LIMIT_MACROS is already defined through the CPPFLAGS. AC_DEFINE([GL_TRIGGER_STDC_LIMIT_MACROS], [1], [Define to make the limit macros in <stdint.h> visible.]) AH_VERBATIM([__STDC_LIMIT_MACROS_ZZZ], [/* Ensure that <stdint.h> defines the limit macros, since gnulib's <inttypes.h> relies on them. */ #if defined __cplusplus && !defined __STDC_LIMIT_MACROS && GL_TRIGGER_STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 #endif ]) 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]) ]) # Ensure that the PRI* and SCN* macros are defined appropriately. AC_DEFUN([gl_INTTYPES_PRI_SCN], [ AC_REQUIRE([gt_INTTYPES_PRI]) PRIPTR_PREFIX= if test -n "$STDINT_H"; then dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'. PRIPTR_PREFIX='"l"' 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) #elif HAVE_LONG_LONG_INT #define CONDITION ($4) #else #define CONDITION 0 #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]) ]) AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_INTTYPES_H_DEFAULTS], [ GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS]) GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV]) GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX]) GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX]) 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]) 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]) PRI_MACROS_BROKEN=0; AC_SUBST([PRI_MACROS_BROKEN]) 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-20111211-stable/m4/inttypes_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000001774�11671051007�0017453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes_h.m4 serial 10 dnl Copyright (C) 1997-2004, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/ioctl.m4������������������������������������������������������������������0000664�0000000�0000000�00000002656�11671051007�0016377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ioctl.m4 serial 4 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_SYS_SOCKET]) 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>]], [[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-20111211-stable/m4/isapipe.m4����������������������������������������������������������������0000664�0000000�0000000�00000005502�11671051007�0016710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test whether a file descriptor is a pipe. dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/isblank.m4����������������������������������������������������������������0000664�0000000�0000000�00000001032�11671051007�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isblank.m4 serial 3 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/isfinite.m4���������������������������������������������������������������0000664�0000000�0000000�00000013153�11671051007�0017071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isfinite.m4 serial 13 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) 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 if test "$ac_cv_have_decl_isfinite" != yes || test "$ISFINITE_LIBM" = missing; 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 numbers which are dnl neither finite nor infinite. This test fails e.g. on i686, x86_64, ia64, dnl because of dnl - pseudo-denormals on x86_64, dnl - pseudo-zeroes, unnormalized numbers, and pseudo-denormals on i686, dnl - pseudo-NaN, pseudo-Infinity, pseudo-zeroes, unnormalized numbers, and dnl pseudo-denormals on ia64. 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; } /* The isfinite macro should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isfinite (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isfinite (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isfinite (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isfinite (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isfinite (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isfinitel_works=yes], [gl_cv_func_isfinitel_works=no], [case "$host_cpu" in # Guess no on ia64, x86_64, i386. ia64 | x86_64 | i*86) gl_cv_func_isfinitel_works="guessing no";; *) gl_cv_func_isfinitel_works="guessing yes";; esac ]) ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/isinf.m4������������������������������������������������������������������0000664�0000000�0000000�00000013116�11671051007�0016366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isinf.m4 serial 9 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) 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 if test "$ac_cv_have_decl_isinf" != yes || test "$ISINF_LIBM" = missing; 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 numbers which are neither dnl finite nor infinite. This test fails on OpenBSD/x86, but could also dnl fail e.g. on i686, x86_64, ia64, because of dnl - pseudo-denormals on x86_64, dnl - pseudo-zeroes, unnormalized numbers, and pseudo-denormals on i686, dnl - pseudo-NaN, pseudo-Infinity, pseudo-zeroes, unnormalized numbers, and dnl pseudo-denormals on ia64. 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; } /* The isinf macro should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isinf (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isinf (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isinf (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isinf (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isinf (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isinfl_works=yes], [gl_cv_func_isinfl_works=no], [ case "$host" in # Guess no on OpenBSD ia64, x86_64, i386. ia64-*-openbsd* | x86_64-*-openbsd* | i*86-*-openbsd*) gl_cv_func_isinfl_works="guessing no";; *) gl_cv_func_isinfl_works="guessing yes";; esac ]) ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/isnan.m4������������������������������������������������������������������0000664�0000000�0000000�00000002747�11671051007�0016376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnan.m4 serial 5 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/isnand.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005251�11671051007�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnand.m4 serial 11 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 # 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 # 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-20111211-stable/m4/isnanf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000012242�11671051007�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnanf.m4 serial 14 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 # undef isnanf # define isnanf(x) __builtin_isnanf ((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 # undef isnanf # define isnanf(x) __builtin_isnanf ((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 # undef isnanf # define isnanf(x) __builtin_isnanf ((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";; *) gl_cv_func_isnanf_works="guessing yes";; esac ]) ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/isnanl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000017363�11671051007�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnanl.m4 serial 17 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 # undef isnanl # define isnanl(x) __builtin_isnanl ((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 # undef isnanl # define isnanl(x) __builtin_isnanl ((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 numbers which are neither finite nor dnl infinite. This test fails e.g. on NetBSD/i386 and on glibc/ia64. dnl Also, the GCC >= 4.0 built-in __builtin_isnanl does not pass the tests dnl - for pseudo-denormals on i686 and x86_64, dnl - for pseudo-zeroes, unnormalized numbers, and pseudo-denormals on ia64. 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 # undef isnanl # define isnanl(x) __builtin_isnanl ((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; } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (!isnanl (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (!isnanl (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (!isnanl (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (!isnanl (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (!isnanl (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isnanl_works=yes], [gl_cv_func_isnanl_works=no], [case "$host_cpu" in # Guess no on ia64, x86_64, i386. ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";; *) case "$host_os" in netbsd*) gl_cv_func_isnanl_works="guessing no";; *) gl_cv_func_isnanl_works="guessing yes";; esac ;; esac ]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/iswblank.m4���������������������������������������������������������������0000664�0000000�0000000�00000002334�11671051007�0017070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswblank.m4 serial 4 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], , , [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/iswctype.m4���������������������������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0017127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswctype.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/javacomp.m4���������������������������������������������������������������0000664�0000000�0000000�00000074043�11671051007�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# javacomp.m4 serial 12 dnl Copyright (C) 2001-2003, 2006-2007, 2009-2011 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 yet supported) # # 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 # 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.1 # 1.5 JDK/JRE 1.5 # 1.6 JDK/JRE 1.6 # 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. # # 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, # because even Sun'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 case # target-version = 1.4, source-version = 1.3, which allows gcj versions 3.0 # to 3.2 to be used. AC_DEFUN([gt_JAVACOMP], [ ifelse([$2], [], [AC_REQUIRE([gt_JAVAEXEC])], []) AC_EGREP_CPP([yes], [ #if defined _WIN32 || 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]) } ifelse([$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) ;; 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 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 ;; *) 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 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7066 dnl gcj 4.3 and newer has an option -ftarget=1.X. 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 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 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. 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 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-20111211-stable/m4/javaexec.m4���������������������������������������������������������������0000664�0000000�0000000�00000006174�11671051007�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# javaexec.m4 serial 5 dnl Copyright (C) 2001-2003, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 __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 ifelse([$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 \ ifelse([$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 \ ifelse([$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) \ ifelse([$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) \ ifelse([$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 ifelse([$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-20111211-stable/m4/jm-winsz1.m4��������������������������������������������������������������0000664�0000000�0000000�00000003374�11671051007�0017122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 11 # Copyright (C) 1996, 1999, 2001-2002, 2004, 2006, 2009-2011 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-20111211-stable/m4/jm-winsz2.m4��������������������������������������������������������������0000664�0000000�0000000�00000001717�11671051007�0017122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 7 # Copyright (C) 1996, 1999, 2001, 2004, 2009-2011 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-20111211-stable/m4/langinfo_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000006721�11671051007�0017366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# langinfo_h.m4 serial 7 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([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_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. CODESET and ERA etc. are missing dnl on OpenBSD 3.8. T_FMT_AMPM and YESEXPR, NOEXPR are missing on IRIX 5.3. 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 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_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]) ]) AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_LANGINFO_H_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]) ]) AC_DEFUN([gl_LANGINFO_H_DEFAULTS], [ GNULIB_NL_LANGINFO=0; AC_SUBST([GNULIB_NL_LANGINFO]) 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-20111211-stable/m4/largefile.m4��������������������������������������������������������������0000664�0000000�0000000�00000007061�11671051007�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Enable large files on systems where this is not the default. # Copyright 1992-1996, 1998-2011 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 implementation works around a problem in autoconf <= 2.68; # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5. m4_version_prereq([2.69], [] ,[ # _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 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]];[]dnl ]) # _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([@%:@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-systems.org/version2/whatsnew/lfs20mar.html AC_DEFUN([AC_SYS_LARGEFILE], [AC_ARG_ENABLE(largefile, [ --disable-largefile omit support for large files]) if test "$enable_largefile" != no; then 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]) if test $ac_cv_sys_file_offset_bits = unknown; then _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]) fi AH_VERBATIM([_DARWIN_USE_64_BIT_INODE], [/* Enable large inode numbers on Mac OS X. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif]) fi ])# AC_SYS_LARGEFILE ])# m4_version_prereq 2.69 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/lchmod.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001157�11671051007�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 3 dnl Copyright (C) 2005-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 it. 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_CHECK_FUNCS_ONCE([lchmod]) if test $ac_cv_func_lchmod = no; then HAVE_LCHMOD=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/lchown.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001564�11671051007�0016554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 16 # Determine whether we need the lchown wrapper. dnl Copyright (C) 1998, 2001, 2003-2007, 2009-2011 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 elif test "$gl_cv_func_chown_slash_works" != yes \ || test "$gl_cv_func_chown_ctime_works" != yes; then dnl Trailing slash and ctime bugs in chown also occur in lchown. REPLACE_LCHOWN=1 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/lcmessage.m4��������������������������������������������������������������0000664�0000000�0000000�00000002533�11671051007�0017222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lcmessage.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1995-2002, 2004-2005, 2008-2011 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 dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU dnl gettext package 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-20111211-stable/m4/ld-output-def.m4����������������������������������������������������������0000664�0000000�0000000�00000002036�11671051007�0017746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ld-output-def.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/ld-version-script.m4������������������������������������������������������0000664�0000000�0000000�00000002757�11671051007�0020653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ld-version-script.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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], []) if test -z "$have_ld_version_script"; then AC_MSG_CHECKING([if LD -Wl,--version-script works]) save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" cat > conftest.map <<EOF VERS_1 { global: sym; }; VERS_2 { global: sym; } VERS_1; EOF AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [have_ld_version_script=yes], [have_ld_version_script=no]) rm -f conftest.map LDFLAGS="$save_LDFLAGS" AC_MSG_RESULT($have_ld_version_script) fi AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes") ]) �����������������gnulib-20111211-stable/m4/ldd.m4��������������������������������������������������������������������0000664�0000000�0000000�00000022222�11671051007�0016017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldd.m4 serial 1 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/ldexp.m4������������������������������������������������������������������0000664�0000000�0000000�00000003636�11671051007�0016400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldexp.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/ldexpf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001412�11671051007�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldexpf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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-20111211-stable/m4/ldexpl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007264�11671051007�0016555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldexpl.m4 serial 14 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 Check whether it's declared. dnl MacOS 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 MacOS 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";; *) gl_cv_func_ldexpl_works="guessing yes";; esac changequote([,])dnl ]) ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/lib-ignore.m4�������������������������������������������������������������0000664�0000000�0000000�00000011220�11671051007�0017277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# If possible, ignore libraries that are not depended on. dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 # <http://lists.gnu.org/archive/html/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-20111211-stable/m4/lib-ld.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007050�11671051007�0016421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 1996-2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.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 ld's 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-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH([gnu-ld], [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])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 ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do 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 GNU ld's 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="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/lib-link.m4���������������������������������������������������������������0000664�0000000�0000000�00000100443�11671051007�0016757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 26 (gettext-0.18.2) dnl Copyright (C) 2001-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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.54]) 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 Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [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 Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) 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(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-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\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi 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 dir="$additional_libdir" 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"; 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"; 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"; 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"; 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 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"; 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"; 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"; 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"; 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"; 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" ;; 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*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_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$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; 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$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_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$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_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. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.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([P_A_C_K]) 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"; 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"; 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-20111211-stable/m4/lib-prefix.m4�������������������������������������������������������������0000664�0000000�0000000�00000020422�11671051007�0017315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) 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_LIB_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 variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On 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. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, 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]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>. 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. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/libsigsegv.m4�������������������������������������������������������������0000664�0000000�0000000�00000001153�11671051007�0017412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libsigsegv.m4 serial 4 dnl Copyright (C) 2002-2003, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/libunistring-base.m4������������������������������������������������������0000664�0000000�0000000�00000014260�11671051007�0020700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libunistring-base.m4 serial 5 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/libunistring-optional.m4��������������������������������������������������0000664�0000000�0000000�00000001701�11671051007�0021607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libunistring-optional.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/libunistring.m4�����������������������������������������������������������0000664�0000000�0000000�00000014314�11671051007�0017770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libunistring.m4 serial 11 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 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 for Autoconf >= 2.64, in order dnl to avoid warnings 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. m4_define([gl_libunistring_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_libunistring_AC_DEFUN([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-20111211-stable/m4/link-follow.m4������������������������������������������������������������0000664�0000000�0000000�00000007322�11671051007�0017515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 16 dnl Run a program to determine whether link(2) follows symlinks. dnl Set LINK_FOLLOWS_SYMLINKS accordingly. # Copyright (C) 1999-2001, 2004-2006, 2009-2011 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_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 [gl_cv_func_link_follows_symlink=unknown] dnl We're cross compiling. ) 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-20111211-stable/m4/link.m4�������������������������������������������������������������������0000664�0000000�0000000�00000002671�11671051007�0016217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# link.m4 serial 7 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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> ]], [[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], [gl_cv_func_link_works="guessing no"]) rm -f conftest.a conftest.b conftest.lnk]) if test "$gl_cv_func_link_works" != yes; then REPLACE_LINK=1 fi fi ]) �����������������������������������������������������������������������gnulib-20111211-stable/m4/linkat.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006771�11671051007�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 6 # See if we need to provide linkat replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) AC_CHECK_HEADERS_ONCE([sys/param.h]) if test $ac_cv_func_linkat = no; then HAVE_LINKAT=0 else AC_CACHE_CHECK([whether linkat(,AT_SYMLINK_FOLLOW) works], [gl_cv_func_linkat_follow], [rm -rf conftest.f1 conftest.f2 touch conftest.f1 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <fcntl.h> #include <unistd.h> #ifdef __linux__ /* Linux added linkat in 2.6.16, but did not add AT_SYMLINK_FOLLOW until 2.6.18. Always replace linkat to support older kernels. */ choke me #endif ]], [return linkat (AT_FDCWD, "conftest.f1", AT_FDCWD, "conftest.f2", AT_SYMLINK_FOLLOW);])], [gl_cv_func_linkat_follow=yes], [gl_cv_func_linkat_follow="need runtime check"]) rm -rf conftest.f1 conftest.f2]) AC_CACHE_CHECK([whether linkat handles trailing slash correctly], [gl_cv_func_linkat_slash], [rm -rf conftest.a conftest.b conftest.c conftest.d AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> #include <fcntl.h> #include <errno.h> #include <stdio.h> ]], [[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; return result; ]])], [gl_cv_func_linkat_slash=yes], [gl_cv_func_linkat_slash=no], [# Guess yes on glibc systems, no otherwise. case "$host_os" in *-gnu*) gl_cv_func_linkat_slash="guessing yes";; *) gl_cv_func_linkat_slash="guessing no";; esac ]) rm -rf conftest.a conftest.b conftest.c conftest.d]) case "$gl_cv_func_linkat_slash" in *yes) gl_linkat_slash_bug=0 ;; *) gl_linkat_slash_bug=1 ;; esac if test "$gl_cv_func_linkat_follow" != 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.]) fi fi ]) �������gnulib-20111211-stable/m4/localcharset.m4�����������������������������������������������������������0000664�0000000�0000000�00000001125�11671051007�0017717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localcharset.m4 serial 7 dnl Copyright (C) 2002, 2004, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) AC_CHECK_DECLS_ONCE([getc_unlocked]) dnl Prerequisites of the lib/Makefile.am snippet. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_GLIBC21]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/locale-ar.m4��������������������������������������������������������������0000664�0000000�0000000�00000007512�11671051007�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-ar.m4 serial 3 dnl Copyright (C) 2003, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([ changequote(,)dnl #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 () { /* Check whether the given locale name is recognized by the system. */ #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Win32, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is speficied, 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; } changequote([,])dnl ])]) 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 Win32, 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 MacOS 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-20111211-stable/m4/locale-fr.m4��������������������������������������������������������������0000664�0000000�0000000�00000023741�11671051007�0017127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-fr.m4 serial 13 dnl Copyright (C) 2003, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([ changequote(,)dnl #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 () { /* Check whether the given locale name is recognized by the system. */ #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Win32, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is speficied, 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 MacOS 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; /* 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; return 0; } changequote([,])dnl ])]) 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 Win32 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 MacOS 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([ changequote(,)dnl #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 __WIN32__) && !defined __CYGWIN__ /* On native Win32, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is speficied, 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 MacOS 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 /* 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; return 0; } changequote([,])dnl ])]) 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 Win32 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 MacOS 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-20111211-stable/m4/locale-ja.m4��������������������������������������������������������������0000664�0000000�0000000�00000012560�11671051007�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-ja.m4 serial 9 dnl Copyright (C) 2003, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([ changequote(,)dnl #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 () { const char *p; /* Check whether the given locale name is recognized by the system. */ #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Win32, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is speficied, 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 MacOS 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). */ 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; } changequote([,])dnl ])]) 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 Win32, 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 MacOS 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-20111211-stable/m4/locale-tr.m4��������������������������������������������������������������0000664�0000000�0000000�00000012102�11671051007�0017132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-tr.m4 serial 7 dnl Copyright (C) 2003, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([ changequote(,)dnl #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, 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 __WIN32__) && !defined __CYGWIN__ /* On native Win32, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is speficied, 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 MacOS 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; } changequote([,])dnl ])]) 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 Win32 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 MacOS 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-20111211-stable/m4/locale-zh.m4��������������������������������������������������������������0000664�0000000�0000000�00000012217�11671051007�0017135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-zh.m4 serial 9 dnl Copyright (C) 2003, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([ changequote(,)dnl #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 () { const char *p; /* Check whether the given locale name is recognized by the system. */ #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* On native Win32, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is speficied, 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 MacOS 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). */ 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; } changequote([,])dnl ])]) 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 Win32 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 MacOS 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-20111211-stable/m4/locale_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000005762�11671051007�0017034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale_h.m4 serial 14 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALE_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) dnl Persuade glibc <locale.h> to define locale_t. 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_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;]], [[]])], [gl_cv_header_locale_h_posix2001=yes], [gl_cv_header_locale_h_posix2001=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 dnl Check whether use of locale_t requires inclusion of <xlocale.h>, dnl e.g. on MacOS 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]) ]) 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 else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no fi AC_SUBST([HAVE_XLOCALE_H]) 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 duplocale]) ]) AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_LOCALE_H_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]) ]) AC_DEFUN([gl_LOCALE_H_DEFAULTS], [ GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE]) GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) ]) ��������������gnulib-20111211-stable/m4/localename.m4�������������������������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0017356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localename.m4 serial 2 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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([gt_LC_MESSAGES]) AC_REQUIRE([gt_INTL_MACOSX]) AC_CHECK_FUNCS([setlocale uselocale]) ]) ����������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/lock.m4�������������������������������������������������������������������0000664�0000000�0000000�00000002404�11671051007�0016204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lock.m4 serial 11 (gettext-0.18.2) dnl Copyright (C) 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 MacOS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. AC_CHECK_TYPE([pthread_rwlock_t], [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], [Define if the POSIX multithreading library has read/write locks.])], [], [#include <pthread.h>]) # 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." #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/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [ AC_REQUIRE([AC_C_INLINE]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/log.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0016041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [ dnl Determine LOG_LIBM. gl_COMMON_DOUBLE_MATHFUNC([log]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/log10.m4������������������������������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0016203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log10.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [ dnl Determine LOG10_LIBM. gl_COMMON_DOUBLE_MATHFUNC([log10]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/log10f.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001344�11671051007�0016346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# log10f.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LOG10]) 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" else HAVE_LOG10F=0 LOG10F_LIBM="$LOG10_LIBM" fi AC_SUBST([LOG10F_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/logb.m4�������������������������������������������������������������������0000664�0000000�0000000�00000002703�11671051007�0016201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logb.m4 serial 4 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 LOGB_LIBM= fi AC_SUBST([LOGB_LIBM]) ]) �������������������������������������������������������������gnulib-20111211-stable/m4/logf.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001306�11671051007�0016203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LOG]) 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" else HAVE_LOGF=0 LOGF_LIBM="$LOG_LIBM" fi AC_SUBST([LOGF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/logl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000005444�11671051007�0016220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# logl.m4 serial 6 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[return 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 x;]], [[return 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 MacOS 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>]]) else HAVE_DECL_LOGL=0 HAVE_LOGL=0 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 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 AC_SUBST([LOGL_LIBM]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/longlong.m4���������������������������������������������������������������0000664�0000000�0000000�00000011203�11671051007�0017070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# longlong.m4 serial 16 dnl Copyright (C) 1999-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_LONG_LONG_INT if 'long long int' works. # This fixes a bug in Autoconf 2.61, and 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 fixes a bug in Autoconf 2.61, and 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-20111211-stable/m4/ls-mntd-fs.m4�������������������������������������������������������������0000664�0000000�0000000�00000030111�11671051007�0017234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 29 # How to list mounted file systems. # Copyright (C) 1998-2004, 2006, 2009-2011 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 This is not pretty. I've just taken the autoconf code and wrapped dnl it in an AC_DEFUN and made some other fixes. dnl # Replace Autoconf's AC_FUNC_GETMNTENT to work around a bug in Autoconf # through Autoconf 2.59. We can remove this once we assume Autoconf 2.60 # or later. AC_DEFUN([AC_FUNC_GETMNTENT], [# getmntent is in the standard C library on UNICOS, in -lsun on Irix 4, # -lseq on Dynix/PTX, -lgen on Unixware. AC_SEARCH_LIBS([getmntent], [sun seq gen]) AC_CHECK_FUNCS([getmntent]) ]) # gl_LIST_MOUNTED_FILE_SYSTEMS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) AC_DEFUN([gl_LIST_MOUNTED_FILE_SYSTEMS], [ AC_CHECK_FUNCS([listmntent getmntinfo]) 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 # This test must precede the ones for getmntent because Unicos-9 is # reported to have the getmntent function, but its support is incompatible # with other getmntent implementations. # NOTE: Normally, I wouldn't use a check for system type as I've done for # `CRAY' below since that goes against the whole autoconf philosophy. But # I think there is too great a chance that some non-Cray system has a # function named listmntent to risk the false positive. if test -z "$ac_list_mounted_fs"; then # Cray UNICOS 9 AC_MSG_CHECKING([for listmntent of Cray/Unicos-9]) AC_CACHE_VAL([fu_cv_sys_mounted_cray_listmntent], [fu_cv_sys_mounted_cray_listmntent=no AC_EGREP_CPP([yes], [#ifdef _CRAY yes #endif ], [test $ac_cv_func_listmntent = yes \ && fu_cv_sys_mounted_cray_listmntent=yes] ) ] ) AC_MSG_RESULT([$fu_cv_sys_mounted_cray_listmntent]) if test $fu_cv_sys_mounted_cray_listmntent = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_LISTMNTENT], [1], [Define if there is a function named listmntent that can be used to list all mounted file systems. (UNICOS)]) fi fi if test -z "$ac_list_mounted_fs"; then # AIX. AC_MSG_CHECKING([for mntctl function and struct vmount]) AC_CACHE_VAL([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])]) AC_MSG_RESULT([$fu_cv_sys_mounted_vmount]) 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 # 4.3BSD, SunOS, HP-UX, Dynix, Irix AC_MSG_CHECKING([for one-argument getmntent function]) AC_CACHE_VAL([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 MOUNTED # if defined _PATH_MOUNTED /* GNU libc */ # define MOUNTED _PATH_MOUNTED # endif # if defined MNT_MNTTAB /* HP-UX. */ # define MOUNTED MNT_MNTTAB # endif # if defined MNTTABNAME /* Dynix. */ # define MOUNTED MNTTABNAME # 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])]) AC_MSG_RESULT([$fu_cv_sys_mounted_getmntent1]) 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, Dynix, Irix)]) fi fi if test -z "$ac_list_mounted_fs"; then # SVR4 AC_MSG_CHECKING([for two-argument getmntent function]) AC_CACHE_VAL([fu_cv_sys_mounted_getmntent2], [AC_EGREP_HEADER([getmntent], [sys/mnttab.h], fu_cv_sys_mounted_getmntent2=yes, fu_cv_sys_mounted_getmntent2=no)]) AC_MSG_RESULT([$fu_cv_sys_mounted_getmntent2]) 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 # DEC Alpha running OSF/1, and Apple Darwin 1.3. # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h AC_MSG_CHECKING([for getfsstat function]) AC_CACHE_VAL([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])]) AC_MSG_RESULT([$fu_cv_sys_mounted_getfsstat]) 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 # SVR3 AC_MSG_CHECKING([for FIXME existence of three headers]) AC_CACHE_VAL([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])]) AC_MSG_RESULT([$fu_cv_sys_mounted_fread_fstyp]) 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 # 4.4BSD and DEC OSF/1. AC_MSG_CHECKING([for getmntinfo function]) AC_CACHE_VAL([fu_cv_sys_mounted_getmntinfo], [ test "$ac_cv_func_getmntinfo" = yes \ && fu_cv_sys_mounted_getmntinfo=yes \ || fu_cv_sys_mounted_getmntinfo=no ]) AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo]) if test $fu_cv_sys_mounted_getmntinfo = yes; then AC_MSG_CHECKING([whether getmntinfo returns statvfs structures]) AC_CACHE_VAL([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]) ]) AC_MSG_RESULT([$fu_cv_sys_mounted_getmntinfo2]) if test $fu_cv_sys_mounted_getmntinfo2 = no; then 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 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 # Ultrix AC_MSG_CHECKING([for getmnt function]) AC_CACHE_VAL([fu_cv_sys_mounted_getmnt], [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ #include <sys/fs_types.h> #include <sys/mount.h>]])], [fu_cv_sys_mounted_getmnt=yes], [fu_cv_sys_mounted_getmnt=no])]) AC_MSG_RESULT([$fu_cv_sys_mounted_getmnt]) if test $fu_cv_sys_mounted_getmnt = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_GETMNT], [1], [Define if there is a function named getmnt for reading the list of mounted file systems. (Ultrix)]) fi fi if test -z "$ac_list_mounted_fs"; then # BeOS AC_CHECK_FUNCS([next_dev fs_stat_dev]) AC_CHECK_HEADERS([fs_info.h]) AC_MSG_CHECKING([for BEOS mounted file system support functions]) 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_result=yes else fu_result=no fi AC_MSG_RESULT([$fu_result]) if test $fu_result = 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 # SVR2 AC_MSG_CHECKING([whether it is possible to resort to fread on /etc/mnttab]) AC_CACHE_VAL([fu_cv_sys_mounted_fread], [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <mnttab.h>]])], [fu_cv_sys_mounted_fread=yes], [fu_cv_sys_mounted_fread=no])]) AC_MSG_RESULT([$fu_cv_sys_mounted_fread]) if test $fu_cv_sys_mounted_fread = yes; then ac_list_mounted_fs=found AC_DEFINE([MOUNTED_FREAD], [1], [Define if there is no specific function for reading the list of mounted file systems. fread will be used to read /etc/mnttab. (SVR2) ]) 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 filesystems 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 AS_IF([test $ac_list_mounted_fs = found], [$1], [$2]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/lseek.m4������������������������������������������������������������������0000664�0000000�0000000�00000003222�11671051007�0016356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lseek.m4 serial 8 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_PROG_CC]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], [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 ]], [[ /* 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 _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) || defined __BEOS__ /* mingw and 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]) 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 ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/lstat.m4������������������������������������������������������������������0000664�0000000�0000000�00000004777�11671051007�0016422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 23 # Copyright (C) 1997-2001, 2003-2011 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([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]) if test $gl_cv_func_lstat_dereferences_slashed_symlink = no; then REPLACE_LSTAT=1 fi else HAVE_LSTAT=0 fi ]) # Prerequisites of lib/lstat.c. AC_DEFUN([gl_PREREQ_LSTAT], [ AC_REQUIRE([AC_C_INLINE]) : ]) 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_CACHE_CHECK([whether lstat correctly handles trailing slash], [gl_cv_func_lstat_dereferences_slashed_symlink], [rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[struct stat sbuf; /* 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], [# When cross-compiling, be pessimistic so we will end up using the # replacement version of lstat that checks for trailing slashes and # calls lstat a second time when necessary. gl_cv_func_lstat_dereferences_slashed_symlink=no ]) else # If the 'ln -s' command failed, then we probably don't even # have an lstat function. gl_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file ]) test $gl_cv_func_lstat_dereferences_slashed_symlink = yes && AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1], [Define to 1 if `lstat' dereferences a symlink specified with a trailing slash.]) ]) �gnulib-20111211-stable/m4/malloc.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003755�11671051007�0016535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloc.m4 serial 13 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_FUNC_MALLOC_GNU # ------------------ # Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if # it is not. AC_DEFUN([gl_FUNC_MALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl _AC_FUNC_MALLOC_IF is defined in Autoconf. _AC_FUNC_MALLOC_IF( [AC_DEFINE([HAVE_MALLOC_GNU], [1], [Define to 1 if your system has a GNU libc compatible 'malloc' function, and to 0 otherwise.])], [AC_DEFINE([HAVE_MALLOC_GNU], [0]) REPLACE_MALLOC=1 ]) ]) # gl_FUNC_MALLOC_POSIX # -------------------- # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it # fails), and replace malloc if it is not. AC_DEFUN([gl_FUNC_MALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix = yes; then AC_DEFINE([HAVE_MALLOC_POSIX], [1], [Define if the 'malloc' function is POSIX compliant.]) else REPLACE_MALLOC=1 fi ]) # Test whether malloc, realloc, calloc are POSIX compliant, # Set gl_cv_func_malloc_posix to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_POSIX], [ AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], [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 are POSIX compliant. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[]], [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ choke me #endif ]])], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no]) ]) ]) �������������������gnulib-20111211-stable/m4/malloca.m4����������������������������������������������������������������0000664�0000000�0000000�00000001101�11671051007�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloca.m4 serial 1 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2011 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]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/manywarnings.m4�����������������������������������������������������������0000664�0000000�0000000�00000012156�11671051007�0017776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# manywarnings.m4 serial 3 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_warn_set="$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. AC_DEFUN([gl_MANYWARN_ALL_GCC], [ dnl First, check if -Wno-missing-field-initializers is needed. dnl -Wmissing-field-initializers is implied by -W, but that issues dnl warnings with GCC version before 4.7, for the common idiom dnl of initializing types on the stack to zero, using { 0, } AC_REQUIRE([AC_PROG_CC]) if test -n "$GCC"; then dnl First, check -W -Werror -Wno-missing-field-initializers is supported dnl with the current $CC $CFLAGS $CPPFLAGS. AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -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"]) AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) 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_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[void f (void) { typedef struct { int a; int b; } s_t; s_t s1 = { 0, }; } ]], [[]])], [gl_cv_cc_nomfi_needed=no], [gl_cv_cc_nomfi_needed=yes]) CFLAGS="$gl_save_CFLAGS" ]) AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) fi fi gl_manywarn_set= for gl_manywarn_item in \ -Wall \ -W \ -Wformat-y2k \ -Wformat-nonliteral \ -Wformat-security \ -Winit-self \ -Wmissing-include-dirs \ -Wswitch-default \ -Wswitch-enum \ -Wunused \ -Wunknown-pragmas \ -Wstrict-aliasing \ -Wstrict-overflow \ -Wsystem-headers \ -Wfloat-equal \ -Wtraditional \ -Wtraditional-conversion \ -Wdeclaration-after-statement \ -Wundef \ -Wshadow \ -Wunsafe-loop-optimizations \ -Wpointer-arith \ -Wbad-function-cast \ -Wc++-compat \ -Wcast-qual \ -Wcast-align \ -Wwrite-strings \ -Wconversion \ -Wsign-conversion \ -Wlogical-op \ -Waggregate-return \ -Wstrict-prototypes \ -Wold-style-definition \ -Wmissing-prototypes \ -Wmissing-declarations \ -Wmissing-noreturn \ -Wmissing-format-attribute \ -Wpacked \ -Wpadded \ -Wredundant-decls \ -Wnested-externs \ -Wunreachable-code \ -Winline \ -Winvalid-pch \ -Wlong-long \ -Wvla \ -Wvolatile-register-var \ -Wdisabled-optimization \ -Wstack-protector \ -Woverlength-strings \ -Wbuiltin-macro-redefined \ -Wmudflap \ -Wpacked-bitfield-compat \ -Wsync-nand \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # The following are not documented in the manual but are included in # output from gcc --help=warnings. for gl_manywarn_item in \ -Wattributes \ -Wcoverage-mismatch \ -Wmultichar \ -Wunused-macros \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # More warnings from gcc 4.6.2 --help=warnings. for gl_manywarn_item in \ -Wabi \ -Wcpp \ -Wdeprecated \ -Wdeprecated-declarations \ -Wdiv-by-zero \ -Wdouble-promotion \ -Wendif-labels \ -Wextra \ -Wformat-contains-nul \ -Wformat-extra-args \ -Wformat-zero-length \ -Wformat=2 \ -Wmultichar \ -Wnormalized=nfc \ -Woverflow \ -Wpointer-to-int-cast \ -Wpragmas \ -Wsuggest-attribute=const \ -Wsuggest-attribute=noreturn \ -Wsuggest-attribute=pure \ -Wtrampolines \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # Disable the missing-field-initializers warning if needed if test "$gl_cv_cc_nomfi_needed" = yes; then gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" fi $1=$gl_manywarn_set ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/math_h.m4�����������������������������������������������������������������0000664�0000000�0000000�00000026437�11671051007�0016530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# math_h.m4 serial 56 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MATH_H], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([math.h]) AC_REQUIRE([AC_C_INLINE]) 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 ceilf ceill copysign copysignf copysignl cosf cosl coshf expf expl fabsf floorf floorl fma fmaf fmal fmodf frexpf frexpl ldexpf ldexpl logb logf logl log10f modff powf rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl tanf tanl tanhf trunc truncf truncl]) ]) AC_DEFUN([gl_MATH_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_MATH_H_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]) ]) AC_DEFUN([gl_MATH_H_DEFAULTS], [ GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF]) GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL]) GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF]) GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL]) GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF]) GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL]) GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F]) GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL]) GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF]) GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL]) GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN]) GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF]) GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL]) GNULIB_COSF=0; AC_SUBST([GNULIB_COSF]) GNULIB_COSL=0; AC_SUBST([GNULIB_COSL]) GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF]) GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF]) GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL]) GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF]) GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR]) GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF]) GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL]) GNULIB_FMA=0; AC_SUBST([GNULIB_FMA]) GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF]) GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL]) GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF]) GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF]) GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP]) GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL]) GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE]) GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF]) GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN]) GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF]) GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND]) GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL]) GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF]) GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL]) GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB]) GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF]) GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL]) GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F]) GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF]) GNULIB_POWF=0; AC_SUBST([GNULIB_POWF]) GNULIB_RINT=0; AC_SUBST([GNULIB_RINT]) GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF]) GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL]) GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND]) GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF]) GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL]) GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT]) GNULIB_SINF=0; AC_SUBST([GNULIB_SINF]) GNULIB_SINL=0; AC_SUBST([GNULIB_SINL]) GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF]) GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF]) GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL]) GNULIB_TANF=0; AC_SUBST([GNULIB_TANF]) GNULIB_TANL=0; AC_SUBST([GNULIB_TANL]) GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF]) GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC]) GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF]) GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL]) 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_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) HAVE_COPYSIGNF=1; AC_SUBST([HAVE_COPYSIGNF]) 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_FABSF=1; AC_SUBST([HAVE_FABSF]) 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_FREXPF=1; AC_SUBST([HAVE_FREXPF]) 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_MODFF=1; AC_SUBST([HAVE_MODFF]) HAVE_POWF=1; AC_SUBST([HAVE_POWF]) HAVE_RINT=1; AC_SUBST([HAVE_RINT]) HAVE_RINTF=1; AC_SUBST([HAVE_RINTF]) 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_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) 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_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) 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_CEIL=0; AC_SUBST([REPLACE_CEIL]) REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) 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_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_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_NAN=0; AC_SUBST([REPLACE_NAN]) 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_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) 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-20111211-stable/m4/mathfunc.m4���������������������������������������������������������������0000664�0000000�0000000�00000015431�11671051007�0017065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mathfunc.m4 serial 10 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 (*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 (*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 MacOS 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-20111211-stable/m4/mbchar.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0016514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbchar.m4 serial 8 dnl Copyright (C) 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) AC_REQUIRE([AC_C_INLINE]) ]) ���������������������������������������������������������gnulib-20111211-stable/m4/mbfile.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000676�11671051007�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbfile.m4 serial 6 dnl Copyright (C) 2005, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_C_INLINE]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) : ]) ������������������������������������������������������������������gnulib-20111211-stable/m4/mbiter.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000676�11671051007�0016547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbiter.m4 serial 6 dnl Copyright (C) 2005, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_C_INLINE]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) : ]) ������������������������������������������������������������������gnulib-20111211-stable/m4/mbrlen.m4�����������������������������������������������������������������0000664�0000000�0000000�00000016027�11671051007�0016541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrlen.m4 serial 8 dnl Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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],,, [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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 ]) ]) # Prerequisites of lib/mbrlen.c. AC_DEFUN([gl_PREREQ_MBRLEN], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mbrtowc.m4����������������������������������������������������������������0000664�0000000�0000000�00000041537�11671051007�0016743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrtowc.m4 serial 25 dnl Copyright (C) 2001-2002, 2004-2005, 2008-2011 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([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],,, [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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 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 fi fi ]) 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_TYPE_MBSTATE_T]) AC_CHECK_FUNCS_ONCE([mbsinit]) AC_CHECK_FUNCS_ONCE([mbrtowc]) if test $ac_cv_func_mbsinit = yes && 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([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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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 1; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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 1; } 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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 1; } 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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 1; } return 0; }]])], [gl_cv_func_mbrtowc_nul_retval=yes], [gl_cv_func_mbrtowc_nul_retval=no], [:]) fi ]) ]) # Prerequisites of lib/mbrtowc.c. AC_DEFUN([gl_PREREQ_MBRTOWC], [ : ]) 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( [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/mbsinit.m4����������������������������������������������������������������0000664�0000000�0000000�00000002763�11671051007�0016731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsinit.m4 serial 8 dnl Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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],,, [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/mbslen.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000730�11671051007�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbslen.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/mbsnrtowcs.m4�������������������������������������������������������������0000664�0000000�0000000�00000001416�11671051007�0017457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsnrtowcs.m4 serial 4 dnl Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 fi fi ]) # Prerequisites of lib/mbsnrtowcs.c. AC_DEFUN([gl_PREREQ_MBSNRTOWCS], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mbsrtowcs.m4��������������������������������������������������������������0000664�0000000�0000000�00000011246�11671051007�0017303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsrtowcs.m4 serial 13 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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],,, [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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-20111211-stable/m4/mbstate_t.m4��������������������������������������������������������������0000664�0000000�0000000�00000002567�11671051007�0017250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbstate_t.m4 serial 13 dnl Copyright (C) 2000-2002, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/mbswidth.m4���������������������������������������������������������������0000664�0000000�0000000�00000002635�11671051007�0017103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbswidth.m4 serial 18 dnl Copyright (C) 2000-2002, 2004, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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( [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/mbtowc.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0016553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbtowc.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) if false; then REPLACE_MBTOWC=1 fi ]) # Prerequisites of lib/mbtowc.c. AC_DEFUN([gl_PREREQ_MBTOWC], [ : ]) ���������������������������������������������������������gnulib-20111211-stable/m4/md4.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0015736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# md4.m4 serial 6 dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) AC_REQUIRE([AC_C_INLINE]) : ]) ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/md5.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0015742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# md5.m4 serial 12 dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) AC_REQUIRE([AC_C_INLINE]) : ]) �������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/memcasecmp.m4�������������������������������������������������������������0000664�0000000�0000000�00000000466�11671051007�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 6 dnl Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/memchr-obsolete.m4��������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0020342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memchr-obsolete.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMCHR_OBSOLETE], [ dnl The real code is in memchr.m4. : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/memchr.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005340�11671051007�0016531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memchr.m4 serial 12 dnl Copyright (C) 2002-2004, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation 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], [ 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_HEADER_STRING_H_DEFAULTS]) m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [ dnl These days, we assume memchr is present. But if support for old dnl platforms is desired: AC_CHECK_FUNCS_ONCE([memchr]) if test $ac_cv_func_memchr = no; then HAVE_MEMCHR=0 fi ]) if test $HAVE_MEMCHR = 1; then # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # http://bugzilla.redhat.com/499689 # memchr should not dereference overestimated length after a match # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 # 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) { 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; } return result; ]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], [dnl Be pessimistic for now. gl_cv_func_memchr_works="guessing no"])]) if test "$gl_cv_func_memchr_works" != yes; then REPLACE_MEMCHR=1 fi fi ]) # Prerequisites of lib/memchr.c. AC_DEFUN([gl_PREREQ_MEMCHR], [ AC_CHECK_HEADERS([bp-sym.h]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/memcmp.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004367�11671051007�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memcmp.m4 serial 16 dnl Copyright (C) 2002-2004, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/memcoll.m4����������������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0016711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memcoll.m4 serial 9 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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_INLINE]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/memcpy.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000634�11671051007�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memcpy.m4 serial 4 dnl Copyright (C) 2002, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/memmem.m4�����������������������������������������������������������������0000664�0000000�0000000�00000011074�11671051007�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memmem.m4 serial 23 dnl Copyright (C) 2002-2004, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_HEADER_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 http://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, NULL, 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], [ #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=yes], [gl_cv_func_memmem_works_always="guessing no"]) ]) ]) if test "$gl_cv_func_memmem_works_always" != yes; then REPLACE_MEMMEM=1 fi 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; } 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=yes], [gl_cv_func_memmem_works_fast="guessing no"]) ]) ]) if test "$gl_cv_func_memmem_works_fast" != yes; then REPLACE_MEMMEM=1 fi fi ]) # gl_FUNC_MEMMEM # Prerequisites of lib/memmem.c. AC_DEFUN([gl_PREREQ_MEMMEM], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/memmove.m4����������������������������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memmove.m4 serial 4 dnl Copyright (C) 2002, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/mempcpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000001346�11671051007�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mempcpy.m4 serial 11 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2011 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_HEADER_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-20111211-stable/m4/memrchr.m4����������������������������������������������������������������0000664�0000000�0000000�00000001253�11671051007�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memrchr.m4 serial 10 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2011 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_HEADER_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-20111211-stable/m4/memset.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000634�11671051007�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memset.m4 serial 4 dnl Copyright (C) 2002, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/memxor.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memxor.m4 serial 4 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/mgetgroups.m4�������������������������������������������������������������0000664�0000000�0000000�00000000515�11671051007�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 5 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/minmax.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002455�11671051007�0016553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# minmax.m4 serial 4 dnl Copyright (C) 2005, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software 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-20111211-stable/m4/minus-zero.m4�������������������������������������������������������������0000664�0000000�0000000�00000004635�11671051007�0017374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# minus-zero.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 MacOS 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 MacOS 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 MacOS 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-20111211-stable/m4/mkancesdirs.m4������������������������������������������������������������0000664�0000000�0000000�00000000516�11671051007�0017561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make a file's ancestor directories. dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/mkdir-p.m4����������������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0016620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkdir-p.m4 serial 15 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/mkdir.m4������������������������������������������������������������������0000664�0000000�0000000�00000003442�11671051007�0016365�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 # Copyright (C) 2001, 2003-2004, 2006, 2008-2011 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_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> ]], [return mkdir ("conftest.dir/", 0700);])], [gl_cv_func_mkdir_trailing_slash_works=yes], [gl_cv_func_mkdir_trailing_slash_works=no], [gl_cv_func_mkdir_trailing_slash_works="guessing no"]) rm -rf conftest.dir ] ) if test "$gl_cv_func_mkdir_trailing_slash_works" != yes; then REPLACE_MKDIR=1 fi 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> ]], [return !mkdir ("conftest.dir/./", 0700);])], [gl_cv_func_mkdir_trailing_dot_works=yes], [gl_cv_func_mkdir_trailing_dot_works=no], [gl_cv_func_mkdir_trailing_dot_works="guessing no"]) rm -rf conftest.dir ] ) if test "$gl_cv_func_mkdir_trailing_dot_works" != yes; then 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.]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mkdirat.m4����������������������������������������������������������������0000664�0000000�0000000�00000001206�11671051007�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkdirat.m4 serial 1 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/mkdtemp.m4����������������������������������������������������������������0000664�0000000�0000000�00000001027�11671051007�0016715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkdtemp.m4 serial 8 dnl Copyright (C) 2001-2003, 2006-2007, 2009-2011 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-20111211-stable/m4/mkfifo.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003051�11671051007�0016526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 3 # See if we need to provide mkfifo replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_CHECK_FUNCS_ONCE([mkfifo]) if test $ac_cv_func_mkfifo = no; then HAVE_MKFIFO=0 else 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], [gl_cv_func_mkfifo_works="guessing no"]) rm -f conftest.tmp conftest.lnk]) if test "$gl_cv_func_mkfifo_works" != yes; then AC_DEFINE([MKFIFO_TRAILING_SLASH_BUG], [1], [Define to 1 if mkfifo does not reject trailing slash]) REPLACE_MKFIFO=1 fi fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mkfifoat.m4���������������������������������������������������������������0000664�0000000�0000000�00000001242�11671051007�0017053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 3 # See if we need to provide mkfifoat/mknodat replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_FUNC_OPENAT]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([mkfifoat mknodat]) if test $ac_cv_func_mkfifoat = no; then # No known system has mkfifoat but not mknodat HAVE_MKFIFOAT=0 HAVE_MKNODAT=0 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mknod.m4������������������������������������������������������������������0000664�0000000�0000000�00000003457�11671051007�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 4 # See if we need to provide mknod replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([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> ]], [[/* Indeterminate for super-user, assume no. Why are you running configure as root, anyway? */ if (!geteuid ()) 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], [gl_cv_func_mknod_works="guessing no"]) rm -f conftest.fifo]) if test "$gl_cv_func_mknod_works" != yes; then AC_DEFINE([MKNOD_FIFO_BUG], [1], [Define to 1 if mknod cannot create a fifo without super-user privileges]) fi dnl Systems that mishandle trailing slash on mkfifo also goof on mknod. if test $REPLACE_MKFIFO = 1 || test "$gl_cv_func_mknod_works" != yes; then REPLACE_MKNOD=1 fi fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mkostemp.m4���������������������������������������������������������������0000664�0000000�0000000�00000001155�11671051007�0017115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkostemp.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/mkostemps.m4��������������������������������������������������������������0000664�0000000�0000000�00000001053�11671051007�0017275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkostemps.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/mkstemp.m4����������������������������������������������������������������0000664�0000000�0000000�00000004645�11671051007�0016745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 22 # Copyright (C) 2001, 2003-2007, 2009-2011 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_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], [[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], [gl_cv_func_working_mkstemp="guessing no"]) rm -rf conftest.mkstemp ]) if test "$gl_cv_func_working_mkstemp" != yes; then REPLACE_MKSTEMP=1 fi else HAVE_MKSTEMP=0 fi ]) # Prerequisites of lib/mkstemp.c. AC_DEFUN([gl_PREREQ_MKSTEMP], [ ]) �������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mkstemps.m4���������������������������������������������������������������0000664�0000000�0000000�00000001045�11671051007�0017117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkstemps.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/mktime.m4�����������������������������������������������������������������0000664�0000000�0000000�00000015330�11671051007�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 21 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2011 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_FUNC_MKTIME], [ AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) 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_FUNCS_ONCE([alarm]) AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple MacOS 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=no fi AC_CACHE_CHECK([for working mktime], [gl_cv_func_working_mktime], [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 #ifndef HAVE_ALARM # define alarm(X) /* empty */ #endif /* Work around redefinition to rpl_putenv by other config tests. */ #undef putenv 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; int time_t_signed = ! ((time_t) 0 < (time_t) -1); /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ alarm (60); time_t_max = (! time_t_signed ? (time_t) -1 : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) * 2 + 1)); time_t_min = (! time_t_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; t += delta) if (! mktime_test (t)) result |= 1; if (! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) result |= 2; for (j = 1; ; j <<= 1) if (! bigtime_test (j)) result |= 4; else if (INT_MAX / 2 < j) break; if (! 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], [gl_cv_func_working_mktime=no]) ]) if test $gl_cv_func_working_mktime = no; then REPLACE_MKTIME=1 else REPLACE_MKTIME=0 fi ]) AC_DEFUN([gl_FUNC_MKTIME_INTERNAL], [ AC_REQUIRE([gl_FUNC_MKTIME]) if test $REPLACE_MKTIME = 0; then 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. REPLACE_MKTIME=1 ]) fi ]) # Prerequisites of lib/mktime.c. AC_DEFUN([gl_PREREQ_MKTIME], [ AC_REQUIRE([AC_C_INLINE]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mmap-anon.m4��������������������������������������������������������������0000664�0000000�0000000�00000003721�11671051007�0017142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mmap-anon.m4 serial 9 dnl Copyright (C) 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 MacOS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. # - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be # used. AC_DEFUN([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 cant identify this map], [ #include <sys/mman.h> #ifdef MAP_ANONYMOUS I cant identify this map #endif ], [gl_have_mmap_anonymous=yes]) if test $gl_have_mmap_anonymous != yes; then AC_EGREP_CPP([I cant identify this map], [ #include <sys/mman.h> #ifdef MAP_ANON I cant 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-20111211-stable/m4/mode_t.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002342�11671051007�0016524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mode_t.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/modechange.m4�������������������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0017347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modechange.m4 serial 7 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/modf.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0016206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [ dnl Determine MODF_LIBM. gl_MATHFUNC([modf], [double], [(double, double *)]) ]) �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/modff.m4������������������������������������������������������������������0000664�0000000�0000000�00000001401�11671051007�0016343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# modff.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MODF]) 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 = no \ && test $gl_cv_func_modff_in_libm = no; then HAVE_MODFF=0 MODFF_LIBM="$MODF_LIBM" fi AC_SUBST([MODFF_LIBM]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mountlist.m4��������������������������������������������������������������0000664�0000000�0000000�00000001245�11671051007�0017314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 11 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MOUNTLIST], [ gl_LIST_MOUNTED_FILE_SYSTEMS([gl_cv_list_mounted_fs=yes], [gl_cv_list_mounted_fs=no]) ]) # Prerequisites of lib/mountlist.c not done by gl_LIST_MOUNTED_FILE_SYSTEMS. AC_DEFUN([gl_PREREQ_MOUNTLIST_EXTRA], [ dnl Note gl_LIST_MOUNTED_FILE_SYSTEMS checks for mntent.h, not sys/mntent.h. AC_CHECK_HEADERS([sys/mntent.h]) gl_FSTYPENAME ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/mpsort.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000534�11671051007�0016602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sort a vector of pointers to data. # Copyright (C) 2007, 2009-2011 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-20111211-stable/m4/msvc-inval.m4�������������������������������������������������������������0000664�0000000�0000000�00000001327�11671051007�0017336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-inval.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/msvc-nothrow.m4�����������������������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/multiarch.m4��������������������������������������������������������������0000664�0000000�0000000�00000003673�11671051007�0017255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# multiarch.m4 serial 6 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 MacOS 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. 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) 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-20111211-stable/m4/nanosleep.m4��������������������������������������������������������������0000664�0000000�0000000�00000007747�11671051007�0017257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 34 dnl From Jim Meyering. dnl Check for the nanosleep function. dnl If not found, use the supplied replacement. dnl # Copyright (C) 1999-2001, 2003-2011 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], [ dnl Persuade glibc and Solaris <time.h> to declare nanosleep. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_REQUIRE([gl_FUNC_SELECT]) 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 MacOS 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))) static void check_for_SIGALRM (int sig) { if (sig != SIGALRM) _exit (1); } int main () { static struct timespec ts_sleep; static struct timespec ts_remaining; static struct sigaction act; if (! nanosleep) return 2; act.sa_handler = check_for_SIGALRM; sigemptyset (&act.sa_mask); sigaction (SIGALRM, &act, NULL); ts_sleep.tv_sec = 0; ts_sleep.tv_nsec = 1; alarm (1); if (nanosleep (&ts_sleep, NULL) != 0) return 3; 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; 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], [gl_cv_func_nanosleep=cross-compiling]) ]) if test "$gl_cv_func_nanosleep" = yes; then REPLACE_NANOSLEEP=0 else REPLACE_NANOSLEEP=1 if test "$gl_cv_func_nanosleep" = 'no (mishandles large arguments)'; then AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1], [Define to 1 if nanosleep mishandles large arguments.]) else for ac_lib in $LIBSOCKET; do case " $LIB_NANOSLEEP " in *" $ac_lib "*) ;; *) LIB_NANOSLEEP="$LIB_NANOSLEEP $ac_lib";; esac done fi fi 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-20111211-stable/m4/netdb_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000003041�11671051007�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# netdb_h.m4 serial 11 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_NETDB], [ 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]) ]) AC_DEFUN([gl_NETDB_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_NETDB_H_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]) ]) AC_DEFUN([gl_NETDB_H_DEFAULTS], [ GNULIB_GETADDRINFO=0; AC_SUBST([GNULIB_GETADDRINFO]) 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]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/netinet_in_h.m4�����������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0017723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# netinet_in_h.m4 serial 5 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/nl_langinfo.m4������������������������������������������������������������0000664�0000000�0000000�00000003524�11671051007�0017546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nl_langinfo.m4 serial 5 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) dnl for cross-compiles 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.]) if test $HAVE_LANGINFO_CODESET = 1 && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 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 ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/nls.m4��������������������������������������������������������������������0000664�0000000�0000000�00000002315�11671051007�0016051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2011 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 dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU dnl gettext package 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-20111211-stable/m4/no-c++.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001206�11671051007�0016235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# no-c++.m4 serial 1 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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. AC_DEFUN([gt_NO_CXX], [ NO_CXX= AC_EGREP_CPP([Is g++], [ #if defined __GNUC__ && defined __cplusplus Is g++ #endif ], [NO_CXX="-x c"]) AC_SUBST([NO_CXX]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/nocrash.m4����������������������������������������������������������������0000664�0000000�0000000�00000010554�11671051007�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nocrash.m4 serial 3 dnl Copyright (C) 2005, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 MacOS 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 http://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 http://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 __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> /* 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-20111211-stable/m4/nonblocking.m4������������������������������������������������������������0000664�0000000�0000000�00000001741�11671051007�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nonblocking.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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-20111211-stable/m4/nproc.m4������������������������������������������������������������������0000664�0000000�0000000�00000003427�11671051007�0016403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nproc.m4 serial 4 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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 <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-20111211-stable/m4/obstack-printf-posix.m4���������������������������������������������������0000664�0000000�0000000�00000010606�11671051007�0021345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# obstack-printf-posix.m4 serial 4 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/obstack-printf.m4���������������������������������������������������������0000664�0000000�0000000�00000002313�11671051007�0020201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# obstack-printf.m4 serial 4 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/onceonly.m4���������������������������������������������������������������0000664�0000000�0000000�00000010627�11671051007�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# onceonly.m4 serial 8 dnl Copyright (C) 2002-2003, 2005-2006, 2008-2011 Free Software Foundation, dnl Inc. dnl dnl This file 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 file 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 file. If not, see <http://www.gnu.org/licenses/>. dnl dnl As a special exception to the GNU General Public License, dnl 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 This file defines some "once only" variants of standard autoconf macros. dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL dnl The advantage is that the check for each of the headers/functions/decls dnl will be put only once into the 'configure' file. It keeps the size of dnl the 'configure' file down, and avoids redundant output when 'configure' dnl is run. dnl The drawback is that the checks cannot be conditionalized. If you write dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to dnl empty, and the check will be inserted before the body of the AC_DEFUNed dnl function. dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested dnl headers at once, thus reducing the size of 'configure'. It is known to work dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%. dnl Autoconf version 2.59 plus gnulib is required; this file is not needed dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first dnl argument! AC_PREREQ([2.59]) # AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of # AC_CHECK_HEADERS(HEADER1 HEADER2 ...). AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ : m4_foreach_w([gl_HEADER_NAME], [$1], [ AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, [./-], [___])), [ m4_divert_text([INIT_PREPARE], [gl_header_list="$gl_header_list gl_HEADER_NAME"]) gl_HEADERS_EXPANSION AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])), [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.]) ]) AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME, [./-], [___]))) ]) ]) m4_define([gl_HEADERS_EXPANSION], [ m4_divert_text([DEFAULTS], [gl_header_list=]) AC_CHECK_HEADERS([$gl_header_list]) m4_define([gl_HEADERS_EXPANSION], []) ]) # AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of # AC_CHECK_FUNCS(FUNC1 FUNC2 ...). AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ : m4_foreach_w([gl_FUNC_NAME], [$1], [ AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ m4_divert_text([INIT_PREPARE], [gl_func_list="$gl_func_list gl_FUNC_NAME"]) gl_FUNCS_EXPANSION AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])), [Define to 1 if you have the `]m4_defn([gl_FUNC_NAME])[' function.]) ]) AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) ]) ]) m4_define([gl_FUNCS_EXPANSION], [ m4_divert_text([DEFAULTS], [gl_func_list=]) AC_CHECK_FUNCS([$gl_func_list]) m4_define([gl_FUNCS_EXPANSION], []) ]) # AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of # AC_CHECK_DECLS(DECL1, DECL2, ...). AC_DEFUN([AC_CHECK_DECLS_ONCE], [ : m4_foreach_w([gl_DECL_NAME], [$1], [ AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) ]) AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) ]) ]) ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/open.m4�������������������������������������������������������������������0000664�0000000�0000000�00000005102�11671051007�0016213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open.m4 serial 13 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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]) 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 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.]) 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([AC_C_INLINE]) AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/openat.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001714�11671051007�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 43 # See if we need to use our replacement for Solaris' openat et al functions. dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink in yes+yes) ;; yes+*) # 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([AC_C_INLINE]) AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) ����������������������������������������������������gnulib-20111211-stable/m4/opendir.m4����������������������������������������������������������������0000664�0000000�0000000�00000001331�11671051007�0016712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# opendir.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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 ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/openmp.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007673�11671051007�0016567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# openmp.m4 serial 9 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 can be removed once we assume autoconf >= 2.62. dnl Expand to nothing in autoconf >= 2.62. m4_copy has a different dnl semantic in autoconf > 2.63. m4_ifdef([AC_OPENMP], [], [ # _AC_LANG_OPENMP # --------------- # Expands to some language dependent source code for testing the presence of # OpenMP. AC_DEFUN([_AC_LANG_OPENMP], [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) # _AC_LANG_OPENMP(C) # ------------------ m4_define([_AC_LANG_OPENMP(C)], [ #ifndef _OPENMP choke me #endif #include <omp.h> int main () { return omp_get_num_threads (); } ]) # _AC_LANG_OPENMP(C++) # -------------------- m4_copy([_AC_LANG_OPENMP(C)], [_AC_LANG_OPENMP(C++)]) # _AC_LANG_OPENMP(Fortran 77) # --------------------------- m4_define([_AC_LANG_OPENMP(Fortran 77)], [ program main implicit none !$ integer tid tid = 42 call omp_set_num_threads(2) end ]) # _AC_LANG_OPENMP(Fortran) # --------------------------- m4_copy([_AC_LANG_OPENMP(Fortran 77)], [_AC_LANG_OPENMP(Fortran)]) # AC_OPENMP # --------- # Check which options need to be passed to the C compiler to support OpenMP. # Set the OPENMP_CFLAGS / OPENMP_CXXFLAGS / OPENMP_FFLAGS variable to these # options. # The options are necessary at compile time (so the #pragmas are understood) # and at link time (so the appropriate library is linked with). # This macro takes care to not produce redundant options if $CC $CFLAGS already # supports OpenMP. It also is careful to not pass options to compilers that # misinterpret them; for example, most compilers accept "-openmp" and create # an output file called 'penmp' rather than activating OpenMP support. AC_DEFUN([AC_OPENMP], [ OPENMP_[]_AC_LANG_PREFIX[]FLAGS= AC_ARG_ENABLE([openmp], [AS_HELP_STRING([--disable-openmp], [do not use OpenMP])]) if test "$enable_openmp" != no; then AC_CACHE_CHECK([for $CC option to support OpenMP], [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp], [AC_LINK_IFELSE([_AC_LANG_OPENMP], [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp='none needed'], [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp='unsupported' dnl Try these flags: dnl GCC >= 4.2 -fopenmp dnl SunPRO C -xopenmp dnl Intel C -openmp dnl SGI C, PGI C -mp dnl Tru64 Compaq C -omp dnl IBM C (AIX, Linux) -qsmp=omp dnl Cray CCE -homp dnl NEC SX -Popenmp dnl Lahey Fortran (Linux) --openmp dnl If in this loop a compiler is passed an option that it doesn't dnl understand or that it misinterprets, the AC_LINK_IFELSE test dnl will fail (since we know that it failed without the option), dnl therefore the loop will continue searching for an option, and dnl no output file called 'penmp' or 'mp' is created. for ac_option in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $ac_option" AC_LINK_IFELSE([_AC_LANG_OPENMP], [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp=$ac_option]) _AC_LANG_PREFIX[]FLAGS=$ac_save_[]_AC_LANG_PREFIX[]FLAGS if test "$ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp" != unsupported; then break fi done])]) case $ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp in #( "none needed" | unsupported) ;; #( *) OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp ;; esac fi AC_SUBST([OPENMP_]_AC_LANG_PREFIX[FLAGS]) ]) ]) ���������������������������������������������������������������������gnulib-20111211-stable/m4/pagealign_alloc.m4��������������������������������������������������������0000664�0000000�0000000�00000001174�11671051007�0020360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 6 dnl Copyright (C) 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/parse-datetime.m4���������������������������������������������������������0000664�0000000�0000000�00000004067�11671051007�0020167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# parse-datetime.m4 serial 19 dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 Prerequisites of lib/parse-datetime.h. AC_REQUIRE([AM_STDBOOL_H]) AC_REQUIRE([gl_TIMESPEC]) 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]) AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[ #include <time.h> /* for time_t */ #include <limits.h> /* for CHAR_BIT, LONG_MIN, LONG_MAX */ #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))) typedef int verify_min[2 * (LONG_MIN <= TYPE_MINIMUM (time_t)) - 1]; typedef int verify_max[2 * (TYPE_MAXIMUM (time_t) <= LONG_MAX) - 1]; ]])], [AC_DEFINE([TIME_T_FITS_IN_LONG_INT], [1], [Define to 1 if all 'time_t' values fit in a 'long int'.]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/passfd.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001573�11671051007�0016542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# passfd.m4 serial 8 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_HEADER_SYS_SOCKET]) 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-20111211-stable/m4/pathmax.m4����������������������������������������������������������������0000664�0000000�0000000�00000002204�11671051007�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pathmax.m4 serial 10 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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 __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-20111211-stable/m4/pclose.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000771�11671051007�0016546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pclose.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/perl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000002567�11671051007�0016230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 9 dnl From Jim Meyering. dnl Find a new-enough version of Perl. # Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2011 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' ) > /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-20111211-stable/m4/perror.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004402�11671051007�0016565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# perror.m4 serial 6 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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], [dnl Guess no when cross-compiling. gl_cv_func_perror_works="guessing no" ]) ]) if test "$gl_cv_func_perror_works" != yes; then REPLACE_PERROR=1 fi ;; *) dnl The system's perror() probably inherits the bugs in the dnl system's strerror_r(). Replace it. REPLACE_PERROR=1 ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/physmem.m4����������������������������������������������������������������0000664�0000000�0000000�00000003212�11671051007�0016734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# physmem.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2006, 2008-2011 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]) AC_REQUIRE([gl_SYS__SYSTEM_CONFIGURATION]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/pipe.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000660�11671051007�0016213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pipe.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/pipe2.m4������������������������������������������������������������������0000664�0000000�0000000�00000001023�11671051007�0016267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pipe2.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/po.m4���������������������������������������������������������������������0000664�0000000�0000000�00000045007�11671051007�0015700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# po.m4 serial 17a dnl Copyright (C) 1995-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 can be used in projects which are not available under dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU dnl gettext package 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]) 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([AM_PROG_MKDIR_P])dnl defined by automake 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.18]) 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 `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) 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 Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) 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"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval '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. But hide it # from automake < 1.5. eval '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 # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' # 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), $(top_srcdir)/$(DOMAIN)_$(lang).properties) # Compute CLASSFILES # as $(foreach lang, $(ALL_LINGUAS), $(top_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 \$(top_srcdir)/\$(DOMAIN)_$lang.properties" CLASSFILES="$CLASSFILES \$(top_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-20111211-stable/m4/poll.m4�������������������������������������������������������������������0000664�0000000�0000000�00000006217�11671051007�0016230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# poll.m4 serial 16 dnl Copyright (c) 2003, 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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 MacOS X 10.4.0 and AIX 5.3, it doesn't. AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <fcntl.h> #include <poll.h> 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 MacOS 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 MacOS 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 # MacOS 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=no], [gl_cv_func_poll=yes])])]) fi if test $gl_cv_func_poll != yes; then 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 fi 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-20111211-stable/m4/poll_h.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002730�11671051007�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# poll_h.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_POLL_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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]) 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]) ]) AC_DEFUN([gl_POLL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_POLL_H_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]) ]) AC_DEFUN([gl_POLL_H_DEFAULTS], [ GNULIB_POLL=0; AC_SUBST([GNULIB_POLL]) 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-20111211-stable/m4/popen.m4������������������������������������������������������������������0000664�0000000�0000000�00000002500�11671051007�0016372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# popen.m4 serial 5 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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], dnl For now, only cygwin 1.5 or older is known to be broken. [gl_cv_func_popen_works='guessing yes']) ]) if test "$gl_cv_func_popen_works" = no; then REPLACE_POPEN=1 fi fi ]) # Prerequisites of lib/popen.c. AC_DEFUN([gl_PREREQ_POPEN], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/posix-shell.m4������������������������������������������������������������0000664�0000000�0000000�00000003360�11671051007�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Find a POSIX-conforming shell. # Copyright (C) 2007-2011 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-20111211-stable/m4/posix_openpt.m4�����������������������������������������������������������0000664�0000000�0000000�00000001151�11671051007�0020001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_openpt.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/posix_spawn.m4������������������������������������������������������������0000664�0000000�0000000�00000026631�11671051007�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_spawn.m4 serial 9 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) if test $ac_cv_func_posix_spawn = yes; then gl_POSIX_SPAWN_WORKS case "$gl_cv_func_posix_spawn_works" in *yes) 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]) ]) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac 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> 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; 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> 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 ]) ]) # 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]) ]) �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/posixtm.m4����������������������������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0016767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posixtm.m4 serial 8 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2011 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-20111211-stable/m4/posixver.m4���������������������������������������������������������������0000664�0000000�0000000�00000003714�11671051007�0017140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posixver.m4 serial 11 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/pow.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0016065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pow.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/powf.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001306�11671051007�0016227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# powf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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-20111211-stable/m4/pread.m4������������������������������������������������������������������0000664�0000000�0000000�00000004362�11671051007�0016354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pread.m4 serial 5 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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> ]], [[ { 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-20111211-stable/m4/printf-frexp.m4�����������������������������������������������������������0000664�0000000�0000000�00000002266�11671051007�0017706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-frexp.m4 serial 5 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/printf-frexpl.m4����������������������������������������������������������0000664�0000000�0000000�00000003320�11671051007�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-frexpl.m4 serial 9 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 MacOS 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 MacOS 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-20111211-stable/m4/printf-posix-rpl.m4�������������������������������������������������������0000664�0000000�0000000�00000001374�11671051007�0020516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-posix-rpl.m4 serial 4 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/printf-posix.m4�����������������������������������������������������������0000664�0000000�0000000�00000003053�11671051007�0017717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-posix.m4 serial 6 (gettext-0.18.2) dnl Copyright (C) 2003, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 the printf() function supports POSIX/XSI format strings with dnl positions. AC_DEFUN([gt_PRINTF_POSIX], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings], gt_cv_func_printf_posix, [ 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); }]])], [gt_cv_func_printf_posix=yes], [gt_cv_func_printf_posix=no], [ AC_EGREP_CPP([notposix], [ #if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ notposix #endif ], [gt_cv_func_printf_posix="guessing no"], [gt_cv_func_printf_posix="guessing yes"]) ]) ]) case $gt_cv_func_printf_posix in *yes) AC_DEFINE([HAVE_POSIX_PRINTF], [1], [Define if your printf() function supports format strings with positions.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/printf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000166234�11671051007�0016572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf.m4 serial 46 dnl Copyright (C) 2003, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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; #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], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) 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";; # Guess yes on MacOS 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";; # If we don't know, assume the worst. *) gl_cv_func_printf_sizes_c99="guessing no";; esac changequote([,])dnl ]) ]) ]) 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], [ changequote(,)dnl case "$host_os" in beos*) gl_cv_func_printf_long_double="guessing no";; mingw* | pw*) gl_cv_func_printf_long_double="guessing no";; *) gl_cv_func_printf_long_double="guessing yes";; esac changequote([,])dnl ]) ]) ]) 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], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) 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";; # Guess yes on MacOS 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 BeOS. beos*) gl_cv_func_printf_infinite="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_printf_infinite="guessing no";; esac changequote([,])dnl ]) ]) ]) 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 || !strisnan (buf, 0, strlen (buf))) result |= 4; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 4; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) 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 || !strisnan (buf, 0, strlen (buf))) result |= 8; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 8; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) 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 || !strisnan (buf, 0, strlen (buf))) result |= 16; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 16; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) 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 || !strisnan (buf, 0, strlen (buf))) result |= 32; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 32; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) 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 || !strisnan (buf, 0, strlen (buf))) result |= 64; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 64; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 64; } #endif return result; }]])], [gl_cv_func_printf_infinite_long_double=yes], [gl_cv_func_printf_infinite_long_double=no], [ changequote(,)dnl 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 # Guess yes on glibc systems. *-gnu*) 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";; # 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";; # If we don't know, assume the worst. *) gl_cv_func_printf_infinite_long_double="guessing no";; esac ;; esac changequote([,])dnl ]) ]) ;; *) 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 6.1 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 FreeBSD 6.1 bug. See <http://lists.gnu.org/archive/html/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 MacOS 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 MacOS X 10.3.9 (Darwin 7.9) bug and also a glibc 2.4 bug <http://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*) 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"]) ;; # If we don't know, assume the worst. *) gl_cv_func_printf_directive_a="guessing no";; 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], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) 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";; # Guess yes on MacOS 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 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";; # If we don't know, assume the worst. *) gl_cv_func_printf_directive_f="guessing no";; esac changequote([,])dnl ]) ]) ]) 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 /* See page about "Parameter Validation" on msdn.microsoft.com. */ 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], [ changequote(,)dnl case "$host_os" in mingw*) gl_cv_func_printf_directive_n="guessing no";; *) gl_cv_func_printf_directive_n="guessing yes";; esac changequote([,])dnl ]) ]) ]) 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([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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 openbsd*) gl_cv_func_printf_directive_ls="guessing no";; 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";; *) 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";; 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";; 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 <http://lists.gnu.org/archive/html/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 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 <http://lists.gnu.org/archive/html/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*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_flag_zero="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_printf_flag_zero="guessing no";; 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 Win32, 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" ;; *) 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[ changequote(,)dnl #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)); } changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then (./conftest 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 MacOS 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*) 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";; # If we don't know, assume the worst. *) gl_cv_func_printf_enomem="guessing no";; 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([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*) 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";; # Guess yes on MacOS 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";; # If we don't know, assume the worst. *) gl_cv_func_snprintf_truncation_c99="guessing no";; 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], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) 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";; # Guess yes on MacOS 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";; # If we don't know, assume the worst. *) gl_cv_func_snprintf_retval_c99="guessing no";; esac changequote([,])dnl ]) ]) ]) 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], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu*) 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";; # Guess yes on MacOS 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";; # If we don't know, assume the worst. *) gl_cv_func_snprintf_directive_n="guessing no";; esac changequote([,])dnl ]) ]) ]) 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([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], [gl_cv_func_snprintf_size1="guessing yes"]) ]) ]) 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*) 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";; # Guess yes on MacOS 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 mingw. mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # If we don't know, assume the worst. *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; 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 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . dnl MacOS X 10.5.8 . . . # # . . . . . . # . . . . . . . . dnl MacOS X 10.3.9 . . . . # . . . . . . # . # . . . . . . 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 2010-11 . . # # # . . # . . . # . . . . . . . . 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 5.0 . . . # # . . . . . . # . # . . . . . . dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . dnl Haiku . . . # # # . # . . . . . ? . . ? . . . dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/priv-set.m4���������������������������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 7 # Copyright (C) 2009-2011 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_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS([getppriv]) AC_CHECK_HEADERS_ONCE([priv.h]) ]) �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/progtest.m4���������������������������������������������������������������0000664�0000000�0000000�00000006040�11671051007�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# progtest.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1996-2003, 2005, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 can be used in projects which are not available under dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU dnl gettext package 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.50]) # 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 ifelse([$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. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/pselect.m4����������������������������������������������������������������0000664�0000000�0000000�00000002020�11671051007�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pselect.m4 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_SYS_SELECT]) AC_REQUIRE([AC_C_RESTRICT]) 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])]) fi if test $ac_cv_func_pselect = no || test $gl_cv_sig_pselect = no; then REPLACE_PSELECT=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/pthread.m4����������������������������������������������������������������0000664�0000000�0000000�00000005133�11671051007�0016705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread.m4 serial 3 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_CHECK], [ AC_REQUIRE([gl_PTHREAD_DEFAULTS]) gl_CHECK_NEXT_HEADERS([pthread.h]) if test $ac_cv_header_pthread_h = yes; then HAVE_PTHREAD_H=1 else HAVE_PTHREAD_H=0 fi 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 if test $ac_cv_header_pthread_h != yes || test $ac_cv_type_pthread_t != yes || test $ac_cv_type_pthread_spinlock_t != yes; then PTHREAD_H='pthread.h' else PTHREAD_H= fi AC_SUBST([PTHREAD_H]) AM_CONDITIONAL([GL_GENERATE_PTHREAD_H], [test -n "$PTHREAD_H"]) LIB_PTHREAD= if test $ac_cv_header_pthread_h = yes; then dnl We cannot use AC_SEARCH_LIBS here, because on OSF/1 5.1 pthread_join dnl is defined as a macro which expands to __phread_join, and libpthread dnl contains a definition for __phread_join but none for pthread_join. AC_CACHE_CHECK([for library containing pthread_join], [gl_cv_search_pthread_join], [gl_saved_libs="$LIBS" gl_cv_search_pthread_join= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h>]], [[pthread_join (pthread_self (), (void **) 0);]])], [gl_cv_search_pthread_join="none required"]) if test -z "$gl_cv_search_pthread_join"; then LIBS="-lpthread $gl_saved_libs" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h>]], [[pthread_join (pthread_self (), (void **) 0);]])], [gl_cv_search_pthread_join="-lpthread"]) fi LIBS="$gl_saved_libs" ]) if test "$gl_cv_search_pthread_join" != "none required"; then LIB_PTHREAD="$gl_cv_search_pthread_join" fi fi AC_SUBST([LIB_PTHREAD]) AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_PTHREAD_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_PTHREAD_H=1; AC_SUBST([HAVE_PTHREAD_H]) HAVE_PTHREAD_T=1; AC_SUBST([HAVE_PTHREAD_T]) HAVE_PTHREAD_SPINLOCK_T=1; AC_SUBST([HAVE_PTHREAD_SPINLOCK_T]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/pthread_sigmask.m4��������������������������������������������������������0000664�0000000�0000000�00000020637�11671051007�0020431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_sigmask.m4 serial 13 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) LIB_PTHREAD_SIGMASK= 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 -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. dnl If "$gl_threads_api" = pth, we could use the function pth_sigmask, dnl but it is equivalent to sigprocmask, so we choose to emulate dnl pthread_sigmask with sigprocmask also in this case. This yields fewer dnl link dependencies. 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 POSIX:2008 dnl 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 ]) 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: either both empty or both "-lpthread". 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 6.4, HP-UX 11.31, Solaris 9, in programs that are not linked dnl with -lpthread, the pthread_sigmask() function always returns 0 and has dnl no effect. if test -z "$LIB_PTHREAD_SIGMASK"; then 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* | 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 returns 0 and have no effect.]) ;; 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 dnl Here we 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> 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], [:]) 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-20111211-stable/m4/ptsname.m4����������������������������������������������������������������0000664�0000000�0000000�00000001142�11671051007�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ptsname.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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 fi ]) # Prerequisites of lib/ptsname.c. AC_DEFUN([gl_PREREQ_PTSNAME], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ptsname_r.m4��������������������������������������������������������������0000664�0000000�0000000�00000003174�11671051007�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ptsname_r.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 fi fi ]) # Prerequisites of lib/ptsname.c. AC_DEFUN([gl_PREREQ_PTSNAME_R], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/pty.m4��������������������������������������������������������������������0000664�0000000�0000000�00000007404�11671051007�0016075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pty.m4 serial 12 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 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 ]], [[ 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_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 test $ac_cv_have_decl_openpty = yes; then 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 ]], [[ 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 AC_DEFINE([HAVE_OPENPTY], [1], [Define to 1 if the system has the 'openpty' function.]) 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-20111211-stable/m4/pty_h.m4������������������������������������������������������������������0000664�0000000�0000000�00000004202�11671051007�0016375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pty_h.m4 serial 10 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 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 ]], [forkpty openpty]) ]) AC_DEFUN([gl_PTY_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_PTY_H_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]) ]) AC_DEFUN([gl_PTY_H_DEFAULTS], [ GNULIB_FORKPTY=0; AC_SUBST([GNULIB_FORKPTY]) GNULIB_OPENPTY=0; AC_SUBST([GNULIB_OPENPTY]) 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-20111211-stable/m4/putenv.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002273�11671051007�0016601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# putenv.m4 serial 18 dnl Copyright (C) 2002-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_CACHE_CHECK([for putenv compatible with GNU and SVID], [gl_cv_func_svid_putenv], [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],[[ /* 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. gl_cv_func_svid_putenv=no) ]) if test $gl_cv_func_svid_putenv = no; then REPLACE_PUTENV=1 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/pwrite.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005210�11671051007�0016564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pwrite.m4 serial 4 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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> ]], [[ { /* 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; } 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-20111211-stable/m4/quote.m4������������������������������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0016416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# quote.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/quotearg.m4���������������������������������������������������������������0000664�0000000�0000000�00000000474�11671051007�0017110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# quotearg.m4 serial 9 dnl Copyright (C) 2002, 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/raise.m4������������������������������������������������������������������0000664�0000000�0000000�00000001737�11671051007�0016367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# raise.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_REQUIRE([gl_MSVC_INVAL]) AC_CHECK_FUNCS([raise]) if test $ac_cv_func_raise = no; then HAVE_RAISE=0 else 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], [ AC_REQUIRE([AC_C_INLINE]) ]) ���������������������������������gnulib-20111211-stable/m4/random_r.m4���������������������������������������������������������������0000664�0000000�0000000�00000001460�11671051007�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 4 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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 ]]) AC_CHECK_FUNCS([random_r]) if test $ac_cv_func_random_r = no; then HAVE_RANDOM_R=0 fi ]) # Prerequisites of lib/random_r.c. AC_DEFUN([gl_PREREQ_RANDOM_R], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/rawmemchr.m4��������������������������������������������������������������0000664�0000000�0000000�00000001172�11671051007�0017242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rawmemchr.m4 serial 2 dnl Copyright (C) 2003, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/read-file.m4��������������������������������������������������������������0000664�0000000�0000000�00000000552�11671051007�0017106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# read-file.m4 serial 3 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/read.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001564�11671051007�0016175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# read.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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], [ AC_REQUIRE([AC_C_INLINE]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/readdir.m4����������������������������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readdir.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/readline.m4���������������������������������������������������������������0000664�0000000�0000000�00000005327�11671051007�0017046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readline.m4 serial 9 dnl Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 unsecure 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-20111211-stable/m4/readlink.m4���������������������������������������������������������������0000664�0000000�0000000�00000004131�11671051007�0017044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readlink.m4 serial 11 dnl Copyright (C) 2003, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_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_works], [# 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_works=yes], [gl_cv_func_readlink_works=no], [gl_cv_func_readlink_works="guessing no"]) rm -f conftest.link conftest.lnk2]) if test "$gl_cv_func_readlink_works" != yes; then AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink fails to recognize a trailing slash.]) REPLACE_READLINK=1 elif test "$gl_cv_decl_readlink_works" != yes; then REPLACE_READLINK=1 fi 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-20111211-stable/m4/readlinkat.m4�������������������������������������������������������������0000664�0000000�0000000�00000001124�11671051007�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 2 # See if we need to provide readlinkat replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_FUNC_OPENAT]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([readlinkat]) if test $ac_cv_func_readlinkat = no; then HAVE_READLINKAT=0 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/readtokens.m4�������������������������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0017420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readtokens.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/readutmp.m4���������������������������������������������������������������0000664�0000000�0000000�00000005041�11671051007�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readutmp.m4 serial 19 dnl Copyright (C) 2002-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_REQUIRE([AC_C_INLINE]) 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-20111211-stable/m4/realloc.m4����������������������������������������������������������������0000664�0000000�0000000�00000002420�11671051007�0016673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# realloc.m4 serial 12 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_FUNC_REALLOC_GNU # ------------------- # Test whether 'realloc (0, 0)' is handled like in GNU libc, and replace # realloc if it is not. AC_DEFUN([gl_FUNC_REALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl _AC_FUNC_REALLOC_IF is defined in Autoconf. _AC_FUNC_REALLOC_IF( [AC_DEFINE([HAVE_REALLOC_GNU], [1], [Define to 1 if your system has a GNU libc compatible 'realloc' function, and to 0 otherwise.])], [AC_DEFINE([HAVE_REALLOC_GNU], [0]) REPLACE_REALLOC=1 ]) ])# gl_FUNC_REALLOC_GNU # gl_FUNC_REALLOC_POSIX # --------------------- # Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it # fails), and replace realloc if it is not. AC_DEFUN([gl_FUNC_REALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix = yes; then AC_DEFINE([HAVE_REALLOC_POSIX], [1], [Define if the 'realloc' function is POSIX compliant.]) else REPLACE_REALLOC=1 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/regex.m4������������������������������������������������������������������0000664�0000000�0000000�00000022327�11671051007�0016374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 60 # Copyright (C) 1996-2001, 2003-2011 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_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_CACHE_CHECK([for working re_compile_pattern], [gl_cv_func_re_compile_pattern_working], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT[ #include <locale.h> #include <limits.h> #include <regex.h> ]], [[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; /* http://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. */ if (setlocale (LC_ALL, "en_US.UTF-8")) { 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; 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; /* This should fail, but succeeds for glibc-2.5. */ else if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; /* 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; /* 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; /* 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; /* 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; /* This should match, but does not for glibc-2.2.1. */ else if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; /* glibc-2.2.93 does not work with a negative RANGE argument. */ else if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; /* 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; /* Catch a bug reported by Vin Shelton in http://lists.gnu.org/archive/html/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; /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; #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], dnl When crosscompiling, assume it is not working. [gl_cv_func_re_compile_pattern_working=no])]) 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_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_CHECK_HEADERS([libintl.h]) AC_CHECK_FUNCS_ONCE([isblank iswctype wcscoll]) AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/relocatable-lib.m4��������������������������������������������������������0000664�0000000�0000000�00000002745�11671051007�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# relocatable-lib.m4 serial 6 dnl Copyright (C) 2003, 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/relocatable.m4������������������������������������������������������������0000664�0000000�0000000�00000010740�11671051007�0017533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# relocatable.m4 serial 17 dnl Copyright (C) 2003, 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 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. AC_BEFORE([AC_PROG_INSTALL],[gl_RELOCATABLE_BODY]) AC_REQUIRE([AC_LIB_LIBPATH]) AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY]) is_noop=no use_elf_origin_trick=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 ;; linux*) use_elf_origin_trick=yes ;; esac if test $is_noop = yes; then RELOCATABLE_LDFLAGS=: AC_SUBST([RELOCATABLE_LDFLAGS]) else if test $use_elf_origin_trick = 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]) 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]) 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-20111211-stable/m4/remove.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002620�11671051007�0016551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remove.m4 serial 3 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 test "$gl_cv_func_rmdir_works:$gl_cv_func_unlink_works" != yes:yes; 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-20111211-stable/m4/rename.m4�����������������������������������������������������������������0000664�0000000�0000000�00000016355�11671051007�0016535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 25 # Copyright (C) 2001, 2003, 2005-2006, 2009-2011 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 10, 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. [gl_cv_func_rename_slash_dst_works="guessing no"]) rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk ]) if test "x$gl_cv_func_rename_slash_dst_works" != xyes; then 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 10 or NetBSD 1.6.]) fi 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. [gl_cv_func_rename_slash_src_works="guessing no"]) rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk ]) if test "x$gl_cv_func_rename_slash_src_works" != xyes; then 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.]) fi 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 rm -rf conftest.f conftest.f1 if touch conftest.f && ln conftest.f conftest.f1 && set x `ls -i conftest.f conftest.f1` && test "$2" = "$4"; then AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <stdio.h> # include <stdlib.h> # include <unistd.h> ]], [[int result = 0; if (rename ("conftest.f", "conftest.f1")) result |= 1; if (unlink ("conftest.f1")) result |= 2; if (rename ("conftest.f", "conftest.f")) result |= 4; if (rename ("conftest.f1", "conftest.f1") == 0) result |= 8; return result; ]])], [gl_cv_func_rename_link_works=yes], [gl_cv_func_rename_link_works=no], dnl When crosscompiling, assume rename is broken. [gl_cv_func_rename_link_works="guessing no"]) else gl_cv_func_rename_link_works="guessing no" fi rm -rf conftest.f conftest.f1 else gl_cv_func_rename_link_works=yes fi ]) if test "x$gl_cv_func_rename_link_works" != xyes; then 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.]) fi 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. [gl_cv_func_rename_dest_works="guessing no"]) rm -rf conftest.f conftest.d1 conftest.d2 ]) if test "x$gl_cv_func_rename_dest_works" != xyes; then 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.]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/renameat.m4���������������������������������������������������������������0000664�0000000�0000000�00000001353�11671051007�0017052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 3 # See if we need to provide renameat replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_FUNCS_ONCE([renameat]) 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-20111211-stable/m4/rewinddir.m4��������������������������������������������������������������0000664�0000000�0000000�00000000675�11671051007�0017253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rewinddir.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/rint.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001505�11671051007�0016231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rint.m4 serial 4 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/rintf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001063�11671051007�0016376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rintf.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 Determine RINTF_LIBM. gl_MATHFUNC([rintf], [float], [(float)]) if test $gl_cv_func_rintf_no_libm = no \ && test $gl_cv_func_rintf_in_libm = no; then HAVE_RINTF=0 RINTF_LIBM= fi AC_SUBST([RINTF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/rintl.m4������������������������������������������������������������������0000664�0000000�0000000�00000001443�11671051007�0016406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rintl.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 Determine RINTL_LIBM. gl_MATHFUNC([rintl], [long double], [(long double)]) if test $gl_cv_func_rintl_no_libm = no \ && test $gl_cv_func_rintl_in_libm = no; then HAVE_RINTL=0 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-20111211-stable/m4/rmdir-errno.m4������������������������������������������������������������0000664�0000000�0000000�00000003270�11671051007�0017516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 # Copyright (C) 2000-2001, 2005-2006, 2009-2011 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_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 int main () { FILE *s; int val; rmdir ("confdir2"); val = errno; s = fopen ("confdir2/errno", "w"); fprintf (s, "%d\n", val); 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'], [gl_cv_func_rmdir_errno_not_empty=ENOTEMPTY] ) ] ) 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-20111211-stable/m4/rmdir.m4������������������������������������������������������������������0000664�0000000�0000000�00000002343�11671051007�0016373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rmdir.m4 serial 12 dnl Copyright (C) 2002, 2005, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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 ]], [[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], [gl_cv_func_rmdir_works="guessing no"]) rm -rf conftest.dir conftest.file]) if test x"$gl_cv_func_rmdir_works" != xyes; then REPLACE_RMDIR=1 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/round-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001116�11671051007�0017307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# round-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/round.m4������������������������������������������������������������������0000664�0000000�0000000�00000007434�11671051007�0016413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# round.m4 serial 13 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) AC_CHECK_DECLS([round], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_round" = yes; then gl_CHECK_MATH_LIB([ROUND_LIBM], [x = round (x);]) if test "$ROUND_LIBM" != missing; then 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> 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; exit (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";; *) gl_cv_func_round_works="guessing yes";; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_round_works" in *no) ROUND_LIBM=missing ;; esac fi if test "$ROUND_LIBM" = missing; then REPLACE_ROUND=1 fi m4_ifdef([gl_FUNC_ROUND_IEEE], [ if test $gl_round_required = ieee && test $REPLACE_ROUND = 0; then 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> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ static double dummy (double f) { return 0; } int main (int argc, char *argv[]) { double (*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], [gl_cv_func_round_ieee="guessing no"]) LIBS="$save_LIBS" ]) case "$gl_cv_func_round_ieee" in *yes) ;; *) REPLACE_ROUND=1 ;; esac fi ]) else HAVE_DECL_ROUND=0 fi if test $HAVE_DECL_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-20111211-stable/m4/roundf-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001124�11671051007�0017454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# roundf-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/roundf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000010475�11671051007�0016560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# roundf.m4 serial 14 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) AC_CHECK_DECLS([roundf], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_roundf" = yes; then gl_CHECK_MATH_LIB([ROUNDF_LIBM], [x = roundf (x);]) if test "$ROUNDF_LIBM" != missing; then 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> 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; exit (x < 0.5f && roundf (x) != 0.0f); }]])], [gl_cv_func_roundf_works=yes], [gl_cv_func_roundf_works=no], [case "$host_os" in mingw*) 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) ROUNDF_LIBM=missing ;; esac fi if test "$ROUNDF_LIBM" = missing; then REPLACE_ROUNDF=1 fi m4_ifdef([gl_FUNC_ROUNDF_IEEE], [ if test $gl_roundf_required = ieee && test $REPLACE_ROUNDF = 0; then 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> ]gl_FLOAT_MINUS_ZERO_CODE[ ]gl_FLOAT_SIGNBIT_CODE[ static float dummy (float f) { return 0; } int main (int argc, char *argv[]) { float (*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], [gl_cv_func_roundf_ieee="guessing no"]) LIBS="$save_LIBS" ]) case "$gl_cv_func_roundf_ieee" in *yes) ;; *) REPLACE_ROUNDF=1 ;; esac fi ]) else HAVE_DECL_ROUNDF=0 fi if test $HAVE_DECL_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-20111211-stable/m4/roundl-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001124�11671051007�0017462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# roundl-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/roundl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000006463�11671051007�0016570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# roundl.m4 serial 13 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) AC_CHECK_DECLS([roundl], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_roundl" = yes; then gl_CHECK_MATH_LIB([ROUNDL_LIBM], [x = roundl (x);]) if test "$ROUNDL_LIBM" = missing; then REPLACE_ROUNDL=1 fi m4_ifdef([gl_FUNC_ROUNDL_IEEE], [ if test $gl_roundl_required = ieee && test $REPLACE_ROUNDL = 0; then 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> ]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 (*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], [gl_cv_func_roundl_ieee="guessing no"]) LIBS="$save_LIBS" ]) case "$gl_cv_func_roundl_ieee" in *yes) ;; *) REPLACE_ROUNDL=1 ;; esac fi ]) else HAVE_DECL_ROUNDL=0 fi if test $HAVE_DECL_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-20111211-stable/m4/rpmatch.m4����������������������������������������������������������������0000664�0000000�0000000�00000002040�11671051007�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rpmatch.m4 serial 10 dnl Copyright (C) 2002-2003, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/safe-alloc.m4�������������������������������������������������������������0000664�0000000�0000000�00000000472�11671051007�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# safe-alloc.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/safe-read.m4��������������������������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0017103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# safe-read.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/safe-write.m4�������������������������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0017320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# safe-write.m4 serial 4 dnl Copyright (C) 2002, 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/same.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0016206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 9 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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([pathconf]) ]) �������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/save-cwd.m4���������������������������������������������������������������0000664�0000000�0000000�00000000570�11671051007�0016767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/savedir.m4����������������������������������������������������������������0000664�0000000�0000000�00000000517�11671051007�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# savedir.m4 serial 10 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/savewd.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Save and restore the working directory, possibly using a child process. dnl Copyright (C) 2004, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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], [AC_REQUIRE([AC_C_INLINE])]) ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/scandir.m4����������������������������������������������������������������0000664�0000000�0000000�00000001152�11671051007�0016676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# scandir.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/sched_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0016655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sched_h.m4 serial 6 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_SCHED_H], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <sched.h> struct sched_param a; int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER }; pid_t t1; ]])], [SCHED_H=''], [SCHED_H='sched.h' gl_CHECK_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]) AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0], [#include <sched.h>]) AC_SUBST([HAVE_STRUCT_SCHED_PARAM]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) ]) AC_SUBST([SCHED_H]) AM_CONDITIONAL([GL_GENERATE_SCHED_H], [test -n "$SCHED_H"]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/search_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000002365�11671051007�0017036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# search_h.m4 serial 8 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([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]) 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_DEFUN([gl_SEARCH_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SEARCH_H_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]) ]) AC_DEFUN([gl_SEARCH_H_DEFAULTS], [ GNULIB_TSEARCH=0; AC_SUBST([GNULIB_TSEARCH]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_TSEARCH=1; AC_SUBST([HAVE_TSEARCH]) REPLACE_TSEARCH=0; AC_SUBST([REPLACE_TSEARCH]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/select.m4�����������������������������������������������������������������0000664�0000000�0000000�00000004177�11671051007�0016544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# select.m4 serial 6 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_SYS_SELECT]) 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 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-20111211-stable/m4/selinux-context-h.m4������������������������������������������������������0000664�0000000�0000000�00000001412�11671051007�0020650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 3 -*- Autoconf -*- # Copyright (C) 2006-2007, 2009-2011 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-20111211-stable/m4/selinux-selinux-h.m4������������������������������������������������������0000664�0000000�0000000�00000004731�11671051007�0020662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 -*- Autoconf -*- # Copyright (C) 2006-2007, 2009-2011 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 && 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 ]) ���������������������������������������gnulib-20111211-stable/m4/servent.m4����������������������������������������������������������������0000664�0000000�0000000�00000003362�11671051007�0016746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# servent.m4 serial 2 dnl Copyright (C) 2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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, 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_HEADER_SYS_SOCKET])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-20111211-stable/m4/setenv.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007654�11671051007�0016574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setenv.m4 serial 25 dnl Copyright (C) 2001-2004, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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], [gl_cv_func_setenv_works="guessing no"])]) if test "$gl_cv_func_setenv_works" != yes; then REPLACE_SETENV=1 fi 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_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; ]], [[ 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], [gl_cv_func_unsetenv_works="guessing no"])]) if test "$gl_cv_func_unsetenv_works" != yes; then REPLACE_UNSETENV=1 fi 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-20111211-stable/m4/setlocale.m4��������������������������������������������������������������0000664�0000000�0000000�00000001536�11671051007�0017234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setlocale.m4 serial 4 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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([AC_CANONICAL_HOST]) 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*) REPLACE_SETLOCALE=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.*) REPLACE_SETLOCALE=1 ;; esac ;; esac ]) # Prerequisites of lib/setlocale.c. AC_DEFUN([gl_PREREQ_SETLOCALE], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/settime.m4����������������������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0016731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# settime.m4 serial 7 dnl Copyright (C) 2002, 2004-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/sha1.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0016114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sha1.m4 serial 10 dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) AC_REQUIRE([AC_C_INLINE]) : ]) ����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sha256.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000622�11671051007�0016264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sha256.m4 serial 5 dnl Copyright (C) 2005, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) AC_REQUIRE([AC_C_INLINE]) ]) ��������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sha512.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0016264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sha512.m4 serial 6 dnl Copyright (C) 2005-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) AC_REQUIRE([AC_C_INLINE]) ]) ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sig2str.m4����������������������������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 7 dnl Copyright (C) 2002, 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/sig_atomic_t.m4�����������������������������������������������������������0000664�0000000�0000000�00000001103�11671051007�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sig_atomic_t.m4 serial 2 dnl Copyright (C) 2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation 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 asynchnonous signals.])], [#include <signal.h>]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sigaction.m4��������������������������������������������������������������0000664�0000000�0000000�00000002361�11671051007�0017236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigaction.m4 serial 6 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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], [ AC_REQUIRE([AC_C_INLINE]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/signal_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000006042�11671051007�0017042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signal_h.m4 serial 18 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([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_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 ]) AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SIGNAL_H_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]) ]) AC_DEFUN([gl_SIGNAL_H_DEFAULTS], [ GNULIB_PTHREAD_SIGMASK=0; AC_SUBST([GNULIB_PTHREAD_SIGMASK]) GNULIB_RAISE=0; AC_SUBST([GNULIB_RAISE]) GNULIB_SIGNAL_H_SIGPIPE=0; AC_SUBST([GNULIB_SIGNAL_H_SIGPIPE]) GNULIB_SIGPROCMASK=0; AC_SUBST([GNULIB_SIGPROCMASK]) GNULIB_SIGACTION=0; AC_SUBST([GNULIB_SIGACTION]) 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-20111211-stable/m4/signalblocking.m4���������������������������������������������������������0000664�0000000�0000000�00000001675�11671051007�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signalblocking.m4 serial 13 dnl Copyright (C) 2001-2002, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) if test $gl_cv_type_sigset_t = yes; then AC_CHECK_FUNC([sigprocmask], [gl_cv_func_sigprocmask=1]) fi if test -z "$gl_cv_func_sigprocmask"; then HAVE_POSIX_SIGNALBLOCKING=0 fi ]) # Prerequisites of lib/sigprocmask.c. AC_DEFUN([gl_PREREQ_SIGPROCMASK], [ AC_REQUIRE([AC_C_INLINE]) ]) �������������������������������������������������������������������gnulib-20111211-stable/m4/signbit.m4����������������������������������������������������������������0000664�0000000�0000000�00000025522�11671051007�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signbit.m4 serial 11 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_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], [gl_cv_func_signbit="guessing no"]) ]) dnl GCC 4.0 and newer provides 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_gcc], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #if __GNUC__ >= 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_gcc=yes], [gl_cv_func_signbit_gcc=no], [gl_cv_func_signbit_gcc="guessing no"]) ]) dnl Use the compiler built-ins whenever possible, because they are more dnl efficient than the system library functions (if they exist). if test "$gl_cv_func_signbit_gcc" = yes; then REPLACE_SIGNBIT_USING_GCC=1 else if test "$gl_cv_func_signbit" != yes; then dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built. REPLACE_SIGNBIT=1 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 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 MacOS 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"); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); 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"); 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-20111211-stable/m4/sigpipe.m4����������������������������������������������������������������0000664�0000000�0000000�00000001605�11671051007�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigpipe.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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-20111211-stable/m4/sin.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0016051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sin.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/sinf.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001306�11671051007�0016213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sinf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 SINF_LIBM="$SIN_LIBM" fi AC_SUBST([SINF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sinh.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0016216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sinh.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/sinhf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0016364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sinhf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 SINHF_LIBM="$SINH_LIBM" fi AC_SUBST([SINHF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sinl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000005500�11671051007�0016221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sinl.m4 serial 6 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[return 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 x;]], [[return 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 MacOS 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-20111211-stable/m4/size_max.m4���������������������������������������������������������������0000664�0000000�0000000�00000005770�11671051007�0017104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# size_max.m4 serial 10 dnl Copyright (C) 2003, 2005-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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= 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 -z "$gl_cv_size_max"; 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]) ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) ��������gnulib-20111211-stable/m4/sleep.m4������������������������������������������������������������������0000664�0000000�0000000�00000003356�11671051007�0016373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sleep.m4 serial 6 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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], [gl_cv_func_sleep_works="guessing no"])]) if test "$gl_cv_func_sleep_works" != yes; then REPLACE_SLEEP=1 fi fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/snprintf-posix.m4���������������������������������������������������������0000664�0000000�0000000�00000014010�11671051007�0020253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# snprintf-posix.m4 serial 14 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/snprintf.m4���������������������������������������������������������������0000664�0000000�0000000�00000003055�11671051007�0017122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# snprintf.m4 serial 6 dnl Copyright (C) 2002-2004, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 fi gl_PREREQ_SNPRINTF ]) # Prerequisites of lib/snprintf.c. AC_DEFUN([gl_PREREQ_SNPRINTF], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/socketlib.m4��������������������������������������������������������������0000664�0000000�0000000�00000005244�11671051007�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# socketlib.m4 serial 1 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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). AC_CACHE_CHECK([if we need to call WSAStartup in winsock2.h and -lws2_32], [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. 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-20111211-stable/m4/sockets.m4����������������������������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0016733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sockets.m4 serial 7 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/socklen.m4����������������������������������������������������������������0000664�0000000�0000000�00000006236�11671051007�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# socklen.m4 serial 10 dnl Copyright (C) 2005-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_MSG_CHECKING([for socklen_t equivalent]) AC_CACHE_VAL([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_MSG_RESULT([$gl_cv_socklen_t_equiv]) 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-20111211-stable/m4/sockpfaf.m4���������������������������������������������������������������0000664�0000000�0000000�00000005226�11671051007�0017055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sockpfaf.m4 serial 8 dnl Copyright (C) 2004, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_HEADER_SYS_SOCKET]) AC_CHECK_HEADERS_ONCE([netinet/in.h]) AC_MSG_CHECKING([for IPv4 sockets]) AC_CACHE_VAL([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)]) AC_MSG_RESULT([$gl_cv_socket_ipv4]) 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_MSG_CHECKING([for IPv6 sockets]) AC_CACHE_VAL([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)]) AC_MSG_RESULT([$gl_cv_socket_ipv6]) 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_HEADER_SYS_SOCKET]) AC_CHECK_HEADERS_ONCE([sys/un.h]) AC_MSG_CHECKING([for UNIX domain sockets]) AC_CACHE_VAL([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)]) AC_MSG_RESULT([$gl_cv_socket_unix]) 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-20111211-stable/m4/spawn-pipe.m4�������������������������������������������������������������0000664�0000000�0000000�00000000640�11671051007�0017337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# spawn-pipe.m4 serial 1 dnl Copyright (C) 2004, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_C_INLINE]) AC_REQUIRE([AC_TYPE_MODE_T]) ]) ������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/spawn_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000012003�11671051007�0016707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# spawn_h.m4 serial 15 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_SPAWN_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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]) ]) 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 Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([posix_spawn]) if test $ac_cv_func_posix_spawn != yes; then HAVE_POSIX_SPAWN=0 fi ]) AC_DEFUN([gl_SPAWN_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SPAWN_H_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]) ]) AC_DEFUN([gl_SPAWN_H_DEFAULTS], [ GNULIB_POSIX_SPAWN=0; AC_SUBST([GNULIB_POSIX_SPAWN]) GNULIB_POSIX_SPAWNP=0; AC_SUBST([GNULIB_POSIX_SPAWNP]) GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT]) GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY]) GNULIB_POSIX_SPAWNATTR_INIT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_INIT]) GNULIB_POSIX_SPAWNATTR_GETFLAGS=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETFLAGS]) GNULIB_POSIX_SPAWNATTR_SETFLAGS=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETFLAGS]) GNULIB_POSIX_SPAWNATTR_GETPGROUP=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETPGROUP]) GNULIB_POSIX_SPAWNATTR_SETPGROUP=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETPGROUP]) GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM]) GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM]) GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY]) GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY]) GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT]) GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT]) GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGMASK]) GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGMASK]) GNULIB_POSIX_SPAWNATTR_DESTROY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_DESTROY]) 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]) REPLACE_POSIX_SPAWN=0; AC_SUBST([REPLACE_POSIX_SPAWN]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sprintf-posix.m4����������������������������������������������������������0000664�0000000�0000000�00000010233�11671051007�0020100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sprintf-posix.m4 serial 12 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/sqrt.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0016245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sqrt.m4 serial 3 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/sqrtf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0016414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sqrtf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 SQRTF_LIBM="$SQRT_LIBM" fi AC_SUBST([SQRTF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sqrtl.m4������������������������������������������������������������������0000664�0000000�0000000�00000006065�11671051007�0016430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sqrtl.m4 serial 6 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[return 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 x;]], [[return 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 MacOS 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>]]) else HAVE_DECL_SQRTL=0 HAVE_SQRTL=0 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]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ssize_t.m4����������������������������������������������������������������0000664�0000000�0000000�00000001463�11671051007�0016740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/st_dm_mode.m4�������������������������������������������������������������0000664�0000000�0000000�00000001455�11671051007�0017373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 6 # Copyright (C) 1998-1999, 2001, 2009-2011 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. # Define HAVE_ST_DM_MODE if struct stat has an st_dm_mode member. AC_DEFUN([AC_STRUCT_ST_DM_MODE], [AC_CACHE_CHECK([for st_dm_mode in struct stat], [ac_cv_struct_st_dm_mode], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/stat.h>]], [[struct stat s; s.st_dm_mode;]])], [ac_cv_struct_st_dm_mode=yes], [ac_cv_struct_st_dm_mode=no])]) if test $ac_cv_struct_st_dm_mode = yes; then AC_DEFINE([HAVE_ST_DM_MODE], [1], [Define if struct stat has an st_dm_mode member. ]) fi ] ) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/stat-macros.m4������������������������������������������������������������0000664�0000000�0000000�00000000515�11671051007�0017512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 3 # Copyright (C) 2005-2006, 2009-2011 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_MACROS], [ AC_REQUIRE([AC_HEADER_STAT]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/stat-size.m4��������������������������������������������������������������0000664�0000000�0000000�00000000721�11671051007�0017177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 1 # Copyright (C) 2011 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 # http://lists.gnu.org/archive/html/bug-gnulib/2011-06/msg00051.html AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) �����������������������������������������������gnulib-20111211-stable/m4/stat-time.m4��������������������������������������������������������������0000664�0000000�0000000�00000006147�11671051007�0017173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Checks for stat-related time functions. # Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2011 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([AC_C_INLINE]) 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([AC_C_INLINE]) 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-20111211-stable/m4/stat.m4�������������������������������������������������������������������0000664�0000000�0000000�00000004544�11671051007�0016236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 8 # Copyright (C) 2009-2011 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]) dnl for cross-compiles AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) dnl mingw is the only known platform where stat(".") and stat("./") differ AC_CACHE_CHECK([whether stat handles trailing slashes on directories], [gl_cv_func_stat_dir_slash], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/stat.h> ]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])], [gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no], [case $host_os in mingw*) gl_cv_func_stat_dir_slash="guessing no";; *) gl_cv_func_stat_dir_slash="guessing yes";; esac])]) dnl AIX 7.1, Solaris 9 mistakenly succeed on stat("file/") 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], [gl_cv_func_stat_file_slash="guessing no"]) rm -f conftest.tmp conftest.lnk]) case $gl_cv_func_stat_dir_slash in *no) REPLACE_STAT=1 AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs help when passed a directory name with a trailing slash]);; esac 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 ]) # Prerequisites of lib/stat.c. AC_DEFUN([gl_PREREQ_STAT], [ AC_REQUIRE([AC_C_INLINE]) : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/stdalign.m4���������������������������������������������������������������0000664�0000000�0000000�00000002267�11671051007�0017070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for stdalign.h that conforms to C1x. dnl Copyright 2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 <stdalign.h> int align_int = alignof (int) + _Alignof (double); /* Test _Alignas only on platforms where gnulib can help. */ #if \ (__GNUC__ || __IBMC__ || __IBMCPP__ \ || 0x5110 <= __SUNPRO_C || 1300 <= _MSC_VER) int alignas (8) alignas_int = 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-20111211-stable/m4/stdarg.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005404�11671051007�0016543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdarg.m4 serial 6 dnl Copyright (C) 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_MSG_CHECKING([for va_copy]) AC_CACHE_VAL([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])]) AC_MSG_RESULT([$gl_cv_func_va_copy]) 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-20111211-stable/m4/stdbool.m4����������������������������������������������������������������0000664�0000000�0000000�00000006371�11671051007�0016731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for stdbool.h that conforms to C99. dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 5 # Prepare for substituting <stdbool.h> if it is not supported. AC_DEFUN([AM_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' 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> #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 struct s { _Bool s: 1; _Bool t; } 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 http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; ]], [[ bool e = &s; *pq |= q; *pq |= ! 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); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) AC_CHECK_TYPES([_Bool]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/stddef_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000002755�11671051007�0017045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues. # stddef_h.m4 serial 4 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) STDDEF_H= 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 ]) AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) �������������������gnulib-20111211-stable/m4/stdint.m4�����������������������������������������������������������������0000664�0000000�0000000�00000037446�11671051007�0016577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint.m4 serial 41 dnl Copyright (C) 2001-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl dnl Check for long long int and unsigned long long int. AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) if test $ac_cv_type_long_long_int = yes; then HAVE_LONG_LONG_INT=1 else HAVE_LONG_LONG_INT=0 fi AC_SUBST([HAVE_LONG_LONG_INT]) AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) if test $ac_cv_type_unsigned_long_long_int = yes; then HAVE_UNSIGNED_LONG_LONG_INT=1 else HAVE_UNSIGNED_LONG_LONG_INT=0 fi AC_SUBST([HAVE_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>. dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_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>. dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_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 __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #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; #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. */ 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 __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #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], [], [dnl When cross-compiling, assume it works. gl_cv_header_working_stdint_h=yes ]) ]) ]) fi if test "$gl_cv_header_working_stdint_h" = yes; then STDINT_H= else 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 else HAVE_SYS_INTTYPES_H=0 fi AC_SUBST([HAVE_SYS_INTTYPES_H]) if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 else HAVE_SYS_BITYPES_H=0 fi AC_SUBST([HAVE_SYS_BITYPES_H]) gl_STDINT_TYPE_PROPERTIES STDINT_H=stdint.h fi 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], [[ /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <stdio.h> # include <time.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 $BITSIZEOF_WINT_T -lt 32; then BITSIZEOF_WINT_T=32 fi ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) # Hey Emacs! # Local Variables: # indent-tabs-mode: nil # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/stdint_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000001743�11671051007�0017075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint_h.m4 serial 9 dnl Copyright (C) 1997-2004, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/stdio_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000022457�11671051007�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdio_h.m4 serial 40 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDIO_H], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_C_INLINE]) gl_NEXT_HEADERS([stdio.h]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. GNULIB_FSCANF=1 GNULIB_SCANF=1 GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_GETS=1 GNULIB_FREAD=1 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 No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 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 C89. gl_WARN_ON_USE_PREPARE([[#include <stdio.h> ]], [dprintf fpurge fseeko ftello getdelim getline pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) ]) AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDIO_H_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]) ]) AC_DEFUN([gl_STDIO_H_DEFAULTS], [ GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) GNULIB_GETS=0; AC_SUBST([GNULIB_GETS]) GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) dnl Assume proper GNU behavior unless another module says otherwise. 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-20111211-stable/m4/stdlib_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000012272�11671051007�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdlib_h.m4 serial 39 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([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 # include <sys/loadavg.h> #endif #if HAVE_RANDOM_H # include <random.h> #endif ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps posix_openpt ptsname ptsname_r random_r realpath rpmatch setenv setstate_r srandom_r strtod strtoll strtoull unlockpt unsetenv]) ]) AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDLIB_H_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]) ]) AC_DEFUN([gl_STDLIB_H_DEFAULTS], [ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT]) GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME]) GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT]) GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC]) GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP]) GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS]) GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS]) GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT]) GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R]) GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) 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_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) 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_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/stpcpy.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001316�11671051007�0016577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stpcpy.m4 serial 8 dnl Copyright (C) 2002, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/stpncpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000005234�11671051007�0016760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stpncpy.m4 serial 15 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2011 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], [ 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_HEADER_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], [AC_EGREP_CPP([Thanks for using GNU], [ #include <features.h> #ifdef __GNU_LIBRARY__ Thanks for using GNU #endif ], [gl_cv_func_stpncpy=yes], [gl_cv_func_stpncpy=no]) ]) ]) if test $gl_cv_func_stpncpy = yes; then AC_DEFINE([HAVE_STPNCPY], [1], [Define if you have the stpncpy() function and it works.]) else REPLACE_STPNCPY=1 fi else HAVE_STPNCPY=0 fi ]) # Prerequisites of lib/stpncpy.c. AC_DEFUN([gl_PREREQ_STPNCPY], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strcase.m4����������������������������������������������������������������0000664�0000000�0000000�00000002012�11671051007�0016713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcase.m4 serial 11 dnl Copyright (C) 2002, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_HEADER_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_HEADER_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-20111211-stable/m4/strcasestr.m4�������������������������������������������������������������0000664�0000000�0000000�00000010450�11671051007�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcasestr.m4 serial 20 dnl Copyright (C) 2005, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_HEADER_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 "$gl_cv_func_memchr_works" != yes; then REPLACE_STRCASESTR=1 else dnl Detect http://sourceware.org/bugzilla/show_bug.cgi?id=12092. AC_CACHE_CHECK([whether strcasestr works], [gl_cv_func_strcasestr_works_always], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> /* for strcasestr */ #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], [ #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=yes], [gl_cv_func_strcasestr_works_always="guessing no"]) ]) ]) if test "$gl_cv_func_strcasestr_works_always" != yes; then REPLACE_STRCASESTR=1 fi 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; } 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=yes], [gl_cv_func_strcasestr_linear="guessing no"]) ]) ]) if test "$gl_cv_func_strcasestr_linear" != yes; then REPLACE_STRCASESTR=1 fi fi ]) # gl_FUNC_STRCASESTR # Prerequisites of lib/strcasestr.c. AC_DEFUN([gl_PREREQ_STRCASESTR], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strchrnul.m4��������������������������������������������������������������0000664�0000000�0000000�00000002766�11671051007�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strchrnul.m4 serial 9 dnl Copyright (C) 2003, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/strcspn.m4����������������������������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0016752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcspn.m4 serial 4 dnl Copyright (C) 2002-2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/strdup.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001657�11671051007�0016606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strdup.m4 serial 13 dnl Copyright (C) 2002-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_STRING_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([strdup]) 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_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) AC_CHECK_FUNCS_ONCE([strdup]) if test $ac_cv_func_strdup = yes; then if test $gl_cv_func_malloc_posix != yes; then REPLACE_STRDUP=1 fi 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-20111211-stable/m4/strerror.m4���������������������������������������������������������������0000664�0000000�0000000�00000005230�11671051007�0017136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror.m4 serial 16 dnl Copyright (C) 2002, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) 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], [dnl Be pessimistic on cross-compiles for now. gl_cv_func_working_strerror="guessing no"]) ]) if test "$gl_cv_func_working_strerror" != yes; then dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 fi 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], [ 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], [dnl Be pessimistic on cross-compiles for now. gl_cv_func_strerror_0_works="guessing no"]) ]) if test "$gl_cv_func_strerror_0_works" != yes; then REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strerror_r.m4�������������������������������������������������������������0000664�0000000�0000000�00000015066�11671051007�0017467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror_r.m4 serial 14 dnl Copyright (C) 2002, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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 MacOS 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="guessing no" ]) ]) fi fi fi fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strftime.m4���������������������������������������������������������������0000664�0000000�0000000�00000001345�11671051007�0017114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 33 # Copyright (C) 1996-1997, 1999-2007, 2009-2011 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], [ gl_FUNC_STRFTIME ]) # These are the prerequisite macros for GNU's strftime.c replacement. AC_DEFUN([gl_FUNC_STRFTIME], [ # This defines (or not) HAVE_TZNAME and HAVE_TM_ZONE. AC_REQUIRE([AC_STRUCT_TIMEZONE]) AC_REQUIRE([gl_TM_GMTOFF]) AC_CHECK_FUNCS_ONCE([tzset]) AC_DEFINE([my_strftime], [nstrftime], [Define to the name of the strftime replacement function.]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/string_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000012714�11671051007�0017076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a GNU-like replacement for <string.h>. # Copyright (C) 2007-2011 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 21 # Written by Paul Eggert. AC_DEFUN([gl_HEADER_STRING_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_STRING_H_BODY]) ]) AC_DEFUN([gl_HEADER_STRING_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_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 strsignal strverscmp]) ]) AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_STRING_H_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]) ]) AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], [ GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) 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_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) ����������������������������������������������������gnulib-20111211-stable/m4/strings_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000003163�11671051007�0017257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <strings.h>. # serial 6 # Copyright (C) 2007, 2009-2011 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_STRINGS_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_STRINGS_H_BODY]) ]) AC_DEFUN([gl_HEADER_STRINGS_H_BODY], [ AC_REQUIRE([gl_HEADER_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]) ]) AC_DEFUN([gl_STRINGS_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_HEADER_STRINGS_H_DEFAULTS], [ GNULIB_FFS=0; AC_SUBST([GNULIB_FFS]) 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-20111211-stable/m4/strncat.m4����������������������������������������������������������������0000664�0000000�0000000�00000005470�11671051007�0016740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strncat.m4 serial 2 dnl Copyright (C) 2002-2004, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation 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_HEADER_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: 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 ]], [[ 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 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-20111211-stable/m4/strndup.m4����������������������������������������������������������������0000664�0000000�0000000�00000003222�11671051007�0016752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strndup.m4 serial 20 dnl Copyright (C) 2002-2003, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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>]], [[ #ifndef HAVE_DECL_STRNDUP extern #ifdef __cplusplus "C" #endif char *strndup (const char *, size_t); #endif char *s; s = strndup ("some longer string", 15); free (s); s = strndup ("shorter string", 13); return s[13] != '\0';]])], [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-20111211-stable/m4/strnlen.m4����������������������������������������������������������������0000664�0000000�0000000�00000001561�11671051007�0016744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strnlen.m4 serial 13 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2011 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_HEADER_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-20111211-stable/m4/strpbrk.m4����������������������������������������������������������������0000664�0000000�0000000�00000001025�11671051007�0016741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strpbrk.m4 serial 6 dnl Copyright (C) 2002-2003, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/strptime.m4���������������������������������������������������������������0000664�0000000�0000000�00000001125�11671051007�0017122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strptime.m4 serial 7 dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/strsep.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001320�11671051007�0016570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strsep.m4 serial 10 dnl Copyright (C) 2002-2004, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/strsignal.m4��������������������������������������������������������������0000664�0000000�0000000�00000003712�11671051007�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strsignal.m4 serial 8 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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_REQUIRE([AC_DECL_SYS_SIGLIST]) AC_CHECK_DECLS([_sys_siglist], [], [], [[#include <signal.h>]]) ]) ������������������������������������������������������gnulib-20111211-stable/m4/strstr.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007634�11671051007�0016627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strstr.m4 serial 15 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MEMCHR]) if test "$gl_cv_func_memchr_works" != yes; then REPLACE_STRSTR=1 else dnl Detect http://sourceware.org/bugzilla/show_bug.cgi?id=12092. AC_CACHE_CHECK([whether strstr works], [gl_cv_func_strstr_works_always], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> /* for strstr */ #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], [ #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=yes], [gl_cv_func_strstr_works_always="guessing no"]) ]) ]) if test "$gl_cv_func_strstr_works_always" != yes; then REPLACE_STRSTR=1 fi 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([[ #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; } 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=yes], [gl_cv_func_strstr_linear="guessing no"]) ]) ]) if test "$gl_cv_func_strstr_linear" != yes; then REPLACE_STRSTR=1 fi fi ]) # gl_FUNC_STRSTR ����������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strtod-obsolete.m4��������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtod-obsolete.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/strtod.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007505�11671051007�0016602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtod.m4 serial 21 dnl Copyright (C) 2002-2003, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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=yes], [gl_cv_func_strtod_works="guessing no"])])]) if test "$gl_cv_func_strtod_works" != yes; then REPLACE_STRTOD=1 fi 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 ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strtoimax.m4��������������������������������������������������������������0000664�0000000�0000000�00000001337�11671051007�0017312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoimax.m4 serial 11 dnl Copyright (C) 2002-2004, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 ]) # Prerequisites of lib/strtoimax.c. AC_DEFUN([gl_PREREQ_STRTOIMAX], [ AC_CHECK_DECLS([strtoll]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strtok_r.m4���������������������������������������������������������������0000664�0000000�0000000�00000004757�11671051007�0017140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtok_r.m4 serial 13 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2011 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_HEADER_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 <http://sources.redhat.com/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], [ changequote(,)dnl case "$host_os" in # Guess no on glibc systems. *-gnu*) gl_cv_func_strtok_r_works="guessing no";; *) gl_cv_func_strtok_r_works="guessing yes";; esac changequote([,])dnl ]) ]) 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-20111211-stable/m4/strtol.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000537�11671051007�0016610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtol.m4 serial 6 dnl Copyright (C) 2002-2003, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_CHECK_FUNCS([strtol]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strtoll.m4����������������������������������������������������������������0000664�0000000�0000000�00000001346�11671051007�0016763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoll.m4 serial 7 dnl Copyright (C) 2002, 2004, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) dnl We don't need (and can't compile) the replacement strtoll dnl unless the type 'long long int' exists. AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) if test "$ac_cv_type_long_long_int" = yes; then AC_CHECK_FUNCS([strtoll]) if test $ac_cv_func_strtoll = no; then HAVE_STRTOLL=0 fi fi ]) # Prerequisites of lib/strtoll.c. AC_DEFUN([gl_PREREQ_STRTOLL], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strtoul.m4����������������������������������������������������������������0000664�0000000�0000000�00000000535�11671051007�0016773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoul.m4 serial 5 dnl Copyright (C) 2002, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_CHECK_FUNCS([strtoul]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strtoull.m4���������������������������������������������������������������0000664�0000000�0000000�00000001411�11671051007�0017141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoull.m4 serial 7 dnl Copyright (C) 2002, 2004, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) dnl We don't need (and can't compile) the replacement strtoull dnl unless the type 'unsigned long long int' exists. AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) if test "$ac_cv_type_unsigned_long_long_int" = yes; then AC_CHECK_FUNCS([strtoull]) if test $ac_cv_func_strtoull = no; then HAVE_STRTOULL=0 fi fi ]) # Prerequisites of lib/strtoull.c. AC_DEFUN([gl_PREREQ_STRTOULL], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strtoumax.m4��������������������������������������������������������������0000664�0000000�0000000�00000001351�11671051007�0017322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtoumax.m4 serial 11 dnl Copyright (C) 2002-2004, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 HAVE_DECL_STRTOUMAX=0 fi ]) # Prerequisites of lib/strtoumax.c. AC_DEFUN([gl_PREREQ_STRTOUMAX], [ AC_CHECK_DECLS([strtoull]) AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/strverscmp.m4�������������������������������������������������������������0000664�0000000�0000000�00000001206�11671051007�0017463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strverscmp.m4 serial 8 dnl Copyright (C) 2002, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_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-20111211-stable/m4/symlink.m4����������������������������������������������������������������0000664�0000000�0000000�00000002770�11671051007�0016750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # See if we need to provide symlink replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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], [gl_cv_func_symlink_works="guessing no"]) rm -f conftest.f conftest.link conftest.lnk2]) if test "$gl_cv_func_symlink_works" != yes; then REPLACE_SYMLINK=1 fi fi ]) ��������gnulib-20111211-stable/m4/symlinkat.m4��������������������������������������������������������������0000664�0000000�0000000�00000001117�11671051007�0017267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # See if we need to provide symlinkat replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_FUNC_OPENAT]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([symlinkat]) if test $ac_cv_func_symlinkat = no; then HAVE_SYMLINKAT=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sys_file_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000002155�11671051007�0017403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/file.h>. # serial 6 # Copyright (C) 2008-2011 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([gl_HEADER_SYS_FILE_H], [ AC_REQUIRE([gl_HEADER_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]) ]) AC_DEFUN([gl_HEADER_SYS_FILE_MODULE_INDICATOR], [ AC_REQUIRE([gl_HEADER_SYS_FILE_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_HEADER_SYS_FILE_H_DEFAULTS], [ GNULIB_FLOCK=0; AC_SUBST([GNULIB_FLOCK]) HAVE_FLOCK=1; AC_SUBST([HAVE_FLOCK]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sys_ioctl_h.m4������������������������������������������������������������0000664�0000000�0000000�00000004606�11671051007�0017601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_ioctl_h.m4 serial 10 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_SYS_IOCTL_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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( [AC_INCLUDES_DEFAULT([#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]) ]) AC_DEFUN([gl_SYS_IOCTL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_IOCTL_H_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]) ]) AC_DEFUN([gl_SYS_IOCTL_H_DEFAULTS], [ GNULIB_IOCTL=0; AC_SUBST([GNULIB_IOCTL]) 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-20111211-stable/m4/sys_select_h.m4�����������������������������������������������������������0000664�0000000�0000000�00000006716�11671051007�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_select_h.m4 serial 20 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_SYS_SELECT], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) 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]) ]) AC_DEFUN([gl_SYS_SELECT_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_SELECT_H_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]) ]) AC_DEFUN([gl_SYS_SELECT_H_DEFAULTS], [ GNULIB_PSELECT=0; AC_SUBST([GNULIB_PSELECT]) GNULIB_SELECT=0; AC_SUBST([GNULIB_SELECT]) 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-20111211-stable/m4/sys_socket_h.m4�����������������������������������������������������������0000664�0000000�0000000�00000014217�11671051007�0017756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_socket_h.m4 serial 22 dnl Copyright (C) 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_HEADER_SYS_SOCKET], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_C_INLINE]) 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_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 HAVE_WS2TCPIP_H=0 else HAVE_SYS_SOCKET_H=0 if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_SYS_SOCKET_H]) AC_SUBST([HAVE_WS2TCPIP_H]) ]) # 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]) ]) AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_SOCKET_H_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]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) 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-20111211-stable/m4/sys_stat_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000006520�11671051007�0017437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_stat_h.m4 serial 26 -*- Autoconf -*- dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_HEADER_SYS_STAT_H], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl For the mkdir substitute. AC_REQUIRE([AC_C_INLINE]) 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 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 lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat]) ]) # gl_HEADER_SYS_STAT_H AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_STAT_H_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]) ]) AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR GNULIB_FCHMODAT=0; AC_SUBST([GNULIB_FCHMODAT]) GNULIB_FSTAT=0; AC_SUBST([GNULIB_FSTAT]) GNULIB_FSTATAT=0; AC_SUBST([GNULIB_FSTATAT]) GNULIB_FUTIMENS=0; AC_SUBST([GNULIB_FUTIMENS]) GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD]) GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT]) GNULIB_MKDIRAT=0; AC_SUBST([GNULIB_MKDIRAT]) GNULIB_MKFIFO=0; AC_SUBST([GNULIB_MKFIFO]) GNULIB_MKFIFOAT=0; AC_SUBST([GNULIB_MKFIFOAT]) GNULIB_MKNOD=0; AC_SUBST([GNULIB_MKNOD]) GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT]) GNULIB_STAT=0; AC_SUBST([GNULIB_STAT]) GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT]) 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_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_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_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sys_time_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000005016�11671051007�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/time.h>. # serial 7 # Copyright (C) 2007, 2009-2011 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([gl_HEADER_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_HEADER_SYS_TIME_H_BODY]) ]) AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) 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 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]) ]) AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_SYS_TIME_H_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]) ]) AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS], [ GNULIB_GETTIMEOFDAY=0; AC_SUBST([GNULIB_GETTIMEOFDAY]) 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]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sys_times_h.m4������������������������������������������������������������0000664�0000000�0000000�00000002673�11671051007�0017612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/times.h>. # serial 8 # Copyright (C) 2008-2011 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([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]) ]) AC_DEFUN([gl_SYS_TIMES_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_TIMES_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_SYS_TIMES_H_DEFAULTS], [ GNULIB_TIMES=0; AC_SUBST([GNULIB_TIMES]) HAVE_STRUCT_TMS=1; AC_SUBST([HAVE_STRUCT_TMS]) HAVE_TIMES=1; AC_SUBST([HAVE_TIMES]) ]) ���������������������������������������������������������������������gnulib-20111211-stable/m4/sys_types_h.m4������������������������������������������������������������0000664�0000000�0000000�00000001072�11671051007�0017625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_types_h.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SYS_TYPES_H], [ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) 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]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sys_uio_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000001647�11671051007�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_uio_h.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_SYS_UIO], [ 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]) ]) AC_DEFUN([gl_SYS_UIO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_UIO_H_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]) ]) AC_DEFUN([gl_SYS_UIO_H_DEFAULTS], [ ]) �����������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sys_utsname_h.m4����������������������������������������������������������0000664�0000000�0000000�00000003433�11671051007�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_utsname_h.m4 serial 8 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_SYS_UTSNAME_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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]) ]) AC_DEFUN([gl_SYS_UTSNAME_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_UTSNAME_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_SYS_UTSNAME_H_DEFAULTS], [ GNULIB_UNAME=0; AC_SUBST([GNULIB_UNAME]) 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-20111211-stable/m4/sys_wait_h.m4�������������������������������������������������������������0000664�0000000�0000000�00000002245�11671051007�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_wait_h.m4 serial 6 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([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]) ]) AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_WAIT_H_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]) ]) AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS], [ GNULIB_WAITPID=0; AC_SUBST([GNULIB_WAITPID]) dnl Assume proper GNU behavior unless another module says otherwise. ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/sysexits.m4���������������������������������������������������������������0000664�0000000�0000000�00000002373�11671051007�0017154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sysexits.m4 serial 6 dnl Copyright (C) 2003, 2005, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/tan.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0016042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tan.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/tanf.m4�������������������������������������������������������������������0000664�0000000�0000000�00000001306�11671051007�0016204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tanf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 TANF_LIBM="$TAN_LIBM" fi AC_SUBST([TANF_LIBM]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/tanh.m4�������������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0016207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tanh.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/tanhf.m4������������������������������������������������������������������0000664�0000000�0000000�00000001325�11671051007�0016355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tanhf.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 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 TANHF_LIBM="$TANH_LIBM" fi AC_SUBST([TANHF_LIBM]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/tanl.m4�������������������������������������������������������������������0000664�0000000�0000000�00000005461�11671051007�0016220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tanl.m4 serial 6 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[return 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 x;]], [[return 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 MacOS 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-20111211-stable/m4/tcgetsid.m4���������������������������������������������������������������0000664�0000000�0000000�00000001421�11671051007�0017060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tcgetsid.m4 serial 4 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 AC_CHECK_FUNCS([tcgetsid]) if test $ac_cv_func_tcgetsid = yes; then HAVE_TCGETSID=1 else HAVE_TCGETSID=0 fi ]) # Prerequisites of lib/tcgetsid.c. AC_DEFUN([gl_PREREQ_TCGETSID], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/tempname.m4���������������������������������������������������������������0000664�0000000�0000000�00000001032�11671051007�0017056�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 5 # Copyright (C) 2006-2007, 2009-2011 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-20111211-stable/m4/termios_h.m4��������������������������������������������������������������0000664�0000000�0000000�00000002714�11671051007�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# termios_h.m4 serial 4 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_TERMIOS_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements 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]) ]) AC_DEFUN([gl_TERMIOS_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_TERMIOS_H_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]) ]) AC_DEFUN([gl_TERMIOS_H_DEFAULTS], [ GNULIB_TCGETSID=0; AC_SUBST([GNULIB_TCGETSID]) 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-20111211-stable/m4/thread.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0016520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# thread.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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]) AC_REQUIRE([AC_C_INLINE]) 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-20111211-stable/m4/threadlib.m4��������������������������������������������������������������0000664�0000000�0000000�00000034017�11671051007�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# threadlib.m4 serial 8 (gettext-0.18.2) dnl Copyright (C) 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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_POSIX_THREADS, USE_SOLARIS_THREADS, dnl USE_PTH_THREADS, USE_WIN32_THREADS 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="" whereas LIBMULTITHREAD="-lpthread". dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. 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. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) 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=])]) AC_ARG_ENABLE([threads], AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AC_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(). dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl <http://cygwin.com/ml/cygwin/2009-08/msg00283.html>. osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using <pthread.h>: 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 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. 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 ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. 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 gl_have_pthread= # 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. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h>]], [[pthread_mutex_lock((pthread_mutex_t*)0); pthread_mutexattr_init((pthread_mutexattr_t*)0);]])], [gl_have_pthread=yes]) # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread"; 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], [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-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. case "$host_os" in solaris* | hpux*) AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) esac ]) else # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB([pthread], [pthread_kill], [gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) if test -z "$gl_have_pthread"; then # For FreeBSD 4. AC_CHECK_LIB([c_r], [pthread_kill], [gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then 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= fi fi fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <thread.h> #include <synch.h> ]], [[thr_self();]])], [gl_have_solaristhread=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_SOLARIS_THREADS], [1], [Define if the old Solaris multithreading library can be used.]) if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], [Define if references to the old Solaris multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" AC_LIB_LINKFLAGS([pth]) gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBPTH" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include <pth.h>]], [[pth_self();]])], [gl_have_pth=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_PTH_THREADS], [1], [Define if the GNU Pth multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_PTH_THREADS_WEAK], [1], [Define if references to the GNU Pth multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=win32 AC_DEFINE([USE_WIN32_THREADS], [1], [Define if the Win32 multithreading API can be used.]) fi fi 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 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 GNU Hurd/glibc posix 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 MacOS 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 solaris -lthread 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 Any of the above pth -lpth 0.0 dnl dnl Mingw win32 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-20111211-stable/m4/time_h.m4�����������������������������������������������������������������0000664�0000000�0000000�00000010227�11671051007�0016523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a more-standard replacement for <time.h>. # Copyright (C) 2000-2001, 2003-2007, 2009-2011 Free Software Foundation, Inc. # serial 6 # 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_HEADER_TIME_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_TIME_H_BODY]) ]) AC_DEFUN([gl_HEADER_TIME_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) gl_NEXT_HEADERS([time.h]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) ]) dnl Define HAVE_STRUCT_TIMESPEC if `struct timespec' is declared dnl in time.h, sys/time.h, or pthread.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 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 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_DEFUN([gl_TIME_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_TIME_H_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]) ]) AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], [ GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) 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]) 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_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_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/time_r.m4�����������������������������������������������������������������0000664�0000000�0000000�00000003476�11671051007�0016545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Reentrant time functions: localtime_r, gmtime_r. dnl Copyright (C) 2003, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_HEADER_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_ONCE([localtime_r]) 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( [[#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 fi ]) # Prerequisites of lib/time_r.c. AC_DEFUN([gl_PREREQ_TIME_R], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/timegm.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001315�11671051007�0016536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# timegm.m4 serial 11 dnl Copyright (C) 2003, 2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_HEADER_TIME_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MKTIME]) REPLACE_TIMEGM=0 AC_CHECK_FUNCS_ONCE([timegm]) if test $ac_cv_func_timegm = yes; then if test $gl_cv_func_working_mktime = no; 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-20111211-stable/m4/timer_time.m4�������������������������������������������������������������0000664�0000000�0000000�00000001376�11671051007�0017421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# timer_time.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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]) 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]) AC_CHECK_FUNCS([timer_settime]) LIBS=$gl_saved_libs ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/times.m4������������������������������������������������������������������0000664�0000000�0000000�00000000665�11671051007�0016404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# times.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/timespec.m4���������������������������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0017063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 14 # Copyright (C) 2000-2001, 2003-2007, 2009-2011 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], [ dnl Prerequisites of lib/timespec.h. AC_REQUIRE([AC_C_INLINE]) ]) ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/tls.m4��������������������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0016061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tls.m4 serial 2 (gettext-0.18) dnl Copyright (C) 2005, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/tm_gmtoff.m4��������������������������������������������������������������0000664�0000000�0000000�00000001035�11671051007�0017235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tm_gmtoff.m4 serial 3 dnl Copyright (C) 2002, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/tmpdir.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000605�11671051007�0016554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tmpdir.m4 serial 3 dnl Copyright (C) 2001-2002, 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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], [ AC_CHECK_FUNCS([__secure_getenv]) ]) ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/tmpfile.m4����������������������������������������������������������������0000664�0000000�0000000�00000002604�11671051007�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tmpfile.m4 serial 2 # Copyright (C) 2007, 2009-2011 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). AC_DEFUN([gl_FUNC_TMPFILE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CACHE_CHECK([whether tmpfile should be overridden], [gl_cv_func_tmpfile_unusable], [AC_EGREP_CPP([choke me], [ #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ choke me #endif ], [gl_cv_func_tmpfile_unusable=yes], [gl_cv_func_tmpfile_unusable=no])]) if test $gl_cv_func_tmpfile_unusable = yes; then REPLACE_TMPFILE=1 fi ]) # Prerequisites of lib/tmpfile.c. AC_DEFUN([gl_PREREQ_TMPFILE], [:]) ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/towctrans.m4��������������������������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0017304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# towctrans.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/trunc-ieee.m4�������������������������������������������������������������0000664�0000000�0000000�00000001116�11671051007�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# trunc-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/trunc.m4������������������������������������������������������������������0000664�0000000�0000000�00000005257�11671051007�0016420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# trunc.m4 serial 8 dnl Copyright (C) 2007, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[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 x;]], [[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_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 (*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], [gl_cv_func_trunc_ieee="guessing no"]) 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-20111211-stable/m4/truncf-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001124�11671051007�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncf-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/truncf.m4�����������������������������������������������������������������0000664�0000000�0000000�00000005316�11671051007�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncf.m4 serial 8 dnl Copyright (C) 2007, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[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 x;]], [[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_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 (*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], [gl_cv_func_truncf_ieee="guessing no"]) 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-20111211-stable/m4/truncl-ieee.m4������������������������������������������������������������0000664�0000000�0000000�00000001124�11671051007�0017466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncl-ieee.m4 serial 1 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/truncl.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007266�11671051007�0016576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# truncl.m4 serial 10 dnl Copyright (C) 2007-2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 x;]], [[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 x;]], [[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";; *) 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_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 (*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], [gl_cv_func_truncl_ieee="guessing no"]) 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-20111211-stable/m4/tsearch.m4����������������������������������������������������������������0000664�0000000�0000000�00000003112�11671051007�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tsearch.m4 serial 6 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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";; *) 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 ]) # Prerequisites of lib/tsearch.c. AC_DEFUN([gl_PREREQ_TSEARCH], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ttyname_r.m4��������������������������������������������������������������0000664�0000000�0000000�00000006272�11671051007�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ttyname_r.m4 serial 8 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 MacOS 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. AC_REQUIRE([AC_CANONICAL_HOST]) 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> 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 ]) # Prerequisites of lib/ttyname_r.c. AC_DEFUN([gl_PREREQ_TTYNAME_R], [ AC_CHECK_FUNCS([ttyname]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/tzset.m4������������������������������������������������������������������0000664�0000000�0000000�00000003033�11671051007�0016424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 6 # Copyright (C) 2003, 2007, 2009-2011 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. # See if we have a working tzset function. # If so, arrange to compile the wrapper function. # For at least Solaris 2.5.1 and 2.6, this is necessary # because tzset can clobber the contents of the buffer # used by localtime. # Written by Paul Eggert and Jim Meyering. # A placeholder to ensure that this m4 file gets included by aclocal. AC_DEFUN([gl_FUNC_TZSET], []) # Set gl_cv_func_tzset_clobber. AC_DEFUN([gl_FUNC_TZSET_CLOBBER], [ AC_REQUIRE([gl_HEADER_SYS_TIME_H]) AC_CACHE_CHECK([whether tzset clobbers localtime buffer], gl_cv_func_tzset_clobber, [ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <time.h> #include <stdlib.h> int main () { time_t t1 = 853958121; struct tm *p, s; putenv ("TZ=GMT0"); p = localtime (&t1); s = *p; putenv ("TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"); tzset (); return (p->tm_year != s.tm_year || p->tm_mon != s.tm_mon || p->tm_mday != s.tm_mday || p->tm_hour != s.tm_hour || p->tm_min != s.tm_min || p->tm_sec != s.tm_sec); } ]])], [gl_cv_func_tzset_clobber=no], [gl_cv_func_tzset_clobber=yes], [gl_cv_func_tzset_clobber=yes])]) AC_DEFINE([HAVE_RUN_TZSET_TEST], [1], [Define to 1 if you have run the test for working tzset.]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/uintmax_t.m4��������������������������������������������������������������0000664�0000000�0000000�00000002131�11671051007�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uintmax_t.m4 serial 12 dnl Copyright (C) 1997-2004, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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.13]) # Define uintmax_t to 'unsigned long' or 'unsigned long long' # if it is not already defined in <stdint.h> or <inttypes.h>. AC_DEFUN([gl_AC_TYPE_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_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) test $ac_cv_type_unsigned_long_long_int = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type], [Define to unsigned long or unsigned long long if <stdint.h> and <inttypes.h> don't define.]) else AC_DEFINE([HAVE_UINTMAX_T], [1], [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/ulonglong.m4��������������������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0017257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ulonglong.m4 serial 10 dnl Copyright (C) 1999-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/uname.m4������������������������������������������������������������������0000664�0000000�0000000�00000000771�11671051007�0016366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uname.m4 serial 11 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/ungetc.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002557�11671051007�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ungetc.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation 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_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) return 2; rewind (f); if (fgetc (f) != 'a') return 3; if (fgetc (f) != 'b') return 4; if (ungetc ('d', f) != 'd') return 5; if (ftell (f) != 1) return 6; if (fgetc (f) != 'd') return 7; if (ftell (f) != 2) return 8; if (fseek (f, 0, SEEK_CUR) != 0) return 9; if (ftell (f) != 2) return 10; if (fgetc (f) != 'c') return 11; fclose (f); remove ("conftest.tmp");])], [gl_cv_func_ungetc_works=yes], [gl_cv_func_ungetc_works=no], [gl_cv_func_ungetc_works='guessing no']) ]) if test "$gl_cv_func_ungetc_works" != yes; then AC_DEFINE([FUNC_UNGETC_BROKEN], [1], [Define to 1 if ungetc is broken when used on arbitrary bytes.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/unicodeio.m4��������������������������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unicodeio.m4 serial 2 dnl Copyright (C) 2002-2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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 No prerequisites of lib/unicodeio.c. : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/unistd-safer.m4�����������������������������������������������������������0000664�0000000�0000000�00000000530�11671051007�0017656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 9 dnl Copyright (C) 2002, 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/unistd_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000020600�11671051007�0017067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unistd_h.m4 serial 62 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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([gl_UNISTD_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_C_INLINE]) 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 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 __WIN32__) && ! defined __CYGWIN__ # include <io.h> # endif #endif ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sleep symlink symlinkat ttyname_r unlink unlinkat usleep]) ]) AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_UNISTD_H_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]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) GNULIB_READ=0; AC_SUBST([GNULIB_READ]) GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) 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_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_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_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_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_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_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_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_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) 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_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) 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_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-20111211-stable/m4/unlink-busy.m4������������������������������������������������������������0000664�0000000�0000000�00000002123�11671051007�0017532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 12 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-2011 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[ 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, gl_cv_func_unlink_busy_text=no ) ] ) if test $gl_cv_func_unlink_busy_text = no; then INSTALL=$ac_install_sh fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/unlink.m4�����������������������������������������������������������������0000664�0000000�0000000�00000010564�11671051007�0016562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlink.m4 serial 9 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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> ]], [[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], [gl_cv_func_unlink_honors_slashes="guessing no"]) rm -f conftest.file conftest.lnk]) dnl Detect MacOS 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 MacOS 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 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], [gl_cv_func_unlink_parent_fails="guessing no"]) 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) AC_DEFINE([UNLINK_PARENT_BUG], [1], [Define to 1 if unlink() on a parent directory may succeed]) ;; esac if test "$gl_cv_func_unlink_honors_slashes" != yes \ || { case "$gl_cv_func_unlink_parent_fails" in *yes) false;; *no) true;; esac }; then REPLACE_UNLINK=1 fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/unlinkat.m4���������������������������������������������������������������0000664�0000000�0000000�00000001706�11671051007�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlinkat.m4 serial 1 dnl Copyright (C) 2004-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 if test $gl_cv_func_lstat_dereferences_slashed_symlink != yes; then # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_UNLINKAT=1 else # GNU/Hurd has unlinkat, but it has the same bug as unlink. if test $REPLACE_UNLINK = 1; then REPLACE_UNLINKAT=1 fi fi fi ]) ����������������������������������������������������������gnulib-20111211-stable/m4/unlinkdir.m4��������������������������������������������������������������0000664�0000000�0000000�00000002164�11671051007�0017256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 7 # Copyright (C) 2005-2007, 2009-2011 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-20111211-stable/m4/unlocked-io.m4������������������������������������������������������������0000664�0000000�0000000�00000003027�11671051007�0017467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlocked-io.m4 serial 15 # Copyright (C) 1998-2006, 2009-2011 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], [ AC_DEFINE([USE_UNLOCKED_IO], [1], [Define to 1 if you want getc etc. to use unlocked I/O if available. Unlocked I/O can improve performance in unithreaded apps, but it is not safe for multithreaded apps.]) 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-20111211-stable/m4/unlockpt.m4���������������������������������������������������������������0000664�0000000�0000000�00000001201�11671051007�0017105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlockpt.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/uptime.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001503�11671051007�0016556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 8 # Copyright (C) 1996, 1999-2001, 2004, 2009-2011 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-20111211-stable/m4/userspec.m4���������������������������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0017115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 11 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/usleep.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002612�11671051007�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# usleep.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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], [gl_cv_func_usleep_works="guessing no"])]) if test "$gl_cv_func_usleep_works" != yes; then REPLACE_USLEEP=1 fi fi ]) ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/utimbuf.m4����������������������������������������������������������������0000664�0000000�0000000�00000002377�11671051007�0016740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 9 # Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2011 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 Define HAVE_STRUCT_UTIMBUF if `struct utimbuf' is declared -- dnl usually in <utime.h>. dnl Some systems have utime.h but don't declare the struct anywhere. AC_DEFUN([gl_CHECK_TYPE_STRUCT_UTIMBUF], [ AC_CHECK_HEADERS_ONCE([sys/time.h utime.h]) AC_CACHE_CHECK([for struct utimbuf], [gl_cv_sys_struct_utimbuf], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #ifdef HAVE_UTIME_H #include <utime.h> #endif ]], [[static struct utimbuf x; x.actime = x.modtime;]])], [gl_cv_sys_struct_utimbuf=yes], [gl_cv_sys_struct_utimbuf=no])]) if test $gl_cv_sys_struct_utimbuf = yes; then AC_DEFINE([HAVE_STRUCT_UTIMBUF], [1], [Define if struct utimbuf is declared -- usually in <utime.h>. Some systems have utime.h but don't declare the struct anywhere. ]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/utimecmp.m4���������������������������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0017103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 4 dnl Copyright (C) 2004-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/utimens.m4����������������������������������������������������������������0000664�0000000�0000000�00000002730�11671051007�0016742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Copyright (C) 2003-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 6 AC_DEFUN([gl_UTIMENS], [ dnl Prerequisites of lib/utimens.c. AC_REQUIRE([gl_FUNC_UTIMES]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_UTIMBUF]) 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> ]], [[ 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], [gl_cv_func_futimesat_works="guessing no"]) rm -f conftest.file]) if test "$gl_cv_func_futimesat_works" != yes; then AC_DEFINE([FUTIMESAT_NULL_BUG], [1], [Define to 1 if futimesat mishandles a NULL file name.]) fi fi ]) ����������������������������������������gnulib-20111211-stable/m4/utimensat.m4��������������������������������������������������������������0000664�0000000�0000000�00000004663�11671051007�0017276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # See if we need to provide utimensat replacement. dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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> ]], [[int result = 0; const char *f = "conftest.file"; if (close (creat (f, 0600))) return 1; /* Test whether the AT_SYMLINK_NOFOLLOW flag is supported. */ { if (utimensat (AT_FDCWD, f, NULL, AT_SYMLINK_NOFOLLOW)) result |= 2; } /* Test whether UTIME_NOW and UTIME_OMIT work. */ { struct timespec ts[2] = { { 1, UTIME_OMIT }, { 1, UTIME_NOW } }; if (utimensat (AT_FDCWD, f, ts, 0)) result |= 4; } sleep (1); { struct timespec ts[2] = { { 1, UTIME_NOW }, { 1, UTIME_OMIT } }; struct stat st; if (utimensat (AT_FDCWD, f, ts, 0)) result |= 8; if (stat (f, &st)) result |= 16; else if (st.st_ctime < st.st_atime) result |= 32; } return result; ]])], dnl FIXME: simplify this in 2012, when file system bugs are no longer common [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef __linux__ /* The Linux kernel added utimensat in 2.6.22, but has bugs with UTIME_OMIT in several file systems as recently as 2.6.32. Always replace utimensat to support older kernels. */ choke me #endif ]])], [gl_cv_func_utimensat_works=yes], [gl_cv_func_utimensat_works="needs runtime check"])], [gl_cv_func_utimensat_works=no], [gl_cv_func_utimensat_works="guessing no"])]) if test "$gl_cv_func_utimensat_works" != yes; then REPLACE_UTIMENSAT=1 fi fi ]) �����������������������������������������������������������������������������gnulib-20111211-stable/m4/utimes.m4�����������������������������������������������������������������0000664�0000000�0000000�00000007637�11671051007�0016577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Detect some bugs in glibc's implementation of utimes. # serial 3 dnl Copyright (C) 2003-2005, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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> 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"; static struct timeval timeval[2] = {{9, 10}, {999999, 999999}}; /* 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) result |= 2; else if (utimes (file, NULL) != 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], [gl_cv_func_working_utimes=no])]) if test $gl_cv_func_working_utimes = yes; then AC_DEFINE([HAVE_WORKING_UTIMES], [1], [Define if utimes works properly. ]) fi ]) �������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/va-args.m4����������������������������������������������������������������0000664�0000000�0000000�00000001631�11671051007�0016615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# va-args.m4 serial 1 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/valgrind-tests.m4���������������������������������������������������������0000664�0000000�0000000�00000002216�11671051007�0020223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# valgrind-tests.m4 serial 3 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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, and set VALGRIND to it if available. AC_DEFUN([gl_VALGRIND_TESTS], [ AC_ARG_ENABLE(valgrind-tests, AS_HELP_STRING([--enable-valgrind-tests], [run self tests under valgrind]), [opt_valgrind_tests=$enableval], [opt_valgrind_tests=yes]) # Run self-tests under valgrind? if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then AC_CHECK_PROGS(VALGRIND, valgrind) fi OPTS="-q --error-exitcode=1 --leak-check=full" if test -n "$VALGRIND" \ && $VALGRIND $OPTS $SHELL -c 'exit 0' > /dev/null 2>&1; then opt_valgrind_tests=yes VALGRIND="$VALGRIND $OPTS" else opt_valgrind_tests=no VALGRIND= fi AC_MSG_CHECKING([whether self tests are run under valgrind]) AC_MSG_RESULT($opt_valgrind_tests) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/vararrays.m4��������������������������������������������������������������0000664�0000000�0000000�00000001367�11671051007�0017275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for variable-length arrays. # serial 4 # From Paul Eggert # Copyright (C) 2001, 2009-2011 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([AC_C_VARARRAYS], [ AC_CACHE_CHECK([for variable-length arrays], ac_cv_c_vararrays, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [], [[static int x; char a[++x]; a[sizeof a - 1] = 0; return a[0];]])], ac_cv_c_vararrays=yes, ac_cv_c_vararrays=no)]) if test $ac_cv_c_vararrays = yes; then AC_DEFINE([HAVE_C_VARARRAYS], [1], [Define to 1 if C supports variable-length arrays.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/vasnprintf-posix.m4�������������������������������������������������������0000664�0000000�0000000�00000010266�11671051007�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasnprintf-posix.m4 serial 13 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/vasnprintf.m4�������������������������������������������������������������0000664�0000000�0000000�00000021163�11671051007�0017451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasnprintf.m4 serial 34 dnl Copyright (C) 2002-2004, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 ]) # Prequisites of lib/printf-args.h, lib/printf-args.c. AC_DEFUN([gl_PREREQ_PRINTF_ARGS], [ AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) ]) # Prequisites of lib/printf-parse.h, lib/printf-parse.c. AC_DEFUN([gl_PREREQ_PRINTF_PARSE], [ AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) 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_C_INLINE]) AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) 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 ]) # 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-20111211-stable/m4/vasprintf-posix.m4��������������������������������������������������������0000664�0000000�0000000�00000010302�11671051007�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasprintf-posix.m4 serial 13 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/vasprintf.m4��������������������������������������������������������������0000664�0000000�0000000�00000002100�11671051007�0017261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasprintf.m4 serial 6 dnl Copyright (C) 2002-2003, 2006-2007, 2009-2011 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-20111211-stable/m4/vdprintf-posix.m4���������������������������������������������������������0000664�0000000�0000000�00000010275�11671051007�0020255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vdprintf-posix.m4 serial 2 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/vdprintf.m4���������������������������������������������������������������0000664�0000000�0000000�00000001336�11671051007�0017113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vdprintf.m4 serial 1 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/version-etc.m4������������������������������������������������������������0000664�0000000�0000000�00000002226�11671051007�0017514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# version-etc.m4 serial 1 # Copyright (C) 2009-2011 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-20111211-stable/m4/vfprintf-posix.m4���������������������������������������������������������0000664�0000000�0000000�00000010446�11671051007�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vfprintf-posix.m4 serial 14 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/visibility.m4�������������������������������������������������������������0000664�0000000�0000000�00000006426�11671051007�0017453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# visibility.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2005, 2008, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 MacOS 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_MSG_CHECKING([whether the -Werror option is usable]) AC_CACHE_VAL([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"]) AC_MSG_RESULT([$gl_cv_cc_vis_werror]) dnl Now check whether visibility declarations are supported. AC_MSG_CHECKING([for simple visibility declarations]) AC_CACHE_VAL([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) {} ]], [[]])], [gl_cv_cc_visibility=yes], [gl_cv_cc_visibility=no]) CFLAGS="$gl_save_CFLAGS"]) AC_MSG_RESULT([$gl_cv_cc_visibility]) 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-20111211-stable/m4/vprintf-posix.m4����������������������������������������������������������0000664�0000000�0000000�00000001335�11671051007�0020106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vprintf-posix.m4 serial 3 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/vsnprintf-posix.m4��������������������������������������������������������0000664�0000000�0000000�00000014123�11671051007�0020446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vsnprintf-posix.m4 serial 15 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/vsnprintf.m4��������������������������������������������������������������0000664�0000000�0000000�00000003102�11671051007�0017301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vsnprintf.m4 serial 6 dnl Copyright (C) 2002-2004, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 fi gl_PREREQ_VSNPRINTF ]) # Prerequisites of lib/vsnprintf.c. AC_DEFUN([gl_PREREQ_VSNPRINTF], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/vsprintf-posix.m4���������������������������������������������������������0000664�0000000�0000000�00000010247�11671051007�0020273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vsprintf-posix.m4 serial 12 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wait-process.m4�����������������������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0017700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wait-process.m4 serial 5 dnl Copyright (C) 2003, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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([AC_C_INLINE]) AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) AC_CHECK_FUNCS([waitid]) ]) ���������������������������������������������������������gnulib-20111211-stable/m4/waitpid.m4����������������������������������������������������������������0000664�0000000�0000000�00000000640�11671051007�0016715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# waitpid.m4 serial 2 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/warn-on-use.m4������������������������������������������������������������0000664�0000000�0000000�00000004160�11671051007�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warn-on-use.m4 serial 4 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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) # --------------------------------------- # 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. # # If you assume C89, then it is generally safe to assume declarations # for functions declared in that standard (such as gets) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ 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 dnl FIXME: gl_Symbol must be used unquoted until we can assume dnl autoconf 2.64 or newer. 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-20111211-stable/m4/warnings.m4���������������������������������������������������������������0000664�0000000�0000000�00000002657�11671051007�0017116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warnings.m4 serial 5 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_WARN_ADD(PARAMETER, [VARIABLE = WARN_CFLAGS]) # ------------------------------------------------ # Adds parameter to WARN_CFLAGS if the compiler supports it. For example, # gl_WARN_ADD([-Wparentheses]). AC_DEFUN([gl_WARN_ADD], dnl FIXME: gl_Warn must be used unquoted until we can assume dnl autoconf 2.64 or newer. [AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_$1])dnl AC_CACHE_CHECK([whether compiler handles $1], m4_defn([gl_Warn]), [ gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} $1" AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])], [AS_VAR_SET(gl_Warn, [yes])], [AS_VAR_SET(gl_Warn, [no])]) CPPFLAGS="$gl_save_CPPFLAGS" ]) AS_VAR_IF(gl_Warn, [yes], [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])]) AS_VAR_POPDEF([gl_Warn])dnl m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])], [])])dnl ]) ���������������������������������������������������������������������������������gnulib-20111211-stable/m4/wchar_h.m4����������������������������������������������������������������0000664�0000000�0000000�00000022240�11671051007�0016667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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 39 AC_DEFUN([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]) 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([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <stddef.h> # include <stdio.h> # include <time.h> #endif #include <wchar.h> ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth ]) ]) 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 <http://sourceware.org/bugzilla/show_bug.cgi?id=4022> dnl and <http://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_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly], [gl_cv_header_wchar_h_correct_inline], [gl_cv_header_wchar_h_correct_inline=yes AC_LANG_CONFTEST([ AC_LANG_SOURCE([[#define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #include <wchar.h> extern int zero (void); int main () { return zero(); } ]])]) if AC_TRY_EVAL([ac_compile]); then mv conftest.$ac_objext conftest1.$ac_objext AC_LANG_CONFTEST([ AC_LANG_SOURCE([[#define wcstod renamed_wcstod /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #include <wchar.h> int zero (void) { return 0; } ]])]) if AC_TRY_EVAL([ac_compile]); then mv conftest.$ac_objext conftest2.$ac_objext 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 rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext ]) 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 <http://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 ]) AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_WCHAR_H_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]) ]) AC_DEFUN([gl_WCHAR_H_DEFAULTS], [ GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR]) GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP]) GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY]) GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE]) GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET]) GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN]) GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY]) GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY]) GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY]) GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY]) GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT]) GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT]) GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP]) GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP]) GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP]) GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP]) GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL]) GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM]) GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP]) GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR]) GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR]) GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN]) GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN]) GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK]) GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR]) GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK]) GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH]) 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_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_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) 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]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/wchar_t.m4����������������������������������������������������������������0000664�0000000�0000000�00000001462�11671051007�0016706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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-20111211-stable/m4/wcpcpy.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001020�11671051007�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcpcpy.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcpncpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000001026�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcpncpy.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcrtomb.m4����������������������������������������������������������������0000664�0000000�0000000�00000006610�11671051007�0016734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcrtomb.m4 serial 11 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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],,, [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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 if test $REPLACE_MBSTATE_T = 1; then REPLACE_WCRTOMB=1 else dnl On AIX 4.3, OSF/1 5.1 and Solaris 10, wcrtomb (NULL, 0, NULL) sometimes dnl 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 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 and Solaris. aix4* | osf* | solaris*) 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #include <wchar.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; } 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) ;; *) REPLACE_WCRTOMB=1 ;; esac fi fi ]) # Prerequisites of lib/wcrtomb.c. AC_DEFUN([gl_PREREQ_WCRTOMB], [ : ]) ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/wcscasecmp.m4�������������������������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0017406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscasecmp.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcscat.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscat.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcschr.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcschr.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcscmp.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscmp.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcscoll.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscoll.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcscpy.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscpy.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcscspn.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcscspn.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsdup.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsdup.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_CHECK_FUNCS_ONCE([wcsdup]) if test $ac_cv_func_wcsdup = no; then HAVE_WCSDUP=0 fi ]) �������������������������������������������������������������������������������gnulib-20111211-stable/m4/wcslen.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcslen.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsncasecmp.m4������������������������������������������������������������0000664�0000000�0000000�00000000712�11671051007�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsncasecmp.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsncat.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsncat.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsncmp.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsncmp.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsncpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsncpy.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsnlen.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsnlen.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsnrtombs.m4�������������������������������������������������������������0000664�0000000�0000000�00000001246�11671051007�0017460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsnrtombs.m4 serial 5 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 fi fi ]) # Prerequisites of lib/wcsnrtombs.c. AC_DEFUN([gl_PREREQ_WCSNRTOMBS], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/wcspbrk.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcspbrk.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsrchr.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsrchr.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsrtombs.m4��������������������������������������������������������������0000664�0000000�0000000�00000013175�11671051007�0017306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsrtombs.m4 serial 11 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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],,, [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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-20111211-stable/m4/wcsspn.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsspn.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsstr.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsstr.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcstok.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0016571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcstok.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_CHECK_FUNCS_ONCE([wcstok]) if test $ac_cv_func_wcstok = no; then HAVE_WCSTOK=0 fi ]) �������������������������������������������������������������������������������gnulib-20111211-stable/m4/wcswidth.m4���������������������������������������������������������������0000664�0000000�0000000�00000001206�11671051007�0017107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcswidth.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wcsxfrm.m4����������������������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0016755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcsxfrm.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wctob.m4������������������������������������������������������������������0000664�0000000�0000000�00000006676�11671051007�0016411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctob.m4 serial 10 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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 <http://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 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> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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 <string.h> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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], [], [], [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/wctomb.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0016553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctomb.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wctrans.m4����������������������������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0016733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctrans.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wctype.m4�����������������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0016570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctype.m4 serial 2 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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-20111211-stable/m4/wctype_h.m4���������������������������������������������������������������0000664�0000000�0000000�00000015424�11671051007�0017104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctype_h.m4 serial 16 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it. dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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_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([AC_C_INLINE]) 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]) 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([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #include <wchar.h> #include <wctype.h> int main () { return iswprint ('x') == 0; } ]])], [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif]], [])], [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no]) ]) ]) fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi AC_SUBST([HAVE_WCTYPE_H]) if test "$gl_cv_func_iswcntrl_works" = no; then REPLACE_ISWCNTRL=1 else REPLACE_ISWCNTRL=0 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],,, [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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( [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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( [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <stddef.h> # include <stdio.h> # include <time.h> # include <wchar.h> #endif #include <wctype.h> ]], [wctype iswctype wctrans towctrans ]) ]) AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_WCTYPE_H_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]) ]) AC_DEFUN([gl_WCTYPE_H_DEFAULTS], [ GNULIB_ISWBLANK=0; AC_SUBST([GNULIB_ISWBLANK]) GNULIB_WCTYPE=0; AC_SUBST([GNULIB_WCTYPE]) GNULIB_ISWCTYPE=0; AC_SUBST([GNULIB_ISWCTYPE]) GNULIB_WCTRANS=0; AC_SUBST([GNULIB_WCTRANS]) GNULIB_TOWCTRANS=0; AC_SUBST([GNULIB_TOWCTRANS]) 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]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/wcwidth.m4����������������������������������������������������������������0000664�0000000�0000000�00000005454�11671051007�0016735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcwidth.m4 serial 21 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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], [], [], [[ /* AIX 3.2.5 declares wcwidth in <string.h>. */ #include <string.h> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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 HAVE_WCWIDTH=1 dnl On MacOS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1. dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1. dnl This leads to bugs in 'ls' (coreutils). 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> /* AIX 3.2.5 declares wcwidth in <string.h>. */ #include <string.h> /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.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, "fr_FR.UTF-8") != NULL) { if (wcwidth (0x0301) > 0) result |= 1; if (wcwidth (0x200B) > 0) result |= 2; } return result; }]])], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc and AIX 7 systems. *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";; *) gl_cv_func_wcwidth_works="guessing no";; 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. ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/wint_t.m4�����������������������������������������������������������������0000664�0000000�0000000�00000002035�11671051007�0016560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wint_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2003, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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. 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( [[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/wmemchr.m4����������������������������������������������������������������0000664�0000000�0000000�00000002063�11671051007�0016717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemchr.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/wmemcmp.m4����������������������������������������������������������������0000664�0000000�0000000�00000002071�11671051007�0016721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemcmp.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/wmemcpy.m4����������������������������������������������������������������0000664�0000000�0000000�00000002063�11671051007�0016736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemcpy.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/wmemmove.m4���������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemmove.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/wmemset.m4����������������������������������������������������������������0000664�0000000�0000000�00000002055�11671051007�0016737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wmemset.m4 serial 3 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before <wchar.h>. BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included before <wchar.h>. */ #include <stddef.h> #include <stdio.h> #include <time.h> #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-20111211-stable/m4/write-any-file.m4���������������������������������������������������������0000664�0000000�0000000�00000000612�11671051007�0020107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Determine whether we can write any file. # Copyright (C) 2007, 2009-2011 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-20111211-stable/m4/write.m4������������������������������������������������������������������0000664�0000000�0000000�00000002011�11671051007�0016400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# write.m4 serial 4 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives 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]) 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], [ AC_REQUIRE([AC_C_INLINE]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/xalloc.m4�����������������������������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0016533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xalloc.m4 serial 17 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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], [ gl_PREREQ_XALLOC gl_PREREQ_XMALLOC ]) # Prerequisites of lib/xalloc.h. AC_DEFUN([gl_PREREQ_XALLOC], [ AC_REQUIRE([gl_INLINE]) : ]) # Prerequisites of lib/xmalloc.c. AC_DEFUN([gl_PREREQ_XMALLOC], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/xgetcwd.m4����������������������������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0016724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 8 dnl Copyright (C) 2002-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/xnanosleep.m4�������������������������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 5 dnl Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free 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], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/xsize.m4������������������������������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0016422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xsize.m4 serial 4 dnl Copyright (C) 2003-2004, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_REQUIRE([AC_C_INLINE]) AC_CHECK_HEADERS([stdint.h]) ]) ������������������������������������������������������������������������������gnulib-20111211-stable/m4/xstrndup.m4���������������������������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0017143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xstrndup.m4 serial 2 dnl Copyright (C) 2003, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/xstrtod.m4����������������������������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0016765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 8 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/xstrtol.m4����������������������������������������������������������������0000664�0000000�0000000�00000000464�11671051007�0016777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 11 dnl Copyright (C) 2002-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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-20111211-stable/m4/xvasprintf.m4�������������������������������������������������������������0000664�0000000�0000000�00000000601�11671051007�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xvasprintf.m4 serial 1 dnl Copyright (C) 2006, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XVASPRINTF], [ dnl Prerequisites of lib/xvasprintf.c. AC_REQUIRE([AC_C_INLINE]) ]) �������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/m4/yesno.m4������������������������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0016413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# yesno.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2011 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-20111211-stable/m4/yield.m4������������������������������������������������������������������0000664�0000000�0000000�00000001357�11671051007�0016370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# yield.m4 serial 2 dnl Copyright (C) 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl 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_THREADLIB]) dnl On some systems, sched_yield is in librt, rather than in libpthread. YIELD_LIB= if test $gl_threads_api = posix; then dnl Solaris has sched_yield in librt, not in libpthread or libc. AC_CHECK_LIB([rt], [sched_yield], [YIELD_LIB=-lrt], [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. AC_CHECK_LIB([posix4], [sched_yield], [YIELD_LIB=-lposix4])]) fi AC_SUBST([YIELD_LIB]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0016142�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/.gitattributes�������������������������������������������������������0000664�0000000�0000000�00000000144�11671051007�0021034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# "git diff --check" should not reject modules files which end in a blank line. * whitespace=-trail ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/COPYING��������������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0017200�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-2011 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-20111211-stable/modules/README���������������������������������������������������������������0000664�0000000�0000000�00000001242�11671051007�0017021�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-2011 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-20111211-stable/modules/TEMPLATE�������������������������������������������������������������0000664�0000000�0000000�00000000145�11671051007�0017300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Files: Depends-on: configure.ac: Makefile.am: Include: License: GPL Maintainer: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/TEMPLATE-EXTENDED����������������������������������������������������0000664�0000000�0000000�00000000255�11671051007�0020500�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-20111211-stable/modules/TEMPLATE-TESTS�������������������������������������������������������0000664�0000000�0000000�00000000062�11671051007�0020176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: configure.ac: Makefile.am: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/_Exit����������������������������������������������������������������0000664�0000000�0000000�00000000472�11671051007�0017140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: _Exit() function: terminate current process. Files: lib/_Exit.c m4/_Exit.m4 Depends-on: stdlib 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-20111211-stable/modules/_Exit-tests����������������������������������������������������������0000664�0000000�0000000�00000000214�11671051007�0020272�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-20111211-stable/modules/absolute-header������������������������������������������������������0000664�0000000�0000000�00000000732�11671051007�0021133�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__ || 60000000 <= __DECC_VER) Include: License: LGPLv2+ Maintainer: all ��������������������������������������gnulib-20111211-stable/modules/accept���������������������������������������������������������������0000664�0000000�0000000�00000001031�11671051007�0017317�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: 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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/accept-tests���������������������������������������������������������0000664�0000000�0000000�00000000325�11671051007�0020464�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-20111211-stable/modules/accept4��������������������������������������������������������������0000664�0000000�0000000�00000000643�11671051007�0017413�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: Bruno Haible, Simon Josefsson ���������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/accept4-tests��������������������������������������������������������0000664�0000000�0000000�00000000353�11671051007�0020551�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-20111211-stable/modules/acl������������������������������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0016630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access control lists of files. (Unportable.) Files: lib/acl.h lib/acl-internal.h lib/acl_entries.c lib/set-mode-acl.c lib/copy-acl.c lib/file-has-acl.c m4/acl.m4 Depends-on: error fstat gettext-h quote sys_stat configure.ac: gl_FUNC_ACL Makefile.am: lib_SOURCES += set-mode-acl.c copy-acl.c file-has-acl.c Include: "acl.h" Link: $(LIB_ACL) License: GPL Maintainer: Paul Eggert, Jim Meyering, Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/acl-tests������������������������������������������������������������0000664�0000000�0000000�00000001753�11671051007�0017772�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-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-file-has-acl.c tests/test-set-mode-acl.c tests/test-copy-acl.c tests/test-sameacls.c tests/macros.h Depends-on: progname read-file unistd xalloc 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 \ 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-file-has-acl test-set-mode-acl test-copy-acl test-sameacls test_file_has_acl_LDADD = $(LDADD) $(LIB_ACL) test_set_mode_acl_LDADD = $(LDADD) $(LIB_ACL) @LIBINTL@ test_copy_acl_LDADD = $(LDADD) $(LIB_ACL) @LIBINTL@ test_sameacls_LDADD = $(LDADD) $(LIB_ACL) @LIBINTL@ ���������������������gnulib-20111211-stable/modules/acos�����������������������������������������������������������������0000664�0000000�0000000�00000000340�11671051007�0017007�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/acos-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020153�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-20111211-stable/modules/acosf����������������������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0017164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: acosf() function: inverse cosine function. Files: lib/acosf.c m4/acosf.m4 Depends-on: math 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/acosf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020326�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-20111211-stable/modules/acosl����������������������������������������������������������������0000664�0000000�0000000�00000001140�11671051007�0017162�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-20111211-stable/modules/acosl-tests����������������������������������������������������������0000664�0000000�0000000�00000000305�11671051007�0020324�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-20111211-stable/modules/agpl-3.0�������������������������������������������������������������0000664�0000000�0000000�00000000335�11671051007�0017307�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-20111211-stable/modules/alignof��������������������������������������������������������������0000664�0000000�0000000�00000000255�11671051007�0017506�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/alignof-tests��������������������������������������������������������0000664�0000000�0000000�00000000212�11671051007�0020637�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-20111211-stable/modules/alloca���������������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0017315�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-20111211-stable/modules/alloca-opt�����������������������������������������������������������0000664�0000000�0000000�00000001452�11671051007�0020122�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! */'; \ cat $(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-20111211-stable/modules/alloca-opt-tests�����������������������������������������������������0000664�0000000�0000000�00000000205�11671051007�0021255�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-20111211-stable/modules/allocator������������������������������������������������������������0000664�0000000�0000000�00000000311�11671051007�0020040�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-20111211-stable/modules/alphasort������������������������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0020056�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-20111211-stable/modules/amemxfrm�������������������������������������������������������������0000664�0000000�0000000�00000000363�11671051007�0017703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent memory area transformation for comparison. Files: lib/amemxfrm.h lib/amemxfrm.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += amemxfrm.c Include: "amemxfrm.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/announce-gen���������������������������������������������������������0000664�0000000�0000000�00000000273�11671051007�0020444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generate a release announcement message. Files: build-aux/announce-gen Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: coreutils �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ansi-c++-opt���������������������������������������������������������0000664�0000000�0000000�00000000315�11671051007�0020164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Optional use of an ANSI C++ compiler. Files: m4/ansi-c++.m4 Depends-on: configure.ac: gl_PROG_ANSI_CXX([CXX], [ANSICXX]) Makefile.am: Include: License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/areadlink������������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0020013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Reading symbolic links without size limitation. Files: lib/areadlink.h lib/areadlink.c Depends-on: careadlinkat configure.ac: Makefile.am: lib_SOURCES += areadlink.c Include: "areadlink.h" License: LGPLv2+ Maintainer: Bruno Haible, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/areadlink-tests������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0021154�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-20111211-stable/modules/areadlink-with-size��������������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0021743�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: readlink ssize_t stdint unistd configure.ac: Makefile.am: lib_SOURCES += areadlink-with-size.c Include: "areadlink.h" License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/areadlink-with-size-tests��������������������������������������������0000664�0000000�0000000�00000000342�11671051007�0023077�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-20111211-stable/modules/areadlinkat����������������������������������������������������������0000664�0000000�0000000�00000000656�11671051007�0020353�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 dosname errno extensions fchdir fcntl-h 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-20111211-stable/modules/areadlinkat-tests����������������������������������������������������0000664�0000000�0000000�00000000366�11671051007�0021511�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-20111211-stable/modules/areadlinkat-with-size������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022273�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 dosname errno extensions fchdir fcntl-h 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-20111211-stable/modules/areadlinkat-with-size-tests������������������������������������������0000664�0000000�0000000�00000000426�11671051007�0023427�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-20111211-stable/modules/argmatch�������������������������������������������������������������0000664�0000000�0000000�00000000477�11671051007�0017663�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: gettext-h error quotearg quote exitfail verify stdbool stdlib memcmp configure.ac: Makefile.am: lib_SOURCES += argmatch.c Include: "argmatch.h" License: GPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/argmatch-tests�������������������������������������������������������0000664�0000000�0000000�00000000300�11671051007�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-argmatch.c tests/macros.h Depends-on: progname configure.ac: Makefile.am: TESTS += test-argmatch check_PROGRAMS += test-argmatch test_argmatch_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/argp�����������������������������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0017016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Hierarchical processing of command line arguments. Notice: If you are using GNU gettext version 0.16.1 or older, add the following options to XGETTEXT_OPTIONS in your po/Makevars: --flag=argp_error:2:c-format --flag=argp_failure:4:c-format 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 dirname-lgpl getopt-gnu strchrnul sysexits malloc-gnu mempcpy strndup strcase extensions vsnprintf sleep stdalign 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-20111211-stable/modules/argp-tests�����������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-argp.c tests/test-argp-2.sh Depends-on: progname Makefile.am: TESTS += test-argp test-argp-2.sh check_PROGRAMS += test-argp test_argp_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/argp-version-etc�����������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0021250�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-20111211-stable/modules/argp-version-etc-tests�����������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0022410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-argp-version-etc.c tests/test-argp-version-etc-1.sh Depends-on: argp progname 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-20111211-stable/modules/argv-iter������������������������������������������������������������0000664�0000000�0000000�00000000443�11671051007�0017766�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-20111211-stable/modules/argv-iter-tests������������������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0021117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-argv-iter.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-argv-iter check_PROGRAMS += test-argv-iter ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/argz�����������������������������������������������������������������0000664�0000000�0000000�00000001673�11671051007�0017037�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-20111211-stable/modules/arpa_inet������������������������������������������������������������0000664�0000000�0000000�00000003370�11671051007�0020032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <arpa/inet.h>. Files: lib/arpa_inet.in.h m4/arpa_inet_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use sys_socket configure.ac: gl_HEADER_ARPA_INET 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_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-20111211-stable/modules/arpa_inet-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0021540�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-20111211-stable/modules/arpa_inet-tests������������������������������������������������������0000664�0000000�0000000�00000000225�11671051007�0021166�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-20111211-stable/modules/array-list�����������������������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0020152�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 xsize configure.ac: Makefile.am: lib_SOURCES += gl_array_list.h gl_array_list.c Include: "gl_array_list.h" License: GPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/array-list-tests�����������������������������������������������������0000664�0000000�0000000�00000000235�11671051007�0021314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-array_list.c tests/macros.h Depends-on: progname configure.ac: Makefile.am: TESTS += test-array_list check_PROGRAMS += test-array_list �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/array-mergesort������������������������������������������������������0000664�0000000�0000000�00000000300�11671051007�0021201�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/array-mergesort-tests������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0022346�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-20111211-stable/modules/array-oset�����������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0020154�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: GPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/array-oset-tests�����������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0021310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-array_oset.c tests/macros.h Depends-on: xlist array-list progname configure.ac: Makefile.am: TESTS += test-array_oset check_PROGRAMS += test-array_oset test_array_oset_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/asin�����������������������������������������������������������������0000664�0000000�0000000�00000000336�11671051007�0017021�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/asin-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020160�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-20111211-stable/modules/asinf����������������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: asinf() function: inverse sine function. Files: lib/asinf.c m4/asinf.m4 Depends-on: math 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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/asinf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020333�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-20111211-stable/modules/asinl����������������������������������������������������������������0000664�0000000�0000000�00000001012�11671051007�0017165�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-20111211-stable/modules/asinl-tests����������������������������������������������������������0000664�0000000�0000000�00000000305�11671051007�0020331�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-20111211-stable/modules/assert���������������������������������������������������������������0000664�0000000�0000000�00000000344�11671051007�0017367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allow the installer to disable assertions through "configure --disable-assert". Files: m4/assert.m4 Depends-on: configure.ac: gl_ASSERT Makefile.am: Include: <assert.h> License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/assert-h�������������������������������������������������������������0000664�0000000�0000000�00000002300�11671051007�0017606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An <assert.h> that conforms to C1X. 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-20111211-stable/modules/astrxfrm�������������������������������������������������������������0000664�0000000�0000000�00000000356�11671051007�0017737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locale dependent string transformation for comparison. Files: lib/astrxfrm.h lib/astrxfrm.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += astrxfrm.c Include: "astrxfrm.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/astrxfrm-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�11671051007�0021071�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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/at-internal����������������������������������������������������������0000664�0000000�0000000�00000000471�11671051007�0020305�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 sys_stat unistd configure.ac: AC_LIBOBJ([openat-proc]) Makefile.am: Include: "openat-priv.h" License: GPL Maintainer: Jim Meyering, Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/atan�����������������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0017006�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/atan-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020151�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-20111211-stable/modules/atan2����������������������������������������������������������������0000664�0000000�0000000�00000000352�11671051007�0017072�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/atan2-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020240�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-20111211-stable/modules/atan2f���������������������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0017245�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 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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/atan2f-tests���������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0020375�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-20111211-stable/modules/atanf����������������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0017163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atanf() function: inverse tangent function. Files: lib/atanf.c m4/atanf.m4 Depends-on: math 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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/atanf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020324�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-20111211-stable/modules/atanl����������������������������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0017161�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-20111211-stable/modules/atanl-tests����������������������������������������������������������0000664�0000000�0000000�00000000305�11671051007�0020322�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-20111211-stable/modules/atexit���������������������������������������������������������������0000664�0000000�0000000�00000000601�11671051007�0017360�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-20111211-stable/modules/atexit-tests���������������������������������������������������������0000664�0000000�0000000�00000000267�11671051007�0020530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh tests/signature.h tests/test-atexit.sh tests/test-atexit.c Depends-on: unistd configure.ac: Makefile.am: TESTS += test-atexit.sh check_PROGRAMS += test-atexit �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/atoll����������������������������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0017200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: atoll() function: convert decimal string string to 'long long'. Files: lib/atoll.c m4/atoll.m4 m4/longlong.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-20111211-stable/modules/autobuild������������������������������������������������������������0000664�0000000�0000000�00000000365�11671051007�0020061�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-20111211-stable/modules/avltree-list���������������������������������������������������������0000664�0000000�0000000�00000000726�11671051007�0020505�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: GPL Maintainer: Bruno Haible ������������������������������������������gnulib-20111211-stable/modules/avltree-list-tests���������������������������������������������������0000664�0000000�0000000�00000000255�11671051007�0021642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-avltree_list.c tests/macros.h Depends-on: array-list progname configure.ac: Makefile.am: TESTS += test-avltree_list check_PROGRAMS += test-avltree_list ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/avltree-oset���������������������������������������������������������0000664�0000000�0000000�00000000506�11671051007�0020500�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_anytree_oset.h Depends-on: oset configure.ac: Makefile.am: lib_SOURCES += gl_avltree_oset.h gl_avltree_oset.c gl_anytree_oset.h Include: "gl_avltree_oset.h" License: GPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/avltree-oset-tests���������������������������������������������������0000664�0000000�0000000�00000000255�11671051007�0021641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-avltree_oset.c tests/macros.h Depends-on: array-oset progname configure.ac: Makefile.am: TESTS += test-avltree_oset check_PROGRAMS += test-avltree_oset ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/avltreehash-list�����������������������������������������������������0000664�0000000�0000000�00000001316�11671051007�0021345�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_anyhash_list1.h lib/gl_anyhash_list2.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: list avltree-oset stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_avltreehash_list.h gl_avltreehash_list.c gl_anyhash_list1.h gl_anyhash_list2.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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/avltreehash-list-tests�����������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0022505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-avltreehash_list.c tests/macros.h Depends-on: array-list progname configure.ac: Makefile.am: TESTS += test-avltreehash_list check_PROGRAMS += test-avltreehash_list ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/backupfile�����������������������������������������������������������0000664�0000000�0000000�00000000624�11671051007�0020174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determination of the filename of a backup file, according to user environment variables. Files: lib/backupfile.h lib/backupfile.c m4/backupfile.m4 Depends-on: argmatch closedir d-ino dirent-safer dirname-lgpl memcmp opendir readdir stdbool configure.ac: gl_BACKUPFILE Makefile.am: lib_SOURCES += backupfile.c Include: "backupfile.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/base32���������������������������������������������������������������0000664�0000000�0000000�00000000426�11671051007�0017146�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-20111211-stable/modules/base32-tests���������������������������������������������������������0000664�0000000�0000000�00000000207�11671051007�0020303�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-20111211-stable/modules/base64���������������������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0017150�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-20111211-stable/modules/base64-tests���������������������������������������������������������0000664�0000000�0000000�00000000207�11671051007�0020310�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-20111211-stable/modules/bcopy����������������������������������������������������������������0000664�0000000�0000000�00000000311�11671051007�0017174�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-20111211-stable/modules/binary-io������������������������������������������������������������0000664�0000000�0000000�00000000310�11671051007�0017750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Binary mode I/O. Files: lib/binary-io.h Depends-on: fcntl-h configure.ac: Makefile.am: lib_SOURCES += binary-io.h Include: "binary-io.h" License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/binary-io-tests������������������������������������������������������0000664�0000000�0000000�00000000254�11671051007�0021117�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-20111211-stable/modules/bind�����������������������������������������������������������������0000664�0000000�0000000�00000001011�11671051007�0016772�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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/bind-tests�����������������������������������������������������������0000664�0000000�0000000�00000000350�11671051007�0020137�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-20111211-stable/modules/bison-i18n�����������������������������������������������������������0000664�0000000�0000000�00000000355�11671051007�0017757�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: Bruno Haible, Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/bitrotate������������������������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Rotate bits in unsigned 8, 16, and 32 bit integers. Files: lib/bitrotate.h Depends-on: stdint configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += bitrotate.h Include: "bitrotate.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/bitrotate-tests������������������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0021214�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-20111211-stable/modules/btowc����������������������������������������������������������������0000664�0000000�0000000�00000000703�11671051007�0017203�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: Bruno Haible �������������������������������������������������������������gnulib-20111211-stable/modules/btowc-tests����������������������������������������������������������0000664�0000000�0000000�00000000552�11671051007�0020345�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 ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/byteswap�������������������������������������������������������������0000664�0000000�0000000�00000001253�11671051007�0017724�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-20111211-stable/modules/byteswap-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�11671051007�0021061�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-20111211-stable/modules/c-ctype��������������������������������������������������������������0000664�0000000�0000000�00000000351�11671051007�0017430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Character handling in C locale. Files: lib/c-ctype.h lib/c-ctype.c Depends-on: stdbool configure.ac: Makefile.am: lib_SOURCES += c-ctype.h c-ctype.c Include: "c-ctype.h" License: LGPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-ctype-tests��������������������������������������������������������0000664�0000000�0000000�00000000213�11671051007�0020565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-c-ctype.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-c-ctype check_PROGRAMS += test-c-ctype �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-stack��������������������������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0017413�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: gettext-h errno exitfail ignore-value unistd raise sigaction libsigsegv 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 License: GPL Maintainer: Paul Eggert �������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-stack-tests��������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0020553�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-20111211-stable/modules/c-strcase������������������������������������������������������������0000664�0000000�0000000�00000000467�11671051007�0017760�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-strcase-tests������������������������������������������������������0000664�0000000�0000000�00000000605�11671051007�0021112�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: 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 ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-strcaseeq����������������������������������������������������������0000664�0000000�0000000�00000000344�11671051007�0020300�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-strcasestr���������������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0020501�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-strcasestr-tests���������������������������������������������������0000664�0000000�0000000�00000000232�11671051007�0021637�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-20111211-stable/modules/c-strstr�������������������������������������������������������������0000664�0000000�0000000�00000000372�11671051007�0017650�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-strstr-tests�������������������������������������������������������0000664�0000000�0000000�00000000216�11671051007�0021005�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-20111211-stable/modules/c-strtod�������������������������������������������������������������0000664�0000000�0000000�00000000443�11671051007�0017625�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 Depends-on: extensions locale strdup-posix configure.ac: gl_C_STRTOD Makefile.am: lib_SOURCES += c-strtod.c Include: "c-strtod.h" License: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/c-strtold������������������������������������������������������������0000664�0000000�0000000�00000000472�11671051007�0020003�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 Depends-on: extensions locale strdup-posix configure.ac: gl_C_STRTOLD Makefile.am: lib_SOURCES += c-strtold.c Include: "c-strtod.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/calloc���������������������������������������������������������������0000664�0000000�0000000�00000000420�11671051007�0017316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: calloc() function that is glibc compatible. Status: deprecated Notice: This module is deprecated. Use the module 'calloc-gnu' instead. Files: Depends-on: calloc-gnu configure.ac: Makefile.am: Include: <stdlib.h> License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/calloc-gnu�����������������������������������������������������������0000664�0000000�0000000�00000000477�11671051007�0020121�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 gl_MODULE_INDICATOR([calloc-gnu]) Makefile.am: Include: <stdlib.h> License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/calloc-gnu-tests�����������������������������������������������������0000664�0000000�0000000�00000000204�11671051007�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-calloc-gnu.c Depends-on: configure.ac: Makefile.am: TESTS += test-calloc-gnu check_PROGRAMS += test-calloc-gnu ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/calloc-posix���������������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0020466�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 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/canon-host�����������������������������������������������������������0000664�0000000�0000000�00000000601�11671051007�0020133�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" Link: $(GETADDRINFO_LIB) License: LGPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/canonicalize���������������������������������������������������������0000664�0000000�0000000�00000001077�11671051007�0020531�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/double-slash-root.m4 Depends-on: areadlink-with-size errno extensions file-set hash-triple lstat memmove nocrash pathmax sys_stat xalloc xgetcwd 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-20111211-stable/modules/canonicalize-lgpl����������������������������������������������������0000664�0000000�0000000�00000002532�11671051007�0021462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: realpath, canonical_file_name: Provide canonical absolute file name Files: lib/canonicalize-lgpl.c m4/canonicalize.m4 m4/double-slash-root.m4 Depends-on: extensions stdlib nocrash alloca-opt [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] lstat [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1] malloca [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] pathmax [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] sys_stat [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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/canonicalize-lgpl-tests����������������������������������������������0000664�0000000�0000000�00000000332�11671051007�0022616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-canonicalize-lgpl.c tests/signature.h tests/macros.h Depends-on: ignore-value same-inode symlink configure.ac: Makefile.am: TESTS += test-canonicalize-lgpl check_PROGRAMS += test-canonicalize-lgpl ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/canonicalize-tests���������������������������������������������������0000664�0000000�0000000�00000000346�11671051007�0021667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-canonicalize.c 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-20111211-stable/modules/careadlinkat���������������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0020514�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 readlink ssize_t unistd configure.ac: AC_CHECK_FUNCS_ONCE([readlinkat]) Makefile.am: lib_SOURCES += careadlinkat.c Include: "careadlinkat.h" License: LGPLv2+ Maintainer: Paul Eggert, Bruno Haible, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/carray-list����������������������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0020323�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 xsize configure.ac: Makefile.am: lib_SOURCES += gl_carray_list.h gl_carray_list.c Include: "gl_carray_list.h" License: GPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/carray-list-tests����������������������������������������������������0000664�0000000�0000000�00000000253�11671051007�0021457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-carray_list.c tests/macros.h Depends-on: array-list progname configure.ac: Makefile.am: TESTS += test-carray_list check_PROGRAMS += test-carray_list �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cbrt�����������������������������������������������������������������0000664�0000000�0000000�00000000334�11671051007�0017017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cbrt() function: cube root. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([cbrt]) Makefile.am: Include: <math.h> Link: $(CBRT_LIBM) License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cbrt-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cbrt.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-cbrt check_PROGRAMS += test-cbrt test_cbrt_LDADD = $(LDADD) @CBRT_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceil�����������������������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0017004�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceil-ieee������������������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0017704�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceil-ieee-tests������������������������������������������������������0000664�0000000�0000000�00000000335�11671051007�0021047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceil-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-ceil-ieee check_PROGRAMS += test-ceil-ieee test_ceil_ieee_LDADD = $(LDADD) @CEIL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceil-tests�����������������������������������������������������������0000664�0000000�0000000�00000000542�11671051007�0020142�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-20111211-stable/modules/ceilf����������������������������������������������������������������0000664�0000000�0000000�00000000704�11671051007�0017150�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: Bruno Haible ������������������������������������������������������������gnulib-20111211-stable/modules/ceilf-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000420�11671051007�0020050�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceilf-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000342�11671051007�0021213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceilf-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-ceilf-ieee check_PROGRAMS += test-ceilf-ieee test_ceilf_ieee_LDADD = $(LDADD) @CEILF_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceilf-tests����������������������������������������������������������0000664�0000000�0000000�00000000554�11671051007�0020313�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-20111211-stable/modules/ceill����������������������������������������������������������������0000664�0000000�0000000�00000001157�11671051007�0017161�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceill-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000420�11671051007�0020056�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceill-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000350�11671051007�0021220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ceill-ieee.c tests/minus-zero.h tests/macros.h Depends-on: fpucw float signbit configure.ac: Makefile.am: TESTS += test-ceill-ieee check_PROGRAMS += test-ceill-ieee test_ceill_ieee_LDADD = $(LDADD) @CEILL_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ceill-tests����������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0020311�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-20111211-stable/modules/chdir����������������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0017154�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/chdir-long�����������������������������������������������������������0000664�0000000�0000000�00000002067�11671051007�0020120�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 atexit [test $gl_cv_have_arbitrary_file_name_length_limit = yes] fchdir [test $gl_cv_have_arbitrary_file_name_length_limit = yes] fcntl-h [test $gl_cv_have_arbitrary_file_name_length_limit = yes] openat [test $gl_cv_have_arbitrary_file_name_length_limit = yes] memchr [test $gl_cv_have_arbitrary_file_name_length_limit = yes] mempcpy [test $gl_cv_have_arbitrary_file_name_length_limit = yes] memrchr [test $gl_cv_have_arbitrary_file_name_length_limit = yes] stdbool [test $gl_cv_have_arbitrary_file_name_length_limit = yes] stdlib [test $gl_cv_have_arbitrary_file_name_length_limit = yes] configure.ac: gl_FUNC_CHDIR_LONG if test $gl_cv_have_arbitrary_file_name_length_limit = yes; then AC_LIBOBJ([chdir-long]) gl_PREREQ_CHDIR_LONG fi Makefile.am: Include: "chdir-long.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/chdir-safer����������������������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: like chdir, but safer Files: lib/chdir-safer.h lib/chdir-safer.c m4/chdir-safer.m4 Depends-on: errno fchdir fcntl-h fstat open same-inode stdbool configure.ac: gl_CHDIR_SAFER Makefile.am: lib_SOURCES += chdir-safer.c Include: "chdir-safer.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/chdir-tests����������������������������������������������������������0000664�0000000�0000000�00000000226�11671051007�0020316�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-20111211-stable/modules/check-version��������������������������������������������������������0000664�0000000�0000000�00000000400�11671051007�0020617�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-20111211-stable/modules/chown����������������������������������������������������������������0000664�0000000�0000000�00000001437�11671051007�0017210�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-20111211-stable/modules/chown-tests����������������������������������������������������������0000664�0000000�0000000�00000000423�11671051007�0020342�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 lstat mgetgroups usleep stat-time stdbool symlink configure.ac: AC_CHECK_FUNCS_ONCE([getegid]) Makefile.am: TESTS += test-chown check_PROGRAMS += test-chown ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/classpath������������������������������������������������������������0000664�0000000�0000000�00000000367�11671051007�0020055�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/clean-temp�����������������������������������������������������������0000664�0000000�0000000�00000000714�11671051007�0020114�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: stdbool unistd error fatal-signal open pathmax tmpdir mkdtemp rmdir xalloc xmalloca linkedhash-list xlist gettext-h configure.ac: AC_DEFINE([SIGNAL_SAFE_LIST], [1], [Define if lists must be signal-safe.]) Makefile.am: lib_SOURCES += clean-temp.h clean-temp.c Include: "clean-temp.h" License: GPL Maintainer: Bruno Haible ����������������������������������������������������gnulib-20111211-stable/modules/clock-time�����������������������������������������������������������0000664�0000000�0000000�00000000363�11671051007�0020116�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-20111211-stable/modules/cloexec��������������������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0017514�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-20111211-stable/modules/cloexec-tests��������������������������������������������������������0000664�0000000�0000000�00000000241�11671051007�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-cloexec.c tests/macros.h Depends-on: binary-io msvc-nothrow configure.ac: Makefile.am: TESTS += test-cloexec check_PROGRAMS += test-cloexec ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/close����������������������������������������������������������������0000664�0000000�0000000�00000000650�11671051007�0017173�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, Bruno Haible ����������������������������������������������������������������������������������������gnulib-20111211-stable/modules/close-stream���������������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0020467�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 m4/close-stream.m4 Depends-on: fpending stdbool configure.ac: gl_CLOSE_STREAM gl_MODULE_INDICATOR([close-stream]) Makefile.am: lib_SOURCES += close-stream.c Include: "close-stream.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/close-tests����������������������������������������������������������0000664�0000000�0000000�00000000226�11671051007�0020332�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-20111211-stable/modules/closedir�������������������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0017673�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 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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/closein��������������������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0017522�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 m4/closein.m4 Depends-on: closeout freadahead fflush stdbool configure.ac: gl_CLOSEIN Makefile.am: lib_SOURCES += closein.c Include: "closein.h" License: GPL Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/closein-tests��������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0020657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh tests/test-closein.sh tests/test-closein.c Depends-on: binary-io ignore-value configure.ac: Makefile.am: TESTS += test-closein.sh check_PROGRAMS += test-closein test_closein_LDADD = $(LDADD) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/closeout�������������������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0017725�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 m4/closeout.m4 Depends-on: close-stream gettext-h error quotearg exitfail stdbool configure.ac: gl_CLOSEOUT Makefile.am: lib_SOURCES += closeout.c Include: "closeout.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/concat-filename������������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0021113�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cond�����������������������������������������������������������������0000664�0000000�0000000�00000000521�11671051007�0017006�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 stdbool time gettimeofday configure.ac: gl_COND Makefile.am: lib_SOURCES += glthread/cond.h glthread/cond.c Include: "glthread/cond.h" License: LGPLv2+ Maintainer: Yoann Vandoorselaere �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cond-tests�����������������������������������������������������������0000664�0000000�0000000�00000000300�11671051007�0020141�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-20111211-stable/modules/config-h�������������������������������������������������������������0000664�0000000�0000000�00000000345�11671051007�0017561�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-20111211-stable/modules/configmake�����������������������������������������������������������0000664�0000000�0000000�00000003606�11671051007�0020175�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+. # 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 '#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 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: /* Include only after all system include files. */ "configmake.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/connect��������������������������������������������������������������0000664�0000000�0000000�00000001016�11671051007�0017514�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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/connect-tests��������������������������������������������������������0000664�0000000�0000000�00000000364�11671051007�0020661�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-20111211-stable/modules/copy-file������������������������������������������������������������0000664�0000000�0000000�00000000510�11671051007�0017750�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 binary-io error fstat full-write gettext-h open safe-read stdlib unistd xalloc configure.ac: gl_COPY_FILE Makefile.am: lib_SOURCES += copy-file.h copy-file.c Include: "copy-file.h" License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/copy-file-tests������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0021115�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 progname read-file xalloc 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) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/copysign�������������������������������������������������������������0000664�0000000�0000000�00000000636�11671051007�0017725�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: Bruno Haible ��������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/copysign-tests�������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0021056�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-20111211-stable/modules/copysignf������������������������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0020074�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 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: Bruno Haible ������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/copysignf-tests������������������������������������������������������0000664�0000000�0000000�00000000346�11671051007�0021231�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-20111211-stable/modules/copysignl������������������������������������������������������������0000664�0000000�0000000�00000001061�11671051007�0020072�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 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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/copysignl-tests������������������������������������������������������0000664�0000000�0000000�00000000346�11671051007�0021237�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-20111211-stable/modules/cos������������������������������������������������������������������0000664�0000000�0000000�00000000324�11671051007�0016650�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cos-tests������������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020014�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-20111211-stable/modules/cosf�����������������������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0017020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: cosf() function: cosine function. Files: lib/cosf.c m4/cosf.m4 Depends-on: math 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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cosf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020160�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-20111211-stable/modules/cosh�����������������������������������������������������������������0000664�0000000�0000000�00000000343�11671051007�0017021�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cosh-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020162�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-20111211-stable/modules/coshf����������������������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: coshf() function: hyperbolic cosine function. Files: lib/coshf.c m4/coshf.m4 Depends-on: math 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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/coshf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020335�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-20111211-stable/modules/cosl�����������������������������������������������������������������0000664�0000000�0000000�00000001604�11671051007�0017026�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: $(ACOSL_LIBM) License: LGPL Maintainer: Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cosl-tests�����������������������������������������������������������0000664�0000000�0000000�00000000300�11671051007�0020156�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-20111211-stable/modules/count-one-bits�������������������������������������������������������0000664�0000000�0000000�00000000357�11671051007�0020740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Counts the number of 1-bits in a word. Files: lib/count-one-bits.h m4/count-one-bits.m4 Depends-on: verify configure.ac: gl_COUNT_ONE_BITS Makefile.am: Include: "count-one-bits.h" License: LGPLv2+ Maintainer: Ben Pfaff ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/count-one-bits-tests�������������������������������������������������0000664�0000000�0000000�00000000237�11671051007�0022075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-count-one-bits.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-count-one-bits check_PROGRAMS += test-count-one-bits �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crc������������������������������������������������������������������0000664�0000000�0000000�00000000316�11671051007�0016634�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-20111211-stable/modules/crc-tests������������������������������������������������������������0000664�0000000�0000000�00000000157�11671051007�0017777�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-20111211-stable/modules/crypto/��������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017462�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/arcfour�������������������������������������������������������0000664�0000000�0000000�00000000345�11671051007�0021050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ARCFOUR stream cipher implementation Files: lib/arcfour.h lib/arcfour.c Depends-on: stdint configure.ac: Makefile.am: lib_SOURCES += arcfour.c Include: "arcfour.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/arcfour-tests�������������������������������������������������0000664�0000000�0000000�00000000173�11671051007�0022207�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-20111211-stable/modules/crypto/arctwo��������������������������������������������������������0000664�0000000�0000000�00000000400�11671051007�0020676�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: gl_ARCTWO Makefile.am: lib_SOURCES += arctwo.c Include: "arctwo.h" License: LGPLv2+ Maintainer: Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/arctwo-tests��������������������������������������������������0000664�0000000�0000000�00000000170�11671051007�0022042�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-20111211-stable/modules/crypto/des�����������������������������������������������������������0000664�0000000�0000000�00000000321�11671051007�0020154�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-20111211-stable/modules/crypto/des-tests�����������������������������������������������������0000664�0000000�0000000�00000000157�11671051007�0021323�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-20111211-stable/modules/crypto/gc������������������������������������������������������������0000664�0000000�0000000�00000000777�11671051007�0020011�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 Depends-on: havelib 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-20111211-stable/modules/crypto/gc-arcfour����������������������������������������������������0000664�0000000�0000000�00000000455�11671051007�0021441�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-20111211-stable/modules/crypto/gc-arcfour-tests����������������������������������������������0000664�0000000�0000000�00000000204�11671051007�0022571�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-20111211-stable/modules/crypto/gc-arctwo�����������������������������������������������������0000664�0000000�0000000�00000000447�11671051007�0021300�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-20111211-stable/modules/crypto/gc-arctwo-tests�����������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0022424�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-20111211-stable/modules/crypto/gc-camellia���������������������������������������������������0000664�0000000�0000000�00000000335�11671051007�0021544�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-20111211-stable/modules/crypto/gc-des��������������������������������������������������������0000664�0000000�0000000�00000000430�11671051007�0020544�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-20111211-stable/modules/crypto/gc-des-tests��������������������������������������������������0000664�0000000�0000000�00000000170�11671051007�0021705�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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-hmac-md5���������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0021374�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-20111211-stable/modules/crypto/gc-hmac-md5-tests���������������������������������������������0000664�0000000�0000000�00000000207�11671051007�0022526�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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-hmac-sha1��������������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0021541�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-20111211-stable/modules/crypto/gc-hmac-sha1-tests��������������������������������������������0000664�0000000�0000000�00000000212�11671051007�0022671�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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-md2��������������������������������������������������������0000664�0000000�0000000�00000000364�11671051007�0020461�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-20111211-stable/modules/crypto/gc-md2-tests��������������������������������������������������0000664�0000000�0000000�00000000170�11671051007�0021614�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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-md4��������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0020461�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-20111211-stable/modules/crypto/gc-md4-tests��������������������������������������������������0000664�0000000�0000000�00000000170�11671051007�0021616�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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-md5��������������������������������������������������������0000664�0000000�0000000�00000000452�11671051007�0020462�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-20111211-stable/modules/crypto/gc-md5-tests��������������������������������������������������0000664�0000000�0000000�00000000170�11671051007�0021617�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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-pbkdf2-sha1������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0021777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Password-Based Key Derivation Function according to PKCS#5/RFC2898 Files: lib/gc-pbkdf2-sha1.c Depends-on: crypto/gc crypto/gc-hmac-sha1 configure.ac: Makefile.am: lib_SOURCES += gc-pbkdf2-sha1.c Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-pbkdf2-sha1-tests������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0023130�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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-random�����������������������������������������������������0000664�0000000�0000000�00000000357�11671051007�0021261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generic crypto random number functions. Files: m4/gc-random.m4 Depends-on: crypto/gc configure.ac: gl_GC_RANDOM gl_MODULE_INDICATOR([gc-random]) Makefile.am: Include: "gc.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-rijndael���������������������������������������������������0000664�0000000�0000000�00000000461�11671051007�0021565�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-20111211-stable/modules/crypto/gc-rijndael-tests���������������������������������������������0000664�0000000�0000000�00000000207�11671051007�0022723�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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-sha1�������������������������������������������������������0000664�0000000�0000000�00000000433�11671051007�0020630�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-20111211-stable/modules/crypto/gc-sha1-tests�������������������������������������������������0000664�0000000�0000000�00000000173�11671051007�0021771�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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/gc-tests������������������������������������������������������0000664�0000000�0000000�00000000154�11671051007�0021136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-gc.c Depends-on: configure.ac: Makefile.am: TESTS += test-gc check_PROGRAMS += test-gc ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/hmac-md5������������������������������������������������������0000664�0000000�0000000�00000000375�11671051007�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute hashed message authentication codes with MD5. Files: lib/hmac.h lib/hmac-md5.c Depends-on: memxor crypto/md5 configure.ac: Makefile.am: lib_SOURCES += hmac-md5.c Include: "hmac.h" License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/hmac-md5-tests������������������������������������������������0000664�0000000�0000000�00000000176�11671051007�0022144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hmac-md5.c Depends-on: configure.ac: Makefile.am: TESTS += test-hmac-md5 check_PROGRAMS += test-hmac-md5 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/hmac-sha1�����������������������������������������������������0000664�0000000�0000000�00000000401�11671051007�0021142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute hashed message authentication codes with SHA1. Files: lib/hmac.h lib/hmac-sha1.c Depends-on: memxor crypto/sha1 configure.ac: Makefile.am: lib_SOURCES += hmac-sha1.c Include: "hmac.h" License: LGPLv2+ Maintainer: Simon Josefsson ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/hmac-sha1-tests�����������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0022300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hmac-sha1.c Depends-on: configure.ac: Makefile.am: TESTS += test-hmac-sha1 check_PROGRAMS += test-hmac-sha1 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/md2�����������������������������������������������������������0000664�0000000�0000000�00000000306�11671051007�0020066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute MD2 checksum. Files: lib/md2.h lib/md2.c Depends-on: minmax configure.ac: Makefile.am: lib_SOURCES += md2.c Include: "md2.h" License: LGPLv2+ Maintainer: Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/md2-tests�����������������������������������������������������0000664�0000000�0000000�00000000157�11671051007�0021232�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-20111211-stable/modules/crypto/md4�����������������������������������������������������������0000664�0000000�0000000�00000000340�11671051007�0020066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute MD4 checksum. Files: lib/md4.h lib/md4.c m4/md4.m4 Depends-on: stdalign stdint configure.ac: gl_MD4 Makefile.am: lib_SOURCES += md4.c Include: "md4.h" License: LGPLv2+ Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/md4-tests�����������������������������������������������������0000664�0000000�0000000�00000000157�11671051007�0021234�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-20111211-stable/modules/crypto/md5�����������������������������������������������������������0000664�0000000�0000000�00000000344�11671051007�0020073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute MD5 checksum. Files: lib/md5.h lib/md5.c m4/md5.m4 Depends-on: stdalign stdint configure.ac: gl_MD5 Makefile.am: lib_SOURCES += md5.c Include: "md5.h" License: LGPLv2+ Maintainer: Jim Meyering, glibc ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/md5-tests�����������������������������������������������������0000664�0000000�0000000�00000000157�11671051007�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-md5.c Depends-on: configure.ac: Makefile.am: TESTS += test-md5 check_PROGRAMS += test-md5 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/rijndael������������������������������������������������������0000664�0000000�0000000�00000000521�11671051007�0021173�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: 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-20111211-stable/modules/crypto/rijndael-tests������������������������������������������������0000664�0000000�0000000�00000000176�11671051007�0022341�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-20111211-stable/modules/crypto/sha1����������������������������������������������������������0000664�0000000�0000000�00000000344�11671051007�0020242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA1 checksum. Files: lib/sha1.h lib/sha1.c m4/sha1.m4 Depends-on: stdalign stdint configure.ac: gl_SHA1 Makefile.am: lib_SOURCES += sha1.c Include: "sha1.h" License: LGPLv2+ Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/sha1-tests����������������������������������������������������0000664�0000000�0000000�00000000162�11671051007�0021400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sha1.c Depends-on: configure.ac: Makefile.am: TESTS += test-sha1 check_PROGRAMS += test-sha1 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/sha256��������������������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0020423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA224 and SHA256 checksums. Files: lib/sha256.h lib/sha256.c m4/sha256.m4 Depends-on: stdalign stdint configure.ac: gl_SHA256 Makefile.am: lib_SOURCES += sha256.c Include: "sha256.h" License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/crypto/sha512��������������������������������������������������������0000664�0000000�0000000�00000000402�11671051007�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute SHA384 and SHA512 checksums. Files: lib/sha512.h lib/sha512.c m4/sha512.m4 Depends-on: stdalign stdint u64 configure.ac: gl_SHA512 Makefile.am: lib_SOURCES += sha512.c Include: "sha512.h" License: LGPLv2+ Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/csharpcomp�����������������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0020227�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" License: GPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/csharpcomp-script����������������������������������������������������0000664�0000000�0000000�00000000445�11671051007�0021531�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/csharpexec�����������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0020215�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" License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/csharpexec-script����������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0021513�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ctype����������������������������������������������������������������0000664�0000000�0000000�00000002252�11671051007�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <ctype.h> that conforms to C99. Files: lib/ctype.in.h m4/ctype.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_CTYPE_H 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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ctype-tests����������������������������������������������������������0000664�0000000�0000000�00000000165�11671051007�0020353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ctype.c Depends-on: configure.ac: Makefile.am: TESTS += test-ctype check_PROGRAMS += test-ctype �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/cycle-check����������������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0020244�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: 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-20111211-stable/modules/d-ino����������������������������������������������������������������0000664�0000000�0000000�00000000325�11671051007�0017073�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: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/d-type���������������������������������������������������������������0000664�0000000�0000000�00000000334�11671051007�0017267�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-20111211-stable/modules/dev-ino��������������������������������������������������������������0000664�0000000�0000000�00000000263�11671051007�0017427�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-20111211-stable/modules/di-set���������������������������������������������������������������0000664�0000000�0000000�00000000366�11671051007�0017257�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-20111211-stable/modules/di-set-tests���������������������������������������������������������0000664�0000000�0000000�00000000207�11671051007�0020411�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-20111211-stable/modules/diacrit��������������������������������������������������������������0000664�0000000�0000000�00000000356�11671051007�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Decomposition of composed ISO-8859-1 characters. Files: lib/diacrit.h lib/diacrit.c Depends-on: configure.ac: Makefile.am: lib_SOURCES += diacrit.h diacrit.c Include: "diacrit.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/diffseq��������������������������������������������������������������0000664�0000000�0000000�00000000337�11671051007�0017511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compute the difference between two sequences. Files: lib/diffseq.h Depends-on: configure.ac: Makefile.am: lib_SOURCES += diffseq.h Include: "diffseq.h" License: GPL Maintainer: Paul Eggert, Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dirent���������������������������������������������������������������0000664�0000000�0000000�00000004641�11671051007�0017357�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 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_DIRENT_H 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-20111211-stable/modules/dirent-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000461�11671051007�0021061�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-20111211-stable/modules/dirent-safer���������������������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0020446�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 opendir unistd-safer 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-20111211-stable/modules/dirent-safer-tests���������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0021613�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-20111211-stable/modules/dirent-tests���������������������������������������������������������0000664�0000000�0000000�00000000211�11671051007�0020504�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-20111211-stable/modules/dirfd����������������������������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0017165�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] configure.ac: gl_FUNC_DIRFD if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no; then AC_LIBOBJ([dirfd]) gl_PREREQ_DIRFD fi gl_DIRENT_MODULE_INDICATOR([dirfd]) Makefile.am: Include: <dirent.h> License: LGPLv2+ Maintainer: Jim Meyering ������������������gnulib-20111211-stable/modules/dirname��������������������������������������������������������������0000664�0000000�0000000�00000000512�11671051007�0017502�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 xstrndup configure.ac: gl_DIRNAME gl_MODULE_INDICATOR([dirname]) Makefile.am: lib_SOURCES += dirname.c basename.c Include: "dirname.h" License: GPL Maintainer: Jim Meyering, Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dirname-lgpl���������������������������������������������������������0000664�0000000�0000000�00000000603�11671051007�0020437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Extract specific portions of filenames. Files: lib/dirname.h lib/dirname-lgpl.c lib/basename-lgpl.c lib/stripslash.c m4/dirname.m4 Depends-on: dosname double-slash-root malloc-posix stdbool configure.ac: gl_DIRNAME_LGPL Makefile.am: lib_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c Include: "dirname.h" License: LGPLv2+ Maintainer: Jim Meyering, Eric Blake �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dirname-tests��������������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0020643�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-20111211-stable/modules/do-release-commit-and-tag��������������������������������������������0000664�0000000�0000000�00000000314�11671051007�0022702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Automate the release-commit and tag process. Files: build-aux/do-release-commit-and-tag Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: coreutils ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dosname��������������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0017511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Macros for porting to systems with DOS-style file names. Files: lib/dosname.h Depends-on: configure.ac: Makefile.am: Include: "dosname.h" License: LGPLv2+ Maintainer: Eric Blake, Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/double-slash-root����������������������������������������������������0000664�0000000�0000000�00000000340�11671051007�0021425�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-20111211-stable/modules/dprintf��������������������������������������������������������������0000664�0000000�0000000�00000000773�11671051007�0017542�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] 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: Bruno Haible �����gnulib-20111211-stable/modules/dprintf-posix��������������������������������������������������������0000664�0000000�0000000�00000002366�11671051007�0020702�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dprintf-posix-tests��������������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0022034�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-20111211-stable/modules/dprintf-tests��������������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0020672�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-20111211-stable/modules/dtoastr��������������������������������������������������������������0000664�0000000�0000000�00000000427�11671051007�0017550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert double to accurate string. Files: lib/ftoastr.h lib/ftoastr.c lib/dtoastr.c m4/c-strtod.m4 Depends-on: intprops configure.ac: AC_REQUIRE([gl_C99_STRTOLD]) Makefile.am: lib_SOURCES += dtoastr.c Include: "ftoastr.h" License: GPL Maintainer: Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dtotimespec����������������������������������������������������������0000664�0000000�0000000�00000000357�11671051007�0020412�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-20111211-stable/modules/dummy����������������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0017215�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: LGPLv2+ Maintainer: all ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dup������������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0016656�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dup-tests������������������������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0020007�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-20111211-stable/modules/dup2�����������������������������������������������������������������0000664�0000000�0000000�00000000773�11671051007�0016746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: dup2() function: duplicate an open file descriptor. Files: lib/dup2.c m4/dup2.m4 Depends-on: unistd dup2-obsolete msvc-inval [test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1] msvc-nothrow [test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1] configure.ac: gl_FUNC_DUP2 if test $HAVE_DUP2 = 0 || 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-20111211-stable/modules/dup2-obsolete��������������������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0020551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: dup2() function for old platforms. Status: obsolete Notice: This module is obsolete. Files: m4/dup2-obsolete.m4 Depends-on: dup2 configure.ac: gl_FUNC_DUP2_OBSOLETE Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dup2-tests�����������������������������������������������������������0000664�0000000�0000000�00000000275�11671051007�0020103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dup2.c tests/signature.h tests/macros.h Depends-on: binary-io close fcntl-h msvc-nothrow open configure.ac: Makefile.am: TESTS += test-dup2 check_PROGRAMS += test-dup2 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dup3�����������������������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0016737�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: Bruno Haible, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/dup3-tests�����������������������������������������������������������0000664�0000000�0000000�00000000253�11671051007�0020100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-dup3.c tests/signature.h tests/macros.h Depends-on: msvc-nothrow open close configure.ac: Makefile.am: TESTS += test-dup3 check_PROGRAMS += test-dup3 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/duplocale������������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0020042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: duplocale() function: duplicate a locale object. Files: lib/duplocale.c m4/duplocale.m4 Depends-on: locale 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> License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/duplocale-tests������������������������������������������������������0000664�0000000�0000000�00000000303�11671051007�0021171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-duplocale.c tests/signature.h tests/macros.h Depends-on: configure.ac: AC_CHECK_FUNCS_ONCE([duplocale]) Makefile.am: TESTS += test-duplocale check_PROGRAMS += test-duplocale �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/eealloc��������������������������������������������������������������0000664�0000000�0000000�00000000353�11671051007�0017472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation with expensive empty allocations (glibc compatible). Files: lib/eealloc.h m4/eealloc.m4 Depends-on: configure.ac: gl_EEALLOC Makefile.am: Include: <eealloc.h> License: GPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/elisp-comp�����������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compile Emacs Lisp files. Files: build-aux/elisp-comp Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: Alexandre Duret-Lutz �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/environ��������������������������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0017545�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/environ-tests��������������������������������������������������������0000664�0000000�0000000�00000000174�11671051007�0020707�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-20111211-stable/modules/erf������������������������������������������������������������������0000664�0000000�0000000�00000000336�11671051007�0016643�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/erf-tests������������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020004�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-20111211-stable/modules/erfc�����������������������������������������������������������������0000664�0000000�0000000�00000000357�11671051007�0017011�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/erfc-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020145�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-20111211-stable/modules/errno����������������������������������������������������������������0000664�0000000�0000000�00000002451�11671051007�0017214�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/errno-tests����������������������������������������������������������0000664�0000000�0000000�00000000166�11671051007�0020355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-errno.c Depends-on: configure.ac: Makefile.am: TESTS += test-errno check_PROGRAMS += test-errno ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/error����������������������������������������������������������������0000664�0000000�0000000�00000001433�11671051007�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: error and error_at_line functions: Error reporting. Notice: If you are using GNU gettext version 0.16.1 or older, add the following options to XGETTEXT_OPTIONS in your po/Makevars: --flag=error:3:c-format --flag=error_at_line:5:c-format Files: lib/error.h lib/error.c m4/error.m4 Depends-on: 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: LGPL Maintainer: all, glibc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/euidaccess�����������������������������������������������������������0000664�0000000�0000000�00000001056�11671051007�0020177�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 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-20111211-stable/modules/exclude��������������������������������������������������������������0000664�0000000�0000000�00000000466�11671051007�0017524�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: fnmatch hash mbscasecmp mbuiter stdbool verify xalloc configure.ac: Makefile.am: lib_SOURCES += exclude.c Include: "exclude.h" License: GPL Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/exclude-tests��������������������������������������������������������0000664�0000000�0000000�00000000777�11671051007�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh 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: progname error argmatch 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) @LIBINTL@ �gnulib-20111211-stable/modules/execute��������������������������������������������������������������0000664�0000000�0000000�00000001122�11671051007�0017523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Creation of autonomous subprocesses. Files: lib/execute.h lib/execute.c lib/w32spawn.h m4/execute.m4 Depends-on: cloexec dup2 error fatal-signal wait-process gettext-h msvc-nothrow 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 stdbool stdlib strpbrk unistd environ configure.ac: gl_EXECUTE Makefile.am: lib_SOURCES += execute.h execute.c w32spawn.h Include: "execute.h" License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/exitfail�������������������������������������������������������������0000664�0000000�0000000�00000000342�11671051007�0017671�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-20111211-stable/modules/exp������������������������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0016656�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/exp-tests������������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-exp.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-exp check_PROGRAMS += test-exp test_exp_LDADD = $(LDADD) @EXP_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/expf�����������������������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0017026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expf() function: exponential function. Files: lib/expf.c m4/expf.m4 Depends-on: math 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/expf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-expf check_PROGRAMS += test-expf test_expf_LDADD = $(LDADD) @EXPF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/expl�����������������������������������������������������������������0000664�0000000�0000000�00000001122�11671051007�0017031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: expl() function: exponential function with long double argument. Files: lib/expl.c m4/expl.m4 Depends-on: math extensions exp [test $HAVE_EXPL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [test $HAVE_EXPL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floorl [test $HAVE_EXPL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_EXPL if test $HAVE_EXPL = 0; then AC_LIBOBJ([expl]) fi gl_MATH_MODULE_INDICATOR([expl]) Makefile.am: Include: <math.h> Link: $(EXPL_LIBM) License: LGPL Maintainer: Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/expl-tests�����������������������������������������������������������0000664�0000000�0000000�00000000300�11671051007�0020166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-expl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-expl check_PROGRAMS += test-expl test_expl_LDADD = $(LDADD) @EXPL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/extensions�����������������������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0020264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Enable extensions in standard headers Files: m4/extensions.m4 Depends-on: configure.ac-early: AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: Paul Eggert and Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fabs�����������������������������������������������������������������0000664�0000000�0000000�00000000327�11671051007�0017002�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fabs-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fabs.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fabs check_PROGRAMS += test-fabs test_fabs_LDADD = $(LDADD) @FABS_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fabsf����������������������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0017151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fabsf() function: absolute value. Files: lib/fabsf.c m4/fabsf.m4 m4/mathfunc.m4 Depends-on: math 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fabsf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fabsf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fabsf check_PROGRAMS += test-fabsf test_fabsf_LDADD = $(LDADD) @FABSF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/faccessat������������������������������������������������������������0000664�0000000�0000000�00000001547�11671051007�0020030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: faccessat() function: check user's permissions for a file. Files: lib/faccessat.c lib/at-func.c lib/openat-priv.h m4/faccessat.m4 Depends-on: unistd extensions at-internal [test $HAVE_FACCESSAT = 0] dosname [test $HAVE_FACCESSAT = 0] errno [test $HAVE_FACCESSAT = 0] fchdir [test $HAVE_FACCESSAT = 0] fcntl-h [test $HAVE_FACCESSAT = 0] openat-die [test $HAVE_FACCESSAT = 0] openat-h [test $HAVE_FACCESSAT = 0] save-cwd [test $HAVE_FACCESSAT = 0] euidaccess [test $HAVE_FACCESSAT = 0] configure.ac: gl_FUNC_FACCESSAT if test $HAVE_FACCESSAT = 0; 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-20111211-stable/modules/faccessat-tests������������������������������������������������������0000664�0000000�0000000�00000000343�11671051007�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-faccessat.c tests/signature.h tests/macros.h Depends-on: fcntl-h configure.ac: Makefile.am: TESTS += test-faccessat check_PROGRAMS += test-faccessat test_faccessat_LDADD = $(LDADD) $(LIB_EACCESS) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fatal-signal���������������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0020432�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: xalloc stdbool unistd sigaction sigprocmask raise configure.ac: gl_FATAL_SIGNAL Makefile.am: lib_SOURCES += fatal-signal.h fatal-signal.c Include: "fatal-signal.h" License: GPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fbufmode�������������������������������������������������������������0000664�0000000�0000000�00000000471�11671051007�0017656�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: Bruno Haible, Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fbufmode-tests�������������������������������������������������������0000664�0000000�0000000�00000000260�11671051007�0021012�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-20111211-stable/modules/fchdir���������������������������������������������������������������0000664�0000000�0000000�00000002000�11671051007�0017314�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 chdir [test $HAVE_FCHDIR = 0] close [test $HAVE_FCHDIR = 0] dirent [test $HAVE_FCHDIR = 0] dirfd [test $HAVE_FCHDIR = 0] dosname [test $HAVE_FCHDIR = 0] dup2 [test $HAVE_FCHDIR = 0] fcntl [test $HAVE_FCHDIR = 0] fcntl-h [test $HAVE_FCHDIR = 0] filenamecat-lgpl [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: Bruno Haible gnulib-20111211-stable/modules/fchdir-tests���������������������������������������������������������0000664�0000000�0000000�00000000325�11671051007�0020464�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-20111211-stable/modules/fchmod-tests���������������������������������������������������������0000664�0000000�0000000�00000000231�11671051007�0020461�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-20111211-stable/modules/fchmodat�������������������������������������������������������������0000664�0000000�0000000�00000001547�11671051007�0017661�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 lib/openat-priv.h m4/fchmodat.m4 Depends-on: sys_stat extensions at-internal [test $HAVE_FCHMODAT = 0] dosname [test $HAVE_FCHMODAT = 0] errno [test $HAVE_FCHMODAT = 0] fchdir [test $HAVE_FCHMODAT = 0] fcntl-h [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; then AC_LIBOBJ([fchmodat]) fi AC_REQUIRE([AC_C_INLINE]) dnl because 'inline' is used in lib/openat.h gl_MODULE_INDICATOR([fchmodat]) dnl for lib/openat.h gl_SYS_STAT_MODULE_INDICATOR([fchmodat]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Jim Meyering, Eric Blake ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fchmodat-tests�������������������������������������������������������0000664�0000000�0000000�00000000310�11671051007�0021004�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-20111211-stable/modules/fchown-tests���������������������������������������������������������0000664�0000000�0000000�00000000231�11671051007�0020505�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-20111211-stable/modules/fchownat�������������������������������������������������������������0000664�0000000�0000000�00000002333�11671051007�0017677�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 lib/openat-priv.h m4/fchownat.m4 Depends-on: unistd extensions at-internal [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] dosname [test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1] errno [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] 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] fstatat [test $REPLACE_FCHOWNAT = 1] configure.ac: gl_FUNC_FCHOWNAT if test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1; then AC_LIBOBJ([fchownat]) fi AC_REQUIRE([AC_C_INLINE]) dnl because 'inline' is used in lib/openat.h gl_MODULE_INDICATOR([fchownat]) dnl for lib/openat.h gl_UNISTD_MODULE_INDICATOR([fchownat]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: Jim Meyering, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fchownat-tests�������������������������������������������������������0000664�0000000�0000000�00000000535�11671051007�0021041�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: ignore-value mgetgroups openat-h progname usleep stat-time symlink configure.ac: AC_CHECK_FUNCS_ONCE([getegid]) Makefile.am: TESTS += test-fchownat check_PROGRAMS += test-fchownat test_fchownat_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fclose���������������������������������������������������������������0000664�0000000�0000000�00000001007�11671051007�0017336�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fclose-tests���������������������������������������������������������0000664�0000000�0000000�00000000177�11671051007�0020505�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-20111211-stable/modules/fcntl����������������������������������������������������������������0000664�0000000�0000000�00000001056�11671051007�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Support for fcntl() action F_DUPFD, F_DUPFD_CLOEXEC, F_GETFD. Files: m4/fcntl.m4 lib/fcntl.c Depends-on: fcntl-h extensions 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-20111211-stable/modules/fcntl-h��������������������������������������������������������������0000664�0000000�0000000�00000003272�11671051007�0017424�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 Depends-on: extensions include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use unistd configure.ac: gl_FCNTL_H 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_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|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|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-20111211-stable/modules/fcntl-h-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021132�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-20111211-stable/modules/fcntl-h-tests��������������������������������������������������������0000664�0000000�0000000�00000000215�11671051007�0020556�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-20111211-stable/modules/fcntl-safer����������������������������������������������������������0000664�0000000�0000000�00000000656�11671051007�0020300�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-20111211-stable/modules/fcntl-safer-tests����������������������������������������������������0000664�0000000�0000000�00000000270�11671051007�0021430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-open.h tests/test-fcntl-safer.c tests/macros.h Depends-on: stdbool symlink configure.ac: Makefile.am: TESTS += test-fcntl-safer check_PROGRAMS += test-fcntl-safer ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fcntl-tests����������������������������������������������������������0000664�0000000�0000000�00000000311�11671051007�0020326�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-20111211-stable/modules/fd-hook��������������������������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0017414�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fd-safer-flag��������������������������������������������������������0000664�0000000�0000000�00000000635�11671051007�0020467�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-20111211-stable/modules/fdatasync������������������������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0020042�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-20111211-stable/modules/fdatasync-tests������������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0021176�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-20111211-stable/modules/fdl������������������������������������������������������������������0000664�0000000�0000000�00000000311�11671051007�0016625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU Free Documentation License in Texinfo format. Files: doc/fdl.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fdl-1.3��������������������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0017126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provide the GNU Free Documentation License version 1.3 in Texinfo format. Files: doc/fdl-1.3.texi Depends-on: configure.ac: Makefile.am: Include: License: unmodifiable license text Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fdopen���������������������������������������������������������������0000664�0000000�0000000�00000000612�11671051007�0017337�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fdopen-tests���������������������������������������������������������0000664�0000000�0000000�00000000231�11671051007�0020474�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-20111211-stable/modules/fdopendir������������������������������������������������������������0000664�0000000�0000000�00000001372�11671051007�0020042�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] 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-20111211-stable/modules/fdopendir-tests������������������������������������������������������0000664�0000000�0000000�00000000353�11671051007�0021200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fdopendir.c tests/signature.h tests/macros.h Depends-on: open opendir closedir progname configure.ac: Makefile.am: TESTS += test-fdopendir check_PROGRAMS += test-fdopendir test_fdopendir_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fdutimensat����������������������������������������������������������0000664�0000000�0000000�00000000670�11671051007�0020413�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: AC_REQUIRE([AC_C_INLINE]) dnl because 'inline' is used in lib/utimens.h gl_MODULE_INDICATOR([fdutimensat]) Makefile.am: lib_SOURCES += fdutimensat.c Include: <fcntl.h> "utimens.h" Link: $(LIB_CLOCK_GETTIME) License: GPL Maintainer: Paul Eggert, Jim Meyering, Eric Blake ������������������������������������������������������������������������gnulib-20111211-stable/modules/fdutimensat-tests����������������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0021551�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 openat timespec dup usleep utimecmp configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: TESTS += test-fdutimensat check_PROGRAMS += test-fdutimensat test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ �������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fflush���������������������������������������������������������������0000664�0000000�0000000�00000001270�11671051007�0017354�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([AC_FUNC_FSEEKO]) 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-20111211-stable/modules/fflush-tests���������������������������������������������������������0000664�0000000�0000000�00000000435�11671051007�0020516�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-20111211-stable/modules/ffs������������������������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0016650�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-20111211-stable/modules/ffs-tests������������������������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0017775�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-20111211-stable/modules/ffsl�����������������������������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0017024�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-20111211-stable/modules/ffsl-tests�����������������������������������������������������������0000664�0000000�0000000�00000000223�11671051007�0020154�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-20111211-stable/modules/ffsll����������������������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0017200�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] configure.ac: gl_FUNC_FFSLL if test $HAVE_FFSLL = 0; then AC_LIBOBJ([ffsll]) fi gl_STRING_MODULE_INDICATOR([ffsll]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ffsll-tests����������������������������������������������������������0000664�0000000�0000000�00000000226�11671051007�0020333�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-20111211-stable/modules/fgetc-tests����������������������������������������������������������0000664�0000000�0000000�00000000257�11671051007�0020321�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-20111211-stable/modules/file-set�������������������������������������������������������������0000664�0000000�0000000�00000000405�11671051007�0017574�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 stdbool xalloc xalloc-die configure.ac: Makefile.am: lib_SOURCES += file-set.c Include: "file-set.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/file-type������������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0017757�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-20111211-stable/modules/fileblocks�����������������������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0020203�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-20111211-stable/modules/filemode�������������������������������������������������������������0000664�0000000�0000000�00000000476�11671051007�0017660�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 m4/st_dm_mode.m4 Depends-on: sys_stat configure.ac: gl_FILEMODE Makefile.am: lib_SOURCES += filemode.c Include: "filemode.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/filename�������������������������������������������������������������0000664�0000000�0000000�00000000261�11671051007�0017644�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/filenamecat����������������������������������������������������������0000664�0000000�0000000�00000000467�11671051007�0020344�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-20111211-stable/modules/filenamecat-lgpl�����������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0021276�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: dirname-lgpl configure.ac: gl_FILE_NAME_CONCAT_LGPL Makefile.am: lib_SOURCES += filenamecat-lgpl.c Include: "filenamecat.h" License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/filenamecat-tests����������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0021472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-filenamecat.c Depends-on: stdbool progname configure.ac: Makefile.am: TESTS += test-filenamecat check_PROGRAMS += test-filenamecat test_filenamecat_LDADD = $(LDADD) @LIBINTL@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/filevercmp�����������������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0020220�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: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += filevercmp.c Include: "filevercmp.h" License: LGPL Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/filevercmp-tests�����������������������������������������������������0000664�0000000�0000000�00000000223�11671051007�0021356�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-20111211-stable/modules/findprog�������������������������������������������������������������0000664�0000000�0000000�00000000465�11671051007�0017702�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 xalloc xconcat-filename unistd strdup configure.ac: gl_FINDPROG Makefile.am: lib_SOURCES += findprog.h findprog.c Include: "findprog.h" License: GPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/findprog-lgpl��������������������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0020636�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 strdup concat-filename unistd configure.ac: gl_FINDPROG gl_MODULE_INDICATOR([findprog-lgpl]) Makefile.am: lib_SOURCES += findprog.h findprog.c Include: "findprog.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/flexmember�����������������������������������������������������������0000664�0000000�0000000�00000000310�11671051007�0020205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Flexible array member support Files: m4/flexmember.m4 Depends-on: configure.ac: AC_C_FLEXIBLE_ARRAY_MEMBER Makefile.am: Include: License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/float����������������������������������������������������������������0000664�0000000�0000000�00000002206�11671051007�0017172�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-20111211-stable/modules/float-tests����������������������������������������������������������0000664�0000000�0000000�00000000221�11671051007�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-float.c tests/macros.h Depends-on: fpieee fpucw configure.ac: Makefile.am: TESTS += test-float check_PROGRAMS += test-float �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/flock����������������������������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0017161�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_HEADER_SYS_FILE_MODULE_INDICATOR([flock]) Makefile.am: Include: <sys/file.h> License: LGPLv2+ Maintainer: Richard W.M. Jones, Jim Meyering �����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/flock-tests����������������������������������������������������������0000664�0000000�0000000�00000000235�11671051007�0020323�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-20111211-stable/modules/floor����������������������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0017213�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: 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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/floor-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000420�11671051007�0020107�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/floor-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000342�11671051007�0021252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floor-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-floor-ieee check_PROGRAMS += test-floor-ieee test_floor_ieee_LDADD = $(LDADD) @FLOOR_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/floor-tests����������������������������������������������������������0000664�0000000�0000000�00000000554�11671051007�0020352�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-20111211-stable/modules/floorf���������������������������������������������������������������0000664�0000000�0000000�00000000720�11671051007�0017353�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: Bruno Haible ������������������������������������������������gnulib-20111211-stable/modules/floorf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0020262�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/floorf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000347�11671051007�0021425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floorf-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-floorf-ieee check_PROGRAMS += test-floorf-ieee test_floorf_ieee_LDADD = $(LDADD) @FLOORF_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/floorf-tests���������������������������������������������������������0000664�0000000�0000000�00000000566�11671051007�0020523�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-20111211-stable/modules/floorl���������������������������������������������������������������0000664�0000000�0000000�00000001175�11671051007�0017366�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: 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/floorl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000320�11671051007�0020262�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/floorl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000355�11671051007�0021432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-floorl-ieee.c tests/minus-zero.h tests/macros.h Depends-on: fpucw float signbit configure.ac: Makefile.am: TESTS += test-floorl-ieee check_PROGRAMS += test-floorl-ieee test_floorl_ieee_LDADD = $(LDADD) @FLOORL_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/floorl-tests���������������������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0020523�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-20111211-stable/modules/fma������������������������������������������������������������������0000664�0000000�0000000�00000001461�11671051007�0016632�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fma-tests������������������������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0017774�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-20111211-stable/modules/fmaf�����������������������������������������������������������������0000664�0000000�0000000�00000001523�11671051007�0016777�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 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fmaf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0020140�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-20111211-stable/modules/fmal�����������������������������������������������������������������0000664�0000000�0000000�00000002443�11671051007�0017007�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 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fmal-tests�����������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0020145�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-20111211-stable/modules/fmod�����������������������������������������������������������������0000664�0000000�0000000�00000000352�11671051007�0017012�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmod() function: floating-point remainder function. Files: m4/fmod.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_FMOD Makefile.am: Include: <math.h> Link: $(FMOD_LIBM) License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fmod-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmod.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fmod check_PROGRAMS += test-fmod test_fmod_LDADD = $(LDADD) @FMOD_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fmodf����������������������������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0017167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fmodf() function: floating-point remainder function. Files: lib/fmodf.c m4/fmodf.m4 Depends-on: math fmod [test $HAVE_FMODF = 0] configure.ac: gl_FUNC_FMODF if test $HAVE_FMODF = 0; then AC_LIBOBJ([fmodf]) fi gl_MATH_MODULE_INDICATOR([fmodf]) Makefile.am: Include: <math.h> Link: $(FMODF_LIBM) License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fmodf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fmodf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-fmodf check_PROGRAMS += test-fmodf test_fmodf_LDADD = $(LDADD) @FMODF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fnmatch��������������������������������������������������������������0000664�0000000�0000000�00000002351�11671051007�0017506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fnmatch() function: wildcard matching. Files: lib/fnmatch.in.h lib/fnmatch.c lib/fnmatch_loop.c m4/mbstate_t.m4 m4/fnmatch.m4 Depends-on: extensions snippet/arg-nonnull alloca [test -n "$FNMATCH_H"] stdbool [test -n "$FNMATCH_H"] wchar [test -n "$FNMATCH_H"] wctype-h [test -n "$FNMATCH_H"] memchr [test -n "$FNMATCH_H"] memcmp [test -n "$FNMATCH_H"] mbsrtowcs [test -n "$FNMATCH_H"] mbsinit [test -n "$FNMATCH_H"] configure.ac: gl_FUNC_FNMATCH_POSIX if test -n "$FNMATCH_H"; then AC_LIBOBJ([fnmatch]) gl_PREREQ_FNMATCH fi Makefile.am: BUILT_SOURCES += $(FNMATCH_H) # We need the following in order to create <fnmatch.h> when the system # doesn't have one that supports the required API. if GL_GENERATE_FNMATCH_H fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ < $(srcdir)/fnmatch.in.h; \ } > $@-t && \ mv -f $@-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-20111211-stable/modules/fnmatch-gnu����������������������������������������������������������0000664�0000000�0000000�00000000435�11671051007�0020276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fnmatch() function: wildcard matching, with GNU extensions. Files: Depends-on: fnmatch configure.ac: gl_FUNC_FNMATCH_GNU if test -n "$FNMATCH_H"; then AC_LIBOBJ([fnmatch]) gl_PREREQ_FNMATCH fi Makefile.am: Include: "fnmatch.h" License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fnmatch-posix��������������������������������������������������������0000664�0000000�0000000�00000000402�11671051007�0020641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fnmatch() function: wildcard matching. Status: deprecated Notice: This module is deprecated. Use the module 'fnmatch' instead. Files: Depends-on: fnmatch configure.ac: Makefile.am: Include: "fnmatch.h" License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fnmatch-tests��������������������������������������������������������0000664�0000000�0000000�00000000200�11671051007�0020635�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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fopen����������������������������������������������������������������0000664�0000000�0000000�00000000643�11671051007�0017177�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 unistd [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: Bruno Haible ���������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fopen-safer����������������������������������������������������������0000664�0000000�0000000�00000000512�11671051007�0020270�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-20111211-stable/modules/fopen-safer-tests����������������������������������������������������0000664�0000000�0000000�00000000251�11671051007�0021430�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-20111211-stable/modules/fopen-tests����������������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0020333�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-20111211-stable/modules/forkpty��������������������������������������������������������������0000664�0000000�0000000�00000000667�11671051007�0017574�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 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-20111211-stable/modules/forkpty-tests��������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020726�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-20111211-stable/modules/fpending�������������������������������������������������������������0000664�0000000�0000000�00000000536�11671051007�0017663�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 m4/fpending.m4 Depends-on: configure.ac: gl_FUNC_FPENDING if test $ac_cv_func___fpending = no; then AC_LIBOBJ([fpending]) gl_PREREQ_FPENDING fi Makefile.am: Include: "fpending.h" License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fpending-tests�������������������������������������������������������0000664�0000000�0000000�00000000313�11671051007�0021014�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-20111211-stable/modules/fpieee���������������������������������������������������������������0000664�0000000�0000000�00000000377�11671051007�0017331�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fprintf-posix��������������������������������������������������������0000664�0000000�0000000�00000002055�11671051007�0020677�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] 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fprintf-posix-tests��������������������������������������������������0000664�0000000�0000000�00000001040�11671051007�0022030�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-20111211-stable/modules/fprintftime����������������������������������������������������������0000664�0000000�0000000�00000000430�11671051007�0020411�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: ignore-value strftime configure.ac: Makefile.am: lib_SOURCES += fprintftime.c Include: "fprintftime.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fpucw����������������������������������������������������������������0000664�0000000�0000000�00000000326�11671051007�0017212�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fpurge���������������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0017362�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: Bruno Haible, Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fpurge-tests���������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020520�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-20111211-stable/modules/fputc-tests����������������������������������������������������������0000664�0000000�0000000�00000000257�11671051007�0020352�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-20111211-stable/modules/fread-tests����������������������������������������������������������0000664�0000000�0000000�00000000257�11671051007�0020312�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-20111211-stable/modules/freadable������������������������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0020002�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: Bruno Haible, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/freadable-tests������������������������������������������������������0000664�0000000�0000000�00000000273�11671051007�0021134�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-20111211-stable/modules/freadahead�����������������������������������������������������������0000664�0000000�0000000�00000000462�11671051007�0020133�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 Depends-on: configure.ac: Makefile.am: lib_SOURCES += freadahead.c Include: "freadahead.h" License: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/freadahead-tests�����������������������������������������������������0000664�0000000�0000000�00000000274�11671051007�0021274�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-20111211-stable/modules/freading�������������������������������������������������������������0000664�0000000�0000000�00000000502�11671051007�0017641�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-20111211-stable/modules/freading-tests�������������������������������������������������������0000664�0000000�0000000�00000000267�11671051007�0021011�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-20111211-stable/modules/freadptr�������������������������������������������������������������0000664�0000000�0000000�00000000412�11671051007�0017671�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 Depends-on: configure.ac: Makefile.am: lib_SOURCES += freadptr.c Include: "freadptr.h" License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/freadptr-tests�������������������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0021032�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-20111211-stable/modules/freadseek������������������������������������������������������������0000664�0000000�0000000�00000000507�11671051007�0020020�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 Depends-on: freadahead freadptr fseeko lseek configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += freadseek.c Include: "freadseek.h" License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/freadseek-tests������������������������������������������������������0000664�0000000�0000000�00000000262�11671051007�0021156�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-20111211-stable/modules/free�����������������������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0017005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Work around incompatibility on older systems where free (NULL) fails. Notice: This module is obsolete. Files: lib/free.c m4/free.m4 Depends-on: configure.ac: gl_FUNC_FREE if test $gl_cv_func_free = no; then AC_LIBOBJ([free]) gl_PREREQ_FREE fi Makefile.am: Include: <stdlib.h> License: GPL Maintainer: Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/freopen��������������������������������������������������������������0000664�0000000�0000000�00000000534�11671051007�0017525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: freopen() function: open a stream to a file. Files: lib/freopen.c m4/freopen.m4 Depends-on: 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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/freopen-safer��������������������������������������������������������0000664�0000000�0000000�00000000512�11671051007�0020617�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: 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-20111211-stable/modules/freopen-safer-tests��������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0021760�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-20111211-stable/modules/freopen-tests��������������������������������������������������������0000664�0000000�0000000�00000000244�11671051007�0020663�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-20111211-stable/modules/frexp����������������������������������������������������������������0000664�0000000�0000000�00000000616�11671051007�0017214�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: 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: Bruno Haible, Paolo Bonzini ������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/frexp-nolibm���������������������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0020471�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: LGPL Maintainer: Bruno Haible, Paolo Bonzini ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/frexp-nolibm-tests���������������������������������������������������0000664�0000000�0000000�00000000423�11671051007�0021626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexp.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h 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 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/frexp-tests����������������������������������������������������������0000664�0000000�0000000�00000000405�11671051007�0020350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexp.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: isnand-nolibm signbit configure.ac: Makefile.am: TESTS += test-frexp check_PROGRAMS += test-frexp test_frexp_LDADD = $(LDADD) @FREXP_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/frexpf���������������������������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0017355�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 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: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/frexpf-tests���������������������������������������������������������0000664�0000000�0000000�00000000412�11671051007�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexpf.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: isnanf-nolibm signbit configure.ac: Makefile.am: TESTS += test-frexpf check_PROGRAMS += test-frexpf test_frexpf_LDADD = $(LDADD) @FREXPF_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/frexpl���������������������������������������������������������������0000664�0000000�0000000�00000001414�11671051007�0017365�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 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: 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: Bruno Haible, Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/frexpl-nolibm��������������������������������������������������������0000664�0000000�0000000�00000001466�11671051007�0020652�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: LGPL Maintainer: Bruno Haible, Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/frexpl-nolibm-tests��������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0022006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexpl.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h 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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/frexpl-tests���������������������������������������������������������0000664�0000000�0000000�00000000426�11671051007�0020527�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-frexpl.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: fpucw isnanl-nolibm signbit float configure.ac: Makefile.am: TESTS += test-frexpl check_PROGRAMS += test-frexpl test_frexpl_LDADD = $(LDADD) @FREXPL_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fseek����������������������������������������������������������������0000664�0000000�0000000�00000000536�11671051007�0017166�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fseek-tests����������������������������������������������������������0000664�0000000�0000000�00000000363�11671051007�0020324�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-20111211-stable/modules/fseeko���������������������������������������������������������������0000664�0000000�0000000�00000000766�11671051007�0017352�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 # Just to guarantee consistency between fseek() and fseeko(). fseek configure.ac-early: AC_REQUIRE([AC_FUNC_FSEEKO]) configure.ac: gl_FUNC_FSEEKO if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then AC_LIBOBJ([fseeko]) fi gl_STDIO_MODULE_INDICATOR([fseeko]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Bruno Haible ����������gnulib-20111211-stable/modules/fseeko-tests���������������������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0020477�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-20111211-stable/modules/fseterr��������������������������������������������������������������0000664�0000000�0000000�00000000352�11671051007�0017537�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 Depends-on: configure.ac: Makefile.am: lib_SOURCES += fseterr.c Include: "fseterr.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fseterr-tests��������������������������������������������������������0000664�0000000�0000000�00000000174�11671051007�0020701�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-20111211-stable/modules/fstat����������������������������������������������������������������0000664�0000000�0000000�00000000667�11671051007�0017217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: fstat() function: return information about an open file. Files: lib/fstat.c m4/fstat.m4 Depends-on: sys_stat largefile unistd [test $REPLACE_STAT = 1] msvc-inval [test $REPLACE_STAT = 1] configure.ac: gl_FUNC_FSTAT if test $REPLACE_FSTAT = 1; then AC_LIBOBJ([fstat]) gl_PREREQ_FSTAT fi gl_SYS_STAT_MODULE_INDICATOR([fstat]) Makefile.am: Include: <sys/stat.h> License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������gnulib-20111211-stable/modules/fstat-tests����������������������������������������������������������0000664�0000000�0000000�00000000226�11671051007�0020346�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-20111211-stable/modules/fstatat��������������������������������������������������������������0000664�0000000�0000000�00000002252�11671051007�0017534�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 lib/openat-priv.h m4/fstatat.m4 m4/lstat.m4 Depends-on: sys_stat extensions at-internal [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] dosname [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1] errno [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] 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] configure.ac: gl_FUNC_FSTATAT if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then AC_LIBOBJ([fstatat]) fi AC_REQUIRE([AC_C_INLINE]) dnl because 'inline' is used in lib/openat.h gl_MODULE_INDICATOR([fstatat]) dnl for lib/openat.h gl_SYS_STAT_MODULE_INDICATOR([fstatat]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fstatat-tests��������������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0020674�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 progname symlink configure.ac: Makefile.am: TESTS += test-fstatat check_PROGRAMS += test-fstatat test_fstatat_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fstrcmp��������������������������������������������������������������0000664�0000000�0000000�00000000365�11671051007�0017547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Fuzzy string comparison. Files: lib/fstrcmp.h lib/fstrcmp.c Depends-on: diffseq lock tls minmax xalloc configure.ac: Makefile.am: lib_SOURCES += fstrcmp.h fstrcmp.c Include: "fstrcmp.h" License: GPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fstrcmp-tests��������������������������������������������������������0000664�0000000�0000000�00000000320�11671051007�0020676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-fstrcmp.c tests/macros.h Depends-on: stdbool progname configure.ac: Makefile.am: TESTS += test-fstrcmp check_PROGRAMS += test-fstrcmp test_fstrcmp_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fsusage��������������������������������������������������������������0000664�0000000�0000000�00000000566�11671051007�0017531�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: largefile stdbool stdint full-read [test $gl_cv_fs_space = yes] 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-20111211-stable/modules/fsync����������������������������������������������������������������0000664�0000000�0000000�00000000632�11671051007�0017210�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-20111211-stable/modules/fsync-tests����������������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0020346�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-20111211-stable/modules/ftell����������������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0017176�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ftell-tests����������������������������������������������������������0000664�0000000�0000000�00000000512�11671051007�0020331�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-20111211-stable/modules/ftello���������������������������������������������������������������0000664�0000000�0000000�00000001117�11671051007�0017352�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 Depends-on: stdio extensions largefile lseek [test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1] # Just to guarantee consistency between ftell() and ftello(). ftell configure.ac-early: AC_REQUIRE([AC_FUNC_FSEEKO]) configure.ac: gl_FUNC_FTELLO if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then AC_LIBOBJ([ftello]) fi gl_STDIO_MODULE_INDICATOR([ftello]) Makefile.am: Include: <stdio.h> License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ftello-tests���������������������������������������������������������0000664�0000000�0000000�00000000643�11671051007�0020515�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-20111211-stable/modules/ftoastr��������������������������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0017553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert float to accurate string. Files: lib/ftoastr.h lib/ftoastr.c m4/c-strtod.m4 Depends-on: intprops configure.ac: AC_CHECK_FUNCS_ONCE([strtof]) AC_REQUIRE([gl_C99_STRTOLD]) Makefile.am: lib_SOURCES += ftoastr.c Include: "ftoastr.h" License: GPL Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ftruncate������������������������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0020062�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 largefile msvc-inval [test $HAVE_FTRUNCATE = 0] configure.ac: gl_FUNC_FTRUNCATE if test $HAVE_FTRUNCATE = 0; then AC_LIBOBJ([ftruncate]) gl_PREREQ_FTRUNCATE fi gl_UNISTD_MODULE_INDICATOR([ftruncate]) Makefile.am: Include: <unistd.h> License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ftruncate-tests������������������������������������������������������0000664�0000000�0000000�00000000275�11671051007�0021224�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-20111211-stable/modules/fts������������������������������������������������������������������0000664�0000000�0000000�00000001024�11671051007�0016656�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: cloexec closedir cycle-check d-ino d-type dirent-safer dup fchdir fcntl-h fcntl-safer fstat hash i-ring lstat memmove openat-h openat-safer opendir readdir stdbool unistd-safer 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-20111211-stable/modules/full-read������������������������������������������������������������0000664�0000000�0000000�00000000473�11671051007�0017744�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, Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/full-write�����������������������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0020162�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, Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/func�����������������������������������������������������������������0000664�0000000�0000000�00000000305�11671051007�0017016�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-20111211-stable/modules/func-tests�����������������������������������������������������������0000664�0000000�0000000�00000000164�11671051007�0020161�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-20111211-stable/modules/futimens�������������������������������������������������������������0000664�0000000�0000000�00000000744�11671051007�0017724�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-20111211-stable/modules/futimens-tests�������������������������������������������������������0000664�0000000�0000000�00000000535�11671051007�0021062�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: fcntl-h ignore-value timespec dup usleep utimecmp configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: TESTS += test-futimens check_PROGRAMS += test-futimens test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fwritable������������������������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0020054�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: Bruno Haible, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fwritable-tests������������������������������������������������������0000664�0000000�0000000�00000000273�11671051007�0021206�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-20111211-stable/modules/fwrite-tests���������������������������������������������������������0000664�0000000�0000000�00000000262�11671051007�0020525�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-20111211-stable/modules/fwriteerror����������������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0020436�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/fwriting�������������������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0017721�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-20111211-stable/modules/fwriting-tests�������������������������������������������������������0000664�0000000�0000000�00000000267�11671051007�0021063�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-20111211-stable/modules/gcd������������������������������������������������������������������0000664�0000000�0000000�00000000302�11671051007�0016615�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gen-uni-tables�������������������������������������������������������0000664�0000000�0000000�00000000475�11671051007�0020705�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: Makefile.am: Include: License: GPLed build tool Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gendocs��������������������������������������������������������������0000664�0000000�0000000�00000000445�11671051007�0017512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Generate manuals in several formats from Texinfo sources. Can be used for http://www.gnu.org/software/PKG/manual/ directories. Files: build-aux/gendocs.sh doc/gendocs_template Depends-on: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: Karl Berry ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/get-rusage-as��������������������������������������������������������0000664�0000000�0000000�00000000725�11671051007�0020535�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 vma-iter configure.ac: AC_REQUIRE([AC_C_INLINE]) 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: Bruno Haible �������������������������������������������gnulib-20111211-stable/modules/get-rusage-as-tests��������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0021670�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-20111211-stable/modules/get-rusage-data������������������������������������������������������0000664�0000000�0000000�00000000616�11671051007�0021042�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_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS_ONCE([setrlimit]) gl_FUNC_MMAP_ANON Makefile.am: lib_SOURCES += get-rusage-data.c Include: "resource-ext.h" License: GPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/get-rusage-data-tests������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0022175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-get-rusage-data.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-get-rusage-data check_PROGRAMS += test-get-rusage-data ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getaddrinfo����������������������������������������������������������0000664�0000000�0000000�00000001663�11671051007�0020361�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 $HAVE_DECL_GAI_STRERROR = 0 || test $REPLACE_GAI_STRERROR = 1] inet_ntop [test $HAVE_GETADDRINFO = 0] snprintf [test $HAVE_GETADDRINFO = 0] stdbool [test $HAVE_GETADDRINFO = 0] strdup [test $HAVE_GETADDRINFO = 0] servent [test $HAVE_GETADDRINFO = 0] hostent [test $HAVE_GETADDRINFO = 0] sockets [test $HAVE_GETADDRINFO = 0] configure.ac: gl_GETADDRINFO if test $HAVE_GETADDRINFO = 0; 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) License: LGPLv2+ Maintainer: Simon Josefsson �����������������������������������������������������������������������������gnulib-20111211-stable/modules/getaddrinfo-tests����������������������������������������������������0000664�0000000�0000000�00000000352�11671051007�0021513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-getaddrinfo.c Depends-on: inet_ntop strerror configure.ac: Makefile.am: TESTS += test-getaddrinfo check_PROGRAMS += test-getaddrinfo test_getaddrinfo_LDADD = $(LDADD) @GETADDRINFO_LIB@ @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getcwd���������������������������������������������������������������0000664�0000000�0000000�00000002127�11671051007�0017344�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/pathmax.m4 Depends-on: unistd extensions pathmax [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-20111211-stable/modules/getcwd-lgpl����������������������������������������������������������0000664�0000000�0000000�00000000607�11671051007�0020301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Ensure getcwd(NULL, 0) returns a buffer allocated by malloc(). Files: lib/getcwd-lgpl.c m4/getcwd.m4 Depends-on: unistd 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-20111211-stable/modules/getcwd-lgpl-tests����������������������������������������������������0000664�0000000�0000000�00000000325�11671051007�0021436�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-20111211-stable/modules/getcwd-tests���������������������������������������������������������0000664�0000000�0000000�00000000360�11671051007�0020501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getcwd.c tests/test-getcwd.sh tests/init.sh Depends-on: errno fcntl-h getcwd-lgpl pathmax sys_stat configure.ac: Makefile.am: TESTS += test-getcwd.sh check_PROGRAMS += test-getcwd test_getcwd_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getdate��������������������������������������������������������������0000664�0000000�0000000�00000000452�11671051007�0017503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert a date/time string to linear time. Status: deprecated Notice: This module is deprecated. Use the module 'parse-datetime' instead. Files: doc/getdate.texi lib/getdate.h Depends-on: parse-datetime configure.ac: Makefile.am: Include: License: GPL Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getdelim�������������������������������������������������������������0000664�0000000�0000000�00000001134�11671051007�0017656�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] realloc-posix [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-20111211-stable/modules/getdelim-tests�������������������������������������������������������0000664�0000000�0000000�00000000305�11671051007�0021015�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-20111211-stable/modules/getdomainname��������������������������������������������������������0000664�0000000�0000000�00000001141�11671051007�0020672�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-20111211-stable/modules/getdomainname-tests��������������������������������������������������0000664�0000000�0000000�00000000237�11671051007�0022037�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-20111211-stable/modules/getdtablesize��������������������������������������������������������0000664�0000000�0000000�00000000706�11671051007�0020716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getdtablesize() function: return maximum number of file descriptors. Files: lib/getdtablesize.c m4/getdtablesize.m4 Depends-on: unistd msvc-inval [test $HAVE_GETDTABLESIZE = 0] configure.ac: gl_FUNC_GETDTABLESIZE if test $HAVE_GETDTABLESIZE = 0; then AC_LIBOBJ([getdtablesize]) gl_PREREQ_GETDTABLESIZE fi gl_UNISTD_MODULE_INDICATOR([getdtablesize]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������gnulib-20111211-stable/modules/getdtablesize-tests��������������������������������������������������0000664�0000000�0000000�00000000256�11671051007�0022056�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-20111211-stable/modules/getgroups������������������������������������������������������������0000664�0000000�0000000�00000001054�11671051007�0020104�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 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: LGPL Maintainer: Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getgroups-tests������������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0021242�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-20111211-stable/modules/gethostname����������������������������������������������������������0000664�0000000�0000000�00000001111�11671051007�0020375�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-20111211-stable/modules/gethostname-tests����������������������������������������������������0000664�0000000�0000000�00000000315�11671051007�0021542�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-20111211-stable/modules/gethrxtime�����������������������������������������������������������0000664�0000000�0000000�00000000677�11671051007�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Get high resolution real time. Files: lib/xtime.h lib/gethrxtime.c lib/gethrxtime.h m4/gethrxtime.m4 m4/longlong.m4 Depends-on: clock-time extensions gettime sys_time configure.ac: gl_GETHRXTIME if test $ac_cv_have_decl_gethrtime = no || test $gl_cv_arithmetic_hrtime_t = no; then AC_LIBOBJ([gethrxtime]) gl_PREREQ_GETHRXTIME fi Makefile.am: Include: "xtime.h" Link: $(LIB_GETHRXTIME) License: GPL Maintainer: Paul Eggert �����������������������������������������������������������������gnulib-20111211-stable/modules/getline��������������������������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0017522�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-20111211-stable/modules/getline-tests��������������������������������������������������������0000664�0000000�0000000�00000000301�11671051007�0020646�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-20111211-stable/modules/getloadavg�����������������������������������������������������������0000664�0000000�0000000�00000000622�11671051007�0020202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return the current system load averages. Files: lib/getloadavg.c m4/getloadavg.m4 Depends-on: extensions intprops stdbool stdlib configure.ac: 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-20111211-stable/modules/getloadavg-tests�����������������������������������������������������0000664�0000000�0000000�00000000311�11671051007�0021335�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-20111211-stable/modules/getlogin�������������������������������������������������������������0000664�0000000�0000000�00000000464�11671051007�0017701�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]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getlogin-tests�������������������������������������������������������0000664�0000000�0000000�00000000237�11671051007�0021037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getlogin.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getlogin check_PROGRAMS += test-getlogin �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getlogin_r�����������������������������������������������������������0000664�0000000�0000000�00000000764�11671051007�0020225�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 Depends-on: unistd extensions 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]) Makefile.am: Include: <unistd.h> License: LGPLv2+ Maintainer: all ������������gnulib-20111211-stable/modules/getlogin_r-tests�����������������������������������������������������0000664�0000000�0000000�00000000245�11671051007�0021357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getlogin_r.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-getlogin_r check_PROGRAMS += test-getlogin_r �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getndelim2�����������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0020124�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-20111211-stable/modules/getndelim2-tests�����������������������������������������������������0000664�0000000�0000000�00000000273�11671051007�0021261�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-20111211-stable/modules/getnline�������������������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0017671�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-20111211-stable/modules/getopt���������������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Process command line arguments. Status: deprecated Notice: This module is deprecated. Use the module 'getopt-posix' or 'getopt-gnu' instead. Files: Depends-on: getopt-gnu configure.ac: Makefile.am: Include: <getopt.h> License: LGPL Maintainer: all, glibc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getopt-gnu�����������������������������������������������������������0000664�0000000�0000000�00000001114�11671051007�0020153�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 if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) gl_PREREQ_GETOPT dnl Arrange for unistd.h to include getopt.h. GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT=1 fi AC_SUBST([GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT]) gl_MODULE_INDICATOR_FOR_TESTS([getopt-gnu]) Makefile.am: Include: <getopt.h> License: LGPLv2+ Maintainer: all, glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getopt-posix���������������������������������������������������������0000664�0000000�0000000�00000002665�11671051007�0020540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getopt() function: process command line arguments. Files: lib/getopt.in.h lib/getopt.c lib/getopt1.c lib/getopt_int.h m4/getopt.m4 Depends-on: unistd extensions include_next snippet/arg-nonnull gettext-h [test $REPLACE_GETOPT = 1] configure.ac: gl_FUNC_GETOPT_POSIX if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) gl_PREREQ_GETOPT dnl Arrange for unistd.h to include getopt.h. GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT=1 fi AC_SUBST([GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT]) Makefile.am: BUILT_SOURCES += $(GETOPT_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 $@ MOSTLYCLEANFILES += getopt.h getopt.h-t Include: <unistd.h> License: LGPLv2+ Maintainer: all, glibc ���������������������������������������������������������������������������gnulib-20111211-stable/modules/getopt-posix-tests���������������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0021665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/macros.h tests/signature.h tests/test-getopt.c tests/test-getopt.h tests/test-getopt_long.h Depends-on: dup2 setenv stdbool unistd unsetenv configure.ac: Makefile.am: TESTS += test-getopt check_PROGRAMS += test-getopt test_getopt_LDADD = $(LDADD) $(LIBINTL) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getpagesize����������������������������������������������������������0000664�0000000�0000000�00000000537�11671051007�0020401�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-20111211-stable/modules/getpass��������������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0017536�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: extensions fseeko getline stdbool strdup-posix configure.ac: gl_FUNC_GETPASS if test $HAVE_GETPASS = 0; then AC_LIBOBJ([getpass]) gl_PREREQ_GETPASS fi Makefile.am: Include: "getpass.h" License: LGPLv2+ Maintainer: Jim Meyering, glibc ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getpass-gnu����������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0020325�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: fseeko getline stdbool configure.ac: gl_FUNC_GETPASS_GNU if test $REPLACE_GETPASS = 1; then AC_LIBOBJ([getpass]) gl_PREREQ_GETPASS fi Makefile.am: Include: "getpass.h" License: LGPL Maintainer: Jim Meyering, glibc ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getpeername����������������������������������������������������������0000664�0000000�0000000�00000001104�11671051007�0020355�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: 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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/getpeername-tests����������������������������������������������������0000664�0000000�0000000�00000000351�11671051007�0021520�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-20111211-stable/modules/getsockname����������������������������������������������������������0000664�0000000�0000000�00000001103�11671051007�0020360�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: 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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/getsockname-tests����������������������������������������������������0000664�0000000�0000000�00000000351�11671051007�0021524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-getsockname.c tests/signature.h tests/macros.h Depends-on: netinet_in sockets configure.ac: Makefile.am: TESTS += test-getsockname check_PROGRAMS += test-getsockname test_getsockname_LDADD = $(LDADD) @LIBSOCKET@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getsockopt�����������������������������������������������������������0000664�0000000�0000000�00000001141�11671051007�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: getsockopt() function: retrieve optional settings on a socket. Files: lib/getsockopt.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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/getsockopt-tests�����������������������������������������������������0000664�0000000�0000000�00000000345�11671051007�0021411�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-20111211-stable/modules/getsubopt������������������������������������������������������������0000664�0000000�0000000�00000000703�11671051007�0020101�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-20111211-stable/modules/gettext��������������������������������������������������������������0000664�0000000�0000000�00000002603�11671051007�0017552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Translate messages to user's native language. Notice: You must add an invocation of AM_GNU_GETTEXT([external]) to configure.ac. Files: m4/codeset.m4 m4/fcntl-o.m4 m4/gettext.m4 m4/glibc2.m4 m4/glibc21.m4 m4/iconv.m4 m4/intdiv0.m4 m4/intl.m4 m4/intldir.m4 m4/intlmacosx.m4 m4/intmax.m4 m4/inttypes_h.m4 m4/inttypes-pri.m4 m4/lcmessage.m4 m4/lock.m4 m4/longlong.m4 m4/nls.m4 m4/po.m4 m4/printf-posix.m4 m4/progtest.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 build-aux/config.rpath Depends-on: extensions gettext-h havelib configure.ac: AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.18.1]) Makefile.am: # This is for those projects which use "gettextize --intl" to put a source-code # copy of libintl into their package. In such projects, every Makefile.am needs # -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory. # For the Makefile.ams in other directories it is the maintainer's # responsibility; for the one from gnulib we do it here. # This option has no effect when the user disables NLS (because then the intl # directory contains no libintl.h file) or when the project does not use # "gettextize --intl". AM_CPPFLAGS += -I$(top_builddir)/intl Include: "gettext.h" Link: $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gettext-h������������������������������������������������������������0000664�0000000�0000000�00000000547�11671051007�0020004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Translate messages to user's native language if the gettext module 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gettime��������������������������������������������������������������0000664�0000000�0000000�00000000515�11671051007�0017524�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: GPL Maintainer: Paul Eggert, Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gettimeofday���������������������������������������������������������0000664�0000000�0000000�00000000655�11671051007�0020554�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-20111211-stable/modules/gettimeofday-tests���������������������������������������������������0000664�0000000�0000000�00000000235�11671051007�0021706�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-20111211-stable/modules/getugroups�����������������������������������������������������������0000664�0000000�0000000�00000000403�11671051007�0020266�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: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/getusershell���������������������������������������������������������0000664�0000000�0000000�00000000667�11671051007�0020604�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] 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-20111211-stable/modules/git-merge-changelog��������������������������������������������������0000664�0000000�0000000�00000000716�11671051007�0021676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: git "merge" driver for GNU style ChangeLog files Files: lib/git-merge-changelog.c Depends-on: getopt-gnu stdbool stdlib progname error read-file xlist array-list linkedhash-list linked-list rbtreehash-list xalloc xmalloca fstrcmp minmax c-strstr fwriteerror memchr memcmp configure.ac: Makefile.am: bin_PROGRAMS = git-merge-changelog git_merge_changelog_LDADD = libgnu.a @LIBINTL@ $(LIBTHREAD) Include: License: GPL Maintainer: Bruno Haible ��������������������������������������������������gnulib-20111211-stable/modules/git-version-gen������������������������������������������������������0000664�0000000�0000000�00000000305�11671051007�0021100�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-20111211-stable/modules/gitlog-to-changelog��������������������������������������������������0000664�0000000�0000000�00000000271�11671051007�0021717�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-20111211-stable/modules/glob�����������������������������������������������������������������0000664�0000000�0000000�00000003306�11671051007�0017012�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.in.h lib/glob-libc.h lib/glob.c m4/glob.m4 Depends-on: extensions largefile snippet/arg-nonnull snippet/c++defs snippet/warn-on-use alloca [test -n "$GLOB_H"] closedir [test -n "$GLOB_H"] d-type [test -n "$GLOB_H"] dirfd [test -n "$GLOB_H"] fnmatch [test -n "$GLOB_H"] getlogin_r [test -n "$GLOB_H"] memchr [test -n "$GLOB_H"] mempcpy [test -n "$GLOB_H"] opendir [test -n "$GLOB_H"] readdir [test -n "$GLOB_H"] stdbool [test -n "$GLOB_H"] strdup [test -n "$GLOB_H"] sys_stat [test -n "$GLOB_H"] unistd [test -n "$GLOB_H"] malloc-posix [test -n "$GLOB_H"] configure.ac: gl_GLOB if test -n "$GLOB_H"; then AC_LIBOBJ([glob]) gl_PREREQ_GLOB fi Makefile.am: BUILT_SOURCES += $(GLOB_H) # We need the following in order to create <glob.h> when the system # doesn't have one that works with the given compiler. 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|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|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 -f $@-t $@ else glob.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += glob.h glob.h-t Include: <glob.h> License: LGPLv2+ Maintainer: all, glibc ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/glob-c++-tests�������������������������������������������������������0000664�0000000�0000000�00000000451�11671051007�0020516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-glob-c++.cc tests/signature.h Status: c++-test Depends-on: ansi-c++-opt configure.ac: Makefile.am: if ANSICXX TESTS += test-glob-c++ check_PROGRAMS += test-glob-c++ test_glob_c___SOURCES = test-glob-c++.cc test_glob_c___LDADD = $(LDADD) $(LIBINTL) $(LIB_CLOCK_GETTIME) endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/glob-tests�����������������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0020146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-glob.c tests/signature.h tests/macros.h Depends-on: glob-c++-tests configure.ac: Makefile.am: TESTS += test-glob check_PROGRAMS += test-glob ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gnu-make�������������������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0017577�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 # http://www.opengroup.org/susv3/utilities/make.html # for the 2004 POSIX specification] #endif Include: License: GPLed build tool Maintainer: Paul Eggert �����������������������������������������gnulib-20111211-stable/modules/gnu-web-doc-update���������������������������������������������������0000664�0000000�0000000�00000000333�11671051007�0021453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: update the official GNU web documentation for your project Files: build-aux/gnu-web-doc-update Depends-on: gendocs configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: coreutils �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gnumakefile����������������������������������������������������������0000664�0000000�0000000�00000001474�11671051007�0020362�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: distclean-local: clean-GNUmakefile clean-GNUmakefile: test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : Include: License: GPLed build tool Maintainer: coreutils ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gnupload�������������������������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0017674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Upload PGP signed files to gnu.org. See http://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: GPLed build tool Maintainer: coreutils ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gperf����������������������������������������������������������������0000664�0000000�0000000�00000000251�11671051007�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Provides the GNU gperf build tool. Files: Depends-on: configure.ac: Makefile.am: GPERF = gperf Include: License: unlimited Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/gpl-2.0��������������������������������������������������������������0000664�0000000�0000000�00000000325�11671051007�0017144�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-20111211-stable/modules/gpl-3.0��������������������������������������������������������������0000664�0000000�0000000�00000000325�11671051007�0017145�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-20111211-stable/modules/grantpt��������������������������������������������������������������0000664�0000000�0000000�00000001066�11671051007�0017547�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 fcntl-h [test $HAVE_GRANTPT = 0] 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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/grantpt-tests��������������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0020703�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-20111211-stable/modules/group-member���������������������������������������������������������0000664�0000000�0000000�00000001052�11671051007�0020464�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] xalloc [test $HAVE_GROUP_MEMBER = 0] stdbool [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: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/hard-locale����������������������������������������������������������0000664�0000000�0000000�00000000470�11671051007�0020241�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 m4/hard-locale.m4 Depends-on: stdbool strdup configure.ac: gl_HARD_LOCALE Makefile.am: lib_SOURCES += hard-locale.c Include: "hard-locale.h" License: GPL Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/hash�����������������������������������������������������������������0000664�0000000�0000000�00000000354�11671051007�0017012�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: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/hash-pjw�������������������������������������������������������������0000664�0000000�0000000�00000000364�11671051007�0017611�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: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/hash-tests�����������������������������������������������������������0000664�0000000�0000000�00000000233�11671051007�0020146�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-20111211-stable/modules/hash-triple����������������������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0020303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Hash functions for file-related triples: name, device, inode. Files: lib/hash-triple.c lib/hash-triple.h Depends-on: hash-pjw same same-inode configure.ac: Makefile.am: lib_SOURCES += hash-triple.c Include: "hash-triple.h" License: GPL Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/havelib��������������������������������������������������������������0000664�0000000�0000000�00000000333�11671051007�0017476�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 build-aux/config.rpath Depends-on: configure.ac: Makefile.am: Include: License: unlimited Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/havelib-tests��������������������������������������������������������0000664�0000000�0000000�00000030504�11671051007�0020641�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-20111211-stable/modules/host-cpu-c-abi�������������������������������������������������������0000664�0000000�0000000�00000000330�11671051007�0020574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine canonical name of CPU and C ABI. Files: m4/host-cpu-c-abi.m4 Depends-on: configure.ac: gl_HOST_CPU_C_ABI Makefile.am: Include: License: unlimited Maintainer: Bruno Haible, Sam Steingold ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/host-os��������������������������������������������������������������0000664�0000000�0000000�00000000335�11671051007�0017462�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: GPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/hostent��������������������������������������������������������������0000664�0000000�0000000�00000000452�11671051007�0017552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Library containing gethostent(), sethostent(), endhostent(), gethostbyname(), gethostbyaddr(). Files: m4/hostent.m4 Depends-on: sys_socket configure.ac: gl_HOSTENT Makefile.am: Include: <netdb.h> Link: $(HOSTENT_LIB) License: LGPLv2+ Maintainer: Bruno Haible, Simon Josefsson ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/human����������������������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0017201�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 memmove xstrtoumax stdbool stdint configure.ac: gl_HUMAN Makefile.am: lib_SOURCES += human.c Include: "human.h" License: GPL Maintainer: Paul Eggert �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/hypot����������������������������������������������������������������0000664�0000000�0000000�00000000365�11671051007�0017234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: hypot() function: length of a vector in the plane. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([hypot]) Makefile.am: Include: <math.h> Link: $(HYPOT_LIBM) License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/hypot-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-hypot.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-hypot check_PROGRAMS += test-hypot test_hypot_LDADD = $(LDADD) @HYPOT_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/i-ring���������������������������������������������������������������0000664�0000000�0000000�00000000352�11671051007�0017252�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-20111211-stable/modules/i-ring-tests���������������������������������������������������������0000664�0000000�0000000�00000000207�11671051007�0020411�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-20111211-stable/modules/iconv����������������������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0017206�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/iconv-h��������������������������������������������������������������0000664�0000000�0000000�00000003016�11671051007�0017430�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 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: <iconv.h> License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/iconv-h-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000503�11671051007�0021134�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-20111211-stable/modules/iconv-h-tests��������������������������������������������������������0000664�0000000�0000000�00000000215�11671051007�0020566�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-20111211-stable/modules/iconv-tests����������������������������������������������������������0000664�0000000�0000000�00000000276�11671051007�0020350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-iconv.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-iconv check_PROGRAMS += test-iconv test_iconv_LDADD = $(LDADD) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/iconv_open�����������������������������������������������������������0000664�0000000�0000000�00000004301�11671051007�0020222�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.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: iconv_open-aix.h: iconv_open-aix.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 iconv_open-hpux.h: iconv_open-hpux.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 iconv_open-irix.h: iconv_open-irix.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 iconv_open-osf.h: iconv_open-osf.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 iconv_open-solaris.h: iconv_open-solaris.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 BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.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 MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h Include: <iconv.h> Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/iconv_open-utf�������������������������������������������������������0000664�0000000�0000000�00000000364�11671051007�0021023�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: Link: License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/iconv_open-utf-tests�������������������������������������������������0000664�0000000�0000000�00000000274�11671051007�0022163�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-20111211-stable/modules/idcache��������������������������������������������������������������0000664�0000000�0000000�00000000451�11671051007�0017445�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-20111211-stable/modules/idpriv-drop����������������������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0020322�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/idpriv-drop-tests����������������������������������������������������0000664�0000000�0000000�00000000671�11671051007�0021470�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-20111211-stable/modules/idpriv-droptemp������������������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0021216�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/idpriv-droptemp-tests������������������������������������������������0000664�0000000�0000000�00000000725�11671051007�0022356�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-20111211-stable/modules/ignore-value���������������������������������������������������������0000664�0000000�0000000�00000000336�11671051007�0020464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: ignore a value to quiet a compiler warning Files: lib/ignore-value.h Depends-on: configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: Include: "ignore-value.h" License: LGPLv2+ Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ignore-value-tests���������������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0021614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ignore-value.c Depends-on: stdio configure.ac: Makefile.am: TESTS += test-ignore-value check_PROGRAMS += test-ignore-value ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/imaxabs��������������������������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0017517�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/imaxabs-tests��������������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0020650�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-20111211-stable/modules/imaxdiv��������������������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0017526�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/imaxdiv-tests��������������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0020665�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-20111211-stable/modules/include_next���������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Allows wrapping a broken system header in a gnulib replacement. Files: m4/include_next.m4 Depends-on: configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: all ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/inet_ntop������������������������������������������������������������0000664�0000000�0000000�00000001311�11671051007�0020060�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-20111211-stable/modules/inet_ntop-tests������������������������������������������������������0000664�0000000�0000000�00000000367�11671051007�0021232�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-20111211-stable/modules/inet_pton������������������������������������������������������������0000664�0000000�0000000�00000001372�11671051007�0020067�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_NTOP = 1] sys_socket [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_NTOP = 1] errno [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_NTOP = 1] netinet_in [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_NTOP = 1] configure.ac: gl_FUNC_INET_PTON if test $HAVE_INET_PTON = 0 || test $REPLACE_INET_NTOP = 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-20111211-stable/modules/inet_pton-tests������������������������������������������������������0000664�0000000�0000000�00000000367�11671051007�0021232�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-20111211-stable/modules/inline���������������������������������������������������������������0000664�0000000�0000000�00000000327�11671051007�0017345�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-20111211-stable/modules/ino-map��������������������������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0017433�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-20111211-stable/modules/ino-map-tests��������������������������������������������������������0000664�0000000�0000000�00000000212�11671051007�0020560�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-20111211-stable/modules/integer_length�������������������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0021061�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/longlong.m4 m4/exponentd.m4 Depends-on: float configure.ac: AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) Makefile.am: lib_SOURCES += integer_length.c Include: "integer_length.h" License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/integer_length-tests�������������������������������������������������0000664�0000000�0000000�00000000237�11671051007�0022225�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-20111211-stable/modules/integer_length_l�����������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021402�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 m4/longlong.m4 Depends-on: integer_length configure.ac: AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) Makefile.am: lib_SOURCES += integer_length_l.c Include: "integer_length.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/integer_length_l-tests�����������������������������������������������0000664�0000000�0000000�00000000245�11671051007�0022537�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-20111211-stable/modules/integer_length_ll����������������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0021560�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 m4/longlong.m4 Depends-on: integer_length configure.ac: AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) Makefile.am: lib_SOURCES += integer_length_ll.c Include: "integer_length.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/integer_length_ll-tests����������������������������������������������0000664�0000000�0000000�00000000250�11671051007�0022707�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-20111211-stable/modules/intprops�������������������������������������������������������������0000664�0000000�0000000�00000000254�11671051007�0017744�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-20111211-stable/modules/intprops-tests�������������������������������������������������������0000664�0000000�0000000�00000000245�11671051007�0021104�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-20111211-stable/modules/inttostr�������������������������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0017753�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: LGPL Maintainer: Paul Eggert �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/inttostr-tests�������������������������������������������������������0000664�0000000�0000000�00000000250�11671051007�0021110�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-20111211-stable/modules/inttypes�������������������������������������������������������������0000664�0000000�0000000�00000000333�11671051007�0017743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: An <inttypes.h> that nearly conforms to C99. Files: m4/inttypes-pri.m4 Depends-on: inttypes-incomplete configure.ac: gl_INTTYPES_H Makefile.am: Include: <inttypes.h> License: LGPLv2+ Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/inttypes-incomplete��������������������������������������������������0000664�0000000�0000000�00000004412�11671051007�0022102�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/warn-on-use stdint configure.ac: gl_INTTYPES_INCOMPLETE 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 $(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/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/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/@''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 '/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-20111211-stable/modules/inttypes-tests�������������������������������������������������������0000664�0000000�0000000�00000000176�11671051007�0021110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-inttypes.c Depends-on: configure.ac: Makefile.am: TESTS += test-inttypes check_PROGRAMS += test-inttypes ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ioctl����������������������������������������������������������������0000664�0000000�0000000�00000001261�11671051007�0017177�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, Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ioctl-tests����������������������������������������������������������0000664�0000000�0000000�00000000226�11671051007�0020337�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-20111211-stable/modules/isapipe��������������������������������������������������������������0000664�0000000�0000000�00000001005�11671051007�0017513�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-20111211-stable/modules/isatty-tests���������������������������������������������������������0000664�0000000�0000000�00000000240�11671051007�0020536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-isatty.c tests/signature.h tests/macros.h Depends-on: unistd configure.ac: Makefile.am: TESTS += test-isatty check_PROGRAMS += test-isatty ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/isblank��������������������������������������������������������������0000664�0000000�0000000�00000000540�11671051007�0017507�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_CTYPE_MODULE_INDICATOR([isblank]) Makefile.am: Include: <ctype.h> License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/isblank-tests��������������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0020647�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-20111211-stable/modules/isdir����������������������������������������������������������������0000664�0000000�0000000�00000000313�11671051007�0017174�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-20111211-stable/modules/isfinite�������������������������������������������������������������0000664�0000000�0000000�00000001017�11671051007�0017676�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-20111211-stable/modules/isfinite-tests�������������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0021036�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-20111211-stable/modules/isinf����������������������������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0017205�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-20111211-stable/modules/isinf-tests����������������������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0020341�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-20111211-stable/modules/isnan����������������������������������������������������������������0000664�0000000�0000000�00000000365�11671051007�0017201�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-20111211-stable/modules/isnan-tests����������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0020337�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-20111211-stable/modules/isnand���������������������������������������������������������������0000664�0000000�0000000�00000000724�11671051007�0017344�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: Bruno Haible ��������������������������������������������gnulib-20111211-stable/modules/isnand-nolibm��������������������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0020620�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/isnand-nolibm-tests��������������������������������������������������0000664�0000000�0000000�00000000375�11671051007�0021764�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-20111211-stable/modules/isnand-tests���������������������������������������������������������0000664�0000000�0000000�00000000423�11671051007�0020500�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-20111211-stable/modules/isnanf���������������������������������������������������������������0000664�0000000�0000000�00000000724�11671051007�0017346�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: Bruno Haible ��������������������������������������������gnulib-20111211-stable/modules/isnanf-nolibm��������������������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0020622�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/isnanf-nolibm-tests��������������������������������������������������0000664�0000000�0000000�00000000374�11671051007�0021765�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-20111211-stable/modules/isnanf-tests���������������������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0020501�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-20111211-stable/modules/isnanl���������������������������������������������������������������0000664�0000000�0000000�00000000732�11671051007�0017353�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: Bruno Haible ��������������������������������������gnulib-20111211-stable/modules/isnanl-nolibm��������������������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0020635�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/isnanl-nolibm-tests��������������������������������������������������0000664�0000000�0000000�00000000457�11671051007�0021775�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-20111211-stable/modules/isnanl-tests���������������������������������������������������������0000664�0000000�0000000�00000000505�11671051007�0020511�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-20111211-stable/modules/iswblank�������������������������������������������������������������0000664�0000000�0000000�00000000717�11671051007�0017704�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: Bruno Haible �������������������������������������������������gnulib-20111211-stable/modules/iswblank-tests�������������������������������������������������������0000664�0000000�0000000�00000000240�11671051007�0021033�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-20111211-stable/modules/iswctype�������������������������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0017736�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; then AC_LIBOBJ([iswctype]) fi gl_WCTYPE_MODULE_INDICATOR([iswctype]) Makefile.am: Include: <wctype.h> License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/j0�������������������������������������������������������������������0000664�0000000�0000000�00000000371�11671051007�0016377�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/j0-tests�������������������������������������������������������������0000664�0000000�0000000�00000000260�11671051007�0017534�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-20111211-stable/modules/j1�������������������������������������������������������������������0000664�0000000�0000000�00000000371�11671051007�0016400�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/j1-tests�������������������������������������������������������������0000664�0000000�0000000�00000000260�11671051007�0017535�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-20111211-stable/modules/javacomp�������������������������������������������������������������0000664�0000000�0000000�00000000670�11671051007�0017670�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 safe-read xalloc xmalloca getline xconcat-filename fwriteerror clean-temp error xvasprintf c-strstr gettext-h javacomp-script configure.ac: Makefile.am: lib_SOURCES += javacomp.h javacomp.c Include: "javacomp.h" License: GPL Maintainer: Bruno Haible ������������������������������������������������������������������������gnulib-20111211-stable/modules/javacomp-script������������������������������������������������������0000664�0000000�0000000�00000000473�11671051007�0021173�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/javaexec�������������������������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0017656�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 configure.ac: Makefile.am: DEFS += -DEXEEXT=\"@EXEEXT@\" lib_SOURCES += javaexec.h javaexec.c Include: "javaexec.h" License: GPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/javaexec-script������������������������������������������������������0000664�0000000�0000000�00000000473�11671051007�0021161�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/javaversion����������������������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0020420�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" License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/jn�������������������������������������������������������������������0000664�0000000�0000000�00000000371�11671051007�0016475�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/jn-tests�������������������������������������������������������������0000664�0000000�0000000�00000000260�11671051007�0017632�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-20111211-stable/modules/langinfo�������������������������������������������������������������0000664�0000000�0000000�00000003163�11671051007�0017665�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 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_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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/langinfo-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0021376�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-20111211-stable/modules/langinfo-tests�������������������������������������������������������0000664�0000000�0000000�00000000221�11671051007�0021015�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-20111211-stable/modules/largefile������������������������������������������������������������0000664�0000000�0000000�00000000301�11671051007�0020011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Use large files. Files: m4/largefile.m4 Depends-on: configure.ac-early: AC_REQUIRE([AC_SYS_LARGEFILE]) configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: all �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/lchmod���������������������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0017334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: lchmod that is actually chmod (!) on hosts lacking lchmod Files: m4/lchmod.m4 Depends-on: sys_stat extensions configure.ac: gl_FUNC_LCHMOD gl_SYS_STAT_MODULE_INDICATOR([lchmod]) Makefile.am: Include: <sys/stat.h> License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/lchown���������������������������������������������������������������0000664�0000000�0000000�00000001324�11671051007�0017357�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-20111211-stable/modules/lchown-tests���������������������������������������������������������0000664�0000000�0000000�00000000421�11671051007�0020514�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: ignore-value mgetgroups usleep stat-time stdbool symlink configure.ac: AC_CHECK_FUNCS_ONCE([getegid]) Makefile.am: TESTS += test-lchown check_PROGRAMS += test-lchown �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ldd������������������������������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0016626�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ldexp����������������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0017177�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ldexp-tests����������������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0020344�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 Depends-on: isnand-nolibm signbit float configure.ac: Makefile.am: TESTS += test-ldexp check_PROGRAMS += test-ldexp test_ldexp_LDADD = $(LDADD) @LDEXP_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ldexpf���������������������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0017344�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 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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ldexpf-tests���������������������������������������������������������0000664�0000000�0000000�00000000443�11671051007�0020510�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 Depends-on: isnanf-nolibm signbit float configure.ac: Makefile.am: TESTS += test-ldexpf check_PROGRAMS += test-ldexpf test_ldexpf_LDADD = $(LDADD) @LDEXPF_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ldexpl���������������������������������������������������������������0000664�0000000�0000000�00000001375�11671051007�0017363�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 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: Bruno Haible, Paolo Bonzini �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ldexpl-tests���������������������������������������������������������0000664�0000000�0000000�00000000451�11671051007�0020515�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 Depends-on: fpucw isnanl-nolibm signbit float configure.ac: Makefile.am: TESTS += test-ldexpl check_PROGRAMS += test-ldexpl test_ldexpl_LDADD = $(LDADD) @LDEXPL_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ldtoastr�������������������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0017724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Convert long double to accurate string. Files: lib/ftoastr.h lib/ftoastr.c lib/ldtoastr.c m4/c-strtod.m4 Depends-on: intprops configure.ac: AC_REQUIRE([gl_C99_STRTOLD]) Makefile.am: lib_SOURCES += ldtoastr.c Include: "ftoastr.h" License: GPL Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/lgamma���������������������������������������������������������������0000664�0000000�0000000�00000000356�11671051007�0017327�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/lgamma-tests���������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0020460�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-20111211-stable/modules/lgpl-2.1�������������������������������������������������������������0000664�0000000�0000000�00000000335�11671051007�0017322�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-20111211-stable/modules/lib-ignore�����������������������������������������������������������0000664�0000000�0000000�00000000353�11671051007�0020115�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-20111211-stable/modules/lib-msvc-compat������������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0021061�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-20111211-stable/modules/lib-symbol-versions��������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0022007�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-20111211-stable/modules/lib-symbol-visibility������������������������������������������������0000664�0000000�0000000�00000001243�11671051007�0022323�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/libsigsegv�����������������������������������������������������������0000664�0000000�0000000�00000000464�11671051007�0020227�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/libunistring���������������������������������������������������������0000664�0000000�0000000�00000001204�11671051007�0020573�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/libunistring-optional������������������������������������������������0000664�0000000�0000000�00000000622�11671051007�0022421�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: LGPL Maintainer: Paolo Bonzini, Bruno Haible ��������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/linebuffer�����������������������������������������������������������0000664�0000000�0000000�00000000356�11671051007�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Read a line from a stream. Files: lib/linebuffer.h lib/linebuffer.c Depends-on: xalloc configure.ac: Makefile.am: lib_SOURCES += linebuffer.h linebuffer.c Include: "linebuffer.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/link�����������������������������������������������������������������0000664�0000000�0000000�00000001041�11671051007�0017016�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 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-20111211-stable/modules/link-follow����������������������������������������������������������0000664�0000000�0000000�00000000336�11671051007�0020324�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-20111211-stable/modules/link-tests�����������������������������������������������������������0000664�0000000�0000000�00000000311�11671051007�0020155�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-20111211-stable/modules/linkat���������������������������������������������������������������0000664�0000000�0000000�00000002557�11671051007�0017360�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 dirname-lgpl [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] link-follow [test $HAVE_LINKAT = 0 || test $REPLACE_LINKAT = 1] areadlink [test $HAVE_LINKAT = 0] at-internal [test $HAVE_LINKAT = 0] dosname [test $HAVE_LINKAT = 0] fstat [test $HAVE_LINKAT = 0] getcwd-lgpl [test $HAVE_LINKAT = 0] openat-h [test $HAVE_LINKAT = 0] openat-die [test $HAVE_LINKAT = 0] link [test $HAVE_LINKAT = 0] lstat [test $HAVE_LINKAT = 0] same-inode [test $HAVE_LINKAT = 0] save-cwd [test $HAVE_LINKAT = 0] symlink [test $HAVE_LINKAT = 0] 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]) fi if test $HAVE_LINKAT = 0; then 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-20111211-stable/modules/linkat-tests���������������������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0020511�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-20111211-stable/modules/linked-list����������������������������������������������������������0000664�0000000�0000000�00000000571�11671051007�0020307�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: GPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/linked-list-tests����������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0021443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-linked_list.c tests/macros.h Depends-on: array-list progname configure.ac: Makefile.am: TESTS += test-linked_list check_PROGRAMS += test-linked_list ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/linkedhash-list������������������������������������������������������0000664�0000000�0000000�00000001000�11671051007�0021137�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_anyhash_list1.h lib/gl_anyhash_list2.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_anyhash_list1.h gl_anyhash_list2.h gl_anylinked_list1.h gl_anylinked_list2.h Include: "gl_linkedhash_list.h" License: GPL Maintainer: Bruno Haible gnulib-20111211-stable/modules/linkedhash-list-tests������������������������������������������������0000664�0000000�0000000�00000000266�11671051007�0022314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-linkedhash_list.c tests/macros.h Depends-on: array-list progname configure.ac: Makefile.am: TESTS += test-linkedhash_list check_PROGRAMS += test-linkedhash_list ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/list�����������������������������������������������������������������0000664�0000000�0000000�00000000405�11671051007�0017037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract sequential list data type. Files: lib/gl_list.h lib/gl_list.c m4/gl_list.m4 Depends-on: inline stdbool configure.ac: gl_LIST Makefile.am: lib_SOURCES += gl_list.h gl_list.c Include: "gl_list.h" License: GPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/listen���������������������������������������������������������������0000664�0000000�0000000�00000001047�11671051007�0017365�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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/listen-tests���������������������������������������������������������0000664�0000000�0000000�00000000312�11671051007�0020517�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-20111211-stable/modules/localcharset���������������������������������������������������������0000664�0000000�0000000�00000005557�11671051007�0020545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return current locale's character encoding. Notice: If your package's tests make use of the locale_charset() function directly or indirectly, you may need to define the CHARSETALIASDIR environment variable, so that "make check" works before "make install". In Makefile.am syntax: TESTS_ENVIRONMENT += @LOCALCHARSET_TESTS_ENVIRONMENT@ Files: lib/localcharset.h lib/localcharset.c lib/config.charset lib/ref-add.sin lib/ref-del.sin m4/codeset.m4 m4/fcntl-o.m4 m4/glibc21.m4 m4/localcharset.m4 Depends-on: configmake extensions configure.ac: gl_LOCALCHARSET LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\"" AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) Makefile.am: lib_SOURCES += localcharset.h localcharset.c # We need the following in order to install a simple file in $(libdir) # which is shared with other installed packages. We use a list of referencing # packages so that "make uninstall" will remove the file if and only if it # is not used by another installed package. # On systems with glibc-2.1 or newer, the file is redundant, therefore we # avoid installing it. all-local: charset.alias ref-add.sed ref-del.sed charset_alias = $(DESTDIR)$(libdir)/charset.alias charset_tmp = $(DESTDIR)$(libdir)/charset.tmp install-exec-local: install-exec-localcharset install-exec-localcharset: all-local if test $(GLIBC21) = no; then \ case '$(host_os)' in \ darwin[56]*) \ need_charset_alias=true ;; \ darwin* | cygwin* | mingw* | pw32* | cegcc*) \ need_charset_alias=false ;; \ *) \ need_charset_alias=true ;; \ esac ; \ else \ need_charset_alias=false ; \ fi ; \ if $$need_charset_alias; then \ $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ fi ; \ if test -f $(charset_alias); then \ sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ rm -f $(charset_tmp) ; \ else \ if $$need_charset_alias; then \ sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ rm -f $(charset_tmp) ; \ fi ; \ fi uninstall-local: uninstall-localcharset uninstall-localcharset: all-local if test -f $(charset_alias); then \ sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ if grep '^# Packages using this file: $$' $(charset_tmp) \ > /dev/null; then \ rm -f $(charset_alias); \ else \ $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ fi; \ rm -f $(charset_tmp); \ fi charset.alias: config.charset $(AM_V_GEN)rm -f t-$@ $@ && \ $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ mv t-$@ $@ SUFFIXES += .sed .sin .sin.sed: $(AM_V_GEN)rm -f t-$@ $@ && \ sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ mv t-$@ $@ CLEANFILES += charset.alias ref-add.sed ref-del.sed Include: "localcharset.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/locale���������������������������������������������������������������0000664�0000000�0000000�00000003054�11671051007�0017326�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 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_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/locale-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000442�11671051007�0021032�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 endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/locale-tests���������������������������������������������������������0000664�0000000�0000000�00000000261�11671051007�0020463�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-20111211-stable/modules/localename�����������������������������������������������������������0000664�0000000�0000000�00000000657�11671051007�0020175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return current locale's name, according to glibc naming conventions. Files: lib/localename.h lib/localename.c m4/localename.m4 m4/intlmacosx.m4 m4/lcmessage.m4 Depends-on: strdup lock configure.ac: gl_LOCALENAME Makefile.am: lib_SOURCES += localename.c Include: "localename.h" Link: @INTL_MACOSX_LIBS@ $(LTLIBTHREAD) when linking with libtool, $(LIBTHREAD) otherwise License: LGPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������gnulib-20111211-stable/modules/localename-tests�����������������������������������������������������0000664�0000000�0000000�00000000424�11671051007�0021325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-localename.c tests/macros.h Depends-on: locale setenv unsetenv strdup configure.ac: AC_CHECK_FUNCS_ONCE([newlocale]) Makefile.am: TESTS += test-localename check_PROGRAMS += test-localename test_localename_LDADD = $(LDADD) @INTL_MACOSX_LIBS@ $(LIBTHREAD) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/lock�����������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0017016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Locking in multithreaded situations. Files: lib/glthread/lock.h lib/glthread/lock.c m4/lock.m4 Depends-on: threadlib configure.ac: gl_LOCK Makefile.am: lib_SOURCES += glthread/lock.h glthread/lock.c Include: "glthread/lock.h" Link: $(LTLIBTHREAD) when linking with libtool, $(LIBTHREAD) otherwise License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/lock-tests�����������������������������������������������������������0000664�0000000�0000000�00000000267�11671051007�0020162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-lock.c Depends-on: thread yield configure.ac: Makefile.am: TESTS += test-lock check_PROGRAMS += test-lock test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/log������������������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0016644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log() function: natural logarithmic function. Files: m4/log.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_LOG Makefile.am: Include: <math.h> Link: $(LOG_LIBM) License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/log-tests������������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-log check_PROGRAMS += test-log test_log_LDADD = $(LDADD) @LOG_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/log10����������������������������������������������������������������0000664�0000000�0000000�00000000351�11671051007�0017006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log10() function: base 10 logarithmic function. Files: m4/log10.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_LOG10 Makefile.am: Include: <math.h> Link: $(LOG10_LIBM) License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/log10-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log10.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-log10 check_PROGRAMS += test-log10 test_log10_LDADD = $(LDADD) @LOG10_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/log10f���������������������������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0017161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log10f() function: base 10 logarithmic function. Files: lib/log10f.c m4/log10f.m4 Depends-on: math log10 [test $HAVE_LOG10F = 0] configure.ac: gl_FUNC_LOG10F if test $HAVE_LOG10F = 0; then AC_LIBOBJ([log10f]) fi gl_MATH_MODULE_INDICATOR([log10f]) Makefile.am: Include: <math.h> Link: $(LOG10F_LIBM) License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/log10f-tests���������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log10f.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-log10f check_PROGRAMS += test-log10f test_log10f_LDADD = $(LDADD) @LOG10F_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/log1p����������������������������������������������������������������0000664�0000000�0000000�00000000372�11671051007�0017111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: log1p() function: natural logarithm of 1 plus argument. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([log1p]) Makefile.am: Include: <math.h> Link: $(LOG1P_LIBM) License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/log1p-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-log1p.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-log1p check_PROGRAMS += test-log1p test_log1p_LDADD = $(LDADD) @LOG1P_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/logb�����������������������������������������������������������������0000664�0000000�0000000�00000000373�11671051007�0017013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logb() function: get exponent. Files: m4/logb.m4 m4/mathfunc.m4 Depends-on: math configure.ac: gl_FUNC_LOGB gl_MATH_MODULE_INDICATOR([logb]) Makefile.am: Include: <math.h> Link: $(LOGB_LIBM) License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/logb-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logb.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-logb check_PROGRAMS += test-logb test_logb_LDADD = $(LDADD) @LOGB_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/logf�����������������������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0017014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: logf() function: natural logarithmic function. Files: lib/logf.c m4/logf.m4 Depends-on: math log [test $HAVE_LOGF = 0] configure.ac: gl_FUNC_LOGF if test $HAVE_LOGF = 0; then AC_LIBOBJ([logf]) fi gl_MATH_MODULE_INDICATOR([logf]) Makefile.am: Include: <math.h> Link: $(LOGF_LIBM) License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/logf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-logf check_PROGRAMS += test-logf test_logf_LDADD = $(LDADD) @LOGF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/login_tty������������������������������������������������������������0000664�0000000�0000000�00000000731�11671051007�0020076�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 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: Bruno Haible ���������������������������������������gnulib-20111211-stable/modules/login_tty-tests������������������������������������������������������0000664�0000000�0000000�00000000274�11671051007�0021240�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-20111211-stable/modules/logl�����������������������������������������������������������������0000664�0000000�0000000�00000001232�11671051007�0017020�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 $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] frexpl [test $HAVE_LOGL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [test $HAVE_LOGL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] floorl [test $HAVE_LOGL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_LOGL if test $HAVE_LOGL = 0; then AC_LIBOBJ([logl]) fi gl_MATH_MODULE_INDICATOR([logl]) Makefile.am: Include: <math.h> Link: $(LOGL_LIBM) License: LGPL Maintainer: Paolo Bonzini ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/logl-tests�����������������������������������������������������������0000664�0000000�0000000�00000000300�11671051007�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-logl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-logl check_PROGRAMS += test-logl test_logl_LDADD = $(LDADD) @LOGL_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/long-options���������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0020511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Handle --help and --version options. Files: lib/long-options.h lib/long-options.c Depends-on: getopt-gnu stdlib version-etc configure.ac: Makefile.am: lib_SOURCES += long-options.c Include: "long-options.h" License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/longlong�������������������������������������������������������������0000664�0000000�0000000�00000000335�11671051007�0017705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Define HAVE_LONG_LONG_INT if 'long long int' works. Files: m4/longlong.m4 configure.ac: AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) License: GPL Maintainer: Ben Pfaff ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/lseek����������������������������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0017174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: lseek() function: Reposition a file descriptor. Files: lib/lseek.c m4/lseek.m4 Depends-on: unistd 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-20111211-stable/modules/lseek-tests����������������������������������������������������������0000664�0000000�0000000�00000000255�11671051007�0020332�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-20111211-stable/modules/lstat����������������������������������������������������������������0000664�0000000�0000000�00000000704�11671051007�0017215�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 dosname [test $REPLACE_LSTAT = 1] stat [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-20111211-stable/modules/lstat-tests����������������������������������������������������������0000664�0000000�0000000�00000000327�11671051007�0020356�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-20111211-stable/modules/maintainer-makefile��������������������������������������������������0000664�0000000�0000000�00000000501�11671051007�0021763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Helper GNUmakefile with syntax checks, build improvements, etc. 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]))])]) License: GPLed build tool Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/malloc���������������������������������������������������������������0000664�0000000�0000000�00000000750�11671051007�0017336�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/. Status: deprecated Notice: This module is deprecated. Use the module 'malloc-gnu' instead. Files: Depends-on: malloc-gnu configure.ac: Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Jim Meyering ������������������������gnulib-20111211-stable/modules/malloc-gnu�����������������������������������������������������������0000664�0000000�0000000�00000001012�11671051007�0020115�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 gl_MODULE_INDICATOR([malloc-gnu]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/malloc-gnu-tests�����������������������������������������������������0000664�0000000�0000000�00000000204�11671051007�0021257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-malloc-gnu.c Depends-on: configure.ac: Makefile.am: TESTS += test-malloc-gnu check_PROGRAMS += test-malloc-gnu ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/malloc-posix���������������������������������������������������������0000664�0000000�0000000�00000000530�11671051007�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: malloc() function: allocate memory with indefinite extent. Files: lib/malloc.c m4/malloc.m4 Depends-on: stdlib configure.ac: 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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/malloca��������������������������������������������������������������0000664�0000000�0000000�00000000465�11671051007�0017502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Safe automatic memory allocation. Files: lib/malloca.h lib/malloca.c lib/malloca.valgrind m4/malloca.m4 m4/eealloc.m4 m4/longlong.m4 Depends-on: alloca-opt verify configure.ac: gl_MALLOCA Makefile.am: lib_SOURCES += malloca.c Include: "malloca.h" License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/malloca-tests��������������������������������������������������������0000664�0000000�0000000�00000000205�11671051007�0020632�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-20111211-stable/modules/manywarnings���������������������������������������������������������0000664�0000000�0000000�00000000307�11671051007�0020602�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 Depends-on: warnings configure.ac: License: unlimited Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/math�����������������������������������������������������������������0000664�0000000�0000000�00000022204�11671051007�0017016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <math.h>. Files: lib/math.in.h m4/math_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use float configure.ac: gl_MATH_H Makefile.am: BUILT_SOURCES += math.h # 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_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_FABSF''@/$(GNULIB_FABSF)/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_FMODF''@/$(GNULIB_FMODF)/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_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_LOGB''@/$(GNULIB_LOGB)/g' \ -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \ -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \ -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \ -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \ -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/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' \ < $(srcdir)/math.in.h | \ 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_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ -e 's|@''HAVE_COPYSIGNF''@|$(HAVE_COPYSIGNF)|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_FABSF''@|$(HAVE_FABSF)|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_FREXPF''@|$(HAVE_FREXPF)|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_MODFF''@|$(HAVE_MODFF)|g' \ -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ -e 's|@''HAVE_RINTF''@|$(HAVE_RINTF)|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_CEILF''@|$(HAVE_DECL_CEILF)|g' \ -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|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_LOGB''@|$(HAVE_DECL_LOGB)|g' \ -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|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_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|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_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_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_NAN''@|$(REPLACE_NAN)|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_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|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-20111211-stable/modules/math-c++-tests�������������������������������������������������������0000664�0000000�0000000�00000000632�11671051007�0020525�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-20111211-stable/modules/math-tests�����������������������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0020147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-math.c Depends-on: math-c++-tests configure.ac: Makefile.am: TESTS += test-math check_PROGRAMS += test-math �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mathl����������������������������������������������������������������0000664�0000000�0000000�00000001322�11671051007�0017170�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 $ACOSL_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-20111211-stable/modules/mbchar���������������������������������������������������������������0000664�0000000�0000000�00000000437�11671051007�0017325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Multibyte character data type. Files: lib/mbchar.h lib/mbchar.c m4/mbchar.m4 Depends-on: extensions stdbool wchar wctype-h iswblank wcwidth memcmp configure.ac: gl_MBCHAR Makefile.am: lib_SOURCES += mbchar.c Include: "mbchar.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbfile���������������������������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0017323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Multibyte character I/O. Files: lib/mbfile.h m4/mbfile.m4 m4/mbrtowc.m4 Depends-on: mbchar mbrtowc mbsinit wchar stdbool configure.ac: gl_MBFILE Makefile.am: lib_SOURCES += mbfile.h Include: "mbfile.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbiter���������������������������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0017345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterating through multibyte strings. Files: lib/mbiter.h m4/mbiter.m4 m4/mbrtowc.m4 Depends-on: mbchar mbrtowc mbsinit wchar stdbool configure.ac: gl_MBITER Makefile.am: lib_SOURCES += mbiter.h Include: "mbiter.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbmemcasecmp���������������������������������������������������������0000664�0000000�0000000�00000000421�11671051007�0020513�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" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbmemcasecmp-tests���������������������������������������������������0000664�0000000�0000000�00000001046�11671051007�0021657�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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbmemcasecoll��������������������������������������������������������0000664�0000000�0000000�00000000525�11671051007�0020672�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" License: GPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbmemcasecoll-tests��������������������������������������������������0000664�0000000�0000000�00000001056�11671051007�0022032�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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbrlen���������������������������������������������������������������0000664�0000000�0000000�00000000710�11671051007�0017342�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> License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������gnulib-20111211-stable/modules/mbrtowc��������������������������������������������������������������0000664�0000000�0000000�00000001366�11671051007�0017550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mbrtowc() function: convert multibyte character to wide character. Files: lib/mbrtowc.c 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_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1] 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]) gl_PREREQ_MBRTOWC fi gl_WCHAR_MODULE_INDICATOR([mbrtowc]) Makefile.am: Include: <wchar.h> License: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbrtowc-tests��������������������������������������������������������0000664�0000000�0000000�00000001607�11671051007�0020706�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-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.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 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-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.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 �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbscasecmp�����������������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0020205�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> License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbscasecmp-tests�����������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0021341�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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbscasestr�����������������������������������������������������������0000664�0000000�0000000�00000000534�11671051007�0020235�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> License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbscasestr-tests�����������������������������������������������������0000664�0000000�0000000�00000001222�11671051007�0021370�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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbschr���������������������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0017341�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> License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbschr-tests���������������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0020501�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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbscspn��������������������������������������������������������������0000664�0000000�0000000�00000000455�11671051007�0017536�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> License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbscspn-tests��������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0020673�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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsinit��������������������������������������������������������������0000664�0000000�0000000�00000001040�11671051007�0017525�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> License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsinit-tests��������������������������������������������������������0000664�0000000�0000000�00000000457�11671051007�0020700�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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbslen���������������������������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0017340�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> License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsncasecmp����������������������������������������������������������0000664�0000000�0000000�00000000451�11671051007�0020360�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> License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsncasecmp-tests����������������������������������������������������0000664�0000000�0000000�00000000445�11671051007�0021523�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 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsnlen��������������������������������������������������������������0000664�0000000�0000000�00000000447�11671051007�0017530�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> License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsnrtowcs�����������������������������������������������������������0000664�0000000�0000000�00000001327�11671051007�0020271�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> License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsnrtowcs-tests�����������������������������������������������������0000664�0000000�0000000�00000001175�11671051007�0021432�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 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbspbrk��������������������������������������������������������������0000664�0000000�0000000�00000000455�11671051007�0017531�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> License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbspbrk-tests��������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0020666�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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbspcasecmp����������������������������������������������������������0000664�0000000�0000000�00000000451�11671051007�0020362�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> License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbspcasecmp-tests����������������������������������������������������0000664�0000000�0000000�00000000445�11671051007�0021525�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 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsrchr��������������������������������������������������������������0000664�0000000�0000000�00000000435�11671051007�0017527�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> License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsrchr-tests��������������������������������������������������������0000664�0000000�0000000�00000000417�11671051007�0020667�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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsrtowcs������������������������������������������������������������0000664�0000000�0000000�00000001276�11671051007�0020116�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> License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsrtowcs-tests������������������������������������������������������0000664�0000000�0000000�00000001163�11671051007�0021251�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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbssep���������������������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0017354�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> License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsspn���������������������������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0017373�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> License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsspn-tests���������������������������������������������������������0000664�0000000�0000000�00000000421�11671051007�0020524�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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsstr���������������������������������������������������������������0000664�0000000�0000000�00000000473�11671051007�0017403�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> License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbsstr-tests���������������������������������������������������������0000664�0000000�0000000�00000000712�11671051007�0020537�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 ������������������������������������������������������gnulib-20111211-stable/modules/mbstok_r�������������������������������������������������������������0000664�0000000�0000000�00000000461�11671051007�0017706�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> License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbswidth�������������������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0017706�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" License: GPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mbtowc���������������������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0017363�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 $REPLACE_MBTOWC = 1] wchar [test $REPLACE_MBTOWC = 1] configure.ac: gl_FUNC_MBTOWC if 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: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/mbuiter��������������������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0017537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Iterating through multibyte strings. Files: lib/mbuiter.h m4/mbiter.m4 m4/mbrtowc.m4 Depends-on: mbchar mbrtowc mbsinit wchar stdbool strnlen1 configure.ac: gl_MBITER Makefile.am: lib_SOURCES += mbuiter.h Include: "mbuiter.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/memcasecmp�����������������������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0020177�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-20111211-stable/modules/memcasecmp-tests�����������������������������������������������������0000664�0000000�0000000�00000000445�11671051007�0021342�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-20111211-stable/modules/memchr���������������������������������������������������������������0000664�0000000�0000000�00000000655�11671051007�0017346�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 memchr-obsolete configure.ac: gl_FUNC_MEMCHR if test $HAVE_MEMCHR = 0 || 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-20111211-stable/modules/memchr-obsolete������������������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0021153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memchr() function for old platforms. Status: obsolete Notice: This module is obsolete. Files: m4/memchr-obsolete.m4 Depends-on: memchr configure.ac: gl_FUNC_MEMCHR_OBSOLETE Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/memchr-tests���������������������������������������������������������0000664�0000000�0000000�00000000540�11671051007�0020477�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-20111211-stable/modules/memchr2��������������������������������������������������������������0000664�0000000�0000000�00000000435�11671051007�0017424�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-20111211-stable/modules/memchr2-tests��������������������������������������������������������0000664�0000000�0000000�00000000434�11671051007�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memchr2.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-memchr2 check_PROGRAMS += test-memchr2 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/memcmp���������������������������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0017341�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-20111211-stable/modules/memcmp-tests���������������������������������������������������������0000664�0000000�0000000�00000000453�11671051007�0020505�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-20111211-stable/modules/memcmp2��������������������������������������������������������������0000664�0000000�0000000�00000000355�11671051007�0017430�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/memcoll��������������������������������������������������������������0000664�0000000�0000000�00000000410�11671051007�0017510�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-20111211-stable/modules/memcoll-tests��������������������������������������������������������0000664�0000000�0000000�00000000212�11671051007�0020650�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-20111211-stable/modules/memcpy���������������������������������������������������������������0000664�0000000�0000000�00000000521�11671051007�0017355�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: 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-20111211-stable/modules/memmem���������������������������������������������������������������0000664�0000000�0000000�00000000470�11671051007�0017343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: memmem() function: efficiently locate first substring in a buffer. Files: 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-20111211-stable/modules/memmem-simple��������������������������������������������������������0000664�0000000�0000000�00000000656�11671051007�0020640�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: 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-20111211-stable/modules/memmem-tests���������������������������������������������������������0000664�0000000�0000000�00000000511�11671051007�0020477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-memmem.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]) AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-memmem check_PROGRAMS += test-memmem ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/memmove��������������������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0017532�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: 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-20111211-stable/modules/mempcpy��������������������������������������������������������������0000664�0000000�0000000�00000000601�11671051007�0017534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: mempcpy() function: copy memory area, return point 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-20111211-stable/modules/memrchr��������������������������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0017531�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-20111211-stable/modules/memrchr-tests��������������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0020667�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: 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-20111211-stable/modules/memset���������������������������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0017362�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: 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-20111211-stable/modules/memxor���������������������������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0017372�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-20111211-stable/modules/mgetgroups�����������������������������������������������������������0000664�0000000�0000000�00000000542�11671051007�0020262�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: getgroups getugroups realloc-gnu xalloc-oversized configure.ac: gl_MGETGROUPS Makefile.am: lib_SOURCES += mgetgroups.c Include: "mgetgroups.h" License: GPL Maintainer: Jim Meyering, Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/minmax���������������������������������������������������������������0000664�0000000�0000000�00000000316�11671051007�0017356�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mkancesdirs����������������������������������������������������������0000664�0000000�0000000�00000000535�11671051007�0020373�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: dirname-lgpl fcntl-h 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-20111211-stable/modules/mkdir����������������������������������������������������������������0000664�0000000�0000000�00000000472�11671051007�0017176�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] configure.ac: gl_FUNC_MKDIR if test $REPLACE_MKDIR = 1; then AC_LIBOBJ([mkdir]) fi Makefile.am: Include: <sys/stat.h> License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mkdir-p��������������������������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0017436�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 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" License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mkdir-tests����������������������������������������������������������0000664�0000000�0000000�00000000306�11671051007�0020332�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-20111211-stable/modules/mkdirat��������������������������������������������������������������0000664�0000000�0000000�00000001500�11671051007�0017514�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 lib/openat-priv.h m4/mkdirat.m4 Depends-on: sys_stat extensions at-internal [test $HAVE_MKDIRAT = 0] dosname [test $HAVE_MKDIRAT = 0] errno [test $HAVE_MKDIRAT = 0] fchdir [test $HAVE_MKDIRAT = 0] fcntl-h [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-20111211-stable/modules/mkdirat-tests��������������������������������������������������������0000664�0000000�0000000�00000000365�11671051007�0020664�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 progname symlink configure.ac: Makefile.am: TESTS += test-mkdirat check_PROGRAMS += test-mkdirat test_mkdirat_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mkdtemp��������������������������������������������������������������0000664�0000000�0000000�00000000664�11671051007�0017534�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> License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������gnulib-20111211-stable/modules/mkfifo���������������������������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0017337�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-20111211-stable/modules/mkfifo-tests���������������������������������������������������������0000664�0000000�0000000�00000000312�11671051007�0020474�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-20111211-stable/modules/mkfifoat�������������������������������������������������������������0000664�0000000�0000000�00000002204�11671051007�0017663�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 at-internal [test $HAVE_MKFIFOAT = 0 || test $HAVE_MKNODAT = 0] dosname [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] fcntl-h [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; then AC_LIBOBJ([mkfifoat]) fi if test $HAVE_MKNODAT = 0; 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-20111211-stable/modules/mkfifoat-tests�������������������������������������������������������0000664�0000000�0000000�00000000402�11671051007�0021021�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-20111211-stable/modules/mknod����������������������������������������������������������������0000664�0000000�0000000�00000000741�11671051007�0017177�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-20111211-stable/modules/mknod-tests����������������������������������������������������������0000664�0000000�0000000�00000000307�11671051007�0020335�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-20111211-stable/modules/mkostemp�������������������������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0017734�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> License: LGPLv2+ Maintainer: Jim Meyering, Bruno Haible ������������������gnulib-20111211-stable/modules/mkostemps������������������������������������������������������������0000664�0000000�0000000�00000000743�11671051007�0020113�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> License: LGPLv2+ Maintainer: Eric Blake �����������������������������gnulib-20111211-stable/modules/mkstemp��������������������������������������������������������������0000664�0000000�0000000�00000000724�11671051007�0017550�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> License: LGPLv2+ Maintainer: Jim Meyering ��������������������������������������������gnulib-20111211-stable/modules/mkstemps�������������������������������������������������������������0000664�0000000�0000000�00000000670�11671051007�0017733�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> License: LGPLv2+ Maintainer: Eric Blake ������������������������������������������������������������������������gnulib-20111211-stable/modules/mktempd��������������������������������������������������������������0000664�0000000�0000000�00000000310�11671051007�0017520�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-20111211-stable/modules/mktime���������������������������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0017360�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: multiarch time_r [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-20111211-stable/modules/mktime-internal������������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0021170�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: mktime configure.ac: gl_FUNC_MKTIME_INTERNAL if test $REPLACE_MKTIME = 1; then AC_LIBOBJ([mktime]) gl_PREREQ_MKTIME fi Makefile.am: Include: "mktime-internal.h" License: LGPLv2+ Maintainer: Bruno Haible, Paul Eggert �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/modechange�����������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0020161�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-20111211-stable/modules/modf�����������������������������������������������������������������0000664�0000000�0000000�00000000360�11671051007�0017011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: modf() function: get signed integer and fractional parts. Files: m4/modf.m4 m4/mathfunc.m4 Depends-on: configure.ac: gl_FUNC_MODF Makefile.am: Include: <math.h> Link: $(MODF_LIBM) License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/modf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-modf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-modf check_PROGRAMS += test-modf test_modf_LDADD = $(LDADD) @MODF_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/modff����������������������������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0017160�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 modf [test $HAVE_MODFF = 0] configure.ac: gl_FUNC_MODFF if test $HAVE_MODFF = 0; then AC_LIBOBJ([modff]) fi gl_MATH_MODULE_INDICATOR([modff]) Makefile.am: Include: <math.h> Link: $(MODFF_LIBM) License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/modff-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-modff.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-modff check_PROGRAMS += test-modff test_modff_LDADD = $(LDADD) @MODFF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/mountlist������������������������������������������������������������0000664�0000000�0000000�00000000612�11671051007�0020122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return list of mounted file systems. Files: lib/mountlist.h lib/mountlist.c m4/ls-mntd-fs.m4 m4/fstypename.m4 m4/mountlist.m4 Depends-on: 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-20111211-stable/modules/mpsort���������������������������������������������������������������0000664�0000000�0000000�00000000347�11671051007�0017415�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-20111211-stable/modules/msvc-inval�����������������������������������������������������������0000664�0000000�0000000�00000000516�11671051007�0020146�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: gl_MSVC_INVAL if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-inval]) fi Makefile.am: Include: "msvc-inval.h" License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/msvc-nothrow���������������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0020535�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: gl_MSVC_NOTHROW if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-nothrow]) fi Makefile.am: Include: "msvc-nothrow.h" License: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/multiarch������������������������������������������������������������0000664�0000000�0000000�00000000334�11671051007�0020055�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: Bruno Haible, autoconf ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/nanosleep������������������������������������������������������������0000664�0000000�0000000�00000001672�11671051007�0020057�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: LGPL Maintainer: Jim Meyering ����������������������������������������������������������������������gnulib-20111211-stable/modules/nanosleep-tests������������������������������������������������������0000664�0000000�0000000�00000000360�11671051007�0021210�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-20111211-stable/modules/net_if-tests���������������������������������������������������������0000664�0000000�0000000�00000000212�11671051007�0020464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-net_if.c tests/signature.h Depends-on: configure.ac: Makefile.am: TESTS += test-net_if check_PROGRAMS += test-net_if ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/netdb����������������������������������������������������������������0000664�0000000�0000000�00000003330�11671051007�0017160�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_HEADER_NETDB 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 '/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-20111211-stable/modules/netdb-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000442�11671051007�0020667�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-20111211-stable/modules/netdb-tests����������������������������������������������������������0000664�0000000�0000000�00000000205�11671051007�0020316�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-20111211-stable/modules/netinet_in�����������������������������������������������������������0000664�0000000�0000000�00000002236�11671051007�0020224�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-20111211-stable/modules/netinet_in-tests�����������������������������������������������������0000664�0000000�0000000�00000000204�11671051007�0021355�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-20111211-stable/modules/nextafter������������������������������������������������������������0000664�0000000�0000000�00000000424�11671051007�0020065�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/nextafter-tests������������������������������������������������������0000664�0000000�0000000�00000000323�11671051007�0021223�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-20111211-stable/modules/nl_langinfo����������������������������������������������������������0000664�0000000�0000000�00000000616�11671051007�0020356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: nl_langinfo() function: query locale dependent information. Files: lib/nl_langinfo.c m4/nl_langinfo.m4 Depends-on: langinfo configure.ac: gl_FUNC_NL_LANGINFO if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then AC_LIBOBJ([nl_langinfo]) fi gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) Makefile.am: Include: <langinfo.h> License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/nl_langinfo-tests����������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nl_langinfo.sh tests/test-nl_langinfo.c tests/signature.h tests/macros.h m4/locale-fr.m4 Depends-on: c-strcase setlocale configure.ac: gt_LOCALE_FR gt_LOCALE_FR_UTF8 Makefile.am: TESTS += test-nl_langinfo.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-nl_langinfo �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/no-c++���������������������������������������������������������������0000664�0000000�0000000�00000000314�11671051007�0017045�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/nocrash��������������������������������������������������������������0000664�0000000�0000000�00000000303�11671051007�0017516�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: Bruno Haible, Paolo Bonzini �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/nonblocking����������������������������������������������������������0000664�0000000�0000000�00000001515�11671051007�0020372�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. AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_ASM_SYMBOL_PREFIX]) GNULIB_STDIO_H_NONBLOCKING=1 dnl Define the substituted variable GNULIB_UNISTD_H_NONBLOCKING to 1. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) GNULIB_UNISTD_H_NONBLOCKING=1 Makefile.am: lib_SOURCES += nonblocking.c Include: "nonblocking.h" License: LGPLv2+ Maintainer: Bruno Haible, Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/nonblocking-pipe-tests�����������������������������������������������0000664�0000000�0000000�00000001135�11671051007�0022463�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@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/nonblocking-socket-tests���������������������������������������������0000664�0000000�0000000�00000001454�11671051007�0023022�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@ test_nonblocking_socket_child_LDADD = $(LDADD) $(LIBSOCKET) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/nonblocking-tests����������������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0021530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-nonblocking.c tests/macros.h Depends-on: close 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-20111211-stable/modules/nproc����������������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0017202�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 unistd configure.ac: gl_NPROC Makefile.am: lib_SOURCES += nproc.c Include: "nproc.h" License: LGPL Maintainer: Glen Lenker and Paul Eggert �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/obstack��������������������������������������������������������������0000664�0000000�0000000�00000000520�11671051007�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Memory allocation, optimized for stack-like allocation patterns. Files: lib/obstack.h lib/obstack.c Depends-on: 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-20111211-stable/modules/obstack-printf�������������������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0021014�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-20111211-stable/modules/obstack-printf-posix�������������������������������������������������0000664�0000000�0000000�00000001352�11671051007�0022154�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-20111211-stable/modules/obstack-printf-posix-tests�������������������������������������������0000664�0000000�0000000�00000000106�11671051007�0023310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: obstack-printf-tests configure.ac: Makefile.am: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/obstack-printf-tests�������������������������������������������������0000664�0000000�0000000�00000000360�11671051007�0022152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-obstack-printf.c tests/signature.h tests/macros.h Depends-on: progname xalloc configure.ac: Makefile.am: TESTS += test-obstack-printf check_PROGRAMS += test-obstack-printf test_obstack_printf_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/open�����������������������������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0017033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: open() function: open a descriptor to a file. Files: lib/open.c m4/open.m4 m4/mode_t.m4 Depends-on: fcntl-h largefile 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: Bruno Haible ������������������������������������������������������������������������������������gnulib-20111211-stable/modules/open-tests�����������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-open.h tests/test-open.c tests/signature.h tests/macros.h Depends-on: stdbool symlink configure.ac: Makefile.am: TESTS += test-open check_PROGRAMS += test-open �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/openat���������������������������������������������������������������0000664�0000000�0000000�00000001764�11671051007�0017363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: openat() function: Open a file at a directory. Files: lib/openat.c lib/openat-priv.h m4/openat.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] fstat [test $REPLACE_OPENAT = 1] at-internal [test $HAVE_OPENAT = 0] dosname [test $HAVE_OPENAT = 0] errno [test $HAVE_OPENAT = 0] fchdir [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-20111211-stable/modules/openat-die�����������������������������������������������������������0000664�0000000�0000000�00000000421�11671051007�0020107�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 configure.ac: Makefile.am: lib_SOURCES += openat-die.c Include: "openat.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/openat-h�������������������������������������������������������������0000664�0000000�0000000�00000000403�11671051007�0017575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Declarations of functions related to accessing files relative to a directory. Files: lib/openat.h Depends-on: fcntl-h stdbool sys_stat unistd configure.ac: Makefile.am: Include: "openat.h" License: GPL Maintainer: Jim Meyering, Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/openat-safer���������������������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0020457�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-20111211-stable/modules/openat-safer-tests���������������������������������������������������0000664�0000000�0000000�00000000306�11671051007�0021610�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-20111211-stable/modules/openat-tests���������������������������������������������������������0000664�0000000�0000000�00000000343�11671051007�0020513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-openat.c tests/test-open.h tests/signature.h tests/macros.h Depends-on: progname symlink configure.ac: Makefile.am: TESTS += test-openat check_PROGRAMS += test-openat test_openat_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/opendir��������������������������������������������������������������0000664�0000000�0000000�00000001133�11671051007�0017523�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] 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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/openmp���������������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0017371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Detection of OpenMP support. Files: m4/openmp.m4 Depends-on: configure.ac: AC_OPENMP Makefile.am: Include: Link: $(OPENMP_CFLAGS) License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/openpty��������������������������������������������������������������0000664�0000000�0000000�00000001101�11671051007�0017554�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-20111211-stable/modules/openpty-tests��������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020726�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-20111211-stable/modules/oset�����������������������������������������������������������������0000664�0000000�0000000�00000000401�11671051007�0017032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Abstract ordered set data type. Files: lib/gl_oset.h lib/gl_oset.c m4/gl_list.m4 Depends-on: inline stdbool configure.ac: gl_LIST Makefile.am: lib_SOURCES += gl_oset.h gl_oset.c Include: "gl_oset.h" License: GPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pagealign_alloc������������������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0021173�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 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-20111211-stable/modules/parse-datetime�������������������������������������������������������0000664�0000000�0000000�00000002220�11671051007�0020765�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/bison.m4 m4/tm_gmtoff.m4 m4/parse-datetime.m4 Depends-on: c-ctype stdbool gettime intprops mktime setenv unsetenv time verify xalloc configure.ac: gl_PARSE_DATETIME Makefile.am: # This rule overrides the Automake generated .y.c rule, to ensure that the # parse-datetime.c file gets generated in the source directory, not in the # build directory. parse-datetime.c: parse-datetime.y $(AM_V_GEN)$(SHELL) $(YLWRAP) $(srcdir)/parse-datetime.y \ y.tab.c parse-datetime.c \ y.tab.h parse-datetime.h \ y.output parse-datetime.output \ -- $(YACC) $(YFLAGS) $(AM_YFLAGS) && \ mv parse-datetime.c parse-datetime.c-t && \ mv parse-datetime.c-t $(srcdir)/parse-datetime.c lib_SOURCES += parse-datetime.y BUILT_SOURCES += parse-datetime.c MOSTLYCLEANFILES += parse-datetime.c-t MAINTAINERCLEANFILES += parse-datetime.c EXTRA_DIST += parse-datetime.c Include: "parse-datetime.h" License: GPL Maintainer: Paul Eggert ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/parse-datetime-tests�������������������������������������������������0000664�0000000�0000000�00000000363�11671051007�0022133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-parse-datetime.c tests/macros.h Depends-on: progname setenv configure.ac: Makefile.am: TESTS += test-parse-datetime check_PROGRAMS += test-parse-datetime test_parse_datetime_LDADD = $(LDADD) @LIBINTL@ $(LIB_CLOCK_GETTIME) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/parse-duration�������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Parse a duration given as string. Files: lib/parse-duration.h lib/parse-duration.c Depends-on: configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: lib_SOURCES += parse-duration.c Include: "parse-duration.h" License: GPL Maintainer: Bruce Korb �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/parse-duration-tests�������������������������������������������������0000664�0000000�0000000�00000000357�11671051007�0022167�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) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/passfd���������������������������������������������������������������0000664�0000000�0000000�00000000460�11671051007�0017345�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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/passfd-tests���������������������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0020505�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-20111211-stable/modules/pathmax��������������������������������������������������������������0000664�0000000�0000000�00000000367�11671051007�0017535�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: configure.ac: gl_PATHMAX Makefile.am: Include: "pathmax.h" License: LGPLv2+ Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pathmax-tests��������������������������������������������������������0000664�0000000�0000000�00000000173�11671051007�0020670�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-20111211-stable/modules/pclose���������������������������������������������������������������0000664�0000000�0000000�00000000520�11671051007�0017347�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pclose-tests���������������������������������������������������������0000664�0000000�0000000�00000000075�11671051007�0020514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: popen-tests configure.ac: Makefile.am: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/perl�����������������������������������������������������������������0000664�0000000�0000000�00000000247�11671051007�0017032�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-20111211-stable/modules/perror���������������������������������������������������������������0000664�0000000�0000000�00000000704�11671051007�0017377�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-20111211-stable/modules/perror-tests���������������������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0020536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh tests/macros.h tests/signature.h tests/test-perror.c tests/test-perror2.c tests/test-perror.sh Depends-on: dup2 ftruncate strerror configure.ac: Makefile.am: TESTS += test-perror.sh test-perror2 check_PROGRAMS += test-perror test-perror2 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/physmem��������������������������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0017550�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: configure.ac: gl_PHYSMEM Makefile.am: lib_SOURCES += physmem.c Include: "physmem.h" License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pipe�����������������������������������������������������������������0000664�0000000�0000000�00000000427�11671051007�0017025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Creation of subprocesses, communicating via pipes. Status: deprecated Notice: This module is deprecated. Use the module 'spawn-pipe' instead. Files: lib/pipe.h Depends-on: spawn-pipe configure.ac: Makefile.am: Include: License: GPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pipe-filter-gi�������������������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0020707�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 Depends-on: spawn-pipe wait-process error fcntl-h gettext-h stdbool stdint stdlib sys_select unistd configure.ac: AC_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS_ONCE([select]) Makefile.am: lib_SOURCES += pipe-filter-gi.c Include: "pipe-filter.h" License: GPL Maintainer: Paolo Bonzini, Bruno Haible �������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pipe-filter-gi-tests�������������������������������������������������0000664�0000000�0000000�00000001055�11671051007�0022043�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 progname 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@ test_pipe_filter_gi2_main_LDADD = $(LDADD) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pipe-filter-ii�������������������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0020710�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 Depends-on: spawn-pipe wait-process error fcntl-h gettext-h stdbool stdint stdlib sys_select unistd configure.ac: AC_REQUIRE([AC_C_INLINE]) AC_CHECK_FUNCS_ONCE([select]) Makefile.am: lib_SOURCES += pipe-filter-ii.c Include: "pipe-filter.h" License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pipe-filter-ii-tests�������������������������������������������������0000664�0000000�0000000�00000001046�11671051007�0022045�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 progname 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@ test_pipe_filter_ii2_main_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pipe-posix�����������������������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0020164�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-20111211-stable/modules/pipe-posix-tests�����������������������������������������������������0000664�0000000�0000000�00000000262�11671051007�0021322�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-20111211-stable/modules/pipe2����������������������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0017107�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: Bruno Haible, Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pipe2-safer����������������������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0020203�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-20111211-stable/modules/pipe2-tests����������������������������������������������������������0000664�0000000�0000000�00000000324�11671051007�0020243�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-20111211-stable/modules/pmccabe2html���������������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Produce fancy cyclomatic code complexity charts, using pmccabe. See <http://www.parisc-linux.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-20111211-stable/modules/poll�����������������������������������������������������������������0000664�0000000�0000000�00000001522�11671051007�0017033�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] 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_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-20111211-stable/modules/poll-h���������������������������������������������������������������0000664�0000000�0000000�00000002352�11671051007�0017262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX-like <poll.h>. Files: lib/poll.in.h m4/poll_h.m4 Depends-on: extensions include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_POLL_H 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_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, Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/poll-h-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0020765�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-20111211-stable/modules/poll-h-tests���������������������������������������������������������0000664�0000000�0000000�00000000211�11671051007�0020412�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-20111211-stable/modules/poll-tests�����������������������������������������������������������0000664�0000000�0000000�00000000612�11671051007�0020172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-poll.c 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-20111211-stable/modules/popen����������������������������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0017210�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-20111211-stable/modules/popen-safer����������������������������������������������������������0000664�0000000�0000000�00000000510�11671051007�0020300�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: cloexec 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-20111211-stable/modules/popen-safer-tests����������������������������������������������������0000664�0000000�0000000�00000000374�11671051007�0021450�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-20111211-stable/modules/popen-tests����������������������������������������������������������0000664�0000000�0000000�00000000276�11671051007�0020353�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-20111211-stable/modules/posix-shell����������������������������������������������������������0000664�0000000�0000000�00000000773�11671051007�0020343�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-20111211-stable/modules/posix_openpt���������������������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0020624�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-20111211-stable/modules/posix_openpt-tests���������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0021751�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-20111211-stable/modules/posix_spawn����������������������������������������������������������0000664�0000000�0000000�00000000772�11671051007�0020445�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]) AC_LIBOBJ([spawni]) gl_PREREQ_POSIX_SPAWN_INTERNAL fi gl_SPAWN_MODULE_INDICATOR([posix_spawn]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: Bruno Haible, glibc ������gnulib-20111211-stable/modules/posix_spawn-internal�������������������������������������������������0000664�0000000�0000000�00000000356�11671051007�0022255�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 strchrnul configure.ac: Makefile.am: Include: License: LGPLv2+ Maintainer: Bruno Haible, glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawn-tests����������������������������������������������������0000664�0000000�0000000�00000001016�11671051007�0021575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn3.c tests/signature.h Depends-on: posix_spawn_file_actions_init posix_spawn_file_actions_addopen posix_spawn_file_actions_destroy stdbool unistd sys_wait 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: if POSIX_SPAWN_PORTED TESTS += test-posix_spawn3 check_PROGRAMS += test-posix_spawn3 endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawn_file_actions_addclose������������������������������������0000664�0000000�0000000�00000001235�11671051007�0025015�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] posix_spawn_file_actions_init [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_faction_addclose]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addclose]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: Bruno Haible, glibc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawn_file_actions_addclose-tests������������������������������0000664�0000000�0000000�00000000410�11671051007�0026147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn_file_actions_addclose.c tests/signature.h tests/macros.h Depends-on: posix_spawn_file_actions_init configure.ac: Makefile.am: TESTS += test-posix_spawn_file_actions_addclose check_PROGRAMS += test-posix_spawn_file_actions_addclose ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawn_file_actions_adddup2�������������������������������������0000664�0000000�0000000�00000001231�11671051007�0024556�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] posix_spawn_file_actions_init [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_faction_adddup2]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_adddup2]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: Bruno Haible, glibc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawn_file_actions_adddup2-tests�������������������������������0000664�0000000�0000000�00000000405�11671051007�0025720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn_file_actions_adddup2.c tests/signature.h tests/macros.h Depends-on: posix_spawn_file_actions_init configure.ac: Makefile.am: TESTS += test-posix_spawn_file_actions_adddup2 check_PROGRAMS += test-posix_spawn_file_actions_adddup2 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawn_file_actions_addopen�������������������������������������0000664�0000000�0000000�00000001231�11671051007�0024645�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] posix_spawn_file_actions_init [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_faction_addopen]) fi gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addopen]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: Bruno Haible, glibc �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawn_file_actions_addopen-tests�������������������������������0000664�0000000�0000000�00000000405�11671051007�0026007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn_file_actions_addopen.c tests/signature.h tests/macros.h Depends-on: posix_spawn_file_actions_init configure.ac: Makefile.am: TESTS += test-posix_spawn_file_actions_addopen check_PROGRAMS += test-posix_spawn_file_actions_addopen �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawn_file_actions_destroy�������������������������������������0000664�0000000�0000000�00000000716�11671051007�0024733�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: Bruno Haible, glibc ��������������������������������������������������gnulib-20111211-stable/modules/posix_spawn_file_actions_init����������������������������������������0000664�0000000�0000000�00000000726�11671051007�0024206�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: Bruno Haible, glibc ������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_destroy����������������������������������������������0000664�0000000�0000000�00000000667�11671051007�0023114�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: Bruno Haible, glibc �������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_getflags���������������������������������������������0000664�0000000�0000000�00000000703�11671051007�0023206�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: Bruno Haible, glibc �������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_getpgroup��������������������������������������������0000664�0000000�0000000�00000000677�11671051007�0023440�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: Bruno Haible, glibc �����������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_getschedparam����������������������������������������0000664�0000000�0000000�00000001026�11671051007�0024220�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: Bruno Haible, glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_getschedpolicy���������������������������������������0000664�0000000�0000000�00000001027�11671051007�0024420�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: Bruno Haible, glibc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_getsigdefault����������������������������������������0000664�0000000�0000000�00000000761�11671051007�0024245�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: Bruno Haible, glibc ���������������gnulib-20111211-stable/modules/posix_spawnattr_getsigmask�������������������������������������������0000664�0000000�0000000�00000000732�11671051007�0023552�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: Bruno Haible, glibc ��������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_init�������������������������������������������������0000664�0000000�0000000�00000000657�11671051007�0022365�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: Bruno Haible, glibc ���������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_setflags���������������������������������������������0000664�0000000�0000000�00000000675�11671051007�0023232�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: Bruno Haible, glibc �������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_setpgroup��������������������������������������������0000664�0000000�0000000�00000000671�11671051007�0023446�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: Bruno Haible, glibc �����������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_setschedparam����������������������������������������0000664�0000000�0000000�00000001020�11671051007�0024226�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: Bruno Haible, glibc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_setschedpolicy���������������������������������������0000664�0000000�0000000�00000001021�11671051007�0024426�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: Bruno Haible, glibc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posix_spawnattr_setsigdefault����������������������������������������0000664�0000000�0000000�00000000752�11671051007�0024261�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: Bruno Haible, glibc ����������������������gnulib-20111211-stable/modules/posix_spawnattr_setsigmask�������������������������������������������0000664�0000000�0000000�00000000724�11671051007�0023567�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: Bruno Haible, glibc ��������������������������������������������gnulib-20111211-stable/modules/posix_spawnp���������������������������������������������������������0000664�0000000�0000000�00000000776�11671051007�0020631�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]) AC_LIBOBJ([spawni]) gl_PREREQ_POSIX_SPAWN_INTERNAL fi gl_SPAWN_MODULE_INDICATOR([posix_spawnp]) Makefile.am: Include: <spawn.h> License: LGPLv2+ Maintainer: Bruno Haible, glibc ��gnulib-20111211-stable/modules/posix_spawnp-tests���������������������������������������������������0000664�0000000�0000000�00000002434�11671051007�0021762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posix_spawn1.c tests/test-posix_spawn1.in.sh tests/test-posix_spawn2.c tests/test-posix_spawn2.in.sh 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 sigprocmask stdbool unistd sys_wait dup 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: if POSIX_SPAWN_PORTED TESTS += test-posix_spawn1 test-posix_spawn2 check_PROGRAMS += test-posix_spawn1 test-posix_spawn2 BUILT_SOURCES += test-posix_spawn1.sh test-posix_spawn1.sh: test-posix_spawn1.in.sh $(AM_V_GEN)rm -f $@-t $@ && \ cp $(srcdir)/test-posix_spawn1.in.sh $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += test-posix_spawn1.sh test-posix_spawn1.sh-t BUILT_SOURCES += test-posix_spawn2.sh test-posix_spawn2.sh: test-posix_spawn2.in.sh $(AM_V_GEN)rm -f $@-t $@ && \ cp $(srcdir)/test-posix_spawn2.in.sh $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += test-posix_spawn2.sh test-posix_spawn2.sh-t endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posixtm��������������������������������������������������������������0000664�0000000�0000000�00000000457�11671051007�0017576�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: mktime stdbool stpcpy configure.ac: gl_POSIXTM Makefile.am: lib_SOURCES += posixtm.c Include: "posixtm.h" License: GPL Maintainer: Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posixtm-tests��������������������������������������������������������0000664�0000000�0000000�00000000243�11671051007�0020727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-posixtm.c tests/macros.h Depends-on: intprops setenv strftime configure.ac: Makefile.am: TESTS += test-posixtm check_PROGRAMS += test-posixtm �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/posixver�������������������������������������������������������������0000664�0000000�0000000�00000000470�11671051007�0017745�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-20111211-stable/modules/pow������������������������������������������������������������������0000664�0000000�0000000�00000000323�11671051007�0016670�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pow-tests������������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020035�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-20111211-stable/modules/powf�����������������������������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0017040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: powf() function: power function. Files: lib/powf.c m4/powf.m4 Depends-on: math 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/powf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020201�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-20111211-stable/modules/pread����������������������������������������������������������������0000664�0000000�0000000�00000000757�11671051007�0017171�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-20111211-stable/modules/pread-tests����������������������������������������������������������0000664�0000000�0000000�00000000273�11671051007�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pread.c tests/test-pread.sh tests/init.sh tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pread.sh check_PROGRAMS += test-pread �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/printf-frexp���������������������������������������������������������0000664�0000000�0000000�00000000560�11671051007�0020512�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/printf-frexp-tests���������������������������������������������������0000664�0000000�0000000�00000000231�11671051007�0021645�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-20111211-stable/modules/printf-frexpl��������������������������������������������������������0000664�0000000�0000000�00000001215�11671051007�0020664�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/printf-frexpl-tests��������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0022023�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-20111211-stable/modules/printf-posix���������������������������������������������������������0000664�0000000�0000000�00000001226�11671051007�0020530�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/printf-posix-tests���������������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0021674�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-20111211-stable/modules/printf-safe����������������������������������������������������������0000664�0000000�0000000�00000000560�11671051007�0020304�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/priv-set�������������������������������������������������������������0000664�0000000�0000000�00000000415�11671051007�0017636�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 stdbool configure.ac: gl_PRIV_SET Makefile.am: lib_SOURCES += priv-set.c Include: "priv-set.h" License: GPL Maintainer: David Bartley ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/priv-set-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�11671051007�0020774�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-20111211-stable/modules/progname�������������������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0017677�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/propername�����������������������������������������������������������0000664�0000000�0000000�00000001736�11671051007�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Localization of proper names. Notice: If you are using GNU gettext version 0.16.1 or older, add the following options to XGETTEXT_OPTIONS in your po/Makevars: --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."' 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: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: GPL Maintainer: Bruno Haible ����������������������������������gnulib-20111211-stable/modules/pselect��������������������������������������������������������������0000664�0000000�0000000�00000001101�11671051007�0017515�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] 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, Bruno Haible, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pselect-tests��������������������������������������������������������0000664�0000000�0000000�00000000706�11671051007�0020667�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-20111211-stable/modules/pt_chown�������������������������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0017715�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 stdlib configmake 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-20111211-stable/modules/pthread��������������������������������������������������������������0000664�0000000�0000000�00000002346�11671051007�0017521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Implement a trivial subset of the pthreads library. Files: lib/pthread.in.h m4/pthread.m4 Depends-on: sched time configure.ac: gl_PTHREAD_CHECK 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. if GL_GENERATE_PTHREAD_H pthread.h: pthread.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_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|@''HAVE_PTHREAD_T''@|$(HAVE_PTHREAD_T)|g' \ -e 's|@''HAVE_PTHREAD_SPINLOCK_T''@|$(HAVE_PTHREAD_SPINLOCK_T)|g' \ < $(srcdir)/pthread.in.h; \ } > $@-t && \ mv $@-t $@ else pthread.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += pthread.h pthread.h-t Include: <pthread.h> Link: $(LIB_PTHREAD) License: LGPLv2+ Maintainer: Glen Lenker and Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pthread_sigmask������������������������������������������������������0000664�0000000�0000000�00000001115�11671051007�0021230�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, Bruno Haible, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pthread_sigmask-tests������������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0022372�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 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-20111211-stable/modules/ptsname��������������������������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0017542�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; then AC_LIBOBJ([ptsname]) gl_PREREQ_PTSNAME fi gl_STDLIB_MODULE_INDICATOR([ptsname]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ptsname-tests��������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0020671�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-20111211-stable/modules/ptsname_r������������������������������������������������������������0000664�0000000�0000000�00000001002�11671051007�0020046�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 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: Bruno Haible, Eric Blake ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ptsname_r-tests������������������������������������������������������0000664�0000000�0000000�00000000312�11671051007�0021211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-ptsname_r.c tests/signature.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-20111211-stable/modules/pty������������������������������������������������������������������0000664�0000000�0000000�00000003053�11671051007�0016702�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 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-20111211-stable/modules/pty-c++-tests��������������������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0020405�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-20111211-stable/modules/pty-tests������������������������������������������������������������0000664�0000000�0000000�00000000077�11671051007�0020045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: Depends-on: pty-c++-tests configure.ac: Makefile.am: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/putenv���������������������������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0017413�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] malloc-posix [test $REPLACE_PUTENV = 1] configure.ac: gl_FUNC_PUTENV if test $REPLACE_PUTENV = 1; then AC_LIBOBJ([putenv]) fi gl_STDLIB_MODULE_INDICATOR([putenv]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: Jim Meyering, glibc �������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/pwrite���������������������������������������������������������������0000664�0000000�0000000�00000000776�11671051007�0017411�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-20111211-stable/modules/pwrite-tests���������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-pwrite.sh tests/test-pwrite.c tests/init.sh tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-pwrite.sh check_PROGRAMS += test-pwrite ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/quote����������������������������������������������������������������0000664�0000000�0000000�00000000362�11671051007�0017223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Quote arguments for use in error messages. Files: lib/quote.h lib/quote.c m4/quote.m4 Depends-on: quotearg configure.ac: gl_QUOTE Makefile.am: lib_SOURCES += quote.c Include: "quote.h" License: GPL Maintainer: Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/quotearg�������������������������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Quote arguments for use in error messages. Files: lib/quotearg.h lib/quotearg.c m4/mbstate_t.m4 m4/mbrtowc.m4 m4/quotearg.m4 Depends-on: extensions gettext-h mbrtowc mbsinit memcmp quotearg-simple stdbool wchar wctype-h xalloc configure.ac: gl_QUOTEARG Makefile.am: lib_SOURCES += quotearg.c Include: "quotearg.h" License: GPL Maintainer: Paul Eggert ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/quotearg-simple������������������������������������������������������0000664�0000000�0000000�00000000262�11671051007�0021203�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: License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/quotearg-simple-tests������������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0022343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-quotearg-simple.c tests/test-quotearg.h tests/macros.h Depends-on: progname stdint configure.ac: Makefile.am: TESTS += test-quotearg-simple check_PROGRAMS += test-quotearg-simple test_quotearg_simple_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/quotearg-tests�������������������������������������������������������0000664�0000000�0000000�00000001036�11671051007�0021054�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/locale/fr/LC_MESSAGES/test-quotearg.po tests/locale/fr/LC_MESSAGES/test-quotearg.mo m4/locale-fr.m4 m4/codeset.m4 Depends-on: gettext progname stdint setenv unsetenv setlocale 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@' check_PROGRAMS += test-quotearg test_quotearg_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/raise����������������������������������������������������������������0000664�0000000�0000000�00000000657�11671051007�0017200�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, Bruno Haible ���������������������������������������������������������������������������������gnulib-20111211-stable/modules/raise-tests����������������������������������������������������������0000664�0000000�0000000�00000000226�11671051007�0020330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-raise.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-raise check_PROGRAMS += test-raise ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/random_r�������������������������������������������������������������0000664�0000000�0000000�00000000536�11671051007�0017672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: reentrant random number generator Files: lib/random_r.c m4/random_r.m4 Depends-on: stdlib stdint configure.ac: gl_FUNC_RANDOM_R if test $HAVE_RANDOM_R = 0; 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-20111211-stable/modules/random_r-tests�������������������������������������������������������0000664�0000000�0000000�00000000237�11671051007�0021030�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-20111211-stable/modules/rawmemchr������������������������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0020057�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 string 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-20111211-stable/modules/rawmemchr-tests������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0021213�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-20111211-stable/modules/rbtree-list����������������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0020324�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: GPL Maintainer: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/rbtree-list-tests����������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0021460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rbtree_list.c tests/macros.h Depends-on: array-list progname configure.ac: Makefile.am: TESTS += test-rbtree_list check_PROGRAMS += test-rbtree_list ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rbtree-oset����������������������������������������������������������0000664�0000000�0000000�00000000501�11671051007�0020314�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_anytree_oset.h Depends-on: oset configure.ac: Makefile.am: lib_SOURCES += gl_rbtree_oset.h gl_rbtree_oset.c gl_anytree_oset.h Include: "gl_rbtree_oset.h" License: GPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rbtree-oset-tests����������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0021457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rbtree_oset.c tests/macros.h Depends-on: array-oset progname configure.ac: Makefile.am: TESTS += test-rbtree_oset check_PROGRAMS += test-rbtree_oset ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rbtreehash-list������������������������������������������������������0000664�0000000�0000000�00000001304�11671051007�0021163�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_anyhash_list1.h lib/gl_anyhash_list2.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: list rbtree-oset stdint xsize configure.ac: Makefile.am: lib_SOURCES += gl_rbtreehash_list.h gl_rbtreehash_list.c gl_anyhash_list1.h gl_anyhash_list2.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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rbtreehash-list-tests������������������������������������������������0000664�0000000�0000000�00000000266�11671051007�0022331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rbtreehash_list.c tests/macros.h Depends-on: array-list progname configure.ac: Makefile.am: TESTS += test-rbtreehash_list check_PROGRAMS += test-rbtreehash_list ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/read�����������������������������������������������������������������0000664�0000000�0000000�00000000652�11671051007�0017003�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: Bruno Haible ��������������������������������������������������������������������������������������gnulib-20111211-stable/modules/read-file������������������������������������������������������������0000664�0000000�0000000�00000000535�11671051007�0017720�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: 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-20111211-stable/modules/read-file-tests������������������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0021046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-read-file.c Depends-on: configure.ac: Makefile.am: TESTS += test-read-file check_PROGRAMS += test-read-file �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/read-tests�����������������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0020136�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-20111211-stable/modules/readdir��������������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0017504�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/readline�������������������������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0017646�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-20111211-stable/modules/readlink�������������������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0017661�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: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/readlink-tests�������������������������������������������������������0000664�0000000�0000000�00000000322�11671051007�0021013�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-20111211-stable/modules/readlinkat�����������������������������������������������������������0000664�0000000�0000000�00000001431�11671051007�0020202�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] dosname [test $HAVE_READLINKAT = 0] errno [test $HAVE_READLINKAT = 0] fchdir [test $HAVE_READLINKAT = 0] fcntl-h [test $HAVE_READLINKAT = 0] openat-die [test $HAVE_READLINKAT = 0] openat-h [test $HAVE_READLINKAT = 0] save-cwd [test $HAVE_READLINKAT = 0] readlink [test $HAVE_READLINKAT = 0] configure.ac: gl_FUNC_READLINKAT if test $HAVE_READLINKAT = 0; 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-20111211-stable/modules/readlinkat-tests�����������������������������������������������������0000664�0000000�0000000�00000000415�11671051007�0021343�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-20111211-stable/modules/readme-release�������������������������������������������������������0000664�0000000�0000000�00000001132�11671051007�0020735�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: configure.ac: Makefile.am: Include: License: GPLed build tool Maintainer: bug-gnulib@gnu.org ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/readtokens�����������������������������������������������������������0000664�0000000�0000000�00000000407�11671051007�0020225�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-20111211-stable/modules/readtokens0����������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0020300�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-20111211-stable/modules/readutmp�������������������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0017710�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 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-20111211-stable/modules/realloc��������������������������������������������������������������0000664�0000000�0000000�00000000753�11671051007�0017513�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/. Status: deprecated Notice: This module is deprecated. Use the module 'realloc-gnu' instead. Files: Depends-on: realloc-gnu configure.ac: Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Jim Meyering ���������������������gnulib-20111211-stable/modules/realloc-gnu����������������������������������������������������������0000664�0000000�0000000�00000001021�11671051007�0020267�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 gl_MODULE_INDICATOR([realloc-gnu]) Makefile.am: Include: <stdlib.h> License: LGPLv2+ Maintainer: Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/realloc-gnu-tests����������������������������������������������������0000664�0000000�0000000�00000000207�11671051007�0021434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-realloc-gnu.c Depends-on: configure.ac: Makefile.am: TESTS += test-realloc-gnu check_PROGRAMS += test-realloc-gnu �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/realloc-posix��������������������������������������������������������0000664�0000000�0000000�00000000554�11671051007�0020652�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 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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/recv�����������������������������������������������������������������0000664�0000000�0000000�00000001026�11671051007�0017023�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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/recv-tests�����������������������������������������������������������0000664�0000000�0000000�00000000302�11671051007�0020157�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-20111211-stable/modules/recvfrom�������������������������������������������������������������0000664�0000000�0000000�00000001154�11671051007�0017711�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: 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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/recvfrom-tests�������������������������������������������������������0000664�0000000�0000000�00000000335�11671051007�0021051�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-20111211-stable/modules/regex����������������������������������������������������������������0000664�0000000�0000000�00000002402�11671051007�0017175�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/regex.m4 m4/mbstate_t.m4 Depends-on: extensions ssize_t alloca-opt [test $ac_use_included_regex = yes] btowc [test $ac_use_included_regex = yes] gettext-h [test $ac_use_included_regex = yes] localcharset [test $ac_use_included_regex = yes] malloc-gnu [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] strcase [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] 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: $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: LGPLv2+ Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/regex-quote����������������������������������������������������������0000664�0000000�0000000�00000000417�11671051007�0020334�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: Makefile.am: lib_SOURCES += regex-quote.c Include: "regex-quote.h" License: GPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/regex-quote-tests����������������������������������������������������0000664�0000000�0000000�00000000320�11671051007�0021465�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) $(LIBINTL) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/regexprops-generic���������������������������������������������������0000664�0000000�0000000�00000000312�11671051007�0021671�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-20111211-stable/modules/relocatable-lib������������������������������������������������������0000664�0000000�0000000�00000000664�11671051007�0021114�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 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: Bruno Haible, Ben Pfaff ����������������������������������������������������������������������������gnulib-20111211-stable/modules/relocatable-lib-lgpl�������������������������������������������������0000664�0000000�0000000�00000000607�11671051007�0022045�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 m4/relocatable-lib.m4 Depends-on: strdup configure.ac: gl_RELOCATABLE_LIBRARY Makefile.am: DEFS += -DNO_XMALLOC Include: "relocatable.h" License: LGPLv2+ Maintainer: Bruno Haible, Ben Pfaff �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/relocatable-prog�����������������������������������������������������0000664�0000000�0000000�00000002102�11671051007�0021302�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 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 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 .PHONY: uninstall-relocwrapper endif Include: "relocatable.h" "progname.h" License: GPL Maintainer: Bruno Haible, Ben Pfaff ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/relocatable-prog-wrapper���������������������������������������������0000664�0000000�0000000�00000001701�11671051007�0022764�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/canonicalize-lgpl.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/malloca.m4 m4/canonicalize.m4 m4/eealloc.m4 m4/environ.m4 m4/longlong.m4 m4/readlink.m4 m4/relocatable-lib.m4 m4/setenv.m4 Depends-on: alloca-opt double-slash-root errno pathmax ssize_t stdbool stdlib unistd environ intprops string verify configure.ac: gl_FUNC_READLINK_SEPARATE gl_CANONICALIZE_LGPL_SEPARATE gl_MALLOCA gl_RELOCATABLE_LIBRARY gl_FUNC_SETENV_SEPARATE Makefile.am: Include: License: GPL Maintainer: Bruno Haible, Ben Pfaff ���������������������������������������������������������������gnulib-20111211-stable/modules/relocatable-script���������������������������������������������������0000664�0000000�0000000�00000000652�11671051007�0021647�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: Bruno Haible, Ben Pfaff ��������������������������������������������������������������������������������������gnulib-20111211-stable/modules/remainder������������������������������������������������������������0000664�0000000�0000000�00000000403�11671051007�0020030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: remainder() function: floating-point remainder function. Files: m4/mathfunc.m4 Depends-on: configure.ac: gl_COMMON_DOUBLE_MATHFUNC([remainder]) Makefile.am: Include: <math.h> Link: $(REMAINDER_LIBM) License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/remainder-tests������������������������������������������������������0000664�0000000�0000000�00000000323�11671051007�0021171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-remainder.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-remainder check_PROGRAMS += test-remainder test_remainder_LDADD = $(LDADD) @REMAINDER_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/remove���������������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0017363�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-20111211-stable/modules/remove-tests���������������������������������������������������������0000664�0000000�0000000�00000000267�11671051007�0020527�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-20111211-stable/modules/rename���������������������������������������������������������������0000664�0000000�0000000�00000001257�11671051007�0017341�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] lstat [test $REPLACE_RENAME = 1] rmdir [test $REPLACE_RENAME = 1] same-inode [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-20111211-stable/modules/rename-dest-slash����������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0021402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rename() function: change the name or location of a file. Status: deprecated Notice: This module is deprecated. Use the 'rename' module instead. Files: Depends-on: rename configure.ac: Makefile.am: Include: <stdio.h> License: GPL Maintainer: Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rename-tests���������������������������������������������������������0000664�0000000�0000000�00000000367�11671051007�0020502�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-20111211-stable/modules/renameat�������������������������������������������������������������0000664�0000000�0000000�00000002052�11671051007�0017660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: renameat() function: rename a file, relative to two directories Files: lib/at-func2.c lib/renameat.c 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] fstatat [test $REPLACE_RENAMEAT = 1] stdbool [test $REPLACE_RENAMEAT = 1] at-internal [test $HAVE_RENAMEAT = 0] dosname [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] 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: <fcntl.h> <stdio.h> License: GPL Maintainer: Jim Meyering, Eric Blake ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/renameat-tests�������������������������������������������������������0000664�0000000�0000000�00000000432�11671051007�0021020�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-20111211-stable/modules/rewinddir������������������������������������������������������������0000664�0000000�0000000�00000000617�11671051007�0020060�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rint�����������������������������������������������������������������0000664�0000000�0000000�00000000532�11671051007�0017041�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rint-tests�����������������������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0020201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rint.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: isnand-nolibm configure.ac: Makefile.am: TESTS += test-rint check_PROGRAMS += test-rint test_rint_LDADD = $(LDADD) @RINT_LIBM@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rintf����������������������������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0017214�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 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rintf-tests����������������������������������������������������������0000664�0000000�0000000�00000000375�11671051007�0020354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rintf.c tests/minus-zero.h tests/infinity.h tests/nan.h tests/signature.h tests/macros.h Depends-on: isnanf-nolibm configure.ac: Makefile.am: TESTS += test-rintf check_PROGRAMS += test-rintf test_rintf_LDADD = $(LDADD) @RINTF_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rintl����������������������������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0017213�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 rint [test $HAVE_RINTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] configure.ac: gl_FUNC_RINTL if test $HAVE_RINTL = 0; then AC_LIBOBJ([rintl]) fi gl_MATH_MODULE_INDICATOR([rintl]) Makefile.am: Include: <math.h> Link: $(RINTL_LIBM) License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/rintl-tests����������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-rintl.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-rintl check_PROGRAMS += test-rintl test_rintl_LDADD = $(LDADD) @RINTL_LIBM@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/rmdir����������������������������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0017200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: rmdir() function: delete a directory. Files: lib/rmdir.c m4/rmdir.m4 Depends-on: unistd dosname [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-20111211-stable/modules/rmdir-errno����������������������������������������������������������0000664�0000000�0000000�00000000363�11671051007�0020327�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-20111211-stable/modules/rmdir-tests����������������������������������������������������������0000664�0000000�0000000�00000000306�11671051007�0020341�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-20111211-stable/modules/round����������������������������������������������������������������0000664�0000000�0000000�00000001074�11671051007�0017216�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_DECL_ROUND = 0 || test $REPLACE_ROUND = 1] floor [test $HAVE_DECL_ROUND = 0 || test $REPLACE_ROUND = 1] configure.ac: gl_FUNC_ROUND if test $HAVE_DECL_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-20111211-stable/modules/round-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000636�11671051007�0020126�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_DECL_ROUND = 0 || test $REPLACE_ROUND = 1] ceil-ieee [test $HAVE_DECL_ROUND = 0 || test $REPLACE_ROUND = 1] configure.ac: gl_FUNC_ROUND_IEEE Makefile.am: Include: <math.h> Link: $(ROUND_LIBM) License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/round-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000342�11671051007�0021260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-round-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-round-ieee check_PROGRAMS += test-round-ieee test_round_ieee_LDADD = $(LDADD) @ROUND_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/round-tests����������������������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0020361�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-20111211-stable/modules/roundf���������������������������������������������������������������0000664�0000000�0000000�00000001016�11671051007�0017360�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_DECL_ROUNDF = 0 || test $REPLACE_ROUNDF = 1] configure.ac: gl_FUNC_ROUNDF if test $HAVE_DECL_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-20111211-stable/modules/roundf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000647�11671051007�0020276�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_DECL_ROUNDF = 0 || test $REPLACE_ROUNDF = 1] ceilf-ieee [test $HAVE_DECL_ROUNDF = 0 || test $REPLACE_ROUNDF = 1] configure.ac: gl_FUNC_ROUNDF_IEEE Makefile.am: Include: <math.h> Link: $(ROUNDF_LIBM) License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������gnulib-20111211-stable/modules/roundf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000347�11671051007�0021433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-roundf-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-roundf-ieee check_PROGRAMS += test-roundf-ieee test_roundf_ieee_LDADD = $(LDADD) @ROUNDF_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/roundf-tests���������������������������������������������������������0000664�0000000�0000000�00000000630�11671051007�0020521�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-20111211-stable/modules/roundl���������������������������������������������������������������0000664�0000000�0000000�00000001273�11671051007�0017373�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_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1] float [{ test $HAVE_DECL_ROUNDL = 0 || test $REPLACE_ROUNDL = 1; } && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_ROUNDL if test $HAVE_DECL_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-20111211-stable/modules/roundl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0020300�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/roundl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000347�11671051007�0021441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-roundl-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-roundl-ieee check_PROGRAMS += test-roundl-ieee test_roundl_ieee_LDADD = $(LDADD) @ROUNDL_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/roundl-tests���������������������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0020531�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-20111211-stable/modules/rpmatch��������������������������������������������������������������0000664�0000000�0000000�00000001140�11671051007�0017517�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: $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/safe-alloc�����������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0020074�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 configure.ac: gl_SAFE_ALLOC Makefile.am: lib_SOURCES += safe-alloc.c Include: "safe-alloc.h" License: LGPLv2+ Maintainer: David Lutterkort �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/safe-alloc-tests�����������������������������������������������������0000664�0000000�0000000�00000000223�11671051007�0021230�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-20111211-stable/modules/safe-read������������������������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0017707�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 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, Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/safe-write�����������������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0020133�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 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, Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/same�����������������������������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0017005�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: error dirname same-inode stat stdbool memcmp configure.ac: gl_SAME Makefile.am: lib_SOURCES += same.c Include: "same.h" License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/same-inode�����������������������������������������������������������0000664�0000000�0000000�00000000244�11671051007�0020106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: compare inodes Files: lib/same-inode.h Depends-on: configure.ac: Makefile.am: Include: "same-inode.h" License: LGPLv2+ Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/save-cwd�������������������������������������������������������������0000664�0000000�0000000�00000000474�11671051007�0017603�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 cloexec getcwd-lgpl fchdir 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-20111211-stable/modules/savedir��������������������������������������������������������������0000664�0000000�0000000�00000000510�11671051007�0017516�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 opendir readdir xalloc configure.ac: gl_SAVEDIR Makefile.am: lib_SOURCES += savedir.c Include: "savedir.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/savewd���������������������������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0017364�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: chdir dosname errno fchdir fcntl-safer fcntl-h raise stdbool stdlib xalloc configure.ac: gl_SAVEWD Makefile.am: lib_SOURCES += savewd.h savewd.c Include: "savewd.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/scandir��������������������������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0017510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: scandir() function: collect entries of a directory Files: lib/scandir.c m4/scandir.m4 Depends-on: 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-20111211-stable/modules/sched����������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <sched.h> include file. Files: lib/sched.in.h m4/sched_h.m4 Depends-on: include_next configure.ac: gl_SCHED_H 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. if GL_GENERATE_SCHED_H sched.h: sched.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_SCHED_H''@|$(HAVE_SCHED_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' \ < $(srcdir)/sched.in.h; \ } > $@-t && \ mv $@-t $@ else sched.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += sched.h sched.h-t Include: <sched.h> License: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sched-tests����������������������������������������������������������0000664�0000000�0000000�00000000165�11671051007�0020315�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-20111211-stable/modules/search���������������������������������������������������������������0000664�0000000�0000000�00000002576�11671051007�0017344�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 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/@''GNULIB_TSEARCH''@/$(GNULIB_TSEARCH)/g' \ -e 's|@''HAVE_TSEARCH''@|$(HAVE_TSEARCH)|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-20111211-stable/modules/search-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000461�11671051007�0021041�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-20111211-stable/modules/search-tests���������������������������������������������������������0000664�0000000�0000000�00000000211�11671051007�0020464�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-20111211-stable/modules/select���������������������������������������������������������������0000664�0000000�0000000�00000000746�11671051007�0017353�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] sockets [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-20111211-stable/modules/select-tests���������������������������������������������������������0000664�0000000�0000000�00000001351�11671051007�0020504�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 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-20111211-stable/modules/selinux-at�����������������������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0020166�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 dosname errno extensions fchdir fcntl-h openat-die openat-h save-cwd unistd configure.ac: AC_CHECK_HEADERS([selinux/flask.h]) AC_LIBOBJ([selinux-at]) Makefile.am: Include: "selinux-at.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/selinux-h������������������������������������������������������������0000664�0000000�0000000�00000003674�11671051007�0020013�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-selinux.in.h m4/selinux-context-h.m4 m4/selinux-selinux-h.m4 Depends-on: errno snippet/unused-parameter configure.ac: gl_HEADERS_SELINUX_SELINUX_H gl_HEADERS_SELINUX_CONTEXT_H AC_REQUIRE([AC_C_INLINE]) 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-selinux.in.h BUILT_SOURCES += selinux/selinux.h selinux/selinux.h: se-selinux.in.h $(top_builddir)/config.status $(UNUSED_PARAMETER_H) $(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' \ -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ < $(srcdir)/se-selinux.in.h; \ } > $@-t && \ chmod a-x $@-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 $(UNUSED_PARAMETER_H) $(AM_V_at)$(MKDIR_P) selinux $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ < $(srcdir)/se-context.in.h; \ } > $@-t && \ chmod a-x $@-t && \ mv $@-t $@ else selinux/context.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += selinux/context.h selinux/context.h-t MOSTLYCLEANDIRS += selinux Include: <selinux/selinux.h> <selinux/context.h> Link: $(LIB_SELINUX) License: LGPLv2+ Maintainer: Jim Meyering ��������������������������������������������������������������������gnulib-20111211-stable/modules/send�����������������������������������������������������������������0000664�0000000�0000000�00000001022�11671051007�0017011�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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/send-tests�����������������������������������������������������������0000664�0000000�0000000�00000000302�11671051007�0020151�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-20111211-stable/modules/sendto���������������������������������������������������������������0000664�0000000�0000000�00000001050�11671051007�0017355�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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/sendto-tests���������������������������������������������������������0000664�0000000�0000000�00000000360�11671051007�0020520�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-20111211-stable/modules/servent��������������������������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Library containing getservent(), setservent(), endservent(), getservbyname(), getservbyport(), getprotoent(), setprotoent(), endprotoent(), getprotobyname(), getprotobynumber(). Files: m4/servent.m4 Depends-on: sys_socket configure.ac: gl_SERVENT Makefile.am: Include: <netdb.h> Link: $(SERVENT_LIB) License: LGPLv2+ Maintainer: Bruno Haible, Simon Josefsson �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/setenv���������������������������������������������������������������0000664�0000000�0000000�00000001152�11671051007�0017370�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/setenv-tests���������������������������������������������������������0000664�0000000�0000000�00000000231�11671051007�0020525�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-20111211-stable/modules/setlocale������������������������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0020037�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 $REPLACE_SETLOCALE = 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> License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/setlocale-tests������������������������������������������������������0000664�0000000�0000000�00000001053�11671051007�0021177�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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/setsockopt�����������������������������������������������������������0000664�0000000�0000000�00000001140�11671051007�0020257�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_HEADER_SYS_SOCKET]) 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-20111211-stable/modules/setsockopt-tests�����������������������������������������������������0000664�0000000�0000000�00000000345�11671051007�0021425�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-20111211-stable/modules/settime��������������������������������������������������������������0000664�0000000�0000000�00000000507�11671051007�0017541�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-20111211-stable/modules/sh-quote�������������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0017630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Shell quoting. Files: lib/sh-quote.h lib/sh-quote.c Depends-on: quotearg xalloc configure.ac: Makefile.am: lib_SOURCES += sh-quote.h sh-quote.c Include: "sh-quote.h" License: GPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/shutdown�������������������������������������������������������������0000664�0000000�0000000�00000001061�11671051007�0017736�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_HEADER_SYS_SOCKET]) 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, Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/shutdown-tests�������������������������������������������������������0000664�0000000�0000000�00000000322�11671051007�0021075�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-20111211-stable/modules/sig2str��������������������������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0017462�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-20111211-stable/modules/sigaction������������������������������������������������������������0000664�0000000�0000000�00000000617�11671051007�0020051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: POSIX compatible signal handlers. Files: lib/sigaction.c lib/sig-handler.h m4/sigaction.m4 Depends-on: 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: Include: <signal.h> License: LGPLv2+ Maintainer: Eric Blake �����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sigaction-tests������������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0021203�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-20111211-stable/modules/signal���������������������������������������������������������������0000664�0000000�0000000�00000000255�11671051007�0017344�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/signal-h�������������������������������������������������������������0000664�0000000�0000000�00000004303�11671051007�0017567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <signal.h>. Files: lib/signal.in.h m4/signal_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use extensions configure.ac: gl_SIGNAL_H 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-20111211-stable/modules/signal-h-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0021277�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-20111211-stable/modules/signal-h-tests�������������������������������������������������������0000664�0000000�0000000�00000000221�11671051007�0020722�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-20111211-stable/modules/signbit��������������������������������������������������������������0000664�0000000�0000000�00000001262�11671051007�0017525�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/signbit-tests��������������������������������������������������������0000664�0000000�0000000�00000000547�11671051007�0020672�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-20111211-stable/modules/sigpipe��������������������������������������������������������������0000664�0000000�0000000�00000001752�11671051007�0017532�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. AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) GNULIB_SIGNAL_H_SIGPIPE=1 dnl Define the substituted variable GNULIB_STDIO_H_SIGPIPE to 1. AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_ASM_SYMBOL_PREFIX]) GNULIB_STDIO_H_SIGPIPE=1 dnl Define the substituted variable GNULIB_UNISTD_H_SIGPIPE to 1. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) GNULIB_UNISTD_H_SIGPIPE=1 Makefile.am: Include: <signal.h> License: LGPLv2+ Maintainer: Bruno Haible ����������������������gnulib-20111211-stable/modules/sigpipe-die����������������������������������������������������������0000664�0000000�0000000�00000000451�11671051007�0020264�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sigpipe-tests��������������������������������������������������������0000664�0000000�0000000�00000000233�11671051007�0020663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sigpipe.c tests/test-sigpipe.sh Depends-on: write configure.ac: Makefile.am: TESTS += test-sigpipe.sh check_PROGRAMS += test-sigpipe ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sigprocmask����������������������������������������������������������0000664�0000000�0000000�00000001024�11671051007�0020404�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sigprocmask-tests����������������������������������������������������0000664�0000000�0000000�00000000256�11671051007�0021552�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-20111211-stable/modules/sin������������������������������������������������������������������0000664�0000000�0000000�00000000322�11671051007�0016653�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sin-tests������������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020021�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-20111211-stable/modules/sinf�����������������������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0017023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sinf() function: sine function. Files: lib/sinf.c m4/sinf.m4 Depends-on: math 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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sinf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020165�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-20111211-stable/modules/sinh�����������������������������������������������������������������0000664�0000000�0000000�00000000341�11671051007�0017024�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sinh-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020167�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-20111211-stable/modules/sinhf����������������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sinhf() function: hyperbolic sine function. Files: lib/sinhf.c m4/sinhf.m4 Depends-on: math 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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sinhf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020342�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-20111211-stable/modules/sinl�����������������������������������������������������������������0000664�0000000�0000000�00000001601�11671051007�0017030�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-20111211-stable/modules/sinl-tests�����������������������������������������������������������0000664�0000000�0000000�00000000300�11671051007�0020163�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-20111211-stable/modules/size_max�������������������������������������������������������������0000664�0000000�0000000�00000000433�11671051007�0017704�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 Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sleep����������������������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0017176�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: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/sleep-tests����������������������������������������������������������0000664�0000000�0000000�00000000263�11671051007�0020336�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-20111211-stable/modules/snippet/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017624�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/snippet/_Noreturn����������������������������������������������������0000664�0000000�0000000�00000000702�11671051007�0021521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: The _Noreturn keyword of C1X. Applicability: all Files: build-aux/snippet/_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 Makefile.am that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h Include: License: LGPLv2+ Maintainer: all ��������������������������������������������������������������gnulib-20111211-stable/modules/snippet/arg-nonnull��������������������������������������������������0000664�0000000�0000000�00000001723�11671051007�0022006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A C macro for declaring that specific arguments must not be NULL. Applicability: all Files: build-aux/snippet/arg-nonnull.h Depends-on: configure.ac: 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 Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES += arg-nonnull.h # The arg-nonnull.h that gets inserted into generated .h files is the same as # build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t ARG_NONNULL_H=arg-nonnull.h Include: License: LGPLv2+ Maintainer: Bruno Haible ���������������������������������������������gnulib-20111211-stable/modules/snippet/c++defs������������������������������������������������������0000664�0000000�0000000�00000001616�11671051007�0020765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Function declaration macros with C++ support. Applicability: all Files: build-aux/snippet/c++defs.h Depends-on: configure.ac: 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 Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES += c++defs.h # The c++defs.h that gets inserted into generated .h files is the same as # build-aux/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/c++defs.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += c++defs.h c++defs.h-t CXXDEFS_H=c++defs.h Include: License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/snippet/link-warning�������������������������������������������������0000664�0000000�0000000�00000002037�11671051007�0022151�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 Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES += link-warning.h # The link-warning.h that gets inserted into generated .h files is the same as # build-aux/snippet/link-warning.h, except that it has the copyright header cut # off. 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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/snippet/unused-parameter���������������������������������������������0000664�0000000�0000000�00000002025�11671051007�0023027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A C macro for declaring that specific function parameters are not used. Applicability: all Files: build-aux/snippet/unused-parameter.h Depends-on: configure.ac: 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 Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES += unused-parameter.h # The unused-parameter.h that gets inserted into generated .h files is the same # as build-aux/snippet/unused-parameter.h, except that it has the copyright # header cut off. unused-parameter.h: $(top_srcdir)/build-aux/snippet/unused-parameter.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_UNUSED_PARAMETER/,$$p' \ < $(top_srcdir)/build-aux/snippet/unused-parameter.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += unused-parameter.h unused-parameter.h-t UNUSED_PARAMETER_H=unused-parameter.h Include: License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/snippet/warn-on-use��������������������������������������������������0000664�0000000�0000000�00000001315�11671051007�0021722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A C macro for emitting a warning if a function is used. Applicability: all Files: build-aux/snippet/warn-on-use.h m4/warn-on-use.m4 Depends-on: configure.ac: Makefile.am: BUILT_SOURCES += warn-on-use.h # The warn-on-use.h that gets inserted into generated .h files is the same as # build-aux/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t WARN_ON_USE_H=warn-on-use.h Include: License: LGPLv2+ Maintainer: Eric Blake �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/snprintf�������������������������������������������������������������0000664�0000000�0000000�00000001010�11671051007�0017720�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, Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/snprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000002420�11671051007�0021066�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/snprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000000702�11671051007�0022227�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-20111211-stable/modules/snprintf-tests�������������������������������������������������������0000664�0000000�0000000�00000000240�11671051007�0021064�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-20111211-stable/modules/socket���������������������������������������������������������������0000664�0000000�0000000�00000002035�11671051007�0017355�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_HEADER_SYS_SOCKET]) 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], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_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-20111211-stable/modules/socketlib������������������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0020041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access to socket primitives. Files: m4/socketlib.m4 m4/sys_socket_h.m4 Depends-on: configure.ac: gl_SOCKETLIB Makefile.am: Include: Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Simon Josefsson �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sockets��������������������������������������������������������������0000664�0000000�0000000�00000000515�11671051007�0017541�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: gl_SOCKETS Makefile.am: lib_SOURCES += sockets.h sockets.c Include: "sockets.h" Link: $(LIBSOCKET) License: LGPLv2+ Maintainer: Simon Josefsson �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sockets-tests��������������������������������������������������������0000664�0000000�0000000�00000000245�11671051007�0020701�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-20111211-stable/modules/socklen��������������������������������������������������������������0000664�0000000�0000000�00000000521�11671051007�0017521�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-20111211-stable/modules/spawn����������������������������������������������������������������0000664�0000000�0000000�00000006707�11671051007�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX compliant <spawn.h>. Files: lib/spawn.in.h m4/spawn_h.m4 Depends-on: include_next sched snippet/arg-nonnull snippet/c++defs snippet/warn-on-use configure.ac: gl_SPAWN_H 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_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_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|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|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: Bruno Haible, glibc ���������������������������������������������������������gnulib-20111211-stable/modules/spawn-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000453�11671051007�0020725�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-20111211-stable/modules/spawn-pipe�����������������������������������������������������������0000664�0000000�0000000�00000001334�11671051007�0020151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Creation of subprocesses, communicating via pipes. Files: lib/spawn-pipe.h lib/spawn-pipe.c lib/w32spawn.h m4/spawn-pipe.m4 Depends-on: cloexec dup2 environ error fatal-signal gettext-h msvc-nothrow open pipe2 pipe2-safer 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 stdbool stdlib strpbrk unistd unistd-safer wait-process configure.ac: gl_SPAWN_PIPE Makefile.am: lib_SOURCES += spawn-pipe.h spawn-pipe.c w32spawn.h Include: "spawn-pipe.h" License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/spawn-pipe-tests�����������������������������������������������������0000664�0000000�0000000�00000001026�11671051007�0021307�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/macros.h Depends-on: close 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@ # 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 = ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/spawn-tests����������������������������������������������������������0000664�0000000�0000000�00000000205�11671051007�0020352�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-20111211-stable/modules/sprintf-posix��������������������������������������������������������0000664�0000000�0000000�00000002123�11671051007�0020710�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sprintf-posix-tests��������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0022057�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-20111211-stable/modules/sqrt�����������������������������������������������������������������0000664�0000000�0000000�00000000324�11671051007�0017055�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sqrt-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrt.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sqrt check_PROGRAMS += test-sqrt test_sqrt_LDADD = $(LDADD) @SQRT_LIBM@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sqrtf����������������������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0017223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: sqrtf() function: square root. Files: lib/sqrtf.c m4/sqrtf.m4 Depends-on: math 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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sqrtf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrtf.c tests/signature.h tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-sqrtf check_PROGRAMS += test-sqrtf test_sqrtf_LDADD = $(LDADD) @SQRTF_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sqrtl����������������������������������������������������������������0000664�0000000�0000000�00000001317�11671051007�0017234�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] float [test $HAVE_SQRTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] isnanl [test $HAVE_SQRTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] frexpl [test $HAVE_SQRTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] ldexpl [test $HAVE_SQRTL = 0 && test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0] configure.ac: gl_FUNC_SQRTL if test $HAVE_SQRTL = 0; then AC_LIBOBJ([sqrtl]) fi gl_MATH_MODULE_INDICATOR([sqrtl]) Makefile.am: Include: <math.h> Link: $(SQRTL_LIBM) License: LGPL Maintainer: Paolo Bonzini �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sqrtl-tests����������������������������������������������������������0000664�0000000�0000000�00000000305�11671051007�0020370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sqrtl.c tests/signature.h tests/macros.h Depends-on: fpucw configure.ac: Makefile.am: TESTS += test-sqrtl check_PROGRAMS += test-sqrtl test_sqrtl_LDADD = $(LDADD) @SQRTL_LIBM@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ssize_t��������������������������������������������������������������0000664�0000000�0000000�00000000307�11671051007�0017545�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-20111211-stable/modules/stat�����������������������������������������������������������������0000664�0000000�0000000�00000000757�11671051007�0017051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: stat() function: query file information Files: lib/stat.c m4/stat.m4 Depends-on: sys_stat largefile dosname [test $REPLACE_STAT = 1] pathmax [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]) gl_PREREQ_STAT fi gl_SYS_STAT_MODULE_INDICATOR([stat]) Makefile.am: Include: <sys/stat.h> License: LGPLv2+ Maintainer: Eric Blake �����������������gnulib-20111211-stable/modules/stat-macros����������������������������������������������������������0000664�0000000�0000000�00000000236�11671051007�0020323�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-20111211-stable/modules/stat-size������������������������������������������������������������0000664�0000000�0000000�00000000356�11671051007�0020014�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-20111211-stable/modules/stat-tests�����������������������������������������������������������0000664�0000000�0000000�00000000362�11671051007�0020201�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-20111211-stable/modules/stat-time������������������������������������������������������������0000664�0000000�0000000�00000000373�11671051007�0017777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: stat-related time functions Files: lib/stat-time.h m4/stat-time.m4 Depends-on: time extensions configure.ac: gl_STAT_TIME gl_STAT_BIRTHTIME Makefile.am: Include: "stat-time.h" License: LGPL Maintainer: Paul Eggert and Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stat-time-tests������������������������������������������������������0000664�0000000�0000000�00000000234�11671051007�0021133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stat-time.c tests/macros.h Depends-on: time usleep configure.ac: Makefile.am: TESTS += test-stat-time check_PROGRAMS += test-stat-time ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdalign�������������������������������������������������������������0000664�0000000�0000000�00000001321�11671051007�0017667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <stdalign.h> that nearly conforms to ISO C1X and C++0X. 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, Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdalign-tests�������������������������������������������������������0000664�0000000�0000000�00000000233�11671051007�0021030�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-20111211-stable/modules/stdarg���������������������������������������������������������������0000664�0000000�0000000�00000002433�11671051007�0017353�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. With Autoconf 2.60 or later, dnl gl_PROG_CC_C99 arranges for this. With older Autoconf gl_PROG_CC_C99 dnl shouldn't hurt, though installers are on their own to set c99 mode. 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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdbool��������������������������������������������������������������0000664�0000000�0000000�00000001371�11671051007�0017535�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdbool-tests��������������������������������������������������������0000664�0000000�0000000�00000000173�11671051007�0020674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdbool.c Depends-on: configure.ac: Makefile.am: TESTS += test-stdbool check_PROGRAMS += test-stdbool �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stddef���������������������������������������������������������������0000664�0000000�0000000�00000002142�11671051007�0017335�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 configure.ac: gl_STDDEF_H 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_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-20111211-stable/modules/stddef-tests���������������������������������������������������������0000664�0000000�0000000�00000000177�11671051007�0020503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stddef.c Depends-on: verify configure.ac: Makefile.am: TESTS += test-stddef check_PROGRAMS += test-stddef �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdint���������������������������������������������������������������0000664�0000000�0000000�00000005237�11671051007�0017401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <stdint.h> that nearly conforms to C99. 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/longlong.m4 Depends-on: include_next multiarch 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_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/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/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' \ < $(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-20111211-stable/modules/stdint-tests���������������������������������������������������������0000664�0000000�0000000�00000000310�11671051007�0020524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-stdint.c m4/wchar_t.m4 m4/wint_t.m4 Depends-on: verify intprops wchar configure.ac: gt_TYPE_WCHAR_T gt_TYPE_WINT_T Makefile.am: TESTS += test-stdint check_PROGRAMS += test-stdint ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdio����������������������������������������������������������������0000664�0000000�0000000�00000016150�11671051007�0017212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <stdio.h>. Files: lib/stdio.in.h m4/stdio_h.m4 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use ssize_t stddef configure.ac: gl_STDIO_H 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_GETS''@/$(GNULIB_GETS)/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' \ < $(srcdir)/stdio.in.h | \ sed -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-20111211-stable/modules/stdio-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0020722�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) endif ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdio-tests����������������������������������������������������������0000664�0000000�0000000�00000000275�11671051007�0020353�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-20111211-stable/modules/stdlib���������������������������������������������������������������0000664�0000000�0000000�00000012420�11671051007�0017345�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 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_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_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_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_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/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' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|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_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_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|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_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|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_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|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-20111211-stable/modules/stdlib-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0021057�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) endif ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdlib-safer���������������������������������������������������������0000664�0000000�0000000�00000000513�11671051007�0020443�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" License: GPL Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stdlib-tests���������������������������������������������������������0000664�0000000�0000000�00000000246�11671051007�0020510�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-20111211-stable/modules/stpcpy���������������������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0017414�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: Bruno Haible, glibc ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/stpncpy��������������������������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0017573�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: Bruno Haible, glibc ������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strcase��������������������������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0017535�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: Bruno Haible ��������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strcasestr�����������������������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0020267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strcasestr() function: efficient case-insensitive search for unibyte substring. Files: 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strcasestr-simple����������������������������������������������������0000664�0000000�0000000�00000000745�11671051007�0021557�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: Bruno Haible ���������������������������gnulib-20111211-stable/modules/strcasestr-tests�����������������������������������������������������0000664�0000000�0000000�00000000303�11671051007�0021416�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-20111211-stable/modules/strchrnul������������������������������������������������������������0000664�0000000�0000000�00000001026�11671051007�0020110�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-20111211-stable/modules/strchrnul-tests������������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0021247�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-20111211-stable/modules/strcspn��������������������������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0017571�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: Bruno Haible, glibc ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strdup���������������������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0017411�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: lib/strdup.c m4/strdup.m4 Depends-on: string configure.ac: gl_FUNC_STRDUP if test $ac_cv_func_strdup = no; then AC_LIBOBJ([strdup]) gl_PREREQ_STRDUP fi gl_STRING_MODULE_INDICATOR([strdup]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: all, glibc �������������������������������������������������������������������������������gnulib-20111211-stable/modules/strdup-posix���������������������������������������������������������0000664�0000000�0000000�00000000671�11671051007�0020552�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 $ac_cv_func_strdup = no || test $REPLACE_STRDUP = 1] configure.ac: gl_FUNC_STRDUP_POSIX if test $ac_cv_func_strdup = no || 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-20111211-stable/modules/streq����������������������������������������������������������������0000664�0000000�0000000�00000000251�11671051007�0017221�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strerror�������������������������������������������������������������0000664�0000000�0000000�00000001046�11671051007�0017750�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-20111211-stable/modules/strerror-override����������������������������������������������������0000664�0000000�0000000�00000000745�11671051007�0021572�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-20111211-stable/modules/strerror-tests�������������������������������������������������������0000664�0000000�0000000�00000000237�11671051007�0021111�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-20111211-stable/modules/strerror_r-posix�����������������������������������������������������0000664�0000000�0000000�00000001232�11671051007�0021426�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]) Makefile.am: Include: <string.h> License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strerror_r-posix-tests�����������������������������������������������0000664�0000000�0000000�00000000245�11671051007�0022571�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-20111211-stable/modules/strftime�������������������������������������������������������������0000664�0000000�0000000�00000000530�11671051007�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: nstrftime() function: convert date and time to string, with GNU extensions. Files: lib/strftime.h lib/strftime.c m4/tm_gmtoff.m4 m4/strftime.m4 Depends-on: extensions stdbool time_r configure.ac: gl_FUNC_GNU_STRFTIME Makefile.am: lib_SOURCES += strftime.c Include: "strftime.h" License: LGPL Maintainer: Jim Meyering, glibc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strftime-tests�������������������������������������������������������0000664�0000000�0000000�00000000215�11671051007�0021060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strftime.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-strftime check_PROGRAMS += test-strftime �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/striconv�������������������������������������������������������������0000664�0000000�0000000�00000001052�11671051007�0017732�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 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: Bruno Haible, Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/striconv-tests�������������������������������������������������������0000664�0000000�0000000�00000000270�11671051007�0021073�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-20111211-stable/modules/striconveh�����������������������������������������������������������0000664�0000000�0000000�00000001262�11671051007�0020252�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 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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/striconveh-tests�����������������������������������������������������0000664�0000000�0000000�00000000320�11671051007�0021404�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-20111211-stable/modules/striconveha����������������������������������������������������������0000664�0000000�0000000�00000000530�11671051007�0020410�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/striconveha-tests����������������������������������������������������0000664�0000000�0000000�00000000324�11671051007�0021551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-striconveha.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-striconveha check_PROGRAMS += test-striconveha test_striconveha_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/string���������������������������������������������������������������0000664�0000000�0000000�00000012564�11671051007�0017403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <string.h>. Files: lib/string.in.h m4/string_h.m4 Depends-on: extensions include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use stddef configure.ac: gl_HEADER_STRING_H 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_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_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|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_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|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_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|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-20111211-stable/modules/string-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000516�11671051007�0021103�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) endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/string-tests���������������������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0020525�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-20111211-stable/modules/strings��������������������������������������������������������������0000664�0000000�0000000�00000002730�11671051007�0017560�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_HEADER_STRINGS_H 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-20111211-stable/modules/strings-tests��������������������������������������������������������0000664�0000000�0000000�00000000173�11671051007�0020717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strings.c Depends-on: configure.ac: Makefile.am: TESTS += test-strings check_PROGRAMS += test-strings �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strncat��������������������������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0017547�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strncat-tests��������������������������������������������������������0000664�0000000�0000000�00000000512�11671051007�0020701�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-20111211-stable/modules/strndup��������������������������������������������������������������0000664�0000000�0000000�00000000657�11671051007�0017574�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-20111211-stable/modules/strnlen��������������������������������������������������������������0000664�0000000�0000000�00000000732�11671051007�0017554�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 memchr-obsolete [test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1] 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-20111211-stable/modules/strnlen-tests��������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0020714�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-20111211-stable/modules/strnlen1�������������������������������������������������������������0000664�0000000�0000000�00000000355�11671051007�0017636�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strpbrk��������������������������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0017562�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: Bruno Haible, glibc ������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strptime�������������������������������������������������������������0000664�0000000�0000000�00000001111�11671051007�0017726�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-20111211-stable/modules/strsep���������������������������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0017403�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-20111211-stable/modules/strsignal������������������������������������������������������������0000664�0000000�0000000�00000001435�11671051007�0020076�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-20111211-stable/modules/strsignal-tests������������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0021230�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-20111211-stable/modules/strstr���������������������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0017431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strstr() function: efficiently locate first substring in a buffer. Files: 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-20111211-stable/modules/strstr-simple��������������������������������������������������������0000664�0000000�0000000�00000000744�11671051007�0020722�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 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-20111211-stable/modules/strstr-tests���������������������������������������������������������0000664�0000000�0000000�00000000510�11671051007�0020562�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-20111211-stable/modules/strtod���������������������������������������������������������������0000664�0000000�0000000�00000001003�11671051007�0017376�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] 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-20111211-stable/modules/strtod-obsolete������������������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0021217�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: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strtod-tests���������������������������������������������������������0000664�0000000�0000000�00000000310�11671051007�0020536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-strtod.c tests/signature.h tests/minus-zero.h tests/macros.h Depends-on: float isnand-nolibm signbit configure.ac: Makefile.am: TESTS += test-strtod check_PROGRAMS += test-strtod ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strtoimax������������������������������������������������������������0000664�0000000�0000000�00000001112�11671051007�0020112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoimax() function: convert string to 'intmax_t'. Files: lib/strtoimax.c m4/longlong.m4 m4/strtoimax.m4 Depends-on: inttypes-incomplete verify [test $ac_cv_func_strtoimax = no] stdint [test $ac_cv_func_strtoimax = no] strtoll [test $ac_cv_func_strtoimax = no && test $ac_cv_type_long_long_int = yes] configure.ac: gl_FUNC_STRTOIMAX if test $ac_cv_func_strtoimax = no; then AC_LIBOBJ([strtoimax]) gl_PREREQ_STRTOIMAX fi gl_INTTYPES_MODULE_INDICATOR([strtoimax]) Makefile.am: Include: <inttypes.h> License: LGPL Maintainer: Paul Eggert ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strtoimax-tests������������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0021255�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-20111211-stable/modules/strtok_r�������������������������������������������������������������0000664�0000000�0000000�00000000716�11671051007�0017740�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-20111211-stable/modules/strtol���������������������������������������������������������������0000664�0000000�0000000�00000000477�11671051007�0017424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtol() function: convert string to 'long'. Status: obsolete Notice: This module is obsolete. Files: lib/strtol.c m4/strtol.m4 Depends-on: configure.ac: gl_FUNC_STRTOL if test $ac_cv_func_strtol = no; then AC_LIBOBJ([strtol]) fi Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strtoll��������������������������������������������������������������0000664�0000000�0000000�00000000554�11671051007�0017574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoll() function: convert string to 'long long'. Files: lib/strtol.c lib/strtoll.c m4/longlong.m4 m4/strtoll.m4 Depends-on: stdlib configure.ac: gl_FUNC_STRTOLL if test $HAVE_STRTOLL = 0; then AC_LIBOBJ([strtoll]) gl_PREREQ_STRTOLL fi gl_STDLIB_MODULE_INDICATOR([strtoll]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strtoul��������������������������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0017602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoul() function: convert string to 'unsigned long'. Status: obsolete Notice: This module is obsolete. Files: lib/strtol.c lib/strtoul.c m4/strtoul.m4 Depends-on: configure.ac: gl_FUNC_STRTOUL if test $ac_cv_func_strtoul = no; then AC_LIBOBJ([strtoul]) fi Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strtoull�������������������������������������������������������������0000664�0000000�0000000�00000000613�11671051007�0017755�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/longlong.m4 m4/strtoull.m4 Depends-on: stdlib configure.ac: gl_FUNC_STRTOULL if test $HAVE_STRTOULL = 0; then AC_LIBOBJ([strtoull]) gl_PREREQ_STRTOULL fi gl_STDLIB_MODULE_INDICATOR([strtoull]) Makefile.am: Include: <stdlib.h> License: LGPL Maintainer: glibc ���������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strtoumax������������������������������������������������������������0000664�0000000�0000000�00000001144�11671051007�0020133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: strtoumax() function: convert string to 'uintmax_t'. Files: lib/strtoimax.c lib/strtoumax.c m4/longlong.m4 m4/strtoumax.m4 Depends-on: inttypes-incomplete verify [test $ac_cv_func_strtoumax = no] stdint [test $ac_cv_func_strtoumax = no] strtoull [test $ac_cv_func_strtoumax = no && test $ac_cv_type_unsigned_long_long_int = yes] configure.ac: gl_FUNC_STRTOUMAX if test $ac_cv_func_strtoumax = no; then AC_LIBOBJ([strtoumax]) gl_PREREQ_STRTOUMAX fi gl_INTTYPES_MODULE_INDICATOR([strtoumax]) Makefile.am: Include: <inttypes.h> License: LGPL Maintainer: Paul Eggert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/strtoumax-tests������������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0021271�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-20111211-stable/modules/strverscmp�����������������������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compare strings holding version numbers. Files: lib/strverscmp.c m4/strverscmp.m4 Depends-on: extensions 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-20111211-stable/modules/strverscmp-tests�����������������������������������������������������0000664�0000000�0000000�00000000245�11671051007�0021436�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-20111211-stable/modules/sublist��������������������������������������������������������������0000664�0000000�0000000�00000000403�11671051007�0017547�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 configure.ac: Makefile.am: lib_SOURCES += gl_sublist.h gl_sublist.c Include: "gl_sublist.h" License: GPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/symlink��������������������������������������������������������������0000664�0000000�0000000�00000000643�11671051007�0017556�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-20111211-stable/modules/symlink-tests��������������������������������������������������������0000664�0000000�0000000�00000000306�11671051007�0020712�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-20111211-stable/modules/symlinkat������������������������������������������������������������0000664�0000000�0000000�00000001413�11671051007�0020077�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 at-internal [test $HAVE_SYMLINKAT = 0] dosname [test $HAVE_SYMLINKAT = 0] errno [test $HAVE_SYMLINKAT = 0] fchdir [test $HAVE_SYMLINKAT = 0] fcntl-h [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] configure.ac: gl_FUNC_SYMLINKAT if test $HAVE_SYMLINKAT = 0; 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-20111211-stable/modules/symlinkat-tests������������������������������������������������������0000664�0000000�0000000�00000000365�11671051007�0021244�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-20111211-stable/modules/sys_file�������������������������������������������������������������0000664�0000000�0000000�00000002343�11671051007�0017704�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_HEADER_SYS_FILE_H 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-20111211-stable/modules/sys_file-tests�������������������������������������������������������0000664�0000000�0000000�00000000176�11671051007�0021046�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-20111211-stable/modules/sys_ioctl������������������������������������������������������������0000664�0000000�0000000�00000003036�11671051007�0020077�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 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-20111211-stable/modules/sys_ioctl-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0021605�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-20111211-stable/modules/sys_ioctl-tests������������������������������������������������������0000664�0000000�0000000�00000000225�11671051007�0021234�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-20111211-stable/modules/sys_select�����������������������������������������������������������0000664�0000000�0000000�00000003207�11671051007�0020244�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_HEADER_SYS_SELECT 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-20111211-stable/modules/sys_select-c++-tests�������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021754�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-20111211-stable/modules/sys_select-tests�����������������������������������������������������0000664�0000000�0000000�00000000253�11671051007�0021402�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-20111211-stable/modules/sys_socket�����������������������������������������������������������0000664�0000000�0000000�00000005330�11671051007�0020254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A POSIX-like <sys/socket.h>. Files: lib/sys_socket.in.h m4/sys_socket_h.m4 m4/sockpfaf.m4 Depends-on: errno include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use socklen ssize_t stdalign sys_uio configure.ac: gl_HEADER_SYS_SOCKET AC_PROG_MKDIR_P Makefile.am: BUILT_SOURCES += sys/socket.h # 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-20111211-stable/modules/sys_socket-c++-tests�������������������������������������������������0000664�0000000�0000000�00000000526�11671051007�0021764�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-20111211-stable/modules/sys_socket-tests�����������������������������������������������������0000664�0000000�0000000�00000000271�11671051007�0021413�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-20111211-stable/modules/sys_stat�������������������������������������������������������������0000664�0000000�0000000�00000006067�11671051007�0017747�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 Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use time configure.ac: gl_HEADER_SYS_STAT_H 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/@''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_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/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|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|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_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_MKNOD''@|$(REPLACE_MKNOD)|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-20111211-stable/modules/sys_stat-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000501�11671051007�0021440�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-20111211-stable/modules/sys_stat-tests�������������������������������������������������������0000664�0000000�0000000�00000000230�11671051007�0021071�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-20111211-stable/modules/sys_time�������������������������������������������������������������0000664�0000000�0000000�00000003221�11671051007�0017717�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_HEADER_SYS_TIME_H 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 '/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-20111211-stable/modules/sys_time-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000475�11671051007�0021435�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-20111211-stable/modules/sys_time-tests�������������������������������������������������������0000664�0000000�0000000�00000000221�11671051007�0021054�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-20111211-stable/modules/sys_times������������������������������������������������������������0000664�0000000�0000000�00000002644�11671051007�0020112�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 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-20111211-stable/modules/sys_times-tests������������������������������������������������������0000664�0000000�0000000�00000000145�11671051007�0021244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-sys_times.c Makefile.am: TESTS += test-sys_times check_PROGRAMS += test-sys_times ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sys_types������������������������������������������������������������0000664�0000000�0000000�00000001750�11671051007�0020132�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 Depends-on: include_next ssize_t configure.ac: gl_SYS_TYPES_H 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' \ < $(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-20111211-stable/modules/sys_types-c++-tests��������������������������������������������������0000664�0000000�0000000�00000000361�11671051007�0021635�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-20111211-stable/modules/sys_types-tests������������������������������������������������������0000664�0000000�0000000�00000000225�11671051007�0021266�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-20111211-stable/modules/sys_uio��������������������������������������������������������������0000664�0000000�0000000�00000002042�11671051007�0017555�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_HEADER_SYS_UIO 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-20111211-stable/modules/sys_uio-tests��������������������������������������������������������0000664�0000000�0000000�00000000173�11671051007�0020720�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-20111211-stable/modules/sys_utsname����������������������������������������������������������0000664�0000000�0000000�00000002652�11671051007�0020444�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 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: Bruno Haible ��������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sys_utsname-tests����������������������������������������������������0000664�0000000�0000000�00000000207�11671051007�0021576�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-20111211-stable/modules/sys_wait�������������������������������������������������������������0000664�0000000�0000000�00000002332�11671051007�0017727�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 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_SYS_WAIT_H 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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/sys_wait-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0021443�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-20111211-stable/modules/sys_wait-tests�������������������������������������������������������0000664�0000000�0000000�00000000247�11671051007�0021072�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-20111211-stable/modules/sysexits�������������������������������������������������������������0000664�0000000�0000000�00000002123�11671051007�0017756�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-20111211-stable/modules/sysexits-tests�������������������������������������������������������0000664�0000000�0000000�00000000176�11671051007�0021124�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-20111211-stable/modules/system-posix���������������������������������������������������������0000664�0000000�0000000�00000000343�11671051007�0020551�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tan������������������������������������������������������������������0000664�0000000�0000000�00000000325�11671051007�0016647�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tan-tests������������������������������������������������������������0000664�0000000�0000000�00000000265�11671051007�0020012�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-20111211-stable/modules/tanf�����������������������������������������������������������������0000664�0000000�0000000�00000000525�11671051007�0017017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tanf() function: tangent function. Files: lib/tanf.c m4/tanf.m4 Depends-on: math 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tanf-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020156�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-20111211-stable/modules/tanh�����������������������������������������������������������������0000664�0000000�0000000�00000000344�11671051007�0017020�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tanh-tests�����������������������������������������������������������0000664�0000000�0000000�00000000272�11671051007�0020160�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-20111211-stable/modules/tanhf����������������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0017166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tanhf() function: hyperbolic tangent function. Files: lib/tanhf.c m4/tanhf.m4 Depends-on: math 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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tanhf-tests����������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020333�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-20111211-stable/modules/tanl�����������������������������������������������������������������0000664�0000000�0000000�00000001535�11671051007�0017027�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-20111211-stable/modules/tanl-tests�����������������������������������������������������������0000664�0000000�0000000�00000000300�11671051007�0020154�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-20111211-stable/modules/tcgetsid�������������������������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0017675�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: Bruno Haible �����������������������������������������������������������gnulib-20111211-stable/modules/tempname�������������������������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: gen_tempname() function: create a private temporary file or directory. Files: lib/tempname.c lib/tempname.h m4/tempname.m4 Depends-on: extensions fcntl-h gettimeofday lstat stdint sys_stat sys_time configure.ac: gl_FUNC_GEN_TEMPNAME Makefile.am: lib_SOURCES += tempname.c Include: "tempname.h" License: LGPLv2+ Maintainer: Eric Blake and Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/termios��������������������������������������������������������������0000664�0000000�0000000�00000002415�11671051007�0017551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <termios.h> that works around platform issues. Files: lib/termios.in.h m4/termios_h.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_TERMIOS_H 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/termios-c++-tests����������������������������������������������������0000664�0000000�0000000�00000000371�11671051007�0021256�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-20111211-stable/modules/termios-tests��������������������������������������������������������0000664�0000000�0000000�00000000215�11671051007�0020705�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-20111211-stable/modules/thread���������������������������������������������������������������0000664�0000000�0000000�00000000613�11671051007�0017334�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 lock configure.ac: gl_THREAD Makefile.am: lib_SOURCES += glthread/thread.h glthread/thread.c Include: "glthread/thread.h" Link: $(LTLIBMULTITHREAD) when linking with libtool, $(LIBMULTITHREAD) otherwise License: LGPLv2+ Maintainer: Yoann Vandoorselaere ���������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/thread-tests���������������������������������������������������������0000664�0000000�0000000�00000000472�11671051007�0020477�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-20111211-stable/modules/threadlib������������������������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0020023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Access to multithreading primitives. Files: lib/glthread/threadlib.c m4/threadlib.m4 build-aux/config.rpath Depends-on: havelib configure.ac-early: gl_THREADLIB_EARLY configure.ac: gl_THREADLIB Makefile.am: lib_SOURCES += glthread/threadlib.c Include: Link: $(LTLIBTHREAD) when linking with libtool, $(LIBTHREAD) otherwise License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/time�����������������������������������������������������������������0000664�0000000�0000000�00000004264�11671051007�0017031�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_HEADER_TIME_H 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_MKTIME''@/$(GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/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|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|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 '/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-20111211-stable/modules/time-c++-tests�������������������������������������������������������0000664�0000000�0000000�00000000517�11671051007�0020534�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-20111211-stable/modules/time-tests�����������������������������������������������������������0000664�0000000�0000000�00000000210�11671051007�0020154�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-20111211-stable/modules/time_r���������������������������������������������������������������0000664�0000000�0000000�00000000566�11671051007�0017353�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-20111211-stable/modules/timegm���������������������������������������������������������������0000664�0000000�0000000�00000001013�11671051007�0017342�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-20111211-stable/modules/timer-time�����������������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0020141�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 configure.ac: gl_TIMER_TIME Makefile.am: Include: <time.h> Link: $(LIB_TIMER_TIME) License: LGPLv2+ Maintainer: Pádraig Brady, Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/times����������������������������������������������������������������0000664�0000000�0000000�00000000467�11671051007�0017215�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-20111211-stable/modules/times-tests����������������������������������������������������������0000664�0000000�0000000�00000000153�11671051007�0020345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/signature.h tests/test-times.c Makefile.am: TESTS += test-times check_PROGRAMS += test-times ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/timespec�������������������������������������������������������������0000664�0000000�0000000�00000000333�11671051007�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: timespec-related declarations Files: lib/timespec.h m4/timespec.m4 Depends-on: time configure.ac: gl_TIMESPEC Makefile.am: Include: "timespec.h" License: GPL Maintainer: Paul Eggert and Jim Meyering �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/timespec-add���������������������������������������������������������0000664�0000000�0000000�00000000352�11671051007�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Add timespec values. Files: lib/timespec-add.c Depends-on: intprops timespec configure.ac: Makefile.am: lib_SOURCES += timespec-add.c Include: "timespec.h" Link: License: GPL Maintainer: Paul Eggert, Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/timespec-sub���������������������������������������������������������0000664�0000000�0000000�00000000357�11671051007�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Subtract timespec values. Files: lib/timespec-sub.c Depends-on: intprops timespec configure.ac: Makefile.am: lib_SOURCES += timespec-sub.c Include: "timespec.h" Link: License: GPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tls������������������������������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0016676�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 configure.ac: gl_TLS Makefile.am: lib_SOURCES += glthread/tls.h glthread/tls.c Include: "glthread/tls.h" Link: $(LTLIBTHREAD) when linking with libtool, $(LIBTHREAD) otherwise License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tls-tests������������������������������������������������������������0000664�0000000�0000000�00000000264�11671051007�0020031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tls.c Depends-on: thread yield configure.ac: Makefile.am: TESTS += test-tls check_PROGRAMS += test-tls test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tmpdir���������������������������������������������������������������0000664�0000000�0000000�00000000412�11671051007�0017361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine a temporary directory. Files: lib/tmpdir.h lib/tmpdir.c m4/tmpdir.m4 Depends-on: stdbool sys_stat pathmax configure.ac: gt_TMPDIR Makefile.am: lib_SOURCES += tmpdir.h tmpdir.c Include: "tmpdir.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tmpfile��������������������������������������������������������������0000664�0000000�0000000�00000000734�11671051007�0017531�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] 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> License: LGPL Maintainer: Ben Pfaff ������������������������������������gnulib-20111211-stable/modules/tmpfile-safer��������������������������������������������������������0000664�0000000�0000000�00000000536�11671051007�0020627�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" License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/towctrans������������������������������������������������������������0000664�0000000�0000000�00000000570�11671051007�0020113�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/trim�����������������������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0017036�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" License: GPL Maintainer: Davide Angelocola �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/trunc����������������������������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0017225�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: Bruno Haible ������������������������������������������������������������������������������������gnulib-20111211-stable/modules/trunc-ieee�����������������������������������������������������������0000664�0000000�0000000�00000000420�11671051007�0020121�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/trunc-ieee-tests�����������������������������������������������������0000664�0000000�0000000�00000000342�11671051007�0021264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-trunc-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-trunc-ieee check_PROGRAMS += test-trunc-ieee test_trunc_ieee_LDADD = $(LDADD) @TRUNC_LIBM@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/trunc-tests����������������������������������������������������������0000664�0000000�0000000�00000000554�11671051007�0020364�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-20111211-stable/modules/truncf���������������������������������������������������������������0000664�0000000�0000000�00000000703�11671051007�0017366�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: Bruno Haible �������������������������������������������������������������gnulib-20111211-stable/modules/truncf-ieee����������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0020274�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/truncf-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000347�11671051007�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-truncf-ieee.c tests/minus-zero.h tests/macros.h Depends-on: float signbit configure.ac: Makefile.am: TESTS += test-truncf-ieee check_PROGRAMS += test-truncf-ieee test_truncf_ieee_LDADD = $(LDADD) @TRUNCF_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/truncf-tests���������������������������������������������������������0000664�0000000�0000000�00000000566�11671051007�0020535�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-20111211-stable/modules/truncl���������������������������������������������������������������0000664�0000000�0000000�00000001160�11671051007�0017372�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/truncl-ieee����������������������������������������������������������0000664�0000000�0000000�00000000425�11671051007�0020302�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/truncl-ieee-tests����������������������������������������������������0000664�0000000�0000000�00000000355�11671051007�0021444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-truncl-ieee.c tests/minus-zero.h tests/macros.h Depends-on: fpucw float signbit configure.ac: Makefile.am: TESTS += test-truncl-ieee check_PROGRAMS += test-truncl-ieee test_truncl_ieee_LDADD = $(LDADD) @TRUNCL_LIBM@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/truncl-tests���������������������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0020535�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-20111211-stable/modules/tsearch��������������������������������������������������������������0000664�0000000�0000000�00000000534�11671051007�0017520�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 $REPLACE_TSEARCH = 1; then AC_LIBOBJ([tsearch]) gl_PREREQ_TSEARCH fi gl_SEARCH_MODULE_INDICATOR([tsearch]) Makefile.am: Include: <search.h> License: LGPL Maintainer: all, glibc ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/tsearch-tests��������������������������������������������������������0000664�0000000�0000000�00000001037�11671051007�0020657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-tsearch.sh tests/test-tsearch.c tests/signature.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-20111211-stable/modules/ttyname_r������������������������������������������������������������0000664�0000000�0000000�00000000623�11671051007�0020070�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: Bruno Haible �������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ttyname_r-tests������������������������������������������������������0000664�0000000�0000000�00000000242�11671051007�0021225�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-20111211-stable/modules/tzset����������������������������������������������������������������0000664�0000000�0000000�00000000322�11671051007�0017233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: tzset - initialize time conversion information Files: m4/tzset.m4 Depends-on: gettimeofday configure.ac: gl_FUNC_TZSET Makefile.am: Include: <time.h> License: LGPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/u64������������������������������������������������������������������0000664�0000000�0000000�00000000351�11671051007�0016502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: uint64_t-like operations that work even on hosts lacking uint64_t Files: lib/u64.h Depends-on: stdint configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: Include: "u64.h" License: LGPLv2+ Maintainer: Paul Eggert ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/u64-tests������������������������������������������������������������0000664�0000000�0000000�00000000123�11671051007�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-u64.c Makefile.am: TESTS += test-u64 check_PROGRAMS += test-u64 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ucs4-utf16�����������������������������������������������������������0000664�0000000�0000000�00000000254�11671051007�0017707�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/ucs4-utf8������������������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0017626�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uname����������������������������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0017177�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: Bruno Haible ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uname-tests����������������������������������������������������������0000664�0000000�0000000�00000000304�11671051007�0020327�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-20111211-stable/modules/unicase/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017571�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/base���������������������������������������������������������0000664�0000000�0000000�00000001053�11671051007�0020425�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.1], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/cased��������������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0020574�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/cased-tests��������������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0021736�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-20111211-stable/modules/unicase/empty-prefix-context�����������������������������������������0000664�0000000�0000000�00000000605�11671051007�0023630�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/empty-suffix-context�����������������������������������������0000664�0000000�0000000�00000000605�11671051007�0023637�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/ignorable����������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0021457�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/ignorable-tests����������������������������������������������0000664�0000000�0000000�00000000504�11671051007�0022615�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-20111211-stable/modules/unicase/locale-language����������������������������������������������0000664�0000000�0000000�00000001537�11671051007�0022542�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 unicase/locale-languages.h: $(srcdir)/unicase/locale-languages.gperf $(GPERF) -m 10 $(srcdir)/unicase/locale-languages.gperf > $(srcdir)/unicase/locale-languages.h-t mv $(srcdir)/unicase/locale-languages.h-t $(srcdir)/unicase/locale-languages.h BUILT_SOURCES += unicase/locale-languages.h MOSTLYCLEANFILES += unicase/locale-languages.h-t MAINTAINERCLEANFILES += unicase/locale-languages.h EXTRA_DIST += unicase/locale-languages.h Include: "unicase.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/locale-language-tests����������������������������������������0000664�0000000�0000000�00000001257�11671051007�0023701�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) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/special-casing�����������������������������������������������0000664�0000000�0000000�00000001441�11671051007�0022376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Special casing table. Files: lib/unicase/special-casing.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 unicase/special-casing-table.h: $(srcdir)/unicase/special-casing-table.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 Include: "unicase/special-casing.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/tocasefold���������������������������������������������������0000664�0000000�0000000�00000000554�11671051007�0021643�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/tolower������������������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0021211�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.4], [unicase/tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_TOLOWER lib_SOURCES += unicase/tolower.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/tolower-tests������������������������������������������������0000664�0000000�0000000�00000000506�11671051007�0022350�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-20111211-stable/modules/unicase/totitle������������������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0021202�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.4], [unicase/totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_TOTITLE lib_SOURCES += unicase/totitle.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/totitle-tests������������������������������������������������0000664�0000000�0000000�00000000506�11671051007�0022341�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-20111211-stable/modules/unicase/toupper������������������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0021214�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.4], [unicase/toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_TOUPPER lib_SOURCES += unicase/toupper.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/toupper-tests������������������������������������������������0000664�0000000�0000000�00000000506�11671051007�0022353�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-20111211-stable/modules/unicase/u16-casecmp��������������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0021541�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.4], [unicase/u16-casecmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CASECMP lib_SOURCES += unicase/u16-casecmp.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������gnulib-20111211-stable/modules/unicase/u16-casecmp-tests��������������������������������������������0000664�0000000�0000000�00000000457�11671051007�0022706�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-20111211-stable/modules/unicase/u16-casecoll�������������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0021710�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.4], [unicase/u16-casecoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CASECOLL lib_SOURCES += unicase/u16-casecoll.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-casecoll-tests�������������������������������������������0000664�0000000�0000000�00000000501�11671051007�0023046�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-20111211-stable/modules/unicase/u16-casefold�������������������������������������������������0000664�0000000�0000000�00000000736�11671051007�0021713�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.4], [unicase/u16-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CASEFOLD lib_SOURCES += unicase/u16-casefold.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������gnulib-20111211-stable/modules/unicase/u16-casefold-tests�������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0023050�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-20111211-stable/modules/unicase/u16-casemap��������������������������������������������������0000664�0000000�0000000�00000001027�11671051007�0021536�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-casexfrm�������������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0021745�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.4], [unicase/u16-casexfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_CASEXFRM lib_SOURCES += unicase/u16-casexfrm.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible �������������������������gnulib-20111211-stable/modules/unicase/u16-ct-casefold����������������������������������������������0000664�0000000�0000000�00000001027�11671051007�0022311�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-ct-tolower�����������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0022234�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-ct-totitle�����������������������������������������������0000664�0000000�0000000�00000001252�11671051007�0022215�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.4], [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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-ct-toupper�����������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0022237�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-is-cased�������������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0021625�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.4], [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: LGPL Maintainer: Bruno Haible ������������������gnulib-20111211-stable/modules/unicase/u16-is-cased-tests�������������������������������������������0000664�0000000�0000000�00000000452�11671051007�0022756�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-20111211-stable/modules/unicase/u16-is-casefolded��������������������������������������������0000664�0000000�0000000�00000000660�11671051007�0022631�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-is-casefolded-tests��������������������������������������0000664�0000000�0000000�00000000515�11671051007�0023770�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-20111211-stable/modules/unicase/u16-is-invariant���������������������������������������������0000664�0000000�0000000�00000000635�11671051007�0022535�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-is-lowercase���������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022526�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-is-lowercase-tests���������������������������������������0000664�0000000�0000000�00000000506�11671051007�0023663�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-20111211-stable/modules/unicase/u16-is-titlecase���������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022517�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-is-titlecase-tests���������������������������������������0000664�0000000�0000000�00000000506�11671051007�0023654�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-20111211-stable/modules/unicase/u16-is-uppercase���������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022531�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-is-uppercase-tests���������������������������������������0000664�0000000�0000000�00000000506�11671051007�0023666�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-20111211-stable/modules/unicase/u16-prefix-context�������������������������������������������0000664�0000000�0000000�00000001044�11671051007�0023103�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-suffix-context�������������������������������������������0000664�0000000�0000000�00000001024�11671051007�0023110�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.4], [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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u16-tolower��������������������������������������������������0000664�0000000�0000000�00000000742�11671051007�0021623�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.4], [unicase/u16-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_TOLOWER lib_SOURCES += unicase/u16-tolower.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������gnulib-20111211-stable/modules/unicase/u16-tolower-tests��������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022757�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-20111211-stable/modules/unicase/u16-totitle��������������������������������������������������0000664�0000000�0000000�00000000726�11671051007�0021616�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.4], [unicase/u16-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_TOTITLE lib_SOURCES += unicase/u16-totitle.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������gnulib-20111211-stable/modules/unicase/u16-totitle-tests��������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022750�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-20111211-stable/modules/unicase/u16-toupper��������������������������������������������������0000664�0000000�0000000�00000000742�11671051007�0021626�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.4], [unicase/u16-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U16_TOUPPER lib_SOURCES += unicase/u16-toupper.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������gnulib-20111211-stable/modules/unicase/u16-toupper-tests��������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022762�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-20111211-stable/modules/unicase/u32-casecmp��������������������������������������������������0000664�0000000�0000000�00000000722�11671051007�0021537�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.4], [unicase/u32-casecmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CASECMP lib_SOURCES += unicase/u32-casecmp.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������gnulib-20111211-stable/modules/unicase/u32-casecmp-tests��������������������������������������������0000664�0000000�0000000�00000000457�11671051007�0022704�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-20111211-stable/modules/unicase/u32-casecoll�������������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0021706�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.4], [unicase/u32-casecoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CASECOLL lib_SOURCES += unicase/u32-casecoll.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-casecoll-tests�������������������������������������������0000664�0000000�0000000�00000000501�11671051007�0023044�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-20111211-stable/modules/unicase/u32-casefold�������������������������������������������������0000664�0000000�0000000�00000000736�11671051007�0021711�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.4], [unicase/u32-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CASEFOLD lib_SOURCES += unicase/u32-casefold.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������gnulib-20111211-stable/modules/unicase/u32-casefold-tests�������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0023046�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-20111211-stable/modules/unicase/u32-casemap��������������������������������������������������0000664�0000000�0000000�00000001027�11671051007�0021534�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-casexfrm�������������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0021743�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.4], [unicase/u32-casexfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_CASEXFRM lib_SOURCES += unicase/u32-casexfrm.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible �������������������������gnulib-20111211-stable/modules/unicase/u32-ct-casefold����������������������������������������������0000664�0000000�0000000�00000001027�11671051007�0022307�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-ct-tolower�����������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0022232�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-ct-totitle�����������������������������������������������0000664�0000000�0000000�00000001252�11671051007�0022213�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.4], [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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-ct-toupper�����������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0022235�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-is-cased�������������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0021623�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.4], [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: LGPL Maintainer: Bruno Haible ������������������gnulib-20111211-stable/modules/unicase/u32-is-cased-tests�������������������������������������������0000664�0000000�0000000�00000000452�11671051007�0022754�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-20111211-stable/modules/unicase/u32-is-casefolded��������������������������������������������0000664�0000000�0000000�00000000660�11671051007�0022627�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-is-casefolded-tests��������������������������������������0000664�0000000�0000000�00000000515�11671051007�0023766�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-20111211-stable/modules/unicase/u32-is-invariant���������������������������������������������0000664�0000000�0000000�00000000635�11671051007�0022533�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-is-lowercase���������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022524�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-is-lowercase-tests���������������������������������������0000664�0000000�0000000�00000000506�11671051007�0023661�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-20111211-stable/modules/unicase/u32-is-titlecase���������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022515�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-is-titlecase-tests���������������������������������������0000664�0000000�0000000�00000000506�11671051007�0023652�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-20111211-stable/modules/unicase/u32-is-uppercase���������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022527�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-is-uppercase-tests���������������������������������������0000664�0000000�0000000�00000000506�11671051007�0023664�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-20111211-stable/modules/unicase/u32-prefix-context�������������������������������������������0000664�0000000�0000000�00000001044�11671051007�0023101�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-suffix-context�������������������������������������������0000664�0000000�0000000�00000001024�11671051007�0023106�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.4], [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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u32-tolower��������������������������������������������������0000664�0000000�0000000�00000000742�11671051007�0021621�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.4], [unicase/u32-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_TOLOWER lib_SOURCES += unicase/u32-tolower.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������gnulib-20111211-stable/modules/unicase/u32-tolower-tests��������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022755�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-20111211-stable/modules/unicase/u32-totitle��������������������������������������������������0000664�0000000�0000000�00000000726�11671051007�0021614�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.4], [unicase/u32-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_TOTITLE lib_SOURCES += unicase/u32-totitle.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������gnulib-20111211-stable/modules/unicase/u32-totitle-tests��������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022746�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-20111211-stable/modules/unicase/u32-toupper��������������������������������������������������0000664�0000000�0000000�00000000742�11671051007�0021624�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.4], [unicase/u32-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U32_TOUPPER lib_SOURCES += unicase/u32-toupper.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������gnulib-20111211-stable/modules/unicase/u32-toupper-tests��������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0022760�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-20111211-stable/modules/unicase/u8-casecmp���������������������������������������������������0000664�0000000�0000000�00000000713�11671051007�0021462�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.4], [unicase/u8-casecmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CASECMP lib_SOURCES += unicase/u8-casecmp.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-casecmp-tests���������������������������������������������0000664�0000000�0000000�00000000451�11671051007�0022621�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-20111211-stable/modules/unicase/u8-casecoll��������������������������������������������������0000664�0000000�0000000�00000000673�11671051007�0021641�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.4], [unicase/u8-casecoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CASECOLL lib_SOURCES += unicase/u8-casecoll.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-casecoll-tests��������������������������������������������0000664�0000000�0000000�00000000473�11671051007�0022777�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-20111211-stable/modules/unicase/u8-casefold��������������������������������������������������0000664�0000000�0000000�00000000730�11671051007�0021626�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.4], [unicase/u8-casefold]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CASEFOLD lib_SOURCES += unicase/u8-casefold.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������gnulib-20111211-stable/modules/unicase/u8-casefold-tests��������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0022771�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-20111211-stable/modules/unicase/u8-casemap���������������������������������������������������0000664�0000000�0000000�00000001020�11671051007�0021450�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-casexfrm��������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0021657�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.4], [unicase/u8-casexfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_CASEXFRM lib_SOURCES += unicase/u8-casexfrm.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unicase/u8-ct-casefold�����������������������������������������������0000664�0000000�0000000�00000001020�11671051007�0022223�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.4], [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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-ct-tolower������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0022150�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-ct-totitle������������������������������������������������0000664�0000000�0000000�00000001240�11671051007�0022133�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.4], [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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-ct-toupper������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0022153�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-is-cased��������������������������������������������������0000664�0000000�0000000�00000000744�11671051007�0021543�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.4], [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: LGPL Maintainer: Bruno Haible ����������������������������gnulib-20111211-stable/modules/unicase/u8-is-cased-tests��������������������������������������������0000664�0000000�0000000�00000000444�11671051007�0022700�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-20111211-stable/modules/unicase/u8-is-casefolded���������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0022552�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-is-casefolded-tests���������������������������������������0000664�0000000�0000000�00000000507�11671051007�0023712�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-20111211-stable/modules/unicase/u8-is-invariant����������������������������������������������0000664�0000000�0000000�00000000630�11671051007�0022451�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-is-lowercase����������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0022447�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-is-lowercase-tests����������������������������������������0000664�0000000�0000000�00000000500�11671051007�0023576�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-20111211-stable/modules/unicase/u8-is-titlecase����������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0022440�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-is-titlecase-tests����������������������������������������0000664�0000000�0000000�00000000500�11671051007�0023567�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-20111211-stable/modules/unicase/u8-is-uppercase����������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0022452�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-is-uppercase-tests����������������������������������������0000664�0000000�0000000�00000000500�11671051007�0023601�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-20111211-stable/modules/unicase/u8-prefix-context��������������������������������������������0000664�0000000�0000000�00000001035�11671051007�0023024�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-suffix-context��������������������������������������������0000664�0000000�0000000�00000001016�11671051007�0023032�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.4], [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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-tolower���������������������������������������������������0000664�0000000�0000000�00000000734�11671051007�0021545�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.4], [unicase/u8-tolower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_TOLOWER lib_SOURCES += unicase/u8-tolower.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������������gnulib-20111211-stable/modules/unicase/u8-tolower-tests���������������������������������������������0000664�0000000�0000000�00000000432�11671051007�0022700�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-20111211-stable/modules/unicase/u8-totitle���������������������������������������������������0000664�0000000�0000000�00000000720�11671051007�0021531�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.4], [unicase/u8-totitle]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_TOTITLE lib_SOURCES += unicase/u8-totitle.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������gnulib-20111211-stable/modules/unicase/u8-totitle-tests���������������������������������������������0000664�0000000�0000000�00000000432�11671051007�0022671�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-20111211-stable/modules/unicase/u8-toupper���������������������������������������������������0000664�0000000�0000000�00000000734�11671051007�0021550�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.4], [unicase/u8-toupper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_U8_TOUPPER lib_SOURCES += unicase/u8-toupper.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������������gnulib-20111211-stable/modules/unicase/u8-toupper-tests���������������������������������������������0000664�0000000�0000000�00000000432�11671051007�0022703�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-20111211-stable/modules/unicase/ulc-casecmp��������������������������������������������������0000664�0000000�0000000�00000000757�11671051007�0021721�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.4], [unicase/ulc-casecmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_ULC_CASECMP lib_SOURCES += unicase/ulc-casecmp.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible �����������������gnulib-20111211-stable/modules/unicase/ulc-casecmp-tests��������������������������������������������0000664�0000000�0000000�00000001110�11671051007�0023041�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) $(LIBUNISTRING) @LIBICONV@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/ulc-casecoll�������������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0022067�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.4], [unicase/ulc-casecoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_ULC_CASECOLL lib_SOURCES += unicase/ulc-casecoll.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/ulc-casecoll-tests�������������������������������������������0000664�0000000�0000000�00000001121�11671051007�0023215�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) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unicase/ulc-casexfrm�������������������������������������������������0000664�0000000�0000000�00000000676�11671051007�0022116�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.4], [unicase/ulc-casexfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICASE_ULC_CASEXFRM lib_SOURCES += unicase/ulc-casexfrm.c endif Include: "unicase.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������gnulib-20111211-stable/modules/unicodeio������������������������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0020050�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 Depends-on: unistr/u8-uctomb iconv iconv_open gettext-h localcharset error ignore-value configure.ac: gl_UNICODEIO Makefile.am: lib_SOURCES += unicodeio.h unicodeio.c Include: "unicodeio.h" Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017623�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/base���������������������������������������������������������0000664�0000000�0000000�00000001116�11671051007�0020457�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], [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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u16-conv-from-enc��������������������������������������������0000664�0000000�0000000�00000001006�11671051007�0022625�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u16-conv-from-enc-tests��������������������������������������0000664�0000000�0000000�00000000505�11671051007�0023770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u16-conv-from-enc.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 test_u16_conv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u16-conv-to-enc����������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0022304�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u16-conv-to-enc-tests����������������������������������������0000664�0000000�0000000�00000000452�11671051007�0023450�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-20111211-stable/modules/uniconv/u16-strconv-from-enc�����������������������������������������0000664�0000000�0000000�00000000717�11671051007�0023366�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: LGPL Maintainer: Bruno Haible �������������������������������������������������gnulib-20111211-stable/modules/uniconv/u16-strconv-from-enc-tests�����������������������������������0000664�0000000�0000000�00000000532�11671051007�0024521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u16-strconv-from-enc.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 test_u16_strconv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u16-strconv-from-locale��������������������������������������0000664�0000000�0000000�00000000673�11671051007�0024061�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u16-strconv-to-enc�������������������������������������������0000664�0000000�0000000�00000000775�11671051007�0023051�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: LGPL Maintainer: Bruno Haible ���gnulib-20111211-stable/modules/uniconv/u16-strconv-to-enc-tests�������������������������������������0000664�0000000�0000000�00000000516�11671051007�0024202�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-20111211-stable/modules/uniconv/u16-strconv-to-locale����������������������������������������0000664�0000000�0000000�00000000661�11671051007�0023535�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u32-conv-from-enc��������������������������������������������0000664�0000000�0000000�00000000753�11671051007�0022633�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: LGPL Maintainer: Bruno Haible ���������������������gnulib-20111211-stable/modules/uniconv/u32-conv-from-enc-tests��������������������������������������0000664�0000000�0000000�00000000505�11671051007�0023766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u32-conv-from-enc.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 test_u32_conv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u32-conv-to-enc����������������������������������������������0000664�0000000�0000000�00000000737�11671051007�0022314�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: LGPL Maintainer: Bruno Haible ���������������������������������gnulib-20111211-stable/modules/uniconv/u32-conv-to-enc-tests����������������������������������������0000664�0000000�0000000�00000000452�11671051007�0023446�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-20111211-stable/modules/uniconv/u32-strconv-from-enc�����������������������������������������0000664�0000000�0000000�00000000717�11671051007�0023364�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: LGPL Maintainer: Bruno Haible �������������������������������������������������gnulib-20111211-stable/modules/uniconv/u32-strconv-from-enc-tests�����������������������������������0000664�0000000�0000000�00000000532�11671051007�0024517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u32-strconv-from-enc.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 test_u32_strconv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u32-strconv-from-locale��������������������������������������0000664�0000000�0000000�00000000673�11671051007�0024057�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u32-strconv-to-enc�������������������������������������������0000664�0000000�0000000�00000000742�11671051007�0023041�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: LGPL Maintainer: Bruno Haible ������������������������������gnulib-20111211-stable/modules/uniconv/u32-strconv-to-enc-tests�������������������������������������0000664�0000000�0000000�00000000516�11671051007�0024200�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-20111211-stable/modules/uniconv/u32-strconv-to-locale����������������������������������������0000664�0000000�0000000�00000000661�11671051007�0023533�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u8-conv-from-enc���������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0022556�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: Bruno Haible ������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u8-conv-from-enc-tests���������������������������������������0000664�0000000�0000000�00000000517�11671051007�0023714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u8-conv-from-enc.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 test_u8_conv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u8-conv-to-enc�����������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0022227�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u8-conv-to-enc-tests�����������������������������������������0000664�0000000�0000000�00000000465�11671051007�0023375�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-20111211-stable/modules/uniconv/u8-strconv-from-enc������������������������������������������0000664�0000000�0000000�00000000713�11671051007�0023303�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: Bruno Haible �����������������������������������������������������gnulib-20111211-stable/modules/uniconv/u8-strconv-from-enc-tests������������������������������������0000664�0000000�0000000�00000000523�11671051007�0024442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniconv/test-u8-strconv-from-enc.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 test_u8_strconv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u8-strconv-from-locale���������������������������������������0000664�0000000�0000000�00000000670�11671051007�0023777�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: Bruno Haible ������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u8-strconv-to-enc��������������������������������������������0000664�0000000�0000000�00000000656�11671051007�0022770�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniconv/u8-strconv-to-enc-tests��������������������������������������0000664�0000000�0000000�00000000507�11671051007�0024123�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-20111211-stable/modules/uniconv/u8-strconv-to-locale�����������������������������������������0000664�0000000�0000000�00000000653�11671051007�0023457�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020002�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/base��������������������������������������������������������0000664�0000000�0000000�00000001060�11671051007�0020634�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.4], [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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidicategory-all��������������������������������������������0000664�0000000�0000000�00000000452�11671051007�0023141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Unicode character bidi category functions. Status: deprecated Notice: This module is deprecated. Use the module 'unictype/bidiclass-all' instead. Files: Depends-on: unictype/bidiclass-all configure.ac: Makefile.am: Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidicategory-byname�����������������������������������������0000664�0000000�0000000�00000000475�11671051007�0023651�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find a Unicode character bidi category, given its name. Status: deprecated Notice: This module is deprecated. Use the module 'unictype/bidiclass-byname' instead. Files: Depends-on: unictype/bidiclass-byname configure.ac: Makefile.am: Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidicategory-name�������������������������������������������0000664�0000000�0000000�00000000452�11671051007�0023311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Name of Unicode character bidi category. Status: deprecated Notice: This module is deprecated. Use the module 'unictype/bidiclass-name' instead. Files: Depends-on: unictype/bidiclass-name configure.ac: Makefile.am: Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidicategory-of���������������������������������������������0000664�0000000�0000000�00000000455�11671051007�0023000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Determine bidi category of a Unicode character. Status: deprecated Notice: This module is deprecated. Use the module 'unictype/bidiclass-of' instead. Files: Depends-on: unictype/bidiclass-of configure.ac: Makefile.am: Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidicategory-test�������������������������������������������0000664�0000000�0000000�00000000504�11671051007�0023346�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Test whether a Unicode character belongs to a given bidi category. Status: deprecated Notice: This module is deprecated. Use the module 'unictype/bidiclass-test' instead. Files: Depends-on: unictype/bidiclass-test configure.ac: Makefile.am: Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidiclass-all�����������������������������������������������0000664�0000000�0000000�00000000475�11671051007�0022436�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidiclass-byname��������������������������������������������0000664�0000000�0000000�00000001461�11671051007�0023135�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.4], [unictype/bidiclass-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_BYNAME lib_SOURCES += unictype/bidi_byname.c endif unictype/bidi_byname.h: unictype/bidi_byname.gperf $(GPERF) -m 10 $(srcdir)/unictype/bidi_byname.gperf > $(srcdir)/unictype/bidi_byname.h-t mv $(srcdir)/unictype/bidi_byname.h-t $(srcdir)/unictype/bidi_byname.h BUILT_SOURCES += unictype/bidi_byname.h MOSTLYCLEANFILES += unictype/bidi_byname.h-t MAINTAINERCLEANFILES += unictype/bidi_byname.h EXTRA_DIST += unictype/bidi_byname.h Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidiclass-byname-tests��������������������������������������0000664�0000000�0000000�00000000410�11671051007�0024266�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-20111211-stable/modules/unictype/bidiclass-longname������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0023462�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.4], [unictype/bidiclass-longname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_LONGNAME lib_SOURCES += unictype/bidi_longname.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidiclass-longname-tests������������������������������������0000664�0000000�0000000�00000000424�11671051007�0024620�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-20111211-stable/modules/unictype/bidiclass-name����������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0022600�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.4], [unictype/bidiclass-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_NAME lib_SOURCES += unictype/bidi_name.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidiclass-name-tests����������������������������������������0000664�0000000�0000000�00000000374�11671051007�0023744�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-20111211-stable/modules/unictype/bidiclass-of������������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0022270�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.4], [unictype/bidiclass-of]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_OF lib_SOURCES += unictype/bidi_of.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidiclass-of-tests������������������������������������������0000664�0000000�0000000�00000000360�11671051007�0023423�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-20111211-stable/modules/unictype/bidiclass-test����������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0022636�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.4], [unictype/bidiclass-test]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BIDICLASS_TEST lib_SOURCES += unictype/bidi_test.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/bidiclass-test-tests����������������������������������������0000664�0000000�0000000�00000000422�11671051007�0023775�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-20111211-stable/modules/unictype/block-all���������������������������������������������������0000664�0000000�0000000�00000000351�11671051007�0021564�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/block-list��������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0021775�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.4], [unictype/block-list]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BLOCK_LIST lib_SOURCES += unictype/blocks.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/block-list-tests��������������������������������������������0000664�0000000�0000000�00000000402�11671051007�0023124�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-20111211-stable/modules/unictype/block-of����������������������������������������������������0000664�0000000�0000000�00000000312�11671051007�0021415�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/block-of-tests����������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0022564�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-20111211-stable/modules/unictype/block-test��������������������������������������������������0000664�0000000�0000000�00000000571�11671051007�0021777�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.4], [unictype/block-test]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_BLOCK_TEST lib_SOURCES += unictype/block_test.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/block-test-tests��������������������������������������������0000664�0000000�0000000�00000000402�11671051007�0023130�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-20111211-stable/modules/unictype/category-C��������������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0021720�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.4], [unictype/category-C]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_C lib_SOURCES += unictype/categ_C.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-C-tests��������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0023062�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-20111211-stable/modules/unictype/category-Cc�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022067�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], [unictype/category-Cc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CC lib_SOURCES += unictype/categ_Cc.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Cc-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023224�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-20111211-stable/modules/unictype/category-Cf�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022065�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.4], [unictype/category-Cf]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CF lib_SOURCES += unictype/categ_Cf.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Cf-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023227�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-20111211-stable/modules/unictype/category-Cn�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022075�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.4], [unictype/category-Cn]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CN lib_SOURCES += unictype/categ_Cn.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Cn-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023237�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-20111211-stable/modules/unictype/category-Co�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022103�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], [unictype/category-Co]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CO lib_SOURCES += unictype/categ_Co.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Co-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023240�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-20111211-stable/modules/unictype/category-Cs�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022107�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], [unictype/category-Cs]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CS lib_SOURCES += unictype/categ_Cs.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Cs-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023244�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-20111211-stable/modules/unictype/category-L��������������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0021731�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.4], [unictype/category-L]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_L lib_SOURCES += unictype/categ_L.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-L-tests��������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0023073�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-20111211-stable/modules/unictype/category-LC�������������������������������������������������0000664�0000000�0000000�00000000607�11671051007�0022041�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.4], [unictype/category-LC]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LC lib_SOURCES += unictype/categ_LC.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-LC-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023175�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-20111211-stable/modules/unictype/category-Ll�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022104�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.4], [unictype/category-Ll]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LL lib_SOURCES += unictype/categ_Ll.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Ll-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023246�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-20111211-stable/modules/unictype/category-Lm�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022105�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.4], [unictype/category-Lm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LM lib_SOURCES += unictype/categ_Lm.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Lm-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023247�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-20111211-stable/modules/unictype/category-Lo�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022107�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.4], [unictype/category-Lo]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LO lib_SOURCES += unictype/categ_Lo.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Lo-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023251�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-20111211-stable/modules/unictype/category-Lt�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022121�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], [unictype/category-Lt]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LT lib_SOURCES += unictype/categ_Lt.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Lt-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023256�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-20111211-stable/modules/unictype/category-Lu�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022115�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.4], [unictype/category-Lu]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LU lib_SOURCES += unictype/categ_Lu.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Lu-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023257�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-20111211-stable/modules/unictype/category-M��������������������������������������������������0000664�0000000�0000000�00000000605�11671051007�0021735�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.4], [unictype/category-M]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_M lib_SOURCES += unictype/categ_M.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-M-tests��������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0023074�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-20111211-stable/modules/unictype/category-Mc�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022074�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.4], [unictype/category-Mc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_MC lib_SOURCES += unictype/categ_Mc.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Mc-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023236�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-20111211-stable/modules/unictype/category-Me�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022076�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.4], [unictype/category-Me]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ME lib_SOURCES += unictype/categ_Me.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Me-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023240�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-20111211-stable/modules/unictype/category-Mn�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022107�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.4], [unictype/category-Mn]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_MN lib_SOURCES += unictype/categ_Mn.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Mn-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023251�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-20111211-stable/modules/unictype/category-N��������������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0021733�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.4], [unictype/category-N]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_N lib_SOURCES += unictype/categ_N.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-N-tests��������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0023075�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-20111211-stable/modules/unictype/category-Nd�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022076�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.4], [unictype/category-Nd]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ND lib_SOURCES += unictype/categ_Nd.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Nd-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023240�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-20111211-stable/modules/unictype/category-Nl�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022106�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.4], [unictype/category-Nl]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NL lib_SOURCES += unictype/categ_Nl.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Nl-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023250�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-20111211-stable/modules/unictype/category-No�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022111�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.4], [unictype/category-No]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NO lib_SOURCES += unictype/categ_No.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-No-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023253�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-20111211-stable/modules/unictype/category-P��������������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0021735�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.4], [unictype/category-P]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_P lib_SOURCES += unictype/categ_P.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-P-tests��������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0023077�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-20111211-stable/modules/unictype/category-Pc�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022104�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], [unictype/category-Pc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PC lib_SOURCES += unictype/categ_Pc.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Pc-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023241�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-20111211-stable/modules/unictype/category-Pd�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022100�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.4], [unictype/category-Pd]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PD lib_SOURCES += unictype/categ_Pd.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Pd-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023242�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-20111211-stable/modules/unictype/category-Pe�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022106�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], [unictype/category-Pe]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PE lib_SOURCES += unictype/categ_Pe.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Pe-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023243�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-20111211-stable/modules/unictype/category-Pf�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022107�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], [unictype/category-Pf]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PF lib_SOURCES += unictype/categ_Pf.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Pf-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023244�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-20111211-stable/modules/unictype/category-Pi�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022112�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], [unictype/category-Pi]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PI lib_SOURCES += unictype/categ_Pi.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Pi-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023247�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-20111211-stable/modules/unictype/category-Po�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022113�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.4], [unictype/category-Po]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PO lib_SOURCES += unictype/categ_Po.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Po-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023255�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-20111211-stable/modules/unictype/category-Ps�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022124�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], [unictype/category-Ps]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PS lib_SOURCES += unictype/categ_Ps.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Ps-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023261�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-20111211-stable/modules/unictype/category-S��������������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0021740�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.4], [unictype/category-S]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_S lib_SOURCES += unictype/categ_S.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-S-tests��������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0023102�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-20111211-stable/modules/unictype/category-Sc�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022102�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.4], [unictype/category-Sc]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SC lib_SOURCES += unictype/categ_Sc.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Sc-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023244�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-20111211-stable/modules/unictype/category-Sk�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022112�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.4], [unictype/category-Sk]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SK lib_SOURCES += unictype/categ_Sk.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Sk-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023254�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-20111211-stable/modules/unictype/category-Sm�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022114�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.4], [unictype/category-Sm]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SM lib_SOURCES += unictype/categ_Sm.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Sm-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023256�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-20111211-stable/modules/unictype/category-So�������������������������������������������������0000664�0000000�0000000�00000000610�11671051007�0022116�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.4], [unictype/category-So]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SO lib_SOURCES += unictype/categ_So.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-So-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023260�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-20111211-stable/modules/unictype/category-Z��������������������������������������������������0000664�0000000�0000000�00000000600�11671051007�0021745�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], [unictype/category-Z]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_Z lib_SOURCES += unictype/categ_Z.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Z-tests��������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0023111�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-20111211-stable/modules/unictype/category-Zl�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022127�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], [unictype/category-Zl]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZL lib_SOURCES += unictype/categ_Zl.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Zl-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023264�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-20111211-stable/modules/unictype/category-Zp�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022133�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], [unictype/category-Zp]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZP lib_SOURCES += unictype/categ_Zp.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Zp-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023270�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-20111211-stable/modules/unictype/category-Zs�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022136�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], [unictype/category-Zs]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZS lib_SOURCES += unictype/categ_Zs.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-Zs-tests�������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0023273�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-20111211-stable/modules/unictype/category-all������������������������������������������������0000664�0000000�0000000�00000002243�11671051007�0022311�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-and������������������������������������������������0000664�0000000�0000000�00000000640�11671051007�0022302�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], [unictype/category-and]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_AND lib_SOURCES += unictype/categ_and.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-and-not��������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0023104�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], [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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-and-not-tests��������������������������������������0000664�0000000�0000000�00000000622�11671051007�0024240�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-20111211-stable/modules/unictype/category-and-tests������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0023446�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-20111211-stable/modules/unictype/category-byname���������������������������������������������0000664�0000000�0000000�00000003151�11671051007�0023013�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.4], [unictype/category-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_BYNAME lib_SOURCES += unictype/categ_byname.c endif unictype/categ_byname.h: unictype/categ_byname.gperf $(GPERF) -m 10 $(srcdir)/unictype/categ_byname.gperf > $(srcdir)/unictype/categ_byname.h-t mv $(srcdir)/unictype/categ_byname.h-t $(srcdir)/unictype/categ_byname.h BUILT_SOURCES += unictype/categ_byname.h MOSTLYCLEANFILES += unictype/categ_byname.h-t MAINTAINERCLEANFILES += unictype/categ_byname.h EXTRA_DIST += unictype/categ_byname.h Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-byname-tests���������������������������������������0000664�0000000�0000000�00000000455�11671051007�0024157�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-20111211-stable/modules/unictype/category-longname�������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0023347�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.4], [unictype/category-longname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LONGNAME lib_SOURCES += unictype/categ_longname.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-longname-tests�������������������������������������0000664�0000000�0000000�00000000530�11671051007�0024476�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-20111211-stable/modules/unictype/category-name�����������������������������������������������0000664�0000000�0000000�00000000536�11671051007�0022464�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], [unictype/category-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NAME lib_SOURCES += unictype/categ_name.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-name-tests�����������������������������������������0000664�0000000�0000000�00000000500�11671051007�0023613�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-20111211-stable/modules/unictype/category-none�����������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0022501�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], [unictype/category-none]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NONE lib_SOURCES += unictype/categ_none.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-none-tests�����������������������������������������0000664�0000000�0000000�00000000431�11671051007�0023635�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-20111211-stable/modules/unictype/category-of�������������������������������������������������0000664�0000000�0000000�00000000653�11671051007�0022150�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.4], [unictype/category-of]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_OF lib_SOURCES += unictype/categ_of.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-of-tests�������������������������������������������0000664�0000000�0000000�00000000415�11671051007�0023304�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-20111211-stable/modules/unictype/category-or�������������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0022170�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], [unictype/category-or]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_OR lib_SOURCES += unictype/categ_or.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-or-tests�������������������������������������������0000664�0000000�0000000�00000000465�11671051007�0023325�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-20111211-stable/modules/unictype/category-test�����������������������������������������������0000664�0000000�0000000�00000000655�11671051007�0022525�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.4], [unictype/category-test]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_TEST lib_SOURCES += unictype/categ_test.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-test-withtable�������������������������������������0000664�0000000�0000000�00000000361�11671051007�0024500�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/category-test-withtable-tests�������������������������������0000664�0000000�0000000�00000000476�11671051007�0025647�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-20111211-stable/modules/unictype/combining-class���������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0023002�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.4], [unictype/combining-class]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS lib_SOURCES += unictype/combiningclass.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/combining-class-all�����������������������������������������0000664�0000000�0000000�00000000506�11671051007�0023544�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/combining-class-byname��������������������������������������0000664�0000000�0000000�00000001716�11671051007�0024253�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.4], [unictype/combining-class-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS_BYNAME lib_SOURCES += unictype/combiningclass_byname.c endif unictype/combiningclass_byname.h: unictype/combiningclass_byname.gperf $(GPERF) -m 10 $(srcdir)/unictype/combiningclass_byname.gperf > $(srcdir)/unictype/combiningclass_byname.h-t mv $(srcdir)/unictype/combiningclass_byname.h-t $(srcdir)/unictype/combiningclass_byname.h BUILT_SOURCES += unictype/combiningclass_byname.h MOSTLYCLEANFILES += unictype/combiningclass_byname.h-t MAINTAINERCLEANFILES += unictype/combiningclass_byname.h EXTRA_DIST += unictype/combiningclass_byname.h Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������gnulib-20111211-stable/modules/unictype/combining-class-byname-tests��������������������������������0000664�0000000�0000000�00000000504�11671051007�0025405�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-20111211-stable/modules/unictype/combining-class-longname������������������������������������0000664�0000000�0000000�00000000640�11671051007�0024573�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.4], [unictype/combining-class-longname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS_LONGNAME lib_SOURCES += unictype/combiningclass_longname.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/combining-class-longname-tests������������������������������0000664�0000000�0000000�00000000520�11671051007�0025730�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-20111211-stable/modules/unictype/combining-class-name����������������������������������������0000664�0000000�0000000�00000000620�11671051007�0023711�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.4], [unictype/combining-class-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS_NAME lib_SOURCES += unictype/combiningclass_name.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/combining-class-name-tests����������������������������������0000664�0000000�0000000�00000000470�11671051007�0025054�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-20111211-stable/modules/unictype/combining-class-tests���������������������������������������0000664�0000000�0000000�00000000432�11671051007�0024134�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-20111211-stable/modules/unictype/ctype-alnum�������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0022164�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.4], [unictype/ctype-alnum]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM lib_SOURCES += unictype/ctype_alnum.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unictype/ctype-alnum-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023324�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-20111211-stable/modules/unictype/ctype-alpha�������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0022135�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.4], [unictype/ctype-alpha]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA lib_SOURCES += unictype/ctype_alpha.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unictype/ctype-alpha-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023275�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-20111211-stable/modules/unictype/ctype-blank�������������������������������������������������0000664�0000000�0000000�00000000736�11671051007�0022144�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], [unictype/ctype-blank]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK lib_SOURCES += unictype/ctype_blank.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������gnulib-20111211-stable/modules/unictype/ctype-blank-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023277�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-20111211-stable/modules/unictype/ctype-cntrl�������������������������������������������������0000664�0000000�0000000�00000000736�11671051007�0022177�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], [unictype/ctype-cntrl]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL lib_SOURCES += unictype/ctype_cntrl.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������gnulib-20111211-stable/modules/unictype/ctype-cntrl-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023332�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-20111211-stable/modules/unictype/ctype-digit�������������������������������������������������0000664�0000000�0000000�00000000736�11671051007�0022155�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], [unictype/ctype-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT lib_SOURCES += unictype/ctype_digit.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������gnulib-20111211-stable/modules/unictype/ctype-digit-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023310�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-20111211-stable/modules/unictype/ctype-graph�������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0022151�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.4], [unictype/ctype-graph]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH lib_SOURCES += unictype/ctype_graph.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unictype/ctype-graph-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023311�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-20111211-stable/modules/unictype/ctype-lower�������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0022200�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.4], [unictype/ctype-lower]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER lib_SOURCES += unictype/ctype_lower.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unictype/ctype-lower-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023340�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-20111211-stable/modules/unictype/ctype-print�������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0022204�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.4], [unictype/ctype-print]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT lib_SOURCES += unictype/ctype_print.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unictype/ctype-print-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023344�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-20111211-stable/modules/unictype/ctype-punct�������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0022201�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.4], [unictype/ctype-punct]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT lib_SOURCES += unictype/ctype_punct.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unictype/ctype-punct-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023341�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-20111211-stable/modules/unictype/ctype-space�������������������������������������������������0000664�0000000�0000000�00000000736�11671051007�0022150�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], [unictype/ctype-space]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE lib_SOURCES += unictype/ctype_space.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������gnulib-20111211-stable/modules/unictype/ctype-space-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023303�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-20111211-stable/modules/unictype/ctype-upper�������������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0022203�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.4], [unictype/ctype-upper]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER lib_SOURCES += unictype/ctype_upper.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unictype/ctype-upper-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023343�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-20111211-stable/modules/unictype/ctype-xdigit������������������������������������������������0000664�0000000�0000000�00000000745�11671051007�0022345�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], [unictype/ctype-xdigit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT lib_SOURCES += unictype/ctype_xdigit.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������gnulib-20111211-stable/modules/unictype/ctype-xdigit-tests������������������������������������������0000664�0000000�0000000�00000000532�11671051007�0023477�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-20111211-stable/modules/unictype/decimal-digit�����������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0022427�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.4], [unictype/decimal-digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_DECIMAL_DIGIT lib_SOURCES += unictype/decdigit.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/decimal-digit-tests�����������������������������������������0000664�0000000�0000000�00000000425�11671051007�0023562�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-20111211-stable/modules/unictype/digit�������������������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0021026�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.4], [unictype/digit]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_DIGIT lib_SOURCES += unictype/digit.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/digit-tests�������������������������������������������������0000664�0000000�0000000�00000000400�11671051007�0022157�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-20111211-stable/modules/unictype/joininggroup-all��������������������������������������������0000664�0000000�0000000�00000000430�11671051007�0023202�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joininggroup-byname�����������������������������������������0000664�0000000�0000000�00000001651�11671051007�0023713�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.4], [unictype/joininggroup-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGGROUP_BYNAME lib_SOURCES += unictype/joininggroup_byname.c endif unictype/joininggroup_byname.h: unictype/joininggroup_byname.gperf $(GPERF) -m 10 $(srcdir)/unictype/joininggroup_byname.gperf > $(srcdir)/unictype/joininggroup_byname.h-t mv $(srcdir)/unictype/joininggroup_byname.h-t $(srcdir)/unictype/joininggroup_byname.h BUILT_SOURCES += unictype/joininggroup_byname.h MOSTLYCLEANFILES += unictype/joininggroup_byname.h-t MAINTAINERCLEANFILES += unictype/joininggroup_byname.h EXTRA_DIST += unictype/joininggroup_byname.h Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joininggroup-byname-tests�����������������������������������0000664�0000000�0000000�00000000470�11671051007�0025051�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-20111211-stable/modules/unictype/joininggroup-name�������������������������������������������0000664�0000000�0000000�00000000642�11671051007�0023357�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.4], [unictype/joininggroup-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGGROUP_NAME lib_SOURCES += unictype/joininggroup_name.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joininggroup-name-tests�������������������������������������0000664�0000000�0000000�00000000454�11671051007�0024520�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-20111211-stable/modules/unictype/joininggroup-of���������������������������������������������0000664�0000000�0000000�00000000637�11671051007�0023047�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.4], [unictype/joininggroup-of]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGGROUP_OF lib_SOURCES += unictype/joininggroup_of.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joininggroup-of-tests���������������������������������������0000664�0000000�0000000�00000000506�11671051007�0024202�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-20111211-stable/modules/unictype/joiningtype-all���������������������������������������������0000664�0000000�0000000�00000000462�11671051007�0023034�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joiningtype-byname������������������������������������������0000664�0000000�0000000�00000001631�11671051007�0023536�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.4], [unictype/joiningtype-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGTYPE_BYNAME lib_SOURCES += unictype/joiningtype_byname.c endif unictype/joiningtype_byname.h: unictype/joiningtype_byname.gperf $(GPERF) -m 10 $(srcdir)/unictype/joiningtype_byname.gperf > $(srcdir)/unictype/joiningtype_byname.h-t mv $(srcdir)/unictype/joiningtype_byname.h-t $(srcdir)/unictype/joiningtype_byname.h BUILT_SOURCES += unictype/joiningtype_byname.h MOSTLYCLEANFILES += unictype/joiningtype_byname.h-t MAINTAINERCLEANFILES += unictype/joiningtype_byname.h EXTRA_DIST += unictype/joiningtype_byname.h Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joiningtype-byname-tests������������������������������������0000664�0000000�0000000�00000000462�11671051007�0024677�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-20111211-stable/modules/unictype/joiningtype-longname����������������������������������������0000664�0000000�0000000�00000000614�11671051007�0024063�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.4], [unictype/joiningtype-longname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGTYPE_LONGNAME lib_SOURCES += unictype/joiningtype_longname.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joiningtype-longname-tests����������������������������������0000664�0000000�0000000�00000000476�11671051007�0025231�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-20111211-stable/modules/unictype/joiningtype-name��������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0023210�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.4], [unictype/joiningtype-name]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGTYPE_NAME lib_SOURCES += unictype/joiningtype_name.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joiningtype-name-tests��������������������������������������0000664�0000000�0000000�00000000446�11671051007�0024346�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-20111211-stable/modules/unictype/joiningtype-of����������������������������������������������0000664�0000000�0000000�00000000675�11671051007�0022676�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.4], [unictype/joiningtype-of]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_JOININGTYPE_OF lib_SOURCES += unictype/joiningtype_of.c endif Include: "unictype.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/joiningtype-of-tests����������������������������������������0000664�0000000�0000000�00000000477�11671051007�0024036�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-20111211-stable/modules/unictype/mirror������������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021243�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], [unictype/mirror]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_MIRROR lib_SOURCES += unictype/mirror.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/mirror-tests������������������������������������������������0000664�0000000�0000000�00000000352�11671051007�0022377�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-20111211-stable/modules/unictype/numeric�����������������������������������������������������0000664�0000000�0000000�00000000547�11671051007�0021375�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.4], [unictype/numeric]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_NUMERIC lib_SOURCES += unictype/numeric.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/numeric-tests�����������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0022530�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-20111211-stable/modules/unictype/property-all������������������������������������������������0000664�0000000�0000000�00000006116�11671051007�0022363�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-alphabetic�����������������������������������������0000664�0000000�0000000�00000000715�11671051007�0023706�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.4], [unictype/property-alphabetic]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_ALPHABETIC lib_SOURCES += unictype/pr_alphabetic.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/unictype/property-alphabetic-tests�����������������������������������0000664�0000000�0000000�00000000540�11671051007�0025042�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-20111211-stable/modules/unictype/property-ascii-hex-digit������������������������������������0000664�0000000�0000000�00000000751�11671051007�0024562�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], [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: LGPL Maintainer: Bruno Haible �����������������������gnulib-20111211-stable/modules/unictype/property-ascii-hex-digit-tests������������������������������0000664�0000000�0000000�00000000576�11671051007�0025727�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-20111211-stable/modules/unictype/property-bidi-arabic-digit����������������������������������0000664�0000000�0000000�00000001015�11671051007�0025030�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-arabic-digit-tests����������������������������0000664�0000000�0000000�00000000612�11671051007�0026172�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-20111211-stable/modules/unictype/property-bidi-arabic-right-to-left��������������������������0000664�0000000�0000000�00000001075�11671051007�0026423�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-arabic-right-to-left-tests��������������������0000664�0000000�0000000�00000000672�11671051007�0027565�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-20111211-stable/modules/unictype/property-bidi-block-separator�������������������������������0000664�0000000�0000000�00000001035�11671051007�0025603�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], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-block-separator-tests�������������������������0000664�0000000�0000000�00000000634�11671051007�0026747�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-20111211-stable/modules/unictype/property-bidi-boundary-neutral������������������������������0000664�0000000�0000000�00000001045�11671051007�0026007�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-boundary-neutral-tests������������������������0000664�0000000�0000000�00000000642�11671051007�0027151�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-20111211-stable/modules/unictype/property-bidi-common-separator������������������������������0000664�0000000�0000000�00000001043�11671051007�0026000�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], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-common-separator-tests������������������������0000664�0000000�0000000�00000000642�11671051007�0027144�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-20111211-stable/modules/unictype/property-bidi-control���������������������������������������0000664�0000000�0000000�00000000755�11671051007�0024203�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], [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: LGPL Maintainer: Bruno Haible �������������������gnulib-20111211-stable/modules/unictype/property-bidi-control-tests���������������������������������0000664�0000000�0000000�00000000554�11671051007�0025340�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-20111211-stable/modules/unictype/property-bidi-embedding-or-override�������������������������0000664�0000000�0000000�00000001101�11671051007�0026656�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], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-embedding-or-override-tests�������������������0000664�0000000�0000000�00000000700�11671051007�0030022�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-20111211-stable/modules/unictype/property-bidi-eur-num-separator�����������������������������0000664�0000000�0000000�00000001051�11671051007�0026077�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], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-eur-num-separator-tests�����������������������0000664�0000000�0000000�00000000650�11671051007�0027243�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-20111211-stable/modules/unictype/property-bidi-eur-num-terminator����������������������������0000664�0000000�0000000�00000001061�11671051007�0026264�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-eur-num-terminator-tests����������������������0000664�0000000�0000000�00000000656�11671051007�0027435�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-20111211-stable/modules/unictype/property-bidi-european-digit��������������������������������0000664�0000000�0000000�00000001031�11671051007�0025423�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-european-digit-tests��������������������������0000664�0000000�0000000�00000000626�11671051007�0026574�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-20111211-stable/modules/unictype/property-bidi-hebrew-right-to-left��������������������������0000664�0000000�0000000�00000001075�11671051007�0026456�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-hebrew-right-to-left-tests��������������������0000664�0000000�0000000�00000000672�11671051007�0027620�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-20111211-stable/modules/unictype/property-bidi-left-to-right���������������������������������0000664�0000000�0000000�00000001023�11671051007�0025175�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-left-to-right-tests���������������������������0000664�0000000�0000000�00000000620�11671051007�0026337�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-20111211-stable/modules/unictype/property-bidi-non-spacing-mark������������������������������0000664�0000000�0000000�00000001045�11671051007�0025660�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-non-spacing-mark-tests������������������������0000664�0000000�0000000�00000000642�11671051007�0027022�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-20111211-stable/modules/unictype/property-bidi-other-neutral���������������������������������0000664�0000000�0000000�00000001023�11671051007�0025301�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.4], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-other-neutral-tests���������������������������0000664�0000000�0000000�00000000620�11671051007�0026443�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-20111211-stable/modules/unictype/property-bidi-pdf�������������������������������������������0000664�0000000�0000000�00000000725�11671051007�0023271�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-pdf-tests�������������������������������������0000664�0000000�0000000�00000000524�11671051007�0024426�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-20111211-stable/modules/unictype/property-bidi-segment-separator�����������������������������0000664�0000000�0000000�00000001051�11671051007�0026151�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], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-bidi-segment-separator-tests�����������������������0000664�0000000�0000000�00000000650�11671051007�0027315�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-20111211-stable/modules/unictype/property-bidi-whitespace������������������������������������0000664�0000000�0000000�00000000777�11671051007�0024663�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], [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: LGPL Maintainer: Bruno Haible �gnulib-20111211-stable/modules/unictype/property-bidi-whitespace-tests������������������������������0000664�0000000�0000000�00000000576�11671051007�0026020�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-20111211-stable/modules/unictype/property-byname���������������������������������������������0000664�0000000�0000000�00000007203�11671051007�0023064�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.4], [unictype/property-byname]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_BYNAME lib_SOURCES += unictype/pr_byname.c endif unictype/pr_byname.h: unictype/pr_byname.gperf $(GPERF) -m 10 $(srcdir)/unictype/pr_byname.gperf > $(srcdir)/unictype/pr_byname.h-t mv $(srcdir)/unictype/pr_byname.h-t $(srcdir)/unictype/pr_byname.h BUILT_SOURCES += unictype/pr_byname.h MOSTLYCLEANFILES += unictype/pr_byname.h-t MAINTAINERCLEANFILES += unictype/pr_byname.h EXTRA_DIST += unictype/pr_byname.h Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-byname-tests���������������������������������������0000664�0000000�0000000�00000000457�11671051007�0024230�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-20111211-stable/modules/unictype/property-case-ignorable�������������������������������������0000664�0000000�0000000�00000000744�11671051007�0024467�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.4], [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: LGPL Maintainer: Bruno Haible ����������������������������gnulib-20111211-stable/modules/unictype/property-case-ignorable-tests�������������������������������0000664�0000000�0000000�00000000570�11671051007�0025624�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-20111211-stable/modules/unictype/property-cased����������������������������������������������0000664�0000000�0000000�00000000656�11671051007�0022675�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.4], [unictype/property-cased]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_CASED lib_SOURCES += unictype/pr_cased.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-cased-tests����������������������������������������0000664�0000000�0000000�00000000502�11671051007�0024023�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-20111211-stable/modules/unictype/property-changes-when-casefolded����������������������������0000664�0000000�0000000�00000001025�11671051007�0026243�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-changes-when-casefolded-tests����������������������0000664�0000000�0000000�00000000656�11671051007�0027414�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-20111211-stable/modules/unictype/property-changes-when-casemapped����������������������������0000664�0000000�0000000�00000001025�11671051007�0026254�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-changes-when-casemapped-tests����������������������0000664�0000000�0000000�00000000656�11671051007�0027425�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-20111211-stable/modules/unictype/property-changes-when-lowercased����������������������������0000664�0000000�0000000�00000001025�11671051007�0026302�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-changes-when-lowercased-tests����������������������0000664�0000000�0000000�00000000656�11671051007�0027453�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-20111211-stable/modules/unictype/property-changes-when-titlecased����������������������������0000664�0000000�0000000�00000001025�11671051007�0026273�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-changes-when-titlecased-tests����������������������0000664�0000000�0000000�00000000656�11671051007�0027444�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-20111211-stable/modules/unictype/property-changes-when-uppercased����������������������������0000664�0000000�0000000�00000001025�11671051007�0026305�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-changes-when-uppercased-tests����������������������0000664�0000000�0000000�00000000656�11671051007�0027456�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-20111211-stable/modules/unictype/property-combining������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0023560�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.4], [unictype/property-combining]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_COMBINING lib_SOURCES += unictype/pr_combining.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-combining-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024714�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-20111211-stable/modules/unictype/property-composite������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0023615�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.4], [unictype/property-composite]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_COMPOSITE lib_SOURCES += unictype/pr_composite.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-composite-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024751�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-20111211-stable/modules/unictype/property-currency-symbol������������������������������������0000664�0000000�0000000�00000001027�11671051007�0024744�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-currency-symbol-tests������������������������������0000664�0000000�0000000�00000000576�11671051007�0026114�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-20111211-stable/modules/unictype/property-dash�����������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0022530�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.4], [unictype/property-dash]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DASH lib_SOURCES += unictype/pr_dash.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-dash-tests�����������������������������������������0000664�0000000�0000000�00000000474�11671051007�0023673�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-20111211-stable/modules/unictype/property-decimal-digit��������������������������������������0000664�0000000�0000000�00000001013�11671051007�0024276�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-decimal-digit-tests��������������������������������0000664�0000000�0000000�00000000562�11671051007�0025446�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-20111211-stable/modules/unictype/property-default-ignorable-code-point�����������������������0000664�0000000�0000000�00000001067�11671051007�0027236�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-default-ignorable-code-point-tests�����������������0000664�0000000�0000000�00000000714�11671051007�0030374�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-20111211-stable/modules/unictype/property-deprecated�����������������������������������������0000664�0000000�0000000�00000000715�11671051007�0023712�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.4], [unictype/property-deprecated]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DEPRECATED lib_SOURCES += unictype/pr_deprecated.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/unictype/property-deprecated-tests�����������������������������������0000664�0000000�0000000�00000000540�11671051007�0025046�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-20111211-stable/modules/unictype/property-diacritic������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0023546�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.4], [unictype/property-diacritic]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DIACRITIC lib_SOURCES += unictype/pr_diacritic.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-diacritic-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024702�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-20111211-stable/modules/unictype/property-extender�������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0023423�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.4], [unictype/property-extender]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_EXTENDER lib_SOURCES += unictype/pr_extender.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-extender-tests�������������������������������������0000664�0000000�0000000�00000000524�11671051007�0024566�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-20111211-stable/modules/unictype/property-format-control�������������������������������������0000664�0000000�0000000�00000000745�11671051007�0024563�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������gnulib-20111211-stable/modules/unictype/property-format-control-tests�������������������������������0000664�0000000�0000000�00000000570�11671051007�0025717�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-20111211-stable/modules/unictype/property-grapheme-base��������������������������������������0000664�0000000�0000000�00000000737�11671051007�0024316�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������gnulib-20111211-stable/modules/unictype/property-grapheme-base-tests��������������������������������0000664�0000000�0000000�00000000562�11671051007�0025452�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-20111211-stable/modules/unictype/property-grapheme-extend������������������������������������0000664�0000000�0000000�00000000753�11671051007�0024671�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������gnulib-20111211-stable/modules/unictype/property-grapheme-extend-tests������������������������������0000664�0000000�0000000�00000000576�11671051007�0026034�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-20111211-stable/modules/unictype/property-grapheme-link��������������������������������������0000664�0000000�0000000�00000000737�11671051007�0024341�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������gnulib-20111211-stable/modules/unictype/property-grapheme-link-tests��������������������������������0000664�0000000�0000000�00000000562�11671051007�0025475�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-20111211-stable/modules/unictype/property-hex-digit������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0023473�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], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-hex-digit-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024631�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-20111211-stable/modules/unictype/property-hyphen���������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0023107�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], [unictype/property-hyphen]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_HYPHEN lib_SOURCES += unictype/pr_hyphen.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-hyphen-tests���������������������������������������0000664�0000000�0000000�00000000510�11671051007�0024236�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-20111211-stable/modules/unictype/property-id-continue����������������������������������������0000664�0000000�0000000�00000000723�11671051007�0024027�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������gnulib-20111211-stable/modules/unictype/property-id-continue-tests����������������������������������0000664�0000000�0000000�00000000546�11671051007�0025172�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-20111211-stable/modules/unictype/property-id-start�������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0023334�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-id-start-tests�������������������������������������0000664�0000000�0000000�00000000524�11671051007�0024477�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-20111211-stable/modules/unictype/property-ideographic����������������������������������������0000664�0000000�0000000�00000000723�11671051007�0024067�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.4], [unictype/property-ideographic]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_IDEOGRAPHIC lib_SOURCES += unictype/pr_ideographic.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������gnulib-20111211-stable/modules/unictype/property-ideographic-tests����������������������������������0000664�0000000�0000000�00000000546�11671051007�0025232�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-20111211-stable/modules/unictype/property-ids-binary-operator��������������������������������0000664�0000000�0000000�00000001001�11671051007�0025471�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-ids-binary-operator-tests��������������������������0000664�0000000�0000000�00000000626�11671051007�0026645�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-20111211-stable/modules/unictype/property-ids-trinary-operator�������������������������������0000664�0000000�0000000�00000001007�11671051007�0025703�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-ids-trinary-operator-tests�������������������������0000664�0000000�0000000�00000000634�11671051007�0027050�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-20111211-stable/modules/unictype/property-ignorable-control����������������������������������0000664�0000000�0000000�00000000767�11671051007�0025241�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.4], [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: LGPL Maintainer: Bruno Haible ���������gnulib-20111211-stable/modules/unictype/property-ignorable-control-tests����������������������������0000664�0000000�0000000�00000000612�11671051007�0026366�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-20111211-stable/modules/unictype/property-iso-control����������������������������������������0000664�0000000�0000000�00000000775�11671051007�0024070�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], [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: LGPL Maintainer: Bruno Haible ���gnulib-20111211-stable/modules/unictype/property-iso-control-tests����������������������������������0000664�0000000�0000000�00000000546�11671051007�0025224�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-20111211-stable/modules/unictype/property-join-control���������������������������������������0000664�0000000�0000000�00000000727�11671051007�0024232�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], [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: LGPL Maintainer: Bruno Haible �����������������������������������������gnulib-20111211-stable/modules/unictype/property-join-control-tests���������������������������������0000664�0000000�0000000�00000000554�11671051007�0025370�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-20111211-stable/modules/unictype/property-left-of-pair���������������������������������������0000664�0000000�0000000�00000000727�11671051007�0024102�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], [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: LGPL Maintainer: Bruno Haible �����������������������������������������gnulib-20111211-stable/modules/unictype/property-left-of-pair-tests���������������������������������0000664�0000000�0000000�00000000554�11671051007�0025240�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-20111211-stable/modules/unictype/property-line-separator�������������������������������������0000664�0000000�0000000�00000000743�11671051007�0024540�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], [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: LGPL Maintainer: Bruno Haible �����������������������������gnulib-20111211-stable/modules/unictype/property-line-separator-tests�������������������������������0000664�0000000�0000000�00000000570�11671051007�0025676�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-20111211-stable/modules/unictype/property-logical-order-exception����������������������������0000664�0000000�0000000�00000001033�11671051007�0026323�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-logical-order-exception-tests����������������������0000664�0000000�0000000�00000000656�11671051007�0027475�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-20111211-stable/modules/unictype/property-lowercase������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0023577�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.4], [unictype/property-lowercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_LOWERCASE lib_SOURCES += unictype/pr_lowercase.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-lowercase-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024733�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-20111211-stable/modules/unictype/property-math�����������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0022542�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.4], [unictype/property-math]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_MATH lib_SOURCES += unictype/pr_math.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-math-tests�����������������������������������������0000664�0000000�0000000�00000000474�11671051007�0023705�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-20111211-stable/modules/unictype/property-non-break������������������������������������������0000664�0000000�0000000�00000000705�11671051007�0023465�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], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-non-break-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024623�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-20111211-stable/modules/unictype/property-not-a-character������������������������������������0000664�0000000�0000000�00000000751�11671051007�0024562�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], [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: LGPL Maintainer: Bruno Haible �����������������������gnulib-20111211-stable/modules/unictype/property-not-a-character-tests������������������������������0000664�0000000�0000000�00000000576�11671051007�0025727�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-20111211-stable/modules/unictype/property-numeric��������������������������������������������0000664�0000000�0000000�00000000673�11671051007�0023257�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.4], [unictype/property-numeric]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_NUMERIC lib_SOURCES += unictype/pr_numeric.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-numeric-tests��������������������������������������0000664�0000000�0000000�00000000516�11671051007�0024413�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-20111211-stable/modules/unictype/property-other-alphabetic�����������������������������������0000664�0000000�0000000�00000000761�11671051007�0025026�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.4], [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: LGPL Maintainer: Bruno Haible ���������������gnulib-20111211-stable/modules/unictype/property-other-alphabetic-tests�����������������������������0000664�0000000�0000000�00000000604�11671051007�0026162�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-20111211-stable/modules/unictype/property-other-default-ignorable-code-point�����������������0000664�0000000�0000000�00000001133�11671051007�0030347�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-other-default-ignorable-code-point-tests�����������0000664�0000000�0000000�00000000760�11671051007�0031514�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-20111211-stable/modules/unictype/property-other-grapheme-extend������������������������������0000664�0000000�0000000�00000001015�11671051007�0026000�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-other-grapheme-extend-tests������������������������0000664�0000000�0000000�00000000642�11671051007�0027145�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-20111211-stable/modules/unictype/property-other-id-continue����������������������������������0000664�0000000�0000000�00000000767�11671051007�0025156�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.4], [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: LGPL Maintainer: Bruno Haible ���������gnulib-20111211-stable/modules/unictype/property-other-id-continue-tests����������������������������0000664�0000000�0000000�00000000612�11671051007�0026303�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-20111211-stable/modules/unictype/property-other-id-start�������������������������������������0000664�0000000�0000000�00000000743�11671051007�0024461�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], [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: LGPL Maintainer: Bruno Haible �����������������������������gnulib-20111211-stable/modules/unictype/property-other-id-start-tests�������������������������������0000664�0000000�0000000�00000000570�11671051007�0025617�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-20111211-stable/modules/unictype/property-other-lowercase������������������������������������0000664�0000000�0000000�00000000751�11671051007�0024715�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], [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: LGPL Maintainer: Bruno Haible �����������������������gnulib-20111211-stable/modules/unictype/property-other-lowercase-tests������������������������������0000664�0000000�0000000�00000000576�11671051007�0026062�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-20111211-stable/modules/unictype/property-other-math�����������������������������������������0000664�0000000�0000000�00000000715�11671051007�0023662�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/unictype/property-other-math-tests�����������������������������������0000664�0000000�0000000�00000000540�11671051007�0025016�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-20111211-stable/modules/unictype/property-other-uppercase������������������������������������0000664�0000000�0000000�00000000751�11671051007�0024720�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], [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: LGPL Maintainer: Bruno Haible �����������������������gnulib-20111211-stable/modules/unictype/property-other-uppercase-tests������������������������������0000664�0000000�0000000�00000000576�11671051007�0026065�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-20111211-stable/modules/unictype/property-paired-punctuation���������������������������������0000664�0000000�0000000�00000000773�11671051007�0025431�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], [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: LGPL Maintainer: Bruno Haible �����gnulib-20111211-stable/modules/unictype/property-paired-punctuation-tests���������������������������0000664�0000000�0000000�00000000620�11671051007�0026560�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-20111211-stable/modules/unictype/property-paragraph-separator��������������������������������0000664�0000000�0000000�00000001001�11671051007�0025542�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-paragraph-separator-tests��������������������������0000664�0000000�0000000�00000000626�11671051007�0026716�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-20111211-stable/modules/unictype/property-pattern-syntax�������������������������������������0000664�0000000�0000000�00000000743�11671051007�0024614�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], [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: LGPL Maintainer: Bruno Haible �����������������������������gnulib-20111211-stable/modules/unictype/property-pattern-syntax-tests�������������������������������0000664�0000000�0000000�00000000570�11671051007�0025752�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-20111211-stable/modules/unictype/property-pattern-white-space��������������������������������0000664�0000000�0000000�00000001001�11671051007�0025463�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-pattern-white-space-tests��������������������������0000664�0000000�0000000�00000000626�11671051007�0026637�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-20111211-stable/modules/unictype/property-private-use����������������������������������������0000664�0000000�0000000�00000000721�11671051007�0024053�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], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������gnulib-20111211-stable/modules/unictype/property-private-use-tests����������������������������������0000664�0000000�0000000�00000000546�11671051007�0025220�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-20111211-stable/modules/unictype/property-punctuation����������������������������������������0000664�0000000�0000000�00000000776�11671051007�0024172�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.4], [unictype/property-punctuation]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_PUNCTUATION lib_SOURCES += unictype/pr_punctuation.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ��gnulib-20111211-stable/modules/unictype/property-punctuation-tests����������������������������������0000664�0000000�0000000�00000000546�11671051007�0025325�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-20111211-stable/modules/unictype/property-quotation-mark�������������������������������������0000664�0000000�0000000�00000000743�11671051007�0024566�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], [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: LGPL Maintainer: Bruno Haible �����������������������������gnulib-20111211-stable/modules/unictype/property-quotation-mark-tests�������������������������������0000664�0000000�0000000�00000000570�11671051007�0025724�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-20111211-stable/modules/unictype/property-radical��������������������������������������������0000664�0000000�0000000�00000000671�11671051007�0023212�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], [unictype/property-radical]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_RADICAL lib_SOURCES += unictype/pr_radical.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-radical-tests��������������������������������������0000664�0000000�0000000�00000000516�11671051007�0024350�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-20111211-stable/modules/unictype/property-sentence-terminal����������������������������������0000664�0000000�0000000�00000000767�11671051007�0025236�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.4], [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: LGPL Maintainer: Bruno Haible ���������gnulib-20111211-stable/modules/unictype/property-sentence-terminal-tests����������������������������0000664�0000000�0000000�00000000612�11671051007�0026363�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-20111211-stable/modules/unictype/property-soft-dotted����������������������������������������0000664�0000000�0000000�00000000721�11671051007�0024043�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], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������gnulib-20111211-stable/modules/unictype/property-soft-dotted-tests����������������������������������0000664�0000000�0000000�00000000546�11671051007�0025210�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-20111211-stable/modules/unictype/property-space����������������������������������������������0000664�0000000�0000000�00000000731�11671051007�0022703�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], [unictype/property-space]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_SPACE lib_SOURCES += unictype/pr_space.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������gnulib-20111211-stable/modules/unictype/property-space-tests����������������������������������������0000664�0000000�0000000�00000000502�11671051007�0024037�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-20111211-stable/modules/unictype/property-terminal-punctuation�������������������������������0000664�0000000�0000000�00000001011�11671051007�0025762�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-terminal-punctuation-tests�������������������������0000664�0000000�0000000�00000000634�11671051007�0027134�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-20111211-stable/modules/unictype/property-test�����������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0022571�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], [unictype/property-test]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_TEST lib_SOURCES += unictype/pr_test.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-test-tests�����������������������������������������0000664�0000000�0000000�00000000414�11671051007�0023725�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-20111211-stable/modules/unictype/property-titlecase������������������������������������������0000664�0000000�0000000�00000000761�11671051007�0023570�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], [unictype/property-titlecase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_TITLECASE lib_SOURCES += unictype/pr_titlecase.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������gnulib-20111211-stable/modules/unictype/property-titlecase-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024724�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-20111211-stable/modules/unictype/property-unassigned-code-value������������������������������0000664�0000000�0000000�00000001017�11671051007�0025770�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-unassigned-code-value-tests������������������������0000664�0000000�0000000�00000000642�11671051007�0027133�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-20111211-stable/modules/unictype/property-unified-ideograph����������������������������������0000664�0000000�0000000�00000000767�11671051007�0025204�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.4], [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: LGPL Maintainer: Bruno Haible ���������gnulib-20111211-stable/modules/unictype/property-unified-ideograph-tests����������������������������0000664�0000000�0000000�00000000612�11671051007�0026331�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-20111211-stable/modules/unictype/property-uppercase������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0023602�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.4], [unictype/property-uppercase]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_UPPERCASE lib_SOURCES += unictype/pr_uppercase.c endif Include: "unictype.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-uppercase-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024736�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-20111211-stable/modules/unictype/property-variation-selector���������������������������������0000664�0000000�0000000�00000000773�11671051007�0025430�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], [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: LGPL Maintainer: Bruno Haible �����gnulib-20111211-stable/modules/unictype/property-variation-selector-tests���������������������������0000664�0000000�0000000�00000000620�11671051007�0026557�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-20111211-stable/modules/unictype/property-white-space����������������������������������������0000664�0000000�0000000�00000000721�11671051007�0024020�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], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������gnulib-20111211-stable/modules/unictype/property-white-space-tests����������������������������������0000664�0000000�0000000�00000000546�11671051007�0025165�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-20111211-stable/modules/unictype/property-xid-continue���������������������������������������0000664�0000000�0000000�00000000731�11671051007�0024216�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������gnulib-20111211-stable/modules/unictype/property-xid-continue-tests���������������������������������0000664�0000000�0000000�00000000554�11671051007�0025361�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-20111211-stable/modules/unictype/property-xid-start������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0023532�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������gnulib-20111211-stable/modules/unictype/property-xid-start-tests������������������������������������0000664�0000000�0000000�00000000532�11671051007�0024666�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-20111211-stable/modules/unictype/property-zero-width�����������������������������������������0000664�0000000�0000000�00000000715�11671051007�0023706�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/unictype/property-zero-width-tests�����������������������������������0000664�0000000�0000000�00000000540�11671051007�0025042�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-20111211-stable/modules/unictype/scripts�����������������������������������������������������0000664�0000000�0000000�00000001475�11671051007�0021423�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.4], [unictype/scripts]) Makefile.am: if LIBUNISTRING_COMPILE_UNICTYPE_SCRIPTS lib_SOURCES += unictype/scripts.c endif unictype/scripts_byname.h: unictype/scripts_byname.gperf $(GPERF) -m 10 $(srcdir)/unictype/scripts_byname.gperf > $(srcdir)/unictype/scripts_byname.h-t mv $(srcdir)/unictype/scripts_byname.h-t $(srcdir)/unictype/scripts_byname.h BUILT_SOURCES += unictype/scripts_byname.h MOSTLYCLEANFILES += unictype/scripts_byname.h-t MAINTAINERCLEANFILES += unictype/scripts_byname.h EXTRA_DIST += unictype/scripts_byname.h Include: "unictype.h" License: LGPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/scripts-all�������������������������������������������������0000664�0000000�0000000�00000000301�11671051007�0022154�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/scripts-tests�����������������������������������������������0000664�0000000�0000000�00000000360�11671051007�0022553�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-20111211-stable/modules/unictype/syntax-c-ident����������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022577�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������gnulib-20111211-stable/modules/unictype/syntax-c-ident-tests����������������������������������������0000664�0000000�0000000�00000000402�11671051007�0023730�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-20111211-stable/modules/unictype/syntax-c-whitespace�����������������������������������������0000664�0000000�0000000�00000000631�11671051007�0023625�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/syntax-c-whitespace-tests�����������������������������������0000664�0000000�0000000�00000000554�11671051007�0024771�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-20111211-stable/modules/unictype/syntax-java-ident�������������������������������������������0000664�0000000�0000000�00000000757�11671051007�0023304�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.4], [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: LGPL Maintainer: Bruno Haible �����������������gnulib-20111211-stable/modules/unictype/syntax-java-ident-tests�������������������������������������0000664�0000000�0000000�00000000424�11671051007�0024433�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-20111211-stable/modules/unictype/syntax-java-whitespace��������������������������������������0000664�0000000�0000000�00000000650�11671051007�0024325�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], [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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unictype/syntax-java-whitespace-tests��������������������������������0000664�0000000�0000000�00000000576�11671051007�0025474�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-20111211-stable/modules/unigbrk/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017603�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unigbrk/base���������������������������������������������������������0000664�0000000�0000000�00000001042�11671051007�0020435�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unigbrk/u16-grapheme-breaks������������������������������������������0000664�0000000�0000000�00000000761�11671051007�0023200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find grapheme cluster breaks in UTF-16 string. Files: lib/unigbrk/u16-grapheme-breaks.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u16-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u16-grapheme-breaks]) gl_LIBUNISTRING_MODULE([0.9.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ���������������gnulib-20111211-stable/modules/unigbrk/u16-grapheme-breaks-tests������������������������������������0000664�0000000�0000000�00000000447�11671051007�0024341�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-20111211-stable/modules/unigbrk/u16-grapheme-next��������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022713�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ������������������gnulib-20111211-stable/modules/unigbrk/u16-grapheme-next-tests��������������������������������������0000664�0000000�0000000�00000000433�11671051007�0024043�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-20111211-stable/modules/unigbrk/u16-grapheme-prev��������������������������������������������0000664�0000000�0000000�00000000760�11671051007�0022704�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ����������������gnulib-20111211-stable/modules/unigbrk/u16-grapheme-prev-tests��������������������������������������0000664�0000000�0000000�00000000433�11671051007�0024041�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-20111211-stable/modules/unigbrk/u32-grapheme-breaks������������������������������������������0000664�0000000�0000000�00000000761�11671051007�0023176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find grapheme cluster breaks in UTF-32 string. Files: lib/unigbrk/u32-grapheme-breaks.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u32-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u32-grapheme-breaks]) gl_LIBUNISTRING_MODULE([0.9.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ���������������gnulib-20111211-stable/modules/unigbrk/u32-grapheme-breaks-tests������������������������������������0000664�0000000�0000000�00000000447�11671051007�0024337�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-20111211-stable/modules/unigbrk/u32-grapheme-next��������������������������������������������0000664�0000000�0000000�00000000756�11671051007�0022711�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ������������������gnulib-20111211-stable/modules/unigbrk/u32-grapheme-next-tests��������������������������������������0000664�0000000�0000000�00000000433�11671051007�0024041�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-20111211-stable/modules/unigbrk/u32-grapheme-prev��������������������������������������������0000664�0000000�0000000�00000000760�11671051007�0022702�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ����������������gnulib-20111211-stable/modules/unigbrk/u32-grapheme-prev-tests��������������������������������������0000664�0000000�0000000�00000000433�11671051007�0024037�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-20111211-stable/modules/unigbrk/u8-grapheme-breaks�������������������������������������������0000664�0000000�0000000�00000000752�11671051007�0023121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Find grapheme cluster breaks in UTF-8 string. Files: lib/unigbrk/u8-grapheme-breaks.c tests/macros.h Depends-on: unigbrk/uc-is-grapheme-break unistr/u8-mbtouc configure.ac: gl_MODULE_INDICATOR([unigbrk/u8-grapheme-breaks]) gl_LIBUNISTRING_MODULE([0.9.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ����������������������gnulib-20111211-stable/modules/unigbrk/u8-grapheme-breaks-tests�������������������������������������0000664�0000000�0000000�00000000441�11671051007�0024254�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-20111211-stable/modules/unigbrk/u8-grapheme-next���������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0022634�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible �������������������������gnulib-20111211-stable/modules/unigbrk/u8-grapheme-next-tests���������������������������������������0000664�0000000�0000000�00000000425�11671051007�0023765�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-20111211-stable/modules/unigbrk/u8-grapheme-prev���������������������������������������������0000664�0000000�0000000�00000000751�11671051007�0022625�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible �����������������������gnulib-20111211-stable/modules/unigbrk/u8-grapheme-prev-tests���������������������������������������0000664�0000000�0000000�00000000425�11671051007�0023763�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-20111211-stable/modules/unigbrk/uc-gbrk-prop�������������������������������������������������0000664�0000000�0000000�00000000632�11671051007�0022037�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unigbrk/uc-gbrk-prop-tests�������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0023203�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-20111211-stable/modules/unigbrk/uc-is-grapheme-break�����������������������������������������0000664�0000000�0000000�00000000636�11671051007�0023423�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ��������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unigbrk/uc-is-grapheme-break-tests�����������������������������������0000664�0000000�0000000�00000000607�11671051007�0024561�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-20111211-stable/modules/unigbrk/ulc-grapheme-breaks������������������������������������������0000664�0000000�0000000�00000001014�11671051007�0023340�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.4], [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: LGPL Maintainer: Ben Pfaff, Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unigbrk/ulc-grapheme-breaks-tests������������������������������������0000664�0000000�0000000�00000000730�11671051007�0024504�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) $(LIBUNISTRING) @LIBICONV@ ����������������������������������������gnulib-20111211-stable/modules/unilbrk/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017610�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/base���������������������������������������������������������0000664�0000000�0000000�00000001017�11671051007�0020444�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], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/tables�������������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021011�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/u16-possible-linebreaks��������������������������������������0000664�0000000�0000000�00000000706�11671051007�0024104�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.4], [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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/u16-possible-linebreaks-tests��������������������������������0000664�0000000�0000000�00000000516�11671051007�0025243�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-20111211-stable/modules/unilbrk/u16-width-linebreaks�����������������������������������������0000664�0000000�0000000�00000000701�11671051007�0023376�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.4], [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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/u16-width-linebreaks-tests�����������������������������������0000664�0000000�0000000�00000000474�11671051007�0024545�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-20111211-stable/modules/unilbrk/u32-possible-linebreaks��������������������������������������0000664�0000000�0000000�00000000655�11671051007�0024105�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/u32-possible-linebreaks-tests��������������������������������0000664�0000000�0000000�00000000516�11671051007�0025241�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-20111211-stable/modules/unilbrk/u32-width-linebreaks�����������������������������������������0000664�0000000�0000000�00000000650�11671051007�0023377�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.4], [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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/u32-width-linebreaks-tests�����������������������������������0000664�0000000�0000000�00000000474�11671051007�0024543�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-20111211-stable/modules/unilbrk/u8-possible-linebreaks���������������������������������������0000664�0000000�0000000�00000000700�11671051007�0024017�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.4], [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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/u8-possible-linebreaks-tests���������������������������������0000664�0000000�0000000�00000000510�11671051007�0025156�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-20111211-stable/modules/unilbrk/u8-width-linebreaks������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0023326�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.4], [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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/u8-width-linebreaks-tests������������������������������������0000664�0000000�0000000�00000000466�11671051007�0024467�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-20111211-stable/modules/unilbrk/ulc-common���������������������������������������������������0000664�0000000�0000000�00000000427�11671051007�0021607�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/ulc-possible-linebreaks��������������������������������������0000664�0000000�0000000�00000000721�11671051007�0024251�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.4], [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: LGPL Maintainer: Bruno Haible �����������������������������������������������gnulib-20111211-stable/modules/unilbrk/ulc-possible-linebreaks-tests��������������������������������0000664�0000000�0000000�00000000532�11671051007�0025411�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-20111211-stable/modules/unilbrk/ulc-width-linebreaks�����������������������������������������0000664�0000000�0000000�00000000702�11671051007�0023547�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.4], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������gnulib-20111211-stable/modules/unilbrk/ulc-width-linebreaks-tests�����������������������������������0000664�0000000�0000000�00000000510�11671051007�0024704�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-20111211-stable/modules/uniname/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017576�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniname/base���������������������������������������������������������0000664�0000000�0000000�00000001014�11671051007�0020427�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], [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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniname/uniname������������������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0021161�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 memcmp configure.ac: gl_LIBUNISTRING_MODULE([0.9], [uniname/uniname]) Makefile.am: if LIBUNISTRING_COMPILE_UNINAME_UNINAME lib_SOURCES += uniname/uniname.c endif Include: "uniname.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniname/uniname-tests������������������������������������������������0000664�0000000�0000000�00000000515�11671051007�0022316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniname/test-uninames.sh tests/uniname/test-uninames.c tests/uniname/UnicodeDataNames.txt Depends-on: xalloc progname configure.ac: Makefile.am: TESTS += uniname/test-uninames.sh check_PROGRAMS += test-uninames test_uninames_SOURCES = uniname/test-uninames.c test_uninames_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017631�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/base���������������������������������������������������������0000664�0000000�0000000�00000001036�11671051007�0020466�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], [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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/canonical-decomposition��������������������������������������0000664�0000000�0000000�00000000662�11671051007�0024361�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.4], [uninorm/canonical-decomposition]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_CANONICAL_DECOMPOSITION lib_SOURCES += uninorm/canonical-decomposition.c endif Include: "uninorm.h" License: LGPLv2+ Maintainer: Bruno Haible ������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/canonical-decomposition-tests��������������������������������0000664�0000000�0000000�00000000516�11671051007�0025517�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-20111211-stable/modules/uninorm/compat-decomposition�����������������������������������������0000664�0000000�0000000�00000000532�11671051007�0023711�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/compat-decomposition-tests�����������������������������������0000664�0000000�0000000�00000000474�11671051007�0025056�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-20111211-stable/modules/uninorm/composition��������������������������������������������������0000664�0000000�0000000�00000001523�11671051007�0022120�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.4], [uninorm/composition]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_COMPOSITION lib_SOURCES += uninorm/composition.c endif uninorm/composition-table.h: $(srcdir)/uninorm/composition-table.gperf $(GPERF) -m 1 $(srcdir)/uninorm/composition-table.gperf > $(srcdir)/uninorm/composition-table.h-t mv $(srcdir)/uninorm/composition-table.h-t $(srcdir)/uninorm/composition-table.h BUILT_SOURCES += uninorm/composition-table.h MOSTLYCLEANFILES += uninorm/composition-table.h-t MAINTAINERCLEANFILES += uninorm/composition-table.h EXTRA_DIST += uninorm/composition-table.h Include: "uninorm.h" License: LGPLv2+ Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/composition-tests��������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0023257�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-20111211-stable/modules/uninorm/decompose-internal�������������������������������������������0000664�0000000�0000000�00000000476�11671051007�0023353�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/decomposing-form���������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0023030�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.4], [uninorm/decomposing-form]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_DECOMPOSING_FORM lib_SOURCES += uninorm/decomposing-form.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/decomposing-form-tests���������������������������������������0000664�0000000�0000000�00000000526�11671051007�0024167�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-20111211-stable/modules/uninorm/decomposition������������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0022437�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.4], [uninorm/decomposition]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_DECOMPOSITION lib_SOURCES += uninorm/decomposition.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/decomposition-table������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0023515�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: Bruno Haible �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/decomposition-tests������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0023566�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-20111211-stable/modules/uninorm/filter�������������������������������������������������������0000664�0000000�0000000�00000000703�11671051007�0021041�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.4], [uninorm/filter]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_FILTER lib_SOURCES += uninorm/uninorm-filter.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/filter-tests�������������������������������������������������0000664�0000000�0000000�00000000513�11671051007�0022200�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-20111211-stable/modules/uninorm/nfc����������������������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0020326�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.4], [uninorm/nfc]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_NFC lib_SOURCES += uninorm/nfc.c endif Include: "uninorm.h" License: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/nfc-tests����������������������������������������������������0000664�0000000�0000000�00000001550�11671051007�0021463�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 progname 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-20111211-stable/modules/uninorm/nfd����������������������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0020323�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.4], [uninorm/nfd]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_NFD lib_SOURCES += uninorm/nfd.c endif Include: "uninorm.h" License: LGPLv2+ Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/nfd-tests����������������������������������������������������0000664�0000000�0000000�00000001551�11671051007�0021465�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 progname 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-20111211-stable/modules/uninorm/nfkc���������������������������������������������������������0000664�0000000�0000000�00000000647�11671051007�0020504�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.4], [uninorm/nfkc]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_NFKC lib_SOURCES += uninorm/nfkc.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/nfkc-tests���������������������������������������������������0000664�0000000�0000000�00000001574�11671051007�0021644�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 progname 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-20111211-stable/modules/uninorm/nfkd���������������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0020500�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.4], [uninorm/nfkd]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_NFKD lib_SOURCES += uninorm/nfkd.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/nfkd-tests���������������������������������������������������0000664�0000000�0000000�00000001574�11671051007�0021645�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 progname 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-20111211-stable/modules/uninorm/u16-normalize������������������������������������������������0000664�0000000�0000000�00000001106�11671051007�0022163�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.4], [uninorm/u16-normalize]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U16_NORMALIZE lib_SOURCES += uninorm/u16-normalize.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u16-normcmp��������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0021643�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.4], [uninorm/u16-normcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U16_NORMCMP lib_SOURCES += uninorm/u16-normcmp.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u16-normcmp-tests��������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0023003�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-20111211-stable/modules/uninorm/u16-normcoll�������������������������������������������������0000664�0000000�0000000�00000000670�11671051007�0022015�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.4], [uninorm/u16-normcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U16_NORMCOLL lib_SOURCES += uninorm/u16-normcoll.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u16-normcoll-tests�������������������������������������������0000664�0000000�0000000�00000000505�11671051007�0023152�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-20111211-stable/modules/uninorm/u16-normxfrm�������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022043�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.4], [uninorm/u16-normxfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U16_NORMXFRM lib_SOURCES += uninorm/u16-normxfrm.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������gnulib-20111211-stable/modules/uninorm/u32-normalize������������������������������������������������0000664�0000000�0000000�00000001111�11671051007�0022155�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.4], [uninorm/u32-normalize]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U32_NORMALIZE lib_SOURCES += uninorm/u32-normalize.c endif Include: "uninorm.h" License: LGPLv2+ Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u32-normcmp��������������������������������������������������0000664�0000000�0000000�00000000661�11671051007�0021641�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.4], [uninorm/u32-normcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U32_NORMCMP lib_SOURCES += uninorm/u32-normcmp.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u32-normcmp-tests��������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0023001�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-20111211-stable/modules/uninorm/u32-normcoll�������������������������������������������������0000664�0000000�0000000�00000000670�11671051007�0022013�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.4], [uninorm/u32-normcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U32_NORMCOLL lib_SOURCES += uninorm/u32-normcoll.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u32-normcoll-tests�������������������������������������������0000664�0000000�0000000�00000000505�11671051007�0023150�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-20111211-stable/modules/uninorm/u32-normxfrm�������������������������������������������������0000664�0000000�0000000�00000000727�11671051007�0022041�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.4], [uninorm/u32-normxfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U32_NORMXFRM lib_SOURCES += uninorm/u32-normxfrm.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������gnulib-20111211-stable/modules/uninorm/u8-normalize�������������������������������������������������0000664�0000000�0000000�00000001075�11671051007�0022111�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.4], [uninorm/u8-normalize]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U8_NORMALIZE lib_SOURCES += uninorm/u8-normalize.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u8-normcmp���������������������������������������������������0000664�0000000�0000000�00000000652�11671051007�0021564�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.4], [uninorm/u8-normcmp]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U8_NORMCMP lib_SOURCES += uninorm/u8-normcmp.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u8-normcmp-tests���������������������������������������������0000664�0000000�0000000�00000000454�11671051007�0022724�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-20111211-stable/modules/uninorm/u8-normcoll��������������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0021737�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.4], [uninorm/u8-normcoll]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U8_NORMCOLL lib_SOURCES += uninorm/u8-normcoll.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������gnulib-20111211-stable/modules/uninorm/u8-normcoll-tests��������������������������������������������0000664�0000000�0000000�00000000476�11671051007�0023102�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-20111211-stable/modules/uninorm/u8-normxfrm��������������������������������������������������0000664�0000000�0000000�00000000720�11671051007�0021755�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.4], [uninorm/u8-normxfrm]) Makefile.am: if LIBUNISTRING_COMPILE_UNINORM_U8_NORMXFRM lib_SOURCES += uninorm/u8-normxfrm.c endif Include: "uninorm.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������gnulib-20111211-stable/modules/unistd���������������������������������������������������������������0000664�0000000�0000000�00000017474�11671051007�0017410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A GNU-like <unistd.h>. Files: m4/unistd_h.m4 lib/unistd.in.h Depends-on: include_next snippet/arg-nonnull snippet/c++defs snippet/warn-on-use ssize_t stddef configure.ac: gl_UNISTD_H Makefile.am: BUILT_SOURCES += unistd.h # 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/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/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_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_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_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/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_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_${gl_include_guard_prefix}_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' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|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_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|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_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_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_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_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_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_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|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_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_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|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_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-20111211-stable/modules/unistd-c++-tests�����������������������������������������������������0000664�0000000�0000000�00000000521�11671051007�0021077�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) endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistd-safer���������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0020472�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 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-20111211-stable/modules/unistd-safer-tests���������������������������������������������������0000664�0000000�0000000�00000000317�11671051007�0021632�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 msvc-nothrow stdbool configure.ac: Makefile.am: TESTS += test-dup-safer check_PROGRAMS += test-dup-safer �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistd-tests���������������������������������������������������������0000664�0000000�0000000�00000000220�11671051007�0020525�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-20111211-stable/modules/unistdio/������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020000�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/base��������������������������������������������������������0000664�0000000�0000000�00000001031�11671051007�0020630�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u-printf-args�����������������������������������������������0000664�0000000�0000000�00000000632�11671051007�0022422�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-asnprintf�����������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022342�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: LGPL Maintainer: Bruno Haible ���������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-asnprintf-tests�����������������������������������������0000664�0000000�0000000�00000000554�11671051007�0023504�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-20111211-stable/modules/unistdio/u16-asprintf������������������������������������������������0000664�0000000�0000000�00000000665�11671051007�0022171�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-printf-parse��������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0022753�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-snprintf������������������������������������������������0000664�0000000�0000000�00000000637�11671051007�0022205�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-sprintf�������������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022023�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-u16-asnprintf�������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0022761�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: LGPL Maintainer: Bruno Haible �������������������������gnulib-20111211-stable/modules/unistdio/u16-u16-asprintf��������������������������������������������0000664�0000000�0000000�00000000711�11671051007�0022572�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-u16-snprintf��������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0022615�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-u16-sprintf���������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0022433�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-u16-vasnprintf������������������������������������������0000664�0000000�0000000�00000001760�11671051007�0023143�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/longlong.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 isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno 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: LGPL Maintainer: Bruno Haible ����������������gnulib-20111211-stable/modules/unistdio/u16-u16-vasprintf�������������������������������������������0000664�0000000�0000000�00000000725�11671051007�0022765�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: LGPL Maintainer: Bruno Haible �������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-u16-vsnprintf�������������������������������������������0000664�0000000�0000000�00000000716�11671051007�0023002�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-u16-vsprintf��������������������������������������������0000664�0000000�0000000�00000000665�11671051007�0022627�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-vasnprintf����������������������������������������������0000664�0000000�0000000�00000001740�11671051007�0022530�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/longlong.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 isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno 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: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unistdio/u16-vasnprintf-tests����������������������������������������0000664�0000000�0000000�00000002120�11671051007�0023661�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) $(LIBUNISTRING) @LIBICONV@ test_u16_vasnprintf3_SOURCES = unistdio/test-u16-vasnprintf3.c test_u16_vasnprintf3_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-vasprintf�����������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0022346�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-vasprintf-tests�����������������������������������������0000664�0000000�0000000�00000000507�11671051007�0023512�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-20111211-stable/modules/unistdio/u16-vsnprintf�����������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0022372�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-vsnprintf-tests�����������������������������������������0000664�0000000�0000000�00000000541�11671051007�0023525�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 progname 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-20111211-stable/modules/unistdio/u16-vsprintf������������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0022210�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u16-vsprintf-tests������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0023350�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 progname 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-20111211-stable/modules/unistdio/u32-asnprintf�����������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022340�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: LGPL Maintainer: Bruno Haible ���������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-asnprintf-tests�����������������������������������������0000664�0000000�0000000�00000000554�11671051007�0023502�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-20111211-stable/modules/unistdio/u32-asprintf������������������������������������������������0000664�0000000�0000000�00000000665�11671051007�0022167�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-printf-parse��������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0022751�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-snprintf������������������������������������������������0000664�0000000�0000000�00000000637�11671051007�0022203�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-sprintf�������������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022021�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-u32-asnprintf�������������������������������������������0000664�0000000�0000000�00000000747�11671051007�0022755�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: LGPL Maintainer: Bruno Haible �������������������������gnulib-20111211-stable/modules/unistdio/u32-u32-asprintf��������������������������������������������0000664�0000000�0000000�00000000711�11671051007�0022566�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-u32-snprintf��������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0022611�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-u32-sprintf���������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0022427�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-u32-vasnprintf������������������������������������������0000664�0000000�0000000�00000001760�11671051007�0023137�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/longlong.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 isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno 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: LGPL Maintainer: Bruno Haible ����������������gnulib-20111211-stable/modules/unistdio/u32-u32-vasprintf�������������������������������������������0000664�0000000�0000000�00000000725�11671051007�0022761�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: LGPL Maintainer: Bruno Haible �������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-u32-vsnprintf�������������������������������������������0000664�0000000�0000000�00000000716�11671051007�0022776�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-u32-vsprintf��������������������������������������������0000664�0000000�0000000�00000000665�11671051007�0022623�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-vasnprintf����������������������������������������������0000664�0000000�0000000�00000001740�11671051007�0022526�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/longlong.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 isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno 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: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unistdio/u32-vasnprintf-tests����������������������������������������0000664�0000000�0000000�00000002120�11671051007�0023657�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) $(LIBUNISTRING) @LIBICONV@ test_u32_vasnprintf3_SOURCES = unistdio/test-u32-vasnprintf3.c test_u32_vasnprintf3_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-vasprintf�����������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0022344�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-vasprintf-tests�����������������������������������������0000664�0000000�0000000�00000000507�11671051007�0023510�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-20111211-stable/modules/unistdio/u32-vsnprintf�����������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0022370�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-vsnprintf-tests�����������������������������������������0000664�0000000�0000000�00000000541�11671051007�0023523�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 progname 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-20111211-stable/modules/unistdio/u32-vsprintf������������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0022206�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u32-vsprintf-tests������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0023346�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 progname 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-20111211-stable/modules/unistdio/u8-asnprintf������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0022264�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-asnprintf-tests������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0023424�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-20111211-stable/modules/unistdio/u8-asprintf�������������������������������������������������0000664�0000000�0000000�00000000657�11671051007�0022113�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-printf-parse���������������������������������������������0000664�0000000�0000000�00000000667�11671051007�0022700�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-snprintf�������������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0022120�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-sprintf��������������������������������������������������0000664�0000000�0000000�00000000607�11671051007�0021745�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-u8-asnprintf���������������������������������������������0000664�0000000�0000000�00000000734�11671051007�0022617�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: LGPL Maintainer: Bruno Haible ������������������������������������gnulib-20111211-stable/modules/unistdio/u8-u8-asprintf����������������������������������������������0000664�0000000�0000000�00000000676�11671051007�0022446�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-u8-snprintf����������������������������������������������0000664�0000000�0000000�00000000650�11671051007�0022453�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-u8-sprintf�����������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0022300�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-u8-vasnprintf��������������������������������������������0000664�0000000�0000000�00000001741�11671051007�0023004�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/longlong.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 isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno 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: LGPL Maintainer: Bruno Haible �������������������������������gnulib-20111211-stable/modules/unistdio/u8-u8-vasprintf���������������������������������������������0000664�0000000�0000000�00000000712�11671051007�0022623�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-u8-vsnprintf���������������������������������������������0000664�0000000�0000000�00000000702�11671051007�0022637�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-u8-vsprintf����������������������������������������������0000664�0000000�0000000�00000000652�11671051007�0022465�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-vasnprintf�����������������������������������������������0000664�0000000�0000000�00000001726�11671051007�0022455�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/longlong.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 isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno 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: LGPL Maintainer: Bruno Haible ������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-vasnprintf-tests�����������������������������������������0000664�0000000�0000000�00000002066�11671051007�0023613�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) $(LIBUNISTRING) @LIBICONV@ test_u8_vasnprintf3_SOURCES = unistdio/test-u8-vasnprintf3.c test_u8_vasnprintf3_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-vasprintf������������������������������������������������0000664�0000000�0000000�00000000673�11671051007�0022277�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-vasprintf-tests������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0023424�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-20111211-stable/modules/unistdio/u8-vsnprintf������������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0022313�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-vsnprintf-tests������������������������������������������0000664�0000000�0000000�00000000532�11671051007�0023446�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 progname 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-20111211-stable/modules/unistdio/u8-vsprintf�������������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0022132�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/u8-vsprintf-tests�������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0023271�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 progname 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-20111211-stable/modules/unistdio/ulc-asnprintf�����������������������������������������������0000664�0000000�0000000�00000000713�11671051007�0022511�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], [unistdio/ulc-asnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_ASNPRINTF lib_SOURCES += unistdio/ulc-asnprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-asnprintf-tests�����������������������������������������0000664�0000000�0000000�00000000554�11671051007�0023654�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@ ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-asprintf������������������������������������������������0000664�0000000�0000000�00000000655�11671051007�0022340�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], [unistdio/ulc-asprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_ASPRINTF lib_SOURCES += unistdio/ulc-asprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-fprintf�������������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0022152�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], [unistdio/ulc-fprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_FPRINTF lib_SOURCES += unistdio/ulc-fprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-printf-parse��������������������������������������������0000664�0000000�0000000�00000000701�11671051007�0023114�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-snprintf������������������������������������������������0000664�0000000�0000000�00000000630�11671051007�0022346�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], [unistdio/ulc-snprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_SNPRINTF lib_SOURCES += unistdio/ulc-snprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-sprintf�������������������������������������������������0000664�0000000�0000000�00000000605�11671051007�0022172�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], [unistdio/ulc-sprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_SPRINTF lib_SOURCES += unistdio/ulc-sprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vasnprintf����������������������������������������������0000664�0000000�0000000�00000001672�11671051007�0022704�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/longlong.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 mbsnlen isnand-nolibm isnanl-nolibm frexpl-nolibm printf-frexp printf-frexpl signbit fpucw nocrash printf-safe alloca-opt localcharset xsize errno memchr multiarch verify configure.ac: gl_PREREQ_VASNPRINTF_WITH_EXTRAS gl_LIBUNISTRING_MODULE([0.9], [unistdio/ulc-vasnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VASNPRINTF lib_SOURCES += unistdio/ulc-vasnprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vasnprintf-tests����������������������������������������0000664�0000000�0000000�00000002016�11671051007�0024035�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@ test_ulc_vasnprintf2_SOURCES = unistdio/test-ulc-vasnprintf2.c test_ulc_vasnprintf2_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ test_ulc_vasnprintf3_SOURCES = unistdio/test-ulc-vasnprintf3.c test_ulc_vasnprintf3_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vasprintf�����������������������������������������������0000664�0000000�0000000�00000000671�11671051007�0022524�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], [unistdio/ulc-vasprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VASPRINTF lib_SOURCES += unistdio/ulc-vasprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vasprintf-tests�����������������������������������������0000664�0000000�0000000�00000000507�11671051007�0023662�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@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vfprintf������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022344�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], [unistdio/ulc-vfprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VFPRINTF lib_SOURCES += unistdio/ulc-vfprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vsnprintf�����������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0022541�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], [unistdio/ulc-vsnprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VSNPRINTF lib_SOURCES += unistdio/ulc-vsnprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vsnprintf-tests�����������������������������������������0000664�0000000�0000000�00000000541�11671051007�0023675�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 progname 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@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vsprintf������������������������������������������������0000664�0000000�0000000�00000000631�11671051007�0022357�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], [unistdio/ulc-vsprintf]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTDIO_ULC_VSPRINTF lib_SOURCES += unistdio/ulc-vsprintf.c endif Include: "unistdio.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistdio/ulc-vsprintf-tests������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0023520�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 progname 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@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/��������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017466�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/base����������������������������������������������������������0000664�0000000�0000000�00000001074�11671051007�0020325�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 snippet/unused-parameter stdbool inline configure.ac: gl_LIBUNISTRING_LIBHEADER([0.9.2], [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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-check�����������������������������������������������������0000664�0000000�0000000�00000000471�11671051007�0021101�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-check-tests�����������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0022237�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-20111211-stable/modules/unistr/u16-chr�������������������������������������������������������0000664�0000000�0000000�00000000532�11671051007�0020576�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-chr-tests�������������������������������������������������0000664�0000000�0000000�00000000706�11671051007�0021741�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: 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-20111211-stable/modules/unistr/u16-cmp�������������������������������������������������������0000664�0000000�0000000�00000000476�11671051007�0020610�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-cmp-tests�������������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0021745�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-20111211-stable/modules/unistr/u16-cmp2������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0020664�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-cmp2-tests������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0022021�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-20111211-stable/modules/unistr/u16-cpy�������������������������������������������������������0000664�0000000�0000000�00000000514�11671051007�0020615�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-cpy-alloc�������������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0021715�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-cpy-alloc-tests�������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0023052�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-20111211-stable/modules/unistr/u16-cpy-tests�������������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0021753�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-20111211-stable/modules/unistr/u16-endswith��������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0021650�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-mblen�����������������������������������������������������0000664�0000000�0000000�00000000516�11671051007�0021121�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-mblen-tests�����������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0022257�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-20111211-stable/modules/unistr/u16-mbsnlen���������������������������������������������������0000664�0000000�0000000�00000000542�11671051007�0021461�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-mbsnlen-tests���������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0022616�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-20111211-stable/modules/unistr/u16-mbtouc����������������������������������������������������0000664�0000000�0000000�00000000657�11671051007�0021323�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-mbtouc-tests����������������������������������������������0000664�0000000�0000000�00000000435�11671051007�0022455�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-20111211-stable/modules/unistr/u16-mbtouc-unsafe���������������������������������������������0000664�0000000�0000000�00000000740�11671051007�0022573�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: LGPL Maintainer: Bruno Haible ��������������������������������gnulib-20111211-stable/modules/unistr/u16-mbtouc-unsafe-tests���������������������������������������0000664�0000000�0000000�00000000507�11671051007�0023734�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-20111211-stable/modules/unistr/u16-mbtoucr���������������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0021503�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-mbtoucr-tests���������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0022633�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-20111211-stable/modules/unistr/u16-move������������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0020767�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-move-tests������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0022126�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-20111211-stable/modules/unistr/u16-next������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0021002�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-next-tests������������������������������������������������0000664�0000000�0000000�00000000362�11671051007�0022141�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-20111211-stable/modules/unistr/u16-prev������������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0020775�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-prev-tests������������������������������������������������0000664�0000000�0000000�00000000362�11671051007�0022137�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-20111211-stable/modules/unistr/u16-set�������������������������������������������������������0000664�0000000�0000000�00000000503�11671051007�0020613�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-set-tests�������������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0021753�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-20111211-stable/modules/unistr/u16-startswith������������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0022244�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-stpcpy����������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0021343�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-stpcpy-tests����������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0022502�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-20111211-stable/modules/unistr/u16-stpncpy���������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0021521�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-stpncpy-tests���������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022666�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-20111211-stable/modules/unistr/u16-strcat����������������������������������������������������0000664�0000000�0000000�00000000554�11671051007�0021326�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strcat-tests����������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0022460�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-20111211-stable/modules/unistr/u16-strchr����������������������������������������������������0000664�0000000�0000000�00000000535�11671051007�0021332�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strchr-tests����������������������������������������������0000664�0000000�0000000�00000000733�11671051007�0022472�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-20111211-stable/modules/unistr/u16-strcmp����������������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0021325�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strcmp-tests����������������������������������������������0000664�0000000�0000000�00000000470�11671051007�0022473�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-20111211-stable/modules/unistr/u16-strcoll���������������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0021510�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strcoll-tests���������������������������������������������0000664�0000000�0000000�00000000511�11671051007�0022641�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-20111211-stable/modules/unistr/u16-strcpy����������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0021345�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strcpy-tests����������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0022504�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-20111211-stable/modules/unistr/u16-strcspn���������������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0021520�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strdup����������������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0021346�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strdup-tests����������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0022501�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-20111211-stable/modules/unistr/u16-strlen����������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0021331�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strlen-tests����������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0022477�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-20111211-stable/modules/unistr/u16-strmblen��������������������������������������������������0000664�0000000�0000000�00000000532�11671051007�0021650�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strmblen-tests��������������������������������������������0000664�0000000�0000000�00000000412�11671051007�0023005�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-20111211-stable/modules/unistr/u16-strmbtouc�������������������������������������������������0000664�0000000�0000000�00000000536�11671051007�0022050�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strmbtouc-tests�������������������������������������������0000664�0000000�0000000�00000000420�11671051007�0023200�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-20111211-stable/modules/unistr/u16-strncat���������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0021502�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strncat-tests���������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022644�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-20111211-stable/modules/unistr/u16-strncmp���������������������������������������������������0000664�0000000�0000000�00000000504�11671051007�0021507�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strncmp-tests���������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022646�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-20111211-stable/modules/unistr/u16-strncpy���������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021530�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strncpy-tests���������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022670�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-20111211-stable/modules/unistr/u16-strnlen���������������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0021515�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strnlen-tests���������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022653�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-20111211-stable/modules/unistr/u16-strpbrk���������������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0021516�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strrchr���������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0021511�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strspn����������������������������������������������������0000664�0000000�0000000�00000000663�11671051007�0021360�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strstr����������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0021366�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-strstr-tests����������������������������������������������0000664�0000000�0000000�00000000470�11671051007�0022524�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-20111211-stable/modules/unistr/u16-strtok����������������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0021355�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 configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-strtok]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U16_STRTOK lib_SOURCES += unistr/u16-strtok.c endif Include: "unistr.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-to-u32����������������������������������������������������0000664�0000000�0000000�00000000545�11671051007�0021057�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-to-u32-tests����������������������������������������������0000664�0000000�0000000�00000000415�11671051007�0022213�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-20111211-stable/modules/unistr/u16-to-u8�����������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0021000�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-to-u8-tests�����������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0022136�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-20111211-stable/modules/unistr/u16-uctomb����������������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0021315�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u16-uctomb-tests����������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0022461�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-20111211-stable/modules/unistr/u32-check�����������������������������������������������������0000664�0000000�0000000�00000000471�11671051007�0021077�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-check-tests�����������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0022235�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-20111211-stable/modules/unistr/u32-chr�������������������������������������������������������0000664�0000000�0000000�00000000510�11671051007�0020570�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-chr-tests�������������������������������������������������0000664�0000000�0000000�00000000645�11671051007�0021741�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: 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-20111211-stable/modules/unistr/u32-cmp�������������������������������������������������������0000664�0000000�0000000�00000000476�11671051007�0020606�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-cmp-tests�������������������������������������������������0000664�0000000�0000000�00000000626�11671051007�0021743�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-20111211-stable/modules/unistr/u32-cmp2������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0020662�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-cmp2-tests������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0022017�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-20111211-stable/modules/unistr/u32-cpy�������������������������������������������������������0000664�0000000�0000000�00000000517�11671051007�0020616�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-cpy-alloc�������������������������������������������������0000664�0000000�0000000�00000000567�11671051007�0021713�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-cpy-alloc-tests�������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0023050�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-20111211-stable/modules/unistr/u32-cpy-tests�������������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0021751�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-20111211-stable/modules/unistr/u32-endswith��������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0021646�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-mblen�����������������������������������������������������0000664�0000000�0000000�00000000516�11671051007�0021117�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-mblen-tests�����������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0022255�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-20111211-stable/modules/unistr/u32-mbsnlen���������������������������������������������������0000664�0000000�0000000�00000000517�11671051007�0021461�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-mbsnlen-tests���������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0022614�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-20111211-stable/modules/unistr/u32-mbtouc����������������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0021316�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-mbtouc-tests����������������������������������������������0000664�0000000�0000000�00000000435�11671051007�0022453�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-20111211-stable/modules/unistr/u32-mbtouc-unsafe���������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0022571�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: Bruno Haible �����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-mbtouc-unsafe-tests���������������������������������������0000664�0000000�0000000�00000000507�11671051007�0023732�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-20111211-stable/modules/unistr/u32-mbtoucr���������������������������������������������������0000664�0000000�0000000�00000000646�11671051007�0021501�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-mbtoucr-tests���������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0022631�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-20111211-stable/modules/unistr/u32-move������������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0020765�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-move-tests������������������������������������������������0000664�0000000�0000000�00000000413�11671051007�0022124�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-20111211-stable/modules/unistr/u32-next������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0021000�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-next-tests������������������������������������������������0000664�0000000�0000000�00000000362�11671051007�0022137�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-20111211-stable/modules/unistr/u32-prev������������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0020773�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-prev-tests������������������������������������������������0000664�0000000�0000000�00000000362�11671051007�0022135�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-20111211-stable/modules/unistr/u32-set�������������������������������������������������������0000664�0000000�0000000�00000000503�11671051007�0020611�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-set-tests�������������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0021751�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-20111211-stable/modules/unistr/u32-startswith������������������������������������������������0000664�0000000�0000000�00000000565�11671051007�0022242�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-stpcpy����������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0021341�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-stpcpy-tests����������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0022500�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-20111211-stable/modules/unistr/u32-stpncpy���������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0021517�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-stpncpy-tests���������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022664�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-20111211-stable/modules/unistr/u32-strcat����������������������������������������������������0000664�0000000�0000000�00000000554�11671051007�0021324�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strcat-tests����������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0022456�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-20111211-stable/modules/unistr/u32-strchr����������������������������������������������������0000664�0000000�0000000�00000000513�11671051007�0021324�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strchr-tests����������������������������������������������0000664�0000000�0000000�00000000672�11671051007�0022472�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-20111211-stable/modules/unistr/u32-strcmp����������������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0021323�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strcmp-tests����������������������������������������������0000664�0000000�0000000�00000000470�11671051007�0022471�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-20111211-stable/modules/unistr/u32-strcoll���������������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0021506�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strcoll-tests���������������������������������������������0000664�0000000�0000000�00000000511�11671051007�0022637�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-20111211-stable/modules/unistr/u32-strcpy����������������������������������������������������0000664�0000000�0000000�00000000522�11671051007�0021343�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strcpy-tests����������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0022502�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-20111211-stable/modules/unistr/u32-strcspn���������������������������������������������������0000664�0000000�0000000�00000000575�11671051007�0021523�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strdup����������������������������������������������������0000664�0000000�0000000�00000000544�11671051007�0021344�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strdup-tests����������������������������������������������0000664�0000000�0000000�00000000431�11671051007�0022477�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-20111211-stable/modules/unistr/u32-strlen����������������������������������������������������0000664�0000000�0000000�00000000541�11671051007�0021327�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strlen-tests����������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0022475�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-20111211-stable/modules/unistr/u32-strmblen��������������������������������������������������0000664�0000000�0000000�00000000532�11671051007�0021646�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strmblen-tests��������������������������������������������0000664�0000000�0000000�00000000412�11671051007�0023003�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-20111211-stable/modules/unistr/u32-strmbtouc�������������������������������������������������0000664�0000000�0000000�00000000536�11671051007�0022046�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strmbtouc-tests�������������������������������������������0000664�0000000�0000000�00000000420�11671051007�0023176�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-20111211-stable/modules/unistr/u32-strncat���������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0021500�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strncat-tests���������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022642�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-20111211-stable/modules/unistr/u32-strncmp���������������������������������������������������0000664�0000000�0000000�00000000504�11671051007�0021505�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strncmp-tests���������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0022644�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-20111211-stable/modules/unistr/u32-strncpy���������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021526�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strncpy-tests���������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022666�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-20111211-stable/modules/unistr/u32-strnlen���������������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0021513�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strnlen-tests���������������������������������������������0000664�0000000�0000000�00000000662�11671051007�0022651�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-20111211-stable/modules/unistr/u32-strpbrk���������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0021512�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strrchr���������������������������������������������������0000664�0000000�0000000�00000000517�11671051007�0021512�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strspn����������������������������������������������������0000664�0000000�0000000�00000000547�11671051007�0021357�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strstr����������������������������������������������������0000664�0000000�0000000�00000000670�11671051007�0021364�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-strstr-tests����������������������������������������������0000664�0000000�0000000�00000000470�11671051007�0022522�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-20111211-stable/modules/unistr/u32-strtok����������������������������������������������������0000664�0000000�0000000�00000000573�11671051007�0021353�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 configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-strtok]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U32_STRTOK lib_SOURCES += unistr/u32-strtok.c endif Include: "unistr.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-to-u16����������������������������������������������������0000664�0000000�0000000�00000000542�11671051007�0021054�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-to-u16-tests����������������������������������������������0000664�0000000�0000000�00000000415�11671051007�0022213�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-20111211-stable/modules/unistr/u32-to-u8�����������������������������������������������������0000664�0000000�0000000�00000000537�11671051007�0021001�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-to-u8-tests�����������������������������������������������0000664�0000000�0000000�00000000406�11671051007�0022134�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-20111211-stable/modules/unistr/u32-uctomb����������������������������������������������������0000664�0000000�0000000�00000000570�11671051007�0021313�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u32-uctomb-tests����������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0022457�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-20111211-stable/modules/unistr/u8-check������������������������������������������������������0000664�0000000�0000000�00000000467�11671051007�0021027�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-check-tests������������������������������������������������0000664�0000000�0000000�00000000362�11671051007�0022161�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-20111211-stable/modules/unistr/u8-chr��������������������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0020520�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-chr-tests��������������������������������������������������0000664�0000000�0000000�00000000676�11671051007�0021670�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: 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-20111211-stable/modules/unistr/u8-cmp��������������������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0020515�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-cmp-tests��������������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0021660�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-20111211-stable/modules/unistr/u8-cmp2�������������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0020606�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-cmp2-tests�������������������������������������������������0000664�0000000�0000000�00000000405�11671051007�0021743�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-20111211-stable/modules/unistr/u8-cpy��������������������������������������������������������0000664�0000000�0000000�00000000507�11671051007�0020540�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-cpy-alloc��������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0021631�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-cpy-alloc-tests��������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0022765�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-20111211-stable/modules/unistr/u8-cpy-tests��������������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0021704�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-20111211-stable/modules/unistr/u8-endswith���������������������������������������������������0000664�0000000�0000000�00000000605�11671051007�0021571�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-mblen������������������������������������������������������0000664�0000000�0000000�00000000514�11671051007�0021040�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-mblen-tests������������������������������������������������0000664�0000000�0000000�00000000362�11671051007�0022201�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-20111211-stable/modules/unistr/u8-mbsnlen����������������������������������������������������0000664�0000000�0000000�00000000557�11671051007�0021410�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-mbsnlen-tests����������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0022547�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-20111211-stable/modules/unistr/u8-mbtouc�����������������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0021241�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: Bruno Haible ������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-mbtouc-tests�����������������������������������������������0000664�0000000�0000000�00000000426�11671051007�0022376�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-20111211-stable/modules/unistr/u8-mbtouc-unsafe����������������������������������������������0000664�0000000�0000000�00000000735�11671051007�0022520�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: Bruno Haible �����������������������������������gnulib-20111211-stable/modules/unistr/u8-mbtouc-unsafe-tests����������������������������������������0000664�0000000�0000000�00000000500�11671051007�0023646�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-20111211-stable/modules/unistr/u8-mbtoucr����������������������������������������������������0000664�0000000�0000000�00000000643�11671051007�0021421�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: Bruno Haible ���������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-mbtoucr-tests����������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0022564�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-20111211-stable/modules/unistr/u8-move�������������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0020712�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-move-tests�������������������������������������������������0000664�0000000�0000000�00000000405�11671051007�0022050�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-20111211-stable/modules/unistr/u8-next�������������������������������������������������������0000664�0000000�0000000�00000000535�11671051007�0020724�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-next-tests�������������������������������������������������0000664�0000000�0000000�00000000354�11671051007�0022063�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-20111211-stable/modules/unistr/u8-prev�������������������������������������������������������0000664�0000000�0000000�00000000520�11671051007�0020714�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-prev-tests�������������������������������������������������0000664�0000000�0000000�00000000354�11671051007�0022061�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-20111211-stable/modules/unistr/u8-set��������������������������������������������������������0000664�0000000�0000000�00000000453�11671051007�0020540�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-set-tests��������������������������������������������������0000664�0000000�0000000�00000000376�11671051007�0021704�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-20111211-stable/modules/unistr/u8-startswith�������������������������������������������������0000664�0000000�0000000�00000000560�11671051007�0022160�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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-stpcpy�����������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0021270�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-stpcpy-tests�����������������������������������������������0000664�0000000�0000000�00000000423�11671051007�0022424�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-20111211-stable/modules/unistr/u8-stpncpy����������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0021444�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-stpncpy-tests����������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0022610�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-20111211-stable/modules/unistr/u8-strcat�����������������������������������������������������0000664�0000000�0000000�00000000477�11671051007�0021253�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strcat-tests�����������������������������������������������0000664�0000000�0000000�00000000423�11671051007�0022402�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-20111211-stable/modules/unistr/u8-strchr�����������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0021254�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strchr-tests�����������������������������������������������0000664�0000000�0000000�00000000723�11671051007�0022412�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-20111211-stable/modules/unistr/u8-strcmp�����������������������������������������������������0000664�0000000�0000000�00000000475�11671051007�0021261�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strcmp-tests�����������������������������������������������0000664�0000000�0000000�00000000461�11671051007�0022414�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-20111211-stable/modules/unistr/u8-strcoll����������������������������������������������������0000664�0000000�0000000�00000000700�11671051007�0021422�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strcoll-tests����������������������������������������������0000664�0000000�0000000�00000000502�11671051007�0022562�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-20111211-stable/modules/unistr/u8-strcpy�����������������������������������������������������0000664�0000000�0000000�00000000467�11671051007�0021276�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strcpy-tests�����������������������������������������������0000664�0000000�0000000�00000000423�11671051007�0022426�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-20111211-stable/modules/unistr/u8-strcspn����������������������������������������������������0000664�0000000�0000000�00000000641�11671051007�0021440�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strdup�����������������������������������������������������0000664�0000000�0000000�00000000574�11671051007�0021272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Copy UTF-8 string. Files: lib/unistr/u8-strdup.c lib/unistr/u-strdup.h Depends-on: unistr/base unistr/u8-strlen 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: LGPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strdup-tests�����������������������������������������������0000664�0000000�0000000�00000000423�11671051007�0022423�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-20111211-stable/modules/unistr/u8-strlen�����������������������������������������������������0000664�0000000�0000000�00000000511�11671051007�0021247�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strlen-tests�����������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0022412�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-20111211-stable/modules/unistr/u8-strmblen���������������������������������������������������0000664�0000000�0000000�00000000525�11671051007�0021573�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strmblen-tests���������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0022727�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-20111211-stable/modules/unistr/u8-strmbtouc��������������������������������������������������0000664�0000000�0000000�00000000531�11671051007�0021764�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strmbtouc-tests��������������������������������������������0000664�0000000�0000000�00000000412�11671051007�0023122�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-20111211-stable/modules/unistr/u8-strncat����������������������������������������������������0000664�0000000�0000000�00000000513�11671051007�0021420�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strncat-tests����������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0022566�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-20111211-stable/modules/unistr/u8-strncmp����������������������������������������������������0000664�0000000�0000000�00000000477�11671051007�0021441�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strncmp-tests����������������������������������������������0000664�0000000�0000000�00000000432�11671051007�0022570�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-20111211-stable/modules/unistr/u8-strncpy����������������������������������������������������0000664�0000000�0000000�00000000473�11671051007�0021451�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strncpy-tests����������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0022612�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-20111211-stable/modules/unistr/u8-strnlen����������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0021431�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strnlen-tests����������������������������������������������0000664�0000000�0000000�00000000654�11671051007�0022575�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-20111211-stable/modules/unistr/u8-strpbrk����������������������������������������������������0000664�0000000�0000000�00000000620�11671051007�0021430�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strrchr����������������������������������������������������0000664�0000000�0000000�00000000533�11671051007�0021433�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: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strspn�����������������������������������������������������0000664�0000000�0000000�00000000652�11671051007�0021277�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: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strstr�����������������������������������������������������0000664�0000000�0000000�00000000612�11671051007�0021303�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-strstr-tests�����������������������������������������������0000664�0000000�0000000�00000000462�11671051007�0022446�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-20111211-stable/modules/unistr/u8-strtok�����������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0021276�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 configure.ac: gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-strtok]) Makefile.am: if LIBUNISTRING_COMPILE_UNISTR_U8_STRTOK lib_SOURCES += unistr/u8-strtok.c endif Include: "unistr.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-to-u16�����������������������������������������������������0000664�0000000�0000000�00000000561�11671051007�0021000�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: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-to-u16-tests�����������������������������������������������0000664�0000000�0000000�00000000407�11671051007�0022137�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-20111211-stable/modules/unistr/u8-to-u32�����������������������������������������������������0000664�0000000�0000000�00000000542�11671051007�0020775�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-to-u32-tests�����������������������������������������������0000664�0000000�0000000�00000000407�11671051007�0022135�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-20111211-stable/modules/unistr/u8-uctomb�����������������������������������������������������0000664�0000000�0000000�00000000644�11671051007�0021240�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 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: Bruno Haible ��������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unistr/u8-uctomb-tests�����������������������������������������������0000664�0000000�0000000�00000000370�11671051007�0022374�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-20111211-stable/modules/unitypes�������������������������������������������������������������0000664�0000000�0000000�00000001027�11671051007�0017745�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], [unitypes.h]) 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017623�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/base���������������������������������������������������������0000664�0000000�0000000�00000001000�11671051007�0020447�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], [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: LGPL Maintainer: Bruno Haible gnulib-20111211-stable/modules/uniwbrk/table��������������������������������������������������������0000664�0000000�0000000�00000000334�11671051007�0020635�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/u16-wordbreaks�����������������������������������������������0000664�0000000�0000000�00000000674�11671051007�0022331�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.4], [uniwbrk/u16-wordbreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_U16_WORDBREAKS lib_SOURCES += uniwbrk/u16-wordbreaks.c endif Include: "uniwbrk.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/u16-wordbreaks-tests�����������������������������������������0000664�0000000�0000000�00000000430�11671051007�0023457�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-20111211-stable/modules/uniwbrk/u32-wordbreaks�����������������������������������������������0000664�0000000�0000000�00000000674�11671051007�0022327�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.4], [uniwbrk/u32-wordbreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_U32_WORDBREAKS lib_SOURCES += uniwbrk/u32-wordbreaks.c endif Include: "uniwbrk.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/u32-wordbreaks-tests�����������������������������������������0000664�0000000�0000000�00000000430�11671051007�0023455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/uniwbrk/test-u32-wordbreaks.c tests/macros.h Depends-on: configure.ac: Makefile.am: TESTS += test-u32-wordbreaks check_PROGRAMS += test-u32-wordbreaks test_u32_wordbreaks_SOURCES = uniwbrk/test-u32-wordbreaks.c test_u32_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/u8-wordbreaks������������������������������������������������0000664�0000000�0000000�00000000666�11671051007�0022253�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.4], [uniwbrk/u8-wordbreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_U8_WORDBREAKS lib_SOURCES += uniwbrk/u8-wordbreaks.c endif Include: "uniwbrk.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/u8-wordbreaks-tests������������������������������������������0000664�0000000�0000000�00000000422�11671051007�0023401�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-20111211-stable/modules/uniwbrk/ulc-wordbreaks�����������������������������������������������0000664�0000000�0000000�00000000657�11671051007�0022502�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.4], [uniwbrk/ulc-wordbreaks]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_ULC_WORDBREAKS lib_SOURCES += uniwbrk/ulc-wordbreaks.c endif Include: "uniwbrk.h" License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/ulc-wordbreaks-tests�����������������������������������������0000664�0000000�0000000�00000000666�11671051007�0023642�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) $(LIBUNISTRING) @LIBICONV@ ��������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwbrk/wordbreak-property�������������������������������������������0000664�0000000�0000000�00000000603�11671051007�0023407�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.4], [uniwbrk/wordbreak-property]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWBRK_WORDBREAK_PROPERTY lib_SOURCES += uniwbrk/wordbreak-property.c endif Include: "uniwbrk.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017775�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/base��������������������������������������������������������0000664�0000000�0000000�00000001045�11671051007�0020632�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], [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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/u16-strwidth������������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022203�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.4], [uniwidth/u16-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U16_STRWIDTH lib_SOURCES += uniwidth/u16-strwidth.c endif Include: "uniwidth.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/u16-strwidth-tests������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0023342�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-20111211-stable/modules/uniwidth/u16-width���������������������������������������������������0000664�0000000�0000000�00000000604�11671051007�0021450�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.4], [uniwidth/u16-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U16_WIDTH lib_SOURCES += uniwidth/u16-width.c endif Include: "uniwidth.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/u16-width-tests���������������������������������������������0000664�0000000�0000000�00000000374�11671051007�0022614�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-20111211-stable/modules/uniwidth/u32-strwidth������������������������������������������������0000664�0000000�0000000�00000000615�11671051007�0022201�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.4], [uniwidth/u32-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U32_STRWIDTH lib_SOURCES += uniwidth/u32-strwidth.c endif Include: "uniwidth.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/u32-strwidth-tests������������������������������������������0000664�0000000�0000000�00000000416�11671051007�0023340�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-20111211-stable/modules/uniwidth/u32-width���������������������������������������������������0000664�0000000�0000000�00000000553�11671051007�0021451�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.4], [uniwidth/u32-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U32_WIDTH lib_SOURCES += uniwidth/u32-width.c endif Include: "uniwidth.h" License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/u32-width-tests���������������������������������������������0000664�0000000�0000000�00000000374�11671051007�0022612�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-20111211-stable/modules/uniwidth/u8-strwidth�������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0022124�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.4], [uniwidth/u8-strwidth]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U8_STRWIDTH lib_SOURCES += uniwidth/u8-strwidth.c endif Include: "uniwidth.h" License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/u8-strwidth-tests�������������������������������������������0000664�0000000�0000000�00000000410�11671051007�0023255�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-20111211-stable/modules/uniwidth/u8-width����������������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0021401�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.4], [uniwidth/u8-width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_U8_WIDTH lib_SOURCES += uniwidth/u8-width.c endif Include: "uniwidth.h" License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/u8-width-tests����������������������������������������������0000664�0000000�0000000�00000000366�11671051007�0022536�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-20111211-stable/modules/uniwidth/width�������������������������������������������������������0000664�0000000�0000000�00000000551�11671051007�0021040�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.4], [uniwidth/width]) Makefile.am: if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH lib_SOURCES += uniwidth/width.c endif Include: "uniwidth.h" License: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/uniwidth/width-tests�������������������������������������������������0000664�0000000�0000000�00000000704�11671051007�0022200�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-20111211-stable/modules/unlink���������������������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0017367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: unlink() function: remove a file. Files: lib/unlink.c m4/unlink.m4 Depends-on: unistd dosname [test $REPLACE_UNLINK = 1] lstat [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-20111211-stable/modules/unlink-busy����������������������������������������������������������0000664�0000000�0000000�00000000314�11671051007�0020343�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-20111211-stable/modules/unlink-tests���������������������������������������������������������0000664�0000000�0000000�00000000324�11671051007�0020524�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-20111211-stable/modules/unlinkat�������������������������������������������������������������0000664�0000000�0000000�00000001776�11671051007�0017725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: unlinkat() function: Remove a file at a directory. Files: lib/unlinkat.c lib/at-func.c lib/openat-priv.h 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] fstatat [test $REPLACE_UNLINKAT = 1] at-internal [test $HAVE_UNLINKAT = 0] dosname [test $HAVE_UNLINKAT = 0] errno [test $HAVE_UNLINKAT = 0] fchdir [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-20111211-stable/modules/unlinkat-tests�������������������������������������������������������0000664�0000000�0000000�00000000427�11671051007�0021055�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 progname symlink unlinkdir configure.ac: Makefile.am: TESTS += test-unlinkat check_PROGRAMS += test-unlinkat test_unlinkat_LDADD = $(LDADD) @LIBINTL@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unlinkdir������������������������������������������������������������0000664�0000000�0000000�00000000442�11671051007�0020064�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 configure.ac: gl_UNLINKDIR Makefile.am: lib_SOURCES += unlinkdir.c Include: "unlinkdir.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unlocked-io����������������������������������������������������������0000664�0000000�0000000�00000000407�11671051007�0020277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Enable faster, non-thread-safe stdio functions if available. 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-20111211-stable/modules/unlockpt�������������������������������������������������������������0000664�0000000�0000000�00000000743�11671051007�0017730�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: Bruno Haible �����������������������������gnulib-20111211-stable/modules/unlockpt-tests�������������������������������������������������������0000664�0000000�0000000�00000000237�11671051007�0021066�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-20111211-stable/modules/unsetenv�������������������������������������������������������������0000664�0000000�0000000�00000001015�11671051007�0017731�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: LGPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/unsetenv-tests�������������������������������������������������������0000664�0000000�0000000�00000000246�11671051007�0021076�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-20111211-stable/modules/update-copyright�����������������������������������������������������0000664�0000000�0000000�00000000330�11671051007�0021351�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-20111211-stable/modules/update-copyright-tests�����������������������������������������������0000664�0000000�0000000�00000000340�11671051007�0022512�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-20111211-stable/modules/uptime���������������������������������������������������������������0000664�0000000�0000000�00000000270�11671051007�0017367�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-20111211-stable/modules/useless-if-before-free�����������������������������������������������0000664�0000000�0000000�00000000316�11671051007�0022323�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-20111211-stable/modules/userspec�������������������������������������������������������������0000664�0000000�0000000�00000000537�11671051007�0017723�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-20111211-stable/modules/userspec-tests�������������������������������������������������������0000664�0000000�0000000�00000000256�11671051007�0021061�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-20111211-stable/modules/usleep���������������������������������������������������������������0000664�0000000�0000000�00000000660�11671051007�0017364�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-20111211-stable/modules/usleep-tests���������������������������������������������������������0000664�0000000�0000000�00000000236�11671051007�0020523�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-20111211-stable/modules/utf16-ucs4�����������������������������������������������������������0000664�0000000�0000000�00000000254�11671051007�0017707�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/utf16-ucs4-unsafe����������������������������������������������������0000664�0000000�0000000�00000000263�11671051007�0021166�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/utf8-ucs4������������������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0017626�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/utf8-ucs4-unsafe�����������������������������������������������������0000664�0000000�0000000�00000000261�11671051007�0021105�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/utimecmp�������������������������������������������������������������0000664�0000000�0000000�00000000524�11671051007�0017711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: compare file time stamps Files: lib/utimecmp.h lib/utimecmp.c m4/utimecmp.m4 Depends-on: hash stat-time time utimens intprops lstat stdbool stdint verify configure.ac: gl_UTIMECMP Makefile.am: lib_SOURCES += utimecmp.c Include: "utimecmp.h" Link: $(LIB_CLOCK_GETTIME) License: GPL Maintainer: Paul Eggert, Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/utimens��������������������������������������������������������������0000664�0000000�0000000�00000000616�11671051007�0017554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Set file access and modification times. Files: lib/utimens.c lib/utimens.h m4/utimbuf.m4 m4/utimens.m4 m4/utimes.m4 Depends-on: errno fcntl-h fstat lstat gettime stat-time stdbool sys_stat sys_time time configure.ac: gl_UTIMENS Makefile.am: lib_SOURCES += utimens.c Include: "utimens.h" Link: $(LIB_CLOCK_GETTIME) License: GPL Maintainer: Paul Eggert, Jim Meyering, Eric Blake ������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/utimens-tests��������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0020714�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 ignore-value symlink timespec usleep utimecmp configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: TESTS += test-utimens check_PROGRAMS += test-utimens test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/utimensat������������������������������������������������������������0000664�0000000�0000000�00000002210�11671051007�0020071�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] dosname [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] 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] 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> Link: $(LIB_CLOCK_GETTIME) License: GPL Maintainer: Eric Blake ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/utimensat-tests������������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0021243�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 timespec usleep utimecmp configure.ac: AC_REQUIRE([AC_C_INLINE]) Makefile.am: TESTS += test-utimensat check_PROGRAMS += test-utimensat test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/va-args��������������������������������������������������������������0000664�0000000�0000000�00000000327�11671051007�0017427�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-20111211-stable/modules/valgrind-tests�������������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0021032�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-20111211-stable/modules/vararrays������������������������������������������������������������0000664�0000000�0000000�00000000247�11671051007�0020102�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-20111211-stable/modules/vasnprintf�����������������������������������������������������������0000664�0000000�0000000�00000001057�11671051007�0020262�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/longlong.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: alloca-opt float stdint xsize errno memchr verify wchar configure.ac: gl_FUNC_VASNPRINTF Makefile.am: Include: "vasnprintf.h" License: LGPLv2+ Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vasnprintf-posix�����������������������������������������������������0000664�0000000�0000000�00000001262�11671051007�0021420�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vasnprintf-posix-tests�����������������������������������������������0000664�0000000�0000000�00000001134�11671051007�0022556�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 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vasnprintf-tests�����������������������������������������������������0000664�0000000�0000000�00000000224�11671051007�0021415�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-20111211-stable/modules/vasprintf������������������������������������������������������������0000664�0000000�0000000�00000001401�11671051007�0020075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vsprintf with automatic memory allocation. Notice: If you are using GNU gettext version 0.16.1 or older, add the following options to XGETTEXT_OPTIONS in your po/Makevars: --flag=asprintf:2:c-format --flag=vasprintf:2:c-format 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vasprintf-posix������������������������������������������������������0000664�0000000�0000000�00000001241�11671051007�0021237�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 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vasprintf-posix-tests������������������������������������������������0000664�0000000�0000000�00000000407�11671051007�0022402�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-20111211-stable/modules/vasprintf-tests������������������������������������������������������0000664�0000000�0000000�00000000243�11671051007�0021240�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-20111211-stable/modules/vc-list-files��������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020554�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-20111211-stable/modules/vc-list-files-tests��������������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0021711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-vc-list-files-git.sh tests/test-vc-list-files-cvs.sh tests/init.sh Depends-on: 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-20111211-stable/modules/vdprintf�������������������������������������������������������������0000664�0000000�0000000�00000001006�11671051007�0017716�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] 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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vdprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000002414�11671051007�0021062�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vdprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000000443�11671051007�0022222�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-20111211-stable/modules/vdprintf-tests�������������������������������������������������������0000664�0000000�0000000�00000000237�11671051007�0021063�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-20111211-stable/modules/verify���������������������������������������������������������������0000664�0000000�0000000�00000000273�11671051007�0017373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Compile-time assert-like macros. Files: lib/verify.h Depends-on: configure.ac: Makefile.am: Include: "verify.h" License: LGPLv2+ Maintainer: Paul Eggert, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/verify-tests���������������������������������������������������������0000664�0000000�0000000�00000000316�11671051007�0020531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-verify.c tests/test-verify.sh tests/init.sh Depends-on: configure.ac: Makefile.am: TESTS_ENVIRONMENT += MAKE='$(MAKE)' TESTS += test-verify test-verify.sh check_PROGRAMS += test-verify ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/verror���������������������������������������������������������������0000664�0000000�0000000�00000001130�11671051007�0017377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: verror and verror_at_line functions: Error reporting with va_list. Notice: If you are using GNU gettext version 0.16.1 or older, add the following options to XGETTEXT_OPTIONS in your po/Makevars: --flag=verror:3:c-format --flag=verror_at_line:5:c-format Files: lib/verror.h lib/verror.c Depends-on: 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-20111211-stable/modules/version-etc����������������������������������������������������������0000664�0000000�0000000�00000000511�11671051007�0020320�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-20111211-stable/modules/version-etc-fsf������������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0021074�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-20111211-stable/modules/version-etc-tests����������������������������������������������������0000664�0000000�0000000�00000000332�11671051007�0021461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-version-etc.c tests/test-version-etc.sh Depends-on: progname version-etc-fsf Makefile.am: TESTS += test-version-etc.sh check_PROGRAMS += test-version-etc test_version_etc_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vfprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0021063�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 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]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vfprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000000443�11671051007�0022224�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-20111211-stable/modules/vfscanf��������������������������������������������������������������0000664�0000000�0000000�00000000336�11671051007�0017515�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]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vma-iter�������������������������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0017604�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 configure.ac: gl_FUNC_MMAP_ANON AC_CHECK_FUNCS_ONCE([mquery]) Makefile.am: lib_SOURCES += vma-iter.c Include: "vma-iter.h" License: GPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vprintf-posix��������������������������������������������������������0000664�0000000�0000000�00000001203�11671051007�0020711�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]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vprintf-posix-tests��������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0022060�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-20111211-stable/modules/vscanf���������������������������������������������������������������0000664�0000000�0000000�00000000342�11671051007�0017344�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]) Makefile.am: Include: <stdio.h> License: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vsnprintf������������������������������������������������������������0000664�0000000�0000000�00000000770�11671051007�0020122�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-20111211-stable/modules/vsnprintf-posix������������������������������������������������������0000664�0000000�0000000�00000002446�11671051007�0021264�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vsnprintf-posix-tests������������������������������������������������0000664�0000000�0000000�00000000712�11671051007�0022416�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-20111211-stable/modules/vsnprintf-tests������������������������������������������������������0000664�0000000�0000000�00000000243�11671051007�0021255�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-20111211-stable/modules/vsprintf-posix�������������������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0021100�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/vsprintf-posix-tests�������������������������������������������������0000664�0000000�0000000�00000000461�11671051007�0022241�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-20111211-stable/modules/wait-process���������������������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0020503�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 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" License: GPL Maintainer: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/waitpid��������������������������������������������������������������0000664�0000000�0000000�00000000513�11671051007�0017525�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/warnings�������������������������������������������������������������0000664�0000000�0000000�00000000314�11671051007�0017713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Helper M4 functions for safely adding compiler warning parameters. Files: m4/warnings.m4 Depends-on: configure.ac: AC_SUBST([WARN_CFLAGS]) License: unlimited Maintainer: Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wchar����������������������������������������������������������������0000664�0000000�0000000�00000014511�11671051007�0017173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <wchar.h> that works around platform issues. 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 stddef configure.ac: gl_WCHAR_H 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/@''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_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' \ < $(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_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_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|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 '/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-20111211-stable/modules/wchar-c++-tests������������������������������������������������������0000664�0000000�0000000�00000000472�11671051007�0020702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wchar-c++.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___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) $(LIB_EACCESS) endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wchar-tests����������������������������������������������������������0000664�0000000�0000000�00000000214�11671051007�0020326�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-20111211-stable/modules/wcpcpy���������������������������������������������������������������0000664�0000000�0000000�00000000577�11671051007�0017403�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcpncpy��������������������������������������������������������������0000664�0000000�0000000�00000000540�11671051007�0017547�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcrtomb��������������������������������������������������������������0000664�0000000�0000000�00000001062�11671051007�0017541�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcrtomb-tests��������������������������������������������������������0000664�0000000�0000000�00000001405�11671051007�0020702�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.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 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 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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcscasecmp�����������������������������������������������������������0000664�0000000�0000000�00000000640�11671051007�0020215�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: Bruno Haible ������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcscat���������������������������������������������������������������0000664�0000000�0000000�00000000576�11671051007�0017361�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcschr���������������������������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0017354�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcscmp���������������������������������������������������������������0000664�0000000�0000000�00000000572�11671051007�0017365�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcscoll��������������������������������������������������������������0000664�0000000�0000000�00000000633�11671051007�0017535�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: 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: Bruno Haible �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcscpy���������������������������������������������������������������0000664�0000000�0000000�00000000564�11671051007�0017402�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcscspn��������������������������������������������������������������0000664�0000000�0000000�00000000764�11671051007�0017554�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: Bruno Haible ������������gnulib-20111211-stable/modules/wcsdup���������������������������������������������������������������0000664�0000000�0000000�00000000625�11671051007�0017375�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: Bruno Haible �����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcslen���������������������������������������������������������������0000664�0000000�0000000�00000000607�11671051007�0017363�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsncasecmp����������������������������������������������������������0000664�0000000�0000000�00000000651�11671051007�0020375�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: Bruno Haible ���������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsncat��������������������������������������������������������������0000664�0000000�0000000�00000000627�11671051007�0017534�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: Bruno Haible ���������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsncmp��������������������������������������������������������������0000664�0000000�0000000�00000000602�11671051007�0017535�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsncpy��������������������������������������������������������������0000664�0000000�0000000�00000000611�11671051007�0017551�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsnlen��������������������������������������������������������������0000664�0000000�0000000�00000000550�11671051007�0017536�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsnrtombs�����������������������������������������������������������0000664�0000000�0000000�00000001173�11671051007�0020270�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsnrtombs-tests�����������������������������������������������������0000664�0000000�0000000�00000001147�11671051007�0021431�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 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcspbrk��������������������������������������������������������������0000664�0000000�0000000�00000000713�11671051007�0017541�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: Bruno Haible �����������������������������������������������������gnulib-20111211-stable/modules/wcsrchr��������������������������������������������������������������0000664�0000000�0000000�00000000621�11671051007�0017537�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsrtombs������������������������������������������������������������0000664�0000000�0000000�00000001177�11671051007�0020116�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsrtombs-tests������������������������������������������������������0000664�0000000�0000000�00000001135�11671051007�0021250�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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcsspn���������������������������������������������������������������0000664�0000000�0000000�00000000714�11671051007�0017404�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: Bruno Haible ����������������������������������������������������gnulib-20111211-stable/modules/wcsstr���������������������������������������������������������������0000664�0000000�0000000�00000000571�11671051007�0017415�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcstok���������������������������������������������������������������0000664�0000000�0000000�00000000635�11671051007�0017403�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] wcspbrk [test $HAVE_WCSTOK = 0] configure.ac: gl_FUNC_WCSTOK if test $HAVE_WCSTOK = 0; then AC_LIBOBJ([wcstok]) fi gl_WCHAR_MODULE_INDICATOR([wcstok]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcswidth�������������������������������������������������������������0000664�0000000�0000000�00000000754�11671051007�0017727�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> License: LGPL Maintainer: Bruno Haible ��������������������gnulib-20111211-stable/modules/wcsxfrm��������������������������������������������������������������0000664�0000000�0000000�00000000563�11671051007�0017562�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: 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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wctob����������������������������������������������������������������0000664�0000000�0000000�00000000716�11671051007�0017207�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: Bruno Haible ��������������������������������������������������gnulib-20111211-stable/modules/wctomb���������������������������������������������������������������0000664�0000000�0000000�00000000715�11671051007�0017363�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: Bruno Haible ���������������������������������������������������gnulib-20111211-stable/modules/wctrans��������������������������������������������������������������0000664�0000000�0000000�00000000556�11671051007�0017554�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: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wctype���������������������������������������������������������������0000664�0000000�0000000�00000000673�11671051007�0017406�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] 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: Bruno Haible ���������������������������������������������������������������������gnulib-20111211-stable/modules/wctype-h�������������������������������������������������������������0000664�0000000�0000000�00000003571�11671051007�0017633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: A <wctype.h> that conforms better to C99. Files: lib/wctype.in.h m4/wctype_h.m4 m4/wint_t.m4 Depends-on: include_next snippet/c++defs snippet/warn-on-use configure.ac: gl_WCTYPE_H Makefile.am: BUILT_SOURCES += wctype.h # 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/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/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_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-20111211-stable/modules/wctype-h-c++-tests���������������������������������������������������0000664�0000000�0000000�00000000514�11671051007�0021333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wctype-h-c++.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___LDADD = $(LDADD) $(LIBINTL) $(LIB_NANOSLEEP) $(LIB_EACCESS) endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wctype-h-tests�������������������������������������������������������0000664�0000000�0000000�00000000240�11671051007�0020761�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-20111211-stable/modules/wcwidth��������������������������������������������������������������0000664�0000000�0000000�00000001247�11671051007�0017542�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]) fi gl_WCHAR_MODULE_INDICATOR([wcwidth]) Makefile.am: Include: <wchar.h> License: LGPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wcwidth-tests��������������������������������������������������������0000664�0000000�0000000�00000000252�11671051007�0020675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-wcwidth.c tests/signature.h tests/macros.h Depends-on: localcharset configure.ac: Makefile.am: TESTS += test-wcwidth check_PROGRAMS += test-wcwidth ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/winsz-ioctl����������������������������������������������������������0000664�0000000�0000000�00000000351�11671051007�0020346�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-20111211-stable/modules/winsz-termios��������������������������������������������������������0000664�0000000�0000000�00000000351�11671051007�0020716�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-20111211-stable/modules/wmemchr��������������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0017534�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: LGPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wmemcmp��������������������������������������������������������������0000664�0000000�0000000�00000000523�11671051007�0017532�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wmemcpy��������������������������������������������������������������0000664�0000000�0000000�00000000517�11671051007�0017551�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wmemmove�������������������������������������������������������������0000664�0000000�0000000�00000000527�11671051007�0017725�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: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/wmemset��������������������������������������������������������������0000664�0000000�0000000�00000000517�11671051007�0017551�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/write����������������������������������������������������������������0000664�0000000�0000000�00000000736�11671051007�0017225�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: Bruno Haible ����������������������������������gnulib-20111211-stable/modules/write-any-file�������������������������������������������������������0000664�0000000�0000000�00000000474�11671051007�0020726�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 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-20111211-stable/modules/write-tests����������������������������������������������������������0000664�0000000�0000000�00000000245�11671051007�0020360�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-20111211-stable/modules/xalloc���������������������������������������������������������������0000664�0000000�0000000�00000000446�11671051007�0017353�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: inline xalloc-die xalloc-oversized configure.ac: gl_XALLOC Makefile.am: lib_SOURCES += xmalloc.c Include: "xalloc.h" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xalloc-die�����������������������������������������������������������0000664�0000000�0000000�00000000355�11671051007�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Report a memory allocation failure and exit. Files: lib/xalloc-die.c Depends-on: xalloc error gettext-h exitfail configure.ac: Makefile.am: lib_SOURCES += xalloc-die.c Include: "xalloc.h" License: GPL Maintainer: all �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xalloc-die-tests�����������������������������������������������������0000664�0000000�0000000�00000000323�11671051007�0021244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xalloc-die.c tests/test-xalloc-die.sh tests/init.sh Depends-on: progname Makefile.am: TESTS += test-xalloc-die.sh check_PROGRAMS += test-xalloc-die test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xalloc-oversized�����������������������������������������������������0000664�0000000�0000000�00000000314�11671051007�0021355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Check for memory allocation overflow. Also see xalloc. Files: lib/xalloc-oversized.h Depends-on: configure.ac: Makefile.am: Include: "xalloc-oversized.h" License: GPL Maintainer: all ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xconcat-filename�����������������������������������������������������0000664�0000000�0000000�00000000555�11671051007�0021307�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: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xfreopen�������������������������������������������������������������0000664�0000000�0000000�00000000372�11671051007�0017715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: a wrapper for frepoen Files: lib/xfreopen.c lib/xfreopen.h Depends-on: error exitfail freopen-safer quote configure.ac: Makefile.am: lib_SOURCES += xfreopen.c xfreopen.h Include: "xfreopen.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xgetcwd��������������������������������������������������������������0000664�0000000�0000000�00000000441�11671051007�0017531�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-20111211-stable/modules/xgetdomainname�������������������������������������������������������0000664�0000000�0000000�00000000456�11671051007�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return machine's domainname, without size limitations. Files: lib/xgetdomainname.h lib/xgetdomainname.c Depends-on: getdomainname xalloc configure.ac: Makefile.am: lib_SOURCES += xgetdomainname.h xgetdomainname.c Include: "xgetdomainname.h" License: GPL Maintainer: Simon Josefsson ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xgetgroups�����������������������������������������������������������0000664�0000000�0000000�00000000521�11671051007�0020272�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-20111211-stable/modules/xgethostname���������������������������������������������������������0000664�0000000�0000000�00000000436�11671051007�0020576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Return machine's hostname, without size limitations. Files: lib/xgethostname.h lib/xgethostname.c Depends-on: gethostname xalloc configure.ac: Makefile.am: lib_SOURCES += xgethostname.h xgethostname.c Include: "xgethostname.h" License: GPL Maintainer: Jim Meyering ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xlist����������������������������������������������������������������0000664�0000000�0000000�00000000467�11671051007�0017237�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 m4/gl_list.m4 Depends-on: list inline stdbool xalloc-die configure.ac: gl_LIST Makefile.am: lib_SOURCES += gl_xlist.h gl_xlist.c Include: "gl_xlist.h" License: GPL Maintainer: Bruno Haible ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xmalloca�������������������������������������������������������������0000664�0000000�0000000�00000000403�11671051007�0017662�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 configure.ac: Makefile.am: lib_SOURCES += xmalloca.c Include: "xmalloca.h" License: GPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xmemcoll�������������������������������������������������������������0000664�0000000�0000000�00000000467�11671051007�0017714�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: Makefile.am: lib_SOURCES += xmemcoll.h xmemcoll.c Include: "xmemcoll.h" License: GPL Maintainer: Paul Eggert, Jim Meyering ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xmemdup0�������������������������������������������������������������0000664�0000000�0000000�00000000363�11671051007�0017626�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: AC_LIBOBJ([xmemdup0]) Makefile.am: Include: "xmemdup0.h" License: GPL Maintainer: Eric Blake �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xmemdup0-tests�������������������������������������������������������0000664�0000000�0000000�00000000277�11671051007�0020772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xmemdup0.c tests/macros.h Depends-on: progname configure.ac: Makefile.am: TESTS += test-xmemdup0 check_PROGRAMS += test-xmemdup0 test_xmemdup0_LDADD = $(LDADD) @LIBINTL@ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xnanosleep�����������������������������������������������������������0000664�0000000�0000000�00000000506�11671051007�0020242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: a more convenient interface to nanosleep Files: lib/xnanosleep.h lib/xnanosleep.c m4/xnanosleep.m4 Depends-on: dtotimespec nanosleep time configure.ac: gl_XNANOSLEEP Makefile.am: lib_SOURCES += xnanosleep.c Include: "xnanosleep.h" Link: $(LIB_NANOSLEEP) License: GPL Maintainer: Paul Eggert, Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xoset����������������������������������������������������������������0000664�0000000�0000000�00000000463�11671051007�0017232�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 m4/gl_list.m4 Depends-on: oset inline stdbool xalloc-die configure.ac: gl_LIST Makefile.am: lib_SOURCES += gl_xoset.h gl_xoset.c Include: "gl_xoset.h" License: GPL Maintainer: Bruno Haible �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xprintf��������������������������������������������������������������0000664�0000000�0000000�00000001423�11671051007�0017557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: a wrapper around printf that calls error upon ENOMEM or EILSEQ errors Notice: If you are using GNU gettext version 0.16.1 or older, add the following options to XGETTEXT_OPTIONS in your po/Makevars: --flag=xprintf:1:c-format --flag=xvprintf:1:c-format --flag=xfprintf:2:c-format --flag=xvfprintf:2:c-format Files: lib/xprintf.h lib/xprintf.c Depends-on: error exitfail gettext-h stdarg stdio 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-20111211-stable/modules/xprintf-posix��������������������������������������������������������0000664�0000000�0000000�00000001047�11671051007�0020721�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: Bruno Haible �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xprintf-posix-tests��������������������������������������������������0000664�0000000�0000000�00000000675�11671051007�0022067�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 progname 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-20111211-stable/modules/xreadlink������������������������������������������������������������0000664�0000000�0000000�00000000411�11671051007�0020042�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: Bruno Haible, Jim Meyering �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xreadlinkat����������������������������������������������������������0000664�0000000�0000000�00000000500�11671051007�0020366�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-20111211-stable/modules/xsetenv��������������������������������������������������������������0000664�0000000�0000000�00000000546�11671051007�0017566�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xsize����������������������������������������������������������������0000664�0000000�0000000�00000000336�11671051007�0017231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Checked size_t computations. Files: lib/xsize.h m4/xsize.m4 Depends-on: size_max configure.ac: gl_XSIZE Makefile.am: lib_SOURCES += xsize.h Include: "xsize.h" License: LGPLv2+ Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xstriconv������������������������������������������������������������0000664�0000000�0000000�00000000606�11671051007�0020126�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" Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: GPL Maintainer: Bruno Haible, Simon Josefsson ��������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xstriconveh����������������������������������������������������������0000664�0000000�0000000�00000000562�11671051007�0020444�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" Link: $(LTLIBICONV) when linking with libtool, $(LIBICONV) otherwise License: GPL Maintainer: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xstrndup�������������������������������������������������������������0000664�0000000�0000000�00000000475�11671051007�0017762�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-20111211-stable/modules/xstrtod��������������������������������������������������������������0000664�0000000�0000000�00000000404�11671051007�0017572�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-20111211-stable/modules/xstrtoimax�����������������������������������������������������������0000664�0000000�0000000�00000000356�11671051007�0020313�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-20111211-stable/modules/xstrtoimax-tests�����������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0021444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh tests/test-xstrtoimax.c tests/test-xstrtoimax.sh Depends-on: configure.ac: Makefile.am: TESTS += test-xstrtoimax.sh check_PROGRAMS += test-xstrtoimax test_xstrtoimax_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xstrtol��������������������������������������������������������������0000664�0000000�0000000�00000000614�11671051007�0017605�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 lib/xstrtol-error.c m4/xstrtol.m4 Depends-on: exitfail error getopt-gnu gettext-h intprops inttypes-incomplete configure.ac: gl_XSTRTOL Makefile.am: lib_SOURCES += xstrtol.c xstrtoul.c xstrtol-error.c Include: "xstrtol.h" License: GPL Maintainer: Jim Meyering ��������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xstrtol-tests��������������������������������������������������������0000664�0000000�0000000�00000000440�11671051007�0020742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh tests/test-xstrtol.c tests/test-xstrtoul.c tests/test-xstrtol.sh Depends-on: inttypes 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-20111211-stable/modules/xstrtold�������������������������������������������������������������0000664�0000000�0000000�00000000432�11671051007�0017747�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-20111211-stable/modules/xstrtoll�������������������������������������������������������������0000664�0000000�0000000�00000000707�11671051007�0017764�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: strtoll strtoull xstrtol configure.ac: AC_LIBOBJ([xstrtoll]) AC_LIBOBJ([xstrtoull]) AC_TYPE_LONG_LONG_INT test $ac_cv_type_long_long_int = no \ && AC_MSG_ERROR( [you lack long long support; required by gnulib's xstrtoll module]) Makefile.am: Include: "xstrtol.h" License: GPL Maintainer: Jim Meyering ���������������������������������������������������������gnulib-20111211-stable/modules/xstrtoll-tests�������������������������������������������������������0000664�0000000�0000000�00000000477�11671051007�0021130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh tests/test-xstrtol.c tests/test-xstrtoll.c tests/test-xstrtoull.c tests/test-xstrtoll.sh Depends-on: inttypes 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-20111211-stable/modules/xstrtoumax�����������������������������������������������������������0000664�0000000�0000000�00000000357�11671051007�0020330�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-20111211-stable/modules/xstrtoumax-tests�����������������������������������������������������0000664�0000000�0000000�00000000331�11671051007�0021460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh tests/test-xstrtoumax.c tests/test-xstrtoumax.sh Depends-on: configure.ac: Makefile.am: TESTS += test-xstrtoumax.sh check_PROGRAMS += test-xstrtoumax test_xstrtoumax_LDADD = $(LDADD) @LIBINTL@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xsublist�������������������������������������������������������������0000664�0000000�0000000�00000000462�11671051007�0017744�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 xalloc-die configure.ac: Makefile.am: lib_SOURCES += gl_xsublist.h gl_xsublist.c Include: "gl_xsublist.h" License: GPL Maintainer: Bruno Haible ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xvasprintf�����������������������������������������������������������0000664�0000000�0000000�00000001176�11671051007�0020276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: vasprintf and asprintf with out-of-memory checking. Also see xalloc-die. Notice: If you are using GNU gettext version 0.16.1 or older, add the following options to XGETTEXT_OPTIONS in your po/Makevars: --flag=xasprintf:1:c-format Files: lib/xvasprintf.h lib/xvasprintf.c lib/xasprintf.c lib/xalloc.h m4/xvasprintf.m4 Depends-on: vasprintf xalloc-die xsize stdarg 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-20111211-stable/modules/xvasprintf-posix�����������������������������������������������������0000664�0000000�0000000�00000001046�11671051007�0021432�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: Bruno Haible ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/xvasprintf-tests�����������������������������������������������������0000664�0000000�0000000�00000000310�11671051007�0021423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/test-xvasprintf.c tests/macros.h Depends-on: progname configure.ac: Makefile.am: TESTS += test-xvasprintf check_PROGRAMS += test-xvasprintf test_xvasprintf_LDADD = $(LDADD) @LIBINTL@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/y0�������������������������������������������������������������������0000664�0000000�0000000�00000000372�11671051007�0016417�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/y0-tests�������������������������������������������������������������0000664�0000000�0000000�00000000260�11671051007�0017553�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-20111211-stable/modules/y1�������������������������������������������������������������������0000664�0000000�0000000�00000000372�11671051007�0016420�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/y1-tests�������������������������������������������������������������0000664�0000000�0000000�00000000260�11671051007�0017554�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-20111211-stable/modules/yesno����������������������������������������������������������������0000664�0000000�0000000�00000000450�11671051007�0017221�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" License: GPL Maintainer: Jim Meyering ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/yesno-tests����������������������������������������������������������0000664�0000000�0000000�00000000322�11671051007�0020357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Files: tests/init.sh tests/test-yesno.c tests/test-yesno.sh Depends-on: closein binary-io configure.ac: Makefile.am: TESTS += test-yesno.sh check_PROGRAMS += test-yesno test_yesno_LDADD = $(LDADD) @LIBINTL@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/yield����������������������������������������������������������������0000664�0000000�0000000�00000000543�11671051007�0017175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Description: Yielding the processor to other threads. Files: lib/glthread/yield.h m4/yield.m4 Depends-on: threadlib configure.ac: gl_YIELD Makefile.am: lib_SOURCES += glthread/yield.h Include: "glthread/yield.h" Link: $(LTLIBTHREAD) when linking with libtool, $(LIBTHREAD) otherwise $(YIELD_LIB) License: LGPLv2+ Maintainer: Yoann Vandoorselaere �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/yn�������������������������������������������������������������������0000664�0000000�0000000�00000000372�11671051007�0016515�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: Bruno Haible ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/modules/yn-tests�������������������������������������������������������������0000664�0000000�0000000�00000000260�11671051007�0017651�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-20111211-stable/posix-modules����������������������������������������������������������������0000775�0000000�0000000�00000022103�11671051007�0017226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # Copyright (C) 2002-2008, 2010-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 <http://www.gnu.org/licenses/>. # progname=$0 package=gnulib # func_usage # outputs to stdout the --help usage message. func_usage () { echo "\ Usage: posix-modules Lists the gnulib modules that implement POSIX interfaces. 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 if test -d "$gnulib_dir"/CVS \ && (cvs --version) >/dev/null 2>/dev/null; then # gnulib checked out from CVS. sed_extract_first_date='/^date: /{ s/^date: \([0-9][0-9][0-9][0-9]\).\([0-9][0-9]\).\([0-9][0-9]\) \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1-\2-\3 \4/p q }' date=`cd "$gnulib_dir" && cvs log -N ChangeLog 2>/dev/null | sed -n -e "$sed_extract_first_date"` else # gnulib copy without versioning information. date=`sed -e 's/ .*//;q' "$gnulib_dir"/ChangeLog` fi 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 <http://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 # Command-line option processing. 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 $? ;; -* ) 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 ( # 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 # Local Variables: # indent-tabs-mode: nil # whitespace-check-buffer-indent: nil # End: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/�����������������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0015634�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/���������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017246�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/Makefile.am����������������������������������������������������0000664�0000000�0000000�00000006465�11671051007�0021315�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-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 <http://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-20111211-stable/tests/havelib/README���������������������������������������������������������0000664�0000000�0000000�00000005546�11671051007�0020140�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-20111211-stable/tests/havelib/rpath-1��������������������������������������������������������0000664�0000000�0000000�00000002144�11671051007�0020446�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-20111211-stable/tests/havelib/rpath-1a�������������������������������������������������������0000775�0000000�0000000�00000000240�11671051007�0020605�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-20111211-stable/tests/havelib/rpath-1b�������������������������������������������������������0000775�0000000�0000000�00000000220�11671051007�0020604�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-20111211-stable/tests/havelib/rpath-2_a������������������������������������������������������0000664�0000000�0000000�00000003210�11671051007�0020742�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-20111211-stable/tests/havelib/rpath-2_b������������������������������������������������������0000664�0000000�0000000�00000004035�11671051007�0020751�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-20111211-stable/tests/havelib/rpath-2aaa�����������������������������������������������������0000775�0000000�0000000�00000000424�11671051007�0021114�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-20111211-stable/tests/havelib/rpath-2aab�����������������������������������������������������0000775�0000000�0000000�00000000404�11671051007�0021113�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-20111211-stable/tests/havelib/rpath-2aac�����������������������������������������������������0000775�0000000�0000000�00000000404�11671051007�0021114�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-20111211-stable/tests/havelib/rpath-2aad�����������������������������������������������������0000775�0000000�0000000�00000000364�11671051007�0021122�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-20111211-stable/tests/havelib/rpath-2aba�����������������������������������������������������0000775�0000000�0000000�00000000506�11671051007�0021116�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-20111211-stable/tests/havelib/rpath-2abb�����������������������������������������������������0000775�0000000�0000000�00000000466�11671051007�0021124�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-20111211-stable/tests/havelib/rpath-2abc�����������������������������������������������������0000775�0000000�0000000�00000000466�11671051007�0021125�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-20111211-stable/tests/havelib/rpath-2abd�����������������������������������������������������0000775�0000000�0000000�00000000446�11671051007�0021124�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-20111211-stable/tests/havelib/rpath-2baa�����������������������������������������������������0000775�0000000�0000000�00000000566�11671051007�0021124�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-20111211-stable/tests/havelib/rpath-2bab�����������������������������������������������������0000775�0000000�0000000�00000000546�11671051007�0021123�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-20111211-stable/tests/havelib/rpath-2bac�����������������������������������������������������0000775�0000000�0000000�00000000546�11671051007�0021124�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-20111211-stable/tests/havelib/rpath-2bad�����������������������������������������������������0000775�0000000�0000000�00000000526�11671051007�0021123�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-20111211-stable/tests/havelib/rpath-2bba�����������������������������������������������������0000775�0000000�0000000�00000000650�11671051007�0021117�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-20111211-stable/tests/havelib/rpath-2bbb�����������������������������������������������������0000775�0000000�0000000�00000000630�11671051007�0021116�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-20111211-stable/tests/havelib/rpath-2bbc�����������������������������������������������������0000775�0000000�0000000�00000000630�11671051007�0021117�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-20111211-stable/tests/havelib/rpath-2bbd�����������������������������������������������������0000775�0000000�0000000�00000000610�11671051007�0021116�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-20111211-stable/tests/havelib/rpath-3_a������������������������������������������������������0000664�0000000�0000000�00000004134�11671051007�0020751�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-20111211-stable/tests/havelib/rpath-3_b������������������������������������������������������0000664�0000000�0000000�00000005307�11671051007�0020755�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-20111211-stable/tests/havelib/rpath-3aaa�����������������������������������������������������0000775�0000000�0000000�00000000546�11671051007�0021122�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-20111211-stable/tests/havelib/rpath-3aab�����������������������������������������������������0000775�0000000�0000000�00000000526�11671051007�0021121�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-20111211-stable/tests/havelib/rpath-3aac�����������������������������������������������������0000775�0000000�0000000�00000000526�11671051007�0021122�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-20111211-stable/tests/havelib/rpath-3aad�����������������������������������������������������0000775�0000000�0000000�00000000506�11671051007�0021121�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-20111211-stable/tests/havelib/rpath-3aae�����������������������������������������������������0000775�0000000�0000000�00000000526�11671051007�0021124�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-20111211-stable/tests/havelib/rpath-3aaf�����������������������������������������������������0000775�0000000�0000000�00000000506�11671051007�0021123�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-20111211-stable/tests/havelib/rpath-3aag�����������������������������������������������������0000775�0000000�0000000�00000000506�11671051007�0021124�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-20111211-stable/tests/havelib/rpath-3aah�����������������������������������������������������0000775�0000000�0000000�00000000466�11671051007�0021132�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-20111211-stable/tests/havelib/rpath-3aba�����������������������������������������������������0000775�0000000�0000000�00000000630�11671051007�0021115�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-20111211-stable/tests/havelib/rpath-3abb�����������������������������������������������������0000775�0000000�0000000�00000000610�11671051007�0021114�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-20111211-stable/tests/havelib/rpath-3abc�����������������������������������������������������0000775�0000000�0000000�00000000610�11671051007�0021115�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-20111211-stable/tests/havelib/rpath-3abd�����������������������������������������������������0000775�0000000�0000000�00000000570�11671051007�0021123�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-20111211-stable/tests/havelib/rpath-3abe�����������������������������������������������������0000775�0000000�0000000�00000000610�11671051007�0021117�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-20111211-stable/tests/havelib/rpath-3abf�����������������������������������������������������0000775�0000000�0000000�00000000570�11671051007�0021125�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-20111211-stable/tests/havelib/rpath-3abg�����������������������������������������������������0000775�0000000�0000000�00000000570�11671051007�0021126�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-20111211-stable/tests/havelib/rpath-3abh�����������������������������������������������������0000775�0000000�0000000�00000000550�11671051007�0021125�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-20111211-stable/tests/havelib/rpath-3baa�����������������������������������������������������0000775�0000000�0000000�00000000711�11671051007�0021115�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-20111211-stable/tests/havelib/rpath-3bab�����������������������������������������������������0000775�0000000�0000000�00000000671�11671051007�0021123�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-20111211-stable/tests/havelib/rpath-3bac�����������������������������������������������������0000775�0000000�0000000�00000000671�11671051007�0021124�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-20111211-stable/tests/havelib/rpath-3bad�����������������������������������������������������0000775�0000000�0000000�00000000651�11671051007�0021123�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-20111211-stable/tests/havelib/rpath-3bae�����������������������������������������������������0000775�0000000�0000000�00000000671�11671051007�0021126�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-20111211-stable/tests/havelib/rpath-3baf�����������������������������������������������������0000775�0000000�0000000�00000000651�11671051007�0021125�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-20111211-stable/tests/havelib/rpath-3bag�����������������������������������������������������0000775�0000000�0000000�00000000651�11671051007�0021126�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-20111211-stable/tests/havelib/rpath-3bah�����������������������������������������������������0000775�0000000�0000000�00000000631�11671051007�0021125�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-20111211-stable/tests/havelib/rpath-3bba�����������������������������������������������������0000775�0000000�0000000�00000000773�11671051007�0021126�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-20111211-stable/tests/havelib/rpath-3bbb�����������������������������������������������������0000775�0000000�0000000�00000000753�11671051007�0021125�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-20111211-stable/tests/havelib/rpath-3bbc�����������������������������������������������������0000775�0000000�0000000�00000000753�11671051007�0021126�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-20111211-stable/tests/havelib/rpath-3bbd�����������������������������������������������������0000775�0000000�0000000�00000000733�11671051007�0021125�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-20111211-stable/tests/havelib/rpath-3bbe�����������������������������������������������������0000775�0000000�0000000�00000000753�11671051007�0021130�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-20111211-stable/tests/havelib/rpath-3bbf�����������������������������������������������������0000775�0000000�0000000�00000000733�11671051007�0021127�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-20111211-stable/tests/havelib/rpath-3bbg�����������������������������������������������������0000775�0000000�0000000�00000000733�11671051007�0021130�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-20111211-stable/tests/havelib/rpath-3bbh�����������������������������������������������������0000775�0000000�0000000�00000000713�11671051007�0021127�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-20111211-stable/tests/havelib/rpathcfg.sh����������������������������������������������������0000775�0000000�0000000�00000015443�11671051007�0021412�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-20111211-stable/tests/havelib/rpathlx/�������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020730�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlx/Makefile.am��������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0022755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.5 foreign no-dependencies bin_PROGRAMS = usex usex_SOURCES = usex.c LDADD = @LIBRPATHX@ check: all ./usex �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlx/configure.ac�������������������������������������������0000664�0000000�0000000�00000001744�11671051007�0023224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathx. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2011 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 <http://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-20111211-stable/tests/havelib/rpathlx/usex.c�������������������������������������������������0000664�0000000�0000000�00000000120�11671051007�0022051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathx_value (void); int main () { return !(rpathx_value () == 5); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathly/�������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020731�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathly/Makefile.am��������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0022756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.5 foreign no-dependencies bin_PROGRAMS = usey usey_SOURCES = usey.c LDADD = @LIBRPATHY@ check: all ./usey �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathly/configure.ac�������������������������������������������0000664�0000000�0000000�00000001744�11671051007�0023225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathy. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2011 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 <http://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-20111211-stable/tests/havelib/rpathly/usey.c�������������������������������������������������0000664�0000000�0000000�00000000121�11671051007�0022054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathy_value (void); int main () { return !(rpathy_value () == 57); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlyx/������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0021121�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlyx/Makefile.am�������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0023146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.5 foreign no-dependencies bin_PROGRAMS = usey usey_SOURCES = usey.c LDADD = @LIBRPATHY@ check: all ./usey �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlyx/configure.ac������������������������������������������0000664�0000000�0000000�00000002053�11671051007�0023407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathy. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2011 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 <http://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-20111211-stable/tests/havelib/rpathlyx/usey.c������������������������������������������������0000664�0000000�0000000�00000000121�11671051007�0022244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathy_value (void); int main () { return !(rpathy_value () == 57); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlz/�������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020732�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlz/Makefile.am��������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0022757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.5 foreign no-dependencies bin_PROGRAMS = usez usez_SOURCES = usez.c LDADD = @LIBRPATHZ@ check: all ./usez �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlz/configure.ac�������������������������������������������0000664�0000000�0000000�00000001744�11671051007�0023226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathz. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2011 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 <http://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-20111211-stable/tests/havelib/rpathlz/usez.c�������������������������������������������������0000664�0000000�0000000�00000000123�11671051007�0022060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathz_value (void); int main () { return !(rpathz_value () == 5171); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlzyx/�����������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0021313�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlzyx/Makefile.am������������������������������������������0000664�0000000�0000000�00000000201�11671051007�0023340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.5 foreign no-dependencies bin_PROGRAMS = usez usez_SOURCES = usez.c LDADD = @LIBRPATHZ@ check: all ./usez �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathlzyx/configure.ac�����������������������������������������0000664�0000000�0000000�00000002142�11671051007�0023600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of a program that links with librpathz. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2011 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 <http://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-20111211-stable/tests/havelib/rpathlzyx/usez.c�����������������������������������������������0000664�0000000�0000000�00000000123�11671051007�0022441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathz_value (void); int main () { return !(rpathz_value () == 5171); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathx/��������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020554�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathx/Makefile.am���������������������������������������������0000664�0000000�0000000�00000000227�11671051007�0022611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.5 foreign no-dependencies lib_LTLIBRARIES = librpathx.la librpathx_la_SOURCES = rpathx.c librpathx_la_LDFLAGS = -lc -no-undefined �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathx/configure.ac��������������������������������������������0000664�0000000�0000000�00000001735�11671051007�0023050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of librpathx. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2011 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 <http://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-20111211-stable/tests/havelib/rpathx/rpathx.c������������������������������������������������0000664�0000000�0000000�00000000042�11671051007�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������int rpathx_value () { return 5; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathy/��������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020555�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathy/Makefile.am���������������������������������������������0000664�0000000�0000000�00000000245�11671051007�0022612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.5 foreign no-dependencies lib_LTLIBRARIES = librpathy.la librpathy_la_SOURCES = rpathy.c librpathy_la_LDFLAGS = @LTLIBRPATHX@ -lc -no-undefined �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathy/configure.ac��������������������������������������������0000664�0000000�0000000�00000002022�11671051007�0023037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of librpathy that depends on librpathx. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2011 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 <http://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-20111211-stable/tests/havelib/rpathy/rpathy.c������������������������������������������������0000664�0000000�0000000�00000000131�11671051007�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������extern int rpathx_value (void); int rpathy_value () { return 10 * rpathx_value () + 7; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathz/��������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0020556�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathz/Makefile.am���������������������������������������������0000664�0000000�0000000�00000000263�11671051007�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������AUTOMAKE_OPTIONS = 1.5 foreign no-dependencies lib_LTLIBRARIES = librpathz.la librpathz_la_SOURCES = rpathz.c librpathz_la_LDFLAGS = @LTLIBRPATHX@ @LTLIBRPATHY@ -lc -no-undefined ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/havelib/rpathz/configure.ac��������������������������������������������0000664�0000000�0000000�00000002104�11671051007�0023041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Configuration of librpathz that depends on librpathx and librpathy. dnl dnl Copyright (C) 2002-2003, 2005, 2010-2011 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 <http://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-20111211-stable/tests/havelib/rpathz/rpathz.c������������������������������������������������0000664�0000000�0000000�00000000215�11671051007�0022230�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-20111211-stable/tests/infinity.h�������������������������������������������������������������0000664�0000000�0000000�00000003032�11671051007�0017634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for infinity. 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 <http://www.gnu.org/licenses/>. */ /* Infinityf () returns a 'float' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. */ #if defined _MSC_VER 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. */ #if defined _MSC_VER 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. */ #if defined _MSC_VER static double Infinityl () { static long double zero = 0.0L; return 1.0L / zero; } #else # define Infinityl() (1.0L / 0.0L) #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/init.sh����������������������������������������������������������������0000664�0000000�0000000�00000043623�11671051007�0017143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# source this file; set up for tests # Copyright (C) 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 <http://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, 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 ME_=`expr "./$0" : '.*/\(.*\)$'` # 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; } # 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 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 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 exec "$re_shell_" $opts_ "$0" --no-reexec "$@" echo "$ME_: exec failed" 1>&2 exit 127 fi fi test -n "$EXEEXT" && shopt -s expand_aliases # 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_ # 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_ () { :; } # 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"; } >&2 return 1 fi if test "x$2" = x/dev/null; then test -s "$1" || return 0 { emit_diff_u_header_ "$@"; sed 's/^/-/' -- "$1"; } >&2 return 1 fi return 2 } if diff_out_=`( diff -u "$0" "$0" < /dev/null ) 2>/dev/null`; then if test -z "$diff_out_"; then compare_ () { diff -u "$@"; } else compare_ () { if diff -u "$@" > diff.out; then # No differences were found, but Solaris 'diff' produces output # "No differences encountered". Hide this output. rm -f diff.out true else cat diff.out rm -f diff.out false fi } fi elif diff_out_=`( diff -c "$0" "$0" < /dev/null ) 2>/dev/null`; then if test -z "$diff_out_"; then compare_ () { diff -c "$@"; } else compare_ () { if diff -c "$@" > diff.out; then # No differences were found, but AIX and HP-UX 'diff' produce output # "No differences encountered" or "There are no differences between the # files.". Hide this output. rm -f diff.out true else cat diff.out rm -f diff.out false fi } fi elif ( cmp --version < /dev/null 2>&1 | grep GNU ) > /dev/null 2>&1; 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 () { compare_dev_null_ "$@" case $? in 0|1) return $?;; *) compare_ "$@";; esac } # An arbitrary prefix to help distinguish test directories. testdir_prefix_ () { printf gt; } # Run the user-overridable cleanup_ function, remove the temporary # directory and exit with the incoming value of $?. remove_tmp_ () { __st=$? cleanup_ # 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; } exit $__st } # 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_=`cd "$initial_cwd_/$path_dir_" && echo "$PWD"` \ || fail_ "invalid path dir: $path_dir_";; esac case $abs_path_dir_ in *:*) fail_ "invalid path dir: '$abs_path_dir_'";; esac PATH="$abs_path_dir_:$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 } 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 5.x and 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 fail=0 pfx_=`testdir_prefix_` test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \ || fail_ "failed to create temporary directory in $initial_cwd_" cd "$test_dir_" # 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 } # 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; netstat -n' 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 /) ;; */) fail_ "invalid destination dir: remove trailing slash(es)";; 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` \ || 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 fail_ "$err_" } # 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" 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-20111211-stable/tests/locale/����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017073�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/locale/fr/�������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017502�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/locale/fr/LC_MESSAGES/�������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0021267�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/locale/fr/LC_MESSAGES/test-quotearg.mo���������������������������������0000664�0000000�0000000�00000000132�11671051007�0024424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,������<������P������R������T������W���������������������'�`�»�«���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/locale/fr/LC_MESSAGES/test-quotearg.po���������������������������������0000664�0000000�0000000�00000001267�11671051007�0024441�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-20111211-stable/tests/macros.h���������������������������������������������������������������0000664�0000000�0000000�00000006263�11671051007�0017300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Common macros used by gnulib tests. Copyright (C) 2006-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 <http://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> /* 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 failed\n", \ __FILE__, __LINE__); \ fflush (ASSERT_STREAM); \ abort (); \ } \ } \ while (0) /* 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) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/minus-zero.h�����������������������������������������������������������0000664�0000000�0000000�00000004522�11671051007�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for floating-point negative zero. Copyright (C) 2010-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 <http://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 MacOS 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 MacOS 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 MacOS 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-20111211-stable/tests/nan.h������������������������������������������������������������������0000664�0000000�0000000�00000003466�11671051007�0016572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for not-a-number. 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 <http://www.gnu.org/licenses/>. */ /* 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. */ #if defined __DECC || defined _MSC_VER 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. */ #if defined __DECC || defined _MSC_VER 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. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #elif defined _MSC_VER static long double NaNl () { static long double zero = 0.0L; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/nap.h������������������������������������������������������������������0000664�0000000�0000000�00000005174�11671051007�0016572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Assist in file system timestamp tests. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #ifndef GLTEST_NAP_H # define GLTEST_NAP_H /* Sleep long enough to notice a timestamp difference on the file system in the current directory. Assumes that BASE is defined, and requires that the test module depends on usleep. */ static void nap (void) { static long delay; if (!delay) { /* Initialize only once, by sleeping for 20 milliseconds (needed since xfs has a quantization of about 10 milliseconds, even though it has a granularity of 1 nanosecond, and since NTFS has a default quantization of 15.25 milliseconds, even though it has a granularity of 100 nanoseconds). If the seconds differ, repeat the test one more time (in case we crossed a quantization boundary on a file system with 1 second resolution). If we can't observe a difference in only the nanoseconds, then fall back to 1 second if the time is odd, and 2 seconds (needed for FAT) if time is even. */ struct stat st1; struct stat st2; ASSERT (close (creat (BASE "tmp", 0600)) == 0); ASSERT (stat (BASE "tmp", &st1) == 0); ASSERT (unlink (BASE "tmp") == 0); delay = 20000; usleep (delay); ASSERT (close (creat (BASE "tmp", 0600)) == 0); ASSERT (stat (BASE "tmp", &st2) == 0); ASSERT (unlink (BASE "tmp") == 0); if (st1.st_mtime != st2.st_mtime) { /* Seconds differ, give it one more shot. */ st1 = st2; usleep (delay); ASSERT (close (creat (BASE "tmp", 0600)) == 0); ASSERT (stat (BASE "tmp", &st2) == 0); ASSERT (unlink (BASE "tmp") == 0); } if (! (st1.st_mtime == st2.st_mtime && get_stat_mtime_ns (&st1) < get_stat_mtime_ns (&st2))) delay = (st1.st_mtime & 1) ? 1000000 : 2000000; } usleep (delay); } #endif /* GLTEST_NAP_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/signature.h������������������������������������������������������������0000664�0000000�0000000�00000003676�11671051007�0020022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macro for checking that a function declaration is compliant. Copyright (C) 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 <http://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) \ static ret (* _GL_UNUSED signature_check ## id) args = fn #endif /* SIGNATURE_CHECK */ ������������������������������������������������������������������gnulib-20111211-stable/tests/socket-client.h��������������������������������������������������������0000664�0000000�0000000�00000003560�11671051007�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create sockets for use in tests (client side). 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 <http://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-20111211-stable/tests/socket-server.h��������������������������������������������������������0000664�0000000�0000000�00000007373�11671051007�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create sockets for use in tests (server side). 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 <http://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-20111211-stable/tests/test-_Exit.c�����������������������������������������������������������0000664�0000000�0000000�00000002222�11671051007�0020023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of terminating the current process. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-_Exit.sh����������������������������������������������������������0000775�0000000�0000000�00000000056�11671051007�0020221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-_Exit${EXEEXT} test $? = 81 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-accept.c����������������������������������������������������������0000664�0000000�0000000�00000002712�11671051007�0020216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test accepting a connection to a server socket. 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 <http://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 "sockets.h" #include "macros.h" int main (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); errno = 0; ASSERT (accept (99, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } ������������������������������������������������������gnulib-20111211-stable/tests/test-accept4.c���������������������������������������������������������0000664�0000000�0000000�00000003153�11671051007�0020302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test accepting a connection to a server socket. 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 <http://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 "binary-io.h" #include "sockets.h" #include "macros.h" int main (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, O_CLOEXEC | O_BINARY) == -1); ASSERT (errno == EBADF); } { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); errno = 0; ASSERT (accept4 (99, (struct sockaddr *) &addr, &addrlen, O_CLOEXEC | O_BINARY) == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-acos.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of acos() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-acosf.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of acosf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-acosl.c�����������������������������������������������������������0000664�0000000�0000000�00000002250�11671051007�0020055�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of acosl() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-alignof.c���������������������������������������������������������0000664�0000000�0000000�00000003060�11671051007�0020373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <alignof.h>. Copyright (C) 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 <http://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-20111211-stable/tests/test-alloca-opt.c������������������������������������������������������0000664�0000000�0000000�00000002761�11671051007�0021016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of optional automatic memory allocation. Copyright (C) 2005, 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 <http://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 *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 MacOS 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-20111211-stable/tests/test-arcfour.c���������������������������������������������������������0000664�0000000�0000000�00000004157�11671051007�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <string.h> #include "arcfour.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-20111211-stable/tests/test-arctwo.c����������������������������������������������������������0000664�0000000�0000000�00000013702�11671051007�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <string.h> #include "arctwo.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-20111211-stable/tests/test-areadlink-with-size.c���������������������������������������������0000664�0000000�0000000�00000002417�11671051007�0022634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlink_with_size. Copyright (C) 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 <http://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-20111211-stable/tests/test-areadlink.c�������������������������������������������������������0000664�0000000�0000000�00000002603�11671051007�0020710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlink. Copyright (C) 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 <http://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, size_t ignored _GL_UNUSED) { 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-20111211-stable/tests/test-areadlink.h�������������������������������������������������������0000664�0000000�0000000�00000005413�11671051007�0020717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlink and friends. Copyright (C) 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 <http://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-20111211-stable/tests/test-areadlinkat-with-size.c�������������������������������������������0000664�0000000�0000000�00000004761�11671051007�0023165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlinkat_with_size. Copyright (C) 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 <http://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-20111211-stable/tests/test-areadlinkat.c�����������������������������������������������������0000664�0000000�0000000�00000004571�11671051007�0021243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of areadlinkat. Copyright (C) 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 <http://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, size_t ignored _GL_UNUSED) { 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-20111211-stable/tests/test-argmatch.c��������������������������������������������������������0000664�0000000�0000000�00000006212�11671051007�0020544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exact or abbreviated match search. Copyright (C) 1990, 1998-1999, 2001-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 <http://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> #include "argmatch.h" #include <stdlib.h> #include "progname.h" #include "macros.h" /* 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 }; int main (int argc, char *argv[]) { set_program_name (argv[0]); /* Not found. */ ASSERT (ARGMATCH ("klingon", backup_args, backup_vals) == -1); /* Exact match. */ ASSERT (ARGMATCH ("none", backup_args, backup_vals) == 1); ASSERT (ARGMATCH ("nil", backup_args, backup_vals) == 7); /* Too long. */ ASSERT (ARGMATCH ("nilpotent", backup_args, backup_vals) == -1); /* Abbreviated. */ ASSERT (ARGMATCH ("simpl", backup_args, backup_vals) == 3); ASSERT (ARGMATCH ("simp", backup_args, backup_vals) == 3); ASSERT (ARGMATCH ("sim", backup_args, backup_vals) == 3); /* Exact match and abbreviated. */ ASSERT (ARGMATCH ("numbered", backup_args, backup_vals) == 9); ASSERT (ARGMATCH ("numbere", backup_args, backup_vals) == -2); ASSERT (ARGMATCH ("number", backup_args, backup_vals) == -2); ASSERT (ARGMATCH ("numbe", backup_args, backup_vals) == -2); ASSERT (ARGMATCH ("numb", backup_args, backup_vals) == -2); ASSERT (ARGMATCH ("num", backup_args, backup_vals) == -2); ASSERT (ARGMATCH ("nu", backup_args, backup_vals) == -2); ASSERT (ARGMATCH ("n", backup_args, backup_vals) == -2); /* Ambiguous abbreviated. */ ASSERT (ARGMATCH ("ne", backup_args, backup_vals) == -2); /* Ambiguous abbreviated, but same value. */ ASSERT (ARGMATCH ("si", backup_args, backup_vals) == 3); ASSERT (ARGMATCH ("s", backup_args, backup_vals) == 3); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-argp-2.sh���������������������������������������������������������0000775�0000000�0000000�00000006431�11671051007�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for argp. # Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ TMP=argp.$$ unset ARGP_HELP_FMT ERR=0 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' | diff -c $TMP - } #### # Test --usage output cat > $TMP <<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]] [--limerick] [--poem] [--help] [--usage] [--version] ARGS... EOT ./test-argp$EXEEXT --usage | func_compare || ERR=1 #### # Test working usage-indent format cat > $TMP <<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]] [--limerick] [--poem] [--help] [--usage] [--version] ARGS... EOT ARGP_HELP_FMT='usage-indent=0' ./test-argp$EXEEXT --usage | func_compare || ERR=1 #### # Test --help output cat >$TMP <<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. ./test-argp$EXEEXT --help \ | sed 's/^\(Report bugs to \)<[^>]*>.$/\1<>./' | func_compare || ERR=1 #### # Test ambiguous option handling ./test-argp$EXEEXT --optio 2>/dev/null && ERR=1 #### # Run built-in tests ./test-argp$EXEEXT || ERR=1 rm $TMP exit $ERR ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-argp-version-etc-1.sh���������������������������������������������0000775�0000000�0000000�00000002625�11671051007�0022500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for argp-version-etc. # Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. TMP=ave-expected.tmp LC_ALL=C export LC_ALL ERR=0 cat > $TMP <<EOT test-argp-version-etc (PROJECT) VERSION COPYRIGHT Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://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 ./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' | diff -c $TMP - || ERR=1 rm $TMP exit $ERR �����������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-argp-version-etc.c������������������������������������������������0000664�0000000�0000000�00000002363�11671051007�0022146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for argp-version-etc. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "argp-version-etc.h" #include "argp.h" #include "progname.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) { set_program_name (argv[0]); argp_version_setup ("test-argp-version-etc", authors); return argp_parse (&test_argp, argc, argv, 0, NULL, NULL); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-argp.c������������������������������������������������������������0000664�0000000�0000000�00000024341�11671051007�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for argp. Copyright (C) 2006-2007, 2009-2011 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 <http://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 "progname.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; /* fall through */ 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; void fail (const char *msg) { fprintf (stderr, "Test %d: %s\n", test_number, msg); failure_count++; } 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"); } 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"); } 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"); } void test3 (struct argp *argp) { INIT_TEST1 (3, "--file=FILE"); test_file (argp, argc, argv, &test_args); } void test4 (struct argp *argp) { INIT_TEST2 (4, "--file", "FILE"); test_file (argp, argc, argv, &test_args); } void test5 (struct argp *argp) { INIT_TEST1 (5, "--input=FILE"); test_file (argp, argc, argv, &test_args); } void test6 (struct argp *argp) { INIT_TEST2 (6, "--input", "FILE"); test_file (argp, argc, argv, &test_args); } 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"); } } void test7 (struct argp *argp) { INIT_TEST1 (7, "-oARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } void test8 (struct argp *argp) { INIT_TEST2 (8, "-o", "ARG"); test_optional (argp, argc, argv, &test_args, NULL, "ARG"); } void test9 (struct argp *argp) { INIT_TEST1 (9, "--optional=ARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } void test10 (struct argp *argp) { INIT_TEST2 (10, "--optional", "ARG"); test_optional (argp, argc, argv, &test_args, NULL, "ARG"); } void test11 (struct argp *argp) { INIT_TEST1 (11, "--optiona=ARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } void test12 (struct argp *argp) { INIT_TEST3 (12, "--option", "--optional=OPT", "FILE"); test_optional (argp, argc, argv, &test_args, "OPT", "FILE"); } 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"); } 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"); } 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); 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; set_program_name (argv[0]); 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-20111211-stable/tests/test-argv-iter.c�������������������������������������������������������0000664�0000000�0000000�00000005764�11671051007�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test argv iterator Copyright (C) 2008-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 <http://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) { /* set_program_name (argv[0]); placate overzealous "syntax-check" test. */ 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-20111211-stable/tests/test-arpa_inet-c++.cc��������������������������������������������������0000664�0000000�0000000�00000002277�11671051007�0021440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <arpa/inet.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-arpa_inet.c�������������������������������������������������������0000664�0000000�0000000�00000001563�11671051007�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <arpa/inet.h> substitute. 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 <http://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-20111211-stable/tests/test-array-mergesort.c�������������������������������������������������0000664�0000000�0000000�00000016174�11671051007�0022111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of stable-sorting of an array using mergesort. Copyright (C) 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 Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://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-20111211-stable/tests/test-array_list.c������������������������������������������������������0000664�0000000�0000000�00000030447�11671051007�0021136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "gl_array_list.h" #include <stdlib.h> #include "progname.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)); } } int main (int argc, char *argv[]) { gl_list_t list1, list2; set_program_name (argv[0]); /* 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); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); 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: case 12: /* 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 13: 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 14: { 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 15: { 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-20111211-stable/tests/test-array_oset.c������������������������������������������������������0000664�0000000�0000000�00000010210�11671051007�0021117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered set data type implementation. Copyright (C) 2006-2011 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 <http://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 "progname.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_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); } int main (int argc, char *argv[]) { gl_oset_t set1; gl_list_t set2; set_program_name (argv[0]); /* 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 (3); 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; } check_all (set1, set2); } gl_oset_free (set1); gl_list_free (set2); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-asin.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of asin() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-asinf.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0020061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of asinf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-asinl.c�����������������������������������������������������������0000664�0000000�0000000�00000002250�11671051007�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of asinl() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-astrxfrm.c��������������������������������������������������������0000664�0000000�0000000�00000005531�11671051007�0020627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of astrxfrm() function. Copyright (C) 2010-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 <http://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); } /* 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] == '@'); } /* 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] == '@'); } /* 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] == '@'); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-atan.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atan() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-atan2.c�����������������������������������������������������������0000664�0000000�0000000�00000003067�11671051007�0017770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atan2() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-atan2f.c����������������������������������������������������������0000664�0000000�0000000�00000003072�11671051007�0020132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atan2f() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-atanf.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0020052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atanf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-atanl.c�����������������������������������������������������������0000664�0000000�0000000�00000002250�11671051007�0020053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of atanl() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-atexit.c����������������������������������������������������������0000664�0000000�0000000�00000002241�11671051007�0020252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execution of program termination handlers. 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 <http://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-20111211-stable/tests/test-atexit.sh���������������������������������������������������������0000775�0000000�0000000�00000001033�11671051007�0020443�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 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 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 test-atexit 1 if test -f t-atexit.tmp; then Exit 1 fi Exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-avltree_list.c����������������������������������������������������0000664�0000000�0000000�00000041633�11671051007�0021461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "gl_avltree_list.h" #include <stdlib.h> #include "gl_array_list.h" #include "progname.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_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; set_program_name (argv[0]); /* 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); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); 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: case 12: /* 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 13: 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 14: { 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 15: { 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-20111211-stable/tests/test-avltree_oset.c����������������������������������������������������0000664�0000000�0000000�00000007264�11671051007�0021462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered set data type implementation. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "gl_avltree_oset.h" #include <stdlib.h> #include <string.h> #include "gl_array_oset.h" #include "progname.h" #include "macros.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); } int main (int argc, char *argv[]) { gl_oset_t set1, set2; set_program_name (argv[0]); /* 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 (3); 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; } check_all (set1, set2); } gl_oset_free (set1); gl_oset_free (set2); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-avltreehash_list.c������������������������������������������������0000664�0000000�0000000�00000043151�11671051007�0022322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2011 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 <http://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 "progname.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 http://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_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; set_program_name (argv[0]); /* 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); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); 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: case 12: /* 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 13: 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 14: { 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 15: { 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-20111211-stable/tests/test-base32.c����������������������������������������������������������0000664�0000000�0000000�00000015307�11671051007�0020042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Self tests for base32. Copyright (C) 2004, 2008-2011 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 <http://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-20111211-stable/tests/test-base64.c����������������������������������������������������������0000664�0000000�0000000�00000013575�11671051007�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Self tests for base64. Copyright (C) 2004, 2008-2011 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 <http://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-20111211-stable/tests/test-binary-io.c�������������������������������������������������������0000664�0000000�0000000�00000002630�11671051007�0020647�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of binary mode I/O. Copyright (C) 2005, 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 <http://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 () { /* Test the O_BINARY macro. */ { int fd = open ("t-bin-out2.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-out2.tmp", &statbuf) < 0) exit (1); ASSERT (statbuf.st_size == 6); } /* Test the SET_BINARY macro. */ SET_BINARY (1); fputs ("Hello\n", stdout); return 0; } ��������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-binary-io.sh������������������������������������������������������0000775�0000000�0000000�00000000363�11671051007�0021043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-bin-out1.tmp t-bin-out2.tmp" ./test-binary-io${EXEEXT} > t-bin-out1.tmp || exit 1 cmp t-bin-out1.tmp t-bin-out2.tmp > /dev/null || exit 1 rm -fr $tmpfiles exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-bind.c������������������������������������������������������������0000664�0000000�0000000�00000003022�11671051007�0017666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test binding a server socket to a port. 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 <http://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 "sockets.h" #include "macros.h" int main (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); } { errno = 0; ASSERT (bind (99, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-bitrotate.c�������������������������������������������������������0000664�0000000�0000000�00000036414�11671051007�0020762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <bitrotate.h> substitute. 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 <http://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-20111211-stable/tests/test-btowc.c�����������������������������������������������������������0000664�0000000�0000000�00000003310�11671051007�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of unibyte character to wide character. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-btowc1.sh���������������������������������������������������������0000775�0000000�0000000�00000000543�11671051007�0020351�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 \ ./test-btowc${EXEEXT} 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-btowc2.sh���������������������������������������������������������0000775�0000000�0000000�00000000566�11671051007�0020357�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 \ ./test-btowc${EXEEXT} 2 ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-byteswap.c��������������������������������������������������������0000664�0000000�0000000�00000001725�11671051007�0020620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <byteswap.h> substitute. 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 <http://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-20111211-stable/tests/test-c-ctype.c���������������������������������������������������������0000664�0000000�0000000�00000026053�11671051007�0020327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character handling in C locale. Copyright (C) 2005, 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> #include "c-ctype.h" #include <locale.h> #include "macros.h" static void test_all (void) { int c; for (c = -0x80; c < 0x100; c++) { ASSERT (c_isascii (c) == (c >= 0 && c < 0x80)); 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': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ASSERT (c_isalnum (c) == 1); break; default: ASSERT (c_isalnum (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': 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_isalpha (c) == 1); break; default: ASSERT (c_isalpha (c) == 0); break; } switch (c) { case '\t': case ' ': ASSERT (c_isblank (c) == 1); break; default: ASSERT (c_isblank (c) == 0); break; } ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f)); 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); break; default: ASSERT (c_islower (c) == 0); break; } ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' ')); ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f)); ASSERT (c_ispunct (c) == (c_isgraph (c) && !c_isalnum (c))); 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); break; default: ASSERT (c_isupper (c) == 0); 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; } switch (c) { case 'A': ASSERT (c_tolower (c) == 'a'); ASSERT (c_toupper (c) == c); break; case 'B': ASSERT (c_tolower (c) == 'b'); ASSERT (c_toupper (c) == c); break; case 'C': ASSERT (c_tolower (c) == 'c'); ASSERT (c_toupper (c) == c); break; case 'D': ASSERT (c_tolower (c) == 'd'); ASSERT (c_toupper (c) == c); break; case 'E': ASSERT (c_tolower (c) == 'e'); ASSERT (c_toupper (c) == c); break; case 'F': ASSERT (c_tolower (c) == 'f'); ASSERT (c_toupper (c) == c); break; case 'G': ASSERT (c_tolower (c) == 'g'); ASSERT (c_toupper (c) == c); break; case 'H': ASSERT (c_tolower (c) == 'h'); ASSERT (c_toupper (c) == c); break; case 'I': ASSERT (c_tolower (c) == 'i'); ASSERT (c_toupper (c) == c); break; case 'J': ASSERT (c_tolower (c) == 'j'); ASSERT (c_toupper (c) == c); break; case 'K': ASSERT (c_tolower (c) == 'k'); ASSERT (c_toupper (c) == c); break; case 'L': ASSERT (c_tolower (c) == 'l'); ASSERT (c_toupper (c) == c); break; case 'M': ASSERT (c_tolower (c) == 'm'); ASSERT (c_toupper (c) == c); break; case 'N': ASSERT (c_tolower (c) == 'n'); ASSERT (c_toupper (c) == c); break; case 'O': ASSERT (c_tolower (c) == 'o'); ASSERT (c_toupper (c) == c); break; case 'P': ASSERT (c_tolower (c) == 'p'); ASSERT (c_toupper (c) == c); break; case 'Q': ASSERT (c_tolower (c) == 'q'); ASSERT (c_toupper (c) == c); break; case 'R': ASSERT (c_tolower (c) == 'r'); ASSERT (c_toupper (c) == c); break; case 'S': ASSERT (c_tolower (c) == 's'); ASSERT (c_toupper (c) == c); break; case 'T': ASSERT (c_tolower (c) == 't'); ASSERT (c_toupper (c) == c); break; case 'U': ASSERT (c_tolower (c) == 'u'); ASSERT (c_toupper (c) == c); break; case 'V': ASSERT (c_tolower (c) == 'v'); ASSERT (c_toupper (c) == c); break; case 'W': ASSERT (c_tolower (c) == 'w'); ASSERT (c_toupper (c) == c); break; case 'X': ASSERT (c_tolower (c) == 'x'); ASSERT (c_toupper (c) == c); break; case 'Y': ASSERT (c_tolower (c) == 'y'); ASSERT (c_toupper (c) == c); break; case 'Z': ASSERT (c_tolower (c) == 'z'); ASSERT (c_toupper (c) == c); break; case 'a': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'A'); break; case 'b': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'B'); break; case 'c': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'C'); break; case 'd': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'D'); break; case 'e': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'E'); break; case 'f': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'F'); break; case 'g': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'G'); break; case 'h': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'H'); break; case 'i': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'I'); break; case 'j': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'J'); break; case 'k': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'K'); break; case 'l': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'L'); break; case 'm': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'M'); break; case 'n': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'N'); break; case 'o': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'O'); break; case 'p': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'P'); break; case 'q': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'Q'); break; case 'r': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'R'); break; case 's': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'S'); break; case 't': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'T'); break; case 'u': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'U'); break; case 'v': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'V'); break; case 'w': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'W'); break; case 'x': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'X'); break; case 'y': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'Y'); break; case 'z': ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == 'Z'); break; default: ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == c); break; } } } int main () { test_all (); setlocale (LC_ALL, "de_DE"); test_all (); setlocale (LC_ALL, "ja_JP.EUC-JP"); test_all (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-c-stack.c���������������������������������������������������������0000664�0000000�0000000�00000003730�11671051007�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c-stack module. Copyright (C) 2002, 2004, 2006, 2008-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 <http://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" char *program_name; 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 program_name = argv[0]; 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-20111211-stable/tests/test-c-stack.sh��������������������������������������������������������0000775�0000000�0000000�00000000521�11671051007�0020473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="t-c-stack.tmp" ./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-20111211-stable/tests/test-c-stack2.sh�������������������������������������������������������0000775�0000000�0000000�00000001505�11671051007�0020560�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. (./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 ;; 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-20111211-stable/tests/test-c-strcase.sh������������������������������������������������������0000775�0000000�0000000�00000001143�11671051007�0021033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the C locale. ./test-c-strcasecmp${EXEEXT} || exit 1 ./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 ./test-c-strcasecmp${EXEEXT} locale || exit 1 LC_ALL=$LOCALE_FR ./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 ./test-c-strcasecmp${EXEEXT} locale || exit 1 LC_ALL=$LOCALE_TR_UTF8 ./test-c-strncasecmp${EXEEXT} locale || exit 1 fi exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-c-strcasecmp.c����������������������������������������������������0000664�0000000�0000000�00000004144�11671051007�0021344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "c-strcase.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 */ /* 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); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-c-strcasestr.c����������������������������������������������������0000664�0000000�0000000�00000016112�11671051007�0021373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. 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 <http://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); } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-c-strncasecmp.c���������������������������������������������������0000664�0000000�0000000�00000005732�11671051007�0021526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "c-strcase.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 */ /* 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); return 0; } ��������������������������������������gnulib-20111211-stable/tests/test-c-strstr.c��������������������������������������������������������0000664�0000000�0000000�00000006477�11671051007�0020554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. 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 <http://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); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-calloc-gnu.c������������������������������������������������������0000664�0000000�0000000�00000002066�11671051007�0021005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of calloc function. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> int main () { /* Check that calloc (0, 0) is not a NULL pointer. */ if (calloc (0, 0) == NULL) return 1; /* Check that calloc fails when requested to allocate a block of memory larger than SIZE_MAX bytes. */ if (calloc ((size_t) -1 / 8 + 1, 8) != NULL) return 1; return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-canonicalize-lgpl.c�����������������������������������������������0000664�0000000�0000000�00000014310�11671051007�0022347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execution of program termination handlers. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #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" #include "macros.h" #define BASE "t-can-lgpl.tmp" static void * null_ptr (void) { return NULL; } 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 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); errno = 0; result = canonicalize_file_name (null_ptr ()); ASSERT (result == NULL); ASSERT (errno == EINVAL); } /* 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. */ { char *result; errno = 0; result = canonicalize_file_name (BASE "/huk/"); ASSERT (result == NULL); 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 // 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); if (SAME_INODE (st1, st2)) { ASSERT (strcmp (result1, "/") == 0); ASSERT (strcmp (result2, "/") == 0); } else { 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-20111211-stable/tests/test-canonicalize.c����������������������������������������������������0000664�0000000�0000000�00000026024�11671051007�0021420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of execution of file name canonicalization. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #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" #include "macros.h" #define BASE "t-can.tmp" static void * null_ptr (void) { return NULL; } 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 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); errno = 0; result1 = canonicalize_file_name (null_ptr ()); ASSERT (result1 == NULL); ASSERT (errno == EINVAL); errno = 0; result2 = canonicalize_filename_mode (NULL, CAN_EXISTING); 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 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. */ { char *result1; char *result2; errno = 0; result1 = canonicalize_file_name (BASE "/huk/"); ASSERT (result1 == NULL); ASSERT (errno == ENOTDIR); errno = 0; result2 = canonicalize_filename_mode (BASE "/huk/", CAN_EXISTING); ASSERT (result2 == NULL); 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 // 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-20111211-stable/tests/test-carray_list.c�����������������������������������������������������0000664�0000000�0000000�00000041400�11671051007�0021270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "gl_carray_list.h" #include <stdlib.h> #include "gl_array_list.h" #include "progname.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_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; set_program_name (argv[0]); /* 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); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); 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: case 12: /* 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 13: 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 14: { 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 15: { 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-20111211-stable/tests/test-cbrt.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cbrt() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = cbrt (x); ASSERT (y >= 0.8434326653 && y <= 0.8434326654); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ceil-ieee.c�������������������������������������������������������0000664�0000000�0000000�00000002716�11671051007�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "minus-zero.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)); return 0; } ��������������������������������������������������gnulib-20111211-stable/tests/test-ceil1.c�����������������������������������������������������������0000664�0000000�0000000�00000003767�11671051007�0017767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. 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 <http://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-20111211-stable/tests/test-ceil2.c�����������������������������������������������������������0000664�0000000�0000000�00000011724�11671051007�0017760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. 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 <http://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" /* 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-20111211-stable/tests/test-ceilf-ieee.c������������������������������������������������������0000664�0000000�0000000�00000003700�11671051007�0020744�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "minus-zero.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, char **argv _GL_UNUSED) { 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)); return 0; } ����������������������������������������������������������������gnulib-20111211-stable/tests/test-ceilf1.c����������������������������������������������������������0000664�0000000�0000000�00000005076�11671051007�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. 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 <http://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, char **argv _GL_UNUSED) { 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-20111211-stable/tests/test-ceilf2.c����������������������������������������������������������0000664�0000000�0000000�00000011726�11671051007�0020130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. 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 <http://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" /* 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-20111211-stable/tests/test-ceill-ieee.c������������������������������������������������������0000664�0000000�0000000�00000003053�11671051007�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "fpucw.h" #include "minus-zero.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)); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ceill.c�����������������������������������������������������������0000664�0000000�0000000�00000004225�11671051007�0020050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards positive infinity. 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 <http://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-20111211-stable/tests/test-chdir.c�����������������������������������������������������������0000664�0000000�0000000�00000001667�11671051007�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing to a directory. 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 <http://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-20111211-stable/tests/test-chown.c�����������������������������������������������������������0000664�0000000�0000000�00000002465�11671051007�0020102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of chown. Copyright (C) 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 <http://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-20111211-stable/tests/test-chown.h�����������������������������������������������������������0000664�0000000�0000000�00000017674�11671051007�0020117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of chown. Copyright (C) 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 <http://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, which has no concept of groups. */ result = func (BASE "dir", st1.st_uid, getegid ()); if (result == -1 && errno == ENOSYS) { 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-20111211-stable/tests/test-cloexec.c���������������������������������������������������������0000664�0000000�0000000�00000007661�11671051007�0020411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating non-inheritable file descriptors. Copyright (C) 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 <http://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 __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" #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 __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 setmode(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 = setmode (fd, O_BINARY); setmode (fd, value); return mode == value; } int main (void) { const char *file = "test-cloexec.tmp"; int fd = creat (file, 0600); int fd2; /* 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 __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. */ setmode (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); setmode (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 (10000000, 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 (10000000) == -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-20111211-stable/tests/test-close.c�����������������������������������������������������������0000664�0000000�0000000�00000002154�11671051007�0020064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test closing a file or socket. 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 <http://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); } { errno = 0; ASSERT (close (99) == -1); ASSERT (errno == EBADF); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-closein.c���������������������������������������������������������0000664�0000000�0000000�00000002775�11671051007�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of closein module. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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" char *program_name; /* 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); program_name = argv[0]; /* close_stdin currently relies on ftell, but mingw ftell is unreliable on text mode input. */ SET_BINARY (0); if (argc > 2) close (0); if (argc > 1) ignore_value (fread (buf, 1, 6, stdin)); return 0; } ���gnulib-20111211-stable/tests/test-closein.sh��������������������������������������������������������0000775�0000000�0000000�00000001527�11671051007�0020611�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; followon process must see remaining data (test-closein; cat) < in.tmp > out1.tmp || fail=1 cmp out1.tmp in.tmp || fail=1 (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 | test-closein || fail=1 cat in.tmp 2>/dev/null | test-closein consume || fail=1 # Test for lack of error when nothing is read test-closein </dev/null || fail=1 test-closein <&- || fail=1 # Test for no error when EOF is read early test-closein consume </dev/null || fail=1 # Test for error when read fails because no file available test-closein consume close <&- 2>/dev/null && fail=1 Exit $fail �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-cond.c������������������������������������������������������������0000664�0000000�0000000�00000007634�11671051007�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of condition variables in multithreaded situations. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #if USE_POSIX_THREADS || USE_SOLARIS_THREADS || USE_PTH_THREADS || USE_WIN32_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 "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 */ #include <unistd.h> 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; } 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); remain = 2; 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 TEST_PTH_THREADS if (!pth_init ()) abort (); #endif #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-20111211-stable/tests/test-connect.c���������������������������������������������������������0000664�0000000�0000000�00000003060�11671051007�0020405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test connecting a client socket. 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 <http://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 "sockets.h" #include "macros.h" int main (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); } { errno = 0; ASSERT (connect (99, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-copy-acl-1.sh�����������������������������������������������������0000775�0000000�0000000�00000000327�11671051007�0021017�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. if test -d /var/tmp; then TMPDIR=/var/tmp else TMPDIR=/tmp fi export TMPDIR exec "${srcdir}/test-copy-acl.sh" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-copy-acl-2.sh�����������������������������������������������������0000775�0000000�0000000�00000000270�11671051007�0021015�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. TMPDIR=`pwd` export TMPDIR exec "${srcdir}/test-copy-acl.sh" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-copy-acl.c��������������������������������������������������������0000664�0000000�0000000�00000003342�11671051007�0020466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copying of files. Copyright (C) 2008-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 <http://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 "progname.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; set_program_name (argv[0]); 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-20111211-stable/tests/test-copy-acl.sh�������������������������������������������������������0000775�0000000�0000000�00000042345�11671051007�0020667�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=`pwd` 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 Win32 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 # MacOS 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" "$builddir"/test-copy-acl${EXEEXT} "$1" "$2" || exit 1 "$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-20111211-stable/tests/test-copy-file-1.sh����������������������������������������������������0000775�0000000�0000000�00000000331�11671051007�0021172�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. if test -d /var/tmp; then TMPDIR=/var/tmp else TMPDIR=/tmp fi export TMPDIR exec "${srcdir}/test-copy-file.sh" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-copy-file-2.sh����������������������������������������������������0000775�0000000�0000000�00000000272�11671051007�0021177�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. TMPDIR=`pwd` export TMPDIR exec "${srcdir}/test-copy-file.sh" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-copy-file.c�������������������������������������������������������0000664�0000000�0000000�00000002122�11671051007�0020641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copying of files. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include "copy-file.h" #include "progname.h" #include "macros.h" int main (int argc, char *argv[]) { const char *file1; const char *file2; set_program_name (argv[0]); ASSERT (argc == 3); file1 = argv[1]; file2 = argv[2]; copy_file_preserving (file1, file2); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-copy-file.sh������������������������������������������������������0000775�0000000�0000000�00000042227�11671051007�0021046�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=`pwd` 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 Win32 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 # MacOS 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 () { "$builddir"/test-copy-file${EXEEXT} "$1" "$2" || exit 1 if test "$USE_ACL" != 0; then "$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-20111211-stable/tests/test-copysign.c��������������������������������������������������������0000664�0000000�0000000�00000004606�11671051007�0020616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copysign() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-copysignf.c�������������������������������������������������������0000664�0000000�0000000�00000004664�11671051007�0020770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copysignf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-copysignl.c�������������������������������������������������������0000664�0000000�0000000�00000004736�11671051007�0020776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of copysignl() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-cos.c�������������������������������������������������������������0000664�0000000�0000000�00000002071�11671051007�0017541�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cos() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-cosf.c������������������������������������������������������������0000664�0000000�0000000�00000002072�11671051007�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cosf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-cosh.c������������������������������������������������������������0000664�0000000�0000000�00000002072�11671051007�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cosh() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-coshf.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0020063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of coshf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-cosl.c������������������������������������������������������������0000664�0000000�0000000�00000002245�11671051007�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of cosl() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-count-one-bits.c��������������������������������������������������0000664�0000000�0000000�00000004760�11671051007�0021632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * 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 <http://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) #ifndef ULLONG_MAX # define HALF (1ULL << (sizeof (unsigned long long int) * CHAR_BIT - 1)) # define ULLONG_MAX (HALF - 1 + HALF) #endif 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++) \ { \ TYPE value = rand () ^ (rand () << 31 << 1); \ 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); #ifdef HAVE_UNSIGNED_LONG_LONG_INT TEST_COUNT_ONE_BITS (count_one_bits_ll, unsigned long long int, ULLONG_BIT, ULLONG_MAX, 1ULL); #endif return 0; } ����������������gnulib-20111211-stable/tests/test-crc.c�������������������������������������������������������������0000664�0000000�0000000�00000002624�11671051007�0017530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005-2007, 2010-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 <http://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-20111211-stable/tests/test-ctype.c�����������������������������������������������������������0000664�0000000�0000000�00000001540�11671051007�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <ctype.h> substitute. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <ctype.h> int main (void) { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-des.c�������������������������������������������������������������0000664�0000000�0000000�00000015014�11671051007�0017531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2007, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ /* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */ #include <config.h> #include <stdio.h> #include <string.h> #include "des.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-20111211-stable/tests/test-di-set.c����������������������������������������������������������0000664�0000000�0000000�00000003332�11671051007�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the di-set module. Copyright (C) 2010-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 <http://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); 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-20111211-stable/tests/test-dirent-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000003034�11671051007�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <dirent.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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" SIGNATURE_CHECK (GNULIB_NAMESPACE::closedir, int, (DIR *)); #if GNULIB_TEST_FDOPENDIR SIGNATURE_CHECK (GNULIB_NAMESPACE::fdopendir, DIR *, (int)); #endif SIGNATURE_CHECK (GNULIB_NAMESPACE::opendir, DIR *, (const char *)); #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-20111211-stable/tests/test-dirent-safer.c����������������������������������������������������0000664�0000000�0000000�00000005463�11671051007�0021350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that directory streams leave standard fds alone. Copyright (C) 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 <http://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> #include "unistd-safer.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 = dup_safer (dfd); 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-20111211-stable/tests/test-dirent.c����������������������������������������������������������0000664�0000000�0000000�00000001743�11671051007�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <dirent.h> substitute. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <dirent.h> /* Check for existence of required types. */ static DIR *dir _GL_UNUSED; static struct dirent d; static ino_t i; int main (void) { return d.d_name[0] + i; } �����������������������������gnulib-20111211-stable/tests/test-dirname.c���������������������������������������������������������0000664�0000000�0000000�00000020563�11671051007�0020402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the gnulib dirname module. Copyright (C) 2005-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 <http://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 %ld\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 %ld\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-20111211-stable/tests/test-dprintf-posix.c���������������������������������������������������0000664�0000000�0000000�00000012436�11671051007�0021571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible dprintf() function. 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 <http://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-20111211-stable/tests/test-dprintf-posix.sh��������������������������������������������������0000775�0000000�0000000�00000000571�11671051007�0021761�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" ./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-20111211-stable/tests/test-dprintf-posix2.c��������������������������������������������������0000664�0000000�0000000�00000006371�11671051007�0021654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible dprintf() function. Copyright (C) 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 <http://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-20111211-stable/tests/test-dprintf-posix2.sh�������������������������������������������������0000775�0000000�0000000�00000001145�11671051007�0022041�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test against a memory leak. (./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 ./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-20111211-stable/tests/test-dprintf.c���������������������������������������������������������0000664�0000000�0000000�00000002243�11671051007�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of dprintf() function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (dprintf, int, (int, const char *, ...)); #include <errno.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); } { errno = 0; ASSERT (dprintf (99, "test") == -1); ASSERT (errno == EBADF); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-dup-safer.c�������������������������������������������������������0000664�0000000�0000000�00000011470�11671051007�0020646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that dup_safer leaves standard fds alone. Copyright (C) 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 <http://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 "binary-io.h" #include "cloexec.h" #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" #endif #if !O_BINARY # define setmode(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 __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 = setmode (fd, O_BINARY); setmode (fd, value); return mode == value; } #define witness "test-dup-safer.txt" int main (void) { int i; int fd; /* 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 (10000000) == -1); ASSERT (errno == EBADF); close (fd + 1); errno = 0; ASSERT (dup (fd + 1) == -1); ASSERT (errno == EBADF); /* Preserve text vs. binary. */ setmode (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); setmode (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-20111211-stable/tests/test-dup.c�������������������������������������������������������������0000664�0000000�0000000�00000002153�11671051007�0017546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating a file descriptor. 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 <http://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); } { errno = 0; ASSERT (dup (99) == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-dup2.c������������������������������������������������������������0000664�0000000�0000000�00000013161�11671051007�0017631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating file descriptors. Copyright (C) 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 <http://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> #include "binary-io.h" #if GNULIB_TEST_CLOEXEC # include "cloexec.h" #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" #endif #include "macros.h" /* Return non-zero if FD is open. */ static int is_open (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 setmode(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 = setmode (fd, O_BINARY); setmode (fd, value); return mode == value; } int main (void) { const char *file = "test-dup2.tmp"; char buffer[1]; 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); 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); errno = 0; ASSERT (dup2 (fd, 10000000) == -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. */ setmode (fd, O_BINARY); ASSERT (is_mode (fd, O_BINARY)); ASSERT (dup2 (fd, fd + 1) == fd + 1); ASSERT (is_mode (fd + 1, O_BINARY)); setmode (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-20111211-stable/tests/test-dup3.c������������������������������������������������������������0000664�0000000�0000000�00000010740�11671051007�0017632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating file descriptors. Copyright (C) 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 <http://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 __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" #endif #include "binary-io.h" #include "macros.h" /* Return true if FD is open. */ static bool is_open (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 __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; #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); errno = 0; ASSERT (dup3 (fd, 10000000, 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-20111211-stable/tests/test-duplocale.c�������������������������������������������������������0000664�0000000�0000000�00000006576�11671051007�0020743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of duplicating a locale object. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <locale.h> #if HAVE_DUPLOCALE #include "signature.h" SIGNATURE_CHECK (duplocale, locale_t, (locale_t)); #include <langinfo.h> #include <monetary.h> #include <stdio.h> #include <string.h> #include "macros.h" struct locale_dependent_values { char monetary[100]; char numeric[100]; char time[100]; }; static void get_locale_dependent_values (struct locale_dependent_values *result) { strfmon (result->monetary, sizeof (result->monetary), "%n", 123.75); /* result->monetary is usually "$123.75" */ snprintf (result->numeric, sizeof (result->numeric), "%g", 3.5); /* result->numeric is usually "3,5" */ strcpy (result->time, nl_langinfo (MON_1)); /* result->time is usually "janvier" */ } int main () { 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); /* Use a per-thread locale. */ uselocale (newlocale (LC_ALL_MASK, "es_ES.UTF-8", NULL)); /* 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); ASSERT (strcmp (results.monetary, expected_results.monetary) == 0); 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); ASSERT (strcmp (results.monetary, expected_results.monetary) == 0); ASSERT (strcmp (results.numeric, expected_results.numeric) == 0); ASSERT (strcmp (results.time, expected_results.time) == 0); } return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: function duplocale not available\n"); return 77; } #endif ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-echo.sh�����������������������������������������������������������0000775�0000000�0000000�00000012414�11671051007�0020070�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-20111211-stable/tests/test-environ.c���������������������������������������������������������0000664�0000000�0000000�00000002727�11671051007�0020445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of environ variable. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-erf.c�������������������������������������������������������������0000664�0000000�0000000�00000002071�11671051007�0017531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of erf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-erfc.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of erfc() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-errno.c�����������������������������������������������������������0000664�0000000�0000000�00000005471�11671051007�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <errno.h> substitute. Copyright (C) 2008-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 <http://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; /* 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-20111211-stable/tests/test-exclude.c���������������������������������������������������������0000664�0000000�0000000�00000006261�11671051007�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for exclude. Copyright (C) 2009-2011 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 <http://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 "progname.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 (); set_program_name (argv[0]); 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)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-exclude1.sh�������������������������������������������������������0000775�0000000�0000000�00000002426�11671051007�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2011 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 <http://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 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-20111211-stable/tests/test-exclude2.sh�������������������������������������������������������0000775�0000000�0000000�00000002461�11671051007�0020666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2011 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 <http://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 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-20111211-stable/tests/test-exclude3.sh�������������������������������������������������������0000775�0000000�0000000�00000002427�11671051007�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2011 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 <http://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 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-20111211-stable/tests/test-exclude4.sh�������������������������������������������������������0000775�0000000�0000000�00000002340�11671051007�0020664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2011 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 <http://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 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-20111211-stable/tests/test-exclude5.sh�������������������������������������������������������0000775�0000000�0000000�00000002415�11671051007�0020670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2011 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 <http://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 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-20111211-stable/tests/test-exclude6.sh�������������������������������������������������������0000775�0000000�0000000�00000002343�11671051007�0020671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2011 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 <http://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 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-20111211-stable/tests/test-exclude7.sh�������������������������������������������������������0000775�0000000�0000000�00000002444�11671051007�0020674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2009-2011 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 <http://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: 1 bar: 0 EOT test-exclude in -include in -- bar > out || exit $? 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-20111211-stable/tests/test-exclude8.sh�������������������������������������������������������0000775�0000000�0000000�00000002402�11671051007�0020667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for exclude. # Copyright (C) 2010-2011 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 <http://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 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-20111211-stable/tests/test-exp.c�������������������������������������������������������������0000664�0000000�0000000�00000002067�11671051007�0017556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of exp() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = exp (x); ASSERT (y >= 1.822118800 && y <= 1.822118801); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-expf.c������������������������������������������������������������0000664�0000000�0000000�00000002072�11671051007�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expf() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = expf (x); ASSERT (y >= 1.8221188f && y <= 1.8221189f); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-expl.c������������������������������������������������������������0000664�0000000�0000000�00000002243�11671051007�0017726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of expl() function. Copyright (C) 2010-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 <http://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 "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 = expl (x); ASSERT (y >= 1.822118800L && y <= 1.822118801L); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fabs.c������������������������������������������������������������0000664�0000000�0000000�00000002177�11671051007�0017677�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabs() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; 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); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fabsf.c�����������������������������������������������������������0000664�0000000�0000000�00000002210�11671051007�0020031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fabsf() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile float x; float y; 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); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-faccessat.c�������������������������������������������������������0000664�0000000�0000000�00000002321�11671051007�0020707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test checking user's permissions for a file. 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 <http://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" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (faccessat (-1, "foo", F_OK, 0) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (faccessat (99, "foo", F_OK, 0) == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fbufmode.c��������������������������������������������������������0000664�0000000�0000000�00000003445�11671051007�0020552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fbufmode() function. 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 <http://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" int main () { FILE *fp; char buf[5]; /* 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; /* Open it for reading. */ fp = fopen (TESTFILE, "r"); if (setvbuf (fp, NULL, _IONBF, 0)) goto skip; ASSERT (fbufmode (fp) == _IONBF); /* This setvbuf call can fail, e.g. on HP-UX 11. */ if (setvbuf (fp, buf, _IOLBF, 5) == 0) { /* mingw's setvbuf implements _IOLBF the same way as _IOFBF. */ ASSERT (fbufmode (fp) == _IOLBF || fbufmode (fp) == _IOFBF); } /* This setvbuf call can fail, e.g. on HP-UX 11. */ if (setvbuf (fp, buf, _IOFBF, 5) == 0) { ASSERT (fbufmode (fp) == _IOFBF); } fclose (fp); return 0; skip: fprintf (stderr, "Skipping test: file operations failed.\n"); return 77; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fchdir.c����������������������������������������������������������0000664�0000000�0000000�00000005571�11671051007�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing to a directory named by a file descriptor. Copyright (C) 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 <http://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); } { 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-20111211-stable/tests/test-fchmod.c����������������������������������������������������������0000664�0000000�0000000�00000002217�11671051007�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing the protections of a file. 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 <http://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 "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (fchmod (-1, 0600) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (fchmod (99, 0600) == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fchmodat.c��������������������������������������������������������0000664�0000000�0000000�00000002332�11671051007�0020542�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing the protections of a file relative to an open directory. 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 <http://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 "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (fchmodat (-1, "foo", 0600, 0) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (fchmodat (99, "foo", 0600, 0) == -1); ASSERT (errno == EBADF); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fchown.c����������������������������������������������������������0000664�0000000�0000000�00000002255�11671051007�0020245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fchown. 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 <http://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); } { errno = 0; ASSERT (fchown (99, getuid (), getgid ()) == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fchownat.c��������������������������������������������������������0000664�0000000�0000000�00000005217�11671051007�0020573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fchownat. Copyright (C) 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 <http://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 "progname.h" #include "stat-time.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-fchownat.t" #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) { return chownat (dfd, name, user, group); } /* Wrapper around fchownat to test lchown behavior. */ static int do_lchown (char const *name, uid_t user, gid_t group) { return lchownat (dfd, name, user, group); } int main (int argc _GL_UNUSED, char *argv[]) { int result1; /* Skip because of no chown/symlink support. */ int result2; /* Skip because of no lchown support. */ set_program_name (argv[0]); /* 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); } { 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-20111211-stable/tests/test-fclose.c����������������������������������������������������������0000664�0000000�0000000�00000005521�11671051007�0020233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fclose module. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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 = fdopen (99, "r"); if (fp != NULL) { errno = 0; ASSERT (fclose (fp) == EOF); ASSERT (errno == EBADF); } } /* Clean up. */ ASSERT (remove (BASE) == 0); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fcntl-h-c++.cc����������������������������������������������������0000664�0000000�0000000�00000002317�11671051007�0021024�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <fcntl.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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_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-20111211-stable/tests/test-fcntl-h.c���������������������������������������������������������0000664�0000000�0000000�00000005235�11671051007�0020315�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <fcntl.h> substitute. 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 <http://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_NDELAY | O_NOATIME | O_NONBLOCK | O_NOCTTY | O_NOFOLLOW | O_NOLINKS | 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_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_NOLINKS case O_NOLINKS: #endif #if O_RSYNC && O_RSYNC != O_DSYNC case O_RSYNC: #endif #if O_SYNC && 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-20111211-stable/tests/test-fcntl-safer.c�����������������������������������������������������0000664�0000000�0000000�00000002041�11671051007�0021156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file descriptor. 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 <http://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-20111211-stable/tests/test-fcntl.c�����������������������������������������������������������0000664�0000000�0000000�00000023462�11671051007�0020072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fcntl(2). Copyright (C) 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 <http://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 __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" #endif #include "binary-io.h" #include "macros.h" #if !O_BINARY # define setmode(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 __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 = setmode (fd, O_BINARY); setmode (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 ; } } int main (void) { const char *file = "test-fcntl.tmp"; int fd; /* 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 (10000000, 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 (10000000, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); /* For F_DUPFD*, the destination must be valid. */ ASSERT (getdtablesize () < 10000000); errno = 0; ASSERT (fcntl (fd, F_DUPFD, -1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD, 10000000) == -1); ASSERT (errno == EINVAL); ASSERT (getdtablesize () < 10000000); errno = 0; ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, -1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, 10000000) == -1); ASSERT (errno == EINVAL); /* For F_DUPFD*, check for correct inheritance, as well as preservation of text vs. binary. */ setmode (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); setmode (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 (10000000, 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 (10000000, 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 (10000000, 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 (10000000, 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 (10000000, 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 (10000000, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); #endif /* Cleanup. */ ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fdatasync.c�������������������������������������������������������0000664�0000000�0000000�00000004201�11671051007�0020726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fdatasync() function. Copyright (C) 2008-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 <http://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 MacOS 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); } { 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-20111211-stable/tests/test-fdopen.c����������������������������������������������������������0000664�0000000�0000000�00000002406�11671051007�0020232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test opening a stream with a file descriptor. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fdopen, FILE *, (int, const char *)); #include <errno.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { FILE *fp; errno = 0; fp = fdopen (-1, "r"); if (fp == NULL) ASSERT (errno == EBADF); else fclose (fp); } { FILE *fp; errno = 0; fp = fdopen (99, "r"); if (fp == NULL) ASSERT (errno == EBADF); else fclose (fp); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fdopendir.c�������������������������������������������������������0000664�0000000�0000000�00000004154�11671051007�0020733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test opening a directory stream from a file descriptor. Copyright (C) 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 <http://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 "progname.h" #include "macros.h" int main (int argc _GL_UNUSED, char *argv[]) { DIR *d; int fd; set_program_name (argv[0]); /* 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); } { errno = 0; ASSERT (fdopendir (99) == NULL); ASSERT (errno == EBADF); } /* This should work. */ fd = open (".", O_RDONLY); ASSERT (0 <= fd); d = fdopendir (fd); /* We know that fd is now out of our reach, but it is not specified whether it is closed now or at the closedir. We also can't guarantee whether dirfd returns fd, some other descriptor, or -1. */ ASSERT (d); 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-20111211-stable/tests/test-fdutimensat.c�����������������������������������������������������0000664�0000000�0000000�00000010551�11671051007�0021302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fdutimensat. Copyright (C) 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 <http://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] = { { Y2K, 0 }, { Y2K, 0 } }; struct stat st; 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-20111211-stable/tests/test-fflush.c����������������������������������������������������������0000664�0000000�0000000�00000012137�11671051007�0020250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fflush() function. 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 <http://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 = 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-20111211-stable/tests/test-fflush2.c���������������������������������������������������������0000664�0000000�0000000�00000006376�11671051007�0020342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fflush() function. Copyright (C) 2008-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 <http://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 (0); if (argc > 1) switch (argv[1][0]) { case '1': /* Check fflush after a backup ungetc() call. This is case 1a in terms of <http://lists.gnu.org/archive/html/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 <http://lists.gnu.org/archive/html/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 <http://www.opengroup.org/susv3/functions/ungetc.html>: "The value of the file-position indicator for the stream after reading or discarding all pushed-back bytes shall be the same as it was before the bytes were pushed back." <http://www.opengroup.org/austin/aardvark/latest/xshbug3.txt> "[After fflush(),] the file offset of the underlying open file description shall be set to the file position of the stream, and 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-20111211-stable/tests/test-fflush2.sh��������������������������������������������������������0000775�0000000�0000000�00000000526�11671051007�0020524�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. ./test-fflush2${EXEEXT} 1 < "$srcdir/test-fflush2.sh" || exit $? ./test-fflush2${EXEEXT} 2 < "$srcdir/test-fflush2.sh" || exit $? #cat "$srcdir/test-fflush2.sh" | ./test-fflush2${EXEEXT} || exit $? exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ffs.c�������������������������������������������������������������0000664�0000000�0000000�00000003235�11671051007�0017536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * 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 <http://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-20111211-stable/tests/test-ffsl.c������������������������������������������������������������0000664�0000000�0000000�00000003313�11671051007�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * 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 <http://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 (i = -128; i <= 128; i++) ASSERT (ffsl (i) == naive (i)); 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-20111211-stable/tests/test-ffsll.c�����������������������������������������������������������0000664�0000000�0000000�00000003372�11671051007�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * 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 <http://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-20111211-stable/tests/test-fgetc.c�����������������������������������������������������������0000664�0000000�0000000�00000004760�11671051007�0020054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fgetc() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fgetc, int, (FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #include "msvc-inval.h" #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 = 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-20111211-stable/tests/test-file-has-acl-1.sh�������������������������������������������������0000775�0000000�0000000�00000000337�11671051007�0021536�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. if test -d /var/tmp; then TMPDIR=/var/tmp else TMPDIR=/tmp fi export TMPDIR exec "${srcdir}/test-file-has-acl.sh" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-file-has-acl-2.sh�������������������������������������������������0000775�0000000�0000000�00000000300�11671051007�0021525�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. TMPDIR=`pwd` export TMPDIR exec "${srcdir}/test-file-has-acl.sh" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-file-has-acl.c����������������������������������������������������0000664�0000000�0000000�00000003335�11671051007�0021206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for presence of ACL. Copyright (C) 2008-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 <http://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. */ signal (SIGALRM, SIG_DFL); alarm (5); #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-20111211-stable/tests/test-file-has-acl.sh���������������������������������������������������0000775�0000000�0000000�00000023433�11671051007�0021402�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=`pwd` 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 Win32 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 # MacOS 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=`"$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-20111211-stable/tests/test-filenamecat.c�����������������������������������������������������0000664�0000000�0000000�00000003613�11671051007�0021230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of concatenation of two arbitrary file names. Copyright (C) 1996-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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include "filenamecat.h" #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "progname.h" int main (int argc _GL_UNUSED, 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"}, {"/", "/", "/"}, {"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; set_program_name (argv[0]); 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); if (strcmp (res, t[2]) != 0) { fprintf (stderr, "test #%u: got %s, expected %s\n", i, res, t[2]); fail = true; } } exit (fail ? EXIT_FAILURE : EXIT_SUCCESS); } ���������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-filevercmp.c������������������������������������������������������0000664�0000000�0000000�00000005471�11671051007�0021120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of filevercmp() function. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 "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-20111211-stable/tests/test-float.c�����������������������������������������������������������0000664�0000000�0000000�00000021617�11671051007�0020071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <float.h> substitute. 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 <http://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-20111211-stable/tests/test-flock.c�����������������������������������������������������������0000664�0000000�0000000�00000007427�11671051007�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of flock() function. Copyright (C) 2008-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 <http://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__ /* Invalid operation codes are rejected by the Linux implementation and by the gnulib replacement, but not by the MacOS 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-20111211-stable/tests/test-floor-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002724�11671051007�0021010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "minus-zero.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)); return 0; } ��������������������������������������������gnulib-20111211-stable/tests/test-floor1.c����������������������������������������������������������0000664�0000000�0000000�00000004040�11671051007�0020155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. 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 <http://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, char **argv _GL_UNUSED) { /* 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-20111211-stable/tests/test-floor2.c����������������������������������������������������������0000664�0000000�0000000�00000012003�11671051007�0020154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. 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 <http://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" /* 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-20111211-stable/tests/test-floorf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003712�11671051007�0021154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "minus-zero.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, char **argv _GL_UNUSED) { 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)); return 0; } ������������������������������������������������������gnulib-20111211-stable/tests/test-floorf1.c���������������������������������������������������������0000664�0000000�0000000�00000005137�11671051007�0020333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. 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 <http://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, char **argv _GL_UNUSED) { 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-20111211-stable/tests/test-floorf2.c���������������������������������������������������������0000664�0000000�0000000�00000011620�11671051007�0020326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. 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 <http://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" /* 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-20111211-stable/tests/test-floorl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003061�11671051007�0021157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "fpucw.h" #include "minus-zero.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)); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-floorl.c����������������������������������������������������������0000664�0000000�0000000�00000004262�11671051007�0020256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards negative infinity. 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 <http://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-20111211-stable/tests/test-fma1.c������������������������������������������������������������0000664�0000000�0000000�00000002271�11671051007�0017603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fma(). 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 <http://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-20111211-stable/tests/test-fma1.h������������������������������������������������������������0000664�0000000�0000000�00000011256�11671051007�0017613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fused multiply-add. 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 <http://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-20111211-stable/tests/test-fma2.c������������������������������������������������������������0000664�0000000�0000000�00000002425�11671051007�0017605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fma(). 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 <http://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-20111211-stable/tests/test-fma2.h������������������������������������������������������������0000664�0000000�0000000�00000060173�11671051007�0017616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fused multiply-add. 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 <http://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-20111211-stable/tests/test-fmaf1.c�����������������������������������������������������������0000664�0000000�0000000�00000002272�11671051007�0017752�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmaf(). 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 <http://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-20111211-stable/tests/test-fmaf2.c�����������������������������������������������������������0000664�0000000�0000000�00000002432�11671051007�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmaf(). 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 <http://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-20111211-stable/tests/test-fmal1.c�����������������������������������������������������������0000664�0000000�0000000�00000002452�11671051007�0017760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmal(). 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 <http://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-20111211-stable/tests/test-fmal2.c�����������������������������������������������������������0000664�0000000�0000000�00000002570�11671051007�0017762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmal(). 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 <http://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-20111211-stable/tests/test-fmod.c������������������������������������������������������������0000664�0000000�0000000�00000002163�11671051007�0017704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmod() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; volatile double y; double z; int main () { /* A particular value. */ x = 9.245907126; y = 3.141592654; z = fmod (x, y); ASSERT (z >= 2.962721817 && z <= 2.962721819); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fmodf.c�����������������������������������������������������������0000664�0000000�0000000�00000002155�11671051007�0020053�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fmodf() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile float x; volatile float y; float z; int main () { /* A particular value. */ x = 9.245907f; y = 3.141593f; z = fmodf (x, y); ASSERT (z >= 2.962720f && z <= 2.962722f); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fnmatch.c���������������������������������������������������������0000664�0000000�0000000�00000003475�11671051007�0020406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fnmatch string matching function. Copyright (C) 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 <http://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); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fopen-safer.c�����������������������������������������������������0000664�0000000�0000000�00000001660�11671051007�0021165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. 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 <http://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-20111211-stable/tests/test-fopen.c�����������������������������������������������������������0000664�0000000�0000000�00000001777�11671051007�0020100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. 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 <http://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-20111211-stable/tests/test-fopen.h�����������������������������������������������������������0000664�0000000�0000000�00000004113�11671051007�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. 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 <http://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); /* 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); /* /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-20111211-stable/tests/test-forkpty.c���������������������������������������������������������0000664�0000000�0000000�00000002434�11671051007�0020456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pty.h and forkpty function. Copyright (C) 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 <http://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-20111211-stable/tests/test-fpending.c��������������������������������������������������������0000664�0000000�0000000�00000002056�11671051007�0020552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Ensure that __fpending works. Copyright (C) 2004, 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 <http://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-20111211-stable/tests/test-fpending.sh�������������������������������������������������������0000775�0000000�0000000�00000000225�11671051007�0020741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfile= trap 'rm -fr $tmpfile' 1 2 3 15 tmpfile=test-fpending.t ./test-fpending${EXEEXT} > $tmpfile || exit 1 rm -fr $tmpfile exit 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fprintf-posix.c���������������������������������������������������0000664�0000000�0000000�00000002175�11671051007�0021572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fprintf() function. 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 <http://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-20111211-stable/tests/test-fprintf-posix.h���������������������������������������������������0000664�0000000�0000000�00000011257�11671051007�0021600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsprintf() and sprintf() 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 <http://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-20111211-stable/tests/test-fprintf-posix.sh��������������������������������������������������0000775�0000000�0000000�00000000571�11671051007�0021763�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" ./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-20111211-stable/tests/test-fprintf-posix2.c��������������������������������������������������0000664�0000000�0000000�00000006266�11671051007�0021661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fprintf() function. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <stdio.h> #if HAVE_GETRLIMIT && HAVE_SETRLIMIT #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 > 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 arg = atoi (argv[1]); switch (arg) { case 0: { void *memory = malloc (5000000); if (memory == NULL) return 1; memset (memory, 17, 5000000); return 78; } case 1: ret = fprintf (stdout, "%.5000000f", 1.0); return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); case 2: ret = fprintf (stdout, "%.5000000f", -1.0); return !(ret == 5000003 || (ret < 0 && errno == ENOMEM)); case 3: ret = fprintf (stdout, "%.5000000e", 1.0); return !(ret >= 5000006 || (ret < 0 && errno == ENOMEM)); case 4: ret = fprintf (stdout, "%.5000000d", 1); return !(ret == 5000000 || (ret < 0 && errno == ENOMEM)); case 5: ret = fprintf (stdout, "%.5000000d", -1); return !(ret == 5000001 || (ret < 0 && errno == ENOMEM)); case 6: ret = fprintf (stdout, "%.5000000u", 1); return !(ret == 5000000 || (ret < 0 && errno == ENOMEM)); } return 0; } #else int main (int argc, char *argv[]) { return 77; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fprintf-posix2.sh�������������������������������������������������0000775�0000000�0000000�00000001230�11671051007�0022036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test out-of-memory handling. (./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 ./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-20111211-stable/tests/test-fprintf-posix3.c��������������������������������������������������0000664�0000000�0000000�00000006336�11671051007�0021660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible fprintf() function. Copyright (C) 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 <http://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 <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 (fprintf (stdout, "%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-20111211-stable/tests/test-fprintf-posix3.sh�������������������������������������������������0000775�0000000�0000000�00000001145�11671051007�0022044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test against a memory leak. (./test-fprintf-posix3${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 ./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 if test $malloc_result = 78; then echo "Skipping test: get_rusage_as() doesn't work" exit 77 fi exit 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fpurge.c����������������������������������������������������������0000664�0000000�0000000�00000007533�11671051007�0020255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fpurge() function. 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 <http://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-20111211-stable/tests/test-fputc.c�����������������������������������������������������������0000664�0000000�0000000�00000004651�11671051007�0020104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fputc() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <stdio.h> #include "signature.h" SIGNATURE_CHECK (fputc, int, (int, FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #include "msvc-inval.h" #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 = 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-20111211-stable/tests/test-fread.c�����������������������������������������������������������0000664�0000000�0000000�00000005154�11671051007�0020043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fread() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <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> #include "msvc-inval.h" #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 = 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-20111211-stable/tests/test-freadable.c�������������������������������������������������������0000664�0000000�0000000�00000005474�11671051007�0020674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadable() function. 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 <http://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-20111211-stable/tests/test-freadahead.c������������������������������������������������������0000664�0000000�0000000�00000004031�11671051007�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadahead() function. 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 <http://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); } 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); } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-freadahead.sh�����������������������������������������������������0000775�0000000�0000000�00000000236�11671051007�0021215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-freadahead${EXEEXT} 0 < "$srcdir/test-freadahead.sh" || exit 1 ./test-freadahead${EXEEXT} 5 < "$srcdir/test-freadahead.sh" || exit 1 exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-freading.c��������������������������������������������������������0000664�0000000�0000000�00000011123�11671051007�0020532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freading() function. 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 <http://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-20111211-stable/tests/test-freadptr.c��������������������������������������������������������0000664�0000000�0000000�00000005352�11671051007�0020571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadptr() function. 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 <http://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); 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./test-freadptr${EXEEXT} 5 < \"$srcdir/test-freadptr.sh\" || exit 1\ncat \"$srcdir/test-freadptr.sh\" | ./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); } } } } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-freadptr.sh�������������������������������������������������������0000775�0000000�0000000�00000000232�11671051007�0020754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-freadptr${EXEEXT} 5 < "$srcdir/test-freadptr.sh" || exit 1 cat "$srcdir/test-freadptr.sh" | ./test-freadptr${EXEEXT} 5 || exit 1 exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-freadptr2.c�������������������������������������������������������0000664�0000000�0000000�00000003100�11671051007�0020640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadptr() function. 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 <http://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); } 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-20111211-stable/tests/test-freadptr2.sh������������������������������������������������������0000775�0000000�0000000�00000000232�11671051007�0021036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-freadptr2${EXEEXT} 0 < "$srcdir/test-freadptr2.sh" || exit 1 ./test-freadptr2${EXEEXT} 5 < "$srcdir/test-freadptr2.sh" || exit 1 exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-freadseek.c�������������������������������������������������������0000664�0000000�0000000�00000005757�11671051007�0020724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of freadseek() function. 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 <http://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./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 < \"$srcdir/test-freadseek.sh\" || exit 1\ncat \"$srcdir/test-freadseek.sh\" | ./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 return 0; } �����������������gnulib-20111211-stable/tests/test-freadseek.sh������������������������������������������������������0000775�0000000�0000000�00000000274�11671051007�0021104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 < "$srcdir/test-freadseek.sh" || exit 1 cat "$srcdir/test-freadseek.sh" | ./test-freadseek${EXEEXT} 5 19 6 7 18 9 19 || exit 1 exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-freopen-safer.c���������������������������������������������������0000664�0000000�0000000�00000005420�11671051007�0021512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of reopening a stream. Copyright (C) 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 <http://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-20111211-stable/tests/test-freopen.c���������������������������������������������������������0000664�0000000�0000000�00000004065�11671051007�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file stream. 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 <http://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"; ASSERT (freopen ("/dev/null", "r", stdin) != NULL); #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 = 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-20111211-stable/tests/test-frexp.c�����������������������������������������������������������0000664�0000000�0000000�00000011771�11671051007�0020110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. 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 <http://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 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; { /* NaN. */ int exp = -9999; double mantissa; x = NaNd (); mantissa = frexp (x, &exp); ASSERT (isnand (mantissa)); } { /* Positive infinity. */ int exp = -9999; double mantissa; x = Infinityd (); mantissa = frexp (x, &exp); ASSERT (mantissa == x); } { /* Negative infinity. */ int exp = -9999; double mantissa; x = - Infinityd (); mantissa = frexp (x, &exp); ASSERT (mantissa == x); } { /* Positive zero. */ int exp = -9999; double mantissa; x = 0.0; mantissa = frexp (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); ASSERT (!signbit (mantissa)); } { /* Negative zero. */ int exp = -9999; double mantissa; x = minus_zerod; mantissa = frexp (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); ASSERT (signbit (mantissa)); } for (i = 1, x = 1.0; i <= DBL_MAX_EXP; i++, x *= 2.0) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5); } for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5); } for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5); } for (i = 1, x = -1.0; i <= DBL_MAX_EXP; i++, x *= 2.0) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5); } for (i = 1, x = -1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5); } for (; i >= DBL_MIN_EXP - 100 && x < 0.0; i--, x *= 0.5) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5); } for (i = 1, x = 1.01; i <= DBL_MAX_EXP; i++, x *= 2.0) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.505); } for (i = 1, x = 1.01; i >= DBL_MIN_EXP; i--, x *= 0.5) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.505); } for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa >= 0.5); ASSERT (mantissa < 1.0); 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 = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.866025); } for (i = 1, x = 1.73205; i >= DBL_MIN_EXP; i--, x *= 0.5) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.866025); } for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) { int exp = -9999; double mantissa = frexp (x, &exp); ASSERT (exp == i || exp == i + 1); ASSERT (mantissa >= 0.5); ASSERT (mantissa < 1.0); ASSERT (mantissa == my_ldexp (x, - exp)); } return 0; } �������gnulib-20111211-stable/tests/test-frexpf.c����������������������������������������������������������0000664�0000000�0000000�00000011253�11671051007�0020251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a float into fraction and mantissa. 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 <http://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 static float my_ldexp (float x, int d) { for (; d > 0; d--) x *= 2.0f; for (; d < 0; d++) x *= 0.5f; return x; } int main () { int i; volatile float x; { /* NaN. */ int exp = -9999; float mantissa; x = NaNf (); mantissa = frexpf (x, &exp); ASSERT (isnanf (mantissa)); } { /* Positive infinity. */ int exp = -9999; float mantissa; x = Infinityf (); mantissa = frexpf (x, &exp); ASSERT (mantissa == x); } { /* Negative infinity. */ int exp = -9999; float mantissa; x = - Infinityf (); mantissa = frexpf (x, &exp); ASSERT (mantissa == x); } { /* Positive zero. */ int exp = -9999; float mantissa; x = 0.0f; mantissa = frexpf (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); ASSERT (!signbit (mantissa)); } { /* Negative zero. */ int exp = -9999; float mantissa; x = minus_zerof; mantissa = frexpf (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); ASSERT (signbit (mantissa)); } for (i = 1, x = 1.0f; i <= FLT_MAX_EXP; i++, x *= 2.0f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5f); } for (i = 1, x = 1.0f; i >= FLT_MIN_EXP; i--, x *= 0.5f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5f); } for (; i >= FLT_MIN_EXP - 100 && x > 0.0f; i--, x *= 0.5f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5f); } for (i = 1, x = -1.0f; i <= FLT_MAX_EXP; i++, x *= 2.0f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5f); } for (i = 1, x = -1.0f; i >= FLT_MIN_EXP; i--, x *= 0.5f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5f); } for (; i >= FLT_MIN_EXP - 100 && x < 0.0f; i--, x *= 0.5f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5f); } for (i = 1, x = 1.01f; i <= FLT_MAX_EXP; i++, x *= 2.0f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.505f); } for (i = 1, x = 1.01f; i >= FLT_MIN_EXP; i--, x *= 0.5f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.505f); } for (; i >= FLT_MIN_EXP - 100 && x > 0.0f; i--, x *= 0.5f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa >= 0.5f); ASSERT (mantissa < 1.0f); ASSERT (mantissa == my_ldexp (x, - exp)); } for (i = 1, x = 1.73205f; i <= FLT_MAX_EXP; i++, x *= 2.0f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.866025f); } for (i = 1, x = 1.73205f; i >= FLT_MIN_EXP; i--, x *= 0.5f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.866025f); } for (; i >= FLT_MIN_EXP - 100 && x > 0.0f; i--, x *= 0.5f) { int exp = -9999; float mantissa = frexpf (x, &exp); ASSERT (exp == i || exp == i + 1); ASSERT (mantissa >= 0.5f); ASSERT (mantissa < 1.0f); ASSERT (mantissa == my_ldexp (x, - exp)); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-frexpl.c����������������������������������������������������������0000664�0000000�0000000�00000012721�11671051007�0020260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a 'long double' into fraction and mantissa. 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 <http://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 /* 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 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 (); { /* NaN. */ int exp = -9999; long double mantissa; x = NaNl (); mantissa = frexpl (x, &exp); ASSERT (isnanl (mantissa)); } { /* Positive infinity. */ int exp = -9999; long double mantissa; x = Infinityl (); mantissa = frexpl (x, &exp); ASSERT (mantissa == x); } { /* Negative infinity. */ int exp = -9999; long double mantissa; x = - Infinityl (); mantissa = frexpl (x, &exp); ASSERT (mantissa == x); } { /* Positive zero. */ int exp = -9999; long double mantissa; x = 0.0L; mantissa = frexpl (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); ASSERT (!signbit (mantissa)); } { /* Negative zero. */ int exp = -9999; long double mantissa; x = minus_zerol; mantissa = frexpl (x, &exp); ASSERT (exp == 0); ASSERT (mantissa == x); ASSERT (signbit (mantissa)); } for (i = 1, x = 1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5L); } for (i = 1, x = 1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5L); } for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.5L); } for (i = 1, x = -1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5L); } for (i = 1, x = -1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5L); } for (; i >= LDBL_MIN_EXP - 100 && x < 0.0L; i--, x *= 0.5L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == -0.5L); } for (i = 1, x = 1.01L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.505L); } for (i = 1, x = 1.01L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.505L); } for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa >= 0.5L); ASSERT (mantissa < 1.0L); 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 = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.866025L); } for (i = 1, x = 1.73205L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i); ASSERT (mantissa == 0.866025L); } for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) { int exp = -9999; long double mantissa = frexpl (x, &exp); ASSERT (exp == i || exp == i + 1); ASSERT (mantissa >= 0.5L); ASSERT (mantissa < 1.0L); ASSERT (mantissa == my_ldexp (x, - exp)); } return 0; } �����������������������������������������������gnulib-20111211-stable/tests/test-fseek.c�����������������������������������������������������������0000664�0000000�0000000�00000004354�11671051007�0020060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fseek() function. 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 <http://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-20111211-stable/tests/test-fseek.sh����������������������������������������������������������0000775�0000000�0000000�00000000170�11671051007�0020243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-fseek${EXEEXT} 1 < "$srcdir/test-fseek.sh" || exit 1 echo hi | ./test-fseek${EXEEXT} || exit 1 exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fseek2.sh���������������������������������������������������������0000775�0000000�0000000�00000000105�11671051007�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-fseek${EXEEXT} 1 2 < "$srcdir/test-fseek2.sh" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fseeko.c����������������������������������������������������������0000664�0000000�0000000�00000004574�11671051007�0020243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fseeko() function. 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 <http://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, char **argv _GL_UNUSED) { /* 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-20111211-stable/tests/test-fseeko.sh���������������������������������������������������������0000775�0000000�0000000�00000000173�11671051007�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-fseeko${EXEEXT} 1 < "$srcdir/test-fseeko.sh" || exit 1 echo hi | ./test-fseeko${EXEEXT} || exit 1 exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fseeko2.sh��������������������������������������������������������0000775�0000000�0000000�00000000107�11671051007�0020504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-fseeko${EXEEXT} 1 2 < "$srcdir/test-fseeko2.sh" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fseeko3.c���������������������������������������������������������0000664�0000000�0000000�00000002377�11671051007�0020325�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fseeko() function. 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 <http://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-20111211-stable/tests/test-fseeko3.sh��������������������������������������������������������0000775�0000000�0000000�00000000220�11671051007�0020501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-fseeko3${EXEEXT} 0 "$srcdir/test-fseeko3.sh" || exit 1 ./test-fseeko3${EXEEXT} 1 "$srcdir/test-fseeko3.sh" || exit 1 exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fseeko4.c���������������������������������������������������������0000664�0000000�0000000�00000003535�11671051007�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fseeko() function. 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 <http://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 = fdopen (99, "w"); if (fp != NULL) { errno = 0; ASSERT (fseeko (fp, 0, SEEK_END) == -1); ASSERT (errno == EBADF); fclose (fp); } } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fseeko4.sh��������������������������������������������������������0000775�0000000�0000000�00000000117�11671051007�0020507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-fseeko4${EXEEXT} "$srcdir/test-fseeko4.sh" || exit 1 exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fseterr.c���������������������������������������������������������0000664�0000000�0000000�00000002356�11671051007�0020435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test setting the error indicator of a stream. 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 <http://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-20111211-stable/tests/test-fstat.c�����������������������������������������������������������0000664�0000000�0000000�00000002323�11671051007�0020076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fstat() function. 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 <http://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 "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; errno = 0; ASSERT (fstat (99, &statbuf) == -1); ASSERT (errno == EBADF); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fstatat.c���������������������������������������������������������0000664�0000000�0000000�00000005006�11671051007�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fstatat. Copyright (C) 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 <http://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 "progname.h" #include "same-inode.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-fstatat.t" #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) { return statat (dfd, name, st); } /* Wrapper around fstatat to test lstat behavior. */ static int do_lstat (char const *name, struct stat *st) { return lstatat (dfd, name, st); } int main (int argc _GL_UNUSED, char *argv[]) { int result; set_program_name (argv[0]); /* 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; 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-20111211-stable/tests/test-fstrcmp.c���������������������������������������������������������0000664�0000000�0000000�00000005005�11671051007�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fuzzy string comparison. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "fstrcmp.h" #include <stdbool.h> #include "progname.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[]) { set_program_name (argv[0]); 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-20111211-stable/tests/test-fsync.c�����������������������������������������������������������0000664�0000000�0000000�00000004120�11671051007�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fsync() function. Copyright (C) 2008-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 <http://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 MacOS 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); } { 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). */ 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); ASSERT (unlink (file) == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ftell.c�����������������������������������������������������������0000664�0000000�0000000�00000005411�11671051007�0020064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftell() function. 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 <http://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 (0); /* 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-20111211-stable/tests/test-ftell.sh����������������������������������������������������������0000775�0000000�0000000�00000000170�11671051007�0020254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-ftell${EXEEXT} 1 < "$srcdir/test-ftell.sh" || exit 1 echo hi | ./test-ftell${EXEEXT} || exit 1 exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ftell2.sh���������������������������������������������������������0000775�0000000�0000000�00000000105�11671051007�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-ftell${EXEEXT} 1 2 < "$srcdir/test-ftell2.sh" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ftell3.c����������������������������������������������������������0000664�0000000�0000000�00000004023�11671051007�0020145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftell() function. 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 <http://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-20111211-stable/tests/test-ftello.c����������������������������������������������������������0000664�0000000�0000000�00000006275�11671051007�0020254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftello() function. 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 <http://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, char **argv _GL_UNUSED) { 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 (0); /* 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-20111211-stable/tests/test-ftello.sh���������������������������������������������������������0000775�0000000�0000000�00000000173�11671051007�0020436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-ftello${EXEEXT} 1 < "$srcdir/test-ftello.sh" || exit 1 echo hi | ./test-ftello${EXEEXT} || exit 1 exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ftello2.sh��������������������������������������������������������0000775�0000000�0000000�00000000107�11671051007�0020515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-ftello${EXEEXT} 1 2 < "$srcdir/test-ftello2.sh" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ftello3.c���������������������������������������������������������0000664�0000000�0000000�00000004030�11671051007�0020322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftello() function. 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 <http://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-20111211-stable/tests/test-ftello4.c���������������������������������������������������������0000664�0000000�0000000�00000003344�11671051007�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ftello() function. 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 <http://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 = fdopen (99, "w"); if (fp != NULL) { errno = 0; ASSERT (ftello (fp) == (off_t)-1); ASSERT (errno == EBADF); fclose (fp); } } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ftello4.sh��������������������������������������������������������0000775�0000000�0000000�00000000117�11671051007�0020520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-ftello4${EXEEXT} "$srcdir/test-ftello4.sh" || exit 1 exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ftruncate.c�������������������������������������������������������0000664�0000000�0000000�00000002771�11671051007�0020757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test truncating a file. 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 <http://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); } { 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-20111211-stable/tests/test-ftruncate.sh������������������������������������������������������0000775�0000000�0000000�00000000106�11671051007�0021140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-ftruncate${EXEEXT} "$srcdir/test-ftruncate.sh" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-func.c������������������������������������������������������������0000664�0000000�0000000�00000002323�11671051007�0017710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether __func__ is available Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-futimens.c��������������������������������������������������������0000664�0000000�0000000�00000002556�11671051007�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of futimens. Copyright (C) 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 <http://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-20111211-stable/tests/test-futimens.h��������������������������������������������������������0000664�0000000�0000000�00000012106�11671051007�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of file timestamp modification functions. Copyright (C) 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 <http://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 less 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); } { 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] = { { Y2K, UTIME_BOGUS_POS }, { Y2K, 0 } }; errno = 0; ASSERT (func (fd, ts) == -1); ASSERT (errno == EINVAL); } { struct timespec ts[2] = { { Y2K, 0 }, { Y2K, 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] = { { Y2K, BILLION / 2 - 1 }, { Y2K, 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] = { { BILLION, UTIME_OMIT }, { 0, 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, 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 (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) ASSERT (ctime_compare (&st3, &st2) < 0); } /* Cleanup. */ ASSERT (close (fd) == 0); ASSERT (unlink (BASE "file") == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-fwritable.c�������������������������������������������������������0000664�0000000�0000000�00000005477�11671051007�0020751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fwritable() function. 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 <http://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-20111211-stable/tests/test-fwrite.c����������������������������������������������������������0000664�0000000�0000000�00000005124�11671051007�0020257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fwrite() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <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> #include "msvc-inval.h" #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 = 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-20111211-stable/tests/test-fwriting.c��������������������������������������������������������0000664�0000000�0000000�00000011272�11671051007�0020611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fwriting() function. 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 <http://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-20111211-stable/tests/test-gc-arcfour.c������������������������������������������������������0000664�0000000�0000000�00000005123�11671051007�0021006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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_done (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-gc-arctwo.c�������������������������������������������������������0000664�0000000�0000000�00000004760�11671051007�0020652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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_done (); return 0; } ����������������gnulib-20111211-stable/tests/test-gc-des.c����������������������������������������������������������0000664�0000000�0000000�00000004320�11671051007�0020116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.h" int main (int argc, char *argv[]) { gc_cipher_handle ctx; 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]; for (i = 0; i < 64; ++i) { 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); } if (memcmp (temp3, result, 8)) return 1; } gc_done (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-gc-hmac-md5.c�����������������������������������������������������0000664�0000000�0000000�00000004061�11671051007�0020740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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-20111211-stable/tests/test-gc-hmac-sha1.c����������������������������������������������������0000664�0000000�0000000�00000003560�11671051007�0021112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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-20111211-stable/tests/test-gc-md2.c����������������������������������������������������������0000664�0000000�0000000�00000006056�11671051007�0020035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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-20111211-stable/tests/test-gc-md4.c����������������������������������������������������������0000664�0000000�0000000�00000006162�11671051007�0020035�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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-20111211-stable/tests/test-gc-md5.c����������������������������������������������������������0000664�0000000�0000000�00000006177�11671051007�0020044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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-20111211-stable/tests/test-gc-pbkdf2-sha1.c��������������������������������������������������0000664�0000000�0000000�00000010357�11671051007�0021354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2002-2005, 2007, 2010-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, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU 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 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-20111211-stable/tests/test-gc-rijndael.c�����������������������������������������������������0000664�0000000�0000000�00000007702�11671051007�0021142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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-20111211-stable/tests/test-gc-sha1.c���������������������������������������������������������0000664�0000000�0000000�00000006055�11671051007�0020206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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 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; } 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' 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_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 1 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-20111211-stable/tests/test-gc.c��������������������������������������������������������������0000664�0000000�0000000�00000002063�11671051007�0017347�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005-2006, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include <config.h> #include <stdio.h> #include <string.h> #include "gc.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-20111211-stable/tests/test-get-rusage-as.c���������������������������������������������������0000664�0000000�0000000�00000003023�11671051007�0021417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getter for RLIMIT_AS. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "resource-ext.h" #include <stdio.h> #include <stdlib.h> #include "macros.h" int main () { uintptr_t value1, value2, value3; value1 = get_rusage_as (); malloc (0x88); value2 = get_rusage_as (); 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-20111211-stable/tests/test-get-rusage-data.c�������������������������������������������������0000664�0000000�0000000�00000003305�11671051007�0021730�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getter for RLIMIT_DATA. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "resource-ext.h" #include <stdio.h> #include <stdlib.h> #include "macros.h" int main () { uintptr_t value1, value2, value3; value1 = get_rusage_data (); malloc (0x88); value2 = get_rusage_data (); 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 !((defined __APPLE__ && defined __MACH__) || defined __OpenBSD__ || (defined _WIN32 || defined __WIN32__) || defined __CYGWIN__) /* Allocating 2.5 MB of memory should increase the data segment size. */ ASSERT (value3 > value1); #endif return 0; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-getaddrinfo.c�����������������������������������������������������0000664�0000000�0000000�00000011267�11671051007�0021252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the getaddrinfo module. Copyright (C) 2006-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 <http://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #include <config.h> #include <netdb.h> #include "signature.h" SIGNATURE_CHECK (freeaddrinfo, void, (struct addrinfo *)); SIGNATURE_CHECK (gai_strerror, char const *, (int)); SIGNATURE_CHECK (getaddrinfo, int, (char const *, char const *, struct addrinfo const *, struct addrinfo **)); #include <arpa/inet.h> #include <errno.h> #include <netinet/in.h> #include <stdio.h> #include <string.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) { dbgprintf ("\tflags %x\n", ai->ai_flags); dbgprintf ("\tfamily %x\n", ai->ai_family); dbgprintf ("\tsocktype %x\n", ai->ai_socktype); dbgprintf ("\tprotocol %x\n", ai->ai_protocol); dbgprintf ("\taddrlen %ld: ", (unsigned long) ai->ai_addrlen); dbgprintf ("\tFound %s\n", inet_ntop (ai->ai_family, &((struct sockaddr_in *) ai->ai_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) { return simple (HOST1, SERV1) + simple (HOST2, SERV2) + simple (HOST3, SERV3) + simple (HOST4, SERV4); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-getcwd-lgpl.c�����������������������������������������������������0000664�0000000�0000000�00000005105�11671051007�0021167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getcwd() function. Copyright (C) 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 <http://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-20111211-stable/tests/test-getcwd.c����������������������������������������������������������0000664�0000000�0000000�00000014415�11671051007�0020237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getcwd() function. Copyright (C) 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 <http://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 # 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) /* Keep this test in sync with m4/getcwd-abort-bug.m4. */ static int test_abort_bug (void) { char const *dir_name = "confdir-14B---"; char *cwd; size_t initial_cwd_len; int fail = 0; size_t desired_depth; size_t d; #ifdef PATH_MAX /* The bug is triggered when PATH_MAX < getpagesize (), so skip this relatively expensive and invasive test if that's not true. */ if (getpagesize () <= PATH_MAX) return 0; #endif cwd = getcwd (NULL, 0); if (cwd == NULL) return 2; initial_cwd_len = strlen (cwd); free (cwd); desired_depth = ((TARGET_LEN - 1 - initial_cwd_len) / (1 + strlen (dir_name))); 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) { 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. 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)) 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 (AT_FDCWD || 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-20111211-stable/tests/test-getcwd.sh���������������������������������������������������������0000775�0000000�0000000�00000000112�11671051007�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . test-getcwd Exit $? ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-getdelim.c��������������������������������������������������������0000664�0000000�0000000�00000004765�11671051007�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getdelim() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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-20111211-stable/tests/test-getdomainname.c���������������������������������������������������0000664�0000000�0000000�00000003153�11671051007�0021567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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, char *argv[] _GL_UNUSED) { 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-20111211-stable/tests/test-getdtablesize.c���������������������������������������������������0000664�0000000�0000000�00000001772�11671051007�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getdtablesize() function. Copyright (C) 2008-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 <http://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); return 0; } ������gnulib-20111211-stable/tests/test-getgroups.c�������������������������������������������������������0000664�0000000�0000000�00000004446�11671051007�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of getgroups. Copyright (C) 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 <http://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" int main (int argc, char **argv _GL_UNUSED) { 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]); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-gethostname.c�����������������������������������������������������0000664�0000000�0000000�00000003201�11671051007�0021267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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, char *argv[] _GL_UNUSED) { 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-20111211-stable/tests/test-getline.c���������������������������������������������������������0000664�0000000�0000000�00000004740�11671051007�0020411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getline() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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. */ line = malloc (1); len = 0; 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-20111211-stable/tests/test-getloadavg.c������������������������������������������������������0000664�0000000�0000000�00000004375�11671051007�0021103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting load average. 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 <http://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)) 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[1], argc > 1); if (loads > 0 && argc > 1) putchar ('\n'); if (naptime == 0) break; sleep (naptime); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-getlogin.c��������������������������������������������������������0000664�0000000�0000000�00000004172�11671051007�0020571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting user name. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getlogin, char *, (void)); #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (void) { char *buf; /* Test value. */ buf = getlogin (); if (buf == NULL) { /* getlogin() fails when stdin is not connected to a tty. */ ASSERT (errno == ENOTTY || errno == EINVAL /* seen on Linux/SPARC */ ); #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"); return 77; } /* Compare against the value from the environment. */ #if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) /* Unix platform */ { const char *name = getenv ("LOGNAME"); if (name == NULL || name[0] == '\0') name = getenv ("USER"); if (name != NULL && name[0] != '\0') ASSERT (strcmp (buf, name) == 0); } #endif #if (defined _WIN32 || 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 return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-getlogin_r.c������������������������������������������������������0000664�0000000�0000000�00000005243�11671051007�0021112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting user name. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getlogin_r, int, (char *, size_t)); #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (void) { /* Test with a large enough buffer. */ char buf[1024]; int err; err = getlogin_r (buf, sizeof (buf)); if (err != 0) { /* getlogin_r() fails when stdin is not connected to a tty. */ ASSERT (err == ENOTTY || errno == EINVAL /* seen on Linux/SPARC */ ); #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"); return 77; } /* Compare against the value from the environment. */ #if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) /* Unix platform */ { const char *name = getenv ("LOGNAME"); if (name == NULL || name[0] == '\0') name = getenv ("USER"); if (name != NULL && name[0] != '\0') ASSERT (strcmp (buf, name) == 0); } #endif #if (defined _WIN32 || 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 /* 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-20111211-stable/tests/test-getndelim2.c������������������������������������������������������0000664�0000000�0000000�00000010465�11671051007�0021015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getndelim2() function. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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, 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-20111211-stable/tests/test-getopt.c����������������������������������������������������������0000664�0000000�0000000�00000005472�11671051007�0020267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 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 <http://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 #if GNULIB_TEST_GETOPT_GNU # 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 *)); #endif #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getopt, int, (int, char * const[], char const *)); #include <stdio.h> #include <stdlib.h> #include <string.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 GNULIB_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", "w", stderr) == stderr); /* These default values are required by POSIX. */ ASSERT (optind == 1); ASSERT (opterr != 0); setenv ("POSIXLY_CORRECT", "1", 1); test_getopt (); #if GNULIB_TEST_GETOPT_GNU test_getopt_long_posix (); #endif unsetenv ("POSIXLY_CORRECT"); test_getopt (); #if GNULIB_TEST_GETOPT_GNU test_getopt_long (); test_getopt_long_only (); #endif ASSERT (fclose (stderr) == 0); ASSERT (remove ("test-getopt.tmp") == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-getopt.h����������������������������������������������������������0000664�0000000�0000000�00000125661�11671051007�0020277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 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 <http://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] == ':')); /* fall through */ 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: http://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-20111211-stable/tests/test-getopt_long.h�����������������������������������������������������0000664�0000000�0000000�00000175524�11671051007�0021321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 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 <http://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] == ':')); /* fall through */ 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: http://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. http://lists.gnu.org/archive/html/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-20111211-stable/tests/test-getpass.c���������������������������������������������������������0000664�0000000�0000000�00000001721�11671051007�0020424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test getpass implementation. Copyright (C) 2005, 2009-2011 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 <http://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-20111211-stable/tests/test-getpeername.c�����������������������������������������������������0000664�0000000�0000000�00000002706�11671051007�0021256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test getpeername() function. 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 <http://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 "sockets.h" #include "macros.h" int main (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); errno = 0; ASSERT (getpeername (99, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������gnulib-20111211-stable/tests/test-getsockname.c�����������������������������������������������������0000664�0000000�0000000�00000002706�11671051007�0021262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test getsockname() function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (getsockname, int, (int, struct sockaddr *, socklen_t *)); #include <errno.h> #include <netinet/in.h> #include "sockets.h" #include "macros.h" int main (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); errno = 0; ASSERT (getsockname (99, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������gnulib-20111211-stable/tests/test-getsockopt.c������������������������������������������������������0000664�0000000�0000000�00000002675�11671051007�0021151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test getsockopt() function. 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 <http://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 "sockets.h" #include "macros.h" int main (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); errno = 0; ASSERT (getsockopt (99, SOL_SOCKET, SO_REUSEADDR, &value, &value_len) == -1); ASSERT (errno == EBADF); } return 0; } �������������������������������������������������������������������gnulib-20111211-stable/tests/test-gettimeofday.c����������������������������������������������������0000664�0000000�0000000�00000002450�11671051007�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2007, 2009-2011 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 <http://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-20111211-stable/tests/test-glob-c++.cc�������������������������������������������������������0000664�0000000�0000000�00000002244�11671051007�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of glob/globfree functions in C++ mode. Copyright (C) 2010-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 <http://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" SIGNATURE_CHECK (GNULIB_NAMESPACE::glob, int, (const char *, int, _gl_glob_errfunc_fn, glob_t *)); SIGNATURE_CHECK (GNULIB_NAMESPACE::globfree, void, (glob_t *)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::glob_pattern_p, int, (const char *, int)); int main () { } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-glob.c������������������������������������������������������������0000664�0000000�0000000�00000004144�11671051007�0017703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of glob/globfree functions. Copyright (C) 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 <http://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 <string.h> #include "macros.h" #define GL_NO_SUCH_FILE "/gnulib-magic-does-not-exist" int main () { int res; 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)); 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); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-grantpt.c���������������������������������������������������������0000664�0000000�0000000�00000002602�11671051007�0020434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test acquiring ownership of the slave side of a pseudo-terminal. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (grantpt, int, (int)); #include <errno.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (grantpt (-1) == -1); ASSERT (errno == EBADF || errno == EINVAL /* seen on FreeBSD 6.4 */ || errno == 0 /* seen on Solaris 8 */ ); } { errno = 0; ASSERT (grantpt (99) == -1); ASSERT (errno == EBADF || errno == EINVAL /* seen on FreeBSD 6.4 */ || errno == 0 /* seen on Solaris 8 */ ); } return 0; } ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-hash.c������������������������������������������������������������0000664�0000000�0000000�00000015101�11671051007�0017676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2009-2011 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 <http://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_delete (ht, "a")); ASSERT (hash_delete (ht, "a") == NULL); ASSERT (hash_delete (ht, "b")); ASSERT (hash_delete (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_delete (ht, p); ASSERT (v); free (v); } break; } } ASSERT (hash_table_ok (ht)); } hash_free (ht); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-hmac-md5.c��������������������������������������������������������0000664�0000000�0000000�00000010113�11671051007�0020344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-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 <http://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #include <config.h> #include <stdio.h> #include <string.h> #include "hmac.h" /* Test vectors from RFC 2104. */ int main (int argc, char *argv[]) { { /* key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b key_len = 16 bytes data = "Hi There" data_len = 8 bytes digest = 0x9294727a3638bb1c13f48ef8158bfc9d */ 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]; if (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; } } { /* key = "Jefe" data = "what do ya want for nothing?" data_len = 28 bytes digest = 0x750c783e6ab0b503eaa86e310a5db738 */ 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"; char out[16]; if (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 2 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; } } { /* key = 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA key_len 16 bytes data = 0xDDDDDDDDDDDDDDDDDDDD... ..DDDDDDDDDDDDDDDDDDDD... ..DDDDDDDDDDDDDDDDDDDD... ..DDDDDDDDDDDDDDDDDDDD... ..DDDDDDDDDDDDDDDDDDDD data_len = 50 bytes digest = 0x56be34521d144c88dbb8c733f0e8b3f6 */ char *key = "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"; size_t key_len = 16; char *data = "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" "\xDD\xDD"; size_t data_len = 50; char *digest = "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6"; char out[16]; if (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 3 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; } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-hmac-sha1.c�������������������������������������������������������0000664�0000000�0000000�00000006540�11671051007�0020524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-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 <http://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #include <config.h> #include <stdio.h> #include <string.h> #include "hmac.h" int main (int argc, char *argv[]) { { 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[20]; if (hmac_sha1 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); return 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"); return 1; } } { 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"; char out[20]; if (hmac_sha1 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); return 1; } if (memcmp (digest, out, 20) != 0) { size_t i; printf ("hash 2 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"); return 1; } } { char *key = "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"; size_t key_len = 16; char *data = "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" "\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD" "\xDD\xDD"; size_t data_len = 50; char *digest = "\xd7\x30\x59\x4d\x16\x7e\x35\xd5\x95\x6f\xd8\x00\x3d\x0d\xb3\xd3\xf4\x6d\xc7\xbb"; char out[20]; if (hmac_sha1 (key, key_len, data, data_len, out) != 0) { printf ("call failure\n"); return 1; } if (memcmp (digest, out, 20) != 0) { size_t i; printf ("hash 3 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"); return 1; } } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-hypot.c�����������������������������������������������������������0000664�0000000�0000000�00000002150�11671051007�0020116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of hypot() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; volatile double y; double z; int main () { /* A particular value. */ x = 0.4; y = 0.6; z = hypot (x, y); ASSERT (z >= 0.7211102550 && z <= 0.7211102551); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-i-ring.c����������������������������������������������������������0000664�0000000�0000000�00000003044�11671051007�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the simple ring buffer. Copyright (C) 2006-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 <http://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-20111211-stable/tests/test-iconv-h-c++.cc����������������������������������������������������0000664�0000000�0000000�00000002470�11671051007�0021034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <iconv.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-iconv-h.c���������������������������������������������������������0000664�0000000�0000000�00000001477�11671051007�0020331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <iconv.h> substitute. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #if HAVE_ICONV # include <iconv.h> #endif int main () { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-iconv-utf.c�������������������������������������������������������0000664�0000000�0000000�00000023532�11671051007�0020674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion. 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 <http://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" int main () { #if HAVE_ICONV /* Assume that iconv() supports at least the encoding UTF-8. */ /* The text is "Japanese (日本語) [\U0001D50D\U0001D51E\U0001D52D]". */ /* 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; 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); } /* 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; 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); } /* 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; 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); } /* 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; 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); } /* Test conversion from UTF-16BE to UTF-8 with no errors. */ { 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; 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); } /* Test conversion from UTF-16LE to UTF-8 with no errors. */ { static const char input[] = "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"; 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; 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); } /* Test conversion from UTF-32BE to UTF-8 with no errors. */ { static const char input[] = "\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]"; 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; 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); } /* Test conversion from UTF-32LE to UTF-8 with no errors. */ { static const char input[] = "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"; 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; 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); } #endif return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-iconv.c�����������������������������������������������������������0000664�0000000�0000000�00000011575�11671051007�0020104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion. 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 <http://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"); 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); #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-iconvme.c���������������������������������������������������������0000664�0000000�0000000�00000004113�11671051007�0020414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Recode strings between character sets, using iconv. Copyright (C) 2004-2005, 2009-2011 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 <http://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-20111211-stable/tests/test-idpriv-drop.c�����������������������������������������������������0000664�0000000�0000000�00000006475�11671051007�0021230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of dropping uid/gid privileges of the current process permanently. Copyright (C) 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 <http://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-20111211-stable/tests/test-idpriv-drop.sh����������������������������������������������������0000775�0000000�0000000�00000001432�11671051007�0021407�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-20111211-stable/tests/test-idpriv-drop.su.sh�������������������������������������������������0000775�0000000�0000000�00000003252�11671051007�0022037�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 ./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-20111211-stable/tests/test-idpriv-droptemp.c�������������������������������������������������0000664�0000000�0000000�00000006721�11671051007�0022110�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of dropping uid/gid privileges of the current process temporarily. Copyright (C) 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 <http://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-20111211-stable/tests/test-idpriv-droptemp.sh������������������������������������������������0000775�0000000�0000000�00000001452�11671051007�0022277�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-20111211-stable/tests/test-idpriv-droptemp.su.sh���������������������������������������������0000775�0000000�0000000�00000003346�11671051007�0022731�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 ./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-20111211-stable/tests/test-ignore-value.c����������������������������������������������������0000664�0000000�0000000�00000003644�11671051007�0021361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the "ignore-value" module. 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include <config.h> #include "ignore-value.h" #include <stdio.h> #ifndef _GL_ATTRIBUTE_RETURN_CHECK # if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) # define _GL_ATTRIBUTE_RETURN_CHECK # else # define _GL_ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__)) # endif #endif struct s { int i; }; static char doChar (void) _GL_ATTRIBUTE_RETURN_CHECK; static int doInt (void) _GL_ATTRIBUTE_RETURN_CHECK; static off_t doOff (void) _GL_ATTRIBUTE_RETURN_CHECK; static void *doPtr (void) _GL_ATTRIBUTE_RETURN_CHECK; static struct s doStruct (void) _GL_ATTRIBUTE_RETURN_CHECK; 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-20111211-stable/tests/test-imaxabs.c���������������������������������������������������������0000664�0000000�0000000�00000002105�11671051007�0020377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * 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 <http://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-20111211-stable/tests/test-imaxdiv.c���������������������������������������������������������0000664�0000000�0000000�00000002470�11671051007�0020421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * 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 <http://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-20111211-stable/tests/test-inet_ntop.c�������������������������������������������������������0000664�0000000�0000000�00000003077�11671051007�0020763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of inet_ntop function. Copyright (C) 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 <http://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-20111211-stable/tests/test-inet_pton.c�������������������������������������������������������0000664�0000000�0000000�00000003327�11671051007�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of inet_pton function. Copyright (C) 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 <http://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-20111211-stable/tests/test-ino-map.c���������������������������������������������������������0000664�0000000�0000000�00000002743�11671051007�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the ino-map module. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-integer_length.c��������������������������������������������������0000664�0000000�0000000�00000003441�11671051007�0021755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of integer_length(). 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 <http://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-20111211-stable/tests/test-integer_length_l.c������������������������������������������������0000664�0000000�0000000�00000003505�11671051007�0022271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of integer_length_l(). 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 <http://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-20111211-stable/tests/test-integer_length_ll.c�����������������������������������������������0000664�0000000�0000000�00000003545�11671051007�0022451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of integer_length_ll(). 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 <http://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-20111211-stable/tests/test-intprops.c��������������������������������������������������������0000664�0000000�0000000�00000027033�11671051007�0020640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test intprops.h. 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 <http://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* Tell gcc not to warn about the many (X < 0) expressions that the overflow macros expand to. */ #if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wtype-limits" #endif #include <config.h> #include "intprops.h" #include "verify.h" #include <stdbool.h> #include <inttypes.h> #include "macros.h" /* 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 <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>. */ #if __GNUC__ || __SUNPRO_C # define VERIFY(x) do { verify (x); } while (0) #else # define VERIFY(x) ASSERT (x) #endif 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. */ VERIFY (INT_MIN + INT_MAX < 0 ? (TYPE_TWOS_COMPLEMENT (int) && ! TYPE_ONES_COMPLEMENT (int) && ! TYPE_SIGNED_MAGNITUDE (int)) : (! TYPE_TWOS_COMPLEMENT (int) && (TYPE_ONES_COMPLEMENT (int) || TYPE_SIGNED_MAGNITUDE (int)))); /* 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); 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); /* 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 a single macro to do both. */ #define CHECK_BINOP(op, a, b, min, max, overflow) \ (INT_##op##_RANGE_OVERFLOW (a, b, min, max) == (overflow) \ && INT_##op##_OVERFLOW (a, b) == (overflow)) #define CHECK_UNOP(op, a, min, max, overflow) \ (INT_##op##_RANGE_OVERFLOW (a, min, max) == (overflow) \ && INT_##op##_OVERFLOW (a) == (overflow)) /* 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)); VERIFY (CHECK_BINOP (ADD, INT_MAX, 1, INT_MIN, INT_MAX, true)); VERIFY (CHECK_BINOP (ADD, INT_MAX, -1, INT_MIN, INT_MAX, false)); VERIFY (CHECK_BINOP (ADD, INT_MIN, 1, INT_MIN, INT_MAX, false)); VERIFY (CHECK_BINOP (ADD, INT_MIN, -1, INT_MIN, INT_MAX, true)); VERIFY (CHECK_BINOP (ADD, UINT_MAX, 1u, 0u, UINT_MAX, true)); VERIFY (CHECK_BINOP (ADD, 0u, 1u, 0u, UINT_MAX, false)); VERIFY (CHECK_BINOP (SUBTRACT, INT_MAX, 1, INT_MIN, INT_MAX, false)); VERIFY (CHECK_BINOP (SUBTRACT, INT_MAX, -1, INT_MIN, INT_MAX, true)); VERIFY (CHECK_BINOP (SUBTRACT, INT_MIN, 1, INT_MIN, INT_MAX, true)); VERIFY (CHECK_BINOP (SUBTRACT, INT_MIN, -1, INT_MIN, INT_MAX, false)); VERIFY (CHECK_BINOP (SUBTRACT, UINT_MAX, 1u, 0u, UINT_MAX, false)); VERIFY (CHECK_BINOP (SUBTRACT, 0u, 1u, 0u, UINT_MAX, true)); VERIFY (CHECK_UNOP (NEGATE, INT_MIN, INT_MIN, INT_MAX, TYPE_TWOS_COMPLEMENT (int))); VERIFY (CHECK_UNOP (NEGATE, 0, INT_MIN, INT_MAX, false)); VERIFY (CHECK_UNOP (NEGATE, INT_MAX, INT_MIN, INT_MAX, false)); VERIFY (CHECK_UNOP (NEGATE, 0u, 0u, UINT_MAX, false)); VERIFY (CHECK_UNOP (NEGATE, 1u, 0u, UINT_MAX, true)); VERIFY (CHECK_UNOP (NEGATE, UINT_MAX, 0u, UINT_MAX, true)); VERIFY (CHECK_BINOP (MULTIPLY, INT_MAX, INT_MAX, INT_MIN, INT_MAX, true)); VERIFY (CHECK_BINOP (MULTIPLY, INT_MAX, INT_MIN, INT_MIN, INT_MAX, true)); VERIFY (CHECK_BINOP (MULTIPLY, INT_MIN, INT_MAX, INT_MIN, INT_MAX, true)); VERIFY (CHECK_BINOP (MULTIPLY, INT_MIN, INT_MIN, INT_MIN, INT_MAX, true)); VERIFY (CHECK_BINOP (MULTIPLY, -1, INT_MIN, INT_MIN, INT_MAX, INT_NEGATE_OVERFLOW (INT_MIN))); VERIFY (CHECK_BINOP (MULTIPLY, LONG_MIN / INT_MAX, (long int) INT_MAX, LONG_MIN, LONG_MIN, false)); VERIFY (CHECK_BINOP (DIVIDE, INT_MIN, -1, INT_MIN, INT_MAX, INT_NEGATE_OVERFLOW (INT_MIN))); VERIFY (CHECK_BINOP (DIVIDE, INT_MAX, 1, INT_MIN, INT_MAX, false)); VERIFY (CHECK_BINOP (DIVIDE, (unsigned int) INT_MIN, -1u, 0u, UINT_MAX, false)); VERIFY (CHECK_BINOP (REMAINDER, INT_MIN, -1, INT_MIN, INT_MAX, INT_NEGATE_OVERFLOW (INT_MIN))); VERIFY (CHECK_BINOP (REMAINDER, INT_MAX, 1, INT_MIN, INT_MAX, false)); VERIFY (CHECK_BINOP (REMAINDER, (unsigned int) INT_MIN, -1u, 0u, UINT_MAX, false)); VERIFY (CHECK_BINOP (LEFT_SHIFT, UINT_MAX, 1, 0u, UINT_MAX, true)); VERIFY (CHECK_BINOP (LEFT_SHIFT, UINT_MAX / 2 + 1, 1, 0u, UINT_MAX, true)); VERIFY (CHECK_BINOP (LEFT_SHIFT, UINT_MAX / 2, 1, 0u, UINT_MAX, false)); /* INT_<op>_OVERFLOW with mixed types. */ #define CHECK_SUM(a, b, overflow) \ VERIFY (INT_ADD_OVERFLOW (a, b) == (overflow)); \ VERIFY (INT_ADD_OVERFLOW (b, a) == (overflow)) CHECK_SUM (-1, LONG_MIN, true); CHECK_SUM (-1, UINT_MAX, false); CHECK_SUM (-1L, INT_MIN, INT_MIN == LONG_MIN); CHECK_SUM (0u, -1, true); CHECK_SUM (0u, 0, false); CHECK_SUM (0u, 1, false); CHECK_SUM (1, LONG_MAX, true); CHECK_SUM (1, UINT_MAX, true); CHECK_SUM (1L, INT_MAX, INT_MAX == LONG_MAX); CHECK_SUM (1u, INT_MAX, INT_MAX == UINT_MAX); CHECK_SUM (1u, INT_MIN, true); VERIFY (! INT_SUBTRACT_OVERFLOW (INT_MAX, 1u)); VERIFY (! INT_SUBTRACT_OVERFLOW (UINT_MAX, 1)); VERIFY (! INT_SUBTRACT_OVERFLOW (0u, -1)); VERIFY (INT_SUBTRACT_OVERFLOW (UINT_MAX, -1)); VERIFY (INT_SUBTRACT_OVERFLOW (INT_MIN, 1u)); VERIFY (INT_SUBTRACT_OVERFLOW (-1, 0u)); #define CHECK_PRODUCT(a, b, overflow) \ VERIFY (INT_MULTIPLY_OVERFLOW (a, b) == (overflow)); \ VERIFY (INT_MULTIPLY_OVERFLOW (b, a) == (overflow)) CHECK_PRODUCT (-1, 1u, true); CHECK_PRODUCT (-1, INT_MIN, INT_NEGATE_OVERFLOW (INT_MIN)); CHECK_PRODUCT (-1, UINT_MAX, true); CHECK_PRODUCT (-12345, LONG_MAX / -12345 - 1, true); CHECK_PRODUCT (-12345, LONG_MAX / -12345, false); CHECK_PRODUCT (0, -1, false); CHECK_PRODUCT (0, 0, false); CHECK_PRODUCT (0, 0u, false); CHECK_PRODUCT (0, 1, false); CHECK_PRODUCT (0, INT_MAX, false); CHECK_PRODUCT (0, INT_MIN, false); CHECK_PRODUCT (0, UINT_MAX, false); CHECK_PRODUCT (0u, -1, false); CHECK_PRODUCT (0u, 0, false); CHECK_PRODUCT (0u, 0u, false); CHECK_PRODUCT (0u, 1, false); CHECK_PRODUCT (0u, INT_MAX, false); CHECK_PRODUCT (0u, INT_MIN, false); CHECK_PRODUCT (0u, UINT_MAX, false); CHECK_PRODUCT (1, INT_MAX, false); CHECK_PRODUCT (1, INT_MIN, false); CHECK_PRODUCT (1, UINT_MAX, false); CHECK_PRODUCT (1u, INT_MIN, true); CHECK_PRODUCT (1u, INT_MAX, UINT_MAX < INT_MAX); CHECK_PRODUCT (INT_MAX, UINT_MAX, true); CHECK_PRODUCT (INT_MAX, ULONG_MAX, true); CHECK_PRODUCT (INT_MIN, LONG_MAX / INT_MIN - 1, true); CHECK_PRODUCT (INT_MIN, LONG_MAX / INT_MIN, false); CHECK_PRODUCT (INT_MIN, UINT_MAX, true); CHECK_PRODUCT (INT_MIN, ULONG_MAX, true); VERIFY (INT_DIVIDE_OVERFLOW (INT_MIN, -1L) == (TYPE_TWOS_COMPLEMENT (long int) && INT_MIN == LONG_MIN)); VERIFY (! INT_DIVIDE_OVERFLOW (INT_MIN, UINT_MAX)); VERIFY (! INT_DIVIDE_OVERFLOW (INTMAX_MIN, UINTMAX_MAX)); VERIFY (! INT_DIVIDE_OVERFLOW (INTMAX_MIN, UINT_MAX)); VERIFY (INT_DIVIDE_OVERFLOW (-11, 10u)); VERIFY (INT_DIVIDE_OVERFLOW (-10, 10u)); VERIFY (! INT_DIVIDE_OVERFLOW (-9, 10u)); VERIFY (INT_DIVIDE_OVERFLOW (11u, -10)); VERIFY (INT_DIVIDE_OVERFLOW (10u, -10)); VERIFY (! INT_DIVIDE_OVERFLOW (9u, -10)); VERIFY (INT_REMAINDER_OVERFLOW (INT_MIN, -1L) == (TYPE_TWOS_COMPLEMENT (long int) && INT_MIN == LONG_MIN)); VERIFY (INT_REMAINDER_OVERFLOW (-1, UINT_MAX)); VERIFY (INT_REMAINDER_OVERFLOW ((intmax_t) -1, UINTMAX_MAX)); VERIFY (INT_REMAINDER_OVERFLOW (INTMAX_MIN, UINT_MAX) == (INTMAX_MAX < UINT_MAX && - (unsigned int) INTMAX_MIN % UINT_MAX != 0)); VERIFY (INT_REMAINDER_OVERFLOW (INT_MIN, ULONG_MAX) == (INT_MIN % ULONG_MAX != 1)); VERIFY (! INT_REMAINDER_OVERFLOW (1u, -1)); VERIFY (! INT_REMAINDER_OVERFLOW (37*39u, -39)); VERIFY (INT_REMAINDER_OVERFLOW (37*39u + 1, -39)); VERIFY (INT_REMAINDER_OVERFLOW (37*39u - 1, -39)); VERIFY (! INT_REMAINDER_OVERFLOW (LONG_MAX, -INT_MAX)); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-inttostr.c��������������������������������������������������������0000664�0000000�0000000�00000007354�11671051007�0020654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test inttostr functions, and incidentally, INT_BUFSIZE_BOUND Copyright (C) 2010-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 <http://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 FMT(T) (TYPE_SIGNED (T) ? "%jd" : "%ju") #define CAST_VAL(T,V) (TYPE_SIGNED (T) ? (intmax_t) (V) : (uintmax_t) (V)) #define V_min(T) (CAST_VAL (T, TYPE_MINIMUM (T))) #define V_max(T) (CAST_VAL (T, TYPE_MAXIMUM (T))) #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 (snprintf (ref, sizeof ref, FMT (T), V_min (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 (snprintf (ref, sizeof ref, FMT (T), V_max (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); return 0; } /* snprintf doesn't accept %ju; skip this test. */ return 77; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-inttypes.c��������������������������������������������������������0000664�0000000�0000000�00000006403�11671051007�0020637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <inttypes.h> substitute. Copyright (C) 2006-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ #define __STDC_FORMAT_MACROS 1 /* to make it work also in C++ mode */ #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-20111211-stable/tests/test-ioctl.c�����������������������������������������������������������0000664�0000000�0000000�00000002343�11671051007�0020071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ioctl() function. 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 <http://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 "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; errno = 0; ASSERT (ioctl (99, FIONREAD, &value) == -1); ASSERT (errno == EBADF); } #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isatty.c����������������������������������������������������������0000664�0000000�0000000�00000002344�11671051007�0020275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test isatty() function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (isatty, int, (int)); #include <errno.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (isatty (-1) == 0); ASSERT (errno == EBADF || errno == 0 /* seen on Solaris 10 */ ); } { errno = 0; ASSERT (isatty (99) == 0); ASSERT (errno == EBADF || errno == 0 /* seen on Solaris 10 */ ); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isblank.c���������������������������������������������������������0000664�0000000�0000000�00000003047�11671051007�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isblank() function. Copyright (C) 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 <http://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 <http://www.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-20111211-stable/tests/test-isfinite.c��������������������������������������������������������0000664�0000000�0000000�00000016467�11671051007�0020605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isfinite() substitute. 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 <http://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. */ { 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (!isfinite (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (!isfinite (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (!isfinite (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (!isfinite (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (!isfinite (x.value)); } #endif #undef NWORDS } int main () { test_isfinitef (); test_isfinited (); test_isfinitel (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isinf.c�����������������������������������������������������������0000664�0000000�0000000�00000016532�11671051007�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isinf() substitute. 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 <http://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. */ { 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (!isinf (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (!isinf (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (!isinf (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (!isinf (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (!isinf (x.value)); } #endif #undef NWORDS } int main () { test_isinff (); test_isinfd (); test_isinfl (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isnan.c�����������������������������������������������������������0000664�0000000�0000000�00000015604�11671051007�0020073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. 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 <http://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. */ { 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)); } /* The isnan function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (isnan (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isnan (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isnan (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isnan (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isnan (x.value)); } #endif } int main () { test_float (); test_double (); test_long_double (); return 0; } ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isnand-nolibm.c���������������������������������������������������0000664�0000000�0000000�00000001455�11671051007�0021514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "isnand-nolibm.h" #include "test-isnand.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isnand.c����������������������������������������������������������0000664�0000000�0000000�00000001444�11671051007�0020234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "test-isnand.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isnand.h����������������������������������������������������������0000664�0000000�0000000�00000004024�11671051007�0020236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. 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 <http://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-20111211-stable/tests/test-isnanf-nolibm.c���������������������������������������������������0000664�0000000�0000000�00000001454�11671051007�0021515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanf() substitute. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "isnanf-nolibm.h" #include "test-isnanf.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isnanf.c����������������������������������������������������������0000664�0000000�0000000�00000001443�11671051007�0020235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanf() substitute. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "test-isnanf.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isnanf.h����������������������������������������������������������0000664�0000000�0000000�00000004100�11671051007�0020233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanf() substitute. 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 <http://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-20111211-stable/tests/test-isnanl-nolibm.c���������������������������������������������������0000664�0000000�0000000�00000001553�11671051007�0021523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanl() substitute. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "isnanl-nolibm.h" #include "test-isnanl.h" �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isnanl.c����������������������������������������������������������0000664�0000000�0000000�00000001534�11671051007�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanl() substitute. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <math.h> #include "test-isnanl.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-isnanl.h����������������������������������������������������������0000664�0000000�0000000�00000010504�11671051007�0020246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanl() substitute. 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 <http://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. */ { 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (isnanl (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isnanl (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isnanl (x.value)); } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-iswblank.c��������������������������������������������������������0000664�0000000�0000000�00000002042�11671051007�0020565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of iswblank() function. 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 <http://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-20111211-stable/tests/test-j0.c��������������������������������������������������������������0000664�0000000�0000000�00000002070�11671051007�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of j0() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-j1.c��������������������������������������������������������������0000664�0000000�0000000�00000002066�11671051007�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of j1() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-jn.c��������������������������������������������������������������0000664�0000000�0000000�00000004203�11671051007�0017363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of jn() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-langinfo-c++.cc���������������������������������������������������0000664�0000000�0000000�00000002011�11671051007�0021255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <langinfo.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-langinfo.c��������������������������������������������������������0000664�0000000�0000000�00000003571�11671051007�0020560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <langinfo.h> substitute. Copyright (C) 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 <http://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-20111211-stable/tests/test-lchown.c����������������������������������������������������������0000664�0000000�0000000�00000002473�11671051007�0020255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of lchown. Copyright (C) 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 <http://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-20111211-stable/tests/test-lchown.h����������������������������������������������������������0000664�0000000�0000000�00000023642�11671051007�0020263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of lchown. Copyright (C) 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 <http://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, which has no concept of groups. */ result = func (BASE "dir", st1.st_uid, getegid ()); if (result == -1 && errno == ENOSYS) { 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) { 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-20111211-stable/tests/test-ldexp.c�����������������������������������������������������������0000664�0000000�0000000�00000002533�11671051007�0020074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexp() function. 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 <http://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 LDEXP ldexp #define MIN_EXP DBL_MIN_EXP #define MAX_EXP DBL_MAX_EXP #include "test-ldexp.h" int main () { test_function (); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ldexp.h�����������������������������������������������������������0000664�0000000�0000000�00000006520�11671051007�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexp*() function family. 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 <http://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)); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ldexpf.c����������������������������������������������������������0000664�0000000�0000000�00000002536�11671051007�0020245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ldexpf() function. 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 <http://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 LDEXP ldexpf #define MIN_EXP FLT_MIN_EXP #define MAX_EXP FLT_MAX_EXP #include "test-ldexp.h" int main () { test_function (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ldexpl.c����������������������������������������������������������0000664�0000000�0000000�00000002730�11671051007�0020247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of multiplying a 'long double' by a power of 2. 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 <http://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 LDEXP ldexpl #define MIN_EXP LDBL_MIN_EXP #define MAX_EXP LDBL_MAX_EXP #include "test-ldexp.h" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); test_function (); return 0; } ����������������������������������������gnulib-20111211-stable/tests/test-lgamma.c����������������������������������������������������������0000664�0000000�0000000�00000002142�11671051007�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lgamma() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-link.c������������������������������������������������������������0000664�0000000�0000000�00000002400�11671051007�0017706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of link() function. Copyright (C) 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 <http://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-20111211-stable/tests/test-link.h������������������������������������������������������������0000664�0000000�0000000�00000013554�11671051007�0017727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of link() function. Copyright (C) 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 <http://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-20111211-stable/tests/test-linkat.c����������������������������������������������������������0000664�0000000�0000000�00000032042�11671051007�0020240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of linkat. Copyright (C) 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 <http://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); } { 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-20111211-stable/tests/test-linked_list.c�����������������������������������������������������0000664�0000000�0000000�00000041400�11671051007�0021255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "gl_linked_list.h" #include <stdlib.h> #include "gl_array_list.h" #include "progname.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_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; set_program_name (argv[0]); /* 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); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); 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: case 12: /* 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 13: 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 14: { 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 15: { 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-20111211-stable/tests/test-linkedhash_list.c�������������������������������������������������0000664�0000000�0000000�00000042702�11671051007�0022127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2011 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 <http://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 "progname.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 http://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_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; set_program_name (argv[0]); /* 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); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); 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: case 12: /* 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 13: 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 14: { 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 15: { 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-20111211-stable/tests/test-listen.c����������������������������������������������������������0000664�0000000�0000000�00000002261�11671051007�0020254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test listen() function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (listen, int, (int, int)); #include <errno.h> #include "sockets.h" #include "macros.h" int main (void) { gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (listen (-1, 1) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (listen (99 ,1) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-locale-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000002204�11671051007�0020723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <locale.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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_SETLOCALE SIGNATURE_CHECK (GNULIB_NAMESPACE::setlocale, char *, (int, const char *)); #endif #if GNULIB_TEST_DUPLOCALE && HAVE_DUPLOCALE SIGNATURE_CHECK (GNULIB_NAMESPACE::duplocale, locale_t, (locale_t)); #endif int main () { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-locale-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001470�11671051007�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <locale.h> substitute in C++ mode. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <clocale> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-locale.c����������������������������������������������������������0000664�0000000�0000000�00000002411�11671051007�0020212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <locale.h> substitute. 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 <http://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 }; #if HAVE_NEWLOCALE /* Check that the locale_t type and the LC_GLOBAL_LOCALE macro are defined. */ locale_t b = LC_GLOBAL_LOCALE; #endif /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ verify (sizeof NULL == sizeof (void *)); int main () { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-localename.c������������������������������������������������������0000664�0000000�0000000�00000053164�11671051007�0021066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_locale_name function and its variants. 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 <http://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_NEWLOCALE 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 *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_NEWLOCALE 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"); setlocale (LC_ALL, ""); 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"); ASSERT (strcmp (name, "de_DE.UTF-8") == 0); 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_NEWLOCALE /* 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); } } /* 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 locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { locale = newlocale (category_mask, "de_DE.UTF-8", locale); if (locale != NULL) { 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); } } } } } #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_NEWLOCALE /* 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); } } /* 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 locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { locale = newlocale (category_mask, "de_DE.UTF-8", locale); if (locale != NULL) { 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); } } } } } /* 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); } } /* 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); } } #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 *name; /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_NEWLOCALE 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"); setlocale (LC_ALL, ""); 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"); ASSERT (strcmp (name, "de_DE.UTF-8") == 0); 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_NEWLOCALE /* 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); } } #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_NEWLOCALE 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_NEWLOCALE /* 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); } } #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 MacOS X and Windows have a facility for the user to set the default locale. */ #if !((defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __WIN32__ || defined __CYGWIN__)) ASSERT (strcmp (name, "C") == 0); #endif #if HAVE_NEWLOCALE /* 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); } } #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-20111211-stable/tests/test-lock.c������������������������������������������������������������0000664�0000000�0000000�00000036262�11671051007�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locking in multithreaded situations. Copyright (C) 2005, 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> #if USE_POSIX_THREADS || USE_SOLARIS_THREADS || USE_PTH_THREADS || USE_WIN32_THREADS #if USE_POSIX_THREADS # define TEST_POSIX_THREADS 1 #endif #if USE_SOLARIS_THREADS # define TEST_SOLARIS_THREADS 1 #endif #if USE_PTH_THREADS # define TEST_PTH_THREADS 1 #endif #if USE_WIN32_THREADS # define TEST_WIN32_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 <stdio.h> #include <stdlib.h> #include <string.h> #if !ENABLE_LOCKING # undef USE_POSIX_THREADS # undef USE_SOLARIS_THREADS # undef USE_PTH_THREADS # undef USE_WIN32_THREADS #endif #include "glthread/lock.h" #if !ENABLE_LOCKING # if TEST_POSIX_THREADS # define USE_POSIX_THREADS 1 # endif # if TEST_SOLARIS_THREADS # define USE_SOLARIS_THREADS 1 # endif # if TEST_PTH_THREADS # define USE_PTH_THREADS 1 # endif # if TEST_WIN32_THREADS # define USE_WIN32_THREADS 1 # endif #endif #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 #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 volatile int lock_checker_done; static void * lock_checker_thread (void *arg) { while (!lock_checker_done) { 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; 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); 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 volatile int rwlock_checker_done; static void * rwlock_checker_thread (void *arg) { while (!rwlock_checker_done) { 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; 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); 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 volatile int reclock_checker_done; static void * reclock_checker_thread (void *arg) { while (!reclock_checker_done) { 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; 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); 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) (long) 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 /* Block all fire_signals. */ for (i = REPEAT_COUNT-1; i >= 0; i--) gl_rwlock_wrlock (fire_signal[i]); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (once_contender_thread, (void *) (long) i); for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Wait until every thread is ready. */ dbgprintf ("Main thread before synchonizing 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 synchonizing 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 TEST_PTH_THREADS if (!pth_init ()) abort (); #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-20111211-stable/tests/test-log.c�������������������������������������������������������������0000664�0000000�0000000�00000002073�11671051007�0017540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = log (x); ASSERT (y >= -0.5108256238 && y <= -0.5108256237); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-log10.c�����������������������������������������������������������0000664�0000000�0000000�00000002101�11671051007�0017671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = log10 (x); ASSERT (y >= -0.2218487497 && y <= -0.2218487496); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-log10f.c����������������������������������������������������������0000664�0000000�0000000�00000002102�11671051007�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log10f() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = log10f (x); ASSERT (y >= -0.2218488f && y <= -0.2218487f); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-log1p.c�����������������������������������������������������������0000664�0000000�0000000�00000002077�11671051007�0020005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of log1p() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = log1p (x); ASSERT (y >= 0.4700036292 && y <= 0.4700036293); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-logb.c������������������������������������������������������������0000664�0000000�0000000�00000002541�11671051007�0017702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logb() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; int main () { /* Some particular values. */ x = 0.6; y = logb (x); ASSERT (y == -1.0); x = 1.2; y = logb (x); ASSERT (y == 0.0); x = 2.1; y = logb (x); ASSERT (y == 1.0); x = 3.9; y = logb (x); ASSERT (y == 1.0); x = 4.0; y = logb (x); ASSERT (y == (FLT_RADIX == 2 ? 2.0 : 1.0)); x = 0.25; y = logb (x); ASSERT (y == (FLT_RADIX == 2 ? -2.0 : -1.0)); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-logf.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logf() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = logf (x); ASSERT (y >= -0.5108257f && y <= -0.5108256f); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-login_tty.c�������������������������������������������������������0000664�0000000�0000000�00000003650�11671051007�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of login_tty() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-logl.c������������������������������������������������������������0000664�0000000�0000000�00000002247�11671051007�0017717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of logl() function. Copyright (C) 2010-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 <http://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 "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 = logl (x); ASSERT (y >= -0.5108256238L && y <= -0.5108256237L); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-lseek.c�����������������������������������������������������������0000664�0000000�0000000�00000006300�11671051007�0020057�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lseek() function. 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 <http://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); errno = 0; ASSERT (lseek (99, (off_t)0, SEEK_CUR) == -1); ASSERT (errno == EBADF); break; default: return 1; } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-lseek.sh����������������������������������������������������������0000775�0000000�0000000�00000000607�11671051007�0020256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles= trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles=t-lseek.tmp # seekable files ./test-lseek${EXEEXT} 0 < "$srcdir/test-lseek.sh" > t-lseek.tmp || exit 1 # pipes echo hi | { ./test-lseek${EXEEXT} 1; echo $? > t-lseek.tmp; cat > /dev/null; } | cat test "`cat t-lseek.tmp`" = "0" || exit 1 # closed descriptors ./test-lseek${EXEEXT} 2 <&- >&- || exit 1 rm -rf $tmpfiles exit 0 �������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-lstat.c�����������������������������������������������������������0000664�0000000�0000000�00000003405�11671051007�0020106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lstat() function. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-lstat.h�����������������������������������������������������������0000664�0000000�0000000�00000007270�11671051007�0020117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lstat() function. Copyright (C) 2008-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 <http://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); ASSERT (SAME_INODE (st1, st2)); ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); ASSERT (func ("/", &st1) == 0); ASSERT (func ("///", &st2) == 0); ASSERT (SAME_INODE (st1, st2)); 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)); ASSERT (SAME_INODE (st1, st2)); 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-20111211-stable/tests/test-lutimens.h��������������������������������������������������������0000664�0000000�0000000�00000015144�11671051007�0020627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of file timestamp modification functions. Copyright (C) 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 <http://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] = { { Y2K, 0 }, { Y2K, 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] = { { Y2K, 0 }, { Y2K, 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] = { { Y2K, UTIME_BOGUS_POS }, { Y2K, 0 } }; errno = 0; ASSERT (func (BASE "link", ts) == -1); ASSERT (errno == EINVAL); } { struct timespec ts[2] = { { Y2K, 0 }, { Y2K, 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] = { { Y2K, BILLION / 2 - 1 }, { Y2K, 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] = { { BILLION, UTIME_OMIT }, { 0, 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) 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] = { { Y2K, 0 }, { Y2K, 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-20111211-stable/tests/test-malloc-gnu.c������������������������������������������������������0000664�0000000�0000000�00000001603�11671051007�0021013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of malloc function. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> int main () { /* Check that malloc (0) is not a NULL pointer. */ if (malloc (0) == NULL) return 1; return 0; } �����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-malloca.c���������������������������������������������������������0000664�0000000�0000000�00000003057�11671051007�0020372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of safe automatic memory allocation. Copyright (C) 2005, 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 <http://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 *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 MacOS 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-20111211-stable/tests/test-math-c++.cc�������������������������������������������������������0000664�0000000�0000000�00000022225�11671051007�0020422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <math.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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. */ #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) \ static rettype (* _GL_UNUSED signature_check_ ## func ## suffix) parameters \ = static_cast<rettype(*)parameters>(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)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::cbrt, double, (double)); #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_FABSF SIGNATURE_CHECK (GNULIB_NAMESPACE::fabsf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::fabs, double, (double)); #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_FMODF SIGNATURE_CHECK (GNULIB_NAMESPACE::fmodf, float, (float, float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::fmod, double, (double, double)); #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 //SIGNATURE_CHECK (GNULIB_NAMESPACE::hypot, double, (double, double)); //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)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::log10, double, (double)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::log1p, double, (double)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::logb, double, (double)); #if GNULIB_TEST_LOGF SIGNATURE_CHECK (GNULIB_NAMESPACE::logf, float, (float)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::log, double, (double)); #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_MODFF SIGNATURE_CHECK (GNULIB_NAMESPACE::modff, float, (float, float *)); #endif //SIGNATURE_CHECK (GNULIB_NAMESPACE::modf, double, (double, double *)); //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)); //SIGNATURE_CHECK (GNULIB_NAMESPACE::remainder, double, (double, double)); #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 # error "isfinite should not be a macro in C++" # endif REAL_FLOATING_CHECK (isfinite, int, (float), int, (double), int, (long double)); #endif #if GNULIB_TEST_ISINF # ifdef isinf # error "isinf should not be a macro in C++" # endif REAL_FLOATING_CHECK (isinf, int, (float), int, (double), int, (long double)); #endif #if GNULIB_TEST_ISNAN # ifdef isnan # error "isnan should not be a macro in C++" # endif REAL_FLOATING_CHECK (isnan, int, (float), int, (double), int, (long double)); #endif #if GNULIB_TEST_SIGNBIT # ifdef signbit # error "signbit should not be a macro in C++" # endif REAL_FLOATING_CHECK (signbit, int, (float), int, (double), int, (long double)); #endif int main () { } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-math-c++2.cc������������������������������������������������������0000664�0000000�0000000�00000001464�11671051007�0020506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <math.h> substitute in C++ mode. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cmath> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-math.c������������������������������������������������������������0000664�0000000�0000000�00000002522�11671051007�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <math.h> substitute. 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 <http://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 #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_equal (double x, double y) { return x == y; } int main (void) { double d = NAN; double zero = 0.0; if (numeric_equal (d, d)) return 1; d = HUGE_VAL; if (!numeric_equal (d, 1.0 / zero)) return 1; return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbmemcasecmp.c����������������������������������������������������0000664�0000000�0000000�00000003210�11671051007�0021402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive memory area comparison function. 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 <http://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-20111211-stable/tests/test-mbmemcasecmp.h����������������������������������������������������0000664�0000000�0000000�00000036224�11671051007�0021422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive memory area comparison function. 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 <http://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-20111211-stable/tests/test-mbmemcasecmp1.sh��������������������������������������������������0000775�0000000�0000000�00000000552�11671051007�0021664�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 \ ./test-mbmemcasecmp${EXEEXT} 1 ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbmemcasecmp2.sh��������������������������������������������������0000775�0000000�0000000�00000000575�11671051007�0021672�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 \ ./test-mbmemcasecmp${EXEEXT} 2 �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbmemcasecmp3.sh��������������������������������������������������0000775�0000000�0000000�00000000601�11671051007�0021661�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 \ ./test-mbmemcasecmp${EXEEXT} 3 �������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbmemcasecoll.c���������������������������������������������������0000664�0000000�0000000�00000003467�11671051007�0021572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive memory area comparison function. 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 <http://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-20111211-stable/tests/test-mbmemcasecoll1.sh�������������������������������������������������0000775�0000000�0000000�00000000553�11671051007�0022037�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 \ ./test-mbmemcasecoll${EXEEXT} 1 �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbmemcasecoll2.sh�������������������������������������������������0000775�0000000�0000000�00000000576�11671051007�0022045�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 \ ./test-mbmemcasecoll${EXEEXT} 2 ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbmemcasecoll3.sh�������������������������������������������������0000775�0000000�0000000�00000000602�11671051007�0022034�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 \ ./test-mbmemcasecoll${EXEEXT} 3 ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc-w32-1.sh��������������������������������������������������0000775�0000000�0000000�00000000122�11671051007�0021367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ./test-mbrtowc-w32${EXEEXT} French_France 1252 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc-w32-2.sh��������������������������������������������������0000775�0000000�0000000�00000000132�11671051007�0021371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ./test-mbrtowc-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc-w32-3.sh��������������������������������������������������0000775�0000000�0000000�00000000121�11671051007�0021370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ./test-mbrtowc-w32${EXEEXT} Japanese_Japan 932 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc-w32-4.sh��������������������������������������������������0000775�0000000�0000000�00000000121�11671051007�0021371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ./test-mbrtowc-w32${EXEEXT} Chinese_Taiwan 950 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc-w32-5.sh��������������������������������������������������0000775�0000000�0000000�00000000120�11671051007�0021371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ./test-mbrtowc-w32${EXEEXT} Chinese_China 936 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc-w32-6.sh��������������������������������������������������0000775�0000000�0000000�00000000331�11671051007�0021376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This test is not enabled by default, because MSVCRT does not support and # will likely never support locales with MB_CUR_MAX > 2. # Test a GB18030 locale. ./test-mbrtowc-w32${EXEEXT} Chinese_China 54936 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc-w32-7.sh��������������������������������������������������0000775�0000000�0000000�00000000407�11671051007�0021403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This test is not enabled by default, because MSVCRT does not support and # will likely never support locales with MB_CUR_MAX > 2. # Test some UTF-8 locales. ./test-mbrtowc-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc-w32.c�����������������������������������������������������0000664�0000000�0000000�00000054115�11671051007�0021051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to wide character. Copyright (C) 2008-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 <http://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 "macros.h" #if (defined _WIN32 || 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); 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); } 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); 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); } 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); 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); } return 0; case 54936: /* Locale encoding is CP54936 = 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 (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[5] = '\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. */ { 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-20111211-stable/tests/test-mbrtowc.c���������������������������������������������������������0000664�0000000�0000000�00000025103�11671051007�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to wide character. Copyright (C) 2008-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 <http://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); /* 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)); } 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[5] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 8, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; } return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc1.sh�������������������������������������������������������0000775�0000000�0000000�00000000545�11671051007�0020712�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 \ ./test-mbrtowc${EXEEXT} 1 �����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc2.sh�������������������������������������������������������0000775�0000000�0000000�00000000570�11671051007�0020711�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 \ ./test-mbrtowc${EXEEXT} 2 ����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc3.sh�������������������������������������������������������0000775�0000000�0000000�00000000560�11671051007�0020711�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 \ ./test-mbrtowc${EXEEXT} 3 ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbrtowc4.sh�������������������������������������������������������0000775�0000000�0000000�00000000602�11671051007�0020707�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 \ ./test-mbrtowc${EXEEXT} 4 ������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbscasecmp.c������������������������������������������������������0000664�0000000�0000000�00000003461�11671051007�0021076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. 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 <http://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-20111211-stable/tests/test-mbscasecmp.sh�����������������������������������������������������0000775�0000000�0000000�00000000575�11671051007�0021274�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 \ ./test-mbscasecmp${EXEEXT} �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbscasestr1.c�����������������������������������������������������0000664�0000000�0000000�00000006706�11671051007�0021215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. 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 <http://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-20111211-stable/tests/test-mbscasestr2.c�����������������������������������������������������0000664�0000000�0000000�00000010304�11671051007�0021203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. 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 <http://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-20111211-stable/tests/test-mbscasestr2.sh����������������������������������������������������0000775�0000000�0000000�00000000572�11671051007�0021404�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 \ ./test-mbscasestr2${EXEEXT} ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbscasestr3.c�����������������������������������������������������0000664�0000000�0000000�00000005005�11671051007�0021206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. 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 <http://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-20111211-stable/tests/test-mbscasestr3.sh����������������������������������������������������0000775�0000000�0000000�00000000572�11671051007�0021405�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 \ ./test-mbscasestr3${EXEEXT} ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbscasestr4.c�����������������������������������������������������0000664�0000000�0000000�00000003311�11671051007�0021205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. 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 <http://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-20111211-stable/tests/test-mbscasestr4.sh����������������������������������������������������0000775�0000000�0000000�00000000576�11671051007�0021412�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 \ ./test-mbscasestr4${EXEEXT} ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbschr.c����������������������������������������������������������0000664�0000000�0000000�00000004037�11671051007�0020237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character. 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 <http://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-20111211-stable/tests/test-mbschr.sh���������������������������������������������������������0000775�0000000�0000000�00000000565�11671051007�0020434�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 \ ./test-mbschr${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbscspn.c���������������������������������������������������������0000664�0000000�0000000�00000003543�11671051007�0020427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character among a given set of characters. 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 <http://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-20111211-stable/tests/test-mbscspn.sh��������������������������������������������������������0000775�0000000�0000000�00000000566�11671051007�0020624�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 \ ./test-mbscspn${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsinit.c���������������������������������������������������������0000664�0000000�0000000�00000002676�11671051007�0020435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test for initial conversion state. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-mbsinit.sh��������������������������������������������������������0000775�0000000�0000000�00000000566�11671051007�0020624�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 \ ./test-mbsinit${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsncasecmp.c�����������������������������������������������������0000664�0000000�0000000�00000005201�11671051007�0021246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. 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 <http://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-20111211-stable/tests/test-mbsncasecmp.sh����������������������������������������������������0000775�0000000�0000000�00000000576�11671051007�0021453�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 \ ./test-mbsncasecmp${EXEEXT} ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsnrtowcs.c������������������������������������������������������0000664�0000000�0000000�00000023146�11671051007�0021164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of string to wide string. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-mbsnrtowcs1.sh����������������������������������������������������0000775�0000000�0000000�00000000550�11671051007�0021432�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 \ ./test-mbsnrtowcs${EXEEXT} 1 ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsnrtowcs2.sh����������������������������������������������������0000775�0000000�0000000�00000000573�11671051007�0021440�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 \ ./test-mbsnrtowcs${EXEEXT} 2 �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsnrtowcs3.sh����������������������������������������������������0000775�0000000�0000000�00000000563�11671051007�0021440�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 \ ./test-mbsnrtowcs${EXEEXT} 3 ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsnrtowcs4.sh����������������������������������������������������0000775�0000000�0000000�00000000605�11671051007�0021436�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 \ ./test-mbsnrtowcs${EXEEXT} 4 ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbspbrk.c���������������������������������������������������������0000664�0000000�0000000�00000003230�11671051007�0020413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character among a given set of characters. 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 <http://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-20111211-stable/tests/test-mbspbrk.sh��������������������������������������������������������0000775�0000000�0000000�00000000566�11671051007�0020617�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 \ ./test-mbspbrk${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbspcasecmp.c�����������������������������������������������������0000664�0000000�0000000�00000004626�11671051007�0021262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. 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 <http://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-20111211-stable/tests/test-mbspcasecmp.sh����������������������������������������������������0000775�0000000�0000000�00000000576�11671051007�0021455�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 \ ./test-mbspcasecmp${EXEEXT} ����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsrchr.c���������������������������������������������������������0000664�0000000�0000000�00000003634�11671051007�0020423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for the last occurrence of a character. 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 <http://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-20111211-stable/tests/test-mbsrchr.sh��������������������������������������������������������0000775�0000000�0000000�00000000566�11671051007�0020617�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 \ ./test-mbsrchr${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsrtowcs.c�������������������������������������������������������0000664�0000000�0000000�00000023054�11671051007�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of string to wide string. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-mbsrtowcs1.sh�����������������������������������������������������0000775�0000000�0000000�00000000547�11671051007�0021262�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 \ ./test-mbsrtowcs${EXEEXT} 1 ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsrtowcs2.sh�����������������������������������������������������0000775�0000000�0000000�00000000572�11671051007�0021261�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 \ ./test-mbsrtowcs${EXEEXT} 2 ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsrtowcs3.sh�����������������������������������������������������0000775�0000000�0000000�00000000562�11671051007�0021261�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 \ ./test-mbsrtowcs${EXEEXT} 3 ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsrtowcs4.sh�����������������������������������������������������0000775�0000000�0000000�00000000604�11671051007�0021257�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 \ ./test-mbsrtowcs${EXEEXT} 4 ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsspn.c����������������������������������������������������������0000664�0000000�0000000�00000003510�11671051007�0020256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character outside a given set of characters. 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 <http://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-20111211-stable/tests/test-mbsspn.sh���������������������������������������������������������0000775�0000000�0000000�00000000565�11671051007�0020460�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 \ ./test-mbsspn${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsstr1.c���������������������������������������������������������0000664�0000000�0000000�00000006514�11671051007�0020356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. 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 <http://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-20111211-stable/tests/test-mbsstr2.c���������������������������������������������������������0000664�0000000�0000000�00000010244�11671051007�0020352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. 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 <http://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-20111211-stable/tests/test-mbsstr2.sh��������������������������������������������������������0000775�0000000�0000000�00000000566�11671051007�0020553�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 \ ./test-mbsstr2${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-mbsstr3.c���������������������������������������������������������0000664�0000000�0000000�00000004713�11671051007�0020357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching in a string. 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 <http://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-20111211-stable/tests/test-mbsstr3.sh��������������������������������������������������������0000775�0000000�0000000�00000000566�11671051007�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 chinese GB18030 locale is installed" else echo "Skipping test: no chinese GB18030 locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ./test-mbsstr3${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-md2.c�������������������������������������������������������������0000664�0000000�0000000�00000003730�11671051007�0017442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-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, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU 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 Simon Josefsson. */ #include <config.h> #include <stdio.h> #include <string.h> #include "md2.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-20111211-stable/tests/test-md4.c�������������������������������������������������������������0000664�0000000�0000000�00000003766�11671051007�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ /* Written by Simon Josefsson. */ #include <config.h> #include <stdio.h> #include <string.h> #include "md4.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-20111211-stable/tests/test-md5.c�������������������������������������������������������������0000664�0000000�0000000�00000003665�11671051007�0017454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2009-2011 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 <http://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #include <config.h> #include <stdio.h> #include <string.h> #include "md5.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] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < MD5_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFF); 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] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < MD5_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } return 0; } ���������������������������������������������������������������������������gnulib-20111211-stable/tests/test-memcasecmp.c������������������������������������������������������0000664�0000000�0000000�00000004362�11671051007�0021074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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. */ ASSERT (memcasecmp (zerosize_ptr (), zerosize_ptr (), 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-20111211-stable/tests/test-memchr.c����������������������������������������������������������0000664�0000000�0000000�00000007312�11671051007�0020233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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); ASSERT (MEMCHR (zerosize_ptr (), '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 <http://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-20111211-stable/tests/test-memchr2.c���������������������������������������������������������0000664�0000000�0000000�00000005644�11671051007�0020323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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); ASSERT (MEMCHR2 (zerosize_ptr (), '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-20111211-stable/tests/test-memcmp.c����������������������������������������������������������0000664�0000000�0000000�00000004373�11671051007�0020242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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) { /* Test equal / not equal distinction. */ ASSERT (memcmp (zerosize_ptr (), zerosize_ptr (), 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. */ ASSERT (memcmp ("\100", "\201", 1) < 0); ASSERT (memcmp ("\201", "\100", 1) > 0); ASSERT (memcmp ("\200", "\201", 1) < 0); ASSERT (memcmp ("\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-20111211-stable/tests/test-memcoll.c���������������������������������������������������������0000664�0000000�0000000�00000003345�11671051007�0020412�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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-20111211-stable/tests/test-memmem.c����������������������������������������������������������0000664�0000000�0000000�00000021051�11671051007�0020231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2004, 2007-2011 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 <http://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" static void * null_ptr (void) { return NULL; } 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. */ signal (SIGALRM, SIG_DFL); alarm (100); #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. */ { const char *result = memmem (zerosize_ptr (), 0, "foo", 3); ASSERT (result == NULL); } { const char input[] = "foo"; const char *result = memmem (input, strlen (input), null_ptr (), 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); } } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-memrchr.c���������������������������������������������������������0000664�0000000�0000000�00000004625�11671051007�0020421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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" /* 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); ASSERT (MEMRCHR (zerosize_ptr (), '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-20111211-stable/tests/test-mkdir.c�����������������������������������������������������������0000664�0000000�0000000�00000002374�11671051007�0020071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkdir. Copyright (C) 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 <http://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-20111211-stable/tests/test-mkdir.h�����������������������������������������������������������0000664�0000000�0000000�00000006211�11671051007�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of mkdir() function. Copyright (C) 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 <http://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-20111211-stable/tests/test-mkdirat.c���������������������������������������������������������0000664�0000000�0000000�00000005075�11671051007�0020417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkdirat. Copyright (C) 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 <http://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 "progname.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 (int argc _GL_UNUSED, char *argv[]) { int result; set_program_name (argv[0]); /* 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); } { 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-20111211-stable/tests/test-mkfifo.c����������������������������������������������������������0000664�0000000�0000000�00000002406�11671051007�0020232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkfifo. Copyright (C) 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 <http://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-20111211-stable/tests/test-mkfifo.h����������������������������������������������������������0000664�0000000�0000000�00000004750�11671051007�0020243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkfifo and friends. Copyright (C) 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 <http://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); ASSERT (errno == EEXIST || errno == EINVAL); 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-20111211-stable/tests/test-mkfifoat.c��������������������������������������������������������0000664�0000000�0000000�00000010432�11671051007�0020555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mkfifoat and mknodat. Copyright (C) 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 <http://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 */ ); } { 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-20111211-stable/tests/test-mknod.c�����������������������������������������������������������0000664�0000000�0000000�00000003041�11671051007�0020063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of mknod. Copyright (C) 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 <http://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-20111211-stable/tests/test-modf.c������������������������������������������������������������0000664�0000000�0000000�00000002420�11671051007�0017700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modf() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; double z; 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); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-modff.c�����������������������������������������������������������0000664�0000000�0000000�00000002411�11671051007�0020046�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of modff() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile float x; float y; float z; 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); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-nanosleep.c�������������������������������������������������������0000664�0000000�0000000�00000004310�11671051007�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nanosleep() function. Copyright (C) 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 <http://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 "intprops.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-20111211-stable/tests/test-net_if.c����������������������������������������������������������0000664�0000000�0000000�00000004500�11671051007�0020220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <net/if.h> functions. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson <simon@josefsson.org>, 2010. */ #include <config.h> #include <net/if.h> #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 *)); #include <stddef.h> /* NULL */ #include <stdio.h> /* fprintf */ int main (int argc, char *argv[]) { 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); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-netdb-c++.cc������������������������������������������������������0000664�0000000�0000000�00000002634�11671051007�0020567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <netdb.h> substitute in C++ mode. 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 <http://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-20111211-stable/tests/test-netdb.c�����������������������������������������������������������0000664�0000000�0000000�00000002004�11671051007�0020045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <netdb.h> substitute. Copyright (C) 2007-2008, 2010-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 <http://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-20111211-stable/tests/test-netinet_in.c������������������������������������������������������0000664�0000000�0000000�00000001565�11671051007�0021120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <netinet/in.h> substitute. 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 <http://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-20111211-stable/tests/test-nextafter.c�������������������������������������������������������0000664�0000000�0000000�00000002560�11671051007�0020760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nextafter() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-nl_langinfo.c�����������������������������������������������������0000664�0000000�0000000�00000011100�11671051007�0021234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nl_langinfo replacement. Copyright (C) 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 <http://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 (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-20111211-stable/tests/test-nl_langinfo.sh����������������������������������������������������0000775�0000000�0000000�00000000665�11671051007�0021445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh LC_ALL=C ./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 ./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 ./test-nl_langinfo${EXEEXT} 2 || exit 1 fi exit 0 ���������������������������������������������������������������������������gnulib-20111211-stable/tests/test-nonblocking-misc.h������������������������������������������������0000664�0000000�0000000�00000006203�11671051007�0022217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write. 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 <http://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 (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-20111211-stable/tests/test-nonblocking-pipe-child.c������������������������������������������0000664�0000000�0000000�00000002741�11671051007�0023300�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-nonblocking-pipe-main. 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 <http://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 (STDIN_FILENO); main_reader_loop (test, PIPE_DATA_BLOCK_SIZE, STDIN_FILENO); return 0; } �������������������������������gnulib-20111211-stable/tests/test-nonblocking-pipe-main.c�������������������������������������������0000664�0000000�0000000�00000005514�11671051007�0023142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write on pipes. 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 <http://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 __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 = argv[1]; int test = atoi (argv[2]); int fd[2]; int child; int exitcode; /* 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 __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-20111211-stable/tests/test-nonblocking-pipe.h������������������������������������������������0000664�0000000�0000000�00000003366�11671051007�0022230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write. 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 <http://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 FreeBSD, OpenBSD, MacOS X >= 65537 AIX >= 32769 HP-UX >= 8193 IRIX >= 10241 OSF/1 >= 262145 Solaris <= 7 >= 10241 Solaris >= 8 >= 20481 Cygwin >= 65537 native Win32 >= 4097 (depends on the _pipe argument) */ #if 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 #else # define PIPE_DATA_BLOCK_SIZE 70000 #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-nonblocking-pipe.sh�����������������������������������������������0000775�0000000�0000000�00000001417�11671051007�0022411�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. #./test-nonblocking-pipe-main${EXEEXT} ./test-nonblocking-pipe-child${EXEEXT} 0 || exit 1 # Test non-blocking write() with blocking read(). ./test-nonblocking-pipe-main${EXEEXT} ./test-nonblocking-pipe-child${EXEEXT} 1 || exit 1 # Test blocking write() with non-blocking read(). ./test-nonblocking-pipe-main${EXEEXT} ./test-nonblocking-pipe-child${EXEEXT} 2 || exit 1 # Test non-blocking write() with non-blocking read(). ./test-nonblocking-pipe-main${EXEEXT} ./test-nonblocking-pipe-child${EXEEXT} 3 || exit 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-nonblocking-reader.h����������������������������������������������0000664�0000000�0000000�00000014351�11671051007�0022531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The reader part of a test program for non-blocking communication. 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 <http://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); 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-20111211-stable/tests/test-nonblocking-socket-child.c����������������������������������������0000664�0000000�0000000�00000002701�11671051007�0023627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-nonblocking-socket-main. 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 <http://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-20111211-stable/tests/test-nonblocking-socket-main.c�����������������������������������������0000664�0000000�0000000�00000006107�11671051007�0023474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write on sockets. 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 <http://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 __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 = argv[1]; int test = atoi (argv[2]); int server; int port; int child; int server_socket; int exitcode; /* 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 __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-20111211-stable/tests/test-nonblocking-socket.h����������������������������������������������0000664�0000000�0000000�00000004673�11671051007�0022565�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for nonblocking read and write. 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 <http://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) FreeBSD >= 107521 OpenBSD >= 28673 MacOS 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 Win32 >= 66294401 */ #if defined __OpenBSD__ # define SOCKET_DATA_BLOCK_SIZE 100000 #else # define SOCKET_DATA_BLOCK_SIZE 1000000 #endif /* On Linux, MacOS X, Cygwin 1.5.x, native Win32, 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 __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __WIN32__) || defined __CYGWIN__ # define SOCKET_HAS_LARGE_BUFFER 1 #else # define SOCKET_HAS_LARGE_BUFFER 0 #endif ���������������������������������������������������������������������gnulib-20111211-stable/tests/test-nonblocking-socket.sh���������������������������������������������0000775�0000000�0000000�00000001112�11671051007�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test blocking write() with blocking read(). ./test-nonblocking-socket-main${EXEEXT} ./test-nonblocking-socket-child${EXEEXT} 0 || exit 1 # Test non-blocking write() with blocking read(). ./test-nonblocking-socket-main${EXEEXT} ./test-nonblocking-socket-child${EXEEXT} 1 || exit 1 # Test blocking write() with non-blocking read(). ./test-nonblocking-socket-main${EXEEXT} ./test-nonblocking-socket-child${EXEEXT} 2 || exit 1 # Test non-blocking write() with non-blocking read(). ./test-nonblocking-socket-main${EXEEXT} ./test-nonblocking-socket-child${EXEEXT} 3 || exit 1 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-nonblocking-writer.h����������������������������������������������0000664�0000000�0000000�00000014631�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The writer part of a test program for non-blocking communication. 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 <http://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); 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); 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); usleep (SMALL_DELAY); } else { ASSERT (ret > 0); bytes_written += ret; } } } break; default: abort (); } free (data); return too_small; } �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-nonblocking.c�����������������������������������������������������0000664�0000000�0000000�00000010057�11671051007�0021263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test manipulation of non-blocking flag. 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 <http://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 __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 (10000000, false) == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-obstack-printf.c��������������������������������������������������0000664�0000000�0000000�00000007223�11671051007�0021707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of obstack_printf() and obstack_vprintf() functions. Copyright (C) 2008-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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_obstack_vprintf (); test_obstack_printf (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-open.c������������������������������������������������������������0000664�0000000�0000000�00000002147�11671051007�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file descriptor. 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 <http://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-20111211-stable/tests/test-open.h������������������������������������������������������������0000664�0000000�0000000�00000005661�11671051007�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file descriptor. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* 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 int test_open (int (*func) (char const *, int, ...), bool print) { int fd; /* Remove anything from prior partial run. */ unlink (BASE "file"); /* 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); /* 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); /* 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 "link") == 0); return 0; } �������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-openat-safer.c����������������������������������������������������0000664�0000000�0000000�00000007445�11671051007�0021353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that openat_safer leave standard fds alone. Copyright (C) 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 <http://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); /* Using a bad directory is okay for absolute paths. */ fd = openat (-1, "/dev/null", O_WRONLY); ASSERT (STDERR_FILENO < fd); /* Using a non-directory is wrong for relative paths. */ errno = 0; 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-20111211-stable/tests/test-openat.c����������������������������������������������������������0000664�0000000�0000000�00000005210�11671051007�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that openat works. Copyright (C) 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 <http://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 "progname.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 (int argc _GL_UNUSED, char *argv[]) { int result; set_program_name (argv[0]); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (openat (-1, "foo", O_RDONLY) == -1); ASSERT (errno == EBADF); } { 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-20111211-stable/tests/test-openpty.c���������������������������������������������������������0000664�0000000�0000000�00000006062�11671051007�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pty.h and openpty function. Copyright (C) 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 <http://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 () { { 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 MacOS 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 MacOS X 10.4.11. */ close (master); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-parse-datetime.c��������������������������������������������������0000664�0000000�0000000�00000031320�11671051007�0021660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of parse_datetime() function. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 Simon Josefsson <simon@josefsson.org>, 2008. */ #include <config.h> #include "parse-datetime.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "progname.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 (int argc _GL_UNUSED, 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_program_name (argv[0]); 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); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-parse-duration.c��������������������������������������������������0000664�0000000�0000000�00000002766�11671051007�0021725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of parsing durations. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-parse-duration.sh�������������������������������������������������0000775�0000000�0000000�00000003273�11671051007�0022112�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=`${exe} "${line}"` || { ls -l "${tmpf}"; die "Failed: ${exe} '${line}'"; } test $v -eq 38898367 || die $v is not 38898367 done exec 3>&- �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-passfd.c����������������������������������������������������������0000664�0000000�0000000�00000005336�11671051007�0020244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of passing file descriptors. 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 <http://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. */ signal (SIGALRM, SIG_DFL); alarm (5); # 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 { 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; } 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-20111211-stable/tests/test-pathmax.c���������������������������������������������������������0000664�0000000�0000000�00000001676�11671051007�0020431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of "pathmax.h". 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 <http://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-20111211-stable/tests/test-perror.c����������������������������������������������������������0000664�0000000�0000000�00000002167�11671051007�0020274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of perror() function. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <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-20111211-stable/tests/test-perror.sh���������������������������������������������������������0000775�0000000�0000000�00000001501�11671051007�0020456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . # Test NULL prefix. Result should not contain a number. test-perror 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror.tmp grep '[0-9]' t-perror.tmp > /dev/null \ && fail_ "result should not contain a number" # Test empty prefix. Result should be the same. 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. 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. test-perror >out 2>/dev/null || fail_ "unexpected exit status" test -s out && fail_ "unexpected output" Exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-perror2.c���������������������������������������������������������0000664�0000000�0000000�00000007057�11671051007�0020361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of perror() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <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 (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1)); ASSERT (msg2 == msg4 || STREQ (msg2, str2)); ASSERT (msg3 == msg4 || STREQ (msg3, str3)); 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]; 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: http://sourceware.org/ml/newlib/2011/msg00228.html */ ASSERT (errno > 0); /* Commented out until glibc behaves: http://sourceware.org/bugzilla/show_bug.cgi?id=12792 */ ASSERT (ferror (stderr)); #endif } ASSERT (fclose (stderr) == 0); ASSERT (remove (BASE ".tmp") == 0); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-pipe-filter-gi1.c�������������������������������������������������0000664�0000000�0000000�00000005540�11671051007�0021657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of filtering of data through a subprocess. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "pipe-filter.h" #include "binary-io.h" #include "c-ctype.h" #include "read-file.h" #include "progname.h" #include "macros.h" /* Pipe a text file through 'tr "[a-z]" "[A-Z]"', 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; set_program_name (argv[0]); ASSERT (argc == 3); tr_program = argv[1]; /* Read some text from a file. */ input_filename = argv[2]; input = read_binary_file (input_filename, &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] = "[a-z]"; argv[2] = "[A-Z]"; 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); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-pipe-filter-gi1.sh������������������������������������������������0000775�0000000�0000000�00000001072�11671051007�0022046�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. ./test-pipe-filter-gi1${EXEEXT} ${TR} "${srcdir}/test-pipe-filter-gi1.sh" || exit 1 # A medium-sized file. ./test-pipe-filter-gi1${EXEEXT} ${TR} "${srcdir}/test-pipe-filter-gi1.c" || exit 1 # A large file. ./test-pipe-filter-gi1${EXEEXT} ${TR} "${srcdir}/test-vasnprintf-posix.c" || exit 1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-pipe-filter-gi2-child.c�������������������������������������������0000664�0000000�0000000�00000002363�11671051007�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-pipe-filter-gi2-main. Copyright (C) 2009-2011 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 <http://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-20111211-stable/tests/test-pipe-filter-gi2-main.c��������������������������������������������0000664�0000000�0000000�00000007701�11671051007�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test harness for pipe-filter-gi. Copyright (C) 2009-2011 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 <http://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 "progname.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 }; set_program_name (argv[0]); 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-20111211-stable/tests/test-pipe-filter-gi2.sh������������������������������������������������0000775�0000000�0000000�00000002213�11671051007�0022045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # pipe-filter test driver. # # Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ ./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-20111211-stable/tests/test-pipe-filter-ii1.c�������������������������������������������������0000664�0000000�0000000�00000006546�11671051007�0021670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of filtering of data through a subprocess. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "pipe-filter.h" #include "binary-io.h" #include "c-ctype.h" #include "read-file.h" #include "progname.h" #include "macros.h" /* Pipe a text file through 'tr "[a-z]" "[A-Z]"', 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; set_program_name (argv[0]); ASSERT (argc == 3); tr_program = argv[1]; /* Read some text from a file. */ input_filename = argv[2]; input = read_binary_file (input_filename, &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] = "[a-z]"; argv[2] = "[A-Z]"; 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); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-pipe-filter-ii1.sh������������������������������������������������0000775�0000000�0000000�00000001072�11671051007�0022050�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. ./test-pipe-filter-ii1${EXEEXT} ${TR} "${srcdir}/test-pipe-filter-ii1.sh" || exit 1 # A medium-sized file. ./test-pipe-filter-ii1${EXEEXT} ${TR} "${srcdir}/test-pipe-filter-ii1.c" || exit 1 # A large file. ./test-pipe-filter-ii1${EXEEXT} ${TR} "${srcdir}/test-vasnprintf-posix.c" || exit 1 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-pipe-filter-ii2-child.c�������������������������������������������0000664�0000000�0000000�00000002363�11671051007�0022743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-pipe-filter-ii2-main. Copyright (C) 2009-2011 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 <http://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-20111211-stable/tests/test-pipe-filter-ii2-main.c��������������������������������������������0000664�0000000�0000000�00000007421�11671051007�0022604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test harness for pipe-filter-ii. Copyright (C) 2009-2011 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 <http://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 "progname.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 }; set_program_name (argv[0]); ASSERT (argc == 2); /* 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-20111211-stable/tests/test-pipe-filter-ii2.sh������������������������������������������������0000775�0000000�0000000�00000002142�11671051007�0022050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # pipe-filter test driver. # # Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ ./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-20111211-stable/tests/test-pipe.c������������������������������������������������������������0000664�0000000�0000000�00000005372�11671051007�0017721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pipe. Copyright (C) 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (pipe, int, (int[2])); #include <fcntl.h> #include <stdbool.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" #endif #include "binary-io.h" #include "macros.h" /* Return true if FD is open. */ static bool is_open (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 __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 __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-20111211-stable/tests/test-pipe2.c�����������������������������������������������������������0000664�0000000�0000000�00000007344�11671051007�0020004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pipe2. Copyright (C) 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <unistd.h> #include "signature.h" SIGNATURE_CHECK (pipe2, int, (int[2], int)); #include <fcntl.h> #include <stdbool.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" #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 __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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 __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 __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-20111211-stable/tests/test-poll-h-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000002005�11671051007�0020656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <poll.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-poll-h.c����������������������������������������������������������0000664�0000000�0000000�00000002102�11671051007�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <poll.h> substitute. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-poll.c������������������������������������������������������������0000664�0000000�0000000�00000020050�11671051007�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of poll() function. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # define WIN32_NATIVE #endif #ifdef WIN32_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 #ifndef SO_REUSEPORT #define SO_REUSEPORT SO_REUSEADDR #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); 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); } x = 1; setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x)); 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 WIN32_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 = 0; 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 WIN32_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); close (s); write (c, "foo", 3); read (c, buf, 3); shutdown (c, SHUT_RD); close (c); exit (0); } else { close (s); c = connect_to_socket (true); if (poll1_nowait (c, POLLOUT | POLLWRNORM | POLLRDBAND) != (POLLOUT | POLLWRNORM)) failed ("cannot write after blocking connect"); write (c, "foo", 3); wait (&pid); if (poll1_wait (c, POLLIN) != POLLIN) failed ("cannot read data left in the socket by closed process"); read (c, buf, 3); write (c, "foo", 3); if ((poll1_wait (c, POLLIN | POLLOUT) & (POLLHUP | POLLERR)) == 0) failed ("expecting POLLHUP after shutdown"); 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"); write (wd, "foo", 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"); read (rd, buf, 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); close (s); test_pair (c1, c2); close (c1); write (c2, "foo", 3); if ((poll1_nowait (c2, POLLIN | POLLOUT) & (POLLHUP | POLLERR)) == 0) failed ("expecting POLLHUP after shutdown"); close (c2); } /* Test poll(2) on pipes. */ static void test_pipe (void) { int fd[2]; pipe (fd); test_pair (fd[0], fd[1]); close (fd[0]); if ((poll1_wait (fd[1], POLLIN | POLLOUT) & (POLLHUP | POLLERR)) == 0) failed ("expecting POLLHUP after shutdown"); 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-20111211-stable/tests/test-popen-safer.c�����������������������������������������������������0000664�0000000�0000000�00000004317�11671051007�0021201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a subcommand stream. Copyright (C) 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 <http://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-20111211-stable/tests/test-popen-safer2.c����������������������������������������������������0000664�0000000�0000000�00000001567�11671051007�0021267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a subcommand stream. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include "stdio--.h" #include "test-popen.h" �����������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-popen.c�����������������������������������������������������������0000664�0000000�0000000�00000001765�11671051007�0020107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a subcommand stream. Copyright (C) 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 <http://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-20111211-stable/tests/test-popen.h�����������������������������������������������������������0000664�0000000�0000000�00000005202�11671051007�0020102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a subcommand stream. Copyright (C) 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 <http://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-20111211-stable/tests/test-posix_openpt.c����������������������������������������������������0000664�0000000�0000000�00000003747�11671051007�0021517�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_openpt function. 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 <http://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 MacOS X 10.4.11. */ ASSERT (close (master) == 0); ASSERT (close (slave) == 0); return 0; } �������������������������gnulib-20111211-stable/tests/test-posix_spawn1.c����������������������������������������������������0000664�0000000�0000000�00000012547�11671051007�0021421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function. Copyright (C) 2008-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 <http://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> extern char **environ; #define CHILD_PROGRAM_FILENAME "test-posix_spawn1.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] = { "/bin/sh", 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); 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, 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, (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) || (err = posix_spawnp (&child, "/bin/sh", &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"); 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-20111211-stable/tests/test-posix_spawn1.in.sh������������������������������������������������0000664�0000000�0000000�00000000035�11671051007�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh echo "Halle Potta" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-posix_spawn2.c����������������������������������������������������0000664�0000000�0000000�00000007647�11671051007�0021427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function. Copyright (C) 2008-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 <http://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> extern char **environ; #define CHILD_PROGRAM_FILENAME "test-posix_spawn2.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] = { "/bin/sh", 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); 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, "/bin/sh", &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-20111211-stable/tests/test-posix_spawn2.in.sh������������������������������������������������0000664�0000000�0000000�00000000061�11671051007�0022203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh read line test "$line" = "Halle Potta" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-posix_spawn3.c����������������������������������������������������0000664�0000000�0000000�00000010517�11671051007�0021416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of posix_spawn() function. Copyright (C) 2008-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 <http://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> extern char **environ; #define CHILD_PROGRAM_FILENAME "test-posix_spawn3" #define DATA_FILENAME "t!#$%&'()*+,-;=?@[\\]^_`{|}~.tmp" /* On Cygwin, '*' '?' '\\' '|' cannot be used in file names. */ #if 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. */ 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 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-20111211-stable/tests/test-posix_spawn_file_actions_addclose.c�������������������������������0000664�0000000�0000000�00000002512�11671051007�0025704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test posix_spawn_file_actions_addclose() function. 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 <http://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 "macros.h" 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); } { errno = 0; ASSERT (posix_spawn_file_actions_addclose (&actions, 10000000) == EBADF); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-posix_spawn_file_actions_adddup2.c��������������������������������0000664�0000000�0000000�00000003031�11671051007�0025446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test posix_spawn_file_actions_adddup2() function. 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 <http://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 "macros.h" 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_adddup2 (&actions, -1, 2) == EBADF); } { errno = 0; ASSERT (posix_spawn_file_actions_adddup2 (&actions, 10000000, 2) == EBADF); } { errno = 0; ASSERT (posix_spawn_file_actions_adddup2 (&actions, 2, -1) == EBADF); } { errno = 0; ASSERT (posix_spawn_file_actions_adddup2 (&actions, 2, 10000000) == EBADF); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-posix_spawn_file_actions_addopen.c��������������������������������0000664�0000000�0000000�00000003042�11671051007�0025537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test posix_spawn_file_actions_addopen() function. 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 <http://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 "macros.h" 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); } { errno = 0; ASSERT (posix_spawn_file_actions_addopen (&actions, 10000000, "foo", 0, O_RDONLY) == EBADF); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-posixtm.c���������������������������������������������������������0000664�0000000�0000000�00000015166�11671051007�0020471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that posixtime works as required. Copyright (C) 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 <http://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; int64_t t_expected; }; /* Test mainly with syntax_bits == 13 (aka: (PDS_LEADING_YEAR | PDS_CENTURY | PDS_SECONDS)) */ static struct posixtm_test const T[] = { /* no year specified; cross-check via another posixtime call */ { "12131415.16", 13, 1, 0}, /* ??? Dec 13 14:15:16 ???? */ { "12131415", 13, 1, 0}, /* ??? Dec 13 14:15:00 ???? */ /* These two tests fail on 64-bit Solaris up through at least Solaris 10, which is off by one day for time stamps before 0001-01-01 00:00:00 UTC. */ { "000001010000.00", 13, 1, -62167219200}, /* Sat Jan 1 00:00:00 0 */ { "000012312359.59", 13, 1, -62135596801}, /* Fri Dec 31 23:59:59 0 */ { "000101010000.00", 13, 1, -62135596800}, /* Sat Jan 1 00:00:00 1 */ { "190112132045.51", 13, 1, -2147483649}, /* Fri Dec 13 20:45:51 1901 */ { "190112132045.52", 13, 1, -2147483648}, /* Fri Dec 13 20:45:52 1901 */ { "190112132045.53", 13, 1, -2147483647}, /* Fri Dec 13 20:45:53 1901 */ { "190112132046.52", 13, 1, -2147483588}, /* Fri Dec 13 20:46:52 1901 */ { "190112132145.52", 13, 1, -2147480048}, /* Fri Dec 13 21:45:52 1901 */ { "190112142045.52", 13, 1, -2147397248}, /* Sat Dec 14 20:45:52 1901 */ { "190201132045.52", 13, 1, -2144805248}, /* Mon Jan 13 20:45:52 1902 */ { "196912312359.59", 13, 1, -1}, /* Wed Dec 31 23:59:59 1969 */ { "197001010000.00", 13, 1, 0}, /* Thu Jan 1 00:00:00 1970 */ { "197001010000.01", 13, 1, 1}, /* Thu Jan 1 00:00:01 1970 */ { "197001010001.00", 13, 1, 60}, /* Thu Jan 1 00:01:00 1970 */ { "197001010000.60", 13, 1, 60}, /* Thu Jan 1 00:01:00 1970 */ { "197001010100.00", 13, 1, 3600}, /* Thu Jan 1 01:00:00 1970 */ { "197001020000.00", 13, 1, 86400}, /* Fri Jan 2 00:00:00 1970 */ { "197002010000.00", 13, 1, 2678400}, /* Sun Feb 1 00:00:00 1970 */ { "197101010000.00", 13, 1, 31536000}, /* Fri Jan 1 00:00:00 1971 */ { "197001000000.00", 13, 0, 0}, /* -- */ { "197000010000.00", 13, 0, 0}, /* -- */ { "197001010060.00", 13, 0, 0}, /* -- */ { "197001012400.00", 13, 0, 0}, /* -- */ { "197001320000.00", 13, 0, 0}, /* -- */ { "197013010000.00", 13, 0, 0}, /* -- */ { "203801190314.06", 13, 1, 2147483646}, /* Tue Jan 19 03:14:06 2038 */ { "203801190314.07", 13, 1, 2147483647}, /* Tue Jan 19 03:14:07 2038 */ { "203801190314.08", 13, 1, 2147483648}, /* Tue Jan 19 03:14:08 2038 */ { "999912312359.59", 13, 1, 253402300799}, /* Fri Dec 31 23:59:59 9999 */ { "1112131415", 13, 1, 1323785700}, /* Tue Dec 13 14:15:00 2011 */ { "1112131415.16", 13, 1, 1323785716}, /* Tue Dec 13 14:15:16 2011 */ { "201112131415.16", 13, 1, 1323785716}, /* Tue Dec 13 14:15:16 2011 */ { "191112131415.16", 13, 1, -1831974284}, /* Wed Dec 13 14:15:16 1911 */ { "203712131415.16", 13, 1, 2144326516}, /* Sun Dec 13 14:15:16 2037 */ { "3712131415.16", 13, 1, 2144326516}, /* Sun Dec 13 14:15:16 2037 */ { "6812131415.16", 13, 1, 3122633716}, /* Thu Dec 13 14:15:16 2068 */ { "6912131415.16", 13, 1, -1590284}, /* Sat Dec 13 14:15:16 1969 */ { "7012131415.16", 13, 1, 29945716}, /* Sun Dec 13 14:15:16 1970 */ { "1213141599", 2, 1, 945094500}, /* Mon Dec 13 14:15:00 1999 */ { "1213141500", 2, 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 = T[i].t_expected; 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 (T[i].valid && t_exp != T[i].t_expected) { printf ("skipping %s: result is out of range of your time_t\n", T[i].in); continue; } /* 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, t_out, t_exp); fail = 1; } } return fail; } /* Local Variables: indent-tabs-mode: nil End: */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-pow.c�������������������������������������������������������������0000664�0000000�0000000�00000002142�11671051007�0017561�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pow() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-powf.c������������������������������������������������������������0000664�0000000�0000000�00000002140�11671051007�0017725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of powf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-pread.c�����������������������������������������������������������0000664�0000000�0000000�00000004647�11671051007�0020063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the pread function. Copyright (C) 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 <http://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; errno = 0; ASSERT (pread (99, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-pread.sh����������������������������������������������������������0000775�0000000�0000000�00000000140�11671051007�0020236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 : | test-pread || fail=1 Exit $fail ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-printf-frexp.c����������������������������������������������������0000664�0000000�0000000�00000007055�11671051007�0021410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a double into fraction and mantissa. 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 <http://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-20111211-stable/tests/test-printf-frexpl.c���������������������������������������������������0000664�0000000�0000000�00000010105�11671051007�0021552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of splitting a 'long double' into fraction and mantissa. 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 <http://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-20111211-stable/tests/test-printf-posix.c����������������������������������������������������0000664�0000000�0000000�00000003234�11671051007�0021421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible printf() function. 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 <http://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 __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-20111211-stable/tests/test-printf-posix.h����������������������������������������������������0000664�0000000�0000000�00000010673�11671051007�0021433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsprintf() and sprintf() 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 <http://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 <http://lists.gnu.org/archive/html/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-20111211-stable/tests/test-printf-posix.output�����������������������������������������������0000664�0000000�0000000�00000000761�11671051007�0022541�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-20111211-stable/tests/test-printf-posix.sh���������������������������������������������������0000775�0000000�0000000�00000000562�11671051007�0021615�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" ./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-20111211-stable/tests/test-printf-posix2.c���������������������������������������������������0000664�0000000�0000000�00000006177�11671051007�0021514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible printf() function. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <stdio.h> #if HAVE_GETRLIMIT && HAVE_SETRLIMIT #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 > 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 arg = atoi (argv[1]); switch (arg) { case 0: { void *memory = malloc (5000000); if (memory == NULL) return 1; memset (memory, 17, 5000000); return 78; } case 1: ret = printf ("%.5000000f", 1.0); return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); case 2: ret = printf ("%.5000000f", -1.0); return !(ret == 5000003 || (ret < 0 && errno == ENOMEM)); case 3: ret = printf ("%.5000000e", 1.0); return !(ret >= 5000006 || (ret < 0 && errno == ENOMEM)); case 4: ret = printf ("%.5000000d", 1); return !(ret == 5000000 || (ret < 0 && errno == ENOMEM)); case 5: ret = printf ("%.5000000d", -1); return !(ret == 5000001 || (ret < 0 && errno == ENOMEM)); case 6: ret = printf ("%.5000000u", 1); return !(ret == 5000000 || (ret < 0 && errno == ENOMEM)); } return 0; } #else int main (int argc, char *argv[]) { return 77; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-printf-posix2.sh��������������������������������������������������0000775�0000000�0000000�00000001226�11671051007�0021675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test out-of-memory handling. (./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 ./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-20111211-stable/tests/test-priv-set.c��������������������������������������������������������0000664�0000000�0000000�00000006342�11671051007�0020533�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the priv-set module. Copyright (C) 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 <http://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-20111211-stable/tests/test-pselect.c���������������������������������������������������������0000664�0000000�0000000�00000002643�11671051007�0020421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pselect() substitute. 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 <http://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-20111211-stable/tests/test-pthread_sigmask1.c������������������������������������������������0000664�0000000�0000000�00000004717�11671051007�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pthread_sigmask in a single-threaded program. 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 <http://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 __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-20111211-stable/tests/test-pthread_sigmask2.c������������������������������������������������0000664�0000000�0000000�00000004526�11671051007�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pthread_sigmask in a multi-threaded program. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include <signal.h> #include <errno.h> #include <stdio.h> #include <unistd.h> #include "glthread/thread.h" #include "macros.h" #if USE_POSIX_THREADS static gl_thread_t main_thread; static gl_thread_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. */ ASSERT (pthread_sigmask (1729, &set, NULL) == EINVAL); /* Block SIGINT. */ ASSERT (pthread_sigmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from another thread. */ main_thread = gl_thread_self (); ASSERT (glthread_create (&killer_thread, 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); return 0; } #else int main () { fputs ("Skipping test: POSIX threads not enabled\n", stderr); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-ptsname.c���������������������������������������������������������0000664�0000000�0000000�00000010526�11671051007�0020430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ptsname(3). Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (ptsname, char *, (int)); #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. */ signal (SIGALRM, SIG_DFL); alarm (5); #endif { 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 /* Solaris has BSD-style /dev/pty[p-r][0-9a-f] files, but the function ptsname() does not work on them. */ { 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); } #else /* Try various master names of MacOS 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-20111211-stable/tests/test-ptsname_r.c�������������������������������������������������������0000664�0000000�0000000�00000013412�11671051007�0020746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ptsname_r(3). Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #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" #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 char * null_ptr (void) { return NULL; } 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); errno = 0; result = ptsname_r (fd, buffer, buflen); if (buflen > len) { ASSERT (result == 0); ASSERT (buffer[0] == '/'); } else { ASSERT (result != 0); ASSERT (result == errno); ASSERT (errno == ERANGE); ASSERT (buffer[0] == 'X'); } } errno = 0; result = ptsname_r (fd, null_ptr (), 0); ASSERT (result != 0); ASSERT (result == errno); ASSERT (errno == EINVAL); } 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 (5); #endif { char buffer[256]; int result; errno = 0; result = ptsname_r (-1, buffer, sizeof buffer); ASSERT (result != 0); ASSERT (result == errno); ASSERT (errno == EBADF || errno == 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 /* Solaris has BSD-style /dev/pty[p-r][0-9a-f] files, but the function ptsname() does not work on them. */ { int fd; char buffer[256]; int 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_r (fd, buffer, sizeof buffer); ASSERT (result == 0); ASSERT (memcmp (buffer, "/dev/pts/", 9) == 0); test_errors (fd, buffer); close (fd); } #else /* Try various master names of MacOS 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); 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-20111211-stable/tests/test-pty-c++.cc��������������������������������������������������������0000664�0000000�0000000�00000002412�11671051007�0020301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <pty.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-pwrite.c����������������������������������������������������������0000664�0000000�0000000�00000004331�11671051007�0020270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the pwrite function. Copyright (C) 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 <http://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'; errno = 0; ASSERT (pwrite (99, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-pwrite.sh���������������������������������������������������������0000775�0000000�0000000�00000000135�11671051007�0020461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . fail=0 test-pwrite || fail=1 Exit $fail �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-quotearg-simple.c�������������������������������������������������0000664�0000000�0000000�00000030705�11671051007�0022100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of quotearg family of functions. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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 "progname.h" #include "macros.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", LQ RQ, LQ RQ }, { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", LQ RQ, LQ RQ }, { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", LQ RQ, LQ RQ } }, /* shell_quoting_style */ { { "''", "\0""1\0", 3, "simple", "' \t\n'\\''\"\033?""?/\\'", "a:b", "'a\\b'", LQ RQ, LQ RQ }, { "''", "1", 1, "simple", "' \t\n'\\''\"\033?""?/\\'", "a:b", "'a\\b'", LQ RQ, LQ RQ }, { "''", "1", 1, "simple", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", "'a\\b'", LQ RQ, LQ RQ } }, /* shell_always_quoting_style */ { { "''", "'\0""1\0'", 5, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", "'a\\b'", "'" LQ RQ "'", "'" LQ RQ "'" }, { "''", "'1'", 3, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", "'a\\b'", "'" LQ RQ "'", "'" LQ RQ "'" }, { "''", "'1'", 3, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", "'a\\b'", "'" LQ RQ "'", "'" LQ RQ "'" } }, /* c_quoting_style */ { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"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", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "a:b", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ } }, /* escape_quoting_style */ { { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", LQ_ENC RQ_ENC, LQ RQ }, { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", LQ_ENC RQ_ENC, LQ RQ }, { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a\\:b", "a\\\\b", LQ_ENC RQ_ENC, LQ RQ } }, /* locale_quoting_style */ { { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", "`a:b'", "`a\\\\b'", "`" LQ_ENC RQ_ENC "'", "`" LQ RQ "'" }, { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", "`a:b'", "`a\\\\b'", "`" LQ_ENC RQ_ENC "'", "`" LQ RQ "'" }, { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", "`a\\:b'", "`a\\\\b'", "`" LQ_ENC RQ_ENC "'", "`" LQ RQ "'" } }, /* clocale_quoting_style */ { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"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", LQ RQ, LQ RQ }, { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b", LQ RQ, LQ RQ }, { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "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", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "a:b", "a\\b", "\"" LQ_ENC RQ_ENC "\"", LQ RQ }, { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"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\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a:b\"", "\"a\\\\b\"", "\"" LQ_ENC RQ_ENC "\"", "\"" LQ RQ "\"" }, { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"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", LQ_ENC RQ_ENC, LQ RQ }, { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", "a\\\\b", LQ_ENC RQ_ENC, LQ RQ }, { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "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'", "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, { "''", "'\\0001\\0'", 9, "'simple'", "' \\t\\n\\'\"\\033?""?/\\\\'", "'a:b'", "'a\\\\b'", "'" LQ_ENC RQ_ENC "'", "'" LQ RQ "'" }, { "''", "'\\0001\\0'", 9, "'simple'", "' \\t\\n\\'\"\\033?""?/\\\\'", "'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)", "(" LQ_ENC RQ_ENC ")", "(" LQ RQ ")" }, { "()", "(\\0001\\0)", 9, "(simple)", "( \\t\\n'\"\\033?""?/\\\\)", "(a:b)", "(a\\\\b)", "(" LQ_ENC RQ_ENC ")", "(" LQ RQ ")" }, { "()", "(\\0001\\0)", 9, "(simple)", "( \\t\\n'\"\\033?""?/\\\\)", "(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 ", ":" LQ_ENC RQ_ENC " ", ":" LQ RQ " " }, { ": ", ":\\0001\\0 ", 9, ":simple ", ":\\ \\t\\n'\"\\033?""?/\\\\ ", ":a:b ", ":a\\\\b ", ":" LQ_ENC RQ_ENC " ", ":" LQ RQ " " }, { ": ", ":\\0001\\0 ", 9, ":simple ", ":\\ \\t\\n'\"\\033?""?/\\\\ ", ":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:", " " LQ_ENC RQ_ENC ":", " " LQ RQ ":" }, { " :", " \\0001\\0:", 9, " simple:", " \\t\\n'\"\\033?""?/\\\\:", " a\\:b:", " a\\\\b:", " " LQ_ENC RQ_ENC ":", " " LQ RQ ":" }, { " :", " \\0001\\0:", 9, " simple:", " \\t\\n'\"\\033?""?/\\\\:", " 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", "# " 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", "# " 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", "# " LQ_ENC RQ_ENC "\n", "# " LQ RQ "\n" } }, /* left_quote = "\"'" and right_quote = "'\"" */ { { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a:b'\"", "\"'a\\\\b'\"", "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" }, { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a:b'\"", "\"'a\\\\b'\"", "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" }, { "\"''\"", "\"'\\0001\\0'\"", 11, "\"'simple'\"", "\"' \\t\\n\\'\"\\033?""?/\\\\'\"", "\"'a\\:b'\"", "\"'a\\\\b'\"", "\"'" LQ_ENC RQ_ENC "'\"", "\"'" LQ RQ "'\"" } } }; int main (int argc _GL_UNUSED, char *argv[]) { int i; bool ascii_only = MB_CUR_MAX == 1 && !isprint ((unsigned char) LQ[0]); set_program_name (argv[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); 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); } quotearg_free (); return 0; } �����������������������������������������������������������gnulib-20111211-stable/tests/test-quotearg.c��������������������������������������������������������0000664�0000000�0000000�00000007316�11671051007�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of quotearg family of functions. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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 "progname.h" #include "gettext.h" #include "macros.h" #include "test-quotearg.h" #if ENABLE_NLS 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 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 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 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 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 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 LQ RQ_ESC RQ, LQ LQ RQ_ESC RQ } } }; #endif /* ENABLE_NLS */ int main (int argc _GL_UNUSED, char *argv[]) { set_program_name (argv[0]); #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-20111211-stable/tests/test-quotearg.h��������������������������������������������������������0000664�0000000�0000000�00000007644�11671051007�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of quotearg family of functions. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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 *str7a; /* Translation of LQ RQ, in ASCII charset. */ char const *str7b; /* 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", 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.str7a); p = func (inputs.str7a, &len); if (ascii_only) compare (results->str7a, strlen (results->str7a), p, len); else compare (results->str7b, strlen (results->str7b), 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_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; } 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-20111211-stable/tests/test-quotearg.sh�������������������������������������������������������0000775�0000000�0000000�00000001262�11671051007�0021000�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 LOCALE=$locale LOCALEDIR="$srcdir/locale" \ ./test-quotearg${EXEEXT} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-raise.c�����������������������������������������������������������0000664�0000000�0000000�00000002670�11671051007�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test raising a signal. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <signal.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); ASSERT (raise (199) != 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-20111211-stable/tests/test-random_r.c��������������������������������������������������������0000664�0000000�0000000�00000003146�11671051007�0020562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test random_r. Copyright (C) 2008-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 <http://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" int main () { struct random_data rand_state; char buf[128]; unsigned int i; unsigned int n_big = 0; rand_state.state = NULL; if (initstate_r (time (NULL), buf, sizeof buf, &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; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-rawmemchr.c�������������������������������������������������������0000664�0000000�0000000�00000004754�11671051007�0020754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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-20111211-stable/tests/test-rbtree_list.c�����������������������������������������������������0000664�0000000�0000000�00000041625�11671051007�0021303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "gl_rbtree_list.h" #include <stdlib.h> #include "gl_array_list.h" #include "progname.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_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; set_program_name (argv[0]); /* 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); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); 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: case 12: /* 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 13: 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 14: { 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 15: { 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-20111211-stable/tests/test-rbtree_oset.c�����������������������������������������������������0000664�0000000�0000000�00000007260�11671051007�0021277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ordered set data type implementation. Copyright (C) 2006-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "gl_rbtree_oset.h" #include <stdlib.h> #include <string.h> #include "gl_array_oset.h" #include "progname.h" #include "macros.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); } int main (int argc, char *argv[]) { gl_oset_t set1, set2; set_program_name (argv[0]); /* 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 (3); 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; } check_all (set1, set2); } gl_oset_free (set1); gl_oset_free (set2); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-rbtreehash_list.c�������������������������������������������������0000664�0000000�0000000�00000043143�11671051007�0022144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sequential list data type implementation. Copyright (C) 2006-2011 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 <http://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 "progname.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 http://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_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; set_program_name (argv[0]); /* 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); for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (16); 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: case 12: /* 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 13: 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 14: { 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 15: { 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-20111211-stable/tests/test-read-file.c�������������������������������������������������������0000664�0000000�0000000�00000005560�11671051007�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2006-2007, 2010-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "read-file.h" #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #define FILE1 "/etc/resolv.conf" #define FILE2 "/dev/null" int main (void) { 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, &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 %ld 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, &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 %ld from %s...\n", (unsigned long) len, FILE2); err = 1; } free (out); } } return err; } ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-read.c������������������������������������������������������������0000664�0000000�0000000�00000003433�11671051007�0017673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the read() function. 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 <http://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; errno = 0; ASSERT (read (99, &byte, 1) == -1); ASSERT (errno == EBADF); } /* Clean up. */ unlink (filename); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-readlink.c��������������������������������������������������������0000664�0000000�0000000�00000002462�11671051007�0020552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of readlink. Copyright (C) 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 <http://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-20111211-stable/tests/test-readlink.h��������������������������������������������������������0000664�0000000�0000000�00000010130�11671051007�0020546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of readlink. Copyright (C) 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 <http://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-20111211-stable/tests/test-readlinkat.c������������������������������������������������������0000664�0000000�0000000�00000006762�11671051007�0021106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of readlinkat. Copyright (C) 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 <http://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); } { 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-20111211-stable/tests/test-realloc-gnu.c�����������������������������������������������������0000664�0000000�0000000�00000001622�11671051007�0021166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of realloc function. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> int main () { /* Check that realloc (NULL, 0) is not a NULL pointer. */ if (realloc (NULL, 0) == NULL) return 1; return 0; } ��������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-recv.c������������������������������������������������������������0000664�0000000�0000000�00000002363�11671051007�0017720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the recv() function. 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 <http://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 "sockets.h" #include "macros.h" int main (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; errno = 0; ASSERT (recv (99, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-recvfrom.c��������������������������������������������������������0000664�0000000�0000000�00000003112�11671051007�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the recvfrom() function. 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 <http://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 "sockets.h" #include "macros.h" int main (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); errno = 0; ASSERT (recvfrom (99, &byte, 1, 0, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-regex-quote.c�����������������������������������������������������0000664�0000000�0000000�00000004737�11671051007�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of constructing a regular expression from a literal string. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-remainder.c�������������������������������������������������������0000664�0000000�0000000�00000002204�11671051007�0020721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of remainder() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; volatile double y; double z; int main () { /* A particular value. */ x = 9.245907126; y = 3.141592654; z = remainder (x, y); ASSERT (z >= -0.178870837 && z <= -0.178870835); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-remove.c����������������������������������������������������������0000664�0000000�0000000�00000007073�11671051007�0020261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of remove. Copyright (C) 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 <http://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-20111211-stable/tests/test-rename.c����������������������������������������������������������0000664�0000000�0000000�00000002414�11671051007�0020225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rename() function. Copyright (C) 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 <http://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-20111211-stable/tests/test-rename.h����������������������������������������������������������0000664�0000000�0000000�00000062313�11671051007�0020236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rename() function. Copyright (C) 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 <http://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 = 0; ASSERT (func (BASE "dir2/.", BASE "dir") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST); } 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 = 0; ASSERT (func (BASE "dir2/.//", BASE "dir") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST); } 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); 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-20111211-stable/tests/test-renameat.c��������������������������������������������������������0000664�0000000�0000000�00000014570�11671051007�0020560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of renameat. Copyright (C) 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 <http://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); } { 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 = 0; ASSERT (renameat (dfd, BASE "sub2/.", dfd, BASE "sub1") == -1); ASSERT (errno == EINVAL || errno == EBUSY || errno == EEXIST); 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-20111211-stable/tests/test-rijndael.c��������������������������������������������������������0000664�0000000�0000000�00000005766�11671051007�0020563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2010-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <string.h> #include "rijndael-api-fst.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-20111211-stable/tests/test-rint.c������������������������������������������������������������0000664�0000000�0000000�00000005573�11671051007�0017743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rint() function. Copyright (C) 2010-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 <http://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" int main () { /* Consider the current rounding mode, cf. <http://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); /* Infinite numbers. */ ASSERT (rint (Infinityd ()) == Infinityd ()); ASSERT (rint (- Infinityd ()) == - Infinityd ()); /* NaNs. */ ASSERT (isnand (rint (NaNd ()))); return 0; } else { fputs ("Skipping test: non-standard rounding mode\n", stderr); return 77; } } �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-rintf.c�����������������������������������������������������������0000664�0000000�0000000�00000005727�11671051007�0020112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rintf() function. Copyright (C) 2010-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 <http://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" int main () { /* Consider the current rounding mode, cf. <http://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); /* Infinite numbers. */ ASSERT (rintf (Infinityf ()) == Infinityf ()); ASSERT (rintf (- Infinityf ()) == - Infinityf ()); /* NaNs. */ ASSERT (isnanf (rintf (NaNf ()))); return 0; } else { fputs ("Skipping test: non-standard rounding mode\n", stderr); return 77; } } �����������������������������������������gnulib-20111211-stable/tests/test-rintl.c�����������������������������������������������������������0000664�0000000�0000000�00000006071�11671051007�0020111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rintl() function. Copyright (C) 2010-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 <http://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" int main () { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); /* Consider the current rounding mode, cf. <http://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); /* Infinite numbers. */ ASSERT (rintl (Infinityl ()) == Infinityl ()); ASSERT (rintl (- Infinityl ()) == - Infinityl ()); /* NaNs. */ ASSERT (isnanl (rintl (NaNl ()))); return 0; } else { fputs ("Skipping test: non-standard rounding mode\n", stderr); return 77; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-rmdir.c�����������������������������������������������������������0000664�0000000�0000000�00000002375�11671051007�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of rmdir. Copyright (C) 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 <http://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-20111211-stable/tests/test-rmdir.h�����������������������������������������������������������0000664�0000000�0000000�00000006425�11671051007�0020106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of rmdir. Copyright (C) 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 <http://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-20111211-stable/tests/test-round-ieee.c������������������������������������������������������0000664�0000000�0000000�00000003034�11671051007�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2010-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <math.h> #include "minus-zero.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)); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-round1.c����������������������������������������������������������0000664�0000000�0000000�00000004441�11671051007�0020170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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-20111211-stable/tests/test-round2.c����������������������������������������������������������0000664�0000000�0000000�00000006661�11671051007�0020177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. 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 <http://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-20111211-stable/tests/test-roundf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003047�11671051007�0021163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2010-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <math.h> #include "minus-zero.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)); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-roundf1.c���������������������������������������������������������0000664�0000000�0000000�00000004555�11671051007�0020344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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-20111211-stable/tests/test-roundf2.c���������������������������������������������������������0000664�0000000�0000000�00000000053�11671051007�0020332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define USE_FLOAT #include "test-round2.c" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-roundl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003171�11671051007�0021167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. Copyright (C) 2010-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <math.h> #include "fpucw.h" #include "minus-zero.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)); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-roundl.c����������������������������������������������������������0000664�0000000�0000000�00000004743�11671051007�0020270�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding to nearest, breaking ties away from zero. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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-20111211-stable/tests/test-safe-alloc.c������������������������������������������������������0000664�0000000�0000000�00000002351�11671051007�0020764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Test the safe-alloc macros * * Copyright (C) 2009-2011 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 3.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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * 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-20111211-stable/tests/test-sameacls.c��������������������������������������������������������0000664�0000000�0000000�00000052423�11671051007�0020553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether two files have the same ACLs. Copyright (C) 2008-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 <http://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 "progname.h" #include "read-file.h" #include "xalloc.h" #include "macros.h" int main (int argc, char *argv[]) { const char *file1; const char *file2; set_program_name (argv[0]); 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, &size1); if (contents1 == NULL) { fprintf (stderr, "error reading file %s: errno = %d\n", file1, errno); fflush (stderr); abort (); } contents2 = read_file (file2, &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 (); } } /* 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, MacOS X, IRIX, Tru64 */ static const int types[] = { ACL_TYPE_ACCESS # if HAVE_ACL_TYPE_EXTENDED /* MacOS 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; } } } #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; } } } # 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 (); } 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; } else if (count1 > 0) { ace_t *entries1 = XNMALLOC (count1, ace_t); ace_t *entries2 = XNMALLOC (count2, ace_t); int i; if (acl (file1, ACE_GETACL, count1, entries1) < count1) { fprintf (stderr, "error retrieving the ACE-ACLs of file %s\n", file1); fflush (stderr); abort (); } if (acl (file2, ACE_GETACL, count2, entries2) < count1) { fprintf (stderr, "error retrieving the ACE-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 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; } } } # 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; } } } # 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; } } } # 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; } } } #endif } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-sched.c�����������������������������������������������������������0000664�0000000�0000000�00000002302�11671051007�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sched.h> substitute. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-search-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000002610�11671051007�0020732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <search.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-search.c����������������������������������������������������������0000664�0000000�0000000�00000001551�11671051007�0020224�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <search.h> substitute. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <search.h> int main () { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-select-fd.c�������������������������������������������������������0000664�0000000�0000000�00000004425�11671051007�0020630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute, reading or writing from a given file descriptor. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-select-in.sh������������������������������������������������������0000775�0000000�0000000�00000001661�11671051007�0021037�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 ./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; } | \ { ./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; ./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 ./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-20111211-stable/tests/test-select-out.sh�����������������������������������������������������0000775�0000000�0000000�00000001570�11671051007�0021237�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 ./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; ./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; ./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 ./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-20111211-stable/tests/test-select-stdin.c����������������������������������������������������0000664�0000000�0000000�00000004332�11671051007�0021355�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute, reading from stdin. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-select.c����������������������������������������������������������0000664�0000000�0000000�00000002025�11671051007�0020233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-select.h����������������������������������������������������������0000664�0000000�0000000�00000024465�11671051007�0020254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini, 2008. */ #include <stdio.h> #include <string.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 __WIN32__) && ! defined __CYGWIN__ # define WIN32_NATIVE #endif #ifdef HAVE_SYS_WAIT_H # include <sys/wait.h> #endif #ifndef SO_REUSEPORT # define SO_REUSEPORT SO_REUSEADDR #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); 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); } x = 1; setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x)); 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 WIN32_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 /* 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); 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 WIN32_NATIVE) int fd; /* On Linux, MacOS 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 __OpenBSD__ || defined __NetBSD__ fd = 16; # else fd = 99; # endif 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 WIN32_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_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-20111211-stable/tests/test-send.c������������������������������������������������������������0000664�0000000�0000000�00000002405�11671051007�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the send() function. 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 <http://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 "sockets.h" #include "macros.h" int main (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'; errno = 0; ASSERT (send (99, &byte, 1, 0) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-sendto.c����������������������������������������������������������0000664�0000000�0000000�00000003336�11671051007�0020256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the sendto() function. 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 <http://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 "sockets.h" #include "macros.h" int main (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'; errno = 0; ASSERT (sendto (99, &byte, 1, 0, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-set-mode-acl-1.sh�������������������������������������������������0000775�0000000�0000000�00000000337�11671051007�0021563�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. if test -d /var/tmp; then TMPDIR=/var/tmp else TMPDIR=/tmp fi export TMPDIR exec "${srcdir}/test-set-mode-acl.sh" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-set-mode-acl-2.sh�������������������������������������������������0000775�0000000�0000000�00000000300�11671051007�0021552�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. TMPDIR=`pwd` export TMPDIR exec "${srcdir}/test-set-mode-acl.sh" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-set-mode-acl.c����������������������������������������������������0000664�0000000�0000000�00000002157�11671051007�0021234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setting an ACL equivalent to a mode. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include "acl.h" #include <stdlib.h> #include "progname.h" #include "macros.h" int main (int argc, char *argv[]) { const char *file; int mode; set_program_name (argv[0]); ASSERT (argc == 3); file = argv[1]; mode = strtol (argv[2], NULL, 8); set_acl (file, -1, mode); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-set-mode-acl.sh���������������������������������������������������0000775�0000000�0000000�00000015467�11671051007�0021437�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=`pwd` 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 Win32 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 # MacOS 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. "$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 `"$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. "$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 `"$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-20111211-stable/tests/test-setenv.c����������������������������������������������������������0000664�0000000�0000000�00000003106�11671051007�0020261�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of setenv. Copyright (C) 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 <http://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-20111211-stable/tests/test-setlocale1.c������������������������������������������������������0000664�0000000�0000000�00000003274�11671051007�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setting the current locale. 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 <http://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)); /* Test that the two results are the same. */ ASSERT (strcmp (name1, name2) == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-setlocale1.sh�����������������������������������������������������0000775�0000000�0000000�00000001506�11671051007�0021206�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 ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN ./test-setlocale1${EXEEXT} || exit 1 fi exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-setlocale2.c������������������������������������������������������0000664�0000000�0000000�00000003342�11671051007�0021014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setting the current locale. 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 <http://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-20111211-stable/tests/test-setlocale2.sh�����������������������������������������������������0000775�0000000�0000000�00000001103�11671051007�0021200�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 LC_ALL=$name ./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 LC_ALL=$name ./test-setlocale2${EXEEXT} 1 || exit 1 done exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-setsockopt.c������������������������������������������������������0000664�0000000�0000000�00000002575�11671051007�0021164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test setsockopt() function. 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 <http://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 "sockets.h" #include "macros.h" int main (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; errno = 0; ASSERT (setsockopt (99, SOL_SOCKET, SO_REUSEADDR, &value, sizeof (value)) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-sha1.c������������������������������������������������������������0000664�0000000�0000000�00000002633�11671051007�0017615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2008-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <string.h> #include "sha1.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] & 0xFF); printf ("\ncomputed:\n"); for (i = 0; i < SHA1_DIGEST_SIZE; i++) printf ("%02x ", buf[i] & 0xFF); printf ("\n"); return 1; } return 0; } �����������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-shutdown.c��������������������������������������������������������0000664�0000000�0000000�00000002311�11671051007�0020625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the shutdown() function. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (shutdown, int, (int, int)); #include <errno.h> #include "sockets.h" #include "macros.h" int main (void) { gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (shutdown (-1, SHUT_RD) == -1); ASSERT (errno == EBADF); } { errno = 0; ASSERT (shutdown (99, SHUT_RD) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-sigaction.c�������������������������������������������������������0000664�0000000�0000000�00000006774�11671051007�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sigaction() function. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-signal-h-c++.cc���������������������������������������������������0000664�0000000�0000000�00000004075�11671051007�0021176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <signal.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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)); SIGNATURE_CHECK (GNULIB_NAMESPACE::raise, int, (int)); #endif #if GNULIB_TEST_SIGACTION SIGNATURE_CHECK (GNULIB_NAMESPACE::sigaction, int, (int, const struct sigaction *, struct sigaction *)); #endif int main () { } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-signal-h-c++2.cc��������������������������������������������������0000664�0000000�0000000�00000001470�11671051007�0021254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <signal.h> substitute in C++ mode. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <csignal> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-signal-h.c��������������������������������������������������������0000664�0000000�0000000�00000004752�11671051007�0020467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <signal.h> substitute. Copyright (C) 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 <http://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-20111211-stable/tests/test-signbit.c���������������������������������������������������������0000664�0000000�0000000�00000012047�11671051007�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of signbit() substitute. 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 <http://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; 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-20111211-stable/tests/test-sigpipe.c���������������������������������������������������������0000664�0000000�0000000�00000003654�11671051007�0020425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of SIGPIPE handling. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <signal.h> /* Check that SIGPIPE is defined. */ int s = SIGPIPE; #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.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-20111211-stable/tests/test-sigpipe.sh��������������������������������������������������������0000775�0000000�0000000�00000001462�11671051007�0020613�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" ./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" ./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" ./test-sigpipe${EXEEXT} B 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-20111211-stable/tests/test-sigprocmask.c�����������������������������������������������������0000664�0000000�0000000�00000004656�11671051007�0021312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sigprocmask. 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 <http://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 __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 (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, 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-20111211-stable/tests/test-sin.c�������������������������������������������������������������0000664�0000000�0000000�00000002071�11671051007�0017546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sin() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sinf.c������������������������������������������������������������0000664�0000000�0000000�00000002072�11671051007�0017715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sinf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sinh.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sinh() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sinhf.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sinhf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sinl.c������������������������������������������������������������0000664�0000000�0000000�00000002245�11671051007�0017725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sinl() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sleep.c�����������������������������������������������������������0000664�0000000�0000000�00000002632�11671051007�0020070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sleep() function. 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 <http://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-20111211-stable/tests/test-snprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002076�11671051007�0021765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible snprintf() function. 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 <http://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-20111211-stable/tests/test-snprintf-posix.h��������������������������������������������������0000664�0000000�0000000�00000340032�11671051007�0021767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsnprintf() and snprintf() 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 <http://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; /* 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. */ { char result[100]; 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)); } { char result[100]; 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)); } { char result[100]; 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)); } { char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; int retval = my_snprintf (result, sizeof (result), "%a %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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 MacOS X 10.3.9 (Darwin 7.9) bug. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; int retval = my_snprintf (result, sizeof (result), "%010a %d", Infinityd (), 33, 44, 55); /* "0000000inf 33" is not a valid result; see <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ char result[100]; int retval = my_snprintf (result, sizeof (result), "%050a %d", NaNd (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see <http://lists.gnu.org/archive/html/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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; int retval = my_snprintf (result, sizeof (result), "%La %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ char result[100]; 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) }; char result[100]; 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) }; char result[100]; 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char result[100]; 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)); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char result[100]; 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)); } #endif { /* Rounding near the decimal point. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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 MacOS X 10.3.9 (Darwin 7.9) bug and a glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; int retval = my_snprintf (result, sizeof (result), "%010La %d", Infinityl (), 33, 44, 55); /* "0000000inf 33" is not a valid result; see <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ char result[100]; int retval = my_snprintf (result, sizeof (result), "%050La %d", NaNl (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see <http://lists.gnu.org/archive/html/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. */ char result[100]; 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. */ char result[100]; 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++) { char result[100]; int retval = my_snprintf (result, sizeof (result), "%f", data[k].value); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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++) { char result[100]; int retval = my_snprintf (result, sizeof (result), "%Lf", data[k].value); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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) }; char result[100]; 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) }; char result[100]; 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char result[100]; 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)); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char result[100]; 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)); } #endif { /* Width. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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++) { char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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++) { char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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) }; char result[100]; 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) }; char result[100]; 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char result[100]; 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)); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char result[100]; 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)); } #endif { /* Width. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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++) { char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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++) { char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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) }; char result[100]; 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) }; char result[100]; 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char result[100]; 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)); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char result[100]; 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)); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char result[100]; 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)); } #endif { /* Width. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[100]; 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; char result[100]; 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. */ { char result[100]; 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. */ { char result[100]; 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. */ { char result[100]; int retval = my_snprintf (result, sizeof (result), "a%*sc", -3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } { char result[100]; int retval = my_snprintf (result, sizeof (result), "a%-*sc", 3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } { char result[100]; 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. */ { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[1000]; 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]; char result[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; char result[5000]; 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; char result[5000]; 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-20111211-stable/tests/test-snprintf.c��������������������������������������������������������0000664�0000000�0000000�00000003722�11671051007�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of snprintf() function. 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 <http://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-20111211-stable/tests/test-sockets.c���������������������������������������������������������0000664�0000000�0000000�00000002163�11671051007�0020432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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-20111211-stable/tests/test-spawn-c++.cc������������������������������������������������������0000664�0000000�0000000�00000011331�11671051007�0020615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <spawn.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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 int main () { } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-spawn-pipe-child.c������������������������������������������������0000664�0000000�0000000�00000006347�11671051007�0022133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Child program invoked by test-spawn-pipe-main. Copyright (C) 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 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 /* Return non-zero if FD is open. */ static int is_open (int fd) { #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On Win32, 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[]) { char buffer[2] = { 's', 't' }; int fd; /* 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); /* 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. */ 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. Future POSIX will allow this, see <http://austingroupbugs.net/view.php?id=173>. */ #if !defined __hpux ASSERT (! is_open (STDERR_FILENO)); #endif break; default: ASSERT (0); } for (fd = 3; fd < 7; fd++) { errno = 0; ASSERT (close (fd) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-spawn-pipe-main.c�������������������������������������������������0000664�0000000�0000000�00000007035�11671051007�0021767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of create_pipe_bidi/wait_subprocess. Copyright (C) 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 "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]; char *argv[3]; pid_t pid; char buffer[2] = { 'a', 't' }; /* Set up child. */ argv[0] = (char *) prog; argv[1] = (char *) (stderr_closed ? "1" : "0"); argv[2] = NULL; pid = create_pipe_bidi (prog, prog, argv, 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-20111211-stable/tests/test-spawn-pipe.sh�����������������������������������������������������0000775�0000000�0000000�00000000307�11671051007�0021233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh st=0 for i in 0 1 2 3 4 5 6 7 ; do ./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-20111211-stable/tests/test-spawn.c�����������������������������������������������������������0000664�0000000�0000000�00000003120�11671051007�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <spawn.h> substitute. Copyright (C) 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 <http://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 (0) { 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-20111211-stable/tests/test-sprintf-posix.c���������������������������������������������������0000664�0000000�0000000�00000002220�11671051007�0021576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible sprintf() function. 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 <http://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-20111211-stable/tests/test-sprintf-posix.h���������������������������������������������������0000664�0000000�0000000�00000326572�11671051007�0021626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsprintf() and sprintf() 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 <http://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 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. */ { char result[1000]; int retval = my_sprintf (result, "%ju %d", (uintmax_t) 12345671, 33, 44, 55); ASSERT (strcmp (result, "12345671 33") == 0); ASSERT (retval == strlen (result)); } { char result[1000]; int retval = my_sprintf (result, "%zu %d", (size_t) 12345672, 33, 44, 55); ASSERT (strcmp (result, "12345672 33") == 0); ASSERT (retval == strlen (result)); } { char result[1000]; int retval = my_sprintf (result, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); ASSERT (strcmp (result, "12345673 33") == 0); ASSERT (retval == strlen (result)); } { char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; int retval = my_sprintf (result, "%a %d", Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ char result[1000]; int retval = my_sprintf (result, "%a %d", - Infinityd (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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 MacOS X 10.3.9 (Darwin 7.9) bug. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; int retval = my_sprintf (result, "%010a %d", Infinityd (), 33, 44, 55); /* "0000000inf 33" is not a valid result; see <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ char result[1000]; int retval = my_sprintf (result, "%050a %d", NaNd (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see <http://lists.gnu.org/archive/html/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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; int retval = my_sprintf (result, "%La %d", Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "inf 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative infinity. */ char result[1000]; int retval = my_sprintf (result, "%La %d", - Infinityl (), 33, 44, 55); ASSERT (strcmp (result, "-inf 33") == 0); ASSERT (retval == strlen (result)); } { /* NaN. */ char result[1000]; 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) }; char result[1000]; 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) }; char result[1000]; 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char result[1000]; 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)); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char result[1000]; 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)); } #endif { /* Rounding near the decimal point. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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 MacOS X 10.3.9 (Darwin 7.9) bug and a glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; int retval = my_sprintf (result, "%010La %d", Infinityl (), 33, 44, 55); /* "0000000inf 33" is not a valid result; see <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ ASSERT (strcmp (result, " inf 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ZERO with NaN. */ char result[1000]; int retval = my_sprintf (result, "%050La %d", NaNl (), 33, 44, 55); /* "0000000nan 33" is not a valid result; see <http://lists.gnu.org/archive/html/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. */ char result[1000]; 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. */ char result[1000]; 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++) { char result[1000]; int retval = my_sprintf (result, "%f", data[k].value); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[1000]; 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. */ char result[1000]; 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++) { char result[1000]; int retval = my_sprintf (result, "%Lf", data[k].value); ASSERT (strmatch (data[k].string, result)); ASSERT (retval == strlen (result)); } } { /* A negative number. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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) }; char result[1000]; 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) }; char result[1000]; 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char result[1000]; 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)); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char result[1000]; 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)); } #endif { /* Width. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[1000]; 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. */ char result[1000]; 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++) { char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[1000]; 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. */ char result[1000]; 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++) { char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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) }; char result[1000]; 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) }; char result[1000]; 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char result[1000]; 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)); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char result[1000]; 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)); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char result[1000]; 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)); } #endif { /* Width. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[1000]; 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. */ char result[1000]; 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++) { char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; int retval = my_sprintf (result, "%g %d", 0.0, 33, 44, 55); ASSERT (strcmp (result, "0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; int retval = my_sprintf (result, "%#.g %d", 1.75, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[100]; 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. */ char result[100]; 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. */ char result[1000]; 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. */ char result[1000]; 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++) { char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; int retval = my_sprintf (result, "%Lg %d", 0.0L, 33, 44, 55); ASSERT (strcmp (result, "0 33") == 0); ASSERT (retval == strlen (result)); } { /* Negative zero. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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) }; char result[1000]; 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) }; char result[1000]; 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)); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; char result[1000]; int retval = my_sprintf (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)); } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; char result[1000]; int retval = my_sprintf (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)); } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; char result[1000]; int retval = my_sprintf (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)); } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; char result[1000]; int retval = my_sprintf (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)); } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; char result[1000]; int retval = my_sprintf (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)); } #endif { /* Width. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; int retval = my_sprintf (result, "%#.Lg %d", 1.75L, 33, 44, 55); ASSERT (strcmp (result, "2. 33") == 0); ASSERT (retval == strlen (result)); } { /* FLAG_ALT. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[1000]; 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. */ char result[100]; 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. */ char result[100]; 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; char result[1000]; 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. */ { char result[1000]; 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. */ { char result[1000]; 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. */ { char result[1000]; int retval = my_sprintf (result, "a%*sc", -3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } { char result[1000]; int retval = my_sprintf (result, "a%-*sc", 3, "b"); ASSERT (strcmp (result, "ab c") == 0); ASSERT (retval == strlen (result)); } { char result[1000]; 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. */ { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[5000]; 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)); } { char result[1000]; 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]; char result[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; char result[5000]; 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; char result[5000]; 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-20111211-stable/tests/test-sqrt.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrt() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile double x; double y; int main () { /* A particular value. */ x = 0.6; y = sqrt (x); ASSERT (y >= 0.7745966692 && y <= 0.7745966693); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-sqrtf.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0020120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrtf() function. Copyright (C) 2010-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 <http://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 "macros.h" volatile float x; float y; int main () { /* A particular value. */ x = 0.6f; y = sqrtf (x); ASSERT (y >= 0.7745966f && y <= 0.7745967f); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-sqrtl.c�����������������������������������������������������������0000664�0000000�0000000�00000002250�11671051007�0020121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sqrtl() function. Copyright (C) 2010-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 <http://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 "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 = sqrtl (x); ASSERT (y >= 0.7745966692L && y <= 0.7745966693L); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-stat-time.c�������������������������������������������������������0000664�0000000�0000000�00000016614�11671051007�0020674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stat-time.h>. 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 <http://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 <sys/stat.h> #include <unistd.h> #include "macros.h" enum { NFILES = 4 }; 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 ("t-stt-stamp1"); force_unlink ("t-stt-testfile"); force_unlink ("t-stt-stamp2"); force_unlink ("t-stt-renamed"); force_unlink ("t-stt-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); } /* Sleep long enough to notice a timestamp difference on the file system in the current directory. */ static void nap (void) { static long delay; if (!delay) { /* Initialize only once, by sleeping for 20 milliseconds (needed since xfs has a quantization of about 10 milliseconds, even though it has a granularity of 1 nanosecond, and since NTFS has a default quantization of 15.25 milliseconds, even though it has a granularity of 100 nanoseconds). If the seconds differ, repeat the test one more time (in case we crossed a quantization boundary on a file system with 1 second resolution). If we can't observe a difference in only the nanoseconds, then fall back to 1 second if the time is odd, and 2 seconds (needed for FAT) if time is even. */ struct stat st1; struct stat st2; ASSERT (stat ("t-stt-stamp1", &st1) == 0); ASSERT (force_unlink ("t-stt-stamp1") == 0); delay = 20000; usleep (delay); create_file ("t-stt-stamp1"); ASSERT (stat ("t-stt-stamp1", &st2) == 0); if (st1.st_mtime != st2.st_mtime) { /* Seconds differ, give it one more shot. */ st1 = st2; ASSERT (force_unlink ("t-stt-stamp1") == 0); usleep (delay); create_file ("t-stt-stamp1"); ASSERT (stat ("t-stt-stamp1", &st2) == 0); } if (! (st1.st_mtime == st2.st_mtime && get_stat_mtime_ns (&st1) < get_stat_mtime_ns (&st2))) delay = (st1.st_mtime & 1) ? 1000000 : 2000000; } usleep (delay); } static void prepare_test (struct stat *statinfo, struct timespec *modtimes) { int i; create_file ("t-stt-stamp1"); nap (); create_file ("t-stt-testfile"); nap (); create_file ("t-stt-stamp2"); nap (); ASSERT (chmod ("t-stt-testfile", 0400) == 0); nap (); create_file ("t-stt-stamp3"); do_stat ("t-stt-stamp1", &statinfo[0]); do_stat ("t-stt-testfile", &statinfo[1]); do_stat ("t-stt-stamp2", &statinfo[2]); do_stat ("t-stt-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 __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(renamed) */ 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(renamed) */ 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(renamed) < 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]; #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-20111211-stable/tests/test-stat.c������������������������������������������������������������0000664�0000000�0000000�00000003107�11671051007�0017731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of stat. Copyright (C) 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 <http://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 <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-20111211-stable/tests/test-stat.h������������������������������������������������������������0000664�0000000�0000000�00000006024�11671051007�0017737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of stat. Copyright (C) 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 <http://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); ASSERT (SAME_INODE (st1, st2)); ASSERT (func (cwd, &st2) == 0); ASSERT (SAME_INODE (st1, st2)); ASSERT (func ("/", &st1) == 0); ASSERT (func ("///", &st2) == 0); ASSERT (SAME_INODE (st1, st2)); 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); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-stdalign.c��������������������������������������������������������0000664�0000000�0000000�00000006744�11671051007�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdalign.h>. Copyright 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 <http://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 /* Avoid a test failure due to Sun Studio Developer Bug Report #2125432. */ fputs ("Skipping test: known Sun C compiler bug\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-20111211-stable/tests/test-stdbool.c���������������������������������������������������������0000664�0000000�0000000�00000006660�11671051007�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdbool.h> substitute. Copyright (C) 2002-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* We want this test to succeed even when using gcc's -Werror; but to do that requires a pragma that didn't exist before 4.3.0. */ #ifndef __GNUC__ # define ADDRESS_CHECK_OKAY #elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) /* No way to silence -Waddress. */ #else # pragma GCC diagnostic ignored "-Waddress" # 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__ 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__ /* 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. */ # ifdef __GNUC__ 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__ /* 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 http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { int error = 0; #if HAVE_STDBOOL_H || 3 <= __GNUC__ /* 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 http://lists.gnu.org/archive/html/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-20111211-stable/tests/test-stddef.c����������������������������������������������������������0000664�0000000�0000000�00000003164�11671051007�0020232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stddef.h> substitute. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stddef.h> #include "verify.h" /* Check that appropriate types are defined. */ wchar_t a = 'c'; ptrdiff_t b = 1; size_t c = 2; /* 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, e) < -1); /* Must be unsigned. */ verify (offsetof (struct d, f) == 1); int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-stdint.c����������������������������������������������������������0000664�0000000�0000000�00000026363�11671051007�0020274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdint.h> substitute. Copyright (C) 2006-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2006. */ #include <config.h> /* Whether to enable pedantic checks. */ #define DO_PEDANTIC 0 #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ #define __STDC_CONSTANT_MACROS 1 /* likewise */ #include <stdint.h> #include "verify.h" #include "intprops.h" #if __GNUC__ >= 2 && 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 (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 (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); int main (void) { return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-stdio-c++.cc������������������������������������������������������0000664�0000000�0000000�00000014512�11671051007�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdio.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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 #if GNULIB_TEST_GETS SIGNATURE_CHECK (GNULIB_NAMESPACE::gets, char *, (char *)); #endif #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 //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-20111211-stable/tests/test-stdio-c++2.cc�����������������������������������������������������0000664�0000000�0000000�00000001466�11671051007�0020701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdio.h> substitute in C++ mode. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cstdio> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-stdio.c�����������������������������������������������������������0000664�0000000�0000000�00000002322�11671051007�0020076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdio.h> substitute. 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 <http://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-20111211-stable/tests/test-stdlib-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000010423�11671051007�0020747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdlib.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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 //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_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_PTSNAME SIGNATURE_CHECK (GNULIB_NAMESPACE::ptsname, char *, (int)); #endif #if GNULIB_TEST_PUTENV SIGNATURE_CHECK (GNULIB_NAMESPACE::putenv, int, (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_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-20111211-stable/tests/test-stdlib-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001470�11671051007�0021033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdlib.h> substitute in C++ mode. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cstdlib> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-stdlib.c����������������������������������������������������������0000664�0000000�0000000�00000002624�11671051007�0020242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdlib.h> substitute. 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 <http://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-20111211-stable/tests/test-stpncpy.c���������������������������������������������������������0000664�0000000�0000000�00000003541�11671051007�0020460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the system defined function stpncpy(). Copyright (C) 2003, 2008-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 <http://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-20111211-stable/tests/test-stpncpy.out.aix433������������������������������������������������0000664�0000000�0000000�00000243220�11671051007�0022057�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-20111211-stable/tests/test-stpncpy.out.glibc�������������������������������������������������0000664�0000000�0000000�00000243220�11671051007�0022124�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-20111211-stable/tests/test-strcasestr.c������������������������������������������������������0000664�0000000�0000000�00000016676�11671051007�0021172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. 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 <http://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. */ signal (SIGALRM, SIG_DFL); alarm (50); #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); } } return 0; } ������������������������������������������������������������������gnulib-20111211-stable/tests/test-strchrnul.c�������������������������������������������������������0000664�0000000�0000000�00000004446�11671051007�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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-20111211-stable/tests/test-strerror.c��������������������������������������������������������0000664�0000000�0000000�00000004021�11671051007�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strerror() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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 reseult. Reporting EINVAL is optional. */ errno = 0; str = strerror (-3); ASSERT (str); ASSERT (*str); ASSERT (errno == 0 || errno == EINVAL); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-strerror_r.c������������������������������������������������������0000664�0000000�0000000�00000012040�11671051007�0021155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strerror_r() function. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 <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 (err < 0) 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 (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1)); ASSERT (msg2 == msg4 || STREQ (msg2, str2)); ASSERT (msg3 == msg4 || STREQ (msg3, str3)); ASSERT (STREQ (msg4, str4)); free (str1); free (str2); free (str3); free (str4); } #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-strftime.c��������������������������������������������������������0000664�0000000�0000000�00000003502�11671051007�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that posixtime works as required. 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 <http://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include "strftime.h" #include <stdio.h> #include <time.h> #include <string.h> #include "macros.h" #define STREQ(a, b) (strcmp (a, b) == 0) 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, 0, NULL, NULL } }; int main (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; int utc = 1; ASSERT (tm); n = nstrftime (buf, sizeof buf, T[i].fmt, tm, utc, 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; } /* Local Variables: indent-tabs-mode: nil End: */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-striconv.c��������������������������������������������������������0000664�0000000�0000000�00000014214�11671051007�0020626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion. 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 <http://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-20111211-stable/tests/test-striconveh.c������������������������������������������������������0000664�0000000�0000000�00000124560�11671051007�0021151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion with error handling. 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 <http://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 () { 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; #if HAVE_ICONV /* 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); } #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-striconveha.c�����������������������������������������������������0000664�0000000�0000000�00000056175�11671051007�0021320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character set conversion with error handling and autodetection. 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 <http://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" /* 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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; #if HAVE_ICONV /* 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) /* 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) /* 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-20111211-stable/tests/test-string-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000007650�11671051007�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <string.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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_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_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-20111211-stable/tests/test-string-c++2.cc����������������������������������������������������0000664�0000000�0000000�00000001470�11671051007�0021060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <string.h> substitute in C++ mode. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <cstring> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-string.c����������������������������������������������������������0000664�0000000�0000000�00000002007�11671051007�0020262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <string.h> substitute. 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 <http://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-20111211-stable/tests/test-strings.c���������������������������������������������������������0000664�0000000�0000000�00000001553�11671051007�0020452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <strings.h> substitute. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <strings.h> int main () { return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-strncat.c���������������������������������������������������������0000664�0000000�0000000�00000004463�11671051007�0020442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strncat() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-strnlen.c���������������������������������������������������������0000664�0000000�0000000�00000003361�11671051007�0020445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2010-2011 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 <http://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-20111211-stable/tests/test-strsignal.c�������������������������������������������������������0000664�0000000�0000000�00000004334�11671051007�0020767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strsignal() function. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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(got, expect) #else /* In this case, we can guarantee some signal descriptions. */ # define ASSERT_DESCRIPTION(got, expect) ASSERT (!strcmp (got, expect)) #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-20111211-stable/tests/test-strstr.c����������������������������������������������������������0000664�0000000�0000000�00000020222�11671051007�0020314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2004, 2007-2011 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 <http://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. */ signal (SIGALRM, SIG_DFL); alarm (50); #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 <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737>. This is a bug in memchr(), see the Austin Group's clarification <http://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); } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-strtod.c����������������������������������������������������������0000664�0000000�0000000�00000070507�11671051007�0020305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2011 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 <http://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); /* FIXME - gnulib's version is rather inaccurate. It would be nice to guarantee an exact result, but for now, we settle for a 1-ulp error. */ ASSERT (FABS (result - 0.5) < DBL_EPSILON); 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); /* FIXME - gnulib's version is rather inaccurate. It would be nice to guarantee an exact result, but for now, we settle for a 1-ulp error. */ ASSERT (FABS (result - 0.5) < DBL_EPSILON); 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, MacOS 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)); /* MacOS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); /* glibc-2.3.6, MacOS 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, MacOS 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, MacOS 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, MacOS 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, MacOS 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, MacOS 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, MacOS 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, MacOS 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, MacOS 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, MacOS 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, MacOS 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); /* MacOS 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); /* MacOS 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); /* MacOS 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); /* MacOS 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-20111211-stable/tests/test-strtoimax.c�������������������������������������������������������0000664�0000000�0000000�00000006561�11671051007�0021017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * 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 <http://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); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-strtoumax.c�������������������������������������������������������0000664�0000000�0000000�00000006612�11671051007�0021030�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * 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 <http://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); } return 0; } ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-strverscmp.c������������������������������������������������������0000664�0000000�0000000�00000003011�11671051007�0021160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strverscmp() function. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 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); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-symlink.c���������������������������������������������������������0000664�0000000�0000000�00000002422�11671051007�0020443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of symlink. Copyright (C) 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 <http://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-20111211-stable/tests/test-symlink.h���������������������������������������������������������0000664�0000000�0000000�00000006070�11671051007�0020453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of symlink. Copyright (C) 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 <http://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); 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-20111211-stable/tests/test-symlinkat.c�������������������������������������������������������0000664�0000000�0000000�00000004322�11671051007�0020771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of symlinkat. Copyright (C) 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 <http://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 */ ); } { 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-20111211-stable/tests/test-sys_file.c��������������������������������������������������������0000664�0000000�0000000�00000001717�11671051007�0020600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/file.h> substitute. Copyright (C) 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 <http://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: ; } return 0; } �������������������������������������������������gnulib-20111211-stable/tests/test-sys_ioctl-c++.cc��������������������������������������������������0000664�0000000�0000000�00000002002�11671051007�0021470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/ioctl.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sys_ioctl.c�������������������������������������������������������0000664�0000000�0000000�00000001550�11671051007�0020766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/ioctl.h> substitute. Copyright (C) 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 <http://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-20111211-stable/tests/test-sys_select-c++.cc�������������������������������������������������0000664�0000000�0000000�00000002452�11671051007�0021646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/select.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sys_select.c������������������������������������������������������0000664�0000000�0000000�00000003107�11671051007�0021133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/select.h> substitute. 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 <http://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 t1; /* 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-20111211-stable/tests/test-sys_socket-c++.cc�������������������������������������������������0000664�0000000�0000000�00000005606�11671051007�0021663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/socket.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sys_socket.c������������������������������������������������������0000664�0000000�0000000�00000003271�11671051007�0021146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/socket.h> substitute. 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 <http://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 (0) { 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-20111211-stable/tests/test-sys_stat-c++.cc���������������������������������������������������0000664�0000000�0000000�00000005000�11671051007�0021332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/stat.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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_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-20111211-stable/tests/test-sys_stat.c��������������������������������������������������������0000664�0000000�0000000�00000015616�11671051007�0020637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/stat.h> substitute. 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 <http://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_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_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-20111211-stable/tests/test-sys_time-c++.cc���������������������������������������������������0000664�0000000�0000000�00000002052�11671051007�0021321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/time.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sys_time.c��������������������������������������������������������0000664�0000000�0000000�00000001604�11671051007�0020612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/time.h> substitute. 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <sys/time.h> struct timeval a; int main (void) { return 0; } ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-sys_times.c�������������������������������������������������������0000664�0000000�0000000�00000001733�11671051007�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/times.h> substitute. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-sys_types-c++.cc��������������������������������������������������0000664�0000000�0000000�00000001605�11671051007�0021532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/types.h> substitute in C++ mode. 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 <http://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-20111211-stable/tests/test-sys_types.c�������������������������������������������������������0000664�0000000�0000000�00000001714�11671051007�0021022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/types.h> substitute. 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 <http://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-20111211-stable/tests/test-sys_uio.c���������������������������������������������������������0000664�0000000�0000000�00000001730�11671051007�0020450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/uio.h> substitute. 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 <http://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-20111211-stable/tests/test-sys_utsname.c�����������������������������������������������������0000664�0000000�0000000�00000002110�11671051007�0021321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/utsname.h> substitute. Copyright (C) 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 <http://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-20111211-stable/tests/test-sys_wait-c++.cc���������������������������������������������������0000664�0000000�0000000�00000002012�11671051007�0021323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/wait.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sys_wait.c��������������������������������������������������������0000664�0000000�0000000�00000002245�11671051007�0020622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/wait.h> substitute. Copyright (C) 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 <http://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; switch (0) { #if 0 /* Gnulib doesn't guarantee these, yet. */ case WCONTINUED: case WEXITED: case WNOWAIT: case WSTOPPED: #endif break; } return a ? 1 : 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-sys_wait.h��������������������������������������������������������0000664�0000000�0000000�00000003615�11671051007�0020631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of macros shared between <sys/wait.h> and <stdlib.h>. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-sysexits.c��������������������������������������������������������0000664�0000000�0000000�00000002551�11671051007�0020653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sysexits.h> substitute. 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 <http://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-20111211-stable/tests/test-tan.c�������������������������������������������������������������0000664�0000000�0000000�00000002071�11671051007�0017537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tan() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-tanf.c������������������������������������������������������������0000664�0000000�0000000�00000002072�11671051007�0017706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tanf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-tanh.c������������������������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0017712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tanh() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-tanhf.c�����������������������������������������������������������0000664�0000000�0000000�00000002075�11671051007�0020061�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tanhf() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-tanl.c������������������������������������������������������������0000664�0000000�0000000�00000002245�11671051007�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of tanl() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-termios-c++.cc����������������������������������������������������0000664�0000000�0000000�00000001774�11671051007�0021161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <termios.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-termios.c���������������������������������������������������������0000664�0000000�0000000�00000001641�11671051007�0020441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <termios.h> substitute. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-thread_create.c���������������������������������������������������0000664�0000000�0000000�00000004114�11671051007�0021547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_thread_create () macro. 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 <http://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_POSIX_THREADS || USE_SOLARIS_THREADS || USE_PTH_THREADS || USE_WIN32_THREADS fputs ("glthread_create failed\n", stderr); return 1; #else fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; #endif } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-thread_self.c�����������������������������������������������������0000664�0000000�0000000�00000002143�11671051007�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_thread_self () macro. 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 <http://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. */ main_thread = gl_thread_self (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-time-c++.cc�������������������������������������������������������0000664�0000000�0000000�00000003176�11671051007�0020433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <time.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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_NANOSLEEP SIGNATURE_CHECK (GNULIB_NAMESPACE::nanosleep, int, (struct timespec const *, struct timespec *)); #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_STRPTIME SIGNATURE_CHECK (GNULIB_NAMESPACE::strptime, char *, (char const *, char const *, struct tm *)); #endif #if GNULIB_TEST_TIMEGM SIGNATURE_CHECK (GNULIB_NAMESPACE::timegm, time_t, (struct tm *)); #endif int main () { } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-time-c++2.cc������������������������������������������������������0000664�0000000�0000000�00000001464�11671051007�0020513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <time.h> substitute in C++ mode. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #define GNULIB_NAMESPACE gnulib #include <config.h> #include <ctime> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-time.c������������������������������������������������������������0000664�0000000�0000000�00000002357�11671051007�0017722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <time.h> substitute. 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 <http://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 MacOS 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 *)); int main (void) { return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-times.c�����������������������������������������������������������0000664�0000000�0000000�00000005313�11671051007�0020100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of times function. Copyright (C) 2008-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 <http://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; } 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) / clk_tck); printf ("tms.tms_stime %ldms\n", ((long int) tms.tms_stime * 1000) / clk_tck); printf ("tms.tms_cutime %ldms\n", ((long int) tms.tms_cutime * 1000) / clk_tck); printf ("tms.tms_cstime %ldms\n", ((long int) tms.tms_cstime * 1000) / 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) / clk_tck); printf ("tms.tms_stime %ldms\n", ((long int) tms.tms_stime * 1000) / clk_tck); printf ("tms.tms_cutime %ldms\n", ((long int) tms.tms_cutime * 1000) / clk_tck); printf ("tms.tms_cstime %ldms\n", ((long int) tms.tms_cstime * 1000) / clk_tck); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-tls.c�������������������������������������������������������������0000664�0000000�0000000�00000012743�11671051007�0017566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of thread-local storage in multithreaded situations. Copyright (C) 2005, 2008-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> #if USE_POSIX_THREADS || USE_SOLARIS_THREADS || USE_PTH_THREADS || USE_WIN32_THREADS #if USE_POSIX_THREADS # define TEST_POSIX_THREADS 1 #endif #if USE_SOLARIS_THREADS # define TEST_SOLARIS_THREADS 1 #endif #if USE_PTH_THREADS # define TEST_PTH_THREADS 1 #endif #if USE_WIN32_THREADS # define TEST_WIN32_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 /* Number of simultaneous threads. */ #define THREAD_COUNT 16 /* Number of operations performed in each thread. */ #define REPEAT_COUNT 50000 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "glthread/tls.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 static inline void perhaps_yield (void) { /* Call yield () only with a certain probability, otherwise with GNU Pth the sequence of thread activations is too predictable. */ if ((((unsigned int) rand () >> 3) % 4) == 0) yield (); } /* ----------------------- Test thread-local storage ----------------------- */ #define KEYS_COUNT 4 static gl_tls_key_t mykeys[KEYS_COUNT]; static void * worker_thread (void *arg) { unsigned int id = (unsigned int) (unsigned long) 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, NULL); /* 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]); } } /* -------------------------------------------------------------------------- */ int main () { #if TEST_PTH_THREADS if (!pth_init ()) abort (); #endif printf ("Starting test_tls ..."); fflush (stdout); test_tls (); 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-20111211-stable/tests/test-trunc-ieee.c������������������������������������������������������0000664�0000000�0000000�00000002707�11671051007�0021023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "minus-zero.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)); return 0; } ���������������������������������������������������������gnulib-20111211-stable/tests/test-trunc1.c����������������������������������������������������������0000664�0000000�0000000�00000003716�11671051007�0020200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. 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 <http://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-20111211-stable/tests/test-trunc2.c����������������������������������������������������������0000664�0000000�0000000�00000012176�11671051007�0020201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. 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 <http://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" /* 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-20111211-stable/tests/test-truncf-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000002722�11671051007�0021166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "minus-zero.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)); return 0; } ����������������������������������������������gnulib-20111211-stable/tests/test-truncf1.c���������������������������������������������������������0000664�0000000�0000000�00000004011�11671051007�0020333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. 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 <http://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-20111211-stable/tests/test-truncf2.c���������������������������������������������������������0000664�0000000�0000000�00000012200�11671051007�0020333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. 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 <http://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" /* 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-20111211-stable/tests/test-truncl-ieee.c�����������������������������������������������������0000664�0000000�0000000�00000003044�11671051007�0021172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <math.h> #include "fpucw.h" #include "minus-zero.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)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-truncl.c����������������������������������������������������������0000664�0000000�0000000�00000004175�11671051007�0020273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of rounding towards zero. 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 <http://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-20111211-stable/tests/test-tsearch.c���������������������������������������������������������0000664�0000000�0000000�00000021212�11671051007�0020404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test program for tsearch et al. Copyright (C) 1997, 2000-2001, 2007-2011 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 <http://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> #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 permutated, 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 == 0 || 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; /* fall through */ 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; static char state[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; void *root = NULL; int i, j; #if HAVE_INITSTATE 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-20111211-stable/tests/test-tsearch.sh��������������������������������������������������������0000775�0000000�0000000�00000000346�11671051007�0020604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles t-tsearch.out" ./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-20111211-stable/tests/test-ttyname_r.c�������������������������������������������������������0000664�0000000�0000000�00000003270�11671051007�0020761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ttyname_r(3). Copyright (C) 2010-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 <http://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 = ttyname_r (99, buf, sizeof (buf)); ASSERT (err == EBADF || err == ENOTTY /* seen on FreeBSD 6.4 */ ); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-u64.c�������������������������������������������������������������0000664�0000000�0000000�00000002221�11671051007�0017370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <u64.h> Copyright (C) 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 <http://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-20111211-stable/tests/test-uname.c�����������������������������������������������������������0000664�0000000�0000000�00000003750�11671051007�0020067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of system information. Copyright (C) 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 <http://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-20111211-stable/tests/test-unistd-c++.cc�����������������������������������������������������0000664�0000000�0000000�00000013024�11671051007�0020774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <unistd.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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_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_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_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_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_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_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_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_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-20111211-stable/tests/test-unistd.c����������������������������������������������������������0000664�0000000�0000000�00000003047�11671051007�0020267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <unistd.h> substitute. 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 <http://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-20111211-stable/tests/test-unlink.c����������������������������������������������������������0000664�0000000�0000000�00000002456�11671051007�0020264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unlink. Copyright (C) 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 <http://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-20111211-stable/tests/test-unlink.h����������������������������������������������������������0000664�0000000�0000000�00000005755�11671051007�0020276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unlink. Copyright (C) 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 <http://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-20111211-stable/tests/test-unlinkat.c��������������������������������������������������������0000664�0000000�0000000�00000004717�11671051007�0020613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unlinkat. Copyright (C) 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 <http://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 "progname.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 (int argc _GL_UNUSED, char *argv[]) { /* FIXME: Add tests of fd other than ".". */ int result1; int result2; set_program_name (argv[0]); /* 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); } { 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-20111211-stable/tests/test-unlockpt.c��������������������������������������������������������0000664�0000000�0000000�00000002524�11671051007�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test unlocking of the slave side of a pseudo-terminal. 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (unlockpt, int, (int)); #include <errno.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 */ ); } { errno = 0; ASSERT (unlockpt (99) == -1); ASSERT (errno == EBADF || errno == EINVAL /* seen on FreeBSD 6.4 */ ); } #endif return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-unsetenv.c��������������������������������������������������������0000664�0000000�0000000�00000003375�11671051007�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unsetenv. Copyright (C) 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 <http://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-20111211-stable/tests/test-update-copyright.sh�����������������������������������������������0000775�0000000�0000000�00000040156�11671051007�0022446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test suite for update-copyright. # Copyright (C) 2009-2011 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 <http://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 eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}' & eval 'exec perl -wS -0777 -pi "$0" $argv:q' 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 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 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 rm $TMP* exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-userspec.c��������������������������������������������������������0000664�0000000�0000000�00000013012�11671051007�0020603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test userspec.c Copyright (C) 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 <http://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 (!diag && !T[i].result) continue; { printf ("%s diagnostic mismatch (-: expected uid,gid; +:actual)\n" "-%s\n+%s\n", T[i].in, T[i].result, diag); fail = 1; } } return fail; } /* Local Variables: indent-tabs-mode: nil End: */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-usleep.c����������������������������������������������������������0000664�0000000�0000000�00000002111�11671051007�0020245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of usleep() function. Copyright (C) 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 <http://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-20111211-stable/tests/test-utimens-common.h��������������������������������������������������0000664�0000000�0000000�00000005047�11671051007�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of file timestamp modification functions. Copyright (C) 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 <http://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 <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 __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. */ # define check_ctime 0 # 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 inline 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-20111211-stable/tests/test-utimens.c���������������������������������������������������������0000664�0000000�0000000�00000004350�11671051007�0020443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of utimens. Copyright (C) 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 <http://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-20111211-stable/tests/test-utimens.h���������������������������������������������������������0000664�0000000�0000000�00000013356�11671051007�0020456�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of file timestamp modification functions. Copyright (C) 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 <http://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 less 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] = { { Y2K, UTIME_BOGUS_POS }, { Y2K, 0 } }; errno = 0; ASSERT (func (BASE "file", ts) == -1); ASSERT (errno == EINVAL); } { struct timespec ts[2] = { { Y2K, 0 }, { Y2K, UTIME_BOGUS_NEG } }; errno = 0; ASSERT (func (BASE "file", ts) == -1); ASSERT (errno == EINVAL); } { struct timespec ts[2] = { { Y2K, 0 }, { Y2K, 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] = { { Y2K, BILLION / 2 - 1 }, { Y2K, 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] = { { BILLION, UTIME_OMIT }, { 0, 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) 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] = { { Y2K, 0 }, { Y2K, 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-20111211-stable/tests/test-utimensat.c�������������������������������������������������������0000664�0000000�0000000�00000006637�11671051007�0021002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of utimensat. Copyright (C) 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 <http://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); } { 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] = { { Y2K, 0 }, { Y2K, 0 } }; struct stat st; 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-20111211-stable/tests/test-vasnprintf-posix.c������������������������������������������������0000664�0000000�0000000�00000367632�11671051007�0022330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vasnprintf() and asnprintf() 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 <http://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, "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 MacOS 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 <http://lists.gnu.org/archive/html/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 <http://lists.gnu.org/archive/html/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); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 MacOS X 10.3.9 (Darwin 7.9) bug and a glibc 2.4 bug <http://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 <http://lists.gnu.org/archive/html/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 <http://lists.gnu.org/archive/html/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); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (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, "%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 (length == strlen (result)); free (result); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (length == strlen (result)); 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-20111211-stable/tests/test-vasnprintf-posix2.c�����������������������������������������������0000664�0000000�0000000�00000003713�11671051007�0022375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vasnprintf() and asnprintf() 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 <http://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-20111211-stable/tests/test-vasnprintf-posix2.sh����������������������������������������������0000775�0000000�0000000�00000000761�11671051007�0022570�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 \ ./test-vasnprintf-posix2${EXEEXT} ���������������gnulib-20111211-stable/tests/test-vasnprintf-posix3.c�����������������������������������������������0000664�0000000�0000000�00000005016�11671051007�0022374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vasnprintf() and asnprintf() functions. Copyright (C) 2010-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 <http://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" static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { /* 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__ /* 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); } #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[]) { #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-20111211-stable/tests/test-vasnprintf.c������������������������������������������������������0000664�0000000�0000000�00000004335�11671051007�0021154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vasnprintf() and asnprintf() 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 <http://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 < 6) 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-20111211-stable/tests/test-vasprintf-posix.c�������������������������������������������������0000664�0000000�0000000�00000356557�11671051007�0022156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vasprintf() and asprintf() 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 <http://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, "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, "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 MacOS 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 <http://lists.gnu.org/archive/html/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 <http://lists.gnu.org/archive/html/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); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 MacOS X 10.3.9 (Darwin 7.9) bug and a glibc 2.4 bug <http://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 <http://lists.gnu.org/archive/html/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 <http://lists.gnu.org/archive/html/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); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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); } /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in Intel IA-64 Architecture Software Developer's Manual, Volume 1: Application Architecture. Table 5-2 "Floating-Point Register Encodings" Figure 5-6 "Memory to Floating-Point Register Data Translation" */ { /* 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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 (strlen (result) >= 3 + 3 && strisnan (result, 0, strlen (result) - 3, 0) && strcmp (result + strlen (result) - 3, " 33") == 0); ASSERT (retval == strlen (result)); 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-20111211-stable/tests/test-vasprintf.c�������������������������������������������������������0000664�0000000�0000000�00000004715�11671051007�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vasprintf() and asprintf() 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 <http://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-20111211-stable/tests/test-vc-list-files-cvs.sh����������������������������������������������0000775�0000000�0000000�00000003362�11671051007�0022426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Unit tests for vc-list-files # Copyright (C) 2008-2011 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 <http://www.gnu.org/licenses/>. */ : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ "$abs_aux_dir" . 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 # The double use of 'exit' is needed for the reference to $? inside the trap. { ( 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 && vc-list-files | sort > actual && compare expected actual && ok=1 test $ok = 0 && fail=1 done Exit $fail ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-vc-list-files-git.sh����������������������������������������������0000775�0000000�0000000�00000002636�11671051007�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Unit tests for vc-list-files # Copyright (C) 2008-2011 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 <http://www.gnu.org/licenses/>. */ : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ "$abs_aux_dir" . 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 && vc-list-files > actual && compare expected actual && fail=0 Exit $fail ��������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-vdprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002506�11671051007�0021754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vdprintf() function. 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 <http://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-20111211-stable/tests/test-vdprintf-posix.sh�������������������������������������������������0000775�0000000�0000000�00000000600�11671051007�0022140�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" ./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-20111211-stable/tests/test-vdprintf.c��������������������������������������������������������0000664�0000000�0000000�00000002547�11671051007�0020621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vdprintf() function. 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 <http://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 "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); } { errno = 0; ASSERT (my_dprintf (99, "test") == -1); ASSERT (errno == EBADF); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-verify.c����������������������������������������������������������0000664�0000000�0000000�00000003503�11671051007�0020262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the "verify" module. Copyright (C) 2005, 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ #include <config.h> #include "verify.h" #ifndef EXP_FAIL # define EXP_FAIL 0 #endif int x; enum { a, b, c }; #if EXP_FAIL == 1 verify (x >= 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_true (1 == 1) * 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; } int main (void) { return !(function (0) == 0 && function (1) == 8); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-verify.sh���������������������������������������������������������0000775�0000000�0000000�00000001305�11671051007�0020453�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.o \ && $MAKE test-verify.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.o $MAKE CFLAGS=-DEXP_FAIL=$i test-verify.o) >>out 2>>err \ && { warn_ "compiler didn't detect verification failure $i"; fail=1; } done Exit $fail ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-version-etc.c�����������������������������������������������������0000664�0000000�0000000�00000002107�11671051007�0021213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for version-etc. Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include "version-etc.h" #include "progname.h" #define AUTHORS "Sergey Poznyakoff", "Eric Blake" int main (int argc _GL_UNUSED, char **argv) { set_program_name (argv[0]); version_etc (stdout, "test-version-etc", "dummy", "0", AUTHORS, (const char *) NULL); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-version-etc.sh����������������������������������������������������0000775�0000000�0000000�00000002612�11671051007�0021407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for version-etc. # Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. 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 <http://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 ./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' | diff -c $TMP - || ERR=1 rm $TMP exit $ERR ����������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-vfprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002500�11671051007�0021750�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vfprintf() function. 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 <http://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-20111211-stable/tests/test-vfprintf-posix.sh�������������������������������������������������0000775�0000000�0000000�00000000600�11671051007�0022142�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" ./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-20111211-stable/tests/test-vprintf-posix.c���������������������������������������������������0000664�0000000�0000000�00000002445�11671051007�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vfprintf() function. 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 <http://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-20111211-stable/tests/test-vprintf-posix.sh��������������������������������������������������0000775�0000000�0000000�00000000571�11671051007�0022003�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" ./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-20111211-stable/tests/test-vsnprintf-posix.c�������������������������������������������������0000664�0000000�0000000�00000002447�11671051007�0022155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsnprintf() function. 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 <http://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-20111211-stable/tests/test-vsnprintf.c�������������������������������������������������������0000664�0000000�0000000�00000004304�11671051007�0021007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vsnprintf() function. 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 <http://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-20111211-stable/tests/test-vsprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002551�11671051007�0021773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of POSIX compatible vsprintf() function. 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 <http://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-20111211-stable/tests/test-wchar-c++.cc������������������������������������������������������0000664�0000000�0000000�00000013757�11671051007�0020607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wchar.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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_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 int main () { } �����������������gnulib-20111211-stable/tests/test-wchar.c�����������������������������������������������������������0000664�0000000�0000000�00000002135�11671051007�0020062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wchar.h> substitute. 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 <http://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-20111211-stable/tests/test-wcrtomb-w32-1.sh��������������������������������������������������0000775�0000000�0000000�00000000122�11671051007�0021367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ./test-wcrtomb-w32${EXEEXT} French_France 1252 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcrtomb-w32-2.sh��������������������������������������������������0000775�0000000�0000000�00000000132�11671051007�0021371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ./test-wcrtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcrtomb-w32-3.sh��������������������������������������������������0000775�0000000�0000000�00000000121�11671051007�0021370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ./test-wcrtomb-w32${EXEEXT} Japanese_Japan 932 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcrtomb-w32-4.sh��������������������������������������������������0000775�0000000�0000000�00000000121�11671051007�0021371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ./test-wcrtomb-w32${EXEEXT} Chinese_Taiwan 950 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcrtomb-w32-5.sh��������������������������������������������������0000775�0000000�0000000�00000000120�11671051007�0021371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ./test-wcrtomb-w32${EXEEXT} Chinese_China 936 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcrtomb-w32-6.sh��������������������������������������������������0000775�0000000�0000000�00000000331�11671051007�0021376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This test is not enabled by default, because MSVCRT does not support and # will likely never support locales with MB_CUR_MAX > 2. # Test a GB18030 locale. ./test-wcrtomb-w32${EXEEXT} Chinese_China 54936 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcrtomb-w32-7.sh��������������������������������������������������0000775�0000000�0000000�00000000407�11671051007�0021403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # This test is not enabled by default, because MSVCRT does not support and # will likely never support locales with MB_CUR_MAX > 2. # Test some UTF-8 locales. ./test-wcrtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcrtomb-w32.c�����������������������������������������������������0000664�0000000�0000000�00000021715�11671051007�0021051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <wchar.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" #if (defined _WIN32 || 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. */ { /* 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. */ { /* 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-20111211-stable/tests/test-wcrtomb.c���������������������������������������������������������0000664�0000000�0000000�00000011016�11671051007�0020431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-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 <http://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; } return 1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcrtomb.sh��������������������������������������������������������0000775�0000000�0000000�00000001361�11671051007�0020626�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 \ ./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 \ ./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 \ ./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 \ ./test-wcrtomb${EXEEXT} 4 \ || exit 1 fi exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcsnrtombs.c������������������������������������������������������0000664�0000000�0000000�00000015056�11671051007�0021165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide string to string. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-wcsnrtombs1.sh����������������������������������������������������0000775�0000000�0000000�00000000550�11671051007�0021432�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 \ ./test-wcsnrtombs${EXEEXT} 1 ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcsnrtombs2.sh����������������������������������������������������0000775�0000000�0000000�00000000573�11671051007�0021440�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 \ ./test-wcsnrtombs${EXEEXT} 2 �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcsnrtombs3.sh����������������������������������������������������0000775�0000000�0000000�00000000563�11671051007�0021440�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 \ ./test-wcsnrtombs${EXEEXT} 3 ���������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcsnrtombs4.sh����������������������������������������������������0000775�0000000�0000000�00000000605�11671051007�0021436�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 \ ./test-wcsnrtombs${EXEEXT} 4 ���������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcsrtombs.c�������������������������������������������������������0000664�0000000�0000000�00000015004�11671051007�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide string to string. Copyright (C) 2008-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 <http://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-20111211-stable/tests/test-wcsrtombs1.sh�����������������������������������������������������0000775�0000000�0000000�00000000547�11671051007�0021262�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 \ ./test-wcsrtombs${EXEEXT} 1 ���������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcsrtombs2.sh�����������������������������������������������������0000775�0000000�0000000�00000000572�11671051007�0021261�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 \ ./test-wcsrtombs${EXEEXT} 2 ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcsrtombs3.sh�����������������������������������������������������0000775�0000000�0000000�00000000562�11671051007�0021261�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 \ ./test-wcsrtombs${EXEEXT} 3 ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wcsrtombs4.sh�����������������������������������������������������0000775�0000000�0000000�00000000604�11671051007�0021257�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 \ ./test-wcsrtombs${EXEEXT} 4 ����������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-wctype-h-c++.cc���������������������������������������������������0000664�0000000�0000000�00000004277�11671051007�0021240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wctype.h> substitute in C++ mode. Copyright (C) 2010-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 <http://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)); #if GNULIB_TEST_ISWBLANK SIGNATURE_CHECK (GNULIB_NAMESPACE::iswblank, int, (wint_t)); #endif SIGNATURE_CHECK (GNULIB_NAMESPACE::iswcntrl, int, (wint_t)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswdigit, int, (wint_t)); 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)); SIGNATURE_CHECK (GNULIB_NAMESPACE::iswxdigit, int, (wint_t)); #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-20111211-stable/tests/test-wctype-h.c��������������������������������������������������������0000664�0000000�0000000�00000003765�11671051007�0020530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wctype.h> substitute. 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 <http://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-20111211-stable/tests/test-wcwidth.c���������������������������������������������������������0000664�0000000�0000000�00000005011�11671051007�0020423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of wcwidth() function. 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 <http://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 "localcharset.h" #include "macros.h" int main () { wchar_t wc; /* Test width of ASCII characters. */ for (wc = 0x20; wc < 0x7F; wc++) ASSERT (wcwidth (wc) == 1); /* 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. */ ASSERT (wcwidth (0x200B) == 0); ASSERT (wcwidth (0xFEFF) <= 0); /* 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-20111211-stable/tests/test-write.c�����������������������������������������������������������0000664�0000000�0000000�00000003760�11671051007�0020115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the write() function. 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 <http://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'; errno = 0; ASSERT (write (99, &byte, 1) == -1); ASSERT (errno == EBADF); } /* Clean up. */ unlink (filename); return 0; } ����������������gnulib-20111211-stable/tests/test-xalloc-die.c������������������������������������������������������0000664�0000000�0000000�00000001717�11671051007�0021004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xalloc_die() function. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson <simon@josefsson.org>, 2009. */ #include <config.h> #include "xalloc.h" #include "progname.h" int main (int argc _GL_UNUSED, char **argv) { set_program_name (argv[0]); xalloc_die (); return 0; } �������������������������������������������������gnulib-20111211-stable/tests/test-xalloc-die.sh�����������������������������������������������������0000775�0000000�0000000�00000002106�11671051007�0021170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test suite for xalloc_die. # Copyright (C) 2009-2011 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 <http://www.gnu.org/licenses/>. . "${srcdir=.}/init.sh"; path_prepend_ . 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-20111211-stable/tests/test-xfprintf-posix.c��������������������������������������������������0000664�0000000�0000000�00000002213�11671051007�0021753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of error-checking xfprintf() function with POSIX compatible formatting. 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 <http://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 "progname.h" #include "macros.h" #include "test-fprintf-posix.h" int main (int argc _GL_UNUSED, char *argv[]) { set_program_name (argv[0]); test_function (xfprintf); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-xmemdup0.c��������������������������������������������������������0000664�0000000�0000000�00000004020�11671051007�0020510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xmemdup0() function. Copyright (C) 2008-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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 Eric Blake <ebb9@byu.net>, 2008. */ #include <config.h> #include "xmemdup0.h" #include <stdlib.h> #include <string.h> #include "progname.h" #include "macros.h" int main (int argc, char **argv) { char buffer[10] = { 'a', 'b', 'c', 'd', '\0', 'f', 'g', 'h', 'i', 'j' }; set_program_name (argv[0]); /* 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-20111211-stable/tests/test-xprintf-posix.c���������������������������������������������������0000664�0000000�0000000�00000002164�11671051007�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of error-checking xprintf() function with POSIX compatible formatting. 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 <http://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 "progname.h" #include "macros.h" #include "test-printf-posix.h" int main (int argc _GL_UNUSED, char *argv[]) { set_program_name (argv[0]); test_function (xprintf); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-xprintf-posix.sh��������������������������������������������������0000775�0000000�0000000�00000001341�11671051007�0022001�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" ./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" ./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-20111211-stable/tests/test-xstrtoimax.c������������������������������������������������������0000664�0000000�0000000�00000000152�11671051007�0021175�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoimax #define __strtol_t intmax_t #define __spec PRIdMAX #include "test-xstrtol.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-xstrtoimax.sh�����������������������������������������������������0000775�0000000�0000000�00000002122�11671051007�0021367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . too_big=99999999999999999999999999999999999999999999999999999999999999999999 result=0 # test xstrtoimax test-xstrtoimax 1 >> out 2>&1 || result=1 test-xstrtoimax -1 >> out 2>&1 || result=1 test-xstrtoimax 1k >> out 2>&1 || result=1 test-xstrtoimax ${too_big}h >> out 2>&1 && result=1 test-xstrtoimax $too_big >> out 2>&1 && result=1 test-xstrtoimax x >> out 2>&1 && result=1 test-xstrtoimax 9x >> out 2>&1 && result=1 test-xstrtoimax 010 >> out 2>&1 || result=1 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-20111211-stable/tests/test-xstrtol.c���������������������������������������������������������0000664�0000000�0000000�00000003065�11671051007�0020500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xstrtol module. Copyright (C) 1995-1996, 1998-2001, 2003-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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <inttypes.h> #include <stdlib.h> #include <stdio.h> #include "xstrtol.h" #include "error.h" #ifndef __xstrtol # define __xstrtol xstrtol # define __strtol_t long int # define __spec "ld" #endif char *program_name; /* 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; program_name = argv[0]; 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-20111211-stable/tests/test-xstrtol.sh��������������������������������������������������������0000775�0000000�0000000�00000003300�11671051007�0020663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . too_big=99999999999999999999999999999999999999999999999999999999999999999999 result=0 # test xstrtol test-xstrtol 1 >> out 2>&1 || result=1 test-xstrtol -1 >> out 2>&1 || result=1 test-xstrtol 1k >> out 2>&1 || result=1 test-xstrtol ${too_big}h >> out 2>&1 && result=1 test-xstrtol $too_big >> out 2>&1 && result=1 test-xstrtol x >> out 2>&1 && result=1 test-xstrtol 9x >> out 2>&1 && result=1 test-xstrtol 010 >> out 2>&1 || result=1 # suffix without integer is valid test-xstrtol MiB >> out 2>&1 || result=1 # test xstrtoul test-xstrtoul 1 >> out 2>&1 || result=1 test-xstrtoul -1 >> out 2>&1 && result=1 test-xstrtoul 1k >> out 2>&1 || result=1 test-xstrtoul ${too_big}h >> out 2>&1 && result=1 test-xstrtoul $too_big >> out 2>&1 && result=1 test-xstrtoul x >> out 2>&1 && result=1 test-xstrtoul 9x >> out 2>&1 && result=1 test-xstrtoul 010 >> out 2>&1 || result=1 test-xstrtoul 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-20111211-stable/tests/test-xstrtoll.c��������������������������������������������������������0000664�0000000�0000000�00000000154�11671051007�0020650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoll #define __strtol_t long long int #define __spec PRId64 #include "test-xstrtol.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-xstrtoll.sh�������������������������������������������������������0000775�0000000�0000000�00000003324�11671051007�0021045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . too_big=99999999999999999999999999999999999999999999999999999999999999999999 result=0 # test xstrtoll test-xstrtoll 1 >> out 2>&1 || result=1 test-xstrtoll -1 >> out 2>&1 || result=1 test-xstrtoll 1k >> out 2>&1 || result=1 test-xstrtoll ${too_big}h >> out 2>&1 && result=1 test-xstrtoll $too_big >> out 2>&1 && result=1 test-xstrtoll x >> out 2>&1 && result=1 test-xstrtoll 9x >> out 2>&1 && result=1 test-xstrtoll 010 >> out 2>&1 || result=1 # suffix without integer is valid test-xstrtoll MiB >> out 2>&1 || result=1 # test xstrtoull test-xstrtoull 1 >> out 2>&1 || result=1 test-xstrtoull -1 >> out 2>&1 && result=1 test-xstrtoull 1k >> out 2>&1 || result=1 test-xstrtoull ${too_big}h >> out 2>&1 && result=1 test-xstrtoull $too_big >> out 2>&1 && result=1 test-xstrtoull x >> out 2>&1 && result=1 test-xstrtoull 9x >> out 2>&1 && result=1 test-xstrtoull 010 >> out 2>&1 || result=1 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-20111211-stable/tests/test-xstrtoul.c��������������������������������������������������������0000664�0000000�0000000�00000000156�11671051007�0020663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoul #define __strtol_t unsigned long int #define __spec "lu" #include "test-xstrtol.c" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-xstrtoull.c�������������������������������������������������������0000664�0000000�0000000�00000000166�11671051007�0021040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoull #define __strtol_t unsigned long long int #define __spec PRIu64 #include "test-xstrtol.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-xstrtoumax.c������������������������������������������������������0000664�0000000�0000000�00000000153�11671051007�0021212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#define __xstrtol xstrtoumax #define __strtol_t uintmax_t #define __spec PRIuMAX #include "test-xstrtol.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-xstrtoumax.sh�����������������������������������������������������0000775�0000000�0000000�00000002141�11671051007�0021404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : ${srcdir=.} . "$srcdir/init.sh"; path_prepend_ . too_big=99999999999999999999999999999999999999999999999999999999999999999999 result=0 # test xstrtoumax test-xstrtoumax 1 >> out 2>&1 || result=1 test-xstrtoumax -1 >> out 2>&1 && result=1 test-xstrtoumax 1k >> out 2>&1 || result=1 test-xstrtoumax ${too_big}h >> out 2>&1 && result=1 test-xstrtoumax $too_big >> out 2>&1 && result=1 test-xstrtoumax x >> out 2>&1 && result=1 test-xstrtoumax 9x >> out 2>&1 && result=1 test-xstrtoumax 010 >> out 2>&1 || result=1 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-20111211-stable/tests/test-xvasprintf.c������������������������������������������������������0000664�0000000�0000000�00000005752�11671051007�0021172�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xvasprintf() and xasprintf() 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "xvasprintf.h" #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "progname.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. */ const char *empty = ""; result = xasprintf (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 (int argc _GL_UNUSED, char *argv[]) { set_program_name (argv[0]); test_xvasprintf (); test_xasprintf (); return 0; } ����������������������gnulib-20111211-stable/tests/test-y0.c��������������������������������������������������������������0000664�0000000�0000000�00000002066�11671051007�0017311�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of y0() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-y1.c��������������������������������������������������������������0000664�0000000�0000000�00000002066�11671051007�0017312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of y1() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/test-yesno.c�����������������������������������������������������������0000664�0000000�0000000�00000004124�11671051007�0020113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of yesno module. 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, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://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" char *program_name; /* 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; program_name = argv[0]; /* 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 (0); if (1 < argc) i = atoi (argv[1]); if (!i) { i = 1; close (0); } while (i--) puts (yesno () ? "Y" : "N"); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/test-yesno.sh����������������������������������������������������������0000775�0000000�0000000�00000002703�11671051007�0020307�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 followon 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 (test-yesno; 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 (test-yesno 3; 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 | 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 on EOF cat <<EOF > xout.tmp N EOF 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 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-20111211-stable/tests/test-yn.c��������������������������������������������������������������0000664�0000000�0000000�00000004207�11671051007�0017406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of yn() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unicase/���������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017263�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-casecmp.h�������������������������������������������������0000664�0000000�0000000�00000004553�11671051007�0022033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of Unicode strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-cased.c���������������������������������������������������0000664�0000000�0000000�00000007077�11671051007�0021476�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 <http://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 }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 0x0531, 0x0556 }, { 0x0561, 0x0587 }, { 0x10A0, 0x10C5 }, { 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 }, { 0x2090, 0x2094 }, { 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 }, { 0x2D00, 0x2D25 }, { 0xA640, 0xA66D }, { 0xA680, 0xA697 }, { 0xA722, 0xA787 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA7FA }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0x10400, 0x1044F }, { 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 } #define PREDICATE(c) uc_is_cased (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-ignorable.c�����������������������������������������������0000664�0000000�0000000�00000016572�11671051007�0022361�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 <http://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 }, { 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, 0x0603 }, { 0x0610, 0x061A }, { 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 }, { 0x0900, 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 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 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, 0x180D }, { 0x1843, 0x1843 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AA7, 0x1AA7 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1C78, 0x1C7D }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1DC0, 0x1DE6 }, { 0x1DFC, 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 }, { 0x206A, 0x206F }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2095, 0x209C }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D6F, 0x2D6F }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3005 }, { 0x302A, 0x302F }, { 0x3031, 0x3035 }, { 0x303B, 0x303B }, { 0x3099, 0x309E }, { 0x30FC, 0x30FE }, { 0xA015, 0xA015 }, { 0xA4F8, 0xA4FD }, { 0xA60C, 0xA60C }, { 0xA66F, 0xA672 }, { 0xA67C, 0xA67D }, { 0xA67F, 0xA67F }, { 0xA6F0, 0xA6F1 }, { 0xA700, 0xA721 }, { 0xA788, 0xA78A }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xA9CF, 0xA9CF }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAA70, 0xAA70 }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAADD, 0xAADD }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFBB2, 0xFBC1 }, { 0xFE00, 0xFE0F }, { 0xFE13, 0xFE13 }, { 0xFE20, 0xFE26 }, { 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 }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x11080, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x110BD, 0x110BD }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_case_ignorable (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-is-cased.h������������������������������������������������0000664�0000000�0000000�00000003440�11671051007�0022102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether case matters for a Unicode string. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-is-casefolded.h�������������������������������������������0000664�0000000�0000000�00000002774�11671051007�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether a Unicode string is already case-folded. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-is-lowercase.h��������������������������������������������0000664�0000000�0000000�00000005322�11671051007�0023010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether a Unicode string is entirely lower case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-is-titlecase.h��������������������������������������������0000664�0000000�0000000�00000005322�11671051007�0023001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether a Unicode string is entirely title case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-is-uppercase.h��������������������������������������������0000664�0000000�0000000�00000005322�11671051007�0023013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether a Unicode string is entirely upper case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-locale-language.c�����������������������������������������0000664�0000000�0000000�00000002332�11671051007�0023424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of language code determination. 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 <http://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-20111211-stable/tests/unicase/test-locale-language.sh����������������������������������������0000775�0000000�0000000�00000001460�11671051007�0023620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh LC_ALL=C ./test-locale-language${EXEEXT} '' || exit 1 : ${LOCALE_FR=fr_FR} if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ./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 ./test-locale-language${EXEEXT} fr || exit 1 fi : ${LOCALE_JA=ja_JP} if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA ./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 ./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 ./test-locale-language${EXEEXT} zh || exit 1 fi exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-mapping-part1.h�������������������������������������������0000664�0000000�0000000�00000002044�11671051007�0023071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of single character case mapping 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 <http://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-20111211-stable/tests/unicase/test-mapping-part2.h�������������������������������������������0000664�0000000�0000000�00000002050�11671051007�0023067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of single character case mapping 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 <http://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-20111211-stable/tests/unicase/test-predicate-part1.h�����������������������������������������0000664�0000000�0000000�00000002055�11671051007�0023400�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 <http://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-20111211-stable/tests/unicase/test-predicate-part2.h�����������������������������������������0000664�0000000�0000000�00000002063�11671051007�0023400�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 <http://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-20111211-stable/tests/unicase/test-u16-casecmp.c���������������������������������������������0000664�0000000�0000000�00000031342�11671051007�0022433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-casecoll.c��������������������������������������������0000664�0000000�0000000�00000002275�11671051007�0022610�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, case and normalization insensitive comparison of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-casefold.c��������������������������������������������0000664�0000000�0000000�00000020455�11671051007�0022603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of casefolding mapping for UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-is-cased.c��������������������������������������������0000664�0000000�0000000�00000002002�11671051007�0022477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether case matters for an UTF-16 string. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-is-casefolded.c���������������������������������������0000664�0000000�0000000�00000002546�11671051007�0023526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-16 string is already case-folded. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-is-lowercase.c����������������������������������������0000664�0000000�0000000�00000003777�11671051007�0023430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-16 string is entirely lower case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-is-titlecase.c����������������������������������������0000664�0000000�0000000�00000002020�11671051007�0023375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-16 string is entirely title case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-is-uppercase.c����������������������������������������0000664�0000000�0000000�00000003777�11671051007�0023433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-16 string is entirely upper case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-tolower.c���������������������������������������������0000664�0000000�0000000�00000024161�11671051007�0022514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lowercase mapping for UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-totitle.c���������������������������������������������0000664�0000000�0000000�00000020011�11671051007�0022473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of titlecase mapping for UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u16-toupper.c���������������������������������������������0000664�0000000�0000000�00000020031�11671051007�0022507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uppercase mapping for UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-casecmp.c���������������������������������������������0000664�0000000�0000000�00000031342�11671051007�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-casecoll.c��������������������������������������������0000664�0000000�0000000�00000002275�11671051007�0022606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, case and normalization insensitive comparison of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-casefold.c��������������������������������������������0000664�0000000�0000000�00000020455�11671051007�0022601�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of casefolding mapping for UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-is-cased.c��������������������������������������������0000664�0000000�0000000�00000002002�11671051007�0022475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether case matters for an UTF-32 string. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-is-casefolded.c���������������������������������������0000664�0000000�0000000�00000002546�11671051007�0023524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-32 string is already case-folded. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-is-lowercase.c����������������������������������������0000664�0000000�0000000�00000003777�11671051007�0023426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-32 string is entirely lower case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-is-titlecase.c����������������������������������������0000664�0000000�0000000�00000002020�11671051007�0023373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-32 string is entirely title case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-is-uppercase.c����������������������������������������0000664�0000000�0000000�00000003777�11671051007�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-32 string is entirely upper case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-tolower.c���������������������������������������������0000664�0000000�0000000�00000024161�11671051007�0022512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lowercase mapping for UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-totitle.c���������������������������������������������0000664�0000000�0000000�00000020011�11671051007�0022471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of titlecase mapping for UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u32-toupper.c���������������������������������������������0000664�0000000�0000000�00000020031�11671051007�0022505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uppercase mapping for UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-casecmp.c����������������������������������������������0000664�0000000�0000000�00000033040�11671051007�0022351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-casecoll.c���������������������������������������������0000664�0000000�0000000�00000002272�11671051007�0022526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, case and normalization insensitive comparison of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-casefold.c���������������������������������������������0000664�0000000�0000000�00000021407�11671051007�0022522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of casefolding mapping for UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-is-cased.c���������������������������������������������0000664�0000000�0000000�00000001777�11671051007�0022442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether case matters for an UTF-8 string. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-is-casefolded.c����������������������������������������0000664�0000000�0000000�00000002544�11671051007�0023445�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-8 string is already case-folded. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-is-lowercase.c�����������������������������������������0000664�0000000�0000000�00000004033�11671051007�0023333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-8 string is entirely lower case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-is-titlecase.c�����������������������������������������0000664�0000000�0000000�00000002015�11671051007�0023322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-8 string is entirely title case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-is-uppercase.c�����������������������������������������0000664�0000000�0000000�00000004033�11671051007�0023336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test whether an UTF-8 string is entirely upper case. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-tolower.c����������������������������������������������0000664�0000000�0000000�00000025254�11671051007�0022441�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lowercase mapping for UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-totitle.c����������������������������������������������0000664�0000000�0000000�00000020753�11671051007�0022431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of titlecase mapping for UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-u8-toupper.c����������������������������������������������0000664�0000000�0000000�00000020745�11671051007�0022444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uppercase mapping for UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-uc_tolower.c����������������������������������������������0000664�0000000�0000000�00000062532�11671051007�0022576�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 <http://www.gnu.org/licenses/>. */ /* Generated automatically by gen-case.c for Unicode 6.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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 0xA7A0, 0xA7A1 }, { 0xA7A2, 0xA7A3 }, { 0xA7A4, 0xA7A5 }, { 0xA7A6, 0xA7A7 }, { 0xA7A8, 0xA7A9 }, { 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 } #define MAP(c) uc_tolower (c) #include "test-mapping-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-uc_totitle.c����������������������������������������������0000664�0000000�0000000�00000063032�11671051007�0022563�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 <http://www.gnu.org/licenses/>. */ /* Generated automatically by gen-case.c for Unicode 6.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 }, { 0x0260, 0x0193 }, { 0x0263, 0x0194 }, { 0x0265, 0xA78D }, { 0x0268, 0x0197 }, { 0x0269, 0x0196 }, { 0x026B, 0x2C62 }, { 0x026F, 0x019C }, { 0x0271, 0x2C6E }, { 0x0272, 0x019D }, { 0x0275, 0x019F }, { 0x027D, 0x2C64 }, { 0x0280, 0x01A6 }, { 0x0283, 0x01A9 }, { 0x0288, 0x01AE }, { 0x0289, 0x0244 }, { 0x028A, 0x01B1 }, { 0x028B, 0x01B2 }, { 0x028C, 0x0245 }, { 0x0292, 0x01B7 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 0xA7A1, 0xA7A0 }, { 0xA7A3, 0xA7A2 }, { 0xA7A5, 0xA7A4 }, { 0xA7A7, 0xA7A6 }, { 0xA7A9, 0xA7A8 }, { 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 } #define MAP(c) uc_totitle (c) #include "test-mapping-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-uc_toupper.c����������������������������������������������0000664�0000000�0000000�00000063032�11671051007�0022575�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 <http://www.gnu.org/licenses/>. */ /* Generated automatically by gen-case.c for Unicode 6.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 }, { 0x0260, 0x0193 }, { 0x0263, 0x0194 }, { 0x0265, 0xA78D }, { 0x0268, 0x0197 }, { 0x0269, 0x0196 }, { 0x026B, 0x2C62 }, { 0x026F, 0x019C }, { 0x0271, 0x2C6E }, { 0x0272, 0x019D }, { 0x0275, 0x019F }, { 0x027D, 0x2C64 }, { 0x0280, 0x01A6 }, { 0x0283, 0x01A9 }, { 0x0288, 0x01AE }, { 0x0289, 0x0244 }, { 0x028A, 0x01B1 }, { 0x028B, 0x01B2 }, { 0x028C, 0x0245 }, { 0x0292, 0x01B7 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 0xA7A1, 0xA7A0 }, { 0xA7A3, 0xA7A2 }, { 0xA7A5, 0xA7A4 }, { 0xA7A7, 0xA7A6 }, { 0xA7A9, 0xA7A8 }, { 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 } #define MAP(c) uc_toupper (c) #include "test-mapping-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-ulc-casecmp.c���������������������������������������������0000664�0000000�0000000�00000037173�11671051007�0022613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case and normalization insensitive comparison of strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-ulc-casecmp1.sh�������������������������������������������0000775�0000000�0000000�00000000551�11671051007�0023055�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 \ ./test-ulc-casecmp${EXEEXT} 1 �������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-ulc-casecmp2.sh�������������������������������������������0000775�0000000�0000000�00000000574�11671051007�0023063�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 \ ./test-ulc-casecmp${EXEEXT} 2 ������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-ulc-casecoll.c��������������������������������������������0000664�0000000�0000000�00000002511�11671051007�0022751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, case and normalization insensitive comparison of strings. Copyright (C) 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 <http://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-20111211-stable/tests/unicase/test-ulc-casecoll1.sh������������������������������������������0000775�0000000�0000000�00000000550�11671051007�0023226�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 \ ./test-ulc-casecoll${EXEEXT} ��������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unicase/test-ulc-casecoll2.sh������������������������������������������0000775�0000000�0000000�00000000573�11671051007�0023234�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 \ ./test-ulc-casecoll${EXEEXT} �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uniconv/���������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017315�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uniconv/test-u16-conv-from-enc.c���������������������������������������0000664�0000000�0000000�00000020105�11671051007�0023516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-16 from legacy encodings. 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 <http://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" /* 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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; #if HAVE_ICONV /* 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) /* 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-20111211-stable/tests/uniconv/test-u16-conv-to-enc.c�����������������������������������������0000664�0000000�0000000�00000013731�11671051007�0023204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-16 to legacy encodings. 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 <http://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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; #if HAVE_ICONV /* 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); 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-20111211-stable/tests/uniconv/test-u16-strconv-from-enc.c������������������������������������0000664�0000000�0000000�00000010610�11671051007�0024247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-16 from legacy encodings. 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 <http://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" int main () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; #if HAVE_ICONV /* 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) /* 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-20111211-stable/tests/uniconv/test-u16-strconv-to-enc.c��������������������������������������0000664�0000000�0000000�00000007103�11671051007�0023731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-16 to legacy encodings. 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 <http://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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; #if HAVE_ICONV /* 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-20111211-stable/tests/uniconv/test-u32-conv-from-enc.c���������������������������������������0000664�0000000�0000000�00000020105�11671051007�0023514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-32 from legacy encodings. 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 <http://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" /* 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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; #if HAVE_ICONV /* 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) /* 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-20111211-stable/tests/uniconv/test-u32-conv-to-enc.c�����������������������������������������0000664�0000000�0000000�00000012140�11671051007�0023173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-32 to legacy encodings. 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 <http://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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; #if HAVE_ICONV /* 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); 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-20111211-stable/tests/uniconv/test-u32-strconv-from-enc.c������������������������������������0000664�0000000�0000000�00000010610�11671051007�0024245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-32 from legacy encodings. 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 <http://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" int main () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; #if HAVE_ICONV /* 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) /* 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-20111211-stable/tests/uniconv/test-u32-strconv-to-enc.c��������������������������������������0000664�0000000�0000000�00000006247�11671051007�0023737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-32 to legacy encodings. 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 <http://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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; #if HAVE_ICONV /* 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-20111211-stable/tests/uniconv/test-u8-conv-from-enc.c����������������������������������������0000664�0000000�0000000�00000017721�11671051007�0023451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-8 from legacy encodings. 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 <http://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" /* 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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; #if HAVE_ICONV /* 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) /* 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-20111211-stable/tests/uniconv/test-u8-conv-to-enc.c������������������������������������������0000664�0000000�0000000�00000014604�11671051007�0023125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-8 to legacy encodings. 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 <http://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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; size_t o; size_t i; #if HAVE_ICONV /* 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); 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-20111211-stable/tests/uniconv/test-u8-strconv-from-enc.c�������������������������������������0000664�0000000�0000000�00000010025�11671051007�0024170�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion to UTF-8 from legacy encodings. 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 <http://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" int main () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; #if HAVE_ICONV /* 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) /* 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-20111211-stable/tests/uniconv/test-u8-strconv-to-enc.c���������������������������������������0000664�0000000�0000000�00000006362�11671051007�0023660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion from UTF-8 to legacy encodings. 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 <http://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 () { static enum iconv_ilseq_handler handlers[] = { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; size_t h; #if HAVE_ICONV /* 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-20111211-stable/tests/unictype/��������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017474�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-bidi_byname.c��������������������������������������������0000664�0000000�0000000�00000016046�11671051007�0023066�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 <http://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-20111211-stable/tests/unictype/test-bidi_longname.c������������������������������������������0000664�0000000�0000000�00000004715�11671051007�0023413�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 <http://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-20111211-stable/tests/unictype/test-bidi_name.c����������������������������������������������0000664�0000000�0000000�00000001727�11671051007�0022533�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 <http://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-20111211-stable/tests/unictype/test-bidi_of.c������������������������������������������������0000664�0000000�0000000�00000001764�11671051007�0022220�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 <http://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-20111211-stable/tests/unictype/test-bidi_test.c����������������������������������������������0000664�0000000�0000000�00000002624�11671051007�0022567�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 <http://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-20111211-stable/tests/unictype/test-block_list.c���������������������������������������������0000664�0000000�0000000�00000002513�11671051007�0022743�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 <http://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-20111211-stable/tests/unictype/test-block_of.c�����������������������������������������������0000664�0000000�0000000�00000003265�11671051007�0022401�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 <http://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-20111211-stable/tests/unictype/test-block_test.c���������������������������������������������0000664�0000000�0000000�00000002247�11671051007�0022753�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 <http://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-20111211-stable/tests/unictype/test-categ_C.c������������������������������������������������0000664�0000000�0000000�00000031744�11671051007�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0000, 0x001F }, { 0x007F, 0x009F }, { 0x00AD, 0x00AD }, { 0x0378, 0x0379 }, { 0x037F, 0x0383 }, { 0x038B, 0x038B }, { 0x038D, 0x038D }, { 0x03A2, 0x03A2 }, { 0x0528, 0x0530 }, { 0x0557, 0x0558 }, { 0x0560, 0x0560 }, { 0x0588, 0x0588 }, { 0x058B, 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, 0x08FF }, { 0x0978, 0x0978 }, { 0x0980, 0x0980 }, { 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 }, { 0x0AF0, 0x0AF0 }, { 0x0AF2, 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, 0x0C00 }, { 0x0C04, 0x0C04 }, { 0x0C0D, 0x0C0D }, { 0x0C11, 0x0C11 }, { 0x0C29, 0x0C29 }, { 0x0C34, 0x0C34 }, { 0x0C3A, 0x0C3C }, { 0x0C45, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C57 }, { 0x0C5A, 0x0C5F }, { 0x0C64, 0x0C65 }, { 0x0C70, 0x0C77 }, { 0x0C80, 0x0C81 }, { 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, 0x0D01 }, { 0x0D04, 0x0D04 }, { 0x0D0D, 0x0D0D }, { 0x0D11, 0x0D11 }, { 0x0D3B, 0x0D3C }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 }, { 0x0D4F, 0x0D56 }, { 0x0D58, 0x0D5F }, { 0x0D64, 0x0D65 }, { 0x0D76, 0x0D78 }, { 0x0D80, 0x0D81 }, { 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 }, { 0x0DBC, 0x0DBC }, { 0x0DBE, 0x0DBF }, { 0x0DC7, 0x0DC9 }, { 0x0DCB, 0x0DCE }, { 0x0DD5, 0x0DD5 }, { 0x0DD7, 0x0DD7 }, { 0x0DE0, 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 }, { 0x0EDE, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 }, { 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD }, { 0x0FDB, 0x0FFF }, { 0x10C6, 0x10CF }, { 0x10FD, 0x10FF }, { 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 }, { 0x13F5, 0x13FF }, { 0x169D, 0x169F }, { 0x16F1, 0x16FF }, { 0x170D, 0x170D }, { 0x1715, 0x171F }, { 0x1737, 0x173F }, { 0x1754, 0x175F }, { 0x176D, 0x176D }, { 0x1771, 0x1771 }, { 0x1774, 0x177F }, { 0x17B4, 0x17B5 }, { 0x17DE, 0x17DF }, { 0x17EA, 0x17EF }, { 0x17FA, 0x17FF }, { 0x180F, 0x180F }, { 0x181A, 0x181F }, { 0x1878, 0x187F }, { 0x18AB, 0x18AF }, { 0x18F6, 0x18FF }, { 0x191D, 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, 0x1AFF }, { 0x1B4C, 0x1B4F }, { 0x1B7D, 0x1B7F }, { 0x1BAB, 0x1BAD }, { 0x1BBA, 0x1BBF }, { 0x1BF4, 0x1BFB }, { 0x1C38, 0x1C3A }, { 0x1C4A, 0x1C4C }, { 0x1C80, 0x1CCF }, { 0x1CF3, 0x1CFF }, { 0x1DE7, 0x1DFB }, { 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 }, { 0x20BA, 0x20CF }, { 0x20F1, 0x20FF }, { 0x218A, 0x218F }, { 0x23F4, 0x23FF }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, { 0x2700, 0x2700 }, { 0x27CB, 0x27CB }, { 0x27CD, 0x27CD }, { 0x2B4D, 0x2B4F }, { 0x2B5A, 0x2BFF }, { 0x2C2F, 0x2C2F }, { 0x2C5F, 0x2C5F }, { 0x2CF2, 0x2CF8 }, { 0x2D26, 0x2D2F }, { 0x2D66, 0x2D6E }, { 0x2D71, 0x2D7E }, { 0x2D97, 0x2D9F }, { 0x2DA7, 0x2DA7 }, { 0x2DAF, 0x2DAF }, { 0x2DB7, 0x2DB7 }, { 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF }, { 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E32, 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 }, { 0x9FCC, 0x9FFF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA62C, 0xA63F }, { 0xA674, 0xA67B }, { 0xA698, 0xA69F }, { 0xA6F8, 0xA6FF }, { 0xA78F, 0xA78F }, { 0xA792, 0xA79F }, { 0xA7AA, 0xA7F9 }, { 0xA82C, 0xA82F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA8C5, 0xA8CD }, { 0xA8DA, 0xA8DF }, { 0xA8FC, 0xA8FF }, { 0xA954, 0xA95E }, { 0xA97D, 0xA97F }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9E0, 0xA9FF }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA5A, 0xAA5B }, { 0xAA7C, 0xAA7F }, { 0xAAC3, 0xAADA }, { 0xAAE0, 0xAB00 }, { 0xAB07, 0xAB08 }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB27, 0xAB27 }, { 0xAB2F, 0xABBF }, { 0xABEE, 0xABEF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xD7C7, 0xD7CA }, { 0xD7FC, 0xF8FF }, { 0xFA2E, 0xFA2F }, { 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 }, { 0xFE27, 0xFE2F }, { 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 }, { 0x1018B, 0x1018F }, { 0x1019C, 0x101CF }, { 0x101FE, 0x1027F }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102FF }, { 0x1031F, 0x1031F }, { 0x10324, 0x1032F }, { 0x1034B, 0x1037F }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x103D6, 0x103FF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x107FF }, { 0x10806, 0x10807 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10839, 0x1083B }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x10860, 0x108FF }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x10940, 0x109FF }, { 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A18, 0x10A18 }, { 0x10A34, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A48, 0x10A4F }, { 0x10A59, 0x10A5F }, { 0x10A80, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10B56, 0x10B57 }, { 0x10B73, 0x10B77 }, { 0x10B80, 0x10BFF }, { 0x10C49, 0x10E5F }, { 0x10E7F, 0x10FFF }, { 0x1104E, 0x11051 }, { 0x11070, 0x1107F }, { 0x110BD, 0x110BD }, { 0x110C2, 0x11FFF }, { 0x1236F, 0x123FF }, { 0x12463, 0x1246F }, { 0x12474, 0x12FFF }, { 0x1342F, 0x167FF }, { 0x16A39, 0x1AFFF }, { 0x1B002, 0x1CFFF }, { 0x1D0F6, 0x1D0FF }, { 0x1D127, 0x1D128 }, { 0x1D173, 0x1D17A }, { 0x1D1DE, 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 }, { 0x1D800, 0x1EFFF }, { 0x1F02C, 0x1F02F }, { 0x1F094, 0x1F09F }, { 0x1F0AF, 0x1F0B0 }, { 0x1F0BF, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0E0, 0x1F0FF }, { 0x1F10B, 0x1F10F }, { 0x1F12F, 0x1F12F }, { 0x1F16A, 0x1F16F }, { 0x1F19B, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23B, 0x1F23F }, { 0x1F249, 0x1F24F }, { 0x1F252, 0x1F2FF }, { 0x1F321, 0x1F32F }, { 0x1F336, 0x1F336 }, { 0x1F37D, 0x1F37F }, { 0x1F394, 0x1F39F }, { 0x1F3C5, 0x1F3C5 }, { 0x1F3CB, 0x1F3DF }, { 0x1F3F1, 0x1F3FF }, { 0x1F43F, 0x1F43F }, { 0x1F441, 0x1F441 }, { 0x1F4F8, 0x1F4F8 }, { 0x1F4FD, 0x1F4FF }, { 0x1F53E, 0x1F54F }, { 0x1F568, 0x1F5FA }, { 0x1F600, 0x1F600 }, { 0x1F611, 0x1F611 }, { 0x1F615, 0x1F615 }, { 0x1F617, 0x1F617 }, { 0x1F619, 0x1F619 }, { 0x1F61B, 0x1F61B }, { 0x1F61F, 0x1F61F }, { 0x1F626, 0x1F627 }, { 0x1F62C, 0x1F62C }, { 0x1F62E, 0x1F62F }, { 0x1F634, 0x1F634 }, { 0x1F641, 0x1F644 }, { 0x1F650, 0x1F67F }, { 0x1F6C6, 0x1F6FF }, { 0x1F774, 0x1FFFF }, { 0x2A6D7, 0x2A6FF }, { 0x2B735, 0x2B73F }, { 0x2B81E, 0x2F7FF }, { 0x2FA1E, 0xE00FF }, { 0xE01F0, 0x10FFFF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_C) #include "test-predicate-part2.h" ����������������������������gnulib-20111211-stable/tests/unictype/test-categ_Cc.c�����������������������������������������������0000664�0000000�0000000�00000001714�11671051007�0022310�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 <http://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-20111211-stable/tests/unictype/test-categ_Cf.c�����������������������������������������������0000664�0000000�0000000�00000002414�11671051007�0022311�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x00AD, 0x00AD }, { 0x0600, 0x0603 }, { 0x06DD, 0x06DD }, { 0x070F, 0x070F }, { 0x17B4, 0x17B5 }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x206A, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x110BD, 0x110BD }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cf) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Cn.c�����������������������������������������������0000664�0000000�0000000�00000031642�11671051007�0022326�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0378, 0x0379 }, { 0x037F, 0x0383 }, { 0x038B, 0x038B }, { 0x038D, 0x038D }, { 0x03A2, 0x03A2 }, { 0x0528, 0x0530 }, { 0x0557, 0x0558 }, { 0x0560, 0x0560 }, { 0x0588, 0x0588 }, { 0x058B, 0x0590 }, { 0x05C8, 0x05CF }, { 0x05EB, 0x05EF }, { 0x05F5, 0x05FF }, { 0x0604, 0x0605 }, { 0x061C, 0x061D }, { 0x070E, 0x070E }, { 0x074B, 0x074C }, { 0x07B2, 0x07BF }, { 0x07FB, 0x07FF }, { 0x082E, 0x082F }, { 0x083F, 0x083F }, { 0x085C, 0x085D }, { 0x085F, 0x08FF }, { 0x0978, 0x0978 }, { 0x0980, 0x0980 }, { 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 }, { 0x0AF0, 0x0AF0 }, { 0x0AF2, 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, 0x0C00 }, { 0x0C04, 0x0C04 }, { 0x0C0D, 0x0C0D }, { 0x0C11, 0x0C11 }, { 0x0C29, 0x0C29 }, { 0x0C34, 0x0C34 }, { 0x0C3A, 0x0C3C }, { 0x0C45, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C57 }, { 0x0C5A, 0x0C5F }, { 0x0C64, 0x0C65 }, { 0x0C70, 0x0C77 }, { 0x0C80, 0x0C81 }, { 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, 0x0D01 }, { 0x0D04, 0x0D04 }, { 0x0D0D, 0x0D0D }, { 0x0D11, 0x0D11 }, { 0x0D3B, 0x0D3C }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 }, { 0x0D4F, 0x0D56 }, { 0x0D58, 0x0D5F }, { 0x0D64, 0x0D65 }, { 0x0D76, 0x0D78 }, { 0x0D80, 0x0D81 }, { 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 }, { 0x0DBC, 0x0DBC }, { 0x0DBE, 0x0DBF }, { 0x0DC7, 0x0DC9 }, { 0x0DCB, 0x0DCE }, { 0x0DD5, 0x0DD5 }, { 0x0DD7, 0x0DD7 }, { 0x0DE0, 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 }, { 0x0EDE, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 }, { 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD }, { 0x0FDB, 0x0FFF }, { 0x10C6, 0x10CF }, { 0x10FD, 0x10FF }, { 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 }, { 0x13F5, 0x13FF }, { 0x169D, 0x169F }, { 0x16F1, 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 }, { 0x191D, 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, 0x1AFF }, { 0x1B4C, 0x1B4F }, { 0x1B7D, 0x1B7F }, { 0x1BAB, 0x1BAD }, { 0x1BBA, 0x1BBF }, { 0x1BF4, 0x1BFB }, { 0x1C38, 0x1C3A }, { 0x1C4A, 0x1C4C }, { 0x1C80, 0x1CCF }, { 0x1CF3, 0x1CFF }, { 0x1DE7, 0x1DFB }, { 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, 0x2069 }, { 0x2072, 0x2073 }, { 0x208F, 0x208F }, { 0x209D, 0x209F }, { 0x20BA, 0x20CF }, { 0x20F1, 0x20FF }, { 0x218A, 0x218F }, { 0x23F4, 0x23FF }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, { 0x2700, 0x2700 }, { 0x27CB, 0x27CB }, { 0x27CD, 0x27CD }, { 0x2B4D, 0x2B4F }, { 0x2B5A, 0x2BFF }, { 0x2C2F, 0x2C2F }, { 0x2C5F, 0x2C5F }, { 0x2CF2, 0x2CF8 }, { 0x2D26, 0x2D2F }, { 0x2D66, 0x2D6E }, { 0x2D71, 0x2D7E }, { 0x2D97, 0x2D9F }, { 0x2DA7, 0x2DA7 }, { 0x2DAF, 0x2DAF }, { 0x2DB7, 0x2DB7 }, { 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF }, { 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E32, 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 }, { 0x9FCC, 0x9FFF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA62C, 0xA63F }, { 0xA674, 0xA67B }, { 0xA698, 0xA69F }, { 0xA6F8, 0xA6FF }, { 0xA78F, 0xA78F }, { 0xA792, 0xA79F }, { 0xA7AA, 0xA7F9 }, { 0xA82C, 0xA82F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA8C5, 0xA8CD }, { 0xA8DA, 0xA8DF }, { 0xA8FC, 0xA8FF }, { 0xA954, 0xA95E }, { 0xA97D, 0xA97F }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9E0, 0xA9FF }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA5A, 0xAA5B }, { 0xAA7C, 0xAA7F }, { 0xAAC3, 0xAADA }, { 0xAAE0, 0xAB00 }, { 0xAB07, 0xAB08 }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB27, 0xAB27 }, { 0xAB2F, 0xABBF }, { 0xABEE, 0xABEF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xD7C7, 0xD7CA }, { 0xD7FC, 0xD7FF }, { 0xFA2E, 0xFA2F }, { 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 }, { 0xFE27, 0xFE2F }, { 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 }, { 0x1018B, 0x1018F }, { 0x1019C, 0x101CF }, { 0x101FE, 0x1027F }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102FF }, { 0x1031F, 0x1031F }, { 0x10324, 0x1032F }, { 0x1034B, 0x1037F }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x103D6, 0x103FF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x107FF }, { 0x10806, 0x10807 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10839, 0x1083B }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x10860, 0x108FF }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x10940, 0x109FF }, { 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A18, 0x10A18 }, { 0x10A34, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A48, 0x10A4F }, { 0x10A59, 0x10A5F }, { 0x10A80, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10B56, 0x10B57 }, { 0x10B73, 0x10B77 }, { 0x10B80, 0x10BFF }, { 0x10C49, 0x10E5F }, { 0x10E7F, 0x10FFF }, { 0x1104E, 0x11051 }, { 0x11070, 0x1107F }, { 0x110C2, 0x11FFF }, { 0x1236F, 0x123FF }, { 0x12463, 0x1246F }, { 0x12474, 0x12FFF }, { 0x1342F, 0x167FF }, { 0x16A39, 0x1AFFF }, { 0x1B002, 0x1CFFF }, { 0x1D0F6, 0x1D0FF }, { 0x1D127, 0x1D128 }, { 0x1D1DE, 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 }, { 0x1D800, 0x1EFFF }, { 0x1F02C, 0x1F02F }, { 0x1F094, 0x1F09F }, { 0x1F0AF, 0x1F0B0 }, { 0x1F0BF, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0E0, 0x1F0FF }, { 0x1F10B, 0x1F10F }, { 0x1F12F, 0x1F12F }, { 0x1F16A, 0x1F16F }, { 0x1F19B, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23B, 0x1F23F }, { 0x1F249, 0x1F24F }, { 0x1F252, 0x1F2FF }, { 0x1F321, 0x1F32F }, { 0x1F336, 0x1F336 }, { 0x1F37D, 0x1F37F }, { 0x1F394, 0x1F39F }, { 0x1F3C5, 0x1F3C5 }, { 0x1F3CB, 0x1F3DF }, { 0x1F3F1, 0x1F3FF }, { 0x1F43F, 0x1F43F }, { 0x1F441, 0x1F441 }, { 0x1F4F8, 0x1F4F8 }, { 0x1F4FD, 0x1F4FF }, { 0x1F53E, 0x1F54F }, { 0x1F568, 0x1F5FA }, { 0x1F600, 0x1F600 }, { 0x1F611, 0x1F611 }, { 0x1F615, 0x1F615 }, { 0x1F617, 0x1F617 }, { 0x1F619, 0x1F619 }, { 0x1F61B, 0x1F61B }, { 0x1F61F, 0x1F61F }, { 0x1F626, 0x1F627 }, { 0x1F62C, 0x1F62C }, { 0x1F62E, 0x1F62F }, { 0x1F634, 0x1F634 }, { 0x1F641, 0x1F644 }, { 0x1F650, 0x1F67F }, { 0x1F6C6, 0x1F6FF }, { 0x1F774, 0x1FFFF }, { 0x2A6D7, 0x2A6FF }, { 0x2B735, 0x2B73F }, { 0x2B81E, 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-20111211-stable/tests/unictype/test-categ_Co.c�����������������������������������������������0000664�0000000�0000000�00000001752�11671051007�0022326�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 <http://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-20111211-stable/tests/unictype/test-categ_Cs.c�����������������������������������������������0000664�0000000�0000000�00000001664�11671051007�0022334�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 <http://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-20111211-stable/tests/unictype/test-categ_L.c������������������������������������������������0000664�0000000�0000000�00000026365�11671051007�0022167�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 <http://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 }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 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 }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0971, 0x0977 }, { 0x0979, 0x097F }, { 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 }, { 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, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C61 }, { 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 }, { 0x0D60, 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FA }, { 0x10FC, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 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, 0x191C }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19C1, 0x19C7 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BAF }, { 0x1BC0, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C7D }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 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 }, { 0x2D00, 0x2D25 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA697 }, { 0xA6A0, 0xA6E5 }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA90A, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9CF }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA80, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABE2 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0x1031E }, { 0x10330, 0x10340 }, { 0x10342, 0x10349 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x10400, 0x1049D }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11003, 0x11037 }, { 0x11083, 0x110AF }, { 0x12000, 0x1236E }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 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 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_L) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_LC.c�����������������������������������������������0000664�0000000�0000000�00000007052�11671051007�0022262�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 <http://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, 0x02AF }, { 0x0370, 0x0373 }, { 0x0376, 0x0377 }, { 0x037B, 0x037D }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 0x0531, 0x0556 }, { 0x0561, 0x0587 }, { 0x10A0, 0x10C5 }, { 0x1D00, 0x1D2B }, { 0x1D62, 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, 0x2C7C }, { 0x2C7E, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2D00, 0x2D25 }, { 0xA640, 0xA66D }, { 0xA680, 0xA697 }, { 0xA722, 0xA76F }, { 0xA771, 0xA787 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA7FA }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0x10400, 0x1044F }, { 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 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_LC) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Ll.c�����������������������������������������������0000664�0000000�0000000�00000036356�11671051007�0022344�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 <http://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, 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 }, { 0x0561, 0x0587 }, { 0x1D00, 0x1D2B }, { 0x1D62, 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, 0x2C7C }, { 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 }, { 0x2D00, 0x2D25 }, { 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 }, { 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 }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xA7FA, 0xA7FA }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F }, { 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 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Ll) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Lm.c�����������������������������������������������0000664�0000000�0000000�00000004064�11671051007�0022334�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 <http://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, 0x1D61 }, { 0x1D78, 0x1D78 }, { 0x1D9B, 0x1DBF }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2C7D, 0x2C7D }, { 0x2D6F, 0x2D6F }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3005 }, { 0x3031, 0x3035 }, { 0x303B, 0x303B }, { 0x309D, 0x309E }, { 0x30FC, 0x30FE }, { 0xA015, 0xA015 }, { 0xA4F8, 0xA4FD }, { 0xA60C, 0xA60C }, { 0xA67F, 0xA67F }, { 0xA717, 0xA71F }, { 0xA770, 0xA770 }, { 0xA788, 0xA788 }, { 0xA9CF, 0xA9CF }, { 0xAA70, 0xAA70 }, { 0xAADD, 0xAADD }, { 0xFF70, 0xFF70 }, { 0xFF9E, 0xFF9F } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lm) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Lo.c�����������������������������������������������0000664�0000000�0000000�00000021072�11671051007�0022334�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 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 }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0972, 0x0977 }, { 0x0979, 0x097F }, { 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 }, { 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, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C61 }, { 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 }, { 0x0D60, 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, 0x0EDD }, { 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 }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x1700, 0x170C }, { 0x170E, 0x1711 }, { 0x1720, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17DC, 0x17DC }, { 0x1820, 0x1842 }, { 0x1844, 0x1877 }, { 0x1880, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191C }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19C1, 0x19C7 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BAF }, { 0x1BC0, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C77 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 0x2135, 0x2138 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA014 }, { 0xA016, 0xA48C }, { 0xA4D0, 0xA4F7 }, { 0xA500, 0xA60B }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA66E, 0xA66E }, { 0xA6A0, 0xA6E5 }, { 0xA7FB, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA90A, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA60, 0xAA6F }, { 0xAA71, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA80, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADC }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABE2 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0x1031E }, { 0x10330, 0x10340 }, { 0x10342, 0x10349 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x10450, 0x1049D }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11003, 0x11037 }, { 0x11083, 0x110AF }, { 0x12000, 0x1236E }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lo) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Lt.c�����������������������������������������������0000664�0000000�0000000�00000002214�11671051007�0022336�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 <http://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-20111211-stable/tests/unictype/test-categ_Lu.c�����������������������������������������������0000664�0000000�0000000�00000036144�11671051007�0022350�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 <http://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 }, { 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 }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 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 }, { 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 }, { 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 }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 }, { 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 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lu) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_M.c������������������������������������������������0000664�0000000�0000000�00000012725�11671051007�0022163�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 <http://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 }, { 0x0900, 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 }, { 0x0C01, 0x0C03 }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C82, 0x0C83 }, { 0x0CBC, 0x0CBC }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D02, 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 }, { 0x17B6, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x19B0, 0x19C0 }, { 0x19C8, 0x19C9 }, { 0x1A17, 0x1A1B }, { 0x1A55, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1B00, 0x1B04 }, { 0x1B34, 0x1B44 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BAA }, { 0x1BE6, 0x1BF3 }, { 0x1C24, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF2, 0x1CF2 }, { 0x1DC0, 0x1DE6 }, { 0x1DFC, 0x1DFF }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA67C, 0xA67D }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA823, 0xA827 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA953 }, { 0xA980, 0xA983 }, { 0xA9B3, 0xA9C0 }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAA7B, 0xAA7B }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xABE3, 0xABEA }, { 0xABEC, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE26 }, { 0x101FD, 0x101FD }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x11000, 0x11002 }, { 0x11038, 0x11046 }, { 0x11080, 0x11082 }, { 0x110B0, 0x110BA }, { 0x1D165, 0x1D169 }, { 0x1D16D, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_M) #include "test-predicate-part2.h" �������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Mc.c�����������������������������������������������0000664�0000000�0000000�00000007102�11671051007�0022317�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 <http://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 }, { 0x19B0, 0x19C0 }, { 0x19C8, 0x19C9 }, { 0x1A19, 0x1A1B }, { 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, 0x1CF2 }, { 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 }, { 0xABE3, 0xABE4 }, { 0xABE6, 0xABE7 }, { 0xABE9, 0xABEA }, { 0xABEC, 0xABEC }, { 0x11000, 0x11000 }, { 0x11002, 0x11002 }, { 0x11082, 0x11082 }, { 0x110B0, 0x110B2 }, { 0x110B7, 0x110B8 }, { 0x1D165, 0x1D166 }, { 0x1D16D, 0x1D172 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Mc) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Me.c�����������������������������������������������0000664�0000000�0000000�00000001774�11671051007�0022332�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0488, 0x0489 }, { 0x20DD, 0x20E0 }, { 0x20E2, 0x20E4 }, { 0xA670, 0xA672 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Me) #include "test-predicate-part2.h" ����gnulib-20111211-stable/tests/unictype/test-categ_Mn.c�����������������������������������������������0000664�0000000�0000000�00000013306�11671051007�0022335�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 <http://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 }, { 0x0900, 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 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 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 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1DC0, 0x1DE6 }, { 0x1DFC, 0x1DFF }, { 0x20D0, 0x20DC }, { 0x20E1, 0x20E1 }, { 0x20E5, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA66F, 0xA66F }, { 0xA67C, 0xA67D }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE26 }, { 0x101FD, 0x101FD }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x11080, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x1D167, 0x1D169 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Mn) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_N.c������������������������������������������������0000664�0000000�0000000�00000005613�11671051007�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 <http://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 }, { 0x0D66, 0x0D75 }, { 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 }, { 0x3251, 0x325F }, { 0x3280, 0x3289 }, { 0x32B1, 0x32BF }, { 0xA620, 0xA629 }, { 0xA6E6, 0xA6EF }, { 0xA830, 0xA835 }, { 0xA8D0, 0xA8D9 }, { 0xA900, 0xA909 }, { 0xA9D0, 0xA9D9 }, { 0xAA50, 0xAA59 }, { 0xABF0, 0xABF9 }, { 0xFF10, 0xFF19 }, { 0x10107, 0x10133 }, { 0x10140, 0x10178 }, { 0x1018A, 0x1018A }, { 0x10320, 0x10323 }, { 0x10341, 0x10341 }, { 0x1034A, 0x1034A }, { 0x103D1, 0x103D5 }, { 0x104A0, 0x104A9 }, { 0x10858, 0x1085F }, { 0x10916, 0x1091B }, { 0x10A40, 0x10A47 }, { 0x10A7D, 0x10A7E }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10E60, 0x10E7E }, { 0x11052, 0x1106F }, { 0x12400, 0x12462 }, { 0x1D360, 0x1D371 }, { 0x1D7CE, 0x1D7FF }, { 0x1F100, 0x1F10A } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_N) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Nd.c�����������������������������������������������0000664�0000000�0000000�00000003462�11671051007�0022326�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 <http://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 }, { 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 }, { 0xAA50, 0xAA59 }, { 0xABF0, 0xABF9 }, { 0xFF10, 0xFF19 }, { 0x104A0, 0x104A9 }, { 0x11066, 0x1106F }, { 0x1D7CE, 0x1D7FF } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Nd) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Nl.c�����������������������������������������������0000664�0000000�0000000�00000002306�11671051007�0022332�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 <http://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, 0x12462 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Nl) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_No.c�����������������������������������������������0000664�0000000�0000000�00000003620�11671051007�0022335�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x00B2, 0x00B3 }, { 0x00B9, 0x00B9 }, { 0x00BC, 0x00BE }, { 0x09F4, 0x09F9 }, { 0x0B72, 0x0B77 }, { 0x0BF0, 0x0BF2 }, { 0x0C78, 0x0C7E }, { 0x0D70, 0x0D75 }, { 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 }, { 0x3251, 0x325F }, { 0x3280, 0x3289 }, { 0x32B1, 0x32BF }, { 0xA830, 0xA835 }, { 0x10107, 0x10133 }, { 0x10175, 0x10178 }, { 0x1018A, 0x1018A }, { 0x10320, 0x10323 }, { 0x10858, 0x1085F }, { 0x10916, 0x1091B }, { 0x10A40, 0x10A47 }, { 0x10A7D, 0x10A7E }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10E60, 0x10E7E }, { 0x11052, 0x11065 }, { 0x1D360, 0x1D371 }, { 0x1F100, 0x1F10A } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_No) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_P.c������������������������������������������������0000664�0000000�0000000�00000010055�11671051007�0022160�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 <http://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 }, { 0x00AB, 0x00AB }, { 0x00B7, 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 }, { 0x0DF4, 0x0DF4 }, { 0x0E4F, 0x0E4F }, { 0x0E5A, 0x0E5B }, { 0x0F04, 0x0F12 }, { 0x0F3A, 0x0F3D }, { 0x0F85, 0x0F85 }, { 0x0FD0, 0x0FD4 }, { 0x0FD9, 0x0FDA }, { 0x104A, 0x104F }, { 0x10FB, 0x10FB }, { 0x1361, 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 }, { 0x1CD3, 0x1CD3 }, { 0x2010, 0x2027 }, { 0x2030, 0x2043 }, { 0x2045, 0x2051 }, { 0x2053, 0x205E }, { 0x207D, 0x207E }, { 0x208D, 0x208E }, { 0x2329, 0x232A }, { 0x2768, 0x2775 }, { 0x27C5, 0x27C6 }, { 0x27E6, 0x27EF }, { 0x2983, 0x2998 }, { 0x29D8, 0x29DB }, { 0x29FC, 0x29FD }, { 0x2CF9, 0x2CFC }, { 0x2CFE, 0x2CFF }, { 0x2D70, 0x2D70 }, { 0x2E00, 0x2E2E }, { 0x2E30, 0x2E31 }, { 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 }, { 0xA92E, 0xA92F }, { 0xA95F, 0xA95F }, { 0xA9C1, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xAA5C, 0xAA5F }, { 0xAADE, 0xAADF }, { 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, 0x10101 }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x10857, 0x10857 }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x10A50, 0x10A58 }, { 0x10A7F, 0x10A7F }, { 0x10B39, 0x10B3F }, { 0x11047, 0x1104D }, { 0x110BB, 0x110BC }, { 0x110BE, 0x110C1 }, { 0x12470, 0x12473 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_P) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Pc.c�����������������������������������������������0000664�0000000�0000000�00000002054�11671051007�0022323�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 <http://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-20111211-stable/tests/unictype/test-categ_Pd.c�����������������������������������������������0000664�0000000�0000000�00000002404�11671051007�0022323�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 <http://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 }, { 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-20111211-stable/tests/unictype/test-categ_Pe.c�����������������������������������������������0000664�0000000�0000000�00000005054�11671051007�0022330�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 <http://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 }, { 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 }, { 0xFD3F, 0xFD3F }, { 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-20111211-stable/tests/unictype/test-categ_Pf.c�����������������������������������������������0000664�0000000�0000000�00000002214�11671051007�0022324�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 <http://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-20111211-stable/tests/unictype/test-categ_Pi.c�����������������������������������������������0000664�0000000�0000000�00000002244�11671051007�0022332�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 <http://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-20111211-stable/tests/unictype/test-categ_Po.c�����������������������������������������������0000664�0000000�0000000�00000007666�11671051007�0022355�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 <http://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 }, { 0x00B7, 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 }, { 0x0DF4, 0x0DF4 }, { 0x0E4F, 0x0E4F }, { 0x0E5A, 0x0E5B }, { 0x0F04, 0x0F12 }, { 0x0F85, 0x0F85 }, { 0x0FD0, 0x0FD4 }, { 0x0FD9, 0x0FDA }, { 0x104A, 0x104F }, { 0x10FB, 0x10FB }, { 0x1361, 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 }, { 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, 0x2E31 }, { 0x3001, 0x3003 }, { 0x303D, 0x303D }, { 0x30FB, 0x30FB }, { 0xA4FE, 0xA4FF }, { 0xA60D, 0xA60F }, { 0xA673, 0xA673 }, { 0xA67E, 0xA67E }, { 0xA6F2, 0xA6F7 }, { 0xA874, 0xA877 }, { 0xA8CE, 0xA8CF }, { 0xA8F8, 0xA8FA }, { 0xA92E, 0xA92F }, { 0xA95F, 0xA95F }, { 0xA9C1, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xAA5C, 0xAA5F }, { 0xAADE, 0xAADF }, { 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, 0x10101 }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x10857, 0x10857 }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x10A50, 0x10A58 }, { 0x10A7F, 0x10A7F }, { 0x10B39, 0x10B3F }, { 0x11047, 0x1104D }, { 0x110BB, 0x110BC }, { 0x110BE, 0x110C1 }, { 0x12470, 0x12473 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Po) #include "test-predicate-part2.h" ��������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Ps.c�����������������������������������������������0000664�0000000�0000000�00000005134�11671051007�0022345�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 <http://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 }, { 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 }, { 0x3008, 0x3008 }, { 0x300A, 0x300A }, { 0x300C, 0x300C }, { 0x300E, 0x300E }, { 0x3010, 0x3010 }, { 0x3014, 0x3014 }, { 0x3016, 0x3016 }, { 0x3018, 0x3018 }, { 0x301A, 0x301A }, { 0x301D, 0x301D }, { 0xFD3E, 0xFD3E }, { 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-20111211-stable/tests/unictype/test-categ_S.c������������������������������������������������0000664�0000000�0000000�00000013637�11671051007�0022174�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0024, 0x0024 }, { 0x002B, 0x002B }, { 0x003C, 0x003E }, { 0x005E, 0x005E }, { 0x0060, 0x0060 }, { 0x007C, 0x007C }, { 0x007E, 0x007E }, { 0x00A2, 0x00A9 }, { 0x00AC, 0x00AC }, { 0x00AE, 0x00B1 }, { 0x00B4, 0x00B4 }, { 0x00B6, 0x00B6 }, { 0x00B8, 0x00B8 }, { 0x00D7, 0x00D7 }, { 0x00F7, 0x00F7 }, { 0x02C2, 0x02C5 }, { 0x02D2, 0x02DF }, { 0x02E5, 0x02EB }, { 0x02ED, 0x02ED }, { 0x02EF, 0x02FF }, { 0x0375, 0x0375 }, { 0x0384, 0x0385 }, { 0x03F6, 0x03F6 }, { 0x0482, 0x0482 }, { 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 }, { 0x0D79, 0x0D79 }, { 0x0E3F, 0x0E3F }, { 0x0F01, 0x0F03 }, { 0x0F13, 0x0F17 }, { 0x0F1A, 0x0F1F }, { 0x0F34, 0x0F34 }, { 0x0F36, 0x0F36 }, { 0x0F38, 0x0F38 }, { 0x0FBE, 0x0FC5 }, { 0x0FC7, 0x0FCC }, { 0x0FCE, 0x0FCF }, { 0x0FD5, 0x0FD8 }, { 0x109E, 0x109F }, { 0x1360, 0x1360 }, { 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, 0x20B9 }, { 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 }, { 0x2190, 0x2328 }, { 0x232B, 0x23F3 }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x249C, 0x24E9 }, { 0x2500, 0x26FF }, { 0x2701, 0x2767 }, { 0x2794, 0x27C4 }, { 0x27C7, 0x27CA }, { 0x27CC, 0x27CC }, { 0x27CE, 0x27E5 }, { 0x27F0, 0x2982 }, { 0x2999, 0x29D7 }, { 0x29DC, 0x29FB }, { 0x29FE, 0x2B4C }, { 0x2B50, 0x2B59 }, { 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, 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 }, { 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 }, { 0x10102, 0x10102 }, { 0x10137, 0x1013F }, { 0x10179, 0x10189 }, { 0x10190, 0x1019B }, { 0x101D0, 0x101FC }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D164 }, { 0x1D16A, 0x1D16C }, { 0x1D183, 0x1D184 }, { 0x1D18C, 0x1D1A9 }, { 0x1D1AE, 0x1D1DD }, { 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 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BE }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0DF }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F169 }, { 0x1F170, 0x1F19A }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23A }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F320 }, { 0x1F330, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F380, 0x1F393 }, { 0x1F3A0, 0x1F3C4 }, { 0x1F3C6, 0x1F3CA }, { 0x1F3E0, 0x1F3F0 }, { 0x1F400, 0x1F43E }, { 0x1F440, 0x1F440 }, { 0x1F442, 0x1F4F7 }, { 0x1F4F9, 0x1F4FC }, { 0x1F500, 0x1F53D }, { 0x1F550, 0x1F567 }, { 0x1F5FB, 0x1F5FF }, { 0x1F601, 0x1F610 }, { 0x1F612, 0x1F614 }, { 0x1F616, 0x1F616 }, { 0x1F618, 0x1F618 }, { 0x1F61A, 0x1F61A }, { 0x1F61C, 0x1F61E }, { 0x1F620, 0x1F625 }, { 0x1F628, 0x1F62B }, { 0x1F62D, 0x1F62D }, { 0x1F630, 0x1F633 }, { 0x1F635, 0x1F640 }, { 0x1F645, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F700, 0x1F773 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_S) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Sc.c�����������������������������������������������0000664�0000000�0000000�00000002434�11671051007�0022330�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0024, 0x0024 }, { 0x00A2, 0x00A5 }, { 0x060B, 0x060B }, { 0x09F2, 0x09F3 }, { 0x09FB, 0x09FB }, { 0x0AF1, 0x0AF1 }, { 0x0BF9, 0x0BF9 }, { 0x0E3F, 0x0E3F }, { 0x17DB, 0x17DB }, { 0x20A0, 0x20B9 }, { 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-20111211-stable/tests/unictype/test-categ_Sk.c�����������������������������������������������0000664�0000000�0000000�00000003044�11671051007�0022336�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 <http://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 }, { 0xFBB2, 0xFBC1 }, { 0xFF3E, 0xFF3E }, { 0xFF40, 0xFF40 }, { 0xFFE3, 0xFFE3 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Sk) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Sm.c�����������������������������������������������0000664�0000000�0000000�00000004740�11671051007�0022344�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 <http://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 }, { 0x2308, 0x230B }, { 0x2320, 0x2321 }, { 0x237C, 0x237C }, { 0x239B, 0x23B3 }, { 0x23DC, 0x23E1 }, { 0x25B7, 0x25B7 }, { 0x25C1, 0x25C1 }, { 0x25F8, 0x25FF }, { 0x266F, 0x266F }, { 0x27C0, 0x27C4 }, { 0x27C7, 0x27CA }, { 0x27CC, 0x27CC }, { 0x27CE, 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 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Sm) #include "test-predicate-part2.h" ��������������������������������gnulib-20111211-stable/tests/unictype/test-categ_So.c�����������������������������������������������0000664�0000000�0000000�00000011554�11671051007�0022347�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x00A6, 0x00A7 }, { 0x00A9, 0x00A9 }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B0 }, { 0x00B6, 0x00B6 }, { 0x0482, 0x0482 }, { 0x060E, 0x060F }, { 0x06DE, 0x06DE }, { 0x06E9, 0x06E9 }, { 0x06FD, 0x06FE }, { 0x07F6, 0x07F6 }, { 0x09FA, 0x09FA }, { 0x0B70, 0x0B70 }, { 0x0BF3, 0x0BF8 }, { 0x0BFA, 0x0BFA }, { 0x0C7F, 0x0C7F }, { 0x0D79, 0x0D79 }, { 0x0F01, 0x0F03 }, { 0x0F13, 0x0F17 }, { 0x0F1A, 0x0F1F }, { 0x0F34, 0x0F34 }, { 0x0F36, 0x0F36 }, { 0x0F38, 0x0F38 }, { 0x0FBE, 0x0FC5 }, { 0x0FC7, 0x0FCC }, { 0x0FCE, 0x0FCF }, { 0x0FD5, 0x0FD8 }, { 0x109E, 0x109F }, { 0x1360, 0x1360 }, { 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 }, { 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, 0x23F3 }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x249C, 0x24E9 }, { 0x2500, 0x25B6 }, { 0x25B8, 0x25C0 }, { 0x25C2, 0x25F7 }, { 0x2600, 0x266E }, { 0x2670, 0x26FF }, { 0x2701, 0x2767 }, { 0x2794, 0x27BF }, { 0x2800, 0x28FF }, { 0x2B00, 0x2B2F }, { 0x2B45, 0x2B46 }, { 0x2B50, 0x2B59 }, { 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, 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 }, { 0x10102, 0x10102 }, { 0x10137, 0x1013F }, { 0x10179, 0x10189 }, { 0x10190, 0x1019B }, { 0x101D0, 0x101FC }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D164 }, { 0x1D16A, 0x1D16C }, { 0x1D183, 0x1D184 }, { 0x1D18C, 0x1D1A9 }, { 0x1D1AE, 0x1D1DD }, { 0x1D200, 0x1D241 }, { 0x1D245, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BE }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0DF }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F169 }, { 0x1F170, 0x1F19A }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23A }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F320 }, { 0x1F330, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F380, 0x1F393 }, { 0x1F3A0, 0x1F3C4 }, { 0x1F3C6, 0x1F3CA }, { 0x1F3E0, 0x1F3F0 }, { 0x1F400, 0x1F43E }, { 0x1F440, 0x1F440 }, { 0x1F442, 0x1F4F7 }, { 0x1F4F9, 0x1F4FC }, { 0x1F500, 0x1F53D }, { 0x1F550, 0x1F567 }, { 0x1F5FB, 0x1F5FF }, { 0x1F601, 0x1F610 }, { 0x1F612, 0x1F614 }, { 0x1F616, 0x1F616 }, { 0x1F618, 0x1F618 }, { 0x1F61A, 0x1F61A }, { 0x1F61C, 0x1F61E }, { 0x1F620, 0x1F625 }, { 0x1F628, 0x1F62B }, { 0x1F62D, 0x1F62D }, { 0x1F630, 0x1F633 }, { 0x1F635, 0x1F640 }, { 0x1F645, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F700, 0x1F773 } #define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_So) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-categ_Z.c������������������������������������������������0000664�0000000�0000000�00000002163�11671051007�0022173�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0020, 0x0020 }, { 0x00A0, 0x00A0 }, { 0x1680, 0x1680 }, { 0x180E, 0x180E }, { 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-20111211-stable/tests/unictype/test-categ_Zl.c�����������������������������������������������0000664�0000000�0000000�00000001664�11671051007�0022354�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 <http://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-20111211-stable/tests/unictype/test-categ_Zp.c�����������������������������������������������0000664�0000000�0000000�00000001664�11671051007�0022360�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 <http://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-20111211-stable/tests/unictype/test-categ_Zs.c�����������������������������������������������0000664�0000000�0000000�00000002134�11671051007�0022354�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0020, 0x0020 }, { 0x00A0, 0x00A0 }, { 0x1680, 0x1680 }, { 0x180E, 0x180E }, { 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-20111211-stable/tests/unictype/test-categ_and.c����������������������������������������������0000664�0000000�0000000�00000002333�11671051007�0022523�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 <http://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-20111211-stable/tests/unictype/test-categ_and_not.c������������������������������������������0000664�0000000�0000000�00000002337�11671051007�0023407�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 <http://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-20111211-stable/tests/unictype/test-categ_byname.c�������������������������������������������0000664�0000000�0000000�00000040411�11671051007�0023233�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 <http://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-20111211-stable/tests/unictype/test-categ_longname.c�����������������������������������������0000664�0000000�0000000�00000002203�11671051007�0023555�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 <http://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-20111211-stable/tests/unictype/test-categ_name.c���������������������������������������������0000664�0000000�0000000�00000002133�11671051007�0022677�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 <http://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-20111211-stable/tests/unictype/test-categ_none.c���������������������������������������������0000664�0000000�0000000�00000001765�11671051007�0022730�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 <http://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-20111211-stable/tests/unictype/test-categ_of.c�����������������������������������������������0000664�0000000�0000000�00000003060�11671051007�0022363�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 <http://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-20111211-stable/tests/unictype/test-categ_or.c�����������������������������������������������0000664�0000000�0000000�00000002074�11671051007�0022403�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 <http://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-20111211-stable/tests/unictype/test-categ_test_withtable.c�����������������������������������0000664�0000000�0000000�00000002313�11671051007�0025001�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 <http://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-20111211-stable/tests/unictype/test-combiningclass.c�����������������������������������������0000664�0000000�0000000�00000002150�11671051007�0023606�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 <http://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-20111211-stable/tests/unictype/test-combiningclass_byname.c����������������������������������0000664�0000000�0000000�00000014611�11671051007�0025146�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 <http://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-20111211-stable/tests/unictype/test-combiningclass_longname.c��������������������������������0000664�0000000�0000000�00000005141�11671051007�0025471�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 <http://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-20111211-stable/tests/unictype/test-combiningclass_name.c������������������������������������0000664�0000000�0000000�00000004507�11671051007�0024616�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 <http://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-20111211-stable/tests/unictype/test-ctype_alnum.c��������������������������������������������0000664�0000000�0000000�00000030117�11671051007�0023137�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 <http://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 }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 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 }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0966, 0x096F }, { 0x0971, 0x0977 }, { 0x0979, 0x097F }, { 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 }, { 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, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C61 }, { 0x0C66, 0x0C6F }, { 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 }, { 0x0D60, 0x0D61 }, { 0x0D66, 0x0D6F }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FA }, { 0x10FC, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F0 }, { 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, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191C }, { 0x1946, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19C1, 0x19C7 }, { 0x19D0, 0x19D9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B50, 0x1B59 }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BB9 }, { 0x1BC0, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 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 }, { 0x2D00, 0x2D25 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA697 }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8D0, 0xA8D9 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA900, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9D9 }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA80, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABE2 }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0x1031E }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11003, 0x11037 }, { 0x11066, 0x1106F }, { 0x11083, 0x110AF }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 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 }, { 0x1F110, 0x1F12C }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F18A }, { 0x1F1E6, 0x1F1FF }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_alnum (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-ctype_alpha.c��������������������������������������������0000664�0000000�0000000�00000030067�11671051007�0023114�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 <http://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 }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 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 }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0966, 0x096F }, { 0x0971, 0x0977 }, { 0x0979, 0x097F }, { 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 }, { 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, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C61 }, { 0x0C66, 0x0C6F }, { 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 }, { 0x0D60, 0x0D61 }, { 0x0D66, 0x0D6F }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FA }, { 0x10FC, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F0 }, { 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, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191C }, { 0x1946, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19C1, 0x19C7 }, { 0x19D0, 0x19D9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B50, 0x1B59 }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BB9 }, { 0x1BC0, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 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 }, { 0x2D00, 0x2D25 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA697 }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8D0, 0xA8D9 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA900, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9D9 }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA80, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABE2 }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0x1031E }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11003, 0x11037 }, { 0x11066, 0x1106F }, { 0x11083, 0x110AF }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 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 }, { 0x1F110, 0x1F12C }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F18A }, { 0x1F1E6, 0x1F1FF }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_alpha (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-ctype_blank.c��������������������������������������������0000664�0000000�0000000�00000002101�11671051007�0023102�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0009, 0x0009 }, { 0x0020, 0x0020 }, { 0x1680, 0x1680 }, { 0x180E, 0x180E }, { 0x2000, 0x2006 }, { 0x2008, 0x200A }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_blank (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-ctype_cntrl.c��������������������������������������������0000664�0000000�0000000�00000001711�11671051007�0023143�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 <http://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-20111211-stable/tests/unictype/test-ctype_digit.c��������������������������������������������0000664�0000000�0000000�00000001631�11671051007�0023122�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0030, 0x0039 } #define PREDICATE(c) uc_is_digit (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-ctype_graph.c��������������������������������������������0000664�0000000�0000000�00000031777�11671051007�0023141�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0021, 0x007E }, { 0x00A0, 0x0377 }, { 0x037A, 0x037E }, { 0x0384, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x0527 }, { 0x0531, 0x0556 }, { 0x0559, 0x055F }, { 0x0561, 0x0587 }, { 0x0589, 0x058A }, { 0x0591, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F4 }, { 0x0600, 0x0603 }, { 0x0606, 0x061B }, { 0x061E, 0x070D }, { 0x070F, 0x074A }, { 0x074D, 0x07B1 }, { 0x07C0, 0x07FA }, { 0x0800, 0x082D }, { 0x0830, 0x083E }, { 0x0840, 0x085B }, { 0x085E, 0x085E }, { 0x0900, 0x0977 }, { 0x0979, 0x097F }, { 0x0981, 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, 0x0AEF }, { 0x0AF1, 0x0AF1 }, { 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 }, { 0x0C01, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C78, 0x0C7F }, { 0x0C82, 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 }, { 0x0D02, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4E }, { 0x0D57, 0x0D57 }, { 0x0D60, 0x0D63 }, { 0x0D66, 0x0D75 }, { 0x0D79, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 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, 0x0EDD }, { 0x0F00, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FBE, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x1000, 0x10C5 }, { 0x10D0, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1400, 0x167F }, { 0x1681, 0x169C }, { 0x16A0, 0x16F0 }, { 0x1700, 0x170C }, { 0x170E, 0x1714 }, { 0x1720, 0x1736 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x17F0, 0x17F9 }, { 0x1800, 0x180D }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191C }, { 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 }, { 0x1B00, 0x1B4B }, { 0x1B50, 0x1B7C }, { 0x1B80, 0x1BAA }, { 0x1BAE, 0x1BB9 }, { 0x1BC0, 0x1BF3 }, { 0x1BFC, 0x1C37 }, { 0x1C3B, 0x1C49 }, { 0x1C4D, 0x1C7F }, { 0x1CD0, 0x1CF2 }, { 0x1D00, 0x1DE6 }, { 0x1DFC, 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 }, { 0x206A, 0x2071 }, { 0x2074, 0x208E }, { 0x2090, 0x209C }, { 0x20A0, 0x20B9 }, { 0x20D0, 0x20F0 }, { 0x2100, 0x2189 }, { 0x2190, 0x23F3 }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x26FF }, { 0x2701, 0x27CA }, { 0x27CC, 0x27CC }, { 0x27CE, 0x2B4C }, { 0x2B50, 0x2B59 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CF1 }, { 0x2CF9, 0x2D25 }, { 0x2D30, 0x2D65 }, { 0x2D6F, 0x2D70 }, { 0x2D7F, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2E31 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, { 0xA640, 0xA673 }, { 0xA67C, 0xA697 }, { 0xA6A0, 0xA6F7 }, { 0xA700, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA82B }, { 0xA830, 0xA839 }, { 0xA840, 0xA877 }, { 0xA880, 0xA8C4 }, { 0xA8CE, 0xA8D9 }, { 0xA8E0, 0xA8FB }, { 0xA900, 0xA953 }, { 0xA95F, 0xA97C }, { 0xA980, 0xA9CD }, { 0xA9CF, 0xA9D9 }, { 0xA9DE, 0xA9DF }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA5C, 0xAA7B }, { 0xAA80, 0xAAC2 }, { 0xAADB, 0xAADF }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xE000, 0xFA2D }, { 0xFA30, 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, 0xFE26 }, { 0xFE30, 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, 0x1018A }, { 0x10190, 0x1019B }, { 0x101D0, 0x101FD }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031E }, { 0x10320, 0x10323 }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x1039F, 0x103C3 }, { 0x103C8, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10857, 0x1085F }, { 0x10900, 0x1091B }, { 0x1091F, 0x10939 }, { 0x1093F, 0x1093F }, { 0x10A00, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A47 }, { 0x10A50, 0x10A58 }, { 0x10A60, 0x10A7F }, { 0x10B00, 0x10B35 }, { 0x10B39, 0x10B55 }, { 0x10B58, 0x10B72 }, { 0x10B78, 0x10B7F }, { 0x10C00, 0x10C48 }, { 0x10E60, 0x10E7E }, { 0x11000, 0x1104D }, { 0x11052, 0x1106F }, { 0x11080, 0x110C1 }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x12470, 0x12473 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1DD }, { 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, 0x1D7FF }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BE }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0DF }, { 0x1F100, 0x1F10A }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F169 }, { 0x1F170, 0x1F19A }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23A }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F320 }, { 0x1F330, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F380, 0x1F393 }, { 0x1F3A0, 0x1F3C4 }, { 0x1F3C6, 0x1F3CA }, { 0x1F3E0, 0x1F3F0 }, { 0x1F400, 0x1F43E }, { 0x1F440, 0x1F440 }, { 0x1F442, 0x1F4F7 }, { 0x1F4F9, 0x1F4FC }, { 0x1F500, 0x1F53D }, { 0x1F550, 0x1F567 }, { 0x1F5FB, 0x1F5FF }, { 0x1F601, 0x1F610 }, { 0x1F612, 0x1F614 }, { 0x1F616, 0x1F616 }, { 0x1F618, 0x1F618 }, { 0x1F61A, 0x1F61A }, { 0x1F61C, 0x1F61E }, { 0x1F620, 0x1F625 }, { 0x1F628, 0x1F62B }, { 0x1F62D, 0x1F62D }, { 0x1F630, 0x1F633 }, { 0x1F635, 0x1F640 }, { 0x1F645, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F700, 0x1F773 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 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-20111211-stable/tests/unictype/test-ctype_lower.c��������������������������������������������0000664�0000000�0000000�00000035023�11671051007�0023154�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 <http://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, 0x025B }, { 0x0260, 0x0260 }, { 0x0263, 0x0263 }, { 0x0265, 0x0265 }, { 0x0268, 0x0269 }, { 0x026B, 0x026B }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0283, 0x0283 }, { 0x0288, 0x028C }, { 0x0292, 0x0292 }, { 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, 0x03F2 }, { 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 }, { 0x0561, 0x0586 }, { 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 }, { 0x2D00, 0x2D25 }, { 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 }, { 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 }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F } #define PREDICATE(c) uc_is_lower (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-ctype_print.c��������������������������������������������0000664�0000000�0000000�00000031667�11671051007�0023172�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0020, 0x007E }, { 0x00A0, 0x0377 }, { 0x037A, 0x037E }, { 0x0384, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x0527 }, { 0x0531, 0x0556 }, { 0x0559, 0x055F }, { 0x0561, 0x0587 }, { 0x0589, 0x058A }, { 0x0591, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05F0, 0x05F4 }, { 0x0600, 0x0603 }, { 0x0606, 0x061B }, { 0x061E, 0x070D }, { 0x070F, 0x074A }, { 0x074D, 0x07B1 }, { 0x07C0, 0x07FA }, { 0x0800, 0x082D }, { 0x0830, 0x083E }, { 0x0840, 0x085B }, { 0x085E, 0x085E }, { 0x0900, 0x0977 }, { 0x0979, 0x097F }, { 0x0981, 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, 0x0AEF }, { 0x0AF1, 0x0AF1 }, { 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 }, { 0x0C01, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C78, 0x0C7F }, { 0x0C82, 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 }, { 0x0D02, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4E }, { 0x0D57, 0x0D57 }, { 0x0D60, 0x0D63 }, { 0x0D66, 0x0D75 }, { 0x0D79, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 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, 0x0EDD }, { 0x0F00, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FBE, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x1000, 0x10C5 }, { 0x10D0, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1400, 0x169C }, { 0x16A0, 0x16F0 }, { 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, 0x191C }, { 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 }, { 0x1B00, 0x1B4B }, { 0x1B50, 0x1B7C }, { 0x1B80, 0x1BAA }, { 0x1BAE, 0x1BB9 }, { 0x1BC0, 0x1BF3 }, { 0x1BFC, 0x1C37 }, { 0x1C3B, 0x1C49 }, { 0x1C4D, 0x1C7F }, { 0x1CD0, 0x1CF2 }, { 0x1D00, 0x1DE6 }, { 0x1DFC, 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 }, { 0x206A, 0x2071 }, { 0x2074, 0x208E }, { 0x2090, 0x209C }, { 0x20A0, 0x20B9 }, { 0x20D0, 0x20F0 }, { 0x2100, 0x2189 }, { 0x2190, 0x23F3 }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x26FF }, { 0x2701, 0x27CA }, { 0x27CC, 0x27CC }, { 0x27CE, 0x2B4C }, { 0x2B50, 0x2B59 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CF1 }, { 0x2CF9, 0x2D25 }, { 0x2D30, 0x2D65 }, { 0x2D6F, 0x2D70 }, { 0x2D7F, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2E31 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, { 0xA640, 0xA673 }, { 0xA67C, 0xA697 }, { 0xA6A0, 0xA6F7 }, { 0xA700, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA82B }, { 0xA830, 0xA839 }, { 0xA840, 0xA877 }, { 0xA880, 0xA8C4 }, { 0xA8CE, 0xA8D9 }, { 0xA8E0, 0xA8FB }, { 0xA900, 0xA953 }, { 0xA95F, 0xA97C }, { 0xA980, 0xA9CD }, { 0xA9CF, 0xA9D9 }, { 0xA9DE, 0xA9DF }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA5C, 0xAA7B }, { 0xAA80, 0xAAC2 }, { 0xAADB, 0xAADF }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xE000, 0xFA2D }, { 0xFA30, 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, 0xFE26 }, { 0xFE30, 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, 0x1018A }, { 0x10190, 0x1019B }, { 0x101D0, 0x101FD }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031E }, { 0x10320, 0x10323 }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x1039F, 0x103C3 }, { 0x103C8, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10857, 0x1085F }, { 0x10900, 0x1091B }, { 0x1091F, 0x10939 }, { 0x1093F, 0x1093F }, { 0x10A00, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A47 }, { 0x10A50, 0x10A58 }, { 0x10A60, 0x10A7F }, { 0x10B00, 0x10B35 }, { 0x10B39, 0x10B55 }, { 0x10B58, 0x10B72 }, { 0x10B78, 0x10B7F }, { 0x10C00, 0x10C48 }, { 0x10E60, 0x10E7E }, { 0x11000, 0x1104D }, { 0x11052, 0x1106F }, { 0x11080, 0x110C1 }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x12470, 0x12473 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1DD }, { 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, 0x1D7FF }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BE }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0DF }, { 0x1F100, 0x1F10A }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F169 }, { 0x1F170, 0x1F19A }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23A }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F320 }, { 0x1F330, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F380, 0x1F393 }, { 0x1F3A0, 0x1F3C4 }, { 0x1F3C6, 0x1F3CA }, { 0x1F3E0, 0x1F3F0 }, { 0x1F400, 0x1F43E }, { 0x1F440, 0x1F440 }, { 0x1F442, 0x1F4F7 }, { 0x1F4F9, 0x1F4FC }, { 0x1F500, 0x1F53D }, { 0x1F550, 0x1F567 }, { 0x1F5FB, 0x1F5FF }, { 0x1F601, 0x1F610 }, { 0x1F612, 0x1F614 }, { 0x1F616, 0x1F616 }, { 0x1F618, 0x1F618 }, { 0x1F61A, 0x1F61A }, { 0x1F61C, 0x1F61E }, { 0x1F620, 0x1F625 }, { 0x1F628, 0x1F62B }, { 0x1F62D, 0x1F62D }, { 0x1F630, 0x1F633 }, { 0x1F635, 0x1F640 }, { 0x1F645, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F700, 0x1F773 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 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-20111211-stable/tests/unictype/test-ctype_punct.c��������������������������������������������0000664�0000000�0000000�00000025225�11671051007�0023160�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 <http://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 }, { 0x0591, 0x05C7 }, { 0x05F3, 0x05F4 }, { 0x0600, 0x0603 }, { 0x0606, 0x061B }, { 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 }, { 0x0900, 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 }, { 0x0AF1, 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 }, { 0x0C01, 0x0C03 }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C78, 0x0C7F }, { 0x0C82, 0x0C83 }, { 0x0CBC, 0x0CBC }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D02, 0x0D03 }, { 0x0D3E, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4D }, { 0x0D57, 0x0D57 }, { 0x0D62, 0x0D63 }, { 0x0D70, 0x0D75 }, { 0x0D79, 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, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1940, 0x1940 }, { 0x1944, 0x1945 }, { 0x19B0, 0x19C0 }, { 0x19C8, 0x19C9 }, { 0x19DA, 0x19DA }, { 0x19DE, 0x19FF }, { 0x1A17, 0x1A1B }, { 0x1A1E, 0x1A1F }, { 0x1A55, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AA0, 0x1AA6 }, { 0x1AA8, 0x1AAD }, { 0x1B00, 0x1B04 }, { 0x1B34, 0x1B44 }, { 0x1B5A, 0x1B7C }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BAA }, { 0x1BE6, 0x1BF3 }, { 0x1BFC, 0x1BFF }, { 0x1C24, 0x1C37 }, { 0x1C3B, 0x1C3F }, { 0x1C7E, 0x1C7F }, { 0x1CD0, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF2, 0x1CF2 }, { 0x1DC0, 0x1DE6 }, { 0x1DFC, 0x1DFF }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x2007, 0x2007 }, { 0x200B, 0x2027 }, { 0x202A, 0x205E }, { 0x2060, 0x2064 }, { 0x206A, 0x2070 }, { 0x2074, 0x207E }, { 0x2080, 0x208E }, { 0x20A0, 0x20B9 }, { 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, 0x2189 }, { 0x2190, 0x23F3 }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x249B }, { 0x24EA, 0x26FF }, { 0x2701, 0x27CA }, { 0x27CC, 0x27CC }, { 0x27CE, 0x2B4C }, { 0x2B50, 0x2B59 }, { 0x2CE5, 0x2CEA }, { 0x2CEF, 0x2CF1 }, { 0x2CF9, 0x2CFF }, { 0x2D70, 0x2D70 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2E2E }, { 0x2E30, 0x2E31 }, { 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, 0xA673 }, { 0xA67C, 0xA67E }, { 0xA6F0, 0xA6F7 }, { 0xA700, 0xA716 }, { 0xA720, 0xA721 }, { 0xA789, 0xA78A }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA823, 0xA82B }, { 0xA830, 0xA839 }, { 0xA874, 0xA877 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C4 }, { 0xA8CE, 0xA8CF }, { 0xA8E0, 0xA8F1 }, { 0xA8F8, 0xA8FA }, { 0xA926, 0xA92F }, { 0xA947, 0xA953 }, { 0xA95F, 0xA95F }, { 0xA980, 0xA983 }, { 0xA9B3, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAA5C, 0xAA5F }, { 0xAA77, 0xAA79 }, { 0xAA7B, 0xAA7B }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAADE, 0xAADF }, { 0xABE3, 0xABED }, { 0xE000, 0xF8FF }, { 0xFB1E, 0xFB1E }, { 0xFB29, 0xFB29 }, { 0xFBB2, 0xFBC1 }, { 0xFD3E, 0xFD3F }, { 0xFDFC, 0xFDFD }, { 0xFE00, 0xFE19 }, { 0xFE20, 0xFE26 }, { 0xFE30, 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, 0x1018A }, { 0x10190, 0x1019B }, { 0x101D0, 0x101FD }, { 0x10320, 0x10323 }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x10857, 0x1085F }, { 0x10916, 0x1091B }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A47 }, { 0x10A50, 0x10A58 }, { 0x10A7D, 0x10A7F }, { 0x10B39, 0x10B3F }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10E60, 0x10E7E }, { 0x11000, 0x11002 }, { 0x11038, 0x1104D }, { 0x11052, 0x11065 }, { 0x11080, 0x11082 }, { 0x110B0, 0x110C1 }, { 0x12470, 0x12473 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1DD }, { 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 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BE }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0DF }, { 0x1F100, 0x1F10A }, { 0x1F12D, 0x1F12E }, { 0x1F14A, 0x1F14F }, { 0x1F18B, 0x1F19A }, { 0x1F200, 0x1F202 }, { 0x1F210, 0x1F23A }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F320 }, { 0x1F330, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F380, 0x1F393 }, { 0x1F3A0, 0x1F3C4 }, { 0x1F3C6, 0x1F3CA }, { 0x1F3E0, 0x1F3F0 }, { 0x1F400, 0x1F43E }, { 0x1F440, 0x1F440 }, { 0x1F442, 0x1F4F7 }, { 0x1F4F9, 0x1F4FC }, { 0x1F500, 0x1F53D }, { 0x1F550, 0x1F567 }, { 0x1F5FB, 0x1F5FF }, { 0x1F601, 0x1F610 }, { 0x1F612, 0x1F614 }, { 0x1F616, 0x1F616 }, { 0x1F618, 0x1F618 }, { 0x1F61A, 0x1F61A }, { 0x1F61C, 0x1F61E }, { 0x1F620, 0x1F625 }, { 0x1F628, 0x1F62B }, { 0x1F62D, 0x1F62D }, { 0x1F630, 0x1F633 }, { 0x1F635, 0x1F640 }, { 0x1F645, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F700, 0x1F773 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_punct (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-ctype_space.c��������������������������������������������0000664�0000000�0000000�00000002131�11671051007�0023111�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0009, 0x000D }, { 0x0020, 0x0020 }, { 0x1680, 0x1680 }, { 0x180E, 0x180E }, { 0x2000, 0x2006 }, { 0x2008, 0x200A }, { 0x2028, 0x2029 }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_space (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-ctype_upper.c��������������������������������������������0000664�0000000�0000000�00000034223�11671051007�0023160�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 <http://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 }, { 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 }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 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 }, { 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 }, { 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 }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 } #define PREDICATE(c) uc_is_upper (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-ctype_xdigit.c�������������������������������������������0000664�0000000�0000000�00000001712�11671051007�0023312�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 <http://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-20111211-stable/tests/unictype/test-decdigit.c�����������������������������������������������0000664�0000000�0000000�00000002445�11671051007�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 <http://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-20111211-stable/tests/unictype/test-decdigit.h�����������������������������������������������0000664�0000000�0000000�00000020026�11671051007�0022376�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 6.0.0. */ { 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 }, { 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 }, { 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 }, { 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 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-digit.c��������������������������������������������������0000664�0000000�0000000�00000002434�11671051007�0021720�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 <http://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-20111211-stable/tests/unictype/test-digit.h��������������������������������������������������0000664�0000000�0000000�00000024657�11671051007�0021740�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 6.0.0. */ { 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 }, { 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 }, { 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 }, { 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 }, { 0x1F100, 0 }, { 0x1F101, 0 }, { 0x1F102, 1 }, { 0x1F103, 2 }, { 0x1F104, 3 }, { 0x1F105, 4 }, { 0x1F106, 5 }, { 0x1F107, 6 }, { 0x1F108, 7 }, { 0x1F109, 8 }, { 0x1F10A, 9 } ���������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-joininggroup_byname.c������������������������������������0000664�0000000�0000000�00000027261�11671051007�0024672�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 <http://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-20111211-stable/tests/unictype/test-joininggroup_name.c��������������������������������������0000664�0000000�0000000�00000014767�11671051007�0024346�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 <http://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-20111211-stable/tests/unictype/test-joininggroup_of.c����������������������������������������0000664�0000000�0000000�00000002651�11671051007�0024017�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 <http://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-20111211-stable/tests/unictype/test-joininggroup_of.h����������������������������������������0000664�0000000�0000000�00000021752�11671051007�0024027�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 6.0.0. */ { 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 } ����������������������gnulib-20111211-stable/tests/unictype/test-joiningtype_byname.c�������������������������������������0000664�0000000�0000000�00000005732�11671051007�0024516�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 <http://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-20111211-stable/tests/unictype/test-joiningtype_longname.c�����������������������������������0000664�0000000�0000000�00000003016�11671051007�0025034�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 <http://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-20111211-stable/tests/unictype/test-joiningtype_name.c���������������������������������������0000664�0000000�0000000�00000002652�11671051007�0024161�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 <http://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-20111211-stable/tests/unictype/test-joiningtype_of.c�����������������������������������������0000664�0000000�0000000�00000004106�11671051007�0023641�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 <http://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-20111211-stable/tests/unictype/test-joiningtype_of.h�����������������������������������������0000664�0000000�0000000�00000023137�11671051007�0023653�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 6.0.0. */ { 0x0600, UC_JOINING_TYPE_U }, { 0x0601, UC_JOINING_TYPE_U }, { 0x0602, UC_JOINING_TYPE_U }, { 0x0603, 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 }, { 0x200C, UC_JOINING_TYPE_U }, { 0x200D, UC_JOINING_TYPE_C } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-mirror.c�������������������������������������������������0000664�0000000�0000000�00000002634�11671051007�0022134�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 <http://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-20111211-stable/tests/unictype/test-numeric.c������������������������������������������������0000664�0000000�0000000�00000003112�11671051007�0022254�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 <http://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-20111211-stable/tests/unictype/test-numeric.h������������������������������������������������0000664�0000000�0000000�00000061270�11671051007�0022272�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 6.0.0. */ { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 0x10916, 1, 1 }, { 0x10917, 10, 1 }, { 0x10918, 20, 1 }, { 0x10919, 100, 1 }, { 0x1091A, 2, 1 }, { 0x1091B, 3, 1 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 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 }, { 0x2F890, 9, 1 } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_alphabetic.c������������������������������������������0000664�0000000�0000000�00000030667�11671051007�0023426�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 <http://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 }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 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 }, { 0x0900, 0x093B }, { 0x093D, 0x094C }, { 0x094E, 0x0950 }, { 0x0955, 0x0963 }, { 0x0971, 0x0977 }, { 0x0979, 0x097F }, { 0x0981, 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 }, { 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 }, { 0x0C01, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4C }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C63 }, { 0x0C82, 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 }, { 0x0D02, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4C }, { 0x0D4E, 0x0D4E }, { 0x0D57, 0x0D57 }, { 0x0D60, 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FA }, { 0x10FC, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F0 }, { 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, 0x191C }, { 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 }, { 0x1BAE, 0x1BAF }, { 0x1BC0, 0x1BE5 }, { 0x1BE7, 0x1BF1 }, { 0x1C00, 0x1C35 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C7D }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF2 }, { 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 }, { 0x2160, 0x2188 }, { 0x24B6, 0x24E9 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2D00, 0x2D25 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA697 }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA827 }, { 0xA840, 0xA873 }, { 0xA880, 0xA8C3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA90A, 0xA92A }, { 0xA930, 0xA952 }, { 0xA960, 0xA97C }, { 0xA980, 0xA9B2 }, { 0xA9B4, 0xA9BF }, { 0xA9CF, 0xA9CF }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA80, 0xAABE }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABEA }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0x1031E }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11000, 0x11045 }, { 0x11082, 0x110B8 }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 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 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_alphabetic (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_ascii_hex_digit.c�������������������������������������0000664�0000000�0000000�00000001734�11671051007�0024437�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 <http://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-20111211-stable/tests/unictype/test-pr_bidi_arabic_digit.c�����������������������������������0000664�0000000�0000000�00000002050�11671051007�0024703�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0600, 0x0603 }, { 0x0660, 0x0669 }, { 0x066B, 0x066C }, { 0x06DD, 0x06DD }, { 0x070F, 0x070F }, { 0x10E60, 0x10E7E } #define PREDICATE(c) uc_is_property_bidi_arabic_digit (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_bidi_arabic_right_to_left.c���������������������������0000664�0000000�0000000�00000002736�11671051007�0026447�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0604, 0x0605 }, { 0x0608, 0x0608 }, { 0x060B, 0x060B }, { 0x060D, 0x060D }, { 0x061B, 0x064A }, { 0x066D, 0x066F }, { 0x0671, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06EF }, { 0x06FA, 0x070E }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074B, 0x07A5 }, { 0x07B1, 0x07BF }, { 0x2065, 0x2069 }, { 0xFB50, 0xFD3D }, { 0xFD40, 0xFDCF }, { 0xFDF0, 0xFDFC }, { 0xFDFE, 0xFDFF }, { 0xFE1A, 0xFE1F }, { 0xFE27, 0xFE2F }, { 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 }, { 0xFE6C, 0xFEFE } #define PREDICATE(c) uc_is_property_bidi_arabic_right_to_left (c) #include "test-predicate-part2.h" ����������������������������������gnulib-20111211-stable/tests/unictype/test-pr_bidi_block_separator.c��������������������������������0000664�0000000�0000000�00000002021�11671051007�0025452�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 <http://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-20111211-stable/tests/unictype/test-pr_bidi_boundary_neutral.c�������������������������������0000664�0000000�0000000�00000003220�11671051007�0025657�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0000, 0x0008 }, { 0x000E, 0x001B }, { 0x007F, 0x0084 }, { 0x0086, 0x009F }, { 0x00AD, 0x00AD }, { 0x200B, 0x200D }, { 0x2060, 0x2064 }, { 0x206A, 0x206F }, { 0xFDD0, 0xFDEF }, { 0xFEFF, 0xFEFF }, { 0xFFF0, 0xFFF8 }, { 0xFFFE, 0xFFFF }, { 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-20111211-stable/tests/unictype/test-pr_bidi_common_separator.c�������������������������������0000664�0000000�0000000�00000002322�11671051007�0025654�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 <http://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-20111211-stable/tests/unictype/test-pr_bidi_control.c����������������������������������������0000664�0000000�0000000�00000001701�11671051007�0023764�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x200E, 0x200F }, { 0x202A, 0x202E } #define PREDICATE(c) uc_is_property_bidi_control (c) #include "test-predicate-part2.h" ���������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_bidi_embedding_or_override.c��������������������������0000664�0000000�0000000�00000001717�11671051007�0026630�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 <http://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-20111211-stable/tests/unictype/test-pr_bidi_eur_num_separator.c������������������������������0000664�0000000�0000000�00000002163�11671051007�0026041�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 <http://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-20111211-stable/tests/unictype/test-pr_bidi_eur_num_terminator.c�����������������������������0000664�0000000�0000000�00000002624�11671051007�0026227�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0023, 0x0025 }, { 0x00A2, 0x00A5 }, { 0x00B0, 0x00B1 }, { 0x0609, 0x060A }, { 0x066A, 0x066A }, { 0x09F2, 0x09F3 }, { 0x09FB, 0x09FB }, { 0x0AF1, 0x0AF1 }, { 0x0BF9, 0x0BF9 }, { 0x0E3F, 0x0E3F }, { 0x17DB, 0x17DB }, { 0x2030, 0x2034 }, { 0x20A0, 0x20B9 }, { 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-20111211-stable/tests/unictype/test-pr_bidi_european_digit.c���������������������������������0000664�0000000�0000000�00000002244�11671051007�0025305�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 <http://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 }, { 0x1D7CE, 0x1D7FF }, { 0x1F100, 0x1F10A } #define PREDICATE(c) uc_is_property_bidi_european_digit (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_bidi_hebrew_right_to_left.c���������������������������0000664�0000000�0000000�00000003070�11671051007�0026472�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 <http://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, 0x08FF }, { 0x200F, 0x200F }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB4F }, { 0x10800, 0x1091E }, { 0x10920, 0x10A00 }, { 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A10, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A40, 0x10B38 }, { 0x10B40, 0x10E5F }, { 0x10E7F, 0x10FFF } #define PREDICATE(c) uc_is_property_bidi_hebrew_right_to_left (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_bidi_left_to_right.c����������������������������������0000664�0000000�0000000�00000022051�11671051007�0025136�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 <http://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, 0x058F }, { 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, 0x0C3D }, { 0x0C41, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C61 }, { 0x0C64, 0x0C77 }, { 0x0C7F, 0x0CBB }, { 0x0CBD, 0x0CCB }, { 0x0CCE, 0x0CE1 }, { 0x0CE4, 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, 0x17B6 }, { 0x17BE, 0x17C5 }, { 0x17C7, 0x17C8 }, { 0x17D4, 0x17DA }, { 0x17DC, 0x17DC }, { 0x17DE, 0x17EF }, { 0x17FA, 0x17FF }, { 0x180F, 0x18A8 }, { 0x18AA, 0x191F }, { 0x1923, 0x1926 }, { 0x1929, 0x1931 }, { 0x1933, 0x1938 }, { 0x193C, 0x193F }, { 0x1941, 0x1943 }, { 0x1946, 0x19DD }, { 0x1A00, 0x1A16 }, { 0x1A19, 0x1A55 }, { 0x1A57, 0x1A57 }, { 0x1A5F, 0x1A5F }, { 0x1A61, 0x1A61 }, { 0x1A63, 0x1A64 }, { 0x1A6D, 0x1A72 }, { 0x1A7D, 0x1A7E }, { 0x1A80, 0x1AFF }, { 0x1B04, 0x1B33 }, { 0x1B35, 0x1B35 }, { 0x1B3B, 0x1B3B }, { 0x1B3D, 0x1B41 }, { 0x1B43, 0x1B6A }, { 0x1B74, 0x1B7F }, { 0x1B82, 0x1BA1 }, { 0x1BA6, 0x1BA7 }, { 0x1BAA, 0x1BE5 }, { 0x1BE7, 0x1BE7 }, { 0x1BEA, 0x1BEC }, { 0x1BEE, 0x1BEE }, { 0x1BF2, 0x1C2B }, { 0x1C34, 0x1C35 }, { 0x1C38, 0x1CCF }, { 0x1CD3, 0x1CD3 }, { 0x1CE1, 0x1CE1 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1DBF }, { 0x1DE7, 0x1DFB }, { 0x1E00, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FCC }, { 0x1FD0, 0x1FDC }, { 0x1FE0, 0x1FEC }, { 0x1FF0, 0x1FFC }, { 0x1FFF, 0x1FFF }, { 0x200E, 0x200E }, { 0x2071, 0x2073 }, { 0x207F, 0x207F }, { 0x208F, 0x209F }, { 0x20BA, 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 }, { 0x218A, 0x218F }, { 0x2336, 0x237A }, { 0x2395, 0x2395 }, { 0x23F4, 0x23FF }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, { 0x249C, 0x24E9 }, { 0x26AC, 0x26AC }, { 0x2700, 0x2700 }, { 0x27CB, 0x27CB }, { 0x27CD, 0x27CD }, { 0x2800, 0x28FF }, { 0x2B4D, 0x2B4F }, { 0x2B5A, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF8 }, { 0x2D00, 0x2D7E }, { 0x2D80, 0x2DDF }, { 0x2E32, 0x2E7F }, { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, { 0x2FFC, 0x2FFF }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 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 }, { 0xA674, 0xA67B }, { 0xA680, 0xA6EF }, { 0xA6F2, 0xA6FF }, { 0xA722, 0xA787 }, { 0xA789, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA824 }, { 0xA827, 0xA827 }, { 0xA82C, 0xA837 }, { 0xA83A, 0xA873 }, { 0xA878, 0xA8C3 }, { 0xA8C5, 0xA8DF }, { 0xA8F2, 0xA925 }, { 0xA92E, 0xA946 }, { 0xA952, 0xA97F }, { 0xA983, 0xA9B2 }, { 0xA9B4, 0xA9B5 }, { 0xA9BA, 0xA9BB }, { 0xA9BD, 0xAA28 }, { 0xAA2F, 0xAA30 }, { 0xAA33, 0xAA34 }, { 0xAA37, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA4D, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xABE4 }, { 0xABE6, 0xABE7 }, { 0xABE9, 0xABEC }, { 0xABEE, 0xFB1C }, { 0xFF00, 0xFF00 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFDF }, { 0xFFE7, 0xFFE7 }, { 0xFFEF, 0xFFEF }, { 0x10000, 0x10100 }, { 0x10102, 0x1013F }, { 0x1018B, 0x1018F }, { 0x1019C, 0x101FC }, { 0x101FE, 0x107FF }, { 0x11000, 0x11000 }, { 0x11002, 0x11037 }, { 0x11047, 0x11051 }, { 0x11066, 0x1107F }, { 0x11082, 0x110B2 }, { 0x110B7, 0x110B8 }, { 0x110BB, 0x1D166 }, { 0x1D16A, 0x1D172 }, { 0x1D183, 0x1D184 }, { 0x1D18C, 0x1D1A9 }, { 0x1D1AE, 0x1D1FF }, { 0x1D246, 0x1D2FF }, { 0x1D357, 0x1D6DA }, { 0x1D6DC, 0x1D714 }, { 0x1D716, 0x1D74E }, { 0x1D750, 0x1D788 }, { 0x1D78A, 0x1D7C2 }, { 0x1D7C4, 0x1D7CD }, { 0x1D800, 0x1EFFF }, { 0x1F02C, 0x1F02F }, { 0x1F094, 0x1F09F }, { 0x1F0AF, 0x1F0B0 }, { 0x1F0BF, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0E0, 0x1F0FF }, { 0x1F10B, 0x1F2FF }, { 0x1F321, 0x1F32F }, { 0x1F336, 0x1F336 }, { 0x1F37D, 0x1F37F }, { 0x1F394, 0x1F39F }, { 0x1F3C5, 0x1F3C5 }, { 0x1F3CB, 0x1F3DF }, { 0x1F3F1, 0x1F3FF }, { 0x1F43F, 0x1F43F }, { 0x1F441, 0x1F441 }, { 0x1F48C, 0x1F48C }, { 0x1F4F8, 0x1F4F8 }, { 0x1F4FD, 0x1F4FF }, { 0x1F524, 0x1F524 }, { 0x1F53E, 0x1F54F }, { 0x1F568, 0x1F5FA }, { 0x1F600, 0x1F600 }, { 0x1F611, 0x1F611 }, { 0x1F615, 0x1F615 }, { 0x1F617, 0x1F617 }, { 0x1F619, 0x1F619 }, { 0x1F61B, 0x1F61B }, { 0x1F61F, 0x1F61F }, { 0x1F626, 0x1F627 }, { 0x1F62C, 0x1F62C }, { 0x1F62E, 0x1F62F }, { 0x1F634, 0x1F634 }, { 0x1F641, 0x1F644 }, { 0x1F650, 0x1F67F }, { 0x1F6C6, 0x1F6FF }, { 0x1F774, 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-20111211-stable/tests/unictype/test-pr_bidi_non_spacing_mark.c�������������������������������0000664�0000000�0000000�00000013144�11671051007�0025620�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 <http://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 }, { 0x0900, 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 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0CBC, 0x0CBC }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 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 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1DC0, 0x1DE6 }, { 0x1DFC, 0x1DFF }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA67C, 0xA67D }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE26 }, { 0x101FD, 0x101FD }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x11080, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x1D167, 0x1D169 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_bidi_non_spacing_mark (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_bidi_other_neutral.c����������������������������������0000664�0000000�0000000�00000012443�11671051007�0025164�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 <http://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 }, { 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, 0x2189 }, { 0x2190, 0x2211 }, { 0x2214, 0x2335 }, { 0x237B, 0x2394 }, { 0x2396, 0x23F3 }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x2487 }, { 0x24EA, 0x26AB }, { 0x26AD, 0x26FF }, { 0x2701, 0x27CA }, { 0x27CC, 0x27CC }, { 0x27CE, 0x27FF }, { 0x2900, 0x2B4C }, { 0x2B50, 0x2B59 }, { 0x2CE5, 0x2CEA }, { 0x2CF9, 0x2CFF }, { 0x2E00, 0x2E31 }, { 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, 0x1018A }, { 0x10190, 0x1019B }, { 0x1091F, 0x1091F }, { 0x10B39, 0x10B3F }, { 0x11052, 0x11065 }, { 0x1D200, 0x1D241 }, { 0x1D245, 0x1D245 }, { 0x1D300, 0x1D356 }, { 0x1D6DB, 0x1D6DB }, { 0x1D715, 0x1D715 }, { 0x1D74F, 0x1D74F }, { 0x1D789, 0x1D789 }, { 0x1D7C3, 0x1D7C3 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BE }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0DF }, { 0x1F300, 0x1F320 }, { 0x1F330, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F380, 0x1F393 }, { 0x1F3A0, 0x1F3C4 }, { 0x1F3C6, 0x1F3CA }, { 0x1F3E0, 0x1F3F0 }, { 0x1F400, 0x1F43E }, { 0x1F440, 0x1F440 }, { 0x1F442, 0x1F48B }, { 0x1F48D, 0x1F4F7 }, { 0x1F4F9, 0x1F4FC }, { 0x1F500, 0x1F523 }, { 0x1F525, 0x1F53D }, { 0x1F550, 0x1F567 }, { 0x1F5FB, 0x1F5FF }, { 0x1F601, 0x1F610 }, { 0x1F612, 0x1F614 }, { 0x1F616, 0x1F616 }, { 0x1F618, 0x1F618 }, { 0x1F61A, 0x1F61A }, { 0x1F61C, 0x1F61E }, { 0x1F620, 0x1F625 }, { 0x1F628, 0x1F62B }, { 0x1F62D, 0x1F62D }, { 0x1F630, 0x1F633 }, { 0x1F635, 0x1F640 }, { 0x1F645, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F700, 0x1F773 } #define PREDICATE(c) uc_is_property_bidi_other_neutral (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_bidi_pdf.c��������������������������������������������0000664�0000000�0000000�00000001645�11671051007�0023064�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 <http://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-20111211-stable/tests/unictype/test-pr_bidi_segment_separator.c������������������������������0000664�0000000�0000000�00000001743�11671051007�0026034�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 <http://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-20111211-stable/tests/unictype/test-pr_bidi_whitespace.c�������������������������������������0000664�0000000�0000000�00000002124�11671051007�0024440�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x000C, 0x000C }, { 0x0020, 0x0020 }, { 0x1680, 0x1680 }, { 0x180E, 0x180E }, { 0x2000, 0x200A }, { 0x2028, 0x2028 }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_property_bidi_whitespace (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_byname.c����������������������������������������������0000664�0000000�0000000�00000002214�11671051007�0022570�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 <http://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-20111211-stable/tests/unictype/test-pr_case_ignorable.c��������������������������������������0000664�0000000�0000000�00000016663�11671051007�0024267�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 <http://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, 0x0603 }, { 0x0610, 0x061A }, { 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 }, { 0x0900, 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 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 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, 0x180D }, { 0x1843, 0x1843 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AA7, 0x1AA7 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1C78, 0x1C7D }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1D2C, 0x1D61 }, { 0x1D78, 0x1D78 }, { 0x1D9B, 0x1DE6 }, { 0x1DFC, 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 }, { 0x206A, 0x206F }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x20D0, 0x20F0 }, { 0x2C7D, 0x2C7D }, { 0x2CEF, 0x2CF1 }, { 0x2D6F, 0x2D6F }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3005 }, { 0x302A, 0x302F }, { 0x3031, 0x3035 }, { 0x303B, 0x303B }, { 0x3099, 0x309E }, { 0x30FC, 0x30FE }, { 0xA015, 0xA015 }, { 0xA4F8, 0xA4FD }, { 0xA60C, 0xA60C }, { 0xA66F, 0xA672 }, { 0xA67C, 0xA67D }, { 0xA67F, 0xA67F }, { 0xA6F0, 0xA6F1 }, { 0xA700, 0xA721 }, { 0xA770, 0xA770 }, { 0xA788, 0xA78A }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xA9CF, 0xA9CF }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAA70, 0xAA70 }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAADD, 0xAADD }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFBB2, 0xFBC1 }, { 0xFE00, 0xFE0F }, { 0xFE13, 0xFE13 }, { 0xFE20, 0xFE26 }, { 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 }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x11080, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x110BD, 0x110BD }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_case_ignorable (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_cased.c�����������������������������������������������0000664�0000000�0000000�00000007110�11671051007�0022374�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 <http://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 }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 0x0531, 0x0556 }, { 0x0561, 0x0587 }, { 0x10A0, 0x10C5 }, { 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 }, { 0x2090, 0x2094 }, { 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 }, { 0x2D00, 0x2D25 }, { 0xA640, 0xA66D }, { 0xA680, 0xA697 }, { 0xA722, 0xA787 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA7FA }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0x10400, 0x1044F }, { 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 } #define PREDICATE(c) uc_is_property_cased (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_changes_when_casefolded.c�����������������������������0000664�0000000�0000000�00000034666�11671051007�0026137�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 <http://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 }, { 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 }, { 0x0531, 0x0556 }, { 0x0587, 0x0587 }, { 0x10A0, 0x10C5 }, { 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 }, { 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 }, { 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 }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 } #define PREDICATE(c) uc_is_property_changes_when_casefolded (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_changes_when_casemapped.c�����������������������������0000664�0000000�0000000�00000006346�11671051007�0026142�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 <http://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, 0x025B }, { 0x0260, 0x0260 }, { 0x0263, 0x0263 }, { 0x0265, 0x0265 }, { 0x0268, 0x0269 }, { 0x026B, 0x026B }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0283, 0x0283 }, { 0x0288, 0x028C }, { 0x0292, 0x0292 }, { 0x0345, 0x0345 }, { 0x0370, 0x0373 }, { 0x0376, 0x0377 }, { 0x037B, 0x037D }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03D1 }, { 0x03D5, 0x03F2 }, { 0x03F4, 0x03F5 }, { 0x03F7, 0x03FB }, { 0x03FD, 0x0481 }, { 0x048A, 0x0527 }, { 0x0531, 0x0556 }, { 0x0561, 0x0587 }, { 0x10A0, 0x10C5 }, { 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 }, { 0x2D00, 0x2D25 }, { 0xA640, 0xA66D }, { 0xA680, 0xA697 }, { 0xA722, 0xA72F }, { 0xA732, 0xA76F }, { 0xA779, 0xA787 }, { 0xA78B, 0xA78D }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0x10400, 0x1044F } #define PREDICATE(c) uc_is_property_changes_when_casemapped (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_changes_when_lowercased.c�����������������������������0000664�0000000�0000000�00000034256�11671051007�0026171�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 <http://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 }, { 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 }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 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 }, { 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 }, { 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 }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 } #define PREDICATE(c) uc_is_property_changes_when_lowercased (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_changes_when_titlecased.c�����������������������������0000664�0000000�0000000�00000035106�11671051007�0026155�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 <http://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, 0x025B }, { 0x0260, 0x0260 }, { 0x0263, 0x0263 }, { 0x0265, 0x0265 }, { 0x0268, 0x0269 }, { 0x026B, 0x026B }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0283, 0x0283 }, { 0x0288, 0x028C }, { 0x0292, 0x0292 }, { 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, 0x03F2 }, { 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 }, { 0x0561, 0x0587 }, { 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 }, { 0x2D00, 0x2D25 }, { 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 }, { 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 }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F } #define PREDICATE(c) uc_is_property_changes_when_titlecased (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_changes_when_uppercased.c�����������������������������0000664�0000000�0000000�00000035056�11671051007�0026173�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 <http://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, 0x025B }, { 0x0260, 0x0260 }, { 0x0263, 0x0263 }, { 0x0265, 0x0265 }, { 0x0268, 0x0269 }, { 0x026B, 0x026B }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0283, 0x0283 }, { 0x0288, 0x028C }, { 0x0292, 0x0292 }, { 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, 0x03F2 }, { 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 }, { 0x0561, 0x0587 }, { 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 }, { 0x2D00, 0x2D25 }, { 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 }, { 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 }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F } #define PREDICATE(c) uc_is_property_changes_when_uppercased (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_combining.c�������������������������������������������0000664�0000000�0000000�00000012710�11671051007�0023264�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 <http://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 }, { 0x0900, 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 }, { 0x0C01, 0x0C03 }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C82, 0x0C83 }, { 0x0CBC, 0x0CBC }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D02, 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 }, { 0x17B6, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x19B0, 0x19C0 }, { 0x19C8, 0x19C9 }, { 0x1A17, 0x1A1B }, { 0x1A55, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1B00, 0x1B04 }, { 0x1B34, 0x1B44 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BAA }, { 0x1BE6, 0x1BF3 }, { 0x1C24, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF2, 0x1CF2 }, { 0x1DC0, 0x1DE6 }, { 0x1DFC, 0x1DFF }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA67C, 0xA67D }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA823, 0xA827 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA953 }, { 0xA980, 0xA983 }, { 0xA9B3, 0xA9C0 }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAA7B, 0xAA7B }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xABE3, 0xABEA }, { 0xABEC, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE26 }, { 0x101FD, 0x101FD }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x11000, 0x11002 }, { 0x11038, 0x11046 }, { 0x11080, 0x11082 }, { 0x110B0, 0x110BA }, { 0x1D165, 0x1D169 }, { 0x1D16D, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_combining (c) #include "test-predicate-part2.h" ��������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_composite.c�������������������������������������������0000664�0000000�0000000�00000016746�11671051007�0023336�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 <http://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 }, { 0x1D15E, 0x1D164 }, { 0x1D1BB, 0x1D1C0 }, { 0x1F100, 0x1F10A }, { 0x1F110, 0x1F12A }, { 0x1F12D, 0x1F12E }, { 0x1F14A, 0x1F14F }, { 0x1F190, 0x1F190 }, { 0x1F200, 0x1F201 }, { 0x1F240, 0x1F248 } #define PREDICATE(c) uc_is_property_composite (c) #include "test-predicate-part2.h" ��������������������������gnulib-20111211-stable/tests/unictype/test-pr_currency_symbol.c�������������������������������������0000664�0000000�0000000�00000002424�11671051007�0024537�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0024, 0x0024 }, { 0x00A2, 0x00A5 }, { 0x060B, 0x060B }, { 0x09F2, 0x09F3 }, { 0x09FB, 0x09FB }, { 0x0AF1, 0x0AF1 }, { 0x0BF9, 0x0BF9 }, { 0x0E3F, 0x0E3F }, { 0x17DB, 0x17DB }, { 0x20A0, 0x20B9 }, { 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-20111211-stable/tests/unictype/test-pr_dash.c������������������������������������������������0000664�0000000�0000000�00000002521�11671051007�0022235�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 <http://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 }, { 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-20111211-stable/tests/unictype/test-pr_decimal_digit.c���������������������������������������0000664�0000000�0000000�00000003450�11671051007�0024076�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 <http://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 }, { 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 }, { 0xAA50, 0xAA59 }, { 0xABF0, 0xABF9 }, { 0xFF10, 0xFF19 }, { 0x104A0, 0x104A9 }, { 0x11066, 0x1106F }, { 0x1D7CE, 0x1D7FF } #define PREDICATE(c) uc_is_property_decimal_digit (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_default_ignorable_code_point.c������������������������0000664�0000000�0000000�00000002415�11671051007�0027171�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x00AD, 0x00AD }, { 0x034F, 0x034F }, { 0x115F, 0x1160 }, { 0x17B4, 0x17B5 }, { 0x180B, 0x180D }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x206F }, { 0x3164, 0x3164 }, { 0xFE00, 0xFE0F }, { 0xFEFF, 0xFEFF }, { 0xFFA0, 0xFFA0 }, { 0xFFF0, 0xFFF8 }, { 0x1D173, 0x1D17A }, { 0xE0000, 0xE0FFF } #define PREDICATE(c) uc_is_property_default_ignorable_code_point (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_deprecated.c������������������������������������������0000664�0000000�0000000�00000002153�11671051007�0023417�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 <http://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 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_property_deprecated (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_diacritic.c�������������������������������������������0000664�0000000�0000000�00000007222�11671051007�0023254�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 <http://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 }, { 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 }, { 0x1B34, 0x1B34 }, { 0x1B44, 0x1B44 }, { 0x1B6B, 0x1B73 }, { 0x1BAA, 0x1BAA }, { 0x1C36, 0x1C37 }, { 0x1C78, 0x1C7D }, { 0x1CD0, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1D2C, 0x1D6A }, { 0x1DC4, 0x1DCF }, { 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 }, { 0xA6F0, 0xA6F1 }, { 0xA717, 0xA721 }, { 0xA788, 0xA788 }, { 0xA8C4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA92B, 0xA92E }, { 0xA953, 0xA953 }, { 0xA9B3, 0xA9B3 }, { 0xA9C0, 0xA9C0 }, { 0xAA7B, 0xAA7B }, { 0xAABF, 0xAAC2 }, { 0xABEC, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE20, 0xFE26 }, { 0xFF3E, 0xFF3E }, { 0xFF40, 0xFF40 }, { 0xFF70, 0xFF70 }, { 0xFF9E, 0xFF9F }, { 0xFFE3, 0xFFE3 }, { 0x110B9, 0x110BA }, { 0x1D167, 0x1D169 }, { 0x1D16D, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD } #define PREDICATE(c) uc_is_property_diacritic (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_extender.c��������������������������������������������0000664�0000000�0000000�00000002555�11671051007�0023143�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x00B7, 0x00B7 }, { 0x02D0, 0x02D1 }, { 0x0640, 0x0640 }, { 0x07FA, 0x07FA }, { 0x0E46, 0x0E46 }, { 0x0EC6, 0x0EC6 }, { 0x1843, 0x1843 }, { 0x1AA7, 0x1AA7 }, { 0x1C36, 0x1C36 }, { 0x1C7B, 0x1C7B }, { 0x3005, 0x3005 }, { 0x3031, 0x3035 }, { 0x309D, 0x309E }, { 0x30FC, 0x30FE }, { 0xA015, 0xA015 }, { 0xA60C, 0xA60C }, { 0xA9CF, 0xA9CF }, { 0xAA70, 0xAA70 }, { 0xAADD, 0xAADD }, { 0xFF70, 0xFF70 } #define PREDICATE(c) uc_is_property_extender (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_format_control.c��������������������������������������0000664�0000000�0000000�00000002101�11671051007�0024340�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x00AD, 0x00AD }, { 0x200B, 0x200B }, { 0x2060, 0x2064 }, { 0x206A, 0x206F }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_property_format_control (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_grapheme_base.c���������������������������������������0000664�0000000�0000000�00000036206�11671051007�0024107�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0020, 0x007E }, { 0x00A0, 0x00AC }, { 0x00AE, 0x02FF }, { 0x0370, 0x0377 }, { 0x037A, 0x037E }, { 0x0384, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x0482 }, { 0x048A, 0x0527 }, { 0x0531, 0x0556 }, { 0x0559, 0x055F }, { 0x0561, 0x0587 }, { 0x0589, 0x058A }, { 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 }, { 0x0903, 0x0939 }, { 0x093B, 0x093B }, { 0x093D, 0x0940 }, { 0x0949, 0x094C }, { 0x094E, 0x0950 }, { 0x0958, 0x0961 }, { 0x0964, 0x0977 }, { 0x0979, 0x097F }, { 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, 0x0AEF }, { 0x0AF1, 0x0AF1 }, { 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, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C41, 0x0C44 }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C61 }, { 0x0C66, 0x0C6F }, { 0x0C78, 0x0C7F }, { 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, 0x0D4E }, { 0x0D60, 0x0D61 }, { 0x0D66, 0x0D75 }, { 0x0D79, 0x0D7F }, { 0x0D82, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DD0, 0x0DD1 }, { 0x0DD8, 0x0DDE }, { 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1400, 0x169C }, { 0x16A0, 0x16F0 }, { 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 }, { 0x180E, 0x180E }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191C }, { 0x1923, 0x1926 }, { 0x1929, 0x192B }, { 0x1930, 0x1931 }, { 0x1933, 0x1938 }, { 0x1940, 0x1940 }, { 0x1944, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19DA }, { 0x19DE, 0x1A16 }, { 0x1A19, 0x1A1B }, { 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, 0x1BB9 }, { 0x1BC0, 0x1BE5 }, { 0x1BE7, 0x1BE7 }, { 0x1BEA, 0x1BEC }, { 0x1BEE, 0x1BEE }, { 0x1BF2, 0x1BF3 }, { 0x1BFC, 0x1C2B }, { 0x1C34, 0x1C35 }, { 0x1C3B, 0x1C49 }, { 0x1C4D, 0x1C7F }, { 0x1CD3, 0x1CD3 }, { 0x1CE1, 0x1CE1 }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF2 }, { 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, 0x20B9 }, { 0x2100, 0x2189 }, { 0x2190, 0x23F3 }, { 0x2400, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x26FF }, { 0x2701, 0x27CA }, { 0x27CC, 0x27CC }, { 0x27CE, 0x2B4C }, { 0x2B50, 0x2B59 }, { 0x2C00, 0x2C2E }, { 0x2C30, 0x2C5E }, { 0x2C60, 0x2CEE }, { 0x2CF9, 0x2D25 }, { 0x2D30, 0x2D65 }, { 0x2D6F, 0x2D70 }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2E00, 0x2E31 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, { 0xA640, 0xA66E }, { 0xA673, 0xA673 }, { 0xA67E, 0xA697 }, { 0xA6A0, 0xA6EF }, { 0xA6F2, 0xA6F7 }, { 0xA700, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA824 }, { 0xA827, 0xA82B }, { 0xA830, 0xA839 }, { 0xA840, 0xA877 }, { 0xA880, 0xA8C3 }, { 0xA8CE, 0xA8D9 }, { 0xA8F2, 0xA8FB }, { 0xA900, 0xA925 }, { 0xA92E, 0xA946 }, { 0xA952, 0xA953 }, { 0xA95F, 0xA97C }, { 0xA983, 0xA9B2 }, { 0xA9B4, 0xA9B5 }, { 0xA9BA, 0xA9BB }, { 0xA9BD, 0xA9CD }, { 0xA9CF, 0xA9D9 }, { 0xA9DE, 0xA9DF }, { 0xAA00, 0xAA28 }, { 0xAA2F, 0xAA30 }, { 0xAA33, 0xAA34 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA4D, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA5C, 0xAA7B }, { 0xAA80, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADF }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABE4 }, { 0xABE6, 0xABE7 }, { 0xABE9, 0xABEC }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0x1018A }, { 0x10190, 0x1019B }, { 0x101D0, 0x101FC }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031E }, { 0x10320, 0x10323 }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x1039F, 0x103C3 }, { 0x103C8, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10857, 0x1085F }, { 0x10900, 0x1091B }, { 0x1091F, 0x10939 }, { 0x1093F, 0x1093F }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A40, 0x10A47 }, { 0x10A50, 0x10A58 }, { 0x10A60, 0x10A7F }, { 0x10B00, 0x10B35 }, { 0x10B39, 0x10B55 }, { 0x10B58, 0x10B72 }, { 0x10B78, 0x10B7F }, { 0x10C00, 0x10C48 }, { 0x10E60, 0x10E7E }, { 0x11000, 0x11000 }, { 0x11002, 0x11037 }, { 0x11047, 0x1104D }, { 0x11052, 0x1106F }, { 0x11082, 0x110B2 }, { 0x110B7, 0x110B8 }, { 0x110BB, 0x110BC }, { 0x110BE, 0x110C1 }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x12470, 0x12473 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D164 }, { 0x1D166, 0x1D166 }, { 0x1D16A, 0x1D16D }, { 0x1D183, 0x1D184 }, { 0x1D18C, 0x1D1A9 }, { 0x1D1AE, 0x1D1DD }, { 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, 0x1D7FF }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BE }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0DF }, { 0x1F100, 0x1F10A }, { 0x1F110, 0x1F12E }, { 0x1F130, 0x1F169 }, { 0x1F170, 0x1F19A }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23A }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F300, 0x1F320 }, { 0x1F330, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F380, 0x1F393 }, { 0x1F3A0, 0x1F3C4 }, { 0x1F3C6, 0x1F3CA }, { 0x1F3E0, 0x1F3F0 }, { 0x1F400, 0x1F43E }, { 0x1F440, 0x1F440 }, { 0x1F442, 0x1F4F7 }, { 0x1F4F9, 0x1F4FC }, { 0x1F500, 0x1F53D }, { 0x1F550, 0x1F567 }, { 0x1F5FB, 0x1F5FF }, { 0x1F601, 0x1F610 }, { 0x1F612, 0x1F614 }, { 0x1F616, 0x1F616 }, { 0x1F618, 0x1F618 }, { 0x1F61A, 0x1F61A }, { 0x1F61C, 0x1F61E }, { 0x1F620, 0x1F625 }, { 0x1F628, 0x1F62B }, { 0x1F62D, 0x1F62D }, { 0x1F630, 0x1F633 }, { 0x1F635, 0x1F640 }, { 0x1F645, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F700, 0x1F773 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_grapheme_base (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_grapheme_extend.c�������������������������������������0000664�0000000�0000000�00000013742�11671051007�0024464�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 <http://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 }, { 0x0900, 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 }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC2, 0x0CC2 }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 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 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1A56, 0x1A56 }, { 0x1A58, 0x1A5E }, { 0x1A60, 0x1A60 }, { 0x1A62, 0x1A62 }, { 0x1A65, 0x1A6C }, { 0x1A73, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1B81 }, { 0x1BA2, 0x1BA5 }, { 0x1BA8, 0x1BA9 }, { 0x1BE6, 0x1BE6 }, { 0x1BE8, 0x1BE9 }, { 0x1BED, 0x1BED }, { 0x1BEF, 0x1BF1 }, { 0x1C2C, 0x1C33 }, { 0x1C36, 0x1C37 }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CE0 }, { 0x1CE2, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1DC0, 0x1DE6 }, { 0x1DFC, 0x1DFF }, { 0x200C, 0x200D }, { 0x20D0, 0x20F0 }, { 0x2CEF, 0x2CF1 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2DFF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA66F, 0xA672 }, { 0xA67C, 0xA67D }, { 0xA6F0, 0xA6F1 }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xA8C4, 0xA8C4 }, { 0xA8E0, 0xA8F1 }, { 0xA926, 0xA92D }, { 0xA947, 0xA951 }, { 0xA980, 0xA982 }, { 0xA9B3, 0xA9B3 }, { 0xA9B6, 0xA9B9 }, { 0xA9BC, 0xA9BC }, { 0xAA29, 0xAA2E }, { 0xAA31, 0xAA32 }, { 0xAA35, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4C }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xABE5, 0xABE5 }, { 0xABE8, 0xABE8 }, { 0xABED, 0xABED }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE26 }, { 0xFF9E, 0xFF9F }, { 0x101FD, 0x101FD }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x11080, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x1D165, 0x1D165 }, { 0x1D167, 0x1D169 }, { 0x1D16E, 0x1D172 }, { 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_grapheme_extend (c) #include "test-predicate-part2.h" ������������������������������gnulib-20111211-stable/tests/unictype/test-pr_grapheme_link.c���������������������������������������0000664�0000000�0000000�00000003120�11671051007�0024117�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 <http://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, 0x1BAA }, { 0x1BF2, 0x1BF3 }, { 0x2D7F, 0x2D7F }, { 0xA806, 0xA806 }, { 0xA8C4, 0xA8C4 }, { 0xA953, 0xA953 }, { 0xA9C0, 0xA9C0 }, { 0xABED, 0xABED }, { 0x10A3F, 0x10A3F }, { 0x11046, 0x11046 }, { 0x110B9, 0x110B9 } #define PREDICATE(c) uc_is_property_grapheme_link (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_hex_digit.c�������������������������������������������0000664�0000000�0000000�00000002036�11671051007�0023263�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 <http://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-20111211-stable/tests/unictype/test-pr_hyphen.c����������������������������������������������0000664�0000000�0000000�00000002173�11671051007�0022614�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 <http://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-20111211-stable/tests/unictype/test-pr_id_continue.c�����������������������������������������0000664�0000000�0000000�00000032162�11671051007�0023622�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 <http://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 }, { 0x0386, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x0483, 0x0487 }, { 0x048A, 0x0527 }, { 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 }, { 0x0900, 0x0963 }, { 0x0966, 0x096F }, { 0x0971, 0x0977 }, { 0x0979, 0x097F }, { 0x0981, 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 }, { 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 }, { 0x0C01, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C82, 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 }, { 0x0D02, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4E }, { 0x0D57, 0x0D57 }, { 0x0D60, 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 }, { 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FA }, { 0x10FC, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F0 }, { 0x1700, 0x170C }, { 0x170E, 0x1714 }, { 0x1720, 0x1734 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17B3 }, { 0x17B6, 0x17D3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x180B, 0x180D }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191C }, { 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 }, { 0x1B00, 0x1B4B }, { 0x1B50, 0x1B59 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1BAA }, { 0x1BAE, 0x1BB9 }, { 0x1BC0, 0x1BF3 }, { 0x1C00, 0x1C37 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CF2 }, { 0x1D00, 0x1DE6 }, { 0x1DFC, 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, 0x2CF1 }, { 0x2D00, 0x2D25 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66F }, { 0xA67C, 0xA67D }, { 0xA67F, 0xA697 }, { 0xA6A0, 0xA6F1 }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA827 }, { 0xA840, 0xA873 }, { 0xA880, 0xA8C4 }, { 0xA8D0, 0xA8D9 }, { 0xA8E0, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA900, 0xA92D }, { 0xA930, 0xA953 }, { 0xA960, 0xA97C }, { 0xA980, 0xA9C0 }, { 0xA9CF, 0xA9D9 }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7B }, { 0xAA80, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABEA }, { 0xABEC, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0xFE26 }, { 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 }, { 0x10300, 0x1031E }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11000, 0x11046 }, { 0x11066, 0x1106F }, { 0x11080, 0x110BA }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 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 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_id_continue (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_id_start.c��������������������������������������������0000664�0000000�0000000�00000026433�11671051007�0023137�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 <http://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 }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 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 }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0971, 0x0977 }, { 0x0979, 0x097F }, { 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 }, { 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, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C61 }, { 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 }, { 0x0D60, 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FA }, { 0x10FC, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F0 }, { 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, 0x191C }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19C1, 0x19C7 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BAF }, { 0x1BC0, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C7D }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 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 }, { 0x2D00, 0x2D25 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA697 }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA90A, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9CF }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA80, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABE2 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0x1031E }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11003, 0x11037 }, { 0x11083, 0x110AF }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 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 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_id_start (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_ideographic.c�����������������������������������������0000664�0000000�0000000�00000002270�11671051007�0023575�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x3006, 0x3007 }, { 0x3021, 0x3029 }, { 0x3038, 0x303A }, { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FCB }, { 0xF900, 0xFA2D }, { 0xFA30, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_ideographic (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_ids_binary_operator.c���������������������������������0000664�0000000�0000000�00000001710�11671051007�0025353�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 <http://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-20111211-stable/tests/unictype/test-pr_ids_trinary_operator.c��������������������������������0000664�0000000�0000000�00000001661�11671051007�0025564�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 <http://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-20111211-stable/tests/unictype/test-pr_ignorable_control.c�����������������������������������0000664�0000000�0000000�00000002546�11671051007�0025027�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0001, 0x0008 }, { 0x000E, 0x001B }, { 0x007F, 0x0084 }, { 0x0086, 0x009F }, { 0x00AD, 0x00AD }, { 0x0600, 0x0603 }, { 0x06DD, 0x06DD }, { 0x070F, 0x070F }, { 0x17B4, 0x17B5 }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x206A, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x110BD, 0x110BD }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_property_ignorable_control (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_iso_control.c�����������������������������������������0000664�0000000�0000000�00000001700�11671051007�0023646�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 <http://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-20111211-stable/tests/unictype/test-pr_join_control.c����������������������������������������0000664�0000000�0000000�00000001651�11671051007�0024020�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 <http://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-20111211-stable/tests/unictype/test-pr_left_of_pair.c����������������������������������������0000664�0000000�0000000�00000003551�11671051007�0023753�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 <http://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-20111211-stable/tests/unictype/test-pr_line_separator.c��������������������������������������0000664�0000000�0000000�00000001653�11671051007�0024332�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 <http://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-20111211-stable/tests/unictype/test-pr_logical_order_exception.c�����������������������������0000664�0000000�0000000�00000002024�11671051007�0026177�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0E40, 0x0E44 }, { 0x0EC0, 0x0EC4 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAAB9 }, { 0xAABB, 0xAABC } #define PREDICATE(c) uc_is_property_logical_order_exception (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_lowercase.c�������������������������������������������0000664�0000000�0000000�00000036450�11671051007�0023312�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 <http://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 }, { 0x0561, 0x0587 }, { 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 }, { 0x2090, 0x2094 }, { 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 }, { 0x2D00, 0x2D25 }, { 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 }, { 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 }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xA7FA, 0xA7FA }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F }, { 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 } #define PREDICATE(c) uc_is_property_lowercase (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_math.c������������������������������������������������0000664�0000000�0000000�00000006643�11671051007�0022260�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 <http://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, 0x27CA }, { 0x27CC, 0x27CC }, { 0x27CE, 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 } #define PREDICATE(c) uc_is_property_math (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_non_break.c�������������������������������������������0000664�0000000�0000000�00000002176�11671051007�0023262�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 <http://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-20111211-stable/tests/unictype/test-pr_not_a_character.c�������������������������������������0000664�0000000�0000000�00000002546�11671051007�0024441�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 <http://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-20111211-stable/tests/unictype/test-pr_numeric.c���������������������������������������������0000664�0000000�0000000�00000006162�11671051007�0022765�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 <http://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 }, { 0x0D66, 0x0D75 }, { 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 }, { 0x3251, 0x325F }, { 0x3280, 0x3289 }, { 0x32B1, 0x32BF }, { 0xA620, 0xA629 }, { 0xA6E6, 0xA6EF }, { 0xA830, 0xA835 }, { 0xA8D0, 0xA8D9 }, { 0xA900, 0xA909 }, { 0xA9D0, 0xA9D9 }, { 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, 0x1018A }, { 0x10320, 0x10323 }, { 0x10341, 0x10341 }, { 0x1034A, 0x1034A }, { 0x103D1, 0x103D5 }, { 0x104A0, 0x104A9 }, { 0x10858, 0x1085F }, { 0x10916, 0x1091B }, { 0x10A40, 0x10A47 }, { 0x10A7D, 0x10A7E }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10E60, 0x10E7E }, { 0x11052, 0x1106F }, { 0x12400, 0x12431 }, { 0x12434, 0x12455 }, { 0x12458, 0x12462 }, { 0x1D360, 0x1D371 }, { 0x1D7CE, 0x1D7FF }, { 0x1F100, 0x1F10A }, { 0x2F890, 0x2F890 } #define PREDICATE(c) uc_is_property_numeric (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_other_alphabetic.c������������������������������������0000664�0000000�0000000�00000010473�11671051007�0024620�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 <http://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 }, { 0x0900, 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 }, { 0x0C01, 0x0C03 }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4C }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C82, 0x0C83 }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCC }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0D02, 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 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x1938 }, { 0x19B0, 0x19C0 }, { 0x19C8, 0x19C9 }, { 0x1A17, 0x1A1B }, { 0x1A55, 0x1A5E }, { 0x1A61, 0x1A74 }, { 0x1B00, 0x1B04 }, { 0x1B35, 0x1B43 }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BA9 }, { 0x1BE7, 0x1BF1 }, { 0x1C24, 0x1C35 }, { 0x1CF2, 0x1CF2 }, { 0x24B6, 0x24E9 }, { 0x2DE0, 0x2DFF }, { 0xA823, 0xA827 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C3 }, { 0xA926, 0xA92A }, { 0xA947, 0xA952 }, { 0xA980, 0xA983 }, { 0xA9B4, 0xA9BF }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABE }, { 0xABE3, 0xABEA }, { 0xFB1E, 0xFB1E }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x11000, 0x11002 }, { 0x11038, 0x11045 }, { 0x11082, 0x11082 }, { 0x110B0, 0x110B8 } #define PREDICATE(c) uc_is_property_other_alphabetic (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_other_default_ignorable_code_point.c������������������0000664�0000000�0000000�00000002237�11671051007�0030374�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x034F, 0x034F }, { 0x115F, 0x1160 }, { 0x2065, 0x2069 }, { 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-20111211-stable/tests/unictype/test-pr_other_grapheme_extend.c�������������������������������0000664�0000000�0000000�00000002436�11671051007�0025663�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 <http://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, 0x200D }, { 0xFF9E, 0xFF9F }, { 0x1D165, 0x1D165 }, { 0x1D16E, 0x1D172 } #define PREDICATE(c) uc_is_property_other_grapheme_extend (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_other_id_continue.c�����������������������������������0000664�0000000�0000000�00000001766�11671051007�0025031�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 <http://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-20111211-stable/tests/unictype/test-pr_other_id_start.c��������������������������������������0000664�0000000�0000000�00000001733�11671051007�0024334�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x2118, 0x2118 }, { 0x212E, 0x212E }, { 0x309B, 0x309C } #define PREDICATE(c) uc_is_property_other_id_start (c) #include "test-predicate-part2.h" �������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_other_lowercase.c�������������������������������������0000664�0000000�0000000�00000002314�11671051007�0024503�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x02B0, 0x02B8 }, { 0x02C0, 0x02C1 }, { 0x02E0, 0x02E4 }, { 0x0345, 0x0345 }, { 0x037A, 0x037A }, { 0x1D2C, 0x1D61 }, { 0x1D78, 0x1D78 }, { 0x1D9B, 0x1DBF }, { 0x2090, 0x2094 }, { 0x2170, 0x217F }, { 0x24D0, 0x24E9 }, { 0x2C7D, 0x2C7D }, { 0xA770, 0xA770 } #define PREDICATE(c) uc_is_property_other_lowercase (c) #include "test-predicate-part2.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_other_math.c������������������������������������������0000664�0000000�0000000�00000006455�11671051007�0023462�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 <http://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 }, { 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 } #define PREDICATE(c) uc_is_property_other_math (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_other_uppercase.c�������������������������������������0000664�0000000�0000000�00000001704�11671051007�0024510�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x2160, 0x216F }, { 0x24B6, 0x24CF } #define PREDICATE(c) uc_is_property_other_uppercase (c) #include "test-predicate-part2.h" ������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_paired_punctuation.c����������������������������������0000664�0000000�0000000�00000003037�11671051007�0025216�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 <http://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-20111211-stable/tests/unictype/test-pr_paragraph_separator.c���������������������������������0000664�0000000�0000000�00000001660�11671051007�0025346�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 <http://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-20111211-stable/tests/unictype/test-pr_pattern_syntax.c��������������������������������������0000664�0000000�0000000�00000003063�11671051007�0024403�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 <http://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-20111211-stable/tests/unictype/test-pr_pattern_white_space.c���������������������������������0000664�0000000�0000000�00000002020�11671051007�0025340�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 <http://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-20111211-stable/tests/unictype/test-pr_private_use.c�����������������������������������������0000664�0000000�0000000�00000001736�11671051007�0023653�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 <http://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-20111211-stable/tests/unictype/test-pr_punctuation.c�����������������������������������������0000664�0000000�0000000�00000010042�11671051007�0023664�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 <http://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 }, { 0x00AB, 0x00AB }, { 0x00B7, 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 }, { 0x0DF4, 0x0DF4 }, { 0x0E4F, 0x0E4F }, { 0x0E5A, 0x0E5B }, { 0x0F04, 0x0F12 }, { 0x0F3A, 0x0F3D }, { 0x0F85, 0x0F85 }, { 0x0FD0, 0x0FD4 }, { 0x0FD9, 0x0FDA }, { 0x104A, 0x104F }, { 0x10FB, 0x10FB }, { 0x1361, 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 }, { 0x1CD3, 0x1CD3 }, { 0x2010, 0x2027 }, { 0x2030, 0x2043 }, { 0x2045, 0x2051 }, { 0x2053, 0x205E }, { 0x207D, 0x207E }, { 0x208D, 0x208E }, { 0x2329, 0x232A }, { 0x2768, 0x2775 }, { 0x27C5, 0x27C6 }, { 0x27E6, 0x27EF }, { 0x2983, 0x2998 }, { 0x29D8, 0x29DB }, { 0x29FC, 0x29FD }, { 0x2CF9, 0x2CFC }, { 0x2CFE, 0x2CFF }, { 0x2D70, 0x2D70 }, { 0x2E00, 0x2E2E }, { 0x2E30, 0x2E31 }, { 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 }, { 0xA92E, 0xA92F }, { 0xA95F, 0xA95F }, { 0xA9C1, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xAA5C, 0xAA5F }, { 0xAADE, 0xAADF }, { 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, 0x10101 }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x10857, 0x10857 }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x10A50, 0x10A58 }, { 0x10A7F, 0x10A7F }, { 0x10B39, 0x10B3F }, { 0x11047, 0x1104D }, { 0x110BB, 0x110BC }, { 0x110BE, 0x110C1 }, { 0x12470, 0x12473 } #define PREDICATE(c) uc_is_property_punctuation (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_quotation_mark.c��������������������������������������0000664�0000000�0000000�00000002263�11671051007�0024356�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0022, 0x0022 }, { 0x0027, 0x0027 }, { 0x00AB, 0x00AB }, { 0x00BB, 0x00BB }, { 0x2018, 0x201F }, { 0x2039, 0x203A }, { 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-20111211-stable/tests/unictype/test-pr_radical.c���������������������������������������������0000664�0000000�0000000�00000001724�11671051007�0022721�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 <http://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-20111211-stable/tests/unictype/test-pr_sentence_terminal.c�����������������������������������0000664�0000000�0000000�00000004004�11671051007�0025013�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0021, 0x0021 }, { 0x002E, 0x002E }, { 0x003F, 0x003F }, { 0x055C, 0x055C }, { 0x055E, 0x055E }, { 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 }, { 0x3002, 0x3002 }, { 0xA4FF, 0xA4FF }, { 0xA60E, 0xA60F }, { 0xA6F3, 0xA6F3 }, { 0xA6F7, 0xA6F7 }, { 0xA876, 0xA877 }, { 0xA8CE, 0xA8CF }, { 0xA92F, 0xA92F }, { 0xA9C8, 0xA9C9 }, { 0xAA5D, 0xAA5F }, { 0xABEB, 0xABEB }, { 0xFE52, 0xFE52 }, { 0xFE56, 0xFE57 }, { 0xFF01, 0xFF01 }, { 0xFF0E, 0xFF0E }, { 0xFF1F, 0xFF1F }, { 0xFF61, 0xFF61 }, { 0x10A56, 0x10A57 }, { 0x11047, 0x11048 }, { 0x110BE, 0x110C1 } #define PREDICATE(c) uc_is_property_sentence_terminal (c) #include "test-predicate-part2.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_soft_dotted.c�����������������������������������������0000664�0000000�0000000�00000003222�11671051007�0023633�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 <http://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-20111211-stable/tests/unictype/test-pr_space.c�����������������������������������������������0000664�0000000�0000000�00000002112�11671051007�0022405�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0020, 0x0020 }, { 0x00A0, 0x00A0 }, { 0x1680, 0x1680 }, { 0x180E, 0x180E }, { 0x2000, 0x200A }, { 0x202F, 0x202F }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_property_space (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_terminal_punctuation.c��������������������������������0000664�0000000�0000000�00000004761�11671051007�0025572�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 <http://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 }, { 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 }, { 0x3001, 0x3002 }, { 0xA4FE, 0xA4FF }, { 0xA60D, 0xA60F }, { 0xA6F3, 0xA6F7 }, { 0xA876, 0xA877 }, { 0xA8CE, 0xA8CF }, { 0xA92F, 0xA92F }, { 0xA9C7, 0xA9C9 }, { 0xAA5D, 0xAA5F }, { 0xAADF, 0xAADF }, { 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 }, { 0x10B3A, 0x10B3F }, { 0x11047, 0x1104D }, { 0x110BE, 0x110C1 }, { 0x12470, 0x12473 } #define PREDICATE(c) uc_is_property_terminal_punctuation (c) #include "test-predicate-part2.h" ���������������gnulib-20111211-stable/tests/unictype/test-pr_test.c������������������������������������������������0000664�0000000�0000000�00000002010�11671051007�0022266�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 <http://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-20111211-stable/tests/unictype/test-pr_titlecase.c�������������������������������������������0000664�0000000�0000000�00000002176�11671051007�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 <http://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-20111211-stable/tests/unictype/test-pr_unassigned_code_value.c�������������������������������0000664�0000000�0000000�00000032212�11671051007�0025644�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0378, 0x0379 }, { 0x037F, 0x0383 }, { 0x038B, 0x038B }, { 0x038D, 0x038D }, { 0x03A2, 0x03A2 }, { 0x0528, 0x0530 }, { 0x0557, 0x0558 }, { 0x0560, 0x0560 }, { 0x0588, 0x0588 }, { 0x058B, 0x0590 }, { 0x05C8, 0x05CF }, { 0x05EB, 0x05EF }, { 0x05F5, 0x05FF }, { 0x0604, 0x0605 }, { 0x061C, 0x061D }, { 0x070E, 0x070E }, { 0x074B, 0x074C }, { 0x07B2, 0x07BF }, { 0x07FB, 0x07FF }, { 0x082E, 0x082F }, { 0x083F, 0x083F }, { 0x085C, 0x085D }, { 0x085F, 0x08FF }, { 0x0978, 0x0978 }, { 0x0980, 0x0980 }, { 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 }, { 0x0AF0, 0x0AF0 }, { 0x0AF2, 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, 0x0C00 }, { 0x0C04, 0x0C04 }, { 0x0C0D, 0x0C0D }, { 0x0C11, 0x0C11 }, { 0x0C29, 0x0C29 }, { 0x0C34, 0x0C34 }, { 0x0C3A, 0x0C3C }, { 0x0C45, 0x0C45 }, { 0x0C49, 0x0C49 }, { 0x0C4E, 0x0C54 }, { 0x0C57, 0x0C57 }, { 0x0C5A, 0x0C5F }, { 0x0C64, 0x0C65 }, { 0x0C70, 0x0C77 }, { 0x0C80, 0x0C81 }, { 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, 0x0D01 }, { 0x0D04, 0x0D04 }, { 0x0D0D, 0x0D0D }, { 0x0D11, 0x0D11 }, { 0x0D3B, 0x0D3C }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 }, { 0x0D4F, 0x0D56 }, { 0x0D58, 0x0D5F }, { 0x0D64, 0x0D65 }, { 0x0D76, 0x0D78 }, { 0x0D80, 0x0D81 }, { 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 }, { 0x0DBC, 0x0DBC }, { 0x0DBE, 0x0DBF }, { 0x0DC7, 0x0DC9 }, { 0x0DCB, 0x0DCE }, { 0x0DD5, 0x0DD5 }, { 0x0DD7, 0x0DD7 }, { 0x0DE0, 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 }, { 0x0EDE, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 }, { 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD }, { 0x0FDB, 0x0FFF }, { 0x10C6, 0x10CF }, { 0x10FD, 0x10FF }, { 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 }, { 0x13F5, 0x13FF }, { 0x169D, 0x169F }, { 0x16F1, 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 }, { 0x191D, 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, 0x1AFF }, { 0x1B4C, 0x1B4F }, { 0x1B7D, 0x1B7F }, { 0x1BAB, 0x1BAD }, { 0x1BBA, 0x1BBF }, { 0x1BF4, 0x1BFB }, { 0x1C38, 0x1C3A }, { 0x1C4A, 0x1C4C }, { 0x1C80, 0x1CCF }, { 0x1CF3, 0x1CFF }, { 0x1DE7, 0x1DFB }, { 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, 0x2069 }, { 0x2072, 0x2073 }, { 0x208F, 0x208F }, { 0x209D, 0x209F }, { 0x20BA, 0x20CF }, { 0x20F1, 0x20FF }, { 0x218A, 0x218F }, { 0x23F4, 0x23FF }, { 0x2427, 0x243F }, { 0x244B, 0x245F }, { 0x2700, 0x2700 }, { 0x27CB, 0x27CB }, { 0x27CD, 0x27CD }, { 0x2B4D, 0x2B4F }, { 0x2B5A, 0x2BFF }, { 0x2C2F, 0x2C2F }, { 0x2C5F, 0x2C5F }, { 0x2CF2, 0x2CF8 }, { 0x2D26, 0x2D2F }, { 0x2D66, 0x2D6E }, { 0x2D71, 0x2D7E }, { 0x2D97, 0x2D9F }, { 0x2DA7, 0x2DA7 }, { 0x2DAF, 0x2DAF }, { 0x2DB7, 0x2DB7 }, { 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF }, { 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E32, 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 }, { 0x9FCC, 0x9FFF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA62C, 0xA63F }, { 0xA674, 0xA67B }, { 0xA698, 0xA69F }, { 0xA6F8, 0xA6FF }, { 0xA78F, 0xA78F }, { 0xA792, 0xA79F }, { 0xA7AA, 0xA7F9 }, { 0xA82C, 0xA82F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA8C5, 0xA8CD }, { 0xA8DA, 0xA8DF }, { 0xA8FC, 0xA8FF }, { 0xA954, 0xA95E }, { 0xA97D, 0xA97F }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9E0, 0xA9FF }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA5A, 0xAA5B }, { 0xAA7C, 0xAA7F }, { 0xAAC3, 0xAADA }, { 0xAAE0, 0xAB00 }, { 0xAB07, 0xAB08 }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB27, 0xAB27 }, { 0xAB2F, 0xABBF }, { 0xABEE, 0xABEF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xD7C7, 0xD7CA }, { 0xD7FC, 0xD7FF }, { 0xFA2E, 0xFA2F }, { 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 }, { 0xFE27, 0xFE2F }, { 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 }, { 0x1018B, 0x1018F }, { 0x1019C, 0x101CF }, { 0x101FE, 0x1027F }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102FF }, { 0x1031F, 0x1031F }, { 0x10324, 0x1032F }, { 0x1034B, 0x1037F }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x103D6, 0x103FF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x107FF }, { 0x10806, 0x10807 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10839, 0x1083B }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x10860, 0x108FF }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x10940, 0x109FF }, { 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A18, 0x10A18 }, { 0x10A34, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A48, 0x10A4F }, { 0x10A59, 0x10A5F }, { 0x10A80, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10B56, 0x10B57 }, { 0x10B73, 0x10B77 }, { 0x10B80, 0x10BFF }, { 0x10C49, 0x10E5F }, { 0x10E7F, 0x10FFF }, { 0x1104E, 0x11051 }, { 0x11070, 0x1107F }, { 0x110C2, 0x11FFF }, { 0x1236F, 0x123FF }, { 0x12463, 0x1246F }, { 0x12474, 0x12FFF }, { 0x1342F, 0x167FF }, { 0x16A39, 0x1AFFF }, { 0x1B002, 0x1CFFF }, { 0x1D0F6, 0x1D0FF }, { 0x1D127, 0x1D128 }, { 0x1D1DE, 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 }, { 0x1D800, 0x1EFFF }, { 0x1F02C, 0x1F02F }, { 0x1F094, 0x1F09F }, { 0x1F0AF, 0x1F0B0 }, { 0x1F0BF, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0E0, 0x1F0FF }, { 0x1F10B, 0x1F10F }, { 0x1F12F, 0x1F12F }, { 0x1F16A, 0x1F16F }, { 0x1F19B, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23B, 0x1F23F }, { 0x1F249, 0x1F24F }, { 0x1F252, 0x1F2FF }, { 0x1F321, 0x1F32F }, { 0x1F336, 0x1F336 }, { 0x1F37D, 0x1F37F }, { 0x1F394, 0x1F39F }, { 0x1F3C5, 0x1F3C5 }, { 0x1F3CB, 0x1F3DF }, { 0x1F3F1, 0x1F3FF }, { 0x1F43F, 0x1F43F }, { 0x1F441, 0x1F441 }, { 0x1F4F8, 0x1F4F8 }, { 0x1F4FD, 0x1F4FF }, { 0x1F53E, 0x1F54F }, { 0x1F568, 0x1F5FA }, { 0x1F600, 0x1F600 }, { 0x1F611, 0x1F611 }, { 0x1F615, 0x1F615 }, { 0x1F617, 0x1F617 }, { 0x1F619, 0x1F619 }, { 0x1F61B, 0x1F61B }, { 0x1F61F, 0x1F61F }, { 0x1F626, 0x1F627 }, { 0x1F62C, 0x1F62C }, { 0x1F62E, 0x1F62F }, { 0x1F634, 0x1F634 }, { 0x1F641, 0x1F644 }, { 0x1F650, 0x1F67F }, { 0x1F6C6, 0x1F6FF }, { 0x1F774, 0x1FFFD }, { 0x2A6D7, 0x2A6FF }, { 0x2B735, 0x2B73F }, { 0x2B81E, 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-20111211-stable/tests/unictype/test-pr_unified_ideograph.c�����������������������������������0000664�0000000�0000000�00000002274�11671051007�0024770�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x3400, 0x4DB5 }, { 0x4E00, 0x9FCB }, { 0xFA0E, 0xFA0F }, { 0xFA11, 0xFA11 }, { 0xFA13, 0xFA14 }, { 0xFA1F, 0xFA1F }, { 0xFA21, 0xFA21 }, { 0xFA23, 0xFA24 }, { 0xFA27, 0xFA29 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D } #define PREDICATE(c) uc_is_property_unified_ideograph (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_uppercase.c�������������������������������������������0000664�0000000�0000000�00000036206�11671051007�0023314�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 <http://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 }, { 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 }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 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 }, { 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 }, { 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 }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 }, { 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 } #define PREDICATE(c) uc_is_property_uppercase (c) #include "test-predicate-part2.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_variation_selector.c����������������������������������0000664�0000000�0000000�00000001741�11671051007�0025215�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 <http://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-20111211-stable/tests/unictype/test-pr_white_space.c�����������������������������������������0000664�0000000�0000000�00000002230�11671051007�0023606�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0009, 0x000D }, { 0x0020, 0x0020 }, { 0x0085, 0x0085 }, { 0x00A0, 0x00A0 }, { 0x1680, 0x1680 }, { 0x180E, 0x180E }, { 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-20111211-stable/tests/unictype/test-pr_xid_continue.c����������������������������������������0000664�0000000�0000000�00000032433�11671051007�0024013�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 <http://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 }, { 0x0386, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x0483, 0x0487 }, { 0x048A, 0x0527 }, { 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 }, { 0x0900, 0x0963 }, { 0x0966, 0x096F }, { 0x0971, 0x0977 }, { 0x0979, 0x097F }, { 0x0981, 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 }, { 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 }, { 0x0C01, 0x0C03 }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C82, 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 }, { 0x0D02, 0x0D03 }, { 0x0D05, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4E }, { 0x0D57, 0x0D57 }, { 0x0D60, 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 }, { 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FA }, { 0x10FC, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F0 }, { 0x1700, 0x170C }, { 0x170E, 0x1714 }, { 0x1720, 0x1734 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17B3 }, { 0x17B6, 0x17D3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x180B, 0x180D }, { 0x1810, 0x1819 }, { 0x1820, 0x1877 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191C }, { 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 }, { 0x1B00, 0x1B4B }, { 0x1B50, 0x1B59 }, { 0x1B6B, 0x1B73 }, { 0x1B80, 0x1BAA }, { 0x1BAE, 0x1BB9 }, { 0x1BC0, 0x1BF3 }, { 0x1C00, 0x1C37 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1CD0, 0x1CD2 }, { 0x1CD4, 0x1CF2 }, { 0x1D00, 0x1DE6 }, { 0x1DFC, 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, 0x2CF1 }, { 0x2D00, 0x2D25 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66F }, { 0xA67C, 0xA67D }, { 0xA67F, 0xA697 }, { 0xA6A0, 0xA6F1 }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA827 }, { 0xA840, 0xA873 }, { 0xA880, 0xA8C4 }, { 0xA8D0, 0xA8D9 }, { 0xA8E0, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA900, 0xA92D }, { 0xA930, 0xA953 }, { 0xA960, 0xA97C }, { 0xA980, 0xA9C0 }, { 0xA9CF, 0xA9D9 }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7B }, { 0xAA80, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABEA }, { 0xABEC, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0xFE26 }, { 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 }, { 0x10300, 0x1031E }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11000, 0x11046 }, { 0x11066, 0x1106F }, { 0x11080, 0x110BA }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 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 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D }, { 0xE0100, 0xE01EF } #define PREDICATE(c) uc_is_property_xid_continue (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_xid_start.c�������������������������������������������0000664�0000000�0000000�00000026704�11671051007�0023330�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 <http://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 }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x0527 }, { 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 }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0971, 0x0977 }, { 0x0979, 0x097F }, { 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 }, { 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, 0x0C33 }, { 0x0C35, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C59 }, { 0x0C60, 0x0C61 }, { 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 }, { 0x0D60, 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, 0x0EDD }, { 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 }, { 0x10D0, 0x10FA }, { 0x10FC, 0x10FC }, { 0x1100, 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, 0x13F4 }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F0 }, { 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, 0x191C }, { 0x1950, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19C1, 0x19C7 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4B }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BAF }, { 0x1BC0, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C4D, 0x1C4F }, { 0x1C5A, 0x1C7D }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF1 }, { 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 }, { 0x2D00, 0x2D25 }, { 0x2D30, 0x2D65 }, { 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, 0x9FCB }, { 0xA000, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA61F }, { 0xA62A, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA697 }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA78E }, { 0xA790, 0xA791 }, { 0xA7A0, 0xA7A9 }, { 0xA7FA, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA90A, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9CF }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA80, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xABC0, 0xABE2 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA2D }, { 0xFA30, 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, 0x1031E }, { 0x10330, 0x1034A }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A33 }, { 0x10A60, 0x10A7C }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10C00, 0x10C48 }, { 0x11003, 0x11037 }, { 0x11083, 0x110AF }, { 0x12000, 0x1236E }, { 0x12400, 0x12462 }, { 0x13000, 0x1342E }, { 0x16800, 0x16A38 }, { 0x1B000, 0x1B001 }, { 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 }, { 0x20000, 0x2A6D6 }, { 0x2A700, 0x2B734 }, { 0x2B740, 0x2B81D }, { 0x2F800, 0x2FA1D } #define PREDICATE(c) uc_is_property_xid_start (c) #include "test-predicate-part2.h" ������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-pr_zero_width.c������������������������������������������0000664�0000000�0000000�00000002377�11671051007�0023505�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 <http://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x00AD, 0x00AD }, { 0x0600, 0x0603 }, { 0x06DD, 0x06DD }, { 0x070F, 0x070F }, { 0x17B4, 0x17B5 }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x206A, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x110BD, 0x110BD }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F } #define PREDICATE(c) uc_is_property_zero_width (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unictype/test-predicate-part1.h����������������������������������������0000664�0000000�0000000�00000002045�11671051007�0023610�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 <http://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-20111211-stable/tests/unictype/test-predicate-part2.h����������������������������������������0000664�0000000�0000000�00000002050�11671051007�0023605�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 <http://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-20111211-stable/tests/unictype/test-scripts.c������������������������������������������������0000664�0000000�0000000�00000004077�11671051007�0022314�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 <http://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-20111211-stable/tests/unictype/test-sy_c_ident.c���������������������������������������������0000664�0000000�0000000�00000002444�11671051007�0022741�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 <http://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-20111211-stable/tests/unictype/test-sy_c_whitespace.c����������������������������������������0000664�0000000�0000000�00000001670�11671051007�0023772�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 <http://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-20111211-stable/tests/unictype/test-sy_java_ident.c������������������������������������������0000664�0000000�0000000�00000002475�11671051007�0023444�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 <http://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-20111211-stable/tests/unictype/test-sy_java_whitespace.c�������������������������������������0000664�0000000�0000000�00000001723�11671051007�0024470�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 <http://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-20111211-stable/tests/unigbrk/���������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017275�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unigbrk/GraphemeBreakTest.txt������������������������������������������0000664�0000000�0000000�00000111167�11671051007�0023402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# GraphemeBreakTest-6.0.0.txt # Date: 2010-05-18, 00:49:27 GMT [MD] # # Unicode Character Database # Copyright (c) 1991-2010 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # 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_Break property* 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 ÷ 0E40 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 0020 × 0308 ÷ 0E40 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 000D ÷ 0308 ÷ 0E40 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 000A ÷ 0308 ÷ 0E40 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 0001 ÷ 0308 ÷ 0E40 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 0300 × 0308 ÷ 0E40 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 0E40 × 0020 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.2] SPACE (Other) ÷ [0.3] ÷ 0E40 × 0308 ÷ 0020 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3] ÷ 0E40 ÷ 000D ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0E40 × 0308 ÷ 000D ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] ÷ 0E40 ÷ 000A ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0E40 × 0308 ÷ 000A ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] ÷ 0E40 ÷ 0001 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0E40 × 0308 ÷ 0001 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] ÷ 0E40 × 0300 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0E40 × 0308 × 0300 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3] ÷ 0E40 × 0E40 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.2] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 0E40 × 0308 ÷ 0E40 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 0E40 × 0903 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0E40 × 0308 × 0903 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] ÷ 0E40 × 1100 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0E40 × 0308 ÷ 1100 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] ÷ 0E40 × 1160 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0E40 × 0308 ÷ 1160 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] ÷ 0E40 × 11A8 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0E40 × 0308 ÷ 11A8 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] ÷ 0E40 × AC00 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0E40 × 0308 ÷ AC00 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] ÷ 0E40 × AC01 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] ÷ 0E40 × 0308 ÷ AC01 ÷ # ÷ [0.2] THAI CHARACTER SARA E (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [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 ÷ 0E40 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 0903 × 0308 ÷ 0E40 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 1100 × 0308 ÷ 0E40 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 1160 × 0308 ÷ 0E40 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ 11A8 × 0308 ÷ 0E40 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ AC00 × 0308 ÷ 0E40 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] ÷ 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 ÷ 0E40 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] THAI CHARACTER SARA E (Prepend) ÷ [0.3] ÷ AC01 × 0308 ÷ 0E40 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] THAI CHARACTER SARA E (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] # Lines: 288 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unigbrk/test-u16-grapheme-breaks.c�������������������������������������0000664�0000000�0000000�00000005530�11671051007�0024067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks test. Copyright (C) 2010-2011 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 <http://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-20111211-stable/tests/unigbrk/test-u16-grapheme-next.c���������������������������������������0000664�0000000�0000000�00000005536�11671051007�0023604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster length test. Copyright (C) 2010-2011 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 <http://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-20111211-stable/tests/unigbrk/test-u16-grapheme-prev.c���������������������������������������0000664�0000000�0000000�00000005603�11671051007�0023575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster test. Copyright (C) 2010-2011 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 <http://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-20111211-stable/tests/unigbrk/test-u32-grapheme-breaks.c�������������������������������������0000664�0000000�0000000�00000005530�11671051007�0024065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks test. Copyright (C) 2010-2011 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 <http://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-20111211-stable/tests/unigbrk/test-u32-grapheme-next.c���������������������������������������0000664�0000000�0000000�00000005566�11671051007�0023605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster length test. Copyright (C) 2010-2011 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 <http://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-20111211-stable/tests/unigbrk/test-u32-grapheme-prev.c���������������������������������������0000664�0000000�0000000�00000005633�11671051007�0023576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster test. Copyright (C) 2010-2011 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 <http://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-20111211-stable/tests/unigbrk/test-u8-grapheme-breaks.c��������������������������������������0000664�0000000�0000000�00000005261�11671051007�0024011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks test. Copyright (C) 2010, 2011 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 <http://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-20111211-stable/tests/unigbrk/test-u8-grapheme-next.c����������������������������������������0000664�0000000�0000000�00000004622�11671051007�0023520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Next grapheme cluster length test. Copyright (C) 2010, 2011 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 <http://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-20111211-stable/tests/unigbrk/test-u8-grapheme-prev.c����������������������������������������0000664�0000000�0000000�00000004657�11671051007�0023526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Previous grapheme cluster test. Copyright (C) 2010, 2011 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 <http://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-20111211-stable/tests/unigbrk/test-uc-gbrk-prop.c��������������������������������������������0000664�0000000�0000000�00000003751�11671051007�0022734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode grapheme break property function. Copyright (C) 2010, 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 <http://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) } 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-20111211-stable/tests/unigbrk/test-uc-gbrk-prop.h��������������������������������������������0000664�0000000�0000000�00000075105�11671051007�0022743�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 <http://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 }, { 0x0604, GBP_CONTROL }, { 0x0610, GBP_OTHER }, { 0x061B, GBP_EXTEND }, { 0x064B, GBP_OTHER }, { 0x0660, GBP_EXTEND }, { 0x0670, GBP_OTHER }, { 0x0671, GBP_EXTEND }, { 0x06D6, GBP_OTHER }, { 0x06DD, GBP_EXTEND }, { 0x06DE, GBP_CONTROL }, { 0x06DF, GBP_OTHER }, { 0x06E5, GBP_EXTEND }, { 0x06E7, GBP_OTHER }, { 0x06E9, GBP_EXTEND }, { 0x06EA, GBP_OTHER }, { 0x06EE, GBP_EXTEND }, { 0x070F, GBP_OTHER }, { 0x0710, GBP_CONTROL }, { 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 }, { 0x0900, GBP_OTHER }, { 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 }, { 0x0C01, GBP_OTHER }, { 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 }, { 0x0C82, GBP_OTHER }, { 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 }, { 0x0D02, GBP_OTHER }, { 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 }, { 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 }, { 0x0E30, GBP_OTHER }, { 0x0E31, GBP_SPACINGMARK }, { 0x0E32, GBP_EXTEND }, { 0x0E34, GBP_SPACINGMARK }, { 0x0E3B, GBP_EXTEND }, { 0x0E40, GBP_OTHER }, { 0x0E45, GBP_PREPEND }, { 0x0E46, GBP_SPACINGMARK }, { 0x0E47, GBP_OTHER }, { 0x0E4F, GBP_EXTEND }, { 0x0EB0, GBP_OTHER }, { 0x0EB1, GBP_SPACINGMARK }, { 0x0EB2, GBP_EXTEND }, { 0x0EB4, GBP_SPACINGMARK }, { 0x0EBA, GBP_EXTEND }, { 0x0EBB, GBP_OTHER }, { 0x0EBD, GBP_EXTEND }, { 0x0EC0, GBP_OTHER }, { 0x0EC5, GBP_PREPEND }, { 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 }, { 0x102B, GBP_OTHER }, { 0x102D, GBP_SPACINGMARK }, { 0x1031, GBP_EXTEND }, { 0x1032, GBP_SPACINGMARK }, { 0x1038, GBP_EXTEND }, { 0x1039, GBP_SPACINGMARK }, { 0x103B, GBP_EXTEND }, { 0x103D, GBP_SPACINGMARK }, { 0x103F, GBP_EXTEND }, { 0x1056, GBP_OTHER }, { 0x1058, GBP_SPACINGMARK }, { 0x105A, GBP_EXTEND }, { 0x105E, GBP_OTHER }, { 0x1061, GBP_EXTEND }, { 0x1062, GBP_OTHER }, { 0x1065, GBP_SPACINGMARK }, { 0x1067, GBP_OTHER }, { 0x106E, GBP_SPACINGMARK }, { 0x1071, GBP_OTHER }, { 0x1075, GBP_EXTEND }, { 0x1082, GBP_OTHER }, { 0x1083, GBP_EXTEND }, { 0x1085, GBP_SPACINGMARK }, { 0x1087, GBP_EXTEND }, { 0x108D, GBP_SPACINGMARK }, { 0x108E, GBP_EXTEND }, { 0x108F, GBP_OTHER }, { 0x1090, GBP_SPACINGMARK }, { 0x109A, GBP_OTHER }, { 0x109D, GBP_SPACINGMARK }, { 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_CONTROL }, { 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 }, { 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 }, { 0x19B0, GBP_OTHER }, { 0x19C1, GBP_SPACINGMARK }, { 0x19C8, GBP_OTHER }, { 0x19CA, GBP_SPACINGMARK }, { 0x1A17, GBP_OTHER }, { 0x1A19, GBP_EXTEND }, { 0x1A1C, GBP_SPACINGMARK }, { 0x1A55, GBP_OTHER }, { 0x1A56, GBP_SPACINGMARK }, { 0x1A57, GBP_EXTEND }, { 0x1A58, GBP_SPACINGMARK }, { 0x1A5F, GBP_EXTEND }, { 0x1A60, GBP_OTHER }, { 0x1A61, GBP_EXTEND }, { 0x1A62, GBP_SPACINGMARK }, { 0x1A63, GBP_EXTEND }, { 0x1A65, GBP_SPACINGMARK }, { 0x1A6D, GBP_EXTEND }, { 0x1A73, GBP_SPACINGMARK }, { 0x1A7D, GBP_EXTEND }, { 0x1A7F, GBP_OTHER }, { 0x1A80, 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 }, { 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 }, { 0x1CF3, GBP_SPACINGMARK }, { 0x1DC0, GBP_OTHER }, { 0x1DE7, GBP_EXTEND }, { 0x1DFC, GBP_OTHER }, { 0x1E00, GBP_EXTEND }, { 0x200B, GBP_OTHER }, { 0x200C, GBP_CONTROL }, { 0x200E, GBP_EXTEND }, { 0x2010, GBP_CONTROL }, { 0x2028, GBP_OTHER }, { 0x202F, GBP_CONTROL }, { 0x2060, GBP_OTHER }, { 0x2065, GBP_CONTROL }, { 0x206A, GBP_OTHER }, { 0x2070, GBP_CONTROL }, { 0x20D0, GBP_OTHER }, { 0x20F1, GBP_EXTEND }, { 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 }, { 0xA67C, GBP_OTHER }, { 0xA67E, 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 }, { 0xA8C5, 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 }, { 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 }, { 0xAA7B, GBP_OTHER }, { 0xAA7C, GBP_SPACINGMARK }, { 0xAAB0, GBP_OTHER }, { 0xAAB1, GBP_EXTEND }, { 0xAAB2, GBP_OTHER }, { 0xAAB5, GBP_EXTEND }, { 0xAAB7, GBP_PREPEND }, { 0xAAB9, GBP_EXTEND }, { 0xAABA, GBP_PREPEND }, { 0xAABB, GBP_OTHER }, { 0xAABD, GBP_PREPEND }, { 0xAABE, GBP_OTHER }, { 0xAAC0, GBP_EXTEND }, { 0xAAC1, GBP_OTHER }, { 0xAAC2, 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 }, { 0xFB1E, GBP_OTHER }, { 0xFB1F, GBP_EXTEND }, { 0xFE00, GBP_OTHER }, { 0xFE10, GBP_EXTEND }, { 0xFE20, GBP_OTHER }, { 0xFE27, GBP_EXTEND }, { 0xFEFF, GBP_OTHER }, { 0xFF00, GBP_CONTROL }, { 0xFF9E, GBP_OTHER }, { 0xFFA0, GBP_EXTEND }, { 0xFFF9, GBP_OTHER }, { 0xFFFC, GBP_CONTROL }, { 0x101FD, GBP_OTHER }, { 0x101FE, 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 }, { 0x11000, GBP_OTHER }, { 0x11001, GBP_SPACINGMARK }, { 0x11002, GBP_EXTEND }, { 0x11003, GBP_SPACINGMARK }, { 0x11038, GBP_OTHER }, { 0x11047, GBP_EXTEND }, { 0x11080, 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_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 }, { 0xE0001, GBP_OTHER }, { 0xE0002, GBP_CONTROL }, { 0xE0020, GBP_OTHER }, { 0xE0080, GBP_CONTROL }, { 0xE0100, GBP_OTHER }, { 0xE01F0, GBP_EXTEND }, { 0x110000, GBP_OTHER } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unigbrk/test-uc-is-grapheme-break.c������������������������������������0000664�0000000�0000000�00000010027�11671051007�0024306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster break function test. Copyright (C) 2010-2011 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 <http://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) } 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; lineno++; comment = strchr (line, '#'); if (comment != NULL) *comment = '\0'; if (line[strspn (line, " \t\r\n")] == '\0') continue; 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 (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; } while (*p != '\0'); } return exit_code; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unigbrk/test-uc-is-grapheme-break.sh�����������������������������������0000775�0000000�0000000�00000000132�11671051007�0024475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh ./test-uc-is-grapheme-break${EXEEXT} "${srcdir}/unigbrk/GraphemeBreakTest.txt" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unigbrk/test-ulc-grapheme-breaks.c�������������������������������������0000664�0000000�0000000�00000004635�11671051007�0024244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Grapheme cluster breaks test. Copyright (C) 2009, 2010, 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 <http://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-20111211-stable/tests/unigbrk/test-ulc-grapheme-breaks.sh������������������������������������0000775�0000000�0000000�00000000540�11671051007�0024426�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 \ ./test-ulc-grapheme-breaks${EXEEXT} ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unilbrk/���������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017302�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unilbrk/test-u16-possible-linebreaks.c���������������������������������0000664�0000000�0000000�00000006446�11671051007�0025003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-16 strings. Copyright (C) 2008-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 <http://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-20111211-stable/tests/unilbrk/test-u16-width-linebreaks.c������������������������������������0000664�0000000�0000000�00000004561�11671051007�0024276�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-16 strings. Copyright (C) 2008-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 <http://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-20111211-stable/tests/unilbrk/test-u32-possible-linebreaks.c���������������������������������0000664�0000000�0000000�00000006446�11671051007�0025001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-32 strings. Copyright (C) 2008-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 <http://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-20111211-stable/tests/unilbrk/test-u32-width-linebreaks.c������������������������������������0000664�0000000�0000000�00000004561�11671051007�0024274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-32 strings. Copyright (C) 2008-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 <http://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-20111211-stable/tests/unilbrk/test-u8-possible-linebreaks.c����������������������������������0000664�0000000�0000000�00000006155�11671051007�0024721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-8 strings. Copyright (C) 2008-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 <http://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-20111211-stable/tests/unilbrk/test-u8-width-linebreaks.c�������������������������������������0000664�0000000�0000000�00000004302�11671051007�0024210�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of UTF-8 strings. Copyright (C) 2008-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 <http://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-20111211-stable/tests/unilbrk/test-ulc-possible-linebreaks.c���������������������������������0000664�0000000�0000000�00000003067�11671051007�0025147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of strings. Copyright (C) 2008-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 <http://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-20111211-stable/tests/unilbrk/test-ulc-width-linebreaks.c������������������������������������0000664�0000000�0000000�00000003043�11671051007�0024440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of line breaking of strings. Copyright (C) 2008-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 <http://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-20111211-stable/tests/uniname/���������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017270�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uniname/UnicodeDataNames.txt�������������������������������������������0000664�0000000�0000000�00006113573�11671051007�0023215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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;;;;; 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;So;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;Ll;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;So;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;Ll;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;ash *;;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;;Icelandic;;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;;Icelandic;;00FE; 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;; 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;ash *;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;;Icelandic;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;;Icelandic;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;;Greenlandic;;; 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;;Sami;;014B; 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;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;hwair;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;gha;;01A3; 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;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;ash *;;01E3; 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;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;;ash *;;01FD; 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;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;;;;; 0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; 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;;;; 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;;;; 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;;;;; 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;;;;; 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;; 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;;;;; 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;;;; 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;;;;; 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;;;; 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;; 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;Mandarin Chinese third tone;;; 02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;; 02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;Mandarin Chinese first tone;;; 02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;; 02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;; 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;Mandarin Chinese light tone;;; 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;Varia;;; 0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia, Tonos;;; 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;Vrachy;;; 0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; 0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;; 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;Psili;;; 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;; 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;Vietnamese;;; 0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;; 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;Dexia keraia;;; 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;; 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;;Erotimatiko;;; 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;;;;; 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;;Serbocroatian;;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;;Ukrainian;;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;;Serbocroatian;;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;;Byelorussian;;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;;Serbocroatian;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;;Ukrainian;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;;Serbocroatian;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;;Byelorussian;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;Abkhasian;;04A7; 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;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;Abkhasian;;04B5; 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;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 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;;;;; 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;or shuruq;;; 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;;;;; 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;;;;; 061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;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;;;;; 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;Me;0;NSM;;;;;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;BN;;;;;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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;Assamese;;; 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;; 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;N;;;;; 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;; 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;; 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;; 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;; 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; 09FA;BENGALI ISSHAR;So;0;L;;;;;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;;;;; 0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;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;;;;; 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;;Naal;;; 0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;Maatham;;; 0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;Varudam;;; 0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;Patru;;; 0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;Varavu;;; 0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;Merpadi;;; 0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;Rupai;;; 0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;Enn;;; 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;;;;; 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;;;;; 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;;;;; 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;So;0;ON;;;;;N;;;;; 0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;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;;;;; 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;;;;; 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;;;;; 0D57;MALAYALAM AU LENGTH MARK;Mc;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;;;;; 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;;;;; 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;paiyan 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;sara uue;;; 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;sara ai mai muan;;; 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;; 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;; 0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;; 0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;; 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;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;;;;; 0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;; 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;; 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;; 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;; 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;; 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;; 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;; 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;; 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;; 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;; 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;; 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;; 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;; 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;; 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;; 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;; 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;; 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;; 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;; 0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;; 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;; 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;; 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;; 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;; 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;; 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;; 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;; 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;; 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;; 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;; 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;; 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;;du ta;;; 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;; 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;; 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;; 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;; 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;; 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;; 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;; 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;; 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;je su nga ro;;; 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;; 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;nyi da na da;;; 0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;; 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;;ji ta;;; 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;; 0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;; 0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;; 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;; 0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;; 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;;kuruka;;; 0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;; 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;;chang tyu;;; 0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;; 0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;; 0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;; 0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;; 0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;; 0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;; 0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;; 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;; 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;; 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;; 0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;dena deka;;; 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;; 0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;; 0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;; 0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;nyi tsek;;; 0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;da nying yik go dun ma;;; 0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;da nying yik go kab ma;;; 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;;;;; 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;;Khutsuri;;2D00; 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01; 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02; 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03; 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04; 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05; 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06; 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07; 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08; 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09; 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A; 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B; 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C; 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D; 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E; 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F; 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10; 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11; 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12; 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13; 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14; 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15; 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16; 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17; 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18; 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19; 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A; 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B; 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C; 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D; 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E; 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F; 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20; 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21; 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22; 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23; 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24; 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25; 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;;;;; 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;; 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;; 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;; 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;; 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;; 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; 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;;;;; 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;;;;; 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;; 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;; 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;; 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;; 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;; 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;; 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;; 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;; 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;; 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;; 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;; 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;; 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;; 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;; 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; 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;;;;; 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;;;;; 135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; 1360;ETHIOPIC SECTION MARK;So;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;Lo;0;L;;;;;N;;;;; 13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;; 13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;; 13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;; 13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;; 13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;; 13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;; 13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;; 13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;; 13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;; 13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;; 13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;; 13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;; 13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;; 13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;; 13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;; 13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;; 13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;; 13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;; 13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;; 13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;; 13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;; 13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;; 13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;; 13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;; 13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;; 13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;; 13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;; 13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;; 13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;; 13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;; 13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;; 13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;; 13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;; 13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;; 13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;; 13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;; 13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;; 13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;; 13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;; 13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;; 13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;; 13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;; 13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;; 13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;; 13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;; 13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;; 13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;; 13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;; 13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;; 13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;; 13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;; 13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;; 13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;; 13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;; 13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;; 13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;; 13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;; 13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;; 13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;; 13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;; 13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;; 13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;; 13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;; 13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;; 13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;; 13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;; 13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;; 13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;; 13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;; 13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;; 13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;; 13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;; 13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;; 13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;; 13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;; 13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;; 13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;; 13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;; 13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;; 13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;; 13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;; 13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;; 13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;; 13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;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;;;;; 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;;golden number 17;;; 16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;golden number 18;;; 16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;golden number 19;;; 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;Cf;0;L;;;;;N;;*;;; 17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;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;Zs;0;WS;;;;;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;Lo;0;L;;;;;N;;;;; 1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;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;;;;; 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;;;;; 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;;;;; 19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;; 19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;; 19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;; 19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;; 19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;; 19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;; 19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; 19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;; 19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;; 19C0;NEW TAI LUE VOWEL SIGN IY;Mc;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;Mc;0;L;;;;;N;;;;; 19C9;NEW TAI LUE TONE MARK-2;Mc;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;;;;; 19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;; 19DF;NEW TAI LUE SIGN LAEV;Po;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;Mc;0;L;;;;;N;;;;; 1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; 1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;; 1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;; 1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;; 1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;; 1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;; 1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;; 1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;; 1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;; 1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;; 1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;; 1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;; 1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;; 1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;; 1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;; 1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;; 1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;; 1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;; 1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; 1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;; 1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; 1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;; 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;;cha;;; 1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; 1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;; 1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; 1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;; 1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;; 1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;; 1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;; 1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;; 1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; 1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;; 1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; 1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;; 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;;pha;;; 1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; 1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;; 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;;sha;;; 1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;; 1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; 1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; 1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;; 1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;; 1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;; 1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;; 1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;; 1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;; 1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;; 1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;; 1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;; 1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;; 1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;; 1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;; 1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;; 1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;; 1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;; 1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;; 1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;; 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;;section;;; 1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;; 1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;; 1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;; 1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;; 1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;; 1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;; 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;;;;; 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;;;;; 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;;;;; 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;Ll;0;L;<sub> 0069;;;;N;;;;; 1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L;<sub> 0072;;;;N;;;;; 1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L;<sub> 0075;;;;N;;;;; 1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L;<sub> 0076;;;;N;;;;; 1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L;<sub> 03B2;;;;N;;;;; 1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L;<sub> 03B3;;;;N;;;;; 1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L;<sub> 03C1;;;;N;;;;; 1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;; 1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;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;;;;; 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;;Enotikon;;; 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;;;;; 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;Ll;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;Ll;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;;;;; 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;;;;; 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;So;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;;;;; 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;;;;; 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;;lazy S;;; 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;Sm;0;ON;;;;;Y;;;;; 2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;; 230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;; 230B;RIGHT FLOOR;Sm;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;;pause;;; 238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;; 238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;; 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;;mathematical use;;; 23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; 23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; 23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; 23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; 23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; 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;;;;; 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;;pete;;; 2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;hdpe;;; 2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;pvc;;; 2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;ldpe;;; 2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;pp;;; 2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;ps;;; 2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;other;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 274D;SHADOWED WHITE CIRCLE;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;;;;; 2756;BLACK DIAMOND MINUS WHITE X;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;;;;; 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;;;; 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;;;; 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;;;; 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;;;;; 27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;; 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;;not independent;;; 2ADD;NONFORKING;Sm;0;ON;;;;;N;;independent;;; 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;;;;; 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;;;;; 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; 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;Ll;0;L;<sub> 006A;;;;N;;;;; 2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;; 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;;;;; 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;;Khutsuri;10A0;;10A0 2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1 2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2 2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3 2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4 2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5 2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6 2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7 2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8 2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9 2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA 2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB 2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC 2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD 2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE 2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF 2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0 2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1 2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2 2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3 2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4 2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5 2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6 2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7 2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8 2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9 2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA 2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB 2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC 2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD 2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE 2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF 2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0 2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1 2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2 2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3 2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4 2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5 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;;Tuareg yab;;; 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;;Tuareg yaw;;; 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;;Adrar yaj;;; 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;;harpoon yaz;;; 2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; 2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;; 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;;;;; 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;Mn;224;NSM;;;;;N;;;;; 302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;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;Kanbun Tateten;;; 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;; 3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;Kaeriten;;; 3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;Kaeriten;;; 3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;Kaeriten;;; 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;Kaeriten;;; 3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;; 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;; 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;; 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;; 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;; 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;; 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;; 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;; 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;; 319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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 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;;;;; 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 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 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;Ps;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Pe;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;;;;; 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;;halfwidth katakana-hiragana voiced sound mark;;; FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;; 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;;pug;;; 100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;; 100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;gup;;; 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;So;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;;;;; 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;;;;; 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;;;;; 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;;Faliscan;;; 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;;Faliscan;;; 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;;Umbrian;;; 1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;Umbrian;;; 1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;Oscan;;; 1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;Oscan;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;; 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;;;;;N;;;;; 12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;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;;;;;N;;;;; 12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;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;;;;; 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;;;;; 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;;;;; 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;;ren *;;; 1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;; 1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;; 1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;; 1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;; 1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;; 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;L;<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;L;<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;L;<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;L;<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;L;<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;;;;; 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;;;;; 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;;;;; �������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uniname/test-uninames.c������������������������������������������������0000664�0000000�0000000�00000015562�11671051007�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character name functions. Copyright (C) 2000-2003, 2005, 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 <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "xalloc.h" #include "uniname.h" #include "progname.h" /* The names according to the UnicodeData.txt file, modified to contain the Hangul syllable names, as described in the Unicode 3.0 book. */ const char * unicode_names [0x110000]; /* Maximum length of a field in the UnicodeData.txt file. */ #define FIELDLEN 120 /* 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); ) { /* Put c into the buffer. */ if (++count >= FIELDLEN - 1) { fprintf (stderr, "field too long\n"); exit (EXIT_FAILURE); } *buffer++ = c; } if (c == EOF) return 0; *buffer = '\0'; return 1; } /* Stores in unicode_names[] the relevant contents of the UnicodeData.txt file. */ static void fill_names (const char *unicodedata_filename) { unsigned int i; FILE *stream; char field0[FIELDLEN]; char field1[FIELDLEN]; int lineno = 0; for (i = 0; i < 0x110000; i++) unicode_names[i] = NULL; stream = fopen (unicodedata_filename, "r"); if (stream == NULL) { fprintf (stderr, "error during fopen of '%s'\n", unicodedata_filename); exit (EXIT_FAILURE); } for (;;) { int n; int c; lineno++; n = getfield (stream, field0, ';'); n += getfield (stream, field1, ';'); if (n == 0) break; if (n != 2) { fprintf (stderr, "short line in '%s':%d\n", unicodedata_filename, lineno); exit (EXIT_FAILURE); } for (; (c = getc (stream)), (c != EOF && c != '\n'); ) ; 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); } } /* 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 && !(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; } int main (int argc, char *argv[]) { int error = 0; set_program_name (argv[0]); fill_names (argv[1]); error |= test_name_lookup (); error |= test_inverse_lookup (); return error; } ����������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uniname/test-uninames.sh�����������������������������������������������0000775�0000000�0000000�00000000117�11671051007�0022422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-uninames${EXEEXT} "$srcdir/uniname/UnicodeDataNames.txt" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/���������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017323�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/NormalizationTest.txt������������������������������������������0000664�0000000�0000000�00003302123�11671051007�0023556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# NormalizationTest-6.0.0.txt # Date: 2010-05-18, 00:49:30 GMT [MD] # # Unicode Character Database # Copyright (c) 1991-2010 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # Most comments have been stripped from this file. @Part0 1E0A;1E0A;0044 0307;1E0A;0044 0307; 1E0C;1E0C;0044 0323;1E0C;0044 0323; 1E0A 0323;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; 1E0C 0307;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; 0044 0307 0323;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; 0044 0323 0307;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; 1E0A 031B;1E0A 031B;0044 031B 0307;1E0A 031B;0044 031B 0307; 1E0C 031B;1E0C 031B;0044 031B 0323;1E0C 031B;0044 031B 0323; 1E0A 031B 0323;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; 1E0C 031B 0307;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; 0044 031B 0307 0323;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; 0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; 00C8;00C8;0045 0300;00C8;0045 0300; 0112;0112;0045 0304;0112;0045 0304; 0045 0300;00C8;0045 0300;00C8;0045 0300; 0045 0304;0112;0045 0304;0112;0045 0304; 1E14;1E14;0045 0304 0300;1E14;0045 0304 0300; 0112 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; 1E14 0304;1E14 0304;0045 0304 0300 0304;1E14 0304;0045 0304 0300 0304; 0045 0304 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; 0045 0300 0304;00C8 0304;0045 0300 0304;00C8 0304;0045 0300 0304; 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; 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; @Part1 00A0;00A0;00A0;0020;0020; 00A8;00A8;00A8;0020 0308;0020 0308; 00AA;00AA;00AA;0061;0061; 00AF;00AF;00AF;0020 0304;0020 0304; 00B2;00B2;00B2;0032;0032; 00B3;00B3;00B3;0033;0033; 00B4;00B4;00B4;0020 0301;0020 0301; 00B5;00B5;00B5;03BC;03BC; 00B8;00B8;00B8;0020 0327;0020 0327; 00B9;00B9;00B9;0031;0031; 00BA;00BA;00BA;006F;006F; 00BC;00BC;00BC;0031 2044 0034;0031 2044 0034; 00BD;00BD;00BD;0031 2044 0032;0031 2044 0032; 00BE;00BE;00BE;0033 2044 0034;0033 2044 0034; 00C0;00C0;0041 0300;00C0;0041 0300; 00C1;00C1;0041 0301;00C1;0041 0301; 00C2;00C2;0041 0302;00C2;0041 0302; 00C3;00C3;0041 0303;00C3;0041 0303; 00C4;00C4;0041 0308;00C4;0041 0308; 00C5;00C5;0041 030A;00C5;0041 030A; 00C7;00C7;0043 0327;00C7;0043 0327; 00C8;00C8;0045 0300;00C8;0045 0300; 00C9;00C9;0045 0301;00C9;0045 0301; 00CA;00CA;0045 0302;00CA;0045 0302; 00CB;00CB;0045 0308;00CB;0045 0308; 00CC;00CC;0049 0300;00CC;0049 0300; 00CD;00CD;0049 0301;00CD;0049 0301; 00CE;00CE;0049 0302;00CE;0049 0302; 00CF;00CF;0049 0308;00CF;0049 0308; 00D1;00D1;004E 0303;00D1;004E 0303; 00D2;00D2;004F 0300;00D2;004F 0300; 00D3;00D3;004F 0301;00D3;004F 0301; 00D4;00D4;004F 0302;00D4;004F 0302; 00D5;00D5;004F 0303;00D5;004F 0303; 00D6;00D6;004F 0308;00D6;004F 0308; 00D9;00D9;0055 0300;00D9;0055 0300; 00DA;00DA;0055 0301;00DA;0055 0301; 00DB;00DB;0055 0302;00DB;0055 0302; 00DC;00DC;0055 0308;00DC;0055 0308; 00DD;00DD;0059 0301;00DD;0059 0301; 00E0;00E0;0061 0300;00E0;0061 0300; 00E1;00E1;0061 0301;00E1;0061 0301; 00E2;00E2;0061 0302;00E2;0061 0302; 00E3;00E3;0061 0303;00E3;0061 0303; 00E4;00E4;0061 0308;00E4;0061 0308; 00E5;00E5;0061 030A;00E5;0061 030A; 00E7;00E7;0063 0327;00E7;0063 0327; 00E8;00E8;0065 0300;00E8;0065 0300; 00E9;00E9;0065 0301;00E9;0065 0301; 00EA;00EA;0065 0302;00EA;0065 0302; 00EB;00EB;0065 0308;00EB;0065 0308; 00EC;00EC;0069 0300;00EC;0069 0300; 00ED;00ED;0069 0301;00ED;0069 0301; 00EE;00EE;0069 0302;00EE;0069 0302; 00EF;00EF;0069 0308;00EF;0069 0308; 00F1;00F1;006E 0303;00F1;006E 0303; 00F2;00F2;006F 0300;00F2;006F 0300; 00F3;00F3;006F 0301;00F3;006F 0301; 00F4;00F4;006F 0302;00F4;006F 0302; 00F5;00F5;006F 0303;00F5;006F 0303; 00F6;00F6;006F 0308;00F6;006F 0308; 00F9;00F9;0075 0300;00F9;0075 0300; 00FA;00FA;0075 0301;00FA;0075 0301; 00FB;00FB;0075 0302;00FB;0075 0302; 00FC;00FC;0075 0308;00FC;0075 0308; 00FD;00FD;0079 0301;00FD;0079 0301; 00FF;00FF;0079 0308;00FF;0079 0308; 0100;0100;0041 0304;0100;0041 0304; 0101;0101;0061 0304;0101;0061 0304; 0102;0102;0041 0306;0102;0041 0306; 0103;0103;0061 0306;0103;0061 0306; 0104;0104;0041 0328;0104;0041 0328; 0105;0105;0061 0328;0105;0061 0328; 0106;0106;0043 0301;0106;0043 0301; 0107;0107;0063 0301;0107;0063 0301; 0108;0108;0043 0302;0108;0043 0302; 0109;0109;0063 0302;0109;0063 0302; 010A;010A;0043 0307;010A;0043 0307; 010B;010B;0063 0307;010B;0063 0307; 010C;010C;0043 030C;010C;0043 030C; 010D;010D;0063 030C;010D;0063 030C; 010E;010E;0044 030C;010E;0044 030C; 010F;010F;0064 030C;010F;0064 030C; 0112;0112;0045 0304;0112;0045 0304; 0113;0113;0065 0304;0113;0065 0304; 0114;0114;0045 0306;0114;0045 0306; 0115;0115;0065 0306;0115;0065 0306; 0116;0116;0045 0307;0116;0045 0307; 0117;0117;0065 0307;0117;0065 0307; 0118;0118;0045 0328;0118;0045 0328; 0119;0119;0065 0328;0119;0065 0328; 011A;011A;0045 030C;011A;0045 030C; 011B;011B;0065 030C;011B;0065 030C; 011C;011C;0047 0302;011C;0047 0302; 011D;011D;0067 0302;011D;0067 0302; 011E;011E;0047 0306;011E;0047 0306; 011F;011F;0067 0306;011F;0067 0306; 0120;0120;0047 0307;0120;0047 0307; 0121;0121;0067 0307;0121;0067 0307; 0122;0122;0047 0327;0122;0047 0327; 0123;0123;0067 0327;0123;0067 0327; 0124;0124;0048 0302;0124;0048 0302; 0125;0125;0068 0302;0125;0068 0302; 0128;0128;0049 0303;0128;0049 0303; 0129;0129;0069 0303;0129;0069 0303; 012A;012A;0049 0304;012A;0049 0304; 012B;012B;0069 0304;012B;0069 0304; 012C;012C;0049 0306;012C;0049 0306; 012D;012D;0069 0306;012D;0069 0306; 012E;012E;0049 0328;012E;0049 0328; 012F;012F;0069 0328;012F;0069 0328; 0130;0130;0049 0307;0130;0049 0307; 0132;0132;0132;0049 004A;0049 004A; 0133;0133;0133;0069 006A;0069 006A; 0134;0134;004A 0302;0134;004A 0302; 0135;0135;006A 0302;0135;006A 0302; 0136;0136;004B 0327;0136;004B 0327; 0137;0137;006B 0327;0137;006B 0327; 0139;0139;004C 0301;0139;004C 0301; 013A;013A;006C 0301;013A;006C 0301; 013B;013B;004C 0327;013B;004C 0327; 013C;013C;006C 0327;013C;006C 0327; 013D;013D;004C 030C;013D;004C 030C; 013E;013E;006C 030C;013E;006C 030C; 013F;013F;013F;004C 00B7;004C 00B7; 0140;0140;0140;006C 00B7;006C 00B7; 0143;0143;004E 0301;0143;004E 0301; 0144;0144;006E 0301;0144;006E 0301; 0145;0145;004E 0327;0145;004E 0327; 0146;0146;006E 0327;0146;006E 0327; 0147;0147;004E 030C;0147;004E 030C; 0148;0148;006E 030C;0148;006E 030C; 0149;0149;0149;02BC 006E;02BC 006E; 014C;014C;004F 0304;014C;004F 0304; 014D;014D;006F 0304;014D;006F 0304; 014E;014E;004F 0306;014E;004F 0306; 014F;014F;006F 0306;014F;006F 0306; 0150;0150;004F 030B;0150;004F 030B; 0151;0151;006F 030B;0151;006F 030B; 0154;0154;0052 0301;0154;0052 0301; 0155;0155;0072 0301;0155;0072 0301; 0156;0156;0052 0327;0156;0052 0327; 0157;0157;0072 0327;0157;0072 0327; 0158;0158;0052 030C;0158;0052 030C; 0159;0159;0072 030C;0159;0072 030C; 015A;015A;0053 0301;015A;0053 0301; 015B;015B;0073 0301;015B;0073 0301; 015C;015C;0053 0302;015C;0053 0302; 015D;015D;0073 0302;015D;0073 0302; 015E;015E;0053 0327;015E;0053 0327; 015F;015F;0073 0327;015F;0073 0327; 0160;0160;0053 030C;0160;0053 030C; 0161;0161;0073 030C;0161;0073 030C; 0162;0162;0054 0327;0162;0054 0327; 0163;0163;0074 0327;0163;0074 0327; 0164;0164;0054 030C;0164;0054 030C; 0165;0165;0074 030C;0165;0074 030C; 0168;0168;0055 0303;0168;0055 0303; 0169;0169;0075 0303;0169;0075 0303; 016A;016A;0055 0304;016A;0055 0304; 016B;016B;0075 0304;016B;0075 0304; 016C;016C;0055 0306;016C;0055 0306; 016D;016D;0075 0306;016D;0075 0306; 016E;016E;0055 030A;016E;0055 030A; 016F;016F;0075 030A;016F;0075 030A; 0170;0170;0055 030B;0170;0055 030B; 0171;0171;0075 030B;0171;0075 030B; 0172;0172;0055 0328;0172;0055 0328; 0173;0173;0075 0328;0173;0075 0328; 0174;0174;0057 0302;0174;0057 0302; 0175;0175;0077 0302;0175;0077 0302; 0176;0176;0059 0302;0176;0059 0302; 0177;0177;0079 0302;0177;0079 0302; 0178;0178;0059 0308;0178;0059 0308; 0179;0179;005A 0301;0179;005A 0301; 017A;017A;007A 0301;017A;007A 0301; 017B;017B;005A 0307;017B;005A 0307; 017C;017C;007A 0307;017C;007A 0307; 017D;017D;005A 030C;017D;005A 030C; 017E;017E;007A 030C;017E;007A 030C; 017F;017F;017F;0073;0073; 01A0;01A0;004F 031B;01A0;004F 031B; 01A1;01A1;006F 031B;01A1;006F 031B; 01AF;01AF;0055 031B;01AF;0055 031B; 01B0;01B0;0075 031B;01B0;0075 031B; 01C4;01C4;01C4;0044 017D;0044 005A 030C; 01C5;01C5;01C5;0044 017E;0044 007A 030C; 01C6;01C6;01C6;0064 017E;0064 007A 030C; 01C7;01C7;01C7;004C 004A;004C 004A; 01C8;01C8;01C8;004C 006A;004C 006A; 01C9;01C9;01C9;006C 006A;006C 006A; 01CA;01CA;01CA;004E 004A;004E 004A; 01CB;01CB;01CB;004E 006A;004E 006A; 01CC;01CC;01CC;006E 006A;006E 006A; 01CD;01CD;0041 030C;01CD;0041 030C; 01CE;01CE;0061 030C;01CE;0061 030C; 01CF;01CF;0049 030C;01CF;0049 030C; 01D0;01D0;0069 030C;01D0;0069 030C; 01D1;01D1;004F 030C;01D1;004F 030C; 01D2;01D2;006F 030C;01D2;006F 030C; 01D3;01D3;0055 030C;01D3;0055 030C; 01D4;01D4;0075 030C;01D4;0075 030C; 01D5;01D5;0055 0308 0304;01D5;0055 0308 0304; 01D6;01D6;0075 0308 0304;01D6;0075 0308 0304; 01D7;01D7;0055 0308 0301;01D7;0055 0308 0301; 01D8;01D8;0075 0308 0301;01D8;0075 0308 0301; 01D9;01D9;0055 0308 030C;01D9;0055 0308 030C; 01DA;01DA;0075 0308 030C;01DA;0075 0308 030C; 01DB;01DB;0055 0308 0300;01DB;0055 0308 0300; 01DC;01DC;0075 0308 0300;01DC;0075 0308 0300; 01DE;01DE;0041 0308 0304;01DE;0041 0308 0304; 01DF;01DF;0061 0308 0304;01DF;0061 0308 0304; 01E0;01E0;0041 0307 0304;01E0;0041 0307 0304; 01E1;01E1;0061 0307 0304;01E1;0061 0307 0304; 01E2;01E2;00C6 0304;01E2;00C6 0304; 01E3;01E3;00E6 0304;01E3;00E6 0304; 01E6;01E6;0047 030C;01E6;0047 030C; 01E7;01E7;0067 030C;01E7;0067 030C; 01E8;01E8;004B 030C;01E8;004B 030C; 01E9;01E9;006B 030C;01E9;006B 030C; 01EA;01EA;004F 0328;01EA;004F 0328; 01EB;01EB;006F 0328;01EB;006F 0328; 01EC;01EC;004F 0328 0304;01EC;004F 0328 0304; 01ED;01ED;006F 0328 0304;01ED;006F 0328 0304; 01EE;01EE;01B7 030C;01EE;01B7 030C; 01EF;01EF;0292 030C;01EF;0292 030C; 01F0;01F0;006A 030C;01F0;006A 030C; 01F1;01F1;01F1;0044 005A;0044 005A; 01F2;01F2;01F2;0044 007A;0044 007A; 01F3;01F3;01F3;0064 007A;0064 007A; 01F4;01F4;0047 0301;01F4;0047 0301; 01F5;01F5;0067 0301;01F5;0067 0301; 01F8;01F8;004E 0300;01F8;004E 0300; 01F9;01F9;006E 0300;01F9;006E 0300; 01FA;01FA;0041 030A 0301;01FA;0041 030A 0301; 01FB;01FB;0061 030A 0301;01FB;0061 030A 0301; 01FC;01FC;00C6 0301;01FC;00C6 0301; 01FD;01FD;00E6 0301;01FD;00E6 0301; 01FE;01FE;00D8 0301;01FE;00D8 0301; 01FF;01FF;00F8 0301;01FF;00F8 0301; 0200;0200;0041 030F;0200;0041 030F; 0201;0201;0061 030F;0201;0061 030F; 0202;0202;0041 0311;0202;0041 0311; 0203;0203;0061 0311;0203;0061 0311; 0204;0204;0045 030F;0204;0045 030F; 0205;0205;0065 030F;0205;0065 030F; 0206;0206;0045 0311;0206;0045 0311; 0207;0207;0065 0311;0207;0065 0311; 0208;0208;0049 030F;0208;0049 030F; 0209;0209;0069 030F;0209;0069 030F; 020A;020A;0049 0311;020A;0049 0311; 020B;020B;0069 0311;020B;0069 0311; 020C;020C;004F 030F;020C;004F 030F; 020D;020D;006F 030F;020D;006F 030F; 020E;020E;004F 0311;020E;004F 0311; 020F;020F;006F 0311;020F;006F 0311; 0210;0210;0052 030F;0210;0052 030F; 0211;0211;0072 030F;0211;0072 030F; 0212;0212;0052 0311;0212;0052 0311; 0213;0213;0072 0311;0213;0072 0311; 0214;0214;0055 030F;0214;0055 030F; 0215;0215;0075 030F;0215;0075 030F; 0216;0216;0055 0311;0216;0055 0311; 0217;0217;0075 0311;0217;0075 0311; 0218;0218;0053 0326;0218;0053 0326; 0219;0219;0073 0326;0219;0073 0326; 021A;021A;0054 0326;021A;0054 0326; 021B;021B;0074 0326;021B;0074 0326; 021E;021E;0048 030C;021E;0048 030C; 021F;021F;0068 030C;021F;0068 030C; 0226;0226;0041 0307;0226;0041 0307; 0227;0227;0061 0307;0227;0061 0307; 0228;0228;0045 0327;0228;0045 0327; 0229;0229;0065 0327;0229;0065 0327; 022A;022A;004F 0308 0304;022A;004F 0308 0304; 022B;022B;006F 0308 0304;022B;006F 0308 0304; 022C;022C;004F 0303 0304;022C;004F 0303 0304; 022D;022D;006F 0303 0304;022D;006F 0303 0304; 022E;022E;004F 0307;022E;004F 0307; 022F;022F;006F 0307;022F;006F 0307; 0230;0230;004F 0307 0304;0230;004F 0307 0304; 0231;0231;006F 0307 0304;0231;006F 0307 0304; 0232;0232;0059 0304;0232;0059 0304; 0233;0233;0079 0304;0233;0079 0304; 02B0;02B0;02B0;0068;0068; 02B1;02B1;02B1;0266;0266; 02B2;02B2;02B2;006A;006A; 02B3;02B3;02B3;0072;0072; 02B4;02B4;02B4;0279;0279; 02B5;02B5;02B5;027B;027B; 02B6;02B6;02B6;0281;0281; 02B7;02B7;02B7;0077;0077; 02B8;02B8;02B8;0079;0079; 02D8;02D8;02D8;0020 0306;0020 0306; 02D9;02D9;02D9;0020 0307;0020 0307; 02DA;02DA;02DA;0020 030A;0020 030A; 02DB;02DB;02DB;0020 0328;0020 0328; 02DC;02DC;02DC;0020 0303;0020 0303; 02DD;02DD;02DD;0020 030B;0020 030B; 02E0;02E0;02E0;0263;0263; 02E1;02E1;02E1;006C;006C; 02E2;02E2;02E2;0073;0073; 02E3;02E3;02E3;0078;0078; 02E4;02E4;02E4;0295;0295; 0340;0300;0300;0300;0300; 0341;0301;0301;0301;0301; 0343;0313;0313;0313;0313; 0344;0308 0301;0308 0301;0308 0301;0308 0301; 0374;02B9;02B9;02B9;02B9; 037A;037A;037A;0020 0345;0020 0345; 037E;003B;003B;003B;003B; 0384;0384;0384;0020 0301;0020 0301; 0385;0385;00A8 0301;0020 0308 0301;0020 0308 0301; 0386;0386;0391 0301;0386;0391 0301; 0387;00B7;00B7;00B7;00B7; 0388;0388;0395 0301;0388;0395 0301; 0389;0389;0397 0301;0389;0397 0301; 038A;038A;0399 0301;038A;0399 0301; 038C;038C;039F 0301;038C;039F 0301; 038E;038E;03A5 0301;038E;03A5 0301; 038F;038F;03A9 0301;038F;03A9 0301; 0390;0390;03B9 0308 0301;0390;03B9 0308 0301; 03AA;03AA;0399 0308;03AA;0399 0308; 03AB;03AB;03A5 0308;03AB;03A5 0308; 03AC;03AC;03B1 0301;03AC;03B1 0301; 03AD;03AD;03B5 0301;03AD;03B5 0301; 03AE;03AE;03B7 0301;03AE;03B7 0301; 03AF;03AF;03B9 0301;03AF;03B9 0301; 03B0;03B0;03C5 0308 0301;03B0;03C5 0308 0301; 03CA;03CA;03B9 0308;03CA;03B9 0308; 03CB;03CB;03C5 0308;03CB;03C5 0308; 03CC;03CC;03BF 0301;03CC;03BF 0301; 03CD;03CD;03C5 0301;03CD;03C5 0301; 03CE;03CE;03C9 0301;03CE;03C9 0301; 03D0;03D0;03D0;03B2;03B2; 03D1;03D1;03D1;03B8;03B8; 03D2;03D2;03D2;03A5;03A5; 03D3;03D3;03D2 0301;038E;03A5 0301; 03D4;03D4;03D2 0308;03AB;03A5 0308; 03D5;03D5;03D5;03C6;03C6; 03D6;03D6;03D6;03C0;03C0; 03F0;03F0;03F0;03BA;03BA; 03F1;03F1;03F1;03C1;03C1; 03F2;03F2;03F2;03C2;03C2; 03F4;03F4;03F4;0398;0398; 03F5;03F5;03F5;03B5;03B5; 03F9;03F9;03F9;03A3;03A3; 0400;0400;0415 0300;0400;0415 0300; 0401;0401;0415 0308;0401;0415 0308; 0403;0403;0413 0301;0403;0413 0301; 0407;0407;0406 0308;0407;0406 0308; 040C;040C;041A 0301;040C;041A 0301; 040D;040D;0418 0300;040D;0418 0300; 040E;040E;0423 0306;040E;0423 0306; 0419;0419;0418 0306;0419;0418 0306; 0439;0439;0438 0306;0439;0438 0306; 0450;0450;0435 0300;0450;0435 0300; 0451;0451;0435 0308;0451;0435 0308; 0453;0453;0433 0301;0453;0433 0301; 0457;0457;0456 0308;0457;0456 0308; 045C;045C;043A 0301;045C;043A 0301; 045D;045D;0438 0300;045D;0438 0300; 045E;045E;0443 0306;045E;0443 0306; 0476;0476;0474 030F;0476;0474 030F; 0477;0477;0475 030F;0477;0475 030F; 04C1;04C1;0416 0306;04C1;0416 0306; 04C2;04C2;0436 0306;04C2;0436 0306; 04D0;04D0;0410 0306;04D0;0410 0306; 04D1;04D1;0430 0306;04D1;0430 0306; 04D2;04D2;0410 0308;04D2;0410 0308; 04D3;04D3;0430 0308;04D3;0430 0308; 04D6;04D6;0415 0306;04D6;0415 0306; 04D7;04D7;0435 0306;04D7;0435 0306; 04DA;04DA;04D8 0308;04DA;04D8 0308; 04DB;04DB;04D9 0308;04DB;04D9 0308; 04DC;04DC;0416 0308;04DC;0416 0308; 04DD;04DD;0436 0308;04DD;0436 0308; 04DE;04DE;0417 0308;04DE;0417 0308; 04DF;04DF;0437 0308;04DF;0437 0308; 04E2;04E2;0418 0304;04E2;0418 0304; 04E3;04E3;0438 0304;04E3;0438 0304; 04E4;04E4;0418 0308;04E4;0418 0308; 04E5;04E5;0438 0308;04E5;0438 0308; 04E6;04E6;041E 0308;04E6;041E 0308; 04E7;04E7;043E 0308;04E7;043E 0308; 04EA;04EA;04E8 0308;04EA;04E8 0308; 04EB;04EB;04E9 0308;04EB;04E9 0308; 04EC;04EC;042D 0308;04EC;042D 0308; 04ED;04ED;044D 0308;04ED;044D 0308; 04EE;04EE;0423 0304;04EE;0423 0304; 04EF;04EF;0443 0304;04EF;0443 0304; 04F0;04F0;0423 0308;04F0;0423 0308; 04F1;04F1;0443 0308;04F1;0443 0308; 04F2;04F2;0423 030B;04F2;0423 030B; 04F3;04F3;0443 030B;04F3;0443 030B; 04F4;04F4;0427 0308;04F4;0427 0308; 04F5;04F5;0447 0308;04F5;0447 0308; 04F8;04F8;042B 0308;04F8;042B 0308; 04F9;04F9;044B 0308;04F9;044B 0308; 0587;0587;0587;0565 0582;0565 0582; 0622;0622;0627 0653;0622;0627 0653; 0623;0623;0627 0654;0623;0627 0654; 0624;0624;0648 0654;0624;0648 0654; 0625;0625;0627 0655;0625;0627 0655; 0626;0626;064A 0654;0626;064A 0654; 0675;0675;0675;0627 0674;0627 0674; 0676;0676;0676;0648 0674;0648 0674; 0677;0677;0677;06C7 0674;06C7 0674; 0678;0678;0678;064A 0674;064A 0674; 06C0;06C0;06D5 0654;06C0;06D5 0654; 06C2;06C2;06C1 0654;06C2;06C1 0654; 06D3;06D3;06D2 0654;06D3;06D2 0654; 0929;0929;0928 093C;0929;0928 093C; 0931;0931;0930 093C;0931;0930 093C; 0934;0934;0933 093C;0934;0933 093C; 0958;0915 093C;0915 093C;0915 093C;0915 093C; 0959;0916 093C;0916 093C;0916 093C;0916 093C; 095A;0917 093C;0917 093C;0917 093C;0917 093C; 095B;091C 093C;091C 093C;091C 093C;091C 093C; 095C;0921 093C;0921 093C;0921 093C;0921 093C; 095D;0922 093C;0922 093C;0922 093C;0922 093C; 095E;092B 093C;092B 093C;092B 093C;092B 093C; 095F;092F 093C;092F 093C;092F 093C;092F 093C; 09CB;09CB;09C7 09BE;09CB;09C7 09BE; 09CC;09CC;09C7 09D7;09CC;09C7 09D7; 09DC;09A1 09BC;09A1 09BC;09A1 09BC;09A1 09BC; 09DD;09A2 09BC;09A2 09BC;09A2 09BC;09A2 09BC; 09DF;09AF 09BC;09AF 09BC;09AF 09BC;09AF 09BC; 0A33;0A32 0A3C;0A32 0A3C;0A32 0A3C;0A32 0A3C; 0A36;0A38 0A3C;0A38 0A3C;0A38 0A3C;0A38 0A3C; 0A59;0A16 0A3C;0A16 0A3C;0A16 0A3C;0A16 0A3C; 0A5A;0A17 0A3C;0A17 0A3C;0A17 0A3C;0A17 0A3C; 0A5B;0A1C 0A3C;0A1C 0A3C;0A1C 0A3C;0A1C 0A3C; 0A5E;0A2B 0A3C;0A2B 0A3C;0A2B 0A3C;0A2B 0A3C; 0B48;0B48;0B47 0B56;0B48;0B47 0B56; 0B4B;0B4B;0B47 0B3E;0B4B;0B47 0B3E; 0B4C;0B4C;0B47 0B57;0B4C;0B47 0B57; 0B5C;0B21 0B3C;0B21 0B3C;0B21 0B3C;0B21 0B3C; 0B5D;0B22 0B3C;0B22 0B3C;0B22 0B3C;0B22 0B3C; 0B94;0B94;0B92 0BD7;0B94;0B92 0BD7; 0BCA;0BCA;0BC6 0BBE;0BCA;0BC6 0BBE; 0BCB;0BCB;0BC7 0BBE;0BCB;0BC7 0BBE; 0BCC;0BCC;0BC6 0BD7;0BCC;0BC6 0BD7; 0C48;0C48;0C46 0C56;0C48;0C46 0C56; 0CC0;0CC0;0CBF 0CD5;0CC0;0CBF 0CD5; 0CC7;0CC7;0CC6 0CD5;0CC7;0CC6 0CD5; 0CC8;0CC8;0CC6 0CD6;0CC8;0CC6 0CD6; 0CCA;0CCA;0CC6 0CC2;0CCA;0CC6 0CC2; 0CCB;0CCB;0CC6 0CC2 0CD5;0CCB;0CC6 0CC2 0CD5; 0D4A;0D4A;0D46 0D3E;0D4A;0D46 0D3E; 0D4B;0D4B;0D47 0D3E;0D4B;0D47 0D3E; 0D4C;0D4C;0D46 0D57;0D4C;0D46 0D57; 0DDA;0DDA;0DD9 0DCA;0DDA;0DD9 0DCA; 0DDC;0DDC;0DD9 0DCF;0DDC;0DD9 0DCF; 0DDD;0DDD;0DD9 0DCF 0DCA;0DDD;0DD9 0DCF 0DCA; 0DDE;0DDE;0DD9 0DDF;0DDE;0DD9 0DDF; 0E33;0E33;0E33;0E4D 0E32;0E4D 0E32; 0EB3;0EB3;0EB3;0ECD 0EB2;0ECD 0EB2; 0EDC;0EDC;0EDC;0EAB 0E99;0EAB 0E99; 0EDD;0EDD;0EDD;0EAB 0EA1;0EAB 0EA1; 0F0C;0F0C;0F0C;0F0B;0F0B; 0F43;0F42 0FB7;0F42 0FB7;0F42 0FB7;0F42 0FB7; 0F4D;0F4C 0FB7;0F4C 0FB7;0F4C 0FB7;0F4C 0FB7; 0F52;0F51 0FB7;0F51 0FB7;0F51 0FB7;0F51 0FB7; 0F57;0F56 0FB7;0F56 0FB7;0F56 0FB7;0F56 0FB7; 0F5C;0F5B 0FB7;0F5B 0FB7;0F5B 0FB7;0F5B 0FB7; 0F69;0F40 0FB5;0F40 0FB5;0F40 0FB5;0F40 0FB5; 0F73;0F71 0F72;0F71 0F72;0F71 0F72;0F71 0F72; 0F75;0F71 0F74;0F71 0F74;0F71 0F74;0F71 0F74; 0F76;0FB2 0F80;0FB2 0F80;0FB2 0F80;0FB2 0F80; 0F77;0F77;0F77;0FB2 0F71 0F80;0FB2 0F71 0F80; 0F78;0FB3 0F80;0FB3 0F80;0FB3 0F80;0FB3 0F80; 0F79;0F79;0F79;0FB3 0F71 0F80;0FB3 0F71 0F80; 0F81;0F71 0F80;0F71 0F80;0F71 0F80;0F71 0F80; 0F93;0F92 0FB7;0F92 0FB7;0F92 0FB7;0F92 0FB7; 0F9D;0F9C 0FB7;0F9C 0FB7;0F9C 0FB7;0F9C 0FB7; 0FA2;0FA1 0FB7;0FA1 0FB7;0FA1 0FB7;0FA1 0FB7; 0FA7;0FA6 0FB7;0FA6 0FB7;0FA6 0FB7;0FA6 0FB7; 0FAC;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7; 0FB9;0F90 0FB5;0F90 0FB5;0F90 0FB5;0F90 0FB5; 1026;1026;1025 102E;1026;1025 102E; 10FC;10FC;10FC;10DC;10DC; 1B06;1B06;1B05 1B35;1B06;1B05 1B35; 1B08;1B08;1B07 1B35;1B08;1B07 1B35; 1B0A;1B0A;1B09 1B35;1B0A;1B09 1B35; 1B0C;1B0C;1B0B 1B35;1B0C;1B0B 1B35; 1B0E;1B0E;1B0D 1B35;1B0E;1B0D 1B35; 1B12;1B12;1B11 1B35;1B12;1B11 1B35; 1B3B;1B3B;1B3A 1B35;1B3B;1B3A 1B35; 1B3D;1B3D;1B3C 1B35;1B3D;1B3C 1B35; 1B40;1B40;1B3E 1B35;1B40;1B3E 1B35; 1B41;1B41;1B3F 1B35;1B41;1B3F 1B35; 1B43;1B43;1B42 1B35;1B43;1B42 1B35; 1D2C;1D2C;1D2C;0041;0041; 1D2D;1D2D;1D2D;00C6;00C6; 1D2E;1D2E;1D2E;0042;0042; 1D30;1D30;1D30;0044;0044; 1D31;1D31;1D31;0045;0045; 1D32;1D32;1D32;018E;018E; 1D33;1D33;1D33;0047;0047; 1D34;1D34;1D34;0048;0048; 1D35;1D35;1D35;0049;0049; 1D36;1D36;1D36;004A;004A; 1D37;1D37;1D37;004B;004B; 1D38;1D38;1D38;004C;004C; 1D39;1D39;1D39;004D;004D; 1D3A;1D3A;1D3A;004E;004E; 1D3C;1D3C;1D3C;004F;004F; 1D3D;1D3D;1D3D;0222;0222; 1D3E;1D3E;1D3E;0050;0050; 1D3F;1D3F;1D3F;0052;0052; 1D40;1D40;1D40;0054;0054; 1D41;1D41;1D41;0055;0055; 1D42;1D42;1D42;0057;0057; 1D43;1D43;1D43;0061;0061; 1D44;1D44;1D44;0250;0250; 1D45;1D45;1D45;0251;0251; 1D46;1D46;1D46;1D02;1D02; 1D47;1D47;1D47;0062;0062; 1D48;1D48;1D48;0064;0064; 1D49;1D49;1D49;0065;0065; 1D4A;1D4A;1D4A;0259;0259; 1D4B;1D4B;1D4B;025B;025B; 1D4C;1D4C;1D4C;025C;025C; 1D4D;1D4D;1D4D;0067;0067; 1D4F;1D4F;1D4F;006B;006B; 1D50;1D50;1D50;006D;006D; 1D51;1D51;1D51;014B;014B; 1D52;1D52;1D52;006F;006F; 1D53;1D53;1D53;0254;0254; 1D54;1D54;1D54;1D16;1D16; 1D55;1D55;1D55;1D17;1D17; 1D56;1D56;1D56;0070;0070; 1D57;1D57;1D57;0074;0074; 1D58;1D58;1D58;0075;0075; 1D59;1D59;1D59;1D1D;1D1D; 1D5A;1D5A;1D5A;026F;026F; 1D5B;1D5B;1D5B;0076;0076; 1D5C;1D5C;1D5C;1D25;1D25; 1D5D;1D5D;1D5D;03B2;03B2; 1D5E;1D5E;1D5E;03B3;03B3; 1D5F;1D5F;1D5F;03B4;03B4; 1D60;1D60;1D60;03C6;03C6; 1D61;1D61;1D61;03C7;03C7; 1D62;1D62;1D62;0069;0069; 1D63;1D63;1D63;0072;0072; 1D64;1D64;1D64;0075;0075; 1D65;1D65;1D65;0076;0076; 1D66;1D66;1D66;03B2;03B2; 1D67;1D67;1D67;03B3;03B3; 1D68;1D68;1D68;03C1;03C1; 1D69;1D69;1D69;03C6;03C6; 1D6A;1D6A;1D6A;03C7;03C7; 1D78;1D78;1D78;043D;043D; 1D9B;1D9B;1D9B;0252;0252; 1D9C;1D9C;1D9C;0063;0063; 1D9D;1D9D;1D9D;0255;0255; 1D9E;1D9E;1D9E;00F0;00F0; 1D9F;1D9F;1D9F;025C;025C; 1DA0;1DA0;1DA0;0066;0066; 1DA1;1DA1;1DA1;025F;025F; 1DA2;1DA2;1DA2;0261;0261; 1DA3;1DA3;1DA3;0265;0265; 1DA4;1DA4;1DA4;0268;0268; 1DA5;1DA5;1DA5;0269;0269; 1DA6;1DA6;1DA6;026A;026A; 1DA7;1DA7;1DA7;1D7B;1D7B; 1DA8;1DA8;1DA8;029D;029D; 1DA9;1DA9;1DA9;026D;026D; 1DAA;1DAA;1DAA;1D85;1D85; 1DAB;1DAB;1DAB;029F;029F; 1DAC;1DAC;1DAC;0271;0271; 1DAD;1DAD;1DAD;0270;0270; 1DAE;1DAE;1DAE;0272;0272; 1DAF;1DAF;1DAF;0273;0273; 1DB0;1DB0;1DB0;0274;0274; 1DB1;1DB1;1DB1;0275;0275; 1DB2;1DB2;1DB2;0278;0278; 1DB3;1DB3;1DB3;0282;0282; 1DB4;1DB4;1DB4;0283;0283; 1DB5;1DB5;1DB5;01AB;01AB; 1DB6;1DB6;1DB6;0289;0289; 1DB7;1DB7;1DB7;028A;028A; 1DB8;1DB8;1DB8;1D1C;1D1C; 1DB9;1DB9;1DB9;028B;028B; 1DBA;1DBA;1DBA;028C;028C; 1DBB;1DBB;1DBB;007A;007A; 1DBC;1DBC;1DBC;0290;0290; 1DBD;1DBD;1DBD;0291;0291; 1DBE;1DBE;1DBE;0292;0292; 1DBF;1DBF;1DBF;03B8;03B8; 1E00;1E00;0041 0325;1E00;0041 0325; 1E01;1E01;0061 0325;1E01;0061 0325; 1E02;1E02;0042 0307;1E02;0042 0307; 1E03;1E03;0062 0307;1E03;0062 0307; 1E04;1E04;0042 0323;1E04;0042 0323; 1E05;1E05;0062 0323;1E05;0062 0323; 1E06;1E06;0042 0331;1E06;0042 0331; 1E07;1E07;0062 0331;1E07;0062 0331; 1E08;1E08;0043 0327 0301;1E08;0043 0327 0301; 1E09;1E09;0063 0327 0301;1E09;0063 0327 0301; 1E0A;1E0A;0044 0307;1E0A;0044 0307; 1E0B;1E0B;0064 0307;1E0B;0064 0307; 1E0C;1E0C;0044 0323;1E0C;0044 0323; 1E0D;1E0D;0064 0323;1E0D;0064 0323; 1E0E;1E0E;0044 0331;1E0E;0044 0331; 1E0F;1E0F;0064 0331;1E0F;0064 0331; 1E10;1E10;0044 0327;1E10;0044 0327; 1E11;1E11;0064 0327;1E11;0064 0327; 1E12;1E12;0044 032D;1E12;0044 032D; 1E13;1E13;0064 032D;1E13;0064 032D; 1E14;1E14;0045 0304 0300;1E14;0045 0304 0300; 1E15;1E15;0065 0304 0300;1E15;0065 0304 0300; 1E16;1E16;0045 0304 0301;1E16;0045 0304 0301; 1E17;1E17;0065 0304 0301;1E17;0065 0304 0301; 1E18;1E18;0045 032D;1E18;0045 032D; 1E19;1E19;0065 032D;1E19;0065 032D; 1E1A;1E1A;0045 0330;1E1A;0045 0330; 1E1B;1E1B;0065 0330;1E1B;0065 0330; 1E1C;1E1C;0045 0327 0306;1E1C;0045 0327 0306; 1E1D;1E1D;0065 0327 0306;1E1D;0065 0327 0306; 1E1E;1E1E;0046 0307;1E1E;0046 0307; 1E1F;1E1F;0066 0307;1E1F;0066 0307; 1E20;1E20;0047 0304;1E20;0047 0304; 1E21;1E21;0067 0304;1E21;0067 0304; 1E22;1E22;0048 0307;1E22;0048 0307; 1E23;1E23;0068 0307;1E23;0068 0307; 1E24;1E24;0048 0323;1E24;0048 0323; 1E25;1E25;0068 0323;1E25;0068 0323; 1E26;1E26;0048 0308;1E26;0048 0308; 1E27;1E27;0068 0308;1E27;0068 0308; 1E28;1E28;0048 0327;1E28;0048 0327; 1E29;1E29;0068 0327;1E29;0068 0327; 1E2A;1E2A;0048 032E;1E2A;0048 032E; 1E2B;1E2B;0068 032E;1E2B;0068 032E; 1E2C;1E2C;0049 0330;1E2C;0049 0330; 1E2D;1E2D;0069 0330;1E2D;0069 0330; 1E2E;1E2E;0049 0308 0301;1E2E;0049 0308 0301; 1E2F;1E2F;0069 0308 0301;1E2F;0069 0308 0301; 1E30;1E30;004B 0301;1E30;004B 0301; 1E31;1E31;006B 0301;1E31;006B 0301; 1E32;1E32;004B 0323;1E32;004B 0323; 1E33;1E33;006B 0323;1E33;006B 0323; 1E34;1E34;004B 0331;1E34;004B 0331; 1E35;1E35;006B 0331;1E35;006B 0331; 1E36;1E36;004C 0323;1E36;004C 0323; 1E37;1E37;006C 0323;1E37;006C 0323; 1E38;1E38;004C 0323 0304;1E38;004C 0323 0304; 1E39;1E39;006C 0323 0304;1E39;006C 0323 0304; 1E3A;1E3A;004C 0331;1E3A;004C 0331; 1E3B;1E3B;006C 0331;1E3B;006C 0331; 1E3C;1E3C;004C 032D;1E3C;004C 032D; 1E3D;1E3D;006C 032D;1E3D;006C 032D; 1E3E;1E3E;004D 0301;1E3E;004D 0301; 1E3F;1E3F;006D 0301;1E3F;006D 0301; 1E40;1E40;004D 0307;1E40;004D 0307; 1E41;1E41;006D 0307;1E41;006D 0307; 1E42;1E42;004D 0323;1E42;004D 0323; 1E43;1E43;006D 0323;1E43;006D 0323; 1E44;1E44;004E 0307;1E44;004E 0307; 1E45;1E45;006E 0307;1E45;006E 0307; 1E46;1E46;004E 0323;1E46;004E 0323; 1E47;1E47;006E 0323;1E47;006E 0323; 1E48;1E48;004E 0331;1E48;004E 0331; 1E49;1E49;006E 0331;1E49;006E 0331; 1E4A;1E4A;004E 032D;1E4A;004E 032D; 1E4B;1E4B;006E 032D;1E4B;006E 032D; 1E4C;1E4C;004F 0303 0301;1E4C;004F 0303 0301; 1E4D;1E4D;006F 0303 0301;1E4D;006F 0303 0301; 1E4E;1E4E;004F 0303 0308;1E4E;004F 0303 0308; 1E4F;1E4F;006F 0303 0308;1E4F;006F 0303 0308; 1E50;1E50;004F 0304 0300;1E50;004F 0304 0300; 1E51;1E51;006F 0304 0300;1E51;006F 0304 0300; 1E52;1E52;004F 0304 0301;1E52;004F 0304 0301; 1E53;1E53;006F 0304 0301;1E53;006F 0304 0301; 1E54;1E54;0050 0301;1E54;0050 0301; 1E55;1E55;0070 0301;1E55;0070 0301; 1E56;1E56;0050 0307;1E56;0050 0307; 1E57;1E57;0070 0307;1E57;0070 0307; 1E58;1E58;0052 0307;1E58;0052 0307; 1E59;1E59;0072 0307;1E59;0072 0307; 1E5A;1E5A;0052 0323;1E5A;0052 0323; 1E5B;1E5B;0072 0323;1E5B;0072 0323; 1E5C;1E5C;0052 0323 0304;1E5C;0052 0323 0304; 1E5D;1E5D;0072 0323 0304;1E5D;0072 0323 0304; 1E5E;1E5E;0052 0331;1E5E;0052 0331; 1E5F;1E5F;0072 0331;1E5F;0072 0331; 1E60;1E60;0053 0307;1E60;0053 0307; 1E61;1E61;0073 0307;1E61;0073 0307; 1E62;1E62;0053 0323;1E62;0053 0323; 1E63;1E63;0073 0323;1E63;0073 0323; 1E64;1E64;0053 0301 0307;1E64;0053 0301 0307; 1E65;1E65;0073 0301 0307;1E65;0073 0301 0307; 1E66;1E66;0053 030C 0307;1E66;0053 030C 0307; 1E67;1E67;0073 030C 0307;1E67;0073 030C 0307; 1E68;1E68;0053 0323 0307;1E68;0053 0323 0307; 1E69;1E69;0073 0323 0307;1E69;0073 0323 0307; 1E6A;1E6A;0054 0307;1E6A;0054 0307; 1E6B;1E6B;0074 0307;1E6B;0074 0307; 1E6C;1E6C;0054 0323;1E6C;0054 0323; 1E6D;1E6D;0074 0323;1E6D;0074 0323; 1E6E;1E6E;0054 0331;1E6E;0054 0331; 1E6F;1E6F;0074 0331;1E6F;0074 0331; 1E70;1E70;0054 032D;1E70;0054 032D; 1E71;1E71;0074 032D;1E71;0074 032D; 1E72;1E72;0055 0324;1E72;0055 0324; 1E73;1E73;0075 0324;1E73;0075 0324; 1E74;1E74;0055 0330;1E74;0055 0330; 1E75;1E75;0075 0330;1E75;0075 0330; 1E76;1E76;0055 032D;1E76;0055 032D; 1E77;1E77;0075 032D;1E77;0075 032D; 1E78;1E78;0055 0303 0301;1E78;0055 0303 0301; 1E79;1E79;0075 0303 0301;1E79;0075 0303 0301; 1E7A;1E7A;0055 0304 0308;1E7A;0055 0304 0308; 1E7B;1E7B;0075 0304 0308;1E7B;0075 0304 0308; 1E7C;1E7C;0056 0303;1E7C;0056 0303; 1E7D;1E7D;0076 0303;1E7D;0076 0303; 1E7E;1E7E;0056 0323;1E7E;0056 0323; 1E7F;1E7F;0076 0323;1E7F;0076 0323; 1E80;1E80;0057 0300;1E80;0057 0300; 1E81;1E81;0077 0300;1E81;0077 0300; 1E82;1E82;0057 0301;1E82;0057 0301; 1E83;1E83;0077 0301;1E83;0077 0301; 1E84;1E84;0057 0308;1E84;0057 0308; 1E85;1E85;0077 0308;1E85;0077 0308; 1E86;1E86;0057 0307;1E86;0057 0307; 1E87;1E87;0077 0307;1E87;0077 0307; 1E88;1E88;0057 0323;1E88;0057 0323; 1E89;1E89;0077 0323;1E89;0077 0323; 1E8A;1E8A;0058 0307;1E8A;0058 0307; 1E8B;1E8B;0078 0307;1E8B;0078 0307; 1E8C;1E8C;0058 0308;1E8C;0058 0308; 1E8D;1E8D;0078 0308;1E8D;0078 0308; 1E8E;1E8E;0059 0307;1E8E;0059 0307; 1E8F;1E8F;0079 0307;1E8F;0079 0307; 1E90;1E90;005A 0302;1E90;005A 0302; 1E91;1E91;007A 0302;1E91;007A 0302; 1E92;1E92;005A 0323;1E92;005A 0323; 1E93;1E93;007A 0323;1E93;007A 0323; 1E94;1E94;005A 0331;1E94;005A 0331; 1E95;1E95;007A 0331;1E95;007A 0331; 1E96;1E96;0068 0331;1E96;0068 0331; 1E97;1E97;0074 0308;1E97;0074 0308; 1E98;1E98;0077 030A;1E98;0077 030A; 1E99;1E99;0079 030A;1E99;0079 030A; 1E9A;1E9A;1E9A;0061 02BE;0061 02BE; 1E9B;1E9B;017F 0307;1E61;0073 0307; 1EA0;1EA0;0041 0323;1EA0;0041 0323; 1EA1;1EA1;0061 0323;1EA1;0061 0323; 1EA2;1EA2;0041 0309;1EA2;0041 0309; 1EA3;1EA3;0061 0309;1EA3;0061 0309; 1EA4;1EA4;0041 0302 0301;1EA4;0041 0302 0301; 1EA5;1EA5;0061 0302 0301;1EA5;0061 0302 0301; 1EA6;1EA6;0041 0302 0300;1EA6;0041 0302 0300; 1EA7;1EA7;0061 0302 0300;1EA7;0061 0302 0300; 1EA8;1EA8;0041 0302 0309;1EA8;0041 0302 0309; 1EA9;1EA9;0061 0302 0309;1EA9;0061 0302 0309; 1EAA;1EAA;0041 0302 0303;1EAA;0041 0302 0303; 1EAB;1EAB;0061 0302 0303;1EAB;0061 0302 0303; 1EAC;1EAC;0041 0323 0302;1EAC;0041 0323 0302; 1EAD;1EAD;0061 0323 0302;1EAD;0061 0323 0302; 1EAE;1EAE;0041 0306 0301;1EAE;0041 0306 0301; 1EAF;1EAF;0061 0306 0301;1EAF;0061 0306 0301; 1EB0;1EB0;0041 0306 0300;1EB0;0041 0306 0300; 1EB1;1EB1;0061 0306 0300;1EB1;0061 0306 0300; 1EB2;1EB2;0041 0306 0309;1EB2;0041 0306 0309; 1EB3;1EB3;0061 0306 0309;1EB3;0061 0306 0309; 1EB4;1EB4;0041 0306 0303;1EB4;0041 0306 0303; 1EB5;1EB5;0061 0306 0303;1EB5;0061 0306 0303; 1EB6;1EB6;0041 0323 0306;1EB6;0041 0323 0306; 1EB7;1EB7;0061 0323 0306;1EB7;0061 0323 0306; 1EB8;1EB8;0045 0323;1EB8;0045 0323; 1EB9;1EB9;0065 0323;1EB9;0065 0323; 1EBA;1EBA;0045 0309;1EBA;0045 0309; 1EBB;1EBB;0065 0309;1EBB;0065 0309; 1EBC;1EBC;0045 0303;1EBC;0045 0303; 1EBD;1EBD;0065 0303;1EBD;0065 0303; 1EBE;1EBE;0045 0302 0301;1EBE;0045 0302 0301; 1EBF;1EBF;0065 0302 0301;1EBF;0065 0302 0301; 1EC0;1EC0;0045 0302 0300;1EC0;0045 0302 0300; 1EC1;1EC1;0065 0302 0300;1EC1;0065 0302 0300; 1EC2;1EC2;0045 0302 0309;1EC2;0045 0302 0309; 1EC3;1EC3;0065 0302 0309;1EC3;0065 0302 0309; 1EC4;1EC4;0045 0302 0303;1EC4;0045 0302 0303; 1EC5;1EC5;0065 0302 0303;1EC5;0065 0302 0303; 1EC6;1EC6;0045 0323 0302;1EC6;0045 0323 0302; 1EC7;1EC7;0065 0323 0302;1EC7;0065 0323 0302; 1EC8;1EC8;0049 0309;1EC8;0049 0309; 1EC9;1EC9;0069 0309;1EC9;0069 0309; 1ECA;1ECA;0049 0323;1ECA;0049 0323; 1ECB;1ECB;0069 0323;1ECB;0069 0323; 1ECC;1ECC;004F 0323;1ECC;004F 0323; 1ECD;1ECD;006F 0323;1ECD;006F 0323; 1ECE;1ECE;004F 0309;1ECE;004F 0309; 1ECF;1ECF;006F 0309;1ECF;006F 0309; 1ED0;1ED0;004F 0302 0301;1ED0;004F 0302 0301; 1ED1;1ED1;006F 0302 0301;1ED1;006F 0302 0301; 1ED2;1ED2;004F 0302 0300;1ED2;004F 0302 0300; 1ED3;1ED3;006F 0302 0300;1ED3;006F 0302 0300; 1ED4;1ED4;004F 0302 0309;1ED4;004F 0302 0309; 1ED5;1ED5;006F 0302 0309;1ED5;006F 0302 0309; 1ED6;1ED6;004F 0302 0303;1ED6;004F 0302 0303; 1ED7;1ED7;006F 0302 0303;1ED7;006F 0302 0303; 1ED8;1ED8;004F 0323 0302;1ED8;004F 0323 0302; 1ED9;1ED9;006F 0323 0302;1ED9;006F 0323 0302; 1EDA;1EDA;004F 031B 0301;1EDA;004F 031B 0301; 1EDB;1EDB;006F 031B 0301;1EDB;006F 031B 0301; 1EDC;1EDC;004F 031B 0300;1EDC;004F 031B 0300; 1EDD;1EDD;006F 031B 0300;1EDD;006F 031B 0300; 1EDE;1EDE;004F 031B 0309;1EDE;004F 031B 0309; 1EDF;1EDF;006F 031B 0309;1EDF;006F 031B 0309; 1EE0;1EE0;004F 031B 0303;1EE0;004F 031B 0303; 1EE1;1EE1;006F 031B 0303;1EE1;006F 031B 0303; 1EE2;1EE2;004F 031B 0323;1EE2;004F 031B 0323; 1EE3;1EE3;006F 031B 0323;1EE3;006F 031B 0323; 1EE4;1EE4;0055 0323;1EE4;0055 0323; 1EE5;1EE5;0075 0323;1EE5;0075 0323; 1EE6;1EE6;0055 0309;1EE6;0055 0309; 1EE7;1EE7;0075 0309;1EE7;0075 0309; 1EE8;1EE8;0055 031B 0301;1EE8;0055 031B 0301; 1EE9;1EE9;0075 031B 0301;1EE9;0075 031B 0301; 1EEA;1EEA;0055 031B 0300;1EEA;0055 031B 0300; 1EEB;1EEB;0075 031B 0300;1EEB;0075 031B 0300; 1EEC;1EEC;0055 031B 0309;1EEC;0055 031B 0309; 1EED;1EED;0075 031B 0309;1EED;0075 031B 0309; 1EEE;1EEE;0055 031B 0303;1EEE;0055 031B 0303; 1EEF;1EEF;0075 031B 0303;1EEF;0075 031B 0303; 1EF0;1EF0;0055 031B 0323;1EF0;0055 031B 0323; 1EF1;1EF1;0075 031B 0323;1EF1;0075 031B 0323; 1EF2;1EF2;0059 0300;1EF2;0059 0300; 1EF3;1EF3;0079 0300;1EF3;0079 0300; 1EF4;1EF4;0059 0323;1EF4;0059 0323; 1EF5;1EF5;0079 0323;1EF5;0079 0323; 1EF6;1EF6;0059 0309;1EF6;0059 0309; 1EF7;1EF7;0079 0309;1EF7;0079 0309; 1EF8;1EF8;0059 0303;1EF8;0059 0303; 1EF9;1EF9;0079 0303;1EF9;0079 0303; 1F00;1F00;03B1 0313;1F00;03B1 0313; 1F01;1F01;03B1 0314;1F01;03B1 0314; 1F02;1F02;03B1 0313 0300;1F02;03B1 0313 0300; 1F03;1F03;03B1 0314 0300;1F03;03B1 0314 0300; 1F04;1F04;03B1 0313 0301;1F04;03B1 0313 0301; 1F05;1F05;03B1 0314 0301;1F05;03B1 0314 0301; 1F06;1F06;03B1 0313 0342;1F06;03B1 0313 0342; 1F07;1F07;03B1 0314 0342;1F07;03B1 0314 0342; 1F08;1F08;0391 0313;1F08;0391 0313; 1F09;1F09;0391 0314;1F09;0391 0314; 1F0A;1F0A;0391 0313 0300;1F0A;0391 0313 0300; 1F0B;1F0B;0391 0314 0300;1F0B;0391 0314 0300; 1F0C;1F0C;0391 0313 0301;1F0C;0391 0313 0301; 1F0D;1F0D;0391 0314 0301;1F0D;0391 0314 0301; 1F0E;1F0E;0391 0313 0342;1F0E;0391 0313 0342; 1F0F;1F0F;0391 0314 0342;1F0F;0391 0314 0342; 1F10;1F10;03B5 0313;1F10;03B5 0313; 1F11;1F11;03B5 0314;1F11;03B5 0314; 1F12;1F12;03B5 0313 0300;1F12;03B5 0313 0300; 1F13;1F13;03B5 0314 0300;1F13;03B5 0314 0300; 1F14;1F14;03B5 0313 0301;1F14;03B5 0313 0301; 1F15;1F15;03B5 0314 0301;1F15;03B5 0314 0301; 1F18;1F18;0395 0313;1F18;0395 0313; 1F19;1F19;0395 0314;1F19;0395 0314; 1F1A;1F1A;0395 0313 0300;1F1A;0395 0313 0300; 1F1B;1F1B;0395 0314 0300;1F1B;0395 0314 0300; 1F1C;1F1C;0395 0313 0301;1F1C;0395 0313 0301; 1F1D;1F1D;0395 0314 0301;1F1D;0395 0314 0301; 1F20;1F20;03B7 0313;1F20;03B7 0313; 1F21;1F21;03B7 0314;1F21;03B7 0314; 1F22;1F22;03B7 0313 0300;1F22;03B7 0313 0300; 1F23;1F23;03B7 0314 0300;1F23;03B7 0314 0300; 1F24;1F24;03B7 0313 0301;1F24;03B7 0313 0301; 1F25;1F25;03B7 0314 0301;1F25;03B7 0314 0301; 1F26;1F26;03B7 0313 0342;1F26;03B7 0313 0342; 1F27;1F27;03B7 0314 0342;1F27;03B7 0314 0342; 1F28;1F28;0397 0313;1F28;0397 0313; 1F29;1F29;0397 0314;1F29;0397 0314; 1F2A;1F2A;0397 0313 0300;1F2A;0397 0313 0300; 1F2B;1F2B;0397 0314 0300;1F2B;0397 0314 0300; 1F2C;1F2C;0397 0313 0301;1F2C;0397 0313 0301; 1F2D;1F2D;0397 0314 0301;1F2D;0397 0314 0301; 1F2E;1F2E;0397 0313 0342;1F2E;0397 0313 0342; 1F2F;1F2F;0397 0314 0342;1F2F;0397 0314 0342; 1F30;1F30;03B9 0313;1F30;03B9 0313; 1F31;1F31;03B9 0314;1F31;03B9 0314; 1F32;1F32;03B9 0313 0300;1F32;03B9 0313 0300; 1F33;1F33;03B9 0314 0300;1F33;03B9 0314 0300; 1F34;1F34;03B9 0313 0301;1F34;03B9 0313 0301; 1F35;1F35;03B9 0314 0301;1F35;03B9 0314 0301; 1F36;1F36;03B9 0313 0342;1F36;03B9 0313 0342; 1F37;1F37;03B9 0314 0342;1F37;03B9 0314 0342; 1F38;1F38;0399 0313;1F38;0399 0313; 1F39;1F39;0399 0314;1F39;0399 0314; 1F3A;1F3A;0399 0313 0300;1F3A;0399 0313 0300; 1F3B;1F3B;0399 0314 0300;1F3B;0399 0314 0300; 1F3C;1F3C;0399 0313 0301;1F3C;0399 0313 0301; 1F3D;1F3D;0399 0314 0301;1F3D;0399 0314 0301; 1F3E;1F3E;0399 0313 0342;1F3E;0399 0313 0342; 1F3F;1F3F;0399 0314 0342;1F3F;0399 0314 0342; 1F40;1F40;03BF 0313;1F40;03BF 0313; 1F41;1F41;03BF 0314;1F41;03BF 0314; 1F42;1F42;03BF 0313 0300;1F42;03BF 0313 0300; 1F43;1F43;03BF 0314 0300;1F43;03BF 0314 0300; 1F44;1F44;03BF 0313 0301;1F44;03BF 0313 0301; 1F45;1F45;03BF 0314 0301;1F45;03BF 0314 0301; 1F48;1F48;039F 0313;1F48;039F 0313; 1F49;1F49;039F 0314;1F49;039F 0314; 1F4A;1F4A;039F 0313 0300;1F4A;039F 0313 0300; 1F4B;1F4B;039F 0314 0300;1F4B;039F 0314 0300; 1F4C;1F4C;039F 0313 0301;1F4C;039F 0313 0301; 1F4D;1F4D;039F 0314 0301;1F4D;039F 0314 0301; 1F50;1F50;03C5 0313;1F50;03C5 0313; 1F51;1F51;03C5 0314;1F51;03C5 0314; 1F52;1F52;03C5 0313 0300;1F52;03C5 0313 0300; 1F53;1F53;03C5 0314 0300;1F53;03C5 0314 0300; 1F54;1F54;03C5 0313 0301;1F54;03C5 0313 0301; 1F55;1F55;03C5 0314 0301;1F55;03C5 0314 0301; 1F56;1F56;03C5 0313 0342;1F56;03C5 0313 0342; 1F57;1F57;03C5 0314 0342;1F57;03C5 0314 0342; 1F59;1F59;03A5 0314;1F59;03A5 0314; 1F5B;1F5B;03A5 0314 0300;1F5B;03A5 0314 0300; 1F5D;1F5D;03A5 0314 0301;1F5D;03A5 0314 0301; 1F5F;1F5F;03A5 0314 0342;1F5F;03A5 0314 0342; 1F60;1F60;03C9 0313;1F60;03C9 0313; 1F61;1F61;03C9 0314;1F61;03C9 0314; 1F62;1F62;03C9 0313 0300;1F62;03C9 0313 0300; 1F63;1F63;03C9 0314 0300;1F63;03C9 0314 0300; 1F64;1F64;03C9 0313 0301;1F64;03C9 0313 0301; 1F65;1F65;03C9 0314 0301;1F65;03C9 0314 0301; 1F66;1F66;03C9 0313 0342;1F66;03C9 0313 0342; 1F67;1F67;03C9 0314 0342;1F67;03C9 0314 0342; 1F68;1F68;03A9 0313;1F68;03A9 0313; 1F69;1F69;03A9 0314;1F69;03A9 0314; 1F6A;1F6A;03A9 0313 0300;1F6A;03A9 0313 0300; 1F6B;1F6B;03A9 0314 0300;1F6B;03A9 0314 0300; 1F6C;1F6C;03A9 0313 0301;1F6C;03A9 0313 0301; 1F6D;1F6D;03A9 0314 0301;1F6D;03A9 0314 0301; 1F6E;1F6E;03A9 0313 0342;1F6E;03A9 0313 0342; 1F6F;1F6F;03A9 0314 0342;1F6F;03A9 0314 0342; 1F70;1F70;03B1 0300;1F70;03B1 0300; 1F71;03AC;03B1 0301;03AC;03B1 0301; 1F72;1F72;03B5 0300;1F72;03B5 0300; 1F73;03AD;03B5 0301;03AD;03B5 0301; 1F74;1F74;03B7 0300;1F74;03B7 0300; 1F75;03AE;03B7 0301;03AE;03B7 0301; 1F76;1F76;03B9 0300;1F76;03B9 0300; 1F77;03AF;03B9 0301;03AF;03B9 0301; 1F78;1F78;03BF 0300;1F78;03BF 0300; 1F79;03CC;03BF 0301;03CC;03BF 0301; 1F7A;1F7A;03C5 0300;1F7A;03C5 0300; 1F7B;03CD;03C5 0301;03CD;03C5 0301; 1F7C;1F7C;03C9 0300;1F7C;03C9 0300; 1F7D;03CE;03C9 0301;03CE;03C9 0301; 1F80;1F80;03B1 0313 0345;1F80;03B1 0313 0345; 1F81;1F81;03B1 0314 0345;1F81;03B1 0314 0345; 1F82;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; 1F83;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; 1F84;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; 1F85;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; 1F86;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; 1F87;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; 1F88;1F88;0391 0313 0345;1F88;0391 0313 0345; 1F89;1F89;0391 0314 0345;1F89;0391 0314 0345; 1F8A;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; 1F8B;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; 1F8C;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; 1F8D;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; 1F8E;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; 1F8F;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; 1F90;1F90;03B7 0313 0345;1F90;03B7 0313 0345; 1F91;1F91;03B7 0314 0345;1F91;03B7 0314 0345; 1F92;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; 1F93;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; 1F94;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; 1F95;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; 1F96;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; 1F97;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; 1F98;1F98;0397 0313 0345;1F98;0397 0313 0345; 1F99;1F99;0397 0314 0345;1F99;0397 0314 0345; 1F9A;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; 1F9B;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; 1F9C;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; 1F9D;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; 1F9E;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; 1F9F;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; 1FA0;1FA0;03C9 0313 0345;1FA0;03C9 0313 0345; 1FA1;1FA1;03C9 0314 0345;1FA1;03C9 0314 0345; 1FA2;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; 1FA3;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; 1FA4;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; 1FA5;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; 1FA6;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; 1FA7;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; 1FA8;1FA8;03A9 0313 0345;1FA8;03A9 0313 0345; 1FA9;1FA9;03A9 0314 0345;1FA9;03A9 0314 0345; 1FAA;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; 1FAB;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; 1FAC;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; 1FAD;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; 1FAE;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; 1FAF;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; 1FB0;1FB0;03B1 0306;1FB0;03B1 0306; 1FB1;1FB1;03B1 0304;1FB1;03B1 0304; 1FB2;1FB2;03B1 0300 0345;1FB2;03B1 0300 0345; 1FB3;1FB3;03B1 0345;1FB3;03B1 0345; 1FB4;1FB4;03B1 0301 0345;1FB4;03B1 0301 0345; 1FB6;1FB6;03B1 0342;1FB6;03B1 0342; 1FB7;1FB7;03B1 0342 0345;1FB7;03B1 0342 0345; 1FB8;1FB8;0391 0306;1FB8;0391 0306; 1FB9;1FB9;0391 0304;1FB9;0391 0304; 1FBA;1FBA;0391 0300;1FBA;0391 0300; 1FBB;0386;0391 0301;0386;0391 0301; 1FBC;1FBC;0391 0345;1FBC;0391 0345; 1FBD;1FBD;1FBD;0020 0313;0020 0313; 1FBE;03B9;03B9;03B9;03B9; 1FBF;1FBF;1FBF;0020 0313;0020 0313; 1FC0;1FC0;1FC0;0020 0342;0020 0342; 1FC1;1FC1;00A8 0342;0020 0308 0342;0020 0308 0342; 1FC2;1FC2;03B7 0300 0345;1FC2;03B7 0300 0345; 1FC3;1FC3;03B7 0345;1FC3;03B7 0345; 1FC4;1FC4;03B7 0301 0345;1FC4;03B7 0301 0345; 1FC6;1FC6;03B7 0342;1FC6;03B7 0342; 1FC7;1FC7;03B7 0342 0345;1FC7;03B7 0342 0345; 1FC8;1FC8;0395 0300;1FC8;0395 0300; 1FC9;0388;0395 0301;0388;0395 0301; 1FCA;1FCA;0397 0300;1FCA;0397 0300; 1FCB;0389;0397 0301;0389;0397 0301; 1FCC;1FCC;0397 0345;1FCC;0397 0345; 1FCD;1FCD;1FBF 0300;0020 0313 0300;0020 0313 0300; 1FCE;1FCE;1FBF 0301;0020 0313 0301;0020 0313 0301; 1FCF;1FCF;1FBF 0342;0020 0313 0342;0020 0313 0342; 1FD0;1FD0;03B9 0306;1FD0;03B9 0306; 1FD1;1FD1;03B9 0304;1FD1;03B9 0304; 1FD2;1FD2;03B9 0308 0300;1FD2;03B9 0308 0300; 1FD3;0390;03B9 0308 0301;0390;03B9 0308 0301; 1FD6;1FD6;03B9 0342;1FD6;03B9 0342; 1FD7;1FD7;03B9 0308 0342;1FD7;03B9 0308 0342; 1FD8;1FD8;0399 0306;1FD8;0399 0306; 1FD9;1FD9;0399 0304;1FD9;0399 0304; 1FDA;1FDA;0399 0300;1FDA;0399 0300; 1FDB;038A;0399 0301;038A;0399 0301; 1FDD;1FDD;1FFE 0300;0020 0314 0300;0020 0314 0300; 1FDE;1FDE;1FFE 0301;0020 0314 0301;0020 0314 0301; 1FDF;1FDF;1FFE 0342;0020 0314 0342;0020 0314 0342; 1FE0;1FE0;03C5 0306;1FE0;03C5 0306; 1FE1;1FE1;03C5 0304;1FE1;03C5 0304; 1FE2;1FE2;03C5 0308 0300;1FE2;03C5 0308 0300; 1FE3;03B0;03C5 0308 0301;03B0;03C5 0308 0301; 1FE4;1FE4;03C1 0313;1FE4;03C1 0313; 1FE5;1FE5;03C1 0314;1FE5;03C1 0314; 1FE6;1FE6;03C5 0342;1FE6;03C5 0342; 1FE7;1FE7;03C5 0308 0342;1FE7;03C5 0308 0342; 1FE8;1FE8;03A5 0306;1FE8;03A5 0306; 1FE9;1FE9;03A5 0304;1FE9;03A5 0304; 1FEA;1FEA;03A5 0300;1FEA;03A5 0300; 1FEB;038E;03A5 0301;038E;03A5 0301; 1FEC;1FEC;03A1 0314;1FEC;03A1 0314; 1FED;1FED;00A8 0300;0020 0308 0300;0020 0308 0300; 1FEE;0385;00A8 0301;0020 0308 0301;0020 0308 0301; 1FEF;0060;0060;0060;0060; 1FF2;1FF2;03C9 0300 0345;1FF2;03C9 0300 0345; 1FF3;1FF3;03C9 0345;1FF3;03C9 0345; 1FF4;1FF4;03C9 0301 0345;1FF4;03C9 0301 0345; 1FF6;1FF6;03C9 0342;1FF6;03C9 0342; 1FF7;1FF7;03C9 0342 0345;1FF7;03C9 0342 0345; 1FF8;1FF8;039F 0300;1FF8;039F 0300; 1FF9;038C;039F 0301;038C;039F 0301; 1FFA;1FFA;03A9 0300;1FFA;03A9 0300; 1FFB;038F;03A9 0301;038F;03A9 0301; 1FFC;1FFC;03A9 0345;1FFC;03A9 0345; 1FFD;00B4;00B4;0020 0301;0020 0301; 1FFE;1FFE;1FFE;0020 0314;0020 0314; 2000;2002;2002;0020;0020; 2001;2003;2003;0020;0020; 2002;2002;2002;0020;0020; 2003;2003;2003;0020;0020; 2004;2004;2004;0020;0020; 2005;2005;2005;0020;0020; 2006;2006;2006;0020;0020; 2007;2007;2007;0020;0020; 2008;2008;2008;0020;0020; 2009;2009;2009;0020;0020; 200A;200A;200A;0020;0020; 2011;2011;2011;2010;2010; 2017;2017;2017;0020 0333;0020 0333; 2024;2024;2024;002E;002E; 2025;2025;2025;002E 002E;002E 002E; 2026;2026;2026;002E 002E 002E;002E 002E 002E; 202F;202F;202F;0020;0020; 2033;2033;2033;2032 2032;2032 2032; 2034;2034;2034;2032 2032 2032;2032 2032 2032; 2036;2036;2036;2035 2035;2035 2035; 2037;2037;2037;2035 2035 2035;2035 2035 2035; 203C;203C;203C;0021 0021;0021 0021; 203E;203E;203E;0020 0305;0020 0305; 2047;2047;2047;003F 003F;003F 003F; 2048;2048;2048;003F 0021;003F 0021; 2049;2049;2049;0021 003F;0021 003F; 2057;2057;2057;2032 2032 2032 2032;2032 2032 2032 2032; 205F;205F;205F;0020;0020; 2070;2070;2070;0030;0030; 2071;2071;2071;0069;0069; 2074;2074;2074;0034;0034; 2075;2075;2075;0035;0035; 2076;2076;2076;0036;0036; 2077;2077;2077;0037;0037; 2078;2078;2078;0038;0038; 2079;2079;2079;0039;0039; 207A;207A;207A;002B;002B; 207B;207B;207B;2212;2212; 207C;207C;207C;003D;003D; 207D;207D;207D;0028;0028; 207E;207E;207E;0029;0029; 207F;207F;207F;006E;006E; 2080;2080;2080;0030;0030; 2081;2081;2081;0031;0031; 2082;2082;2082;0032;0032; 2083;2083;2083;0033;0033; 2084;2084;2084;0034;0034; 2085;2085;2085;0035;0035; 2086;2086;2086;0036;0036; 2087;2087;2087;0037;0037; 2088;2088;2088;0038;0038; 2089;2089;2089;0039;0039; 208A;208A;208A;002B;002B; 208B;208B;208B;2212;2212; 208C;208C;208C;003D;003D; 208D;208D;208D;0028;0028; 208E;208E;208E;0029;0029; 2090;2090;2090;0061;0061; 2091;2091;2091;0065;0065; 2092;2092;2092;006F;006F; 2093;2093;2093;0078;0078; 2094;2094;2094;0259;0259; 2095;2095;2095;0068;0068; 2096;2096;2096;006B;006B; 2097;2097;2097;006C;006C; 2098;2098;2098;006D;006D; 2099;2099;2099;006E;006E; 209A;209A;209A;0070;0070; 209B;209B;209B;0073;0073; 209C;209C;209C;0074;0074; 20A8;20A8;20A8;0052 0073;0052 0073; 2100;2100;2100;0061 002F 0063;0061 002F 0063; 2101;2101;2101;0061 002F 0073;0061 002F 0073; 2102;2102;2102;0043;0043; 2103;2103;2103;00B0 0043;00B0 0043; 2105;2105;2105;0063 002F 006F;0063 002F 006F; 2106;2106;2106;0063 002F 0075;0063 002F 0075; 2107;2107;2107;0190;0190; 2109;2109;2109;00B0 0046;00B0 0046; 210A;210A;210A;0067;0067; 210B;210B;210B;0048;0048; 210C;210C;210C;0048;0048; 210D;210D;210D;0048;0048; 210E;210E;210E;0068;0068; 210F;210F;210F;0127;0127; 2110;2110;2110;0049;0049; 2111;2111;2111;0049;0049; 2112;2112;2112;004C;004C; 2113;2113;2113;006C;006C; 2115;2115;2115;004E;004E; 2116;2116;2116;004E 006F;004E 006F; 2119;2119;2119;0050;0050; 211A;211A;211A;0051;0051; 211B;211B;211B;0052;0052; 211C;211C;211C;0052;0052; 211D;211D;211D;0052;0052; 2120;2120;2120;0053 004D;0053 004D; 2121;2121;2121;0054 0045 004C;0054 0045 004C; 2122;2122;2122;0054 004D;0054 004D; 2124;2124;2124;005A;005A; 2126;03A9;03A9;03A9;03A9; 2128;2128;2128;005A;005A; 212A;004B;004B;004B;004B; 212B;00C5;0041 030A;00C5;0041 030A; 212C;212C;212C;0042;0042; 212D;212D;212D;0043;0043; 212F;212F;212F;0065;0065; 2130;2130;2130;0045;0045; 2131;2131;2131;0046;0046; 2133;2133;2133;004D;004D; 2134;2134;2134;006F;006F; 2135;2135;2135;05D0;05D0; 2136;2136;2136;05D1;05D1; 2137;2137;2137;05D2;05D2; 2138;2138;2138;05D3;05D3; 2139;2139;2139;0069;0069; 213B;213B;213B;0046 0041 0058;0046 0041 0058; 213C;213C;213C;03C0;03C0; 213D;213D;213D;03B3;03B3; 213E;213E;213E;0393;0393; 213F;213F;213F;03A0;03A0; 2140;2140;2140;2211;2211; 2145;2145;2145;0044;0044; 2146;2146;2146;0064;0064; 2147;2147;2147;0065;0065; 2148;2148;2148;0069;0069; 2149;2149;2149;006A;006A; 2150;2150;2150;0031 2044 0037;0031 2044 0037; 2151;2151;2151;0031 2044 0039;0031 2044 0039; 2152;2152;2152;0031 2044 0031 0030;0031 2044 0031 0030; 2153;2153;2153;0031 2044 0033;0031 2044 0033; 2154;2154;2154;0032 2044 0033;0032 2044 0033; 2155;2155;2155;0031 2044 0035;0031 2044 0035; 2156;2156;2156;0032 2044 0035;0032 2044 0035; 2157;2157;2157;0033 2044 0035;0033 2044 0035; 2158;2158;2158;0034 2044 0035;0034 2044 0035; 2159;2159;2159;0031 2044 0036;0031 2044 0036; 215A;215A;215A;0035 2044 0036;0035 2044 0036; 215B;215B;215B;0031 2044 0038;0031 2044 0038; 215C;215C;215C;0033 2044 0038;0033 2044 0038; 215D;215D;215D;0035 2044 0038;0035 2044 0038; 215E;215E;215E;0037 2044 0038;0037 2044 0038; 215F;215F;215F;0031 2044;0031 2044; 2160;2160;2160;0049;0049; 2161;2161;2161;0049 0049;0049 0049; 2162;2162;2162;0049 0049 0049;0049 0049 0049; 2163;2163;2163;0049 0056;0049 0056; 2164;2164;2164;0056;0056; 2165;2165;2165;0056 0049;0056 0049; 2166;2166;2166;0056 0049 0049;0056 0049 0049; 2167;2167;2167;0056 0049 0049 0049;0056 0049 0049 0049; 2168;2168;2168;0049 0058;0049 0058; 2169;2169;2169;0058;0058; 216A;216A;216A;0058 0049;0058 0049; 216B;216B;216B;0058 0049 0049;0058 0049 0049; 216C;216C;216C;004C;004C; 216D;216D;216D;0043;0043; 216E;216E;216E;0044;0044; 216F;216F;216F;004D;004D; 2170;2170;2170;0069;0069; 2171;2171;2171;0069 0069;0069 0069; 2172;2172;2172;0069 0069 0069;0069 0069 0069; 2173;2173;2173;0069 0076;0069 0076; 2174;2174;2174;0076;0076; 2175;2175;2175;0076 0069;0076 0069; 2176;2176;2176;0076 0069 0069;0076 0069 0069; 2177;2177;2177;0076 0069 0069 0069;0076 0069 0069 0069; 2178;2178;2178;0069 0078;0069 0078; 2179;2179;2179;0078;0078; 217A;217A;217A;0078 0069;0078 0069; 217B;217B;217B;0078 0069 0069;0078 0069 0069; 217C;217C;217C;006C;006C; 217D;217D;217D;0063;0063; 217E;217E;217E;0064;0064; 217F;217F;217F;006D;006D; 2189;2189;2189;0030 2044 0033;0030 2044 0033; 219A;219A;2190 0338;219A;2190 0338; 219B;219B;2192 0338;219B;2192 0338; 21AE;21AE;2194 0338;21AE;2194 0338; 21CD;21CD;21D0 0338;21CD;21D0 0338; 21CE;21CE;21D4 0338;21CE;21D4 0338; 21CF;21CF;21D2 0338;21CF;21D2 0338; 2204;2204;2203 0338;2204;2203 0338; 2209;2209;2208 0338;2209;2208 0338; 220C;220C;220B 0338;220C;220B 0338; 2224;2224;2223 0338;2224;2223 0338; 2226;2226;2225 0338;2226;2225 0338; 222C;222C;222C;222B 222B;222B 222B; 222D;222D;222D;222B 222B 222B;222B 222B 222B; 222F;222F;222F;222E 222E;222E 222E; 2230;2230;2230;222E 222E 222E;222E 222E 222E; 2241;2241;223C 0338;2241;223C 0338; 2244;2244;2243 0338;2244;2243 0338; 2247;2247;2245 0338;2247;2245 0338; 2249;2249;2248 0338;2249;2248 0338; 2260;2260;003D 0338;2260;003D 0338; 2262;2262;2261 0338;2262;2261 0338; 226D;226D;224D 0338;226D;224D 0338; 226E;226E;003C 0338;226E;003C 0338; 226F;226F;003E 0338;226F;003E 0338; 2270;2270;2264 0338;2270;2264 0338; 2271;2271;2265 0338;2271;2265 0338; 2274;2274;2272 0338;2274;2272 0338; 2275;2275;2273 0338;2275;2273 0338; 2278;2278;2276 0338;2278;2276 0338; 2279;2279;2277 0338;2279;2277 0338; 2280;2280;227A 0338;2280;227A 0338; 2281;2281;227B 0338;2281;227B 0338; 2284;2284;2282 0338;2284;2282 0338; 2285;2285;2283 0338;2285;2283 0338; 2288;2288;2286 0338;2288;2286 0338; 2289;2289;2287 0338;2289;2287 0338; 22AC;22AC;22A2 0338;22AC;22A2 0338; 22AD;22AD;22A8 0338;22AD;22A8 0338; 22AE;22AE;22A9 0338;22AE;22A9 0338; 22AF;22AF;22AB 0338;22AF;22AB 0338; 22E0;22E0;227C 0338;22E0;227C 0338; 22E1;22E1;227D 0338;22E1;227D 0338; 22E2;22E2;2291 0338;22E2;2291 0338; 22E3;22E3;2292 0338;22E3;2292 0338; 22EA;22EA;22B2 0338;22EA;22B2 0338; 22EB;22EB;22B3 0338;22EB;22B3 0338; 22EC;22EC;22B4 0338;22EC;22B4 0338; 22ED;22ED;22B5 0338;22ED;22B5 0338; 2329;3008;3008;3008;3008; 232A;3009;3009;3009;3009; 2460;2460;2460;0031;0031; 2461;2461;2461;0032;0032; 2462;2462;2462;0033;0033; 2463;2463;2463;0034;0034; 2464;2464;2464;0035;0035; 2465;2465;2465;0036;0036; 2466;2466;2466;0037;0037; 2467;2467;2467;0038;0038; 2468;2468;2468;0039;0039; 2469;2469;2469;0031 0030;0031 0030; 246A;246A;246A;0031 0031;0031 0031; 246B;246B;246B;0031 0032;0031 0032; 246C;246C;246C;0031 0033;0031 0033; 246D;246D;246D;0031 0034;0031 0034; 246E;246E;246E;0031 0035;0031 0035; 246F;246F;246F;0031 0036;0031 0036; 2470;2470;2470;0031 0037;0031 0037; 2471;2471;2471;0031 0038;0031 0038; 2472;2472;2472;0031 0039;0031 0039; 2473;2473;2473;0032 0030;0032 0030; 2474;2474;2474;0028 0031 0029;0028 0031 0029; 2475;2475;2475;0028 0032 0029;0028 0032 0029; 2476;2476;2476;0028 0033 0029;0028 0033 0029; 2477;2477;2477;0028 0034 0029;0028 0034 0029; 2478;2478;2478;0028 0035 0029;0028 0035 0029; 2479;2479;2479;0028 0036 0029;0028 0036 0029; 247A;247A;247A;0028 0037 0029;0028 0037 0029; 247B;247B;247B;0028 0038 0029;0028 0038 0029; 247C;247C;247C;0028 0039 0029;0028 0039 0029; 247D;247D;247D;0028 0031 0030 0029;0028 0031 0030 0029; 247E;247E;247E;0028 0031 0031 0029;0028 0031 0031 0029; 247F;247F;247F;0028 0031 0032 0029;0028 0031 0032 0029; 2480;2480;2480;0028 0031 0033 0029;0028 0031 0033 0029; 2481;2481;2481;0028 0031 0034 0029;0028 0031 0034 0029; 2482;2482;2482;0028 0031 0035 0029;0028 0031 0035 0029; 2483;2483;2483;0028 0031 0036 0029;0028 0031 0036 0029; 2484;2484;2484;0028 0031 0037 0029;0028 0031 0037 0029; 2485;2485;2485;0028 0031 0038 0029;0028 0031 0038 0029; 2486;2486;2486;0028 0031 0039 0029;0028 0031 0039 0029; 2487;2487;2487;0028 0032 0030 0029;0028 0032 0030 0029; 2488;2488;2488;0031 002E;0031 002E; 2489;2489;2489;0032 002E;0032 002E; 248A;248A;248A;0033 002E;0033 002E; 248B;248B;248B;0034 002E;0034 002E; 248C;248C;248C;0035 002E;0035 002E; 248D;248D;248D;0036 002E;0036 002E; 248E;248E;248E;0037 002E;0037 002E; 248F;248F;248F;0038 002E;0038 002E; 2490;2490;2490;0039 002E;0039 002E; 2491;2491;2491;0031 0030 002E;0031 0030 002E; 2492;2492;2492;0031 0031 002E;0031 0031 002E; 2493;2493;2493;0031 0032 002E;0031 0032 002E; 2494;2494;2494;0031 0033 002E;0031 0033 002E; 2495;2495;2495;0031 0034 002E;0031 0034 002E; 2496;2496;2496;0031 0035 002E;0031 0035 002E; 2497;2497;2497;0031 0036 002E;0031 0036 002E; 2498;2498;2498;0031 0037 002E;0031 0037 002E; 2499;2499;2499;0031 0038 002E;0031 0038 002E; 249A;249A;249A;0031 0039 002E;0031 0039 002E; 249B;249B;249B;0032 0030 002E;0032 0030 002E; 249C;249C;249C;0028 0061 0029;0028 0061 0029; 249D;249D;249D;0028 0062 0029;0028 0062 0029; 249E;249E;249E;0028 0063 0029;0028 0063 0029; 249F;249F;249F;0028 0064 0029;0028 0064 0029; 24A0;24A0;24A0;0028 0065 0029;0028 0065 0029; 24A1;24A1;24A1;0028 0066 0029;0028 0066 0029; 24A2;24A2;24A2;0028 0067 0029;0028 0067 0029; 24A3;24A3;24A3;0028 0068 0029;0028 0068 0029; 24A4;24A4;24A4;0028 0069 0029;0028 0069 0029; 24A5;24A5;24A5;0028 006A 0029;0028 006A 0029; 24A6;24A6;24A6;0028 006B 0029;0028 006B 0029; 24A7;24A7;24A7;0028 006C 0029;0028 006C 0029; 24A8;24A8;24A8;0028 006D 0029;0028 006D 0029; 24A9;24A9;24A9;0028 006E 0029;0028 006E 0029; 24AA;24AA;24AA;0028 006F 0029;0028 006F 0029; 24AB;24AB;24AB;0028 0070 0029;0028 0070 0029; 24AC;24AC;24AC;0028 0071 0029;0028 0071 0029; 24AD;24AD;24AD;0028 0072 0029;0028 0072 0029; 24AE;24AE;24AE;0028 0073 0029;0028 0073 0029; 24AF;24AF;24AF;0028 0074 0029;0028 0074 0029; 24B0;24B0;24B0;0028 0075 0029;0028 0075 0029; 24B1;24B1;24B1;0028 0076 0029;0028 0076 0029; 24B2;24B2;24B2;0028 0077 0029;0028 0077 0029; 24B3;24B3;24B3;0028 0078 0029;0028 0078 0029; 24B4;24B4;24B4;0028 0079 0029;0028 0079 0029; 24B5;24B5;24B5;0028 007A 0029;0028 007A 0029; 24B6;24B6;24B6;0041;0041; 24B7;24B7;24B7;0042;0042; 24B8;24B8;24B8;0043;0043; 24B9;24B9;24B9;0044;0044; 24BA;24BA;24BA;0045;0045; 24BB;24BB;24BB;0046;0046; 24BC;24BC;24BC;0047;0047; 24BD;24BD;24BD;0048;0048; 24BE;24BE;24BE;0049;0049; 24BF;24BF;24BF;004A;004A; 24C0;24C0;24C0;004B;004B; 24C1;24C1;24C1;004C;004C; 24C2;24C2;24C2;004D;004D; 24C3;24C3;24C3;004E;004E; 24C4;24C4;24C4;004F;004F; 24C5;24C5;24C5;0050;0050; 24C6;24C6;24C6;0051;0051; 24C7;24C7;24C7;0052;0052; 24C8;24C8;24C8;0053;0053; 24C9;24C9;24C9;0054;0054; 24CA;24CA;24CA;0055;0055; 24CB;24CB;24CB;0056;0056; 24CC;24CC;24CC;0057;0057; 24CD;24CD;24CD;0058;0058; 24CE;24CE;24CE;0059;0059; 24CF;24CF;24CF;005A;005A; 24D0;24D0;24D0;0061;0061; 24D1;24D1;24D1;0062;0062; 24D2;24D2;24D2;0063;0063; 24D3;24D3;24D3;0064;0064; 24D4;24D4;24D4;0065;0065; 24D5;24D5;24D5;0066;0066; 24D6;24D6;24D6;0067;0067; 24D7;24D7;24D7;0068;0068; 24D8;24D8;24D8;0069;0069; 24D9;24D9;24D9;006A;006A; 24DA;24DA;24DA;006B;006B; 24DB;24DB;24DB;006C;006C; 24DC;24DC;24DC;006D;006D; 24DD;24DD;24DD;006E;006E; 24DE;24DE;24DE;006F;006F; 24DF;24DF;24DF;0070;0070; 24E0;24E0;24E0;0071;0071; 24E1;24E1;24E1;0072;0072; 24E2;24E2;24E2;0073;0073; 24E3;24E3;24E3;0074;0074; 24E4;24E4;24E4;0075;0075; 24E5;24E5;24E5;0076;0076; 24E6;24E6;24E6;0077;0077; 24E7;24E7;24E7;0078;0078; 24E8;24E8;24E8;0079;0079; 24E9;24E9;24E9;007A;007A; 24EA;24EA;24EA;0030;0030; 2A0C;2A0C;2A0C;222B 222B 222B 222B;222B 222B 222B 222B; 2A74;2A74;2A74;003A 003A 003D;003A 003A 003D; 2A75;2A75;2A75;003D 003D;003D 003D; 2A76;2A76;2A76;003D 003D 003D;003D 003D 003D; 2ADC;2ADD 0338;2ADD 0338;2ADD 0338;2ADD 0338; 2C7C;2C7C;2C7C;006A;006A; 2C7D;2C7D;2C7D;0056;0056; 2D6F;2D6F;2D6F;2D61;2D61; 2E9F;2E9F;2E9F;6BCD;6BCD; 2EF3;2EF3;2EF3;9F9F;9F9F; 2F00;2F00;2F00;4E00;4E00; 2F01;2F01;2F01;4E28;4E28; 2F02;2F02;2F02;4E36;4E36; 2F03;2F03;2F03;4E3F;4E3F; 2F04;2F04;2F04;4E59;4E59; 2F05;2F05;2F05;4E85;4E85; 2F06;2F06;2F06;4E8C;4E8C; 2F07;2F07;2F07;4EA0;4EA0; 2F08;2F08;2F08;4EBA;4EBA; 2F09;2F09;2F09;513F;513F; 2F0A;2F0A;2F0A;5165;5165; 2F0B;2F0B;2F0B;516B;516B; 2F0C;2F0C;2F0C;5182;5182; 2F0D;2F0D;2F0D;5196;5196; 2F0E;2F0E;2F0E;51AB;51AB; 2F0F;2F0F;2F0F;51E0;51E0; 2F10;2F10;2F10;51F5;51F5; 2F11;2F11;2F11;5200;5200; 2F12;2F12;2F12;529B;529B; 2F13;2F13;2F13;52F9;52F9; 2F14;2F14;2F14;5315;5315; 2F15;2F15;2F15;531A;531A; 2F16;2F16;2F16;5338;5338; 2F17;2F17;2F17;5341;5341; 2F18;2F18;2F18;535C;535C; 2F19;2F19;2F19;5369;5369; 2F1A;2F1A;2F1A;5382;5382; 2F1B;2F1B;2F1B;53B6;53B6; 2F1C;2F1C;2F1C;53C8;53C8; 2F1D;2F1D;2F1D;53E3;53E3; 2F1E;2F1E;2F1E;56D7;56D7; 2F1F;2F1F;2F1F;571F;571F; 2F20;2F20;2F20;58EB;58EB; 2F21;2F21;2F21;5902;5902; 2F22;2F22;2F22;590A;590A; 2F23;2F23;2F23;5915;5915; 2F24;2F24;2F24;5927;5927; 2F25;2F25;2F25;5973;5973; 2F26;2F26;2F26;5B50;5B50; 2F27;2F27;2F27;5B80;5B80; 2F28;2F28;2F28;5BF8;5BF8; 2F29;2F29;2F29;5C0F;5C0F; 2F2A;2F2A;2F2A;5C22;5C22; 2F2B;2F2B;2F2B;5C38;5C38; 2F2C;2F2C;2F2C;5C6E;5C6E; 2F2D;2F2D;2F2D;5C71;5C71; 2F2E;2F2E;2F2E;5DDB;5DDB; 2F2F;2F2F;2F2F;5DE5;5DE5; 2F30;2F30;2F30;5DF1;5DF1; 2F31;2F31;2F31;5DFE;5DFE; 2F32;2F32;2F32;5E72;5E72; 2F33;2F33;2F33;5E7A;5E7A; 2F34;2F34;2F34;5E7F;5E7F; 2F35;2F35;2F35;5EF4;5EF4; 2F36;2F36;2F36;5EFE;5EFE; 2F37;2F37;2F37;5F0B;5F0B; 2F38;2F38;2F38;5F13;5F13; 2F39;2F39;2F39;5F50;5F50; 2F3A;2F3A;2F3A;5F61;5F61; 2F3B;2F3B;2F3B;5F73;5F73; 2F3C;2F3C;2F3C;5FC3;5FC3; 2F3D;2F3D;2F3D;6208;6208; 2F3E;2F3E;2F3E;6236;6236; 2F3F;2F3F;2F3F;624B;624B; 2F40;2F40;2F40;652F;652F; 2F41;2F41;2F41;6534;6534; 2F42;2F42;2F42;6587;6587; 2F43;2F43;2F43;6597;6597; 2F44;2F44;2F44;65A4;65A4; 2F45;2F45;2F45;65B9;65B9; 2F46;2F46;2F46;65E0;65E0; 2F47;2F47;2F47;65E5;65E5; 2F48;2F48;2F48;66F0;66F0; 2F49;2F49;2F49;6708;6708; 2F4A;2F4A;2F4A;6728;6728; 2F4B;2F4B;2F4B;6B20;6B20; 2F4C;2F4C;2F4C;6B62;6B62; 2F4D;2F4D;2F4D;6B79;6B79; 2F4E;2F4E;2F4E;6BB3;6BB3; 2F4F;2F4F;2F4F;6BCB;6BCB; 2F50;2F50;2F50;6BD4;6BD4; 2F51;2F51;2F51;6BDB;6BDB; 2F52;2F52;2F52;6C0F;6C0F; 2F53;2F53;2F53;6C14;6C14; 2F54;2F54;2F54;6C34;6C34; 2F55;2F55;2F55;706B;706B; 2F56;2F56;2F56;722A;722A; 2F57;2F57;2F57;7236;7236; 2F58;2F58;2F58;723B;723B; 2F59;2F59;2F59;723F;723F; 2F5A;2F5A;2F5A;7247;7247; 2F5B;2F5B;2F5B;7259;7259; 2F5C;2F5C;2F5C;725B;725B; 2F5D;2F5D;2F5D;72AC;72AC; 2F5E;2F5E;2F5E;7384;7384; 2F5F;2F5F;2F5F;7389;7389; 2F60;2F60;2F60;74DC;74DC; 2F61;2F61;2F61;74E6;74E6; 2F62;2F62;2F62;7518;7518; 2F63;2F63;2F63;751F;751F; 2F64;2F64;2F64;7528;7528; 2F65;2F65;2F65;7530;7530; 2F66;2F66;2F66;758B;758B; 2F67;2F67;2F67;7592;7592; 2F68;2F68;2F68;7676;7676; 2F69;2F69;2F69;767D;767D; 2F6A;2F6A;2F6A;76AE;76AE; 2F6B;2F6B;2F6B;76BF;76BF; 2F6C;2F6C;2F6C;76EE;76EE; 2F6D;2F6D;2F6D;77DB;77DB; 2F6E;2F6E;2F6E;77E2;77E2; 2F6F;2F6F;2F6F;77F3;77F3; 2F70;2F70;2F70;793A;793A; 2F71;2F71;2F71;79B8;79B8; 2F72;2F72;2F72;79BE;79BE; 2F73;2F73;2F73;7A74;7A74; 2F74;2F74;2F74;7ACB;7ACB; 2F75;2F75;2F75;7AF9;7AF9; 2F76;2F76;2F76;7C73;7C73; 2F77;2F77;2F77;7CF8;7CF8; 2F78;2F78;2F78;7F36;7F36; 2F79;2F79;2F79;7F51;7F51; 2F7A;2F7A;2F7A;7F8A;7F8A; 2F7B;2F7B;2F7B;7FBD;7FBD; 2F7C;2F7C;2F7C;8001;8001; 2F7D;2F7D;2F7D;800C;800C; 2F7E;2F7E;2F7E;8012;8012; 2F7F;2F7F;2F7F;8033;8033; 2F80;2F80;2F80;807F;807F; 2F81;2F81;2F81;8089;8089; 2F82;2F82;2F82;81E3;81E3; 2F83;2F83;2F83;81EA;81EA; 2F84;2F84;2F84;81F3;81F3; 2F85;2F85;2F85;81FC;81FC; 2F86;2F86;2F86;820C;820C; 2F87;2F87;2F87;821B;821B; 2F88;2F88;2F88;821F;821F; 2F89;2F89;2F89;826E;826E; 2F8A;2F8A;2F8A;8272;8272; 2F8B;2F8B;2F8B;8278;8278; 2F8C;2F8C;2F8C;864D;864D; 2F8D;2F8D;2F8D;866B;866B; 2F8E;2F8E;2F8E;8840;8840; 2F8F;2F8F;2F8F;884C;884C; 2F90;2F90;2F90;8863;8863; 2F91;2F91;2F91;897E;897E; 2F92;2F92;2F92;898B;898B; 2F93;2F93;2F93;89D2;89D2; 2F94;2F94;2F94;8A00;8A00; 2F95;2F95;2F95;8C37;8C37; 2F96;2F96;2F96;8C46;8C46; 2F97;2F97;2F97;8C55;8C55; 2F98;2F98;2F98;8C78;8C78; 2F99;2F99;2F99;8C9D;8C9D; 2F9A;2F9A;2F9A;8D64;8D64; 2F9B;2F9B;2F9B;8D70;8D70; 2F9C;2F9C;2F9C;8DB3;8DB3; 2F9D;2F9D;2F9D;8EAB;8EAB; 2F9E;2F9E;2F9E;8ECA;8ECA; 2F9F;2F9F;2F9F;8F9B;8F9B; 2FA0;2FA0;2FA0;8FB0;8FB0; 2FA1;2FA1;2FA1;8FB5;8FB5; 2FA2;2FA2;2FA2;9091;9091; 2FA3;2FA3;2FA3;9149;9149; 2FA4;2FA4;2FA4;91C6;91C6; 2FA5;2FA5;2FA5;91CC;91CC; 2FA6;2FA6;2FA6;91D1;91D1; 2FA7;2FA7;2FA7;9577;9577; 2FA8;2FA8;2FA8;9580;9580; 2FA9;2FA9;2FA9;961C;961C; 2FAA;2FAA;2FAA;96B6;96B6; 2FAB;2FAB;2FAB;96B9;96B9; 2FAC;2FAC;2FAC;96E8;96E8; 2FAD;2FAD;2FAD;9751;9751; 2FAE;2FAE;2FAE;975E;975E; 2FAF;2FAF;2FAF;9762;9762; 2FB0;2FB0;2FB0;9769;9769; 2FB1;2FB1;2FB1;97CB;97CB; 2FB2;2FB2;2FB2;97ED;97ED; 2FB3;2FB3;2FB3;97F3;97F3; 2FB4;2FB4;2FB4;9801;9801; 2FB5;2FB5;2FB5;98A8;98A8; 2FB6;2FB6;2FB6;98DB;98DB; 2FB7;2FB7;2FB7;98DF;98DF; 2FB8;2FB8;2FB8;9996;9996; 2FB9;2FB9;2FB9;9999;9999; 2FBA;2FBA;2FBA;99AC;99AC; 2FBB;2FBB;2FBB;9AA8;9AA8; 2FBC;2FBC;2FBC;9AD8;9AD8; 2FBD;2FBD;2FBD;9ADF;9ADF; 2FBE;2FBE;2FBE;9B25;9B25; 2FBF;2FBF;2FBF;9B2F;9B2F; 2FC0;2FC0;2FC0;9B32;9B32; 2FC1;2FC1;2FC1;9B3C;9B3C; 2FC2;2FC2;2FC2;9B5A;9B5A; 2FC3;2FC3;2FC3;9CE5;9CE5; 2FC4;2FC4;2FC4;9E75;9E75; 2FC5;2FC5;2FC5;9E7F;9E7F; 2FC6;2FC6;2FC6;9EA5;9EA5; 2FC7;2FC7;2FC7;9EBB;9EBB; 2FC8;2FC8;2FC8;9EC3;9EC3; 2FC9;2FC9;2FC9;9ECD;9ECD; 2FCA;2FCA;2FCA;9ED1;9ED1; 2FCB;2FCB;2FCB;9EF9;9EF9; 2FCC;2FCC;2FCC;9EFD;9EFD; 2FCD;2FCD;2FCD;9F0E;9F0E; 2FCE;2FCE;2FCE;9F13;9F13; 2FCF;2FCF;2FCF;9F20;9F20; 2FD0;2FD0;2FD0;9F3B;9F3B; 2FD1;2FD1;2FD1;9F4A;9F4A; 2FD2;2FD2;2FD2;9F52;9F52; 2FD3;2FD3;2FD3;9F8D;9F8D; 2FD4;2FD4;2FD4;9F9C;9F9C; 2FD5;2FD5;2FD5;9FA0;9FA0; 3000;3000;3000;0020;0020; 3036;3036;3036;3012;3012; 3038;3038;3038;5341;5341; 3039;3039;3039;5344;5344; 303A;303A;303A;5345;5345; 304C;304C;304B 3099;304C;304B 3099; 304E;304E;304D 3099;304E;304D 3099; 3050;3050;304F 3099;3050;304F 3099; 3052;3052;3051 3099;3052;3051 3099; 3054;3054;3053 3099;3054;3053 3099; 3056;3056;3055 3099;3056;3055 3099; 3058;3058;3057 3099;3058;3057 3099; 305A;305A;3059 3099;305A;3059 3099; 305C;305C;305B 3099;305C;305B 3099; 305E;305E;305D 3099;305E;305D 3099; 3060;3060;305F 3099;3060;305F 3099; 3062;3062;3061 3099;3062;3061 3099; 3065;3065;3064 3099;3065;3064 3099; 3067;3067;3066 3099;3067;3066 3099; 3069;3069;3068 3099;3069;3068 3099; 3070;3070;306F 3099;3070;306F 3099; 3071;3071;306F 309A;3071;306F 309A; 3073;3073;3072 3099;3073;3072 3099; 3074;3074;3072 309A;3074;3072 309A; 3076;3076;3075 3099;3076;3075 3099; 3077;3077;3075 309A;3077;3075 309A; 3079;3079;3078 3099;3079;3078 3099; 307A;307A;3078 309A;307A;3078 309A; 307C;307C;307B 3099;307C;307B 3099; 307D;307D;307B 309A;307D;307B 309A; 3094;3094;3046 3099;3094;3046 3099; 309B;309B;309B;0020 3099;0020 3099; 309C;309C;309C;0020 309A;0020 309A; 309E;309E;309D 3099;309E;309D 3099; 309F;309F;309F;3088 308A;3088 308A; 30AC;30AC;30AB 3099;30AC;30AB 3099; 30AE;30AE;30AD 3099;30AE;30AD 3099; 30B0;30B0;30AF 3099;30B0;30AF 3099; 30B2;30B2;30B1 3099;30B2;30B1 3099; 30B4;30B4;30B3 3099;30B4;30B3 3099; 30B6;30B6;30B5 3099;30B6;30B5 3099; 30B8;30B8;30B7 3099;30B8;30B7 3099; 30BA;30BA;30B9 3099;30BA;30B9 3099; 30BC;30BC;30BB 3099;30BC;30BB 3099; 30BE;30BE;30BD 3099;30BE;30BD 3099; 30C0;30C0;30BF 3099;30C0;30BF 3099; 30C2;30C2;30C1 3099;30C2;30C1 3099; 30C5;30C5;30C4 3099;30C5;30C4 3099; 30C7;30C7;30C6 3099;30C7;30C6 3099; 30C9;30C9;30C8 3099;30C9;30C8 3099; 30D0;30D0;30CF 3099;30D0;30CF 3099; 30D1;30D1;30CF 309A;30D1;30CF 309A; 30D3;30D3;30D2 3099;30D3;30D2 3099; 30D4;30D4;30D2 309A;30D4;30D2 309A; 30D6;30D6;30D5 3099;30D6;30D5 3099; 30D7;30D7;30D5 309A;30D7;30D5 309A; 30D9;30D9;30D8 3099;30D9;30D8 3099; 30DA;30DA;30D8 309A;30DA;30D8 309A; 30DC;30DC;30DB 3099;30DC;30DB 3099; 30DD;30DD;30DB 309A;30DD;30DB 309A; 30F4;30F4;30A6 3099;30F4;30A6 3099; 30F7;30F7;30EF 3099;30F7;30EF 3099; 30F8;30F8;30F0 3099;30F8;30F0 3099; 30F9;30F9;30F1 3099;30F9;30F1 3099; 30FA;30FA;30F2 3099;30FA;30F2 3099; 30FE;30FE;30FD 3099;30FE;30FD 3099; 30FF;30FF;30FF;30B3 30C8;30B3 30C8; 3131;3131;3131;1100;1100; 3132;3132;3132;1101;1101; 3133;3133;3133;11AA;11AA; 3134;3134;3134;1102;1102; 3135;3135;3135;11AC;11AC; 3136;3136;3136;11AD;11AD; 3137;3137;3137;1103;1103; 3138;3138;3138;1104;1104; 3139;3139;3139;1105;1105; 313A;313A;313A;11B0;11B0; 313B;313B;313B;11B1;11B1; 313C;313C;313C;11B2;11B2; 313D;313D;313D;11B3;11B3; 313E;313E;313E;11B4;11B4; 313F;313F;313F;11B5;11B5; 3140;3140;3140;111A;111A; 3141;3141;3141;1106;1106; 3142;3142;3142;1107;1107; 3143;3143;3143;1108;1108; 3144;3144;3144;1121;1121; 3145;3145;3145;1109;1109; 3146;3146;3146;110A;110A; 3147;3147;3147;110B;110B; 3148;3148;3148;110C;110C; 3149;3149;3149;110D;110D; 314A;314A;314A;110E;110E; 314B;314B;314B;110F;110F; 314C;314C;314C;1110;1110; 314D;314D;314D;1111;1111; 314E;314E;314E;1112;1112; 314F;314F;314F;1161;1161; 3150;3150;3150;1162;1162; 3151;3151;3151;1163;1163; 3152;3152;3152;1164;1164; 3153;3153;3153;1165;1165; 3154;3154;3154;1166;1166; 3155;3155;3155;1167;1167; 3156;3156;3156;1168;1168; 3157;3157;3157;1169;1169; 3158;3158;3158;116A;116A; 3159;3159;3159;116B;116B; 315A;315A;315A;116C;116C; 315B;315B;315B;116D;116D; 315C;315C;315C;116E;116E; 315D;315D;315D;116F;116F; 315E;315E;315E;1170;1170; 315F;315F;315F;1171;1171; 3160;3160;3160;1172;1172; 3161;3161;3161;1173;1173; 3162;3162;3162;1174;1174; 3163;3163;3163;1175;1175; 3164;3164;3164;1160;1160; 3165;3165;3165;1114;1114; 3166;3166;3166;1115;1115; 3167;3167;3167;11C7;11C7; 3168;3168;3168;11C8;11C8; 3169;3169;3169;11CC;11CC; 316A;316A;316A;11CE;11CE; 316B;316B;316B;11D3;11D3; 316C;316C;316C;11D7;11D7; 316D;316D;316D;11D9;11D9; 316E;316E;316E;111C;111C; 316F;316F;316F;11DD;11DD; 3170;3170;3170;11DF;11DF; 3171;3171;3171;111D;111D; 3172;3172;3172;111E;111E; 3173;3173;3173;1120;1120; 3174;3174;3174;1122;1122; 3175;3175;3175;1123;1123; 3176;3176;3176;1127;1127; 3177;3177;3177;1129;1129; 3178;3178;3178;112B;112B; 3179;3179;3179;112C;112C; 317A;317A;317A;112D;112D; 317B;317B;317B;112E;112E; 317C;317C;317C;112F;112F; 317D;317D;317D;1132;1132; 317E;317E;317E;1136;1136; 317F;317F;317F;1140;1140; 3180;3180;3180;1147;1147; 3181;3181;3181;114C;114C; 3182;3182;3182;11F1;11F1; 3183;3183;3183;11F2;11F2; 3184;3184;3184;1157;1157; 3185;3185;3185;1158;1158; 3186;3186;3186;1159;1159; 3187;3187;3187;1184;1184; 3188;3188;3188;1185;1185; 3189;3189;3189;1188;1188; 318A;318A;318A;1191;1191; 318B;318B;318B;1192;1192; 318C;318C;318C;1194;1194; 318D;318D;318D;119E;119E; 318E;318E;318E;11A1;11A1; 3192;3192;3192;4E00;4E00; 3193;3193;3193;4E8C;4E8C; 3194;3194;3194;4E09;4E09; 3195;3195;3195;56DB;56DB; 3196;3196;3196;4E0A;4E0A; 3197;3197;3197;4E2D;4E2D; 3198;3198;3198;4E0B;4E0B; 3199;3199;3199;7532;7532; 319A;319A;319A;4E59;4E59; 319B;319B;319B;4E19;4E19; 319C;319C;319C;4E01;4E01; 319D;319D;319D;5929;5929; 319E;319E;319E;5730;5730; 319F;319F;319F;4EBA;4EBA; 3200;3200;3200;0028 1100 0029;0028 1100 0029; 3201;3201;3201;0028 1102 0029;0028 1102 0029; 3202;3202;3202;0028 1103 0029;0028 1103 0029; 3203;3203;3203;0028 1105 0029;0028 1105 0029; 3204;3204;3204;0028 1106 0029;0028 1106 0029; 3205;3205;3205;0028 1107 0029;0028 1107 0029; 3206;3206;3206;0028 1109 0029;0028 1109 0029; 3207;3207;3207;0028 110B 0029;0028 110B 0029; 3208;3208;3208;0028 110C 0029;0028 110C 0029; 3209;3209;3209;0028 110E 0029;0028 110E 0029; 320A;320A;320A;0028 110F 0029;0028 110F 0029; 320B;320B;320B;0028 1110 0029;0028 1110 0029; 320C;320C;320C;0028 1111 0029;0028 1111 0029; 320D;320D;320D;0028 1112 0029;0028 1112 0029; 320E;320E;320E;0028 AC00 0029;0028 1100 1161 0029; 320F;320F;320F;0028 B098 0029;0028 1102 1161 0029; 3210;3210;3210;0028 B2E4 0029;0028 1103 1161 0029; 3211;3211;3211;0028 B77C 0029;0028 1105 1161 0029; 3212;3212;3212;0028 B9C8 0029;0028 1106 1161 0029; 3213;3213;3213;0028 BC14 0029;0028 1107 1161 0029; 3214;3214;3214;0028 C0AC 0029;0028 1109 1161 0029; 3215;3215;3215;0028 C544 0029;0028 110B 1161 0029; 3216;3216;3216;0028 C790 0029;0028 110C 1161 0029; 3217;3217;3217;0028 CC28 0029;0028 110E 1161 0029; 3218;3218;3218;0028 CE74 0029;0028 110F 1161 0029; 3219;3219;3219;0028 D0C0 0029;0028 1110 1161 0029; 321A;321A;321A;0028 D30C 0029;0028 1111 1161 0029; 321B;321B;321B;0028 D558 0029;0028 1112 1161 0029; 321C;321C;321C;0028 C8FC 0029;0028 110C 116E 0029; 321D;321D;321D;0028 C624 C804 0029;0028 110B 1169 110C 1165 11AB 0029; 321E;321E;321E;0028 C624 D6C4 0029;0028 110B 1169 1112 116E 0029; 3220;3220;3220;0028 4E00 0029;0028 4E00 0029; 3221;3221;3221;0028 4E8C 0029;0028 4E8C 0029; 3222;3222;3222;0028 4E09 0029;0028 4E09 0029; 3223;3223;3223;0028 56DB 0029;0028 56DB 0029; 3224;3224;3224;0028 4E94 0029;0028 4E94 0029; 3225;3225;3225;0028 516D 0029;0028 516D 0029; 3226;3226;3226;0028 4E03 0029;0028 4E03 0029; 3227;3227;3227;0028 516B 0029;0028 516B 0029; 3228;3228;3228;0028 4E5D 0029;0028 4E5D 0029; 3229;3229;3229;0028 5341 0029;0028 5341 0029; 322A;322A;322A;0028 6708 0029;0028 6708 0029; 322B;322B;322B;0028 706B 0029;0028 706B 0029; 322C;322C;322C;0028 6C34 0029;0028 6C34 0029; 322D;322D;322D;0028 6728 0029;0028 6728 0029; 322E;322E;322E;0028 91D1 0029;0028 91D1 0029; 322F;322F;322F;0028 571F 0029;0028 571F 0029; 3230;3230;3230;0028 65E5 0029;0028 65E5 0029; 3231;3231;3231;0028 682A 0029;0028 682A 0029; 3232;3232;3232;0028 6709 0029;0028 6709 0029; 3233;3233;3233;0028 793E 0029;0028 793E 0029; 3234;3234;3234;0028 540D 0029;0028 540D 0029; 3235;3235;3235;0028 7279 0029;0028 7279 0029; 3236;3236;3236;0028 8CA1 0029;0028 8CA1 0029; 3237;3237;3237;0028 795D 0029;0028 795D 0029; 3238;3238;3238;0028 52B4 0029;0028 52B4 0029; 3239;3239;3239;0028 4EE3 0029;0028 4EE3 0029; 323A;323A;323A;0028 547C 0029;0028 547C 0029; 323B;323B;323B;0028 5B66 0029;0028 5B66 0029; 323C;323C;323C;0028 76E3 0029;0028 76E3 0029; 323D;323D;323D;0028 4F01 0029;0028 4F01 0029; 323E;323E;323E;0028 8CC7 0029;0028 8CC7 0029; 323F;323F;323F;0028 5354 0029;0028 5354 0029; 3240;3240;3240;0028 796D 0029;0028 796D 0029; 3241;3241;3241;0028 4F11 0029;0028 4F11 0029; 3242;3242;3242;0028 81EA 0029;0028 81EA 0029; 3243;3243;3243;0028 81F3 0029;0028 81F3 0029; 3244;3244;3244;554F;554F; 3245;3245;3245;5E7C;5E7C; 3246;3246;3246;6587;6587; 3247;3247;3247;7B8F;7B8F; 3250;3250;3250;0050 0054 0045;0050 0054 0045; 3251;3251;3251;0032 0031;0032 0031; 3252;3252;3252;0032 0032;0032 0032; 3253;3253;3253;0032 0033;0032 0033; 3254;3254;3254;0032 0034;0032 0034; 3255;3255;3255;0032 0035;0032 0035; 3256;3256;3256;0032 0036;0032 0036; 3257;3257;3257;0032 0037;0032 0037; 3258;3258;3258;0032 0038;0032 0038; 3259;3259;3259;0032 0039;0032 0039; 325A;325A;325A;0033 0030;0033 0030; 325B;325B;325B;0033 0031;0033 0031; 325C;325C;325C;0033 0032;0033 0032; 325D;325D;325D;0033 0033;0033 0033; 325E;325E;325E;0033 0034;0033 0034; 325F;325F;325F;0033 0035;0033 0035; 3260;3260;3260;1100;1100; 3261;3261;3261;1102;1102; 3262;3262;3262;1103;1103; 3263;3263;3263;1105;1105; 3264;3264;3264;1106;1106; 3265;3265;3265;1107;1107; 3266;3266;3266;1109;1109; 3267;3267;3267;110B;110B; 3268;3268;3268;110C;110C; 3269;3269;3269;110E;110E; 326A;326A;326A;110F;110F; 326B;326B;326B;1110;1110; 326C;326C;326C;1111;1111; 326D;326D;326D;1112;1112; 326E;326E;326E;AC00;1100 1161; 326F;326F;326F;B098;1102 1161; 3270;3270;3270;B2E4;1103 1161; 3271;3271;3271;B77C;1105 1161; 3272;3272;3272;B9C8;1106 1161; 3273;3273;3273;BC14;1107 1161; 3274;3274;3274;C0AC;1109 1161; 3275;3275;3275;C544;110B 1161; 3276;3276;3276;C790;110C 1161; 3277;3277;3277;CC28;110E 1161; 3278;3278;3278;CE74;110F 1161; 3279;3279;3279;D0C0;1110 1161; 327A;327A;327A;D30C;1111 1161; 327B;327B;327B;D558;1112 1161; 327C;327C;327C;CC38 ACE0;110E 1161 11B7 1100 1169; 327D;327D;327D;C8FC C758;110C 116E 110B 1174; 327E;327E;327E;C6B0;110B 116E; 3280;3280;3280;4E00;4E00; 3281;3281;3281;4E8C;4E8C; 3282;3282;3282;4E09;4E09; 3283;3283;3283;56DB;56DB; 3284;3284;3284;4E94;4E94; 3285;3285;3285;516D;516D; 3286;3286;3286;4E03;4E03; 3287;3287;3287;516B;516B; 3288;3288;3288;4E5D;4E5D; 3289;3289;3289;5341;5341; 328A;328A;328A;6708;6708; 328B;328B;328B;706B;706B; 328C;328C;328C;6C34;6C34; 328D;328D;328D;6728;6728; 328E;328E;328E;91D1;91D1; 328F;328F;328F;571F;571F; 3290;3290;3290;65E5;65E5; 3291;3291;3291;682A;682A; 3292;3292;3292;6709;6709; 3293;3293;3293;793E;793E; 3294;3294;3294;540D;540D; 3295;3295;3295;7279;7279; 3296;3296;3296;8CA1;8CA1; 3297;3297;3297;795D;795D; 3298;3298;3298;52B4;52B4; 3299;3299;3299;79D8;79D8; 329A;329A;329A;7537;7537; 329B;329B;329B;5973;5973; 329C;329C;329C;9069;9069; 329D;329D;329D;512A;512A; 329E;329E;329E;5370;5370; 329F;329F;329F;6CE8;6CE8; 32A0;32A0;32A0;9805;9805; 32A1;32A1;32A1;4F11;4F11; 32A2;32A2;32A2;5199;5199; 32A3;32A3;32A3;6B63;6B63; 32A4;32A4;32A4;4E0A;4E0A; 32A5;32A5;32A5;4E2D;4E2D; 32A6;32A6;32A6;4E0B;4E0B; 32A7;32A7;32A7;5DE6;5DE6; 32A8;32A8;32A8;53F3;53F3; 32A9;32A9;32A9;533B;533B; 32AA;32AA;32AA;5B97;5B97; 32AB;32AB;32AB;5B66;5B66; 32AC;32AC;32AC;76E3;76E3; 32AD;32AD;32AD;4F01;4F01; 32AE;32AE;32AE;8CC7;8CC7; 32AF;32AF;32AF;5354;5354; 32B0;32B0;32B0;591C;591C; 32B1;32B1;32B1;0033 0036;0033 0036; 32B2;32B2;32B2;0033 0037;0033 0037; 32B3;32B3;32B3;0033 0038;0033 0038; 32B4;32B4;32B4;0033 0039;0033 0039; 32B5;32B5;32B5;0034 0030;0034 0030; 32B6;32B6;32B6;0034 0031;0034 0031; 32B7;32B7;32B7;0034 0032;0034 0032; 32B8;32B8;32B8;0034 0033;0034 0033; 32B9;32B9;32B9;0034 0034;0034 0034; 32BA;32BA;32BA;0034 0035;0034 0035; 32BB;32BB;32BB;0034 0036;0034 0036; 32BC;32BC;32BC;0034 0037;0034 0037; 32BD;32BD;32BD;0034 0038;0034 0038; 32BE;32BE;32BE;0034 0039;0034 0039; 32BF;32BF;32BF;0035 0030;0035 0030; 32C0;32C0;32C0;0031 6708;0031 6708; 32C1;32C1;32C1;0032 6708;0032 6708; 32C2;32C2;32C2;0033 6708;0033 6708; 32C3;32C3;32C3;0034 6708;0034 6708; 32C4;32C4;32C4;0035 6708;0035 6708; 32C5;32C5;32C5;0036 6708;0036 6708; 32C6;32C6;32C6;0037 6708;0037 6708; 32C7;32C7;32C7;0038 6708;0038 6708; 32C8;32C8;32C8;0039 6708;0039 6708; 32C9;32C9;32C9;0031 0030 6708;0031 0030 6708; 32CA;32CA;32CA;0031 0031 6708;0031 0031 6708; 32CB;32CB;32CB;0031 0032 6708;0031 0032 6708; 32CC;32CC;32CC;0048 0067;0048 0067; 32CD;32CD;32CD;0065 0072 0067;0065 0072 0067; 32CE;32CE;32CE;0065 0056;0065 0056; 32CF;32CF;32CF;004C 0054 0044;004C 0054 0044; 32D0;32D0;32D0;30A2;30A2; 32D1;32D1;32D1;30A4;30A4; 32D2;32D2;32D2;30A6;30A6; 32D3;32D3;32D3;30A8;30A8; 32D4;32D4;32D4;30AA;30AA; 32D5;32D5;32D5;30AB;30AB; 32D6;32D6;32D6;30AD;30AD; 32D7;32D7;32D7;30AF;30AF; 32D8;32D8;32D8;30B1;30B1; 32D9;32D9;32D9;30B3;30B3; 32DA;32DA;32DA;30B5;30B5; 32DB;32DB;32DB;30B7;30B7; 32DC;32DC;32DC;30B9;30B9; 32DD;32DD;32DD;30BB;30BB; 32DE;32DE;32DE;30BD;30BD; 32DF;32DF;32DF;30BF;30BF; 32E0;32E0;32E0;30C1;30C1; 32E1;32E1;32E1;30C4;30C4; 32E2;32E2;32E2;30C6;30C6; 32E3;32E3;32E3;30C8;30C8; 32E4;32E4;32E4;30CA;30CA; 32E5;32E5;32E5;30CB;30CB; 32E6;32E6;32E6;30CC;30CC; 32E7;32E7;32E7;30CD;30CD; 32E8;32E8;32E8;30CE;30CE; 32E9;32E9;32E9;30CF;30CF; 32EA;32EA;32EA;30D2;30D2; 32EB;32EB;32EB;30D5;30D5; 32EC;32EC;32EC;30D8;30D8; 32ED;32ED;32ED;30DB;30DB; 32EE;32EE;32EE;30DE;30DE; 32EF;32EF;32EF;30DF;30DF; 32F0;32F0;32F0;30E0;30E0; 32F1;32F1;32F1;30E1;30E1; 32F2;32F2;32F2;30E2;30E2; 32F3;32F3;32F3;30E4;30E4; 32F4;32F4;32F4;30E6;30E6; 32F5;32F5;32F5;30E8;30E8; 32F6;32F6;32F6;30E9;30E9; 32F7;32F7;32F7;30EA;30EA; 32F8;32F8;32F8;30EB;30EB; 32F9;32F9;32F9;30EC;30EC; 32FA;32FA;32FA;30ED;30ED; 32FB;32FB;32FB;30EF;30EF; 32FC;32FC;32FC;30F0;30F0; 32FD;32FD;32FD;30F1;30F1; 32FE;32FE;32FE;30F2;30F2; 3300;3300;3300;30A2 30D1 30FC 30C8;30A2 30CF 309A 30FC 30C8; 3301;3301;3301;30A2 30EB 30D5 30A1;30A2 30EB 30D5 30A1; 3302;3302;3302;30A2 30F3 30DA 30A2;30A2 30F3 30D8 309A 30A2; 3303;3303;3303;30A2 30FC 30EB;30A2 30FC 30EB; 3304;3304;3304;30A4 30CB 30F3 30B0;30A4 30CB 30F3 30AF 3099; 3305;3305;3305;30A4 30F3 30C1;30A4 30F3 30C1; 3306;3306;3306;30A6 30A9 30F3;30A6 30A9 30F3; 3307;3307;3307;30A8 30B9 30AF 30FC 30C9;30A8 30B9 30AF 30FC 30C8 3099; 3308;3308;3308;30A8 30FC 30AB 30FC;30A8 30FC 30AB 30FC; 3309;3309;3309;30AA 30F3 30B9;30AA 30F3 30B9; 330A;330A;330A;30AA 30FC 30E0;30AA 30FC 30E0; 330B;330B;330B;30AB 30A4 30EA;30AB 30A4 30EA; 330C;330C;330C;30AB 30E9 30C3 30C8;30AB 30E9 30C3 30C8; 330D;330D;330D;30AB 30ED 30EA 30FC;30AB 30ED 30EA 30FC; 330E;330E;330E;30AC 30ED 30F3;30AB 3099 30ED 30F3; 330F;330F;330F;30AC 30F3 30DE;30AB 3099 30F3 30DE; 3310;3310;3310;30AE 30AC;30AD 3099 30AB 3099; 3311;3311;3311;30AE 30CB 30FC;30AD 3099 30CB 30FC; 3312;3312;3312;30AD 30E5 30EA 30FC;30AD 30E5 30EA 30FC; 3313;3313;3313;30AE 30EB 30C0 30FC;30AD 3099 30EB 30BF 3099 30FC; 3314;3314;3314;30AD 30ED;30AD 30ED; 3315;3315;3315;30AD 30ED 30B0 30E9 30E0;30AD 30ED 30AF 3099 30E9 30E0; 3316;3316;3316;30AD 30ED 30E1 30FC 30C8 30EB;30AD 30ED 30E1 30FC 30C8 30EB; 3317;3317;3317;30AD 30ED 30EF 30C3 30C8;30AD 30ED 30EF 30C3 30C8; 3318;3318;3318;30B0 30E9 30E0;30AF 3099 30E9 30E0; 3319;3319;3319;30B0 30E9 30E0 30C8 30F3;30AF 3099 30E9 30E0 30C8 30F3; 331A;331A;331A;30AF 30EB 30BC 30A4 30ED;30AF 30EB 30BB 3099 30A4 30ED; 331B;331B;331B;30AF 30ED 30FC 30CD;30AF 30ED 30FC 30CD; 331C;331C;331C;30B1 30FC 30B9;30B1 30FC 30B9; 331D;331D;331D;30B3 30EB 30CA;30B3 30EB 30CA; 331E;331E;331E;30B3 30FC 30DD;30B3 30FC 30DB 309A; 331F;331F;331F;30B5 30A4 30AF 30EB;30B5 30A4 30AF 30EB; 3320;3320;3320;30B5 30F3 30C1 30FC 30E0;30B5 30F3 30C1 30FC 30E0; 3321;3321;3321;30B7 30EA 30F3 30B0;30B7 30EA 30F3 30AF 3099; 3322;3322;3322;30BB 30F3 30C1;30BB 30F3 30C1; 3323;3323;3323;30BB 30F3 30C8;30BB 30F3 30C8; 3324;3324;3324;30C0 30FC 30B9;30BF 3099 30FC 30B9; 3325;3325;3325;30C7 30B7;30C6 3099 30B7; 3326;3326;3326;30C9 30EB;30C8 3099 30EB; 3327;3327;3327;30C8 30F3;30C8 30F3; 3328;3328;3328;30CA 30CE;30CA 30CE; 3329;3329;3329;30CE 30C3 30C8;30CE 30C3 30C8; 332A;332A;332A;30CF 30A4 30C4;30CF 30A4 30C4; 332B;332B;332B;30D1 30FC 30BB 30F3 30C8;30CF 309A 30FC 30BB 30F3 30C8; 332C;332C;332C;30D1 30FC 30C4;30CF 309A 30FC 30C4; 332D;332D;332D;30D0 30FC 30EC 30EB;30CF 3099 30FC 30EC 30EB; 332E;332E;332E;30D4 30A2 30B9 30C8 30EB;30D2 309A 30A2 30B9 30C8 30EB; 332F;332F;332F;30D4 30AF 30EB;30D2 309A 30AF 30EB; 3330;3330;3330;30D4 30B3;30D2 309A 30B3; 3331;3331;3331;30D3 30EB;30D2 3099 30EB; 3332;3332;3332;30D5 30A1 30E9 30C3 30C9;30D5 30A1 30E9 30C3 30C8 3099; 3333;3333;3333;30D5 30A3 30FC 30C8;30D5 30A3 30FC 30C8; 3334;3334;3334;30D6 30C3 30B7 30A7 30EB;30D5 3099 30C3 30B7 30A7 30EB; 3335;3335;3335;30D5 30E9 30F3;30D5 30E9 30F3; 3336;3336;3336;30D8 30AF 30BF 30FC 30EB;30D8 30AF 30BF 30FC 30EB; 3337;3337;3337;30DA 30BD;30D8 309A 30BD; 3338;3338;3338;30DA 30CB 30D2;30D8 309A 30CB 30D2; 3339;3339;3339;30D8 30EB 30C4;30D8 30EB 30C4; 333A;333A;333A;30DA 30F3 30B9;30D8 309A 30F3 30B9; 333B;333B;333B;30DA 30FC 30B8;30D8 309A 30FC 30B7 3099; 333C;333C;333C;30D9 30FC 30BF;30D8 3099 30FC 30BF; 333D;333D;333D;30DD 30A4 30F3 30C8;30DB 309A 30A4 30F3 30C8; 333E;333E;333E;30DC 30EB 30C8;30DB 3099 30EB 30C8; 333F;333F;333F;30DB 30F3;30DB 30F3; 3340;3340;3340;30DD 30F3 30C9;30DB 309A 30F3 30C8 3099; 3341;3341;3341;30DB 30FC 30EB;30DB 30FC 30EB; 3342;3342;3342;30DB 30FC 30F3;30DB 30FC 30F3; 3343;3343;3343;30DE 30A4 30AF 30ED;30DE 30A4 30AF 30ED; 3344;3344;3344;30DE 30A4 30EB;30DE 30A4 30EB; 3345;3345;3345;30DE 30C3 30CF;30DE 30C3 30CF; 3346;3346;3346;30DE 30EB 30AF;30DE 30EB 30AF; 3347;3347;3347;30DE 30F3 30B7 30E7 30F3;30DE 30F3 30B7 30E7 30F3; 3348;3348;3348;30DF 30AF 30ED 30F3;30DF 30AF 30ED 30F3; 3349;3349;3349;30DF 30EA;30DF 30EA; 334A;334A;334A;30DF 30EA 30D0 30FC 30EB;30DF 30EA 30CF 3099 30FC 30EB; 334B;334B;334B;30E1 30AC;30E1 30AB 3099; 334C;334C;334C;30E1 30AC 30C8 30F3;30E1 30AB 3099 30C8 30F3; 334D;334D;334D;30E1 30FC 30C8 30EB;30E1 30FC 30C8 30EB; 334E;334E;334E;30E4 30FC 30C9;30E4 30FC 30C8 3099; 334F;334F;334F;30E4 30FC 30EB;30E4 30FC 30EB; 3350;3350;3350;30E6 30A2 30F3;30E6 30A2 30F3; 3351;3351;3351;30EA 30C3 30C8 30EB;30EA 30C3 30C8 30EB; 3352;3352;3352;30EA 30E9;30EA 30E9; 3353;3353;3353;30EB 30D4 30FC;30EB 30D2 309A 30FC; 3354;3354;3354;30EB 30FC 30D6 30EB;30EB 30FC 30D5 3099 30EB; 3355;3355;3355;30EC 30E0;30EC 30E0; 3356;3356;3356;30EC 30F3 30C8 30B2 30F3;30EC 30F3 30C8 30B1 3099 30F3; 3357;3357;3357;30EF 30C3 30C8;30EF 30C3 30C8; 3358;3358;3358;0030 70B9;0030 70B9; 3359;3359;3359;0031 70B9;0031 70B9; 335A;335A;335A;0032 70B9;0032 70B9; 335B;335B;335B;0033 70B9;0033 70B9; 335C;335C;335C;0034 70B9;0034 70B9; 335D;335D;335D;0035 70B9;0035 70B9; 335E;335E;335E;0036 70B9;0036 70B9; 335F;335F;335F;0037 70B9;0037 70B9; 3360;3360;3360;0038 70B9;0038 70B9; 3361;3361;3361;0039 70B9;0039 70B9; 3362;3362;3362;0031 0030 70B9;0031 0030 70B9; 3363;3363;3363;0031 0031 70B9;0031 0031 70B9; 3364;3364;3364;0031 0032 70B9;0031 0032 70B9; 3365;3365;3365;0031 0033 70B9;0031 0033 70B9; 3366;3366;3366;0031 0034 70B9;0031 0034 70B9; 3367;3367;3367;0031 0035 70B9;0031 0035 70B9; 3368;3368;3368;0031 0036 70B9;0031 0036 70B9; 3369;3369;3369;0031 0037 70B9;0031 0037 70B9; 336A;336A;336A;0031 0038 70B9;0031 0038 70B9; 336B;336B;336B;0031 0039 70B9;0031 0039 70B9; 336C;336C;336C;0032 0030 70B9;0032 0030 70B9; 336D;336D;336D;0032 0031 70B9;0032 0031 70B9; 336E;336E;336E;0032 0032 70B9;0032 0032 70B9; 336F;336F;336F;0032 0033 70B9;0032 0033 70B9; 3370;3370;3370;0032 0034 70B9;0032 0034 70B9; 3371;3371;3371;0068 0050 0061;0068 0050 0061; 3372;3372;3372;0064 0061;0064 0061; 3373;3373;3373;0041 0055;0041 0055; 3374;3374;3374;0062 0061 0072;0062 0061 0072; 3375;3375;3375;006F 0056;006F 0056; 3376;3376;3376;0070 0063;0070 0063; 3377;3377;3377;0064 006D;0064 006D; 3378;3378;3378;0064 006D 0032;0064 006D 0032; 3379;3379;3379;0064 006D 0033;0064 006D 0033; 337A;337A;337A;0049 0055;0049 0055; 337B;337B;337B;5E73 6210;5E73 6210; 337C;337C;337C;662D 548C;662D 548C; 337D;337D;337D;5927 6B63;5927 6B63; 337E;337E;337E;660E 6CBB;660E 6CBB; 337F;337F;337F;682A 5F0F 4F1A 793E;682A 5F0F 4F1A 793E; 3380;3380;3380;0070 0041;0070 0041; 3381;3381;3381;006E 0041;006E 0041; 3382;3382;3382;03BC 0041;03BC 0041; 3383;3383;3383;006D 0041;006D 0041; 3384;3384;3384;006B 0041;006B 0041; 3385;3385;3385;004B 0042;004B 0042; 3386;3386;3386;004D 0042;004D 0042; 3387;3387;3387;0047 0042;0047 0042; 3388;3388;3388;0063 0061 006C;0063 0061 006C; 3389;3389;3389;006B 0063 0061 006C;006B 0063 0061 006C; 338A;338A;338A;0070 0046;0070 0046; 338B;338B;338B;006E 0046;006E 0046; 338C;338C;338C;03BC 0046;03BC 0046; 338D;338D;338D;03BC 0067;03BC 0067; 338E;338E;338E;006D 0067;006D 0067; 338F;338F;338F;006B 0067;006B 0067; 3390;3390;3390;0048 007A;0048 007A; 3391;3391;3391;006B 0048 007A;006B 0048 007A; 3392;3392;3392;004D 0048 007A;004D 0048 007A; 3393;3393;3393;0047 0048 007A;0047 0048 007A; 3394;3394;3394;0054 0048 007A;0054 0048 007A; 3395;3395;3395;03BC 006C;03BC 006C; 3396;3396;3396;006D 006C;006D 006C; 3397;3397;3397;0064 006C;0064 006C; 3398;3398;3398;006B 006C;006B 006C; 3399;3399;3399;0066 006D;0066 006D; 339A;339A;339A;006E 006D;006E 006D; 339B;339B;339B;03BC 006D;03BC 006D; 339C;339C;339C;006D 006D;006D 006D; 339D;339D;339D;0063 006D;0063 006D; 339E;339E;339E;006B 006D;006B 006D; 339F;339F;339F;006D 006D 0032;006D 006D 0032; 33A0;33A0;33A0;0063 006D 0032;0063 006D 0032; 33A1;33A1;33A1;006D 0032;006D 0032; 33A2;33A2;33A2;006B 006D 0032;006B 006D 0032; 33A3;33A3;33A3;006D 006D 0033;006D 006D 0033; 33A4;33A4;33A4;0063 006D 0033;0063 006D 0033; 33A5;33A5;33A5;006D 0033;006D 0033; 33A6;33A6;33A6;006B 006D 0033;006B 006D 0033; 33A7;33A7;33A7;006D 2215 0073;006D 2215 0073; 33A8;33A8;33A8;006D 2215 0073 0032;006D 2215 0073 0032; 33A9;33A9;33A9;0050 0061;0050 0061; 33AA;33AA;33AA;006B 0050 0061;006B 0050 0061; 33AB;33AB;33AB;004D 0050 0061;004D 0050 0061; 33AC;33AC;33AC;0047 0050 0061;0047 0050 0061; 33AD;33AD;33AD;0072 0061 0064;0072 0061 0064; 33AE;33AE;33AE;0072 0061 0064 2215 0073;0072 0061 0064 2215 0073; 33AF;33AF;33AF;0072 0061 0064 2215 0073 0032;0072 0061 0064 2215 0073 0032; 33B0;33B0;33B0;0070 0073;0070 0073; 33B1;33B1;33B1;006E 0073;006E 0073; 33B2;33B2;33B2;03BC 0073;03BC 0073; 33B3;33B3;33B3;006D 0073;006D 0073; 33B4;33B4;33B4;0070 0056;0070 0056; 33B5;33B5;33B5;006E 0056;006E 0056; 33B6;33B6;33B6;03BC 0056;03BC 0056; 33B7;33B7;33B7;006D 0056;006D 0056; 33B8;33B8;33B8;006B 0056;006B 0056; 33B9;33B9;33B9;004D 0056;004D 0056; 33BA;33BA;33BA;0070 0057;0070 0057; 33BB;33BB;33BB;006E 0057;006E 0057; 33BC;33BC;33BC;03BC 0057;03BC 0057; 33BD;33BD;33BD;006D 0057;006D 0057; 33BE;33BE;33BE;006B 0057;006B 0057; 33BF;33BF;33BF;004D 0057;004D 0057; 33C0;33C0;33C0;006B 03A9;006B 03A9; 33C1;33C1;33C1;004D 03A9;004D 03A9; 33C2;33C2;33C2;0061 002E 006D 002E;0061 002E 006D 002E; 33C3;33C3;33C3;0042 0071;0042 0071; 33C4;33C4;33C4;0063 0063;0063 0063; 33C5;33C5;33C5;0063 0064;0063 0064; 33C6;33C6;33C6;0043 2215 006B 0067;0043 2215 006B 0067; 33C7;33C7;33C7;0043 006F 002E;0043 006F 002E; 33C8;33C8;33C8;0064 0042;0064 0042; 33C9;33C9;33C9;0047 0079;0047 0079; 33CA;33CA;33CA;0068 0061;0068 0061; 33CB;33CB;33CB;0048 0050;0048 0050; 33CC;33CC;33CC;0069 006E;0069 006E; 33CD;33CD;33CD;004B 004B;004B 004B; 33CE;33CE;33CE;004B 004D;004B 004D; 33CF;33CF;33CF;006B 0074;006B 0074; 33D0;33D0;33D0;006C 006D;006C 006D; 33D1;33D1;33D1;006C 006E;006C 006E; 33D2;33D2;33D2;006C 006F 0067;006C 006F 0067; 33D3;33D3;33D3;006C 0078;006C 0078; 33D4;33D4;33D4;006D 0062;006D 0062; 33D5;33D5;33D5;006D 0069 006C;006D 0069 006C; 33D6;33D6;33D6;006D 006F 006C;006D 006F 006C; 33D7;33D7;33D7;0050 0048;0050 0048; 33D8;33D8;33D8;0070 002E 006D 002E;0070 002E 006D 002E; 33D9;33D9;33D9;0050 0050 004D;0050 0050 004D; 33DA;33DA;33DA;0050 0052;0050 0052; 33DB;33DB;33DB;0073 0072;0073 0072; 33DC;33DC;33DC;0053 0076;0053 0076; 33DD;33DD;33DD;0057 0062;0057 0062; 33DE;33DE;33DE;0056 2215 006D;0056 2215 006D; 33DF;33DF;33DF;0041 2215 006D;0041 2215 006D; 33E0;33E0;33E0;0031 65E5;0031 65E5; 33E1;33E1;33E1;0032 65E5;0032 65E5; 33E2;33E2;33E2;0033 65E5;0033 65E5; 33E3;33E3;33E3;0034 65E5;0034 65E5; 33E4;33E4;33E4;0035 65E5;0035 65E5; 33E5;33E5;33E5;0036 65E5;0036 65E5; 33E6;33E6;33E6;0037 65E5;0037 65E5; 33E7;33E7;33E7;0038 65E5;0038 65E5; 33E8;33E8;33E8;0039 65E5;0039 65E5; 33E9;33E9;33E9;0031 0030 65E5;0031 0030 65E5; 33EA;33EA;33EA;0031 0031 65E5;0031 0031 65E5; 33EB;33EB;33EB;0031 0032 65E5;0031 0032 65E5; 33EC;33EC;33EC;0031 0033 65E5;0031 0033 65E5; 33ED;33ED;33ED;0031 0034 65E5;0031 0034 65E5; 33EE;33EE;33EE;0031 0035 65E5;0031 0035 65E5; 33EF;33EF;33EF;0031 0036 65E5;0031 0036 65E5; 33F0;33F0;33F0;0031 0037 65E5;0031 0037 65E5; 33F1;33F1;33F1;0031 0038 65E5;0031 0038 65E5; 33F2;33F2;33F2;0031 0039 65E5;0031 0039 65E5; 33F3;33F3;33F3;0032 0030 65E5;0032 0030 65E5; 33F4;33F4;33F4;0032 0031 65E5;0032 0031 65E5; 33F5;33F5;33F5;0032 0032 65E5;0032 0032 65E5; 33F6;33F6;33F6;0032 0033 65E5;0032 0033 65E5; 33F7;33F7;33F7;0032 0034 65E5;0032 0034 65E5; 33F8;33F8;33F8;0032 0035 65E5;0032 0035 65E5; 33F9;33F9;33F9;0032 0036 65E5;0032 0036 65E5; 33FA;33FA;33FA;0032 0037 65E5;0032 0037 65E5; 33FB;33FB;33FB;0032 0038 65E5;0032 0038 65E5; 33FC;33FC;33FC;0032 0039 65E5;0032 0039 65E5; 33FD;33FD;33FD;0033 0030 65E5;0033 0030 65E5; 33FE;33FE;33FE;0033 0031 65E5;0033 0031 65E5; 33FF;33FF;33FF;0067 0061 006C;0067 0061 006C; A770;A770;A770;A76F;A76F; AC00;AC00;1100 1161;AC00;1100 1161; AC01;AC01;1100 1161 11A8;AC01;1100 1161 11A8; AC02;AC02;1100 1161 11A9;AC02;1100 1161 11A9; AC03;AC03;1100 1161 11AA;AC03;1100 1161 11AA; AC04;AC04;1100 1161 11AB;AC04;1100 1161 11AB; AC05;AC05;1100 1161 11AC;AC05;1100 1161 11AC; AC06;AC06;1100 1161 11AD;AC06;1100 1161 11AD; AC07;AC07;1100 1161 11AE;AC07;1100 1161 11AE; AC08;AC08;1100 1161 11AF;AC08;1100 1161 11AF; AC09;AC09;1100 1161 11B0;AC09;1100 1161 11B0; AC0A;AC0A;1100 1161 11B1;AC0A;1100 1161 11B1; AC0B;AC0B;1100 1161 11B2;AC0B;1100 1161 11B2; AC0C;AC0C;1100 1161 11B3;AC0C;1100 1161 11B3; AC0D;AC0D;1100 1161 11B4;AC0D;1100 1161 11B4; AC0E;AC0E;1100 1161 11B5;AC0E;1100 1161 11B5; AC0F;AC0F;1100 1161 11B6;AC0F;1100 1161 11B6; AC10;AC10;1100 1161 11B7;AC10;1100 1161 11B7; AC11;AC11;1100 1161 11B8;AC11;1100 1161 11B8; AC12;AC12;1100 1161 11B9;AC12;1100 1161 11B9; AC13;AC13;1100 1161 11BA;AC13;1100 1161 11BA; AC14;AC14;1100 1161 11BB;AC14;1100 1161 11BB; AC15;AC15;1100 1161 11BC;AC15;1100 1161 11BC; AC16;AC16;1100 1161 11BD;AC16;1100 1161 11BD; AC17;AC17;1100 1161 11BE;AC17;1100 1161 11BE; AC18;AC18;1100 1161 11BF;AC18;1100 1161 11BF; AC19;AC19;1100 1161 11C0;AC19;1100 1161 11C0; AC1A;AC1A;1100 1161 11C1;AC1A;1100 1161 11C1; AC1B;AC1B;1100 1161 11C2;AC1B;1100 1161 11C2; AC1C;AC1C;1100 1162;AC1C;1100 1162; AC1D;AC1D;1100 1162 11A8;AC1D;1100 1162 11A8; AC1E;AC1E;1100 1162 11A9;AC1E;1100 1162 11A9; AC1F;AC1F;1100 1162 11AA;AC1F;1100 1162 11AA; AC20;AC20;1100 1162 11AB;AC20;1100 1162 11AB; AC21;AC21;1100 1162 11AC;AC21;1100 1162 11AC; AC22;AC22;1100 1162 11AD;AC22;1100 1162 11AD; AC23;AC23;1100 1162 11AE;AC23;1100 1162 11AE; AC24;AC24;1100 1162 11AF;AC24;1100 1162 11AF; AC25;AC25;1100 1162 11B0;AC25;1100 1162 11B0; AC26;AC26;1100 1162 11B1;AC26;1100 1162 11B1; AC27;AC27;1100 1162 11B2;AC27;1100 1162 11B2; AC28;AC28;1100 1162 11B3;AC28;1100 1162 11B3; AC29;AC29;1100 1162 11B4;AC29;1100 1162 11B4; AC2A;AC2A;1100 1162 11B5;AC2A;1100 1162 11B5; AC2B;AC2B;1100 1162 11B6;AC2B;1100 1162 11B6; AC2C;AC2C;1100 1162 11B7;AC2C;1100 1162 11B7; AC2D;AC2D;1100 1162 11B8;AC2D;1100 1162 11B8; AC2E;AC2E;1100 1162 11B9;AC2E;1100 1162 11B9; AC2F;AC2F;1100 1162 11BA;AC2F;1100 1162 11BA; AC30;AC30;1100 1162 11BB;AC30;1100 1162 11BB; AC31;AC31;1100 1162 11BC;AC31;1100 1162 11BC; AC32;AC32;1100 1162 11BD;AC32;1100 1162 11BD; AC33;AC33;1100 1162 11BE;AC33;1100 1162 11BE; AC34;AC34;1100 1162 11BF;AC34;1100 1162 11BF; AC35;AC35;1100 1162 11C0;AC35;1100 1162 11C0; AC36;AC36;1100 1162 11C1;AC36;1100 1162 11C1; AC37;AC37;1100 1162 11C2;AC37;1100 1162 11C2; AC38;AC38;1100 1163;AC38;1100 1163; AC39;AC39;1100 1163 11A8;AC39;1100 1163 11A8; AC3A;AC3A;1100 1163 11A9;AC3A;1100 1163 11A9; AC3B;AC3B;1100 1163 11AA;AC3B;1100 1163 11AA; AC3C;AC3C;1100 1163 11AB;AC3C;1100 1163 11AB; AC3D;AC3D;1100 1163 11AC;AC3D;1100 1163 11AC; AC3E;AC3E;1100 1163 11AD;AC3E;1100 1163 11AD; AC3F;AC3F;1100 1163 11AE;AC3F;1100 1163 11AE; AC40;AC40;1100 1163 11AF;AC40;1100 1163 11AF; AC41;AC41;1100 1163 11B0;AC41;1100 1163 11B0; AC42;AC42;1100 1163 11B1;AC42;1100 1163 11B1; AC43;AC43;1100 1163 11B2;AC43;1100 1163 11B2; AC44;AC44;1100 1163 11B3;AC44;1100 1163 11B3; AC45;AC45;1100 1163 11B4;AC45;1100 1163 11B4; AC46;AC46;1100 1163 11B5;AC46;1100 1163 11B5; AC47;AC47;1100 1163 11B6;AC47;1100 1163 11B6; AC48;AC48;1100 1163 11B7;AC48;1100 1163 11B7; AC49;AC49;1100 1163 11B8;AC49;1100 1163 11B8; AC4A;AC4A;1100 1163 11B9;AC4A;1100 1163 11B9; AC4B;AC4B;1100 1163 11BA;AC4B;1100 1163 11BA; AC4C;AC4C;1100 1163 11BB;AC4C;1100 1163 11BB; AC4D;AC4D;1100 1163 11BC;AC4D;1100 1163 11BC; AC4E;AC4E;1100 1163 11BD;AC4E;1100 1163 11BD; AC4F;AC4F;1100 1163 11BE;AC4F;1100 1163 11BE; AC50;AC50;1100 1163 11BF;AC50;1100 1163 11BF; AC51;AC51;1100 1163 11C0;AC51;1100 1163 11C0; AC52;AC52;1100 1163 11C1;AC52;1100 1163 11C1; AC53;AC53;1100 1163 11C2;AC53;1100 1163 11C2; AC54;AC54;1100 1164;AC54;1100 1164; AC55;AC55;1100 1164 11A8;AC55;1100 1164 11A8; AC56;AC56;1100 1164 11A9;AC56;1100 1164 11A9; AC57;AC57;1100 1164 11AA;AC57;1100 1164 11AA; AC58;AC58;1100 1164 11AB;AC58;1100 1164 11AB; AC59;AC59;1100 1164 11AC;AC59;1100 1164 11AC; AC5A;AC5A;1100 1164 11AD;AC5A;1100 1164 11AD; AC5B;AC5B;1100 1164 11AE;AC5B;1100 1164 11AE; AC5C;AC5C;1100 1164 11AF;AC5C;1100 1164 11AF; AC5D;AC5D;1100 1164 11B0;AC5D;1100 1164 11B0; AC5E;AC5E;1100 1164 11B1;AC5E;1100 1164 11B1; AC5F;AC5F;1100 1164 11B2;AC5F;1100 1164 11B2; AC60;AC60;1100 1164 11B3;AC60;1100 1164 11B3; AC61;AC61;1100 1164 11B4;AC61;1100 1164 11B4; AC62;AC62;1100 1164 11B5;AC62;1100 1164 11B5; AC63;AC63;1100 1164 11B6;AC63;1100 1164 11B6; AC64;AC64;1100 1164 11B7;AC64;1100 1164 11B7; AC65;AC65;1100 1164 11B8;AC65;1100 1164 11B8; AC66;AC66;1100 1164 11B9;AC66;1100 1164 11B9; AC67;AC67;1100 1164 11BA;AC67;1100 1164 11BA; AC68;AC68;1100 1164 11BB;AC68;1100 1164 11BB; AC69;AC69;1100 1164 11BC;AC69;1100 1164 11BC; AC6A;AC6A;1100 1164 11BD;AC6A;1100 1164 11BD; AC6B;AC6B;1100 1164 11BE;AC6B;1100 1164 11BE; AC6C;AC6C;1100 1164 11BF;AC6C;1100 1164 11BF; AC6D;AC6D;1100 1164 11C0;AC6D;1100 1164 11C0; AC6E;AC6E;1100 1164 11C1;AC6E;1100 1164 11C1; AC6F;AC6F;1100 1164 11C2;AC6F;1100 1164 11C2; AC70;AC70;1100 1165;AC70;1100 1165; AC71;AC71;1100 1165 11A8;AC71;1100 1165 11A8; AC72;AC72;1100 1165 11A9;AC72;1100 1165 11A9; AC73;AC73;1100 1165 11AA;AC73;1100 1165 11AA; AC74;AC74;1100 1165 11AB;AC74;1100 1165 11AB; AC75;AC75;1100 1165 11AC;AC75;1100 1165 11AC; AC76;AC76;1100 1165 11AD;AC76;1100 1165 11AD; AC77;AC77;1100 1165 11AE;AC77;1100 1165 11AE; AC78;AC78;1100 1165 11AF;AC78;1100 1165 11AF; AC79;AC79;1100 1165 11B0;AC79;1100 1165 11B0; AC7A;AC7A;1100 1165 11B1;AC7A;1100 1165 11B1; AC7B;AC7B;1100 1165 11B2;AC7B;1100 1165 11B2; AC7C;AC7C;1100 1165 11B3;AC7C;1100 1165 11B3; AC7D;AC7D;1100 1165 11B4;AC7D;1100 1165 11B4; AC7E;AC7E;1100 1165 11B5;AC7E;1100 1165 11B5; AC7F;AC7F;1100 1165 11B6;AC7F;1100 1165 11B6; AC80;AC80;1100 1165 11B7;AC80;1100 1165 11B7; AC81;AC81;1100 1165 11B8;AC81;1100 1165 11B8; AC82;AC82;1100 1165 11B9;AC82;1100 1165 11B9; AC83;AC83;1100 1165 11BA;AC83;1100 1165 11BA; AC84;AC84;1100 1165 11BB;AC84;1100 1165 11BB; AC85;AC85;1100 1165 11BC;AC85;1100 1165 11BC; AC86;AC86;1100 1165 11BD;AC86;1100 1165 11BD; AC87;AC87;1100 1165 11BE;AC87;1100 1165 11BE; AC88;AC88;1100 1165 11BF;AC88;1100 1165 11BF; AC89;AC89;1100 1165 11C0;AC89;1100 1165 11C0; AC8A;AC8A;1100 1165 11C1;AC8A;1100 1165 11C1; AC8B;AC8B;1100 1165 11C2;AC8B;1100 1165 11C2; AC8C;AC8C;1100 1166;AC8C;1100 1166; AC8D;AC8D;1100 1166 11A8;AC8D;1100 1166 11A8; AC8E;AC8E;1100 1166 11A9;AC8E;1100 1166 11A9; AC8F;AC8F;1100 1166 11AA;AC8F;1100 1166 11AA; AC90;AC90;1100 1166 11AB;AC90;1100 1166 11AB; AC91;AC91;1100 1166 11AC;AC91;1100 1166 11AC; AC92;AC92;1100 1166 11AD;AC92;1100 1166 11AD; AC93;AC93;1100 1166 11AE;AC93;1100 1166 11AE; AC94;AC94;1100 1166 11AF;AC94;1100 1166 11AF; AC95;AC95;1100 1166 11B0;AC95;1100 1166 11B0; AC96;AC96;1100 1166 11B1;AC96;1100 1166 11B1; AC97;AC97;1100 1166 11B2;AC97;1100 1166 11B2; AC98;AC98;1100 1166 11B3;AC98;1100 1166 11B3; AC99;AC99;1100 1166 11B4;AC99;1100 1166 11B4; AC9A;AC9A;1100 1166 11B5;AC9A;1100 1166 11B5; AC9B;AC9B;1100 1166 11B6;AC9B;1100 1166 11B6; AC9C;AC9C;1100 1166 11B7;AC9C;1100 1166 11B7; AC9D;AC9D;1100 1166 11B8;AC9D;1100 1166 11B8; AC9E;AC9E;1100 1166 11B9;AC9E;1100 1166 11B9; AC9F;AC9F;1100 1166 11BA;AC9F;1100 1166 11BA; ACA0;ACA0;1100 1166 11BB;ACA0;1100 1166 11BB; ACA1;ACA1;1100 1166 11BC;ACA1;1100 1166 11BC; ACA2;ACA2;1100 1166 11BD;ACA2;1100 1166 11BD; ACA3;ACA3;1100 1166 11BE;ACA3;1100 1166 11BE; ACA4;ACA4;1100 1166 11BF;ACA4;1100 1166 11BF; ACA5;ACA5;1100 1166 11C0;ACA5;1100 1166 11C0; ACA6;ACA6;1100 1166 11C1;ACA6;1100 1166 11C1; ACA7;ACA7;1100 1166 11C2;ACA7;1100 1166 11C2; ACA8;ACA8;1100 1167;ACA8;1100 1167; ACA9;ACA9;1100 1167 11A8;ACA9;1100 1167 11A8; ACAA;ACAA;1100 1167 11A9;ACAA;1100 1167 11A9; ACAB;ACAB;1100 1167 11AA;ACAB;1100 1167 11AA; ACAC;ACAC;1100 1167 11AB;ACAC;1100 1167 11AB; ACAD;ACAD;1100 1167 11AC;ACAD;1100 1167 11AC; ACAE;ACAE;1100 1167 11AD;ACAE;1100 1167 11AD; ACAF;ACAF;1100 1167 11AE;ACAF;1100 1167 11AE; ACB0;ACB0;1100 1167 11AF;ACB0;1100 1167 11AF; ACB1;ACB1;1100 1167 11B0;ACB1;1100 1167 11B0; ACB2;ACB2;1100 1167 11B1;ACB2;1100 1167 11B1; ACB3;ACB3;1100 1167 11B2;ACB3;1100 1167 11B2; ACB4;ACB4;1100 1167 11B3;ACB4;1100 1167 11B3; ACB5;ACB5;1100 1167 11B4;ACB5;1100 1167 11B4; ACB6;ACB6;1100 1167 11B5;ACB6;1100 1167 11B5; ACB7;ACB7;1100 1167 11B6;ACB7;1100 1167 11B6; ACB8;ACB8;1100 1167 11B7;ACB8;1100 1167 11B7; ACB9;ACB9;1100 1167 11B8;ACB9;1100 1167 11B8; ACBA;ACBA;1100 1167 11B9;ACBA;1100 1167 11B9; ACBB;ACBB;1100 1167 11BA;ACBB;1100 1167 11BA; ACBC;ACBC;1100 1167 11BB;ACBC;1100 1167 11BB; ACBD;ACBD;1100 1167 11BC;ACBD;1100 1167 11BC; ACBE;ACBE;1100 1167 11BD;ACBE;1100 1167 11BD; ACBF;ACBF;1100 1167 11BE;ACBF;1100 1167 11BE; ACC0;ACC0;1100 1167 11BF;ACC0;1100 1167 11BF; ACC1;ACC1;1100 1167 11C0;ACC1;1100 1167 11C0; ACC2;ACC2;1100 1167 11C1;ACC2;1100 1167 11C1; ACC3;ACC3;1100 1167 11C2;ACC3;1100 1167 11C2; ACC4;ACC4;1100 1168;ACC4;1100 1168; ACC5;ACC5;1100 1168 11A8;ACC5;1100 1168 11A8; ACC6;ACC6;1100 1168 11A9;ACC6;1100 1168 11A9; ACC7;ACC7;1100 1168 11AA;ACC7;1100 1168 11AA; ACC8;ACC8;1100 1168 11AB;ACC8;1100 1168 11AB; ACC9;ACC9;1100 1168 11AC;ACC9;1100 1168 11AC; ACCA;ACCA;1100 1168 11AD;ACCA;1100 1168 11AD; ACCB;ACCB;1100 1168 11AE;ACCB;1100 1168 11AE; ACCC;ACCC;1100 1168 11AF;ACCC;1100 1168 11AF; ACCD;ACCD;1100 1168 11B0;ACCD;1100 1168 11B0; ACCE;ACCE;1100 1168 11B1;ACCE;1100 1168 11B1; ACCF;ACCF;1100 1168 11B2;ACCF;1100 1168 11B2; ACD0;ACD0;1100 1168 11B3;ACD0;1100 1168 11B3; ACD1;ACD1;1100 1168 11B4;ACD1;1100 1168 11B4; ACD2;ACD2;1100 1168 11B5;ACD2;1100 1168 11B5; ACD3;ACD3;1100 1168 11B6;ACD3;1100 1168 11B6; ACD4;ACD4;1100 1168 11B7;ACD4;1100 1168 11B7; ACD5;ACD5;1100 1168 11B8;ACD5;1100 1168 11B8; ACD6;ACD6;1100 1168 11B9;ACD6;1100 1168 11B9; ACD7;ACD7;1100 1168 11BA;ACD7;1100 1168 11BA; ACD8;ACD8;1100 1168 11BB;ACD8;1100 1168 11BB; ACD9;ACD9;1100 1168 11BC;ACD9;1100 1168 11BC; ACDA;ACDA;1100 1168 11BD;ACDA;1100 1168 11BD; ACDB;ACDB;1100 1168 11BE;ACDB;1100 1168 11BE; ACDC;ACDC;1100 1168 11BF;ACDC;1100 1168 11BF; ACDD;ACDD;1100 1168 11C0;ACDD;1100 1168 11C0; ACDE;ACDE;1100 1168 11C1;ACDE;1100 1168 11C1; ACDF;ACDF;1100 1168 11C2;ACDF;1100 1168 11C2; ACE0;ACE0;1100 1169;ACE0;1100 1169; ACE1;ACE1;1100 1169 11A8;ACE1;1100 1169 11A8; ACE2;ACE2;1100 1169 11A9;ACE2;1100 1169 11A9; ACE3;ACE3;1100 1169 11AA;ACE3;1100 1169 11AA; ACE4;ACE4;1100 1169 11AB;ACE4;1100 1169 11AB; ACE5;ACE5;1100 1169 11AC;ACE5;1100 1169 11AC; ACE6;ACE6;1100 1169 11AD;ACE6;1100 1169 11AD; ACE7;ACE7;1100 1169 11AE;ACE7;1100 1169 11AE; ACE8;ACE8;1100 1169 11AF;ACE8;1100 1169 11AF; ACE9;ACE9;1100 1169 11B0;ACE9;1100 1169 11B0; ACEA;ACEA;1100 1169 11B1;ACEA;1100 1169 11B1; ACEB;ACEB;1100 1169 11B2;ACEB;1100 1169 11B2; ACEC;ACEC;1100 1169 11B3;ACEC;1100 1169 11B3; ACED;ACED;1100 1169 11B4;ACED;1100 1169 11B4; ACEE;ACEE;1100 1169 11B5;ACEE;1100 1169 11B5; ACEF;ACEF;1100 1169 11B6;ACEF;1100 1169 11B6; ACF0;ACF0;1100 1169 11B7;ACF0;1100 1169 11B7; ACF1;ACF1;1100 1169 11B8;ACF1;1100 1169 11B8; ACF2;ACF2;1100 1169 11B9;ACF2;1100 1169 11B9; ACF3;ACF3;1100 1169 11BA;ACF3;1100 1169 11BA; ACF4;ACF4;1100 1169 11BB;ACF4;1100 1169 11BB; ACF5;ACF5;1100 1169 11BC;ACF5;1100 1169 11BC; ACF6;ACF6;1100 1169 11BD;ACF6;1100 1169 11BD; ACF7;ACF7;1100 1169 11BE;ACF7;1100 1169 11BE; ACF8;ACF8;1100 1169 11BF;ACF8;1100 1169 11BF; ACF9;ACF9;1100 1169 11C0;ACF9;1100 1169 11C0; ACFA;ACFA;1100 1169 11C1;ACFA;1100 1169 11C1; ACFB;ACFB;1100 1169 11C2;ACFB;1100 1169 11C2; ACFC;ACFC;1100 116A;ACFC;1100 116A; ACFD;ACFD;1100 116A 11A8;ACFD;1100 116A 11A8; ACFE;ACFE;1100 116A 11A9;ACFE;1100 116A 11A9; ACFF;ACFF;1100 116A 11AA;ACFF;1100 116A 11AA; AD00;AD00;1100 116A 11AB;AD00;1100 116A 11AB; AD01;AD01;1100 116A 11AC;AD01;1100 116A 11AC; AD02;AD02;1100 116A 11AD;AD02;1100 116A 11AD; AD03;AD03;1100 116A 11AE;AD03;1100 116A 11AE; AD04;AD04;1100 116A 11AF;AD04;1100 116A 11AF; AD05;AD05;1100 116A 11B0;AD05;1100 116A 11B0; AD06;AD06;1100 116A 11B1;AD06;1100 116A 11B1; AD07;AD07;1100 116A 11B2;AD07;1100 116A 11B2; AD08;AD08;1100 116A 11B3;AD08;1100 116A 11B3; AD09;AD09;1100 116A 11B4;AD09;1100 116A 11B4; AD0A;AD0A;1100 116A 11B5;AD0A;1100 116A 11B5; AD0B;AD0B;1100 116A 11B6;AD0B;1100 116A 11B6; AD0C;AD0C;1100 116A 11B7;AD0C;1100 116A 11B7; AD0D;AD0D;1100 116A 11B8;AD0D;1100 116A 11B8; AD0E;AD0E;1100 116A 11B9;AD0E;1100 116A 11B9; AD0F;AD0F;1100 116A 11BA;AD0F;1100 116A 11BA; AD10;AD10;1100 116A 11BB;AD10;1100 116A 11BB; AD11;AD11;1100 116A 11BC;AD11;1100 116A 11BC; AD12;AD12;1100 116A 11BD;AD12;1100 116A 11BD; AD13;AD13;1100 116A 11BE;AD13;1100 116A 11BE; AD14;AD14;1100 116A 11BF;AD14;1100 116A 11BF; AD15;AD15;1100 116A 11C0;AD15;1100 116A 11C0; AD16;AD16;1100 116A 11C1;AD16;1100 116A 11C1; AD17;AD17;1100 116A 11C2;AD17;1100 116A 11C2; AD18;AD18;1100 116B;AD18;1100 116B; AD19;AD19;1100 116B 11A8;AD19;1100 116B 11A8; AD1A;AD1A;1100 116B 11A9;AD1A;1100 116B 11A9; AD1B;AD1B;1100 116B 11AA;AD1B;1100 116B 11AA; AD1C;AD1C;1100 116B 11AB;AD1C;1100 116B 11AB; AD1D;AD1D;1100 116B 11AC;AD1D;1100 116B 11AC; AD1E;AD1E;1100 116B 11AD;AD1E;1100 116B 11AD; AD1F;AD1F;1100 116B 11AE;AD1F;1100 116B 11AE; AD20;AD20;1100 116B 11AF;AD20;1100 116B 11AF; AD21;AD21;1100 116B 11B0;AD21;1100 116B 11B0; AD22;AD22;1100 116B 11B1;AD22;1100 116B 11B1; AD23;AD23;1100 116B 11B2;AD23;1100 116B 11B2; AD24;AD24;1100 116B 11B3;AD24;1100 116B 11B3; AD25;AD25;1100 116B 11B4;AD25;1100 116B 11B4; AD26;AD26;1100 116B 11B5;AD26;1100 116B 11B5; AD27;AD27;1100 116B 11B6;AD27;1100 116B 11B6; AD28;AD28;1100 116B 11B7;AD28;1100 116B 11B7; AD29;AD29;1100 116B 11B8;AD29;1100 116B 11B8; AD2A;AD2A;1100 116B 11B9;AD2A;1100 116B 11B9; AD2B;AD2B;1100 116B 11BA;AD2B;1100 116B 11BA; AD2C;AD2C;1100 116B 11BB;AD2C;1100 116B 11BB; AD2D;AD2D;1100 116B 11BC;AD2D;1100 116B 11BC; AD2E;AD2E;1100 116B 11BD;AD2E;1100 116B 11BD; AD2F;AD2F;1100 116B 11BE;AD2F;1100 116B 11BE; AD30;AD30;1100 116B 11BF;AD30;1100 116B 11BF; AD31;AD31;1100 116B 11C0;AD31;1100 116B 11C0; AD32;AD32;1100 116B 11C1;AD32;1100 116B 11C1; AD33;AD33;1100 116B 11C2;AD33;1100 116B 11C2; AD34;AD34;1100 116C;AD34;1100 116C; AD35;AD35;1100 116C 11A8;AD35;1100 116C 11A8; AD36;AD36;1100 116C 11A9;AD36;1100 116C 11A9; AD37;AD37;1100 116C 11AA;AD37;1100 116C 11AA; AD38;AD38;1100 116C 11AB;AD38;1100 116C 11AB; AD39;AD39;1100 116C 11AC;AD39;1100 116C 11AC; AD3A;AD3A;1100 116C 11AD;AD3A;1100 116C 11AD; AD3B;AD3B;1100 116C 11AE;AD3B;1100 116C 11AE; AD3C;AD3C;1100 116C 11AF;AD3C;1100 116C 11AF; AD3D;AD3D;1100 116C 11B0;AD3D;1100 116C 11B0; AD3E;AD3E;1100 116C 11B1;AD3E;1100 116C 11B1; AD3F;AD3F;1100 116C 11B2;AD3F;1100 116C 11B2; AD40;AD40;1100 116C 11B3;AD40;1100 116C 11B3; AD41;AD41;1100 116C 11B4;AD41;1100 116C 11B4; AD42;AD42;1100 116C 11B5;AD42;1100 116C 11B5; AD43;AD43;1100 116C 11B6;AD43;1100 116C 11B6; AD44;AD44;1100 116C 11B7;AD44;1100 116C 11B7; AD45;AD45;1100 116C 11B8;AD45;1100 116C 11B8; AD46;AD46;1100 116C 11B9;AD46;1100 116C 11B9; AD47;AD47;1100 116C 11BA;AD47;1100 116C 11BA; AD48;AD48;1100 116C 11BB;AD48;1100 116C 11BB; AD49;AD49;1100 116C 11BC;AD49;1100 116C 11BC; AD4A;AD4A;1100 116C 11BD;AD4A;1100 116C 11BD; AD4B;AD4B;1100 116C 11BE;AD4B;1100 116C 11BE; AD4C;AD4C;1100 116C 11BF;AD4C;1100 116C 11BF; AD4D;AD4D;1100 116C 11C0;AD4D;1100 116C 11C0; AD4E;AD4E;1100 116C 11C1;AD4E;1100 116C 11C1; AD4F;AD4F;1100 116C 11C2;AD4F;1100 116C 11C2; AD50;AD50;1100 116D;AD50;1100 116D; AD51;AD51;1100 116D 11A8;AD51;1100 116D 11A8; AD52;AD52;1100 116D 11A9;AD52;1100 116D 11A9; AD53;AD53;1100 116D 11AA;AD53;1100 116D 11AA; AD54;AD54;1100 116D 11AB;AD54;1100 116D 11AB; AD55;AD55;1100 116D 11AC;AD55;1100 116D 11AC; AD56;AD56;1100 116D 11AD;AD56;1100 116D 11AD; AD57;AD57;1100 116D 11AE;AD57;1100 116D 11AE; AD58;AD58;1100 116D 11AF;AD58;1100 116D 11AF; AD59;AD59;1100 116D 11B0;AD59;1100 116D 11B0; AD5A;AD5A;1100 116D 11B1;AD5A;1100 116D 11B1; AD5B;AD5B;1100 116D 11B2;AD5B;1100 116D 11B2; AD5C;AD5C;1100 116D 11B3;AD5C;1100 116D 11B3; AD5D;AD5D;1100 116D 11B4;AD5D;1100 116D 11B4; AD5E;AD5E;1100 116D 11B5;AD5E;1100 116D 11B5; AD5F;AD5F;1100 116D 11B6;AD5F;1100 116D 11B6; AD60;AD60;1100 116D 11B7;AD60;1100 116D 11B7; AD61;AD61;1100 116D 11B8;AD61;1100 116D 11B8; AD62;AD62;1100 116D 11B9;AD62;1100 116D 11B9; AD63;AD63;1100 116D 11BA;AD63;1100 116D 11BA; AD64;AD64;1100 116D 11BB;AD64;1100 116D 11BB; AD65;AD65;1100 116D 11BC;AD65;1100 116D 11BC; AD66;AD66;1100 116D 11BD;AD66;1100 116D 11BD; AD67;AD67;1100 116D 11BE;AD67;1100 116D 11BE; AD68;AD68;1100 116D 11BF;AD68;1100 116D 11BF; AD69;AD69;1100 116D 11C0;AD69;1100 116D 11C0; AD6A;AD6A;1100 116D 11C1;AD6A;1100 116D 11C1; AD6B;AD6B;1100 116D 11C2;AD6B;1100 116D 11C2; AD6C;AD6C;1100 116E;AD6C;1100 116E; AD6D;AD6D;1100 116E 11A8;AD6D;1100 116E 11A8; AD6E;AD6E;1100 116E 11A9;AD6E;1100 116E 11A9; AD6F;AD6F;1100 116E 11AA;AD6F;1100 116E 11AA; AD70;AD70;1100 116E 11AB;AD70;1100 116E 11AB; AD71;AD71;1100 116E 11AC;AD71;1100 116E 11AC; AD72;AD72;1100 116E 11AD;AD72;1100 116E 11AD; AD73;AD73;1100 116E 11AE;AD73;1100 116E 11AE; AD74;AD74;1100 116E 11AF;AD74;1100 116E 11AF; AD75;AD75;1100 116E 11B0;AD75;1100 116E 11B0; AD76;AD76;1100 116E 11B1;AD76;1100 116E 11B1; AD77;AD77;1100 116E 11B2;AD77;1100 116E 11B2; AD78;AD78;1100 116E 11B3;AD78;1100 116E 11B3; AD79;AD79;1100 116E 11B4;AD79;1100 116E 11B4; AD7A;AD7A;1100 116E 11B5;AD7A;1100 116E 11B5; AD7B;AD7B;1100 116E 11B6;AD7B;1100 116E 11B6; AD7C;AD7C;1100 116E 11B7;AD7C;1100 116E 11B7; AD7D;AD7D;1100 116E 11B8;AD7D;1100 116E 11B8; AD7E;AD7E;1100 116E 11B9;AD7E;1100 116E 11B9; AD7F;AD7F;1100 116E 11BA;AD7F;1100 116E 11BA; AD80;AD80;1100 116E 11BB;AD80;1100 116E 11BB; AD81;AD81;1100 116E 11BC;AD81;1100 116E 11BC; AD82;AD82;1100 116E 11BD;AD82;1100 116E 11BD; AD83;AD83;1100 116E 11BE;AD83;1100 116E 11BE; AD84;AD84;1100 116E 11BF;AD84;1100 116E 11BF; AD85;AD85;1100 116E 11C0;AD85;1100 116E 11C0; AD86;AD86;1100 116E 11C1;AD86;1100 116E 11C1; AD87;AD87;1100 116E 11C2;AD87;1100 116E 11C2; AD88;AD88;1100 116F;AD88;1100 116F; AD89;AD89;1100 116F 11A8;AD89;1100 116F 11A8; AD8A;AD8A;1100 116F 11A9;AD8A;1100 116F 11A9; AD8B;AD8B;1100 116F 11AA;AD8B;1100 116F 11AA; AD8C;AD8C;1100 116F 11AB;AD8C;1100 116F 11AB; AD8D;AD8D;1100 116F 11AC;AD8D;1100 116F 11AC; AD8E;AD8E;1100 116F 11AD;AD8E;1100 116F 11AD; AD8F;AD8F;1100 116F 11AE;AD8F;1100 116F 11AE; AD90;AD90;1100 116F 11AF;AD90;1100 116F 11AF; AD91;AD91;1100 116F 11B0;AD91;1100 116F 11B0; AD92;AD92;1100 116F 11B1;AD92;1100 116F 11B1; AD93;AD93;1100 116F 11B2;AD93;1100 116F 11B2; AD94;AD94;1100 116F 11B3;AD94;1100 116F 11B3; AD95;AD95;1100 116F 11B4;AD95;1100 116F 11B4; AD96;AD96;1100 116F 11B5;AD96;1100 116F 11B5; AD97;AD97;1100 116F 11B6;AD97;1100 116F 11B6; AD98;AD98;1100 116F 11B7;AD98;1100 116F 11B7; AD99;AD99;1100 116F 11B8;AD99;1100 116F 11B8; AD9A;AD9A;1100 116F 11B9;AD9A;1100 116F 11B9; AD9B;AD9B;1100 116F 11BA;AD9B;1100 116F 11BA; AD9C;AD9C;1100 116F 11BB;AD9C;1100 116F 11BB; AD9D;AD9D;1100 116F 11BC;AD9D;1100 116F 11BC; AD9E;AD9E;1100 116F 11BD;AD9E;1100 116F 11BD; AD9F;AD9F;1100 116F 11BE;AD9F;1100 116F 11BE; ADA0;ADA0;1100 116F 11BF;ADA0;1100 116F 11BF; ADA1;ADA1;1100 116F 11C0;ADA1;1100 116F 11C0; ADA2;ADA2;1100 116F 11C1;ADA2;1100 116F 11C1; ADA3;ADA3;1100 116F 11C2;ADA3;1100 116F 11C2; ADA4;ADA4;1100 1170;ADA4;1100 1170; ADA5;ADA5;1100 1170 11A8;ADA5;1100 1170 11A8; ADA6;ADA6;1100 1170 11A9;ADA6;1100 1170 11A9; ADA7;ADA7;1100 1170 11AA;ADA7;1100 1170 11AA; ADA8;ADA8;1100 1170 11AB;ADA8;1100 1170 11AB; ADA9;ADA9;1100 1170 11AC;ADA9;1100 1170 11AC; ADAA;ADAA;1100 1170 11AD;ADAA;1100 1170 11AD; ADAB;ADAB;1100 1170 11AE;ADAB;1100 1170 11AE; ADAC;ADAC;1100 1170 11AF;ADAC;1100 1170 11AF; ADAD;ADAD;1100 1170 11B0;ADAD;1100 1170 11B0; ADAE;ADAE;1100 1170 11B1;ADAE;1100 1170 11B1; ADAF;ADAF;1100 1170 11B2;ADAF;1100 1170 11B2; ADB0;ADB0;1100 1170 11B3;ADB0;1100 1170 11B3; ADB1;ADB1;1100 1170 11B4;ADB1;1100 1170 11B4; ADB2;ADB2;1100 1170 11B5;ADB2;1100 1170 11B5; ADB3;ADB3;1100 1170 11B6;ADB3;1100 1170 11B6; ADB4;ADB4;1100 1170 11B7;ADB4;1100 1170 11B7; ADB5;ADB5;1100 1170 11B8;ADB5;1100 1170 11B8; ADB6;ADB6;1100 1170 11B9;ADB6;1100 1170 11B9; ADB7;ADB7;1100 1170 11BA;ADB7;1100 1170 11BA; ADB8;ADB8;1100 1170 11BB;ADB8;1100 1170 11BB; ADB9;ADB9;1100 1170 11BC;ADB9;1100 1170 11BC; ADBA;ADBA;1100 1170 11BD;ADBA;1100 1170 11BD; ADBB;ADBB;1100 1170 11BE;ADBB;1100 1170 11BE; ADBC;ADBC;1100 1170 11BF;ADBC;1100 1170 11BF; ADBD;ADBD;1100 1170 11C0;ADBD;1100 1170 11C0; ADBE;ADBE;1100 1170 11C1;ADBE;1100 1170 11C1; ADBF;ADBF;1100 1170 11C2;ADBF;1100 1170 11C2; ADC0;ADC0;1100 1171;ADC0;1100 1171; ADC1;ADC1;1100 1171 11A8;ADC1;1100 1171 11A8; ADC2;ADC2;1100 1171 11A9;ADC2;1100 1171 11A9; ADC3;ADC3;1100 1171 11AA;ADC3;1100 1171 11AA; ADC4;ADC4;1100 1171 11AB;ADC4;1100 1171 11AB; ADC5;ADC5;1100 1171 11AC;ADC5;1100 1171 11AC; ADC6;ADC6;1100 1171 11AD;ADC6;1100 1171 11AD; ADC7;ADC7;1100 1171 11AE;ADC7;1100 1171 11AE; ADC8;ADC8;1100 1171 11AF;ADC8;1100 1171 11AF; ADC9;ADC9;1100 1171 11B0;ADC9;1100 1171 11B0; ADCA;ADCA;1100 1171 11B1;ADCA;1100 1171 11B1; ADCB;ADCB;1100 1171 11B2;ADCB;1100 1171 11B2; ADCC;ADCC;1100 1171 11B3;ADCC;1100 1171 11B3; ADCD;ADCD;1100 1171 11B4;ADCD;1100 1171 11B4; ADCE;ADCE;1100 1171 11B5;ADCE;1100 1171 11B5; ADCF;ADCF;1100 1171 11B6;ADCF;1100 1171 11B6; ADD0;ADD0;1100 1171 11B7;ADD0;1100 1171 11B7; ADD1;ADD1;1100 1171 11B8;ADD1;1100 1171 11B8; ADD2;ADD2;1100 1171 11B9;ADD2;1100 1171 11B9; ADD3;ADD3;1100 1171 11BA;ADD3;1100 1171 11BA; ADD4;ADD4;1100 1171 11BB;ADD4;1100 1171 11BB; ADD5;ADD5;1100 1171 11BC;ADD5;1100 1171 11BC; ADD6;ADD6;1100 1171 11BD;ADD6;1100 1171 11BD; ADD7;ADD7;1100 1171 11BE;ADD7;1100 1171 11BE; ADD8;ADD8;1100 1171 11BF;ADD8;1100 1171 11BF; ADD9;ADD9;1100 1171 11C0;ADD9;1100 1171 11C0; ADDA;ADDA;1100 1171 11C1;ADDA;1100 1171 11C1; ADDB;ADDB;1100 1171 11C2;ADDB;1100 1171 11C2; ADDC;ADDC;1100 1172;ADDC;1100 1172; ADDD;ADDD;1100 1172 11A8;ADDD;1100 1172 11A8; ADDE;ADDE;1100 1172 11A9;ADDE;1100 1172 11A9; ADDF;ADDF;1100 1172 11AA;ADDF;1100 1172 11AA; ADE0;ADE0;1100 1172 11AB;ADE0;1100 1172 11AB; ADE1;ADE1;1100 1172 11AC;ADE1;1100 1172 11AC; ADE2;ADE2;1100 1172 11AD;ADE2;1100 1172 11AD; ADE3;ADE3;1100 1172 11AE;ADE3;1100 1172 11AE; ADE4;ADE4;1100 1172 11AF;ADE4;1100 1172 11AF; ADE5;ADE5;1100 1172 11B0;ADE5;1100 1172 11B0; ADE6;ADE6;1100 1172 11B1;ADE6;1100 1172 11B1; ADE7;ADE7;1100 1172 11B2;ADE7;1100 1172 11B2; ADE8;ADE8;1100 1172 11B3;ADE8;1100 1172 11B3; ADE9;ADE9;1100 1172 11B4;ADE9;1100 1172 11B4; ADEA;ADEA;1100 1172 11B5;ADEA;1100 1172 11B5; ADEB;ADEB;1100 1172 11B6;ADEB;1100 1172 11B6; ADEC;ADEC;1100 1172 11B7;ADEC;1100 1172 11B7; ADED;ADED;1100 1172 11B8;ADED;1100 1172 11B8; ADEE;ADEE;1100 1172 11B9;ADEE;1100 1172 11B9; ADEF;ADEF;1100 1172 11BA;ADEF;1100 1172 11BA; ADF0;ADF0;1100 1172 11BB;ADF0;1100 1172 11BB; ADF1;ADF1;1100 1172 11BC;ADF1;1100 1172 11BC; ADF2;ADF2;1100 1172 11BD;ADF2;1100 1172 11BD; ADF3;ADF3;1100 1172 11BE;ADF3;1100 1172 11BE; ADF4;ADF4;1100 1172 11BF;ADF4;1100 1172 11BF; ADF5;ADF5;1100 1172 11C0;ADF5;1100 1172 11C0; ADF6;ADF6;1100 1172 11C1;ADF6;1100 1172 11C1; ADF7;ADF7;1100 1172 11C2;ADF7;1100 1172 11C2; ADF8;ADF8;1100 1173;ADF8;1100 1173; ADF9;ADF9;1100 1173 11A8;ADF9;1100 1173 11A8; ADFA;ADFA;1100 1173 11A9;ADFA;1100 1173 11A9; ADFB;ADFB;1100 1173 11AA;ADFB;1100 1173 11AA; ADFC;ADFC;1100 1173 11AB;ADFC;1100 1173 11AB; ADFD;ADFD;1100 1173 11AC;ADFD;1100 1173 11AC; ADFE;ADFE;1100 1173 11AD;ADFE;1100 1173 11AD; ADFF;ADFF;1100 1173 11AE;ADFF;1100 1173 11AE; AE00;AE00;1100 1173 11AF;AE00;1100 1173 11AF; AE01;AE01;1100 1173 11B0;AE01;1100 1173 11B0; AE02;AE02;1100 1173 11B1;AE02;1100 1173 11B1; AE03;AE03;1100 1173 11B2;AE03;1100 1173 11B2; AE04;AE04;1100 1173 11B3;AE04;1100 1173 11B3; AE05;AE05;1100 1173 11B4;AE05;1100 1173 11B4; AE06;AE06;1100 1173 11B5;AE06;1100 1173 11B5; AE07;AE07;1100 1173 11B6;AE07;1100 1173 11B6; AE08;AE08;1100 1173 11B7;AE08;1100 1173 11B7; AE09;AE09;1100 1173 11B8;AE09;1100 1173 11B8; AE0A;AE0A;1100 1173 11B9;AE0A;1100 1173 11B9; AE0B;AE0B;1100 1173 11BA;AE0B;1100 1173 11BA; AE0C;AE0C;1100 1173 11BB;AE0C;1100 1173 11BB; AE0D;AE0D;1100 1173 11BC;AE0D;1100 1173 11BC; AE0E;AE0E;1100 1173 11BD;AE0E;1100 1173 11BD; AE0F;AE0F;1100 1173 11BE;AE0F;1100 1173 11BE; AE10;AE10;1100 1173 11BF;AE10;1100 1173 11BF; AE11;AE11;1100 1173 11C0;AE11;1100 1173 11C0; AE12;AE12;1100 1173 11C1;AE12;1100 1173 11C1; AE13;AE13;1100 1173 11C2;AE13;1100 1173 11C2; AE14;AE14;1100 1174;AE14;1100 1174; AE15;AE15;1100 1174 11A8;AE15;1100 1174 11A8; AE16;AE16;1100 1174 11A9;AE16;1100 1174 11A9; AE17;AE17;1100 1174 11AA;AE17;1100 1174 11AA; AE18;AE18;1100 1174 11AB;AE18;1100 1174 11AB; AE19;AE19;1100 1174 11AC;AE19;1100 1174 11AC; AE1A;AE1A;1100 1174 11AD;AE1A;1100 1174 11AD; AE1B;AE1B;1100 1174 11AE;AE1B;1100 1174 11AE; AE1C;AE1C;1100 1174 11AF;AE1C;1100 1174 11AF; AE1D;AE1D;1100 1174 11B0;AE1D;1100 1174 11B0; AE1E;AE1E;1100 1174 11B1;AE1E;1100 1174 11B1; AE1F;AE1F;1100 1174 11B2;AE1F;1100 1174 11B2; AE20;AE20;1100 1174 11B3;AE20;1100 1174 11B3; AE21;AE21;1100 1174 11B4;AE21;1100 1174 11B4; AE22;AE22;1100 1174 11B5;AE22;1100 1174 11B5; AE23;AE23;1100 1174 11B6;AE23;1100 1174 11B6; AE24;AE24;1100 1174 11B7;AE24;1100 1174 11B7; AE25;AE25;1100 1174 11B8;AE25;1100 1174 11B8; AE26;AE26;1100 1174 11B9;AE26;1100 1174 11B9; AE27;AE27;1100 1174 11BA;AE27;1100 1174 11BA; AE28;AE28;1100 1174 11BB;AE28;1100 1174 11BB; AE29;AE29;1100 1174 11BC;AE29;1100 1174 11BC; AE2A;AE2A;1100 1174 11BD;AE2A;1100 1174 11BD; AE2B;AE2B;1100 1174 11BE;AE2B;1100 1174 11BE; AE2C;AE2C;1100 1174 11BF;AE2C;1100 1174 11BF; AE2D;AE2D;1100 1174 11C0;AE2D;1100 1174 11C0; AE2E;AE2E;1100 1174 11C1;AE2E;1100 1174 11C1; AE2F;AE2F;1100 1174 11C2;AE2F;1100 1174 11C2; AE30;AE30;1100 1175;AE30;1100 1175; AE31;AE31;1100 1175 11A8;AE31;1100 1175 11A8; AE32;AE32;1100 1175 11A9;AE32;1100 1175 11A9; AE33;AE33;1100 1175 11AA;AE33;1100 1175 11AA; AE34;AE34;1100 1175 11AB;AE34;1100 1175 11AB; AE35;AE35;1100 1175 11AC;AE35;1100 1175 11AC; AE36;AE36;1100 1175 11AD;AE36;1100 1175 11AD; AE37;AE37;1100 1175 11AE;AE37;1100 1175 11AE; AE38;AE38;1100 1175 11AF;AE38;1100 1175 11AF; AE39;AE39;1100 1175 11B0;AE39;1100 1175 11B0; AE3A;AE3A;1100 1175 11B1;AE3A;1100 1175 11B1; AE3B;AE3B;1100 1175 11B2;AE3B;1100 1175 11B2; AE3C;AE3C;1100 1175 11B3;AE3C;1100 1175 11B3; AE3D;AE3D;1100 1175 11B4;AE3D;1100 1175 11B4; AE3E;AE3E;1100 1175 11B5;AE3E;1100 1175 11B5; AE3F;AE3F;1100 1175 11B6;AE3F;1100 1175 11B6; AE40;AE40;1100 1175 11B7;AE40;1100 1175 11B7; AE41;AE41;1100 1175 11B8;AE41;1100 1175 11B8; AE42;AE42;1100 1175 11B9;AE42;1100 1175 11B9; AE43;AE43;1100 1175 11BA;AE43;1100 1175 11BA; AE44;AE44;1100 1175 11BB;AE44;1100 1175 11BB; AE45;AE45;1100 1175 11BC;AE45;1100 1175 11BC; AE46;AE46;1100 1175 11BD;AE46;1100 1175 11BD; AE47;AE47;1100 1175 11BE;AE47;1100 1175 11BE; AE48;AE48;1100 1175 11BF;AE48;1100 1175 11BF; AE49;AE49;1100 1175 11C0;AE49;1100 1175 11C0; AE4A;AE4A;1100 1175 11C1;AE4A;1100 1175 11C1; AE4B;AE4B;1100 1175 11C2;AE4B;1100 1175 11C2; AE4C;AE4C;1101 1161;AE4C;1101 1161; AE4D;AE4D;1101 1161 11A8;AE4D;1101 1161 11A8; AE4E;AE4E;1101 1161 11A9;AE4E;1101 1161 11A9; AE4F;AE4F;1101 1161 11AA;AE4F;1101 1161 11AA; AE50;AE50;1101 1161 11AB;AE50;1101 1161 11AB; AE51;AE51;1101 1161 11AC;AE51;1101 1161 11AC; AE52;AE52;1101 1161 11AD;AE52;1101 1161 11AD; AE53;AE53;1101 1161 11AE;AE53;1101 1161 11AE; AE54;AE54;1101 1161 11AF;AE54;1101 1161 11AF; AE55;AE55;1101 1161 11B0;AE55;1101 1161 11B0; AE56;AE56;1101 1161 11B1;AE56;1101 1161 11B1; AE57;AE57;1101 1161 11B2;AE57;1101 1161 11B2; AE58;AE58;1101 1161 11B3;AE58;1101 1161 11B3; AE59;AE59;1101 1161 11B4;AE59;1101 1161 11B4; AE5A;AE5A;1101 1161 11B5;AE5A;1101 1161 11B5; AE5B;AE5B;1101 1161 11B6;AE5B;1101 1161 11B6; AE5C;AE5C;1101 1161 11B7;AE5C;1101 1161 11B7; AE5D;AE5D;1101 1161 11B8;AE5D;1101 1161 11B8; AE5E;AE5E;1101 1161 11B9;AE5E;1101 1161 11B9; AE5F;AE5F;1101 1161 11BA;AE5F;1101 1161 11BA; AE60;AE60;1101 1161 11BB;AE60;1101 1161 11BB; AE61;AE61;1101 1161 11BC;AE61;1101 1161 11BC; AE62;AE62;1101 1161 11BD;AE62;1101 1161 11BD; AE63;AE63;1101 1161 11BE;AE63;1101 1161 11BE; AE64;AE64;1101 1161 11BF;AE64;1101 1161 11BF; AE65;AE65;1101 1161 11C0;AE65;1101 1161 11C0; AE66;AE66;1101 1161 11C1;AE66;1101 1161 11C1; AE67;AE67;1101 1161 11C2;AE67;1101 1161 11C2; AE68;AE68;1101 1162;AE68;1101 1162; AE69;AE69;1101 1162 11A8;AE69;1101 1162 11A8; AE6A;AE6A;1101 1162 11A9;AE6A;1101 1162 11A9; AE6B;AE6B;1101 1162 11AA;AE6B;1101 1162 11AA; AE6C;AE6C;1101 1162 11AB;AE6C;1101 1162 11AB; AE6D;AE6D;1101 1162 11AC;AE6D;1101 1162 11AC; AE6E;AE6E;1101 1162 11AD;AE6E;1101 1162 11AD; AE6F;AE6F;1101 1162 11AE;AE6F;1101 1162 11AE; AE70;AE70;1101 1162 11AF;AE70;1101 1162 11AF; AE71;AE71;1101 1162 11B0;AE71;1101 1162 11B0; AE72;AE72;1101 1162 11B1;AE72;1101 1162 11B1; AE73;AE73;1101 1162 11B2;AE73;1101 1162 11B2; AE74;AE74;1101 1162 11B3;AE74;1101 1162 11B3; AE75;AE75;1101 1162 11B4;AE75;1101 1162 11B4; AE76;AE76;1101 1162 11B5;AE76;1101 1162 11B5; AE77;AE77;1101 1162 11B6;AE77;1101 1162 11B6; AE78;AE78;1101 1162 11B7;AE78;1101 1162 11B7; AE79;AE79;1101 1162 11B8;AE79;1101 1162 11B8; AE7A;AE7A;1101 1162 11B9;AE7A;1101 1162 11B9; AE7B;AE7B;1101 1162 11BA;AE7B;1101 1162 11BA; AE7C;AE7C;1101 1162 11BB;AE7C;1101 1162 11BB; AE7D;AE7D;1101 1162 11BC;AE7D;1101 1162 11BC; AE7E;AE7E;1101 1162 11BD;AE7E;1101 1162 11BD; AE7F;AE7F;1101 1162 11BE;AE7F;1101 1162 11BE; AE80;AE80;1101 1162 11BF;AE80;1101 1162 11BF; AE81;AE81;1101 1162 11C0;AE81;1101 1162 11C0; AE82;AE82;1101 1162 11C1;AE82;1101 1162 11C1; AE83;AE83;1101 1162 11C2;AE83;1101 1162 11C2; AE84;AE84;1101 1163;AE84;1101 1163; AE85;AE85;1101 1163 11A8;AE85;1101 1163 11A8; AE86;AE86;1101 1163 11A9;AE86;1101 1163 11A9; AE87;AE87;1101 1163 11AA;AE87;1101 1163 11AA; AE88;AE88;1101 1163 11AB;AE88;1101 1163 11AB; AE89;AE89;1101 1163 11AC;AE89;1101 1163 11AC; AE8A;AE8A;1101 1163 11AD;AE8A;1101 1163 11AD; AE8B;AE8B;1101 1163 11AE;AE8B;1101 1163 11AE; AE8C;AE8C;1101 1163 11AF;AE8C;1101 1163 11AF; AE8D;AE8D;1101 1163 11B0;AE8D;1101 1163 11B0; AE8E;AE8E;1101 1163 11B1;AE8E;1101 1163 11B1; AE8F;AE8F;1101 1163 11B2;AE8F;1101 1163 11B2; AE90;AE90;1101 1163 11B3;AE90;1101 1163 11B3; AE91;AE91;1101 1163 11B4;AE91;1101 1163 11B4; AE92;AE92;1101 1163 11B5;AE92;1101 1163 11B5; AE93;AE93;1101 1163 11B6;AE93;1101 1163 11B6; AE94;AE94;1101 1163 11B7;AE94;1101 1163 11B7; AE95;AE95;1101 1163 11B8;AE95;1101 1163 11B8; AE96;AE96;1101 1163 11B9;AE96;1101 1163 11B9; AE97;AE97;1101 1163 11BA;AE97;1101 1163 11BA; AE98;AE98;1101 1163 11BB;AE98;1101 1163 11BB; AE99;AE99;1101 1163 11BC;AE99;1101 1163 11BC; AE9A;AE9A;1101 1163 11BD;AE9A;1101 1163 11BD; AE9B;AE9B;1101 1163 11BE;AE9B;1101 1163 11BE; AE9C;AE9C;1101 1163 11BF;AE9C;1101 1163 11BF; AE9D;AE9D;1101 1163 11C0;AE9D;1101 1163 11C0; AE9E;AE9E;1101 1163 11C1;AE9E;1101 1163 11C1; AE9F;AE9F;1101 1163 11C2;AE9F;1101 1163 11C2; AEA0;AEA0;1101 1164;AEA0;1101 1164; AEA1;AEA1;1101 1164 11A8;AEA1;1101 1164 11A8; AEA2;AEA2;1101 1164 11A9;AEA2;1101 1164 11A9; AEA3;AEA3;1101 1164 11AA;AEA3;1101 1164 11AA; AEA4;AEA4;1101 1164 11AB;AEA4;1101 1164 11AB; AEA5;AEA5;1101 1164 11AC;AEA5;1101 1164 11AC; AEA6;AEA6;1101 1164 11AD;AEA6;1101 1164 11AD; AEA7;AEA7;1101 1164 11AE;AEA7;1101 1164 11AE; AEA8;AEA8;1101 1164 11AF;AEA8;1101 1164 11AF; AEA9;AEA9;1101 1164 11B0;AEA9;1101 1164 11B0; AEAA;AEAA;1101 1164 11B1;AEAA;1101 1164 11B1; AEAB;AEAB;1101 1164 11B2;AEAB;1101 1164 11B2; AEAC;AEAC;1101 1164 11B3;AEAC;1101 1164 11B3; AEAD;AEAD;1101 1164 11B4;AEAD;1101 1164 11B4; AEAE;AEAE;1101 1164 11B5;AEAE;1101 1164 11B5; AEAF;AEAF;1101 1164 11B6;AEAF;1101 1164 11B6; AEB0;AEB0;1101 1164 11B7;AEB0;1101 1164 11B7; AEB1;AEB1;1101 1164 11B8;AEB1;1101 1164 11B8; AEB2;AEB2;1101 1164 11B9;AEB2;1101 1164 11B9; AEB3;AEB3;1101 1164 11BA;AEB3;1101 1164 11BA; AEB4;AEB4;1101 1164 11BB;AEB4;1101 1164 11BB; AEB5;AEB5;1101 1164 11BC;AEB5;1101 1164 11BC; AEB6;AEB6;1101 1164 11BD;AEB6;1101 1164 11BD; AEB7;AEB7;1101 1164 11BE;AEB7;1101 1164 11BE; AEB8;AEB8;1101 1164 11BF;AEB8;1101 1164 11BF; AEB9;AEB9;1101 1164 11C0;AEB9;1101 1164 11C0; AEBA;AEBA;1101 1164 11C1;AEBA;1101 1164 11C1; AEBB;AEBB;1101 1164 11C2;AEBB;1101 1164 11C2; AEBC;AEBC;1101 1165;AEBC;1101 1165; AEBD;AEBD;1101 1165 11A8;AEBD;1101 1165 11A8; AEBE;AEBE;1101 1165 11A9;AEBE;1101 1165 11A9; AEBF;AEBF;1101 1165 11AA;AEBF;1101 1165 11AA; AEC0;AEC0;1101 1165 11AB;AEC0;1101 1165 11AB; AEC1;AEC1;1101 1165 11AC;AEC1;1101 1165 11AC; AEC2;AEC2;1101 1165 11AD;AEC2;1101 1165 11AD; AEC3;AEC3;1101 1165 11AE;AEC3;1101 1165 11AE; AEC4;AEC4;1101 1165 11AF;AEC4;1101 1165 11AF; AEC5;AEC5;1101 1165 11B0;AEC5;1101 1165 11B0; AEC6;AEC6;1101 1165 11B1;AEC6;1101 1165 11B1; AEC7;AEC7;1101 1165 11B2;AEC7;1101 1165 11B2; AEC8;AEC8;1101 1165 11B3;AEC8;1101 1165 11B3; AEC9;AEC9;1101 1165 11B4;AEC9;1101 1165 11B4; AECA;AECA;1101 1165 11B5;AECA;1101 1165 11B5; AECB;AECB;1101 1165 11B6;AECB;1101 1165 11B6; AECC;AECC;1101 1165 11B7;AECC;1101 1165 11B7; AECD;AECD;1101 1165 11B8;AECD;1101 1165 11B8; AECE;AECE;1101 1165 11B9;AECE;1101 1165 11B9; AECF;AECF;1101 1165 11BA;AECF;1101 1165 11BA; AED0;AED0;1101 1165 11BB;AED0;1101 1165 11BB; AED1;AED1;1101 1165 11BC;AED1;1101 1165 11BC; AED2;AED2;1101 1165 11BD;AED2;1101 1165 11BD; AED3;AED3;1101 1165 11BE;AED3;1101 1165 11BE; AED4;AED4;1101 1165 11BF;AED4;1101 1165 11BF; AED5;AED5;1101 1165 11C0;AED5;1101 1165 11C0; AED6;AED6;1101 1165 11C1;AED6;1101 1165 11C1; AED7;AED7;1101 1165 11C2;AED7;1101 1165 11C2; AED8;AED8;1101 1166;AED8;1101 1166; AED9;AED9;1101 1166 11A8;AED9;1101 1166 11A8; AEDA;AEDA;1101 1166 11A9;AEDA;1101 1166 11A9; AEDB;AEDB;1101 1166 11AA;AEDB;1101 1166 11AA; AEDC;AEDC;1101 1166 11AB;AEDC;1101 1166 11AB; AEDD;AEDD;1101 1166 11AC;AEDD;1101 1166 11AC; AEDE;AEDE;1101 1166 11AD;AEDE;1101 1166 11AD; AEDF;AEDF;1101 1166 11AE;AEDF;1101 1166 11AE; AEE0;AEE0;1101 1166 11AF;AEE0;1101 1166 11AF; AEE1;AEE1;1101 1166 11B0;AEE1;1101 1166 11B0; AEE2;AEE2;1101 1166 11B1;AEE2;1101 1166 11B1; AEE3;AEE3;1101 1166 11B2;AEE3;1101 1166 11B2; AEE4;AEE4;1101 1166 11B3;AEE4;1101 1166 11B3; AEE5;AEE5;1101 1166 11B4;AEE5;1101 1166 11B4; AEE6;AEE6;1101 1166 11B5;AEE6;1101 1166 11B5; AEE7;AEE7;1101 1166 11B6;AEE7;1101 1166 11B6; AEE8;AEE8;1101 1166 11B7;AEE8;1101 1166 11B7; AEE9;AEE9;1101 1166 11B8;AEE9;1101 1166 11B8; AEEA;AEEA;1101 1166 11B9;AEEA;1101 1166 11B9; AEEB;AEEB;1101 1166 11BA;AEEB;1101 1166 11BA; AEEC;AEEC;1101 1166 11BB;AEEC;1101 1166 11BB; AEED;AEED;1101 1166 11BC;AEED;1101 1166 11BC; AEEE;AEEE;1101 1166 11BD;AEEE;1101 1166 11BD; AEEF;AEEF;1101 1166 11BE;AEEF;1101 1166 11BE; AEF0;AEF0;1101 1166 11BF;AEF0;1101 1166 11BF; AEF1;AEF1;1101 1166 11C0;AEF1;1101 1166 11C0; AEF2;AEF2;1101 1166 11C1;AEF2;1101 1166 11C1; AEF3;AEF3;1101 1166 11C2;AEF3;1101 1166 11C2; AEF4;AEF4;1101 1167;AEF4;1101 1167; AEF5;AEF5;1101 1167 11A8;AEF5;1101 1167 11A8; AEF6;AEF6;1101 1167 11A9;AEF6;1101 1167 11A9; AEF7;AEF7;1101 1167 11AA;AEF7;1101 1167 11AA; AEF8;AEF8;1101 1167 11AB;AEF8;1101 1167 11AB; AEF9;AEF9;1101 1167 11AC;AEF9;1101 1167 11AC; AEFA;AEFA;1101 1167 11AD;AEFA;1101 1167 11AD; AEFB;AEFB;1101 1167 11AE;AEFB;1101 1167 11AE; AEFC;AEFC;1101 1167 11AF;AEFC;1101 1167 11AF; AEFD;AEFD;1101 1167 11B0;AEFD;1101 1167 11B0; AEFE;AEFE;1101 1167 11B1;AEFE;1101 1167 11B1; AEFF;AEFF;1101 1167 11B2;AEFF;1101 1167 11B2; AF00;AF00;1101 1167 11B3;AF00;1101 1167 11B3; AF01;AF01;1101 1167 11B4;AF01;1101 1167 11B4; AF02;AF02;1101 1167 11B5;AF02;1101 1167 11B5; AF03;AF03;1101 1167 11B6;AF03;1101 1167 11B6; AF04;AF04;1101 1167 11B7;AF04;1101 1167 11B7; AF05;AF05;1101 1167 11B8;AF05;1101 1167 11B8; AF06;AF06;1101 1167 11B9;AF06;1101 1167 11B9; AF07;AF07;1101 1167 11BA;AF07;1101 1167 11BA; AF08;AF08;1101 1167 11BB;AF08;1101 1167 11BB; AF09;AF09;1101 1167 11BC;AF09;1101 1167 11BC; AF0A;AF0A;1101 1167 11BD;AF0A;1101 1167 11BD; AF0B;AF0B;1101 1167 11BE;AF0B;1101 1167 11BE; AF0C;AF0C;1101 1167 11BF;AF0C;1101 1167 11BF; AF0D;AF0D;1101 1167 11C0;AF0D;1101 1167 11C0; AF0E;AF0E;1101 1167 11C1;AF0E;1101 1167 11C1; AF0F;AF0F;1101 1167 11C2;AF0F;1101 1167 11C2; AF10;AF10;1101 1168;AF10;1101 1168; AF11;AF11;1101 1168 11A8;AF11;1101 1168 11A8; AF12;AF12;1101 1168 11A9;AF12;1101 1168 11A9; AF13;AF13;1101 1168 11AA;AF13;1101 1168 11AA; AF14;AF14;1101 1168 11AB;AF14;1101 1168 11AB; AF15;AF15;1101 1168 11AC;AF15;1101 1168 11AC; AF16;AF16;1101 1168 11AD;AF16;1101 1168 11AD; AF17;AF17;1101 1168 11AE;AF17;1101 1168 11AE; AF18;AF18;1101 1168 11AF;AF18;1101 1168 11AF; AF19;AF19;1101 1168 11B0;AF19;1101 1168 11B0; AF1A;AF1A;1101 1168 11B1;AF1A;1101 1168 11B1; AF1B;AF1B;1101 1168 11B2;AF1B;1101 1168 11B2; AF1C;AF1C;1101 1168 11B3;AF1C;1101 1168 11B3; AF1D;AF1D;1101 1168 11B4;AF1D;1101 1168 11B4; AF1E;AF1E;1101 1168 11B5;AF1E;1101 1168 11B5; AF1F;AF1F;1101 1168 11B6;AF1F;1101 1168 11B6; AF20;AF20;1101 1168 11B7;AF20;1101 1168 11B7; AF21;AF21;1101 1168 11B8;AF21;1101 1168 11B8; AF22;AF22;1101 1168 11B9;AF22;1101 1168 11B9; AF23;AF23;1101 1168 11BA;AF23;1101 1168 11BA; AF24;AF24;1101 1168 11BB;AF24;1101 1168 11BB; AF25;AF25;1101 1168 11BC;AF25;1101 1168 11BC; AF26;AF26;1101 1168 11BD;AF26;1101 1168 11BD; AF27;AF27;1101 1168 11BE;AF27;1101 1168 11BE; AF28;AF28;1101 1168 11BF;AF28;1101 1168 11BF; AF29;AF29;1101 1168 11C0;AF29;1101 1168 11C0; AF2A;AF2A;1101 1168 11C1;AF2A;1101 1168 11C1; AF2B;AF2B;1101 1168 11C2;AF2B;1101 1168 11C2; AF2C;AF2C;1101 1169;AF2C;1101 1169; AF2D;AF2D;1101 1169 11A8;AF2D;1101 1169 11A8; AF2E;AF2E;1101 1169 11A9;AF2E;1101 1169 11A9; AF2F;AF2F;1101 1169 11AA;AF2F;1101 1169 11AA; AF30;AF30;1101 1169 11AB;AF30;1101 1169 11AB; AF31;AF31;1101 1169 11AC;AF31;1101 1169 11AC; AF32;AF32;1101 1169 11AD;AF32;1101 1169 11AD; AF33;AF33;1101 1169 11AE;AF33;1101 1169 11AE; AF34;AF34;1101 1169 11AF;AF34;1101 1169 11AF; AF35;AF35;1101 1169 11B0;AF35;1101 1169 11B0; AF36;AF36;1101 1169 11B1;AF36;1101 1169 11B1; AF37;AF37;1101 1169 11B2;AF37;1101 1169 11B2; AF38;AF38;1101 1169 11B3;AF38;1101 1169 11B3; AF39;AF39;1101 1169 11B4;AF39;1101 1169 11B4; AF3A;AF3A;1101 1169 11B5;AF3A;1101 1169 11B5; AF3B;AF3B;1101 1169 11B6;AF3B;1101 1169 11B6; AF3C;AF3C;1101 1169 11B7;AF3C;1101 1169 11B7; AF3D;AF3D;1101 1169 11B8;AF3D;1101 1169 11B8; AF3E;AF3E;1101 1169 11B9;AF3E;1101 1169 11B9; AF3F;AF3F;1101 1169 11BA;AF3F;1101 1169 11BA; AF40;AF40;1101 1169 11BB;AF40;1101 1169 11BB; AF41;AF41;1101 1169 11BC;AF41;1101 1169 11BC; AF42;AF42;1101 1169 11BD;AF42;1101 1169 11BD; AF43;AF43;1101 1169 11BE;AF43;1101 1169 11BE; AF44;AF44;1101 1169 11BF;AF44;1101 1169 11BF; AF45;AF45;1101 1169 11C0;AF45;1101 1169 11C0; AF46;AF46;1101 1169 11C1;AF46;1101 1169 11C1; AF47;AF47;1101 1169 11C2;AF47;1101 1169 11C2; AF48;AF48;1101 116A;AF48;1101 116A; AF49;AF49;1101 116A 11A8;AF49;1101 116A 11A8; AF4A;AF4A;1101 116A 11A9;AF4A;1101 116A 11A9; AF4B;AF4B;1101 116A 11AA;AF4B;1101 116A 11AA; AF4C;AF4C;1101 116A 11AB;AF4C;1101 116A 11AB; AF4D;AF4D;1101 116A 11AC;AF4D;1101 116A 11AC; AF4E;AF4E;1101 116A 11AD;AF4E;1101 116A 11AD; AF4F;AF4F;1101 116A 11AE;AF4F;1101 116A 11AE; AF50;AF50;1101 116A 11AF;AF50;1101 116A 11AF; AF51;AF51;1101 116A 11B0;AF51;1101 116A 11B0; AF52;AF52;1101 116A 11B1;AF52;1101 116A 11B1; AF53;AF53;1101 116A 11B2;AF53;1101 116A 11B2; AF54;AF54;1101 116A 11B3;AF54;1101 116A 11B3; AF55;AF55;1101 116A 11B4;AF55;1101 116A 11B4; AF56;AF56;1101 116A 11B5;AF56;1101 116A 11B5; AF57;AF57;1101 116A 11B6;AF57;1101 116A 11B6; AF58;AF58;1101 116A 11B7;AF58;1101 116A 11B7; AF59;AF59;1101 116A 11B8;AF59;1101 116A 11B8; AF5A;AF5A;1101 116A 11B9;AF5A;1101 116A 11B9; AF5B;AF5B;1101 116A 11BA;AF5B;1101 116A 11BA; AF5C;AF5C;1101 116A 11BB;AF5C;1101 116A 11BB; AF5D;AF5D;1101 116A 11BC;AF5D;1101 116A 11BC; AF5E;AF5E;1101 116A 11BD;AF5E;1101 116A 11BD; AF5F;AF5F;1101 116A 11BE;AF5F;1101 116A 11BE; AF60;AF60;1101 116A 11BF;AF60;1101 116A 11BF; AF61;AF61;1101 116A 11C0;AF61;1101 116A 11C0; AF62;AF62;1101 116A 11C1;AF62;1101 116A 11C1; AF63;AF63;1101 116A 11C2;AF63;1101 116A 11C2; AF64;AF64;1101 116B;AF64;1101 116B; AF65;AF65;1101 116B 11A8;AF65;1101 116B 11A8; AF66;AF66;1101 116B 11A9;AF66;1101 116B 11A9; AF67;AF67;1101 116B 11AA;AF67;1101 116B 11AA; AF68;AF68;1101 116B 11AB;AF68;1101 116B 11AB; AF69;AF69;1101 116B 11AC;AF69;1101 116B 11AC; AF6A;AF6A;1101 116B 11AD;AF6A;1101 116B 11AD; AF6B;AF6B;1101 116B 11AE;AF6B;1101 116B 11AE; AF6C;AF6C;1101 116B 11AF;AF6C;1101 116B 11AF; AF6D;AF6D;1101 116B 11B0;AF6D;1101 116B 11B0; AF6E;AF6E;1101 116B 11B1;AF6E;1101 116B 11B1; AF6F;AF6F;1101 116B 11B2;AF6F;1101 116B 11B2; AF70;AF70;1101 116B 11B3;AF70;1101 116B 11B3; AF71;AF71;1101 116B 11B4;AF71;1101 116B 11B4; AF72;AF72;1101 116B 11B5;AF72;1101 116B 11B5; AF73;AF73;1101 116B 11B6;AF73;1101 116B 11B6; AF74;AF74;1101 116B 11B7;AF74;1101 116B 11B7; AF75;AF75;1101 116B 11B8;AF75;1101 116B 11B8; AF76;AF76;1101 116B 11B9;AF76;1101 116B 11B9; AF77;AF77;1101 116B 11BA;AF77;1101 116B 11BA; AF78;AF78;1101 116B 11BB;AF78;1101 116B 11BB; AF79;AF79;1101 116B 11BC;AF79;1101 116B 11BC; AF7A;AF7A;1101 116B 11BD;AF7A;1101 116B 11BD; AF7B;AF7B;1101 116B 11BE;AF7B;1101 116B 11BE; AF7C;AF7C;1101 116B 11BF;AF7C;1101 116B 11BF; AF7D;AF7D;1101 116B 11C0;AF7D;1101 116B 11C0; AF7E;AF7E;1101 116B 11C1;AF7E;1101 116B 11C1; AF7F;AF7F;1101 116B 11C2;AF7F;1101 116B 11C2; AF80;AF80;1101 116C;AF80;1101 116C; AF81;AF81;1101 116C 11A8;AF81;1101 116C 11A8; AF82;AF82;1101 116C 11A9;AF82;1101 116C 11A9; AF83;AF83;1101 116C 11AA;AF83;1101 116C 11AA; AF84;AF84;1101 116C 11AB;AF84;1101 116C 11AB; AF85;AF85;1101 116C 11AC;AF85;1101 116C 11AC; AF86;AF86;1101 116C 11AD;AF86;1101 116C 11AD; AF87;AF87;1101 116C 11AE;AF87;1101 116C 11AE; AF88;AF88;1101 116C 11AF;AF88;1101 116C 11AF; AF89;AF89;1101 116C 11B0;AF89;1101 116C 11B0; AF8A;AF8A;1101 116C 11B1;AF8A;1101 116C 11B1; AF8B;AF8B;1101 116C 11B2;AF8B;1101 116C 11B2; AF8C;AF8C;1101 116C 11B3;AF8C;1101 116C 11B3; AF8D;AF8D;1101 116C 11B4;AF8D;1101 116C 11B4; AF8E;AF8E;1101 116C 11B5;AF8E;1101 116C 11B5; AF8F;AF8F;1101 116C 11B6;AF8F;1101 116C 11B6; AF90;AF90;1101 116C 11B7;AF90;1101 116C 11B7; AF91;AF91;1101 116C 11B8;AF91;1101 116C 11B8; AF92;AF92;1101 116C 11B9;AF92;1101 116C 11B9; AF93;AF93;1101 116C 11BA;AF93;1101 116C 11BA; AF94;AF94;1101 116C 11BB;AF94;1101 116C 11BB; AF95;AF95;1101 116C 11BC;AF95;1101 116C 11BC; AF96;AF96;1101 116C 11BD;AF96;1101 116C 11BD; AF97;AF97;1101 116C 11BE;AF97;1101 116C 11BE; AF98;AF98;1101 116C 11BF;AF98;1101 116C 11BF; AF99;AF99;1101 116C 11C0;AF99;1101 116C 11C0; AF9A;AF9A;1101 116C 11C1;AF9A;1101 116C 11C1; AF9B;AF9B;1101 116C 11C2;AF9B;1101 116C 11C2; AF9C;AF9C;1101 116D;AF9C;1101 116D; AF9D;AF9D;1101 116D 11A8;AF9D;1101 116D 11A8; AF9E;AF9E;1101 116D 11A9;AF9E;1101 116D 11A9; AF9F;AF9F;1101 116D 11AA;AF9F;1101 116D 11AA; AFA0;AFA0;1101 116D 11AB;AFA0;1101 116D 11AB; AFA1;AFA1;1101 116D 11AC;AFA1;1101 116D 11AC; AFA2;AFA2;1101 116D 11AD;AFA2;1101 116D 11AD; AFA3;AFA3;1101 116D 11AE;AFA3;1101 116D 11AE; AFA4;AFA4;1101 116D 11AF;AFA4;1101 116D 11AF; AFA5;AFA5;1101 116D 11B0;AFA5;1101 116D 11B0; AFA6;AFA6;1101 116D 11B1;AFA6;1101 116D 11B1; AFA7;AFA7;1101 116D 11B2;AFA7;1101 116D 11B2; AFA8;AFA8;1101 116D 11B3;AFA8;1101 116D 11B3; AFA9;AFA9;1101 116D 11B4;AFA9;1101 116D 11B4; AFAA;AFAA;1101 116D 11B5;AFAA;1101 116D 11B5; AFAB;AFAB;1101 116D 11B6;AFAB;1101 116D 11B6; AFAC;AFAC;1101 116D 11B7;AFAC;1101 116D 11B7; AFAD;AFAD;1101 116D 11B8;AFAD;1101 116D 11B8; AFAE;AFAE;1101 116D 11B9;AFAE;1101 116D 11B9; AFAF;AFAF;1101 116D 11BA;AFAF;1101 116D 11BA; AFB0;AFB0;1101 116D 11BB;AFB0;1101 116D 11BB; AFB1;AFB1;1101 116D 11BC;AFB1;1101 116D 11BC; AFB2;AFB2;1101 116D 11BD;AFB2;1101 116D 11BD; AFB3;AFB3;1101 116D 11BE;AFB3;1101 116D 11BE; AFB4;AFB4;1101 116D 11BF;AFB4;1101 116D 11BF; AFB5;AFB5;1101 116D 11C0;AFB5;1101 116D 11C0; AFB6;AFB6;1101 116D 11C1;AFB6;1101 116D 11C1; AFB7;AFB7;1101 116D 11C2;AFB7;1101 116D 11C2; AFB8;AFB8;1101 116E;AFB8;1101 116E; AFB9;AFB9;1101 116E 11A8;AFB9;1101 116E 11A8; AFBA;AFBA;1101 116E 11A9;AFBA;1101 116E 11A9; AFBB;AFBB;1101 116E 11AA;AFBB;1101 116E 11AA; AFBC;AFBC;1101 116E 11AB;AFBC;1101 116E 11AB; AFBD;AFBD;1101 116E 11AC;AFBD;1101 116E 11AC; AFBE;AFBE;1101 116E 11AD;AFBE;1101 116E 11AD; AFBF;AFBF;1101 116E 11AE;AFBF;1101 116E 11AE; AFC0;AFC0;1101 116E 11AF;AFC0;1101 116E 11AF; AFC1;AFC1;1101 116E 11B0;AFC1;1101 116E 11B0; AFC2;AFC2;1101 116E 11B1;AFC2;1101 116E 11B1; AFC3;AFC3;1101 116E 11B2;AFC3;1101 116E 11B2; AFC4;AFC4;1101 116E 11B3;AFC4;1101 116E 11B3; AFC5;AFC5;1101 116E 11B4;AFC5;1101 116E 11B4; AFC6;AFC6;1101 116E 11B5;AFC6;1101 116E 11B5; AFC7;AFC7;1101 116E 11B6;AFC7;1101 116E 11B6; AFC8;AFC8;1101 116E 11B7;AFC8;1101 116E 11B7; AFC9;AFC9;1101 116E 11B8;AFC9;1101 116E 11B8; AFCA;AFCA;1101 116E 11B9;AFCA;1101 116E 11B9; AFCB;AFCB;1101 116E 11BA;AFCB;1101 116E 11BA; AFCC;AFCC;1101 116E 11BB;AFCC;1101 116E 11BB; AFCD;AFCD;1101 116E 11BC;AFCD;1101 116E 11BC; AFCE;AFCE;1101 116E 11BD;AFCE;1101 116E 11BD; AFCF;AFCF;1101 116E 11BE;AFCF;1101 116E 11BE; AFD0;AFD0;1101 116E 11BF;AFD0;1101 116E 11BF; AFD1;AFD1;1101 116E 11C0;AFD1;1101 116E 11C0; AFD2;AFD2;1101 116E 11C1;AFD2;1101 116E 11C1; AFD3;AFD3;1101 116E 11C2;AFD3;1101 116E 11C2; AFD4;AFD4;1101 116F;AFD4;1101 116F; AFD5;AFD5;1101 116F 11A8;AFD5;1101 116F 11A8; AFD6;AFD6;1101 116F 11A9;AFD6;1101 116F 11A9; AFD7;AFD7;1101 116F 11AA;AFD7;1101 116F 11AA; AFD8;AFD8;1101 116F 11AB;AFD8;1101 116F 11AB; AFD9;AFD9;1101 116F 11AC;AFD9;1101 116F 11AC; AFDA;AFDA;1101 116F 11AD;AFDA;1101 116F 11AD; AFDB;AFDB;1101 116F 11AE;AFDB;1101 116F 11AE; AFDC;AFDC;1101 116F 11AF;AFDC;1101 116F 11AF; AFDD;AFDD;1101 116F 11B0;AFDD;1101 116F 11B0; AFDE;AFDE;1101 116F 11B1;AFDE;1101 116F 11B1; AFDF;AFDF;1101 116F 11B2;AFDF;1101 116F 11B2; AFE0;AFE0;1101 116F 11B3;AFE0;1101 116F 11B3; AFE1;AFE1;1101 116F 11B4;AFE1;1101 116F 11B4; AFE2;AFE2;1101 116F 11B5;AFE2;1101 116F 11B5; AFE3;AFE3;1101 116F 11B6;AFE3;1101 116F 11B6; AFE4;AFE4;1101 116F 11B7;AFE4;1101 116F 11B7; AFE5;AFE5;1101 116F 11B8;AFE5;1101 116F 11B8; AFE6;AFE6;1101 116F 11B9;AFE6;1101 116F 11B9; AFE7;AFE7;1101 116F 11BA;AFE7;1101 116F 11BA; AFE8;AFE8;1101 116F 11BB;AFE8;1101 116F 11BB; AFE9;AFE9;1101 116F 11BC;AFE9;1101 116F 11BC; AFEA;AFEA;1101 116F 11BD;AFEA;1101 116F 11BD; AFEB;AFEB;1101 116F 11BE;AFEB;1101 116F 11BE; AFEC;AFEC;1101 116F 11BF;AFEC;1101 116F 11BF; AFED;AFED;1101 116F 11C0;AFED;1101 116F 11C0; AFEE;AFEE;1101 116F 11C1;AFEE;1101 116F 11C1; AFEF;AFEF;1101 116F 11C2;AFEF;1101 116F 11C2; AFF0;AFF0;1101 1170;AFF0;1101 1170; AFF1;AFF1;1101 1170 11A8;AFF1;1101 1170 11A8; AFF2;AFF2;1101 1170 11A9;AFF2;1101 1170 11A9; AFF3;AFF3;1101 1170 11AA;AFF3;1101 1170 11AA; AFF4;AFF4;1101 1170 11AB;AFF4;1101 1170 11AB; AFF5;AFF5;1101 1170 11AC;AFF5;1101 1170 11AC; AFF6;AFF6;1101 1170 11AD;AFF6;1101 1170 11AD; AFF7;AFF7;1101 1170 11AE;AFF7;1101 1170 11AE; AFF8;AFF8;1101 1170 11AF;AFF8;1101 1170 11AF; AFF9;AFF9;1101 1170 11B0;AFF9;1101 1170 11B0; AFFA;AFFA;1101 1170 11B1;AFFA;1101 1170 11B1; AFFB;AFFB;1101 1170 11B2;AFFB;1101 1170 11B2; AFFC;AFFC;1101 1170 11B3;AFFC;1101 1170 11B3; AFFD;AFFD;1101 1170 11B4;AFFD;1101 1170 11B4; AFFE;AFFE;1101 1170 11B5;AFFE;1101 1170 11B5; AFFF;AFFF;1101 1170 11B6;AFFF;1101 1170 11B6; B000;B000;1101 1170 11B7;B000;1101 1170 11B7; B001;B001;1101 1170 11B8;B001;1101 1170 11B8; B002;B002;1101 1170 11B9;B002;1101 1170 11B9; B003;B003;1101 1170 11BA;B003;1101 1170 11BA; B004;B004;1101 1170 11BB;B004;1101 1170 11BB; B005;B005;1101 1170 11BC;B005;1101 1170 11BC; B006;B006;1101 1170 11BD;B006;1101 1170 11BD; B007;B007;1101 1170 11BE;B007;1101 1170 11BE; B008;B008;1101 1170 11BF;B008;1101 1170 11BF; B009;B009;1101 1170 11C0;B009;1101 1170 11C0; B00A;B00A;1101 1170 11C1;B00A;1101 1170 11C1; B00B;B00B;1101 1170 11C2;B00B;1101 1170 11C2; B00C;B00C;1101 1171;B00C;1101 1171; B00D;B00D;1101 1171 11A8;B00D;1101 1171 11A8; B00E;B00E;1101 1171 11A9;B00E;1101 1171 11A9; B00F;B00F;1101 1171 11AA;B00F;1101 1171 11AA; B010;B010;1101 1171 11AB;B010;1101 1171 11AB; B011;B011;1101 1171 11AC;B011;1101 1171 11AC; B012;B012;1101 1171 11AD;B012;1101 1171 11AD; B013;B013;1101 1171 11AE;B013;1101 1171 11AE; B014;B014;1101 1171 11AF;B014;1101 1171 11AF; B015;B015;1101 1171 11B0;B015;1101 1171 11B0; B016;B016;1101 1171 11B1;B016;1101 1171 11B1; B017;B017;1101 1171 11B2;B017;1101 1171 11B2; B018;B018;1101 1171 11B3;B018;1101 1171 11B3; B019;B019;1101 1171 11B4;B019;1101 1171 11B4; B01A;B01A;1101 1171 11B5;B01A;1101 1171 11B5; B01B;B01B;1101 1171 11B6;B01B;1101 1171 11B6; B01C;B01C;1101 1171 11B7;B01C;1101 1171 11B7; B01D;B01D;1101 1171 11B8;B01D;1101 1171 11B8; B01E;B01E;1101 1171 11B9;B01E;1101 1171 11B9; B01F;B01F;1101 1171 11BA;B01F;1101 1171 11BA; B020;B020;1101 1171 11BB;B020;1101 1171 11BB; B021;B021;1101 1171 11BC;B021;1101 1171 11BC; B022;B022;1101 1171 11BD;B022;1101 1171 11BD; B023;B023;1101 1171 11BE;B023;1101 1171 11BE; B024;B024;1101 1171 11BF;B024;1101 1171 11BF; B025;B025;1101 1171 11C0;B025;1101 1171 11C0; B026;B026;1101 1171 11C1;B026;1101 1171 11C1; B027;B027;1101 1171 11C2;B027;1101 1171 11C2; B028;B028;1101 1172;B028;1101 1172; B029;B029;1101 1172 11A8;B029;1101 1172 11A8; B02A;B02A;1101 1172 11A9;B02A;1101 1172 11A9; B02B;B02B;1101 1172 11AA;B02B;1101 1172 11AA; B02C;B02C;1101 1172 11AB;B02C;1101 1172 11AB; B02D;B02D;1101 1172 11AC;B02D;1101 1172 11AC; B02E;B02E;1101 1172 11AD;B02E;1101 1172 11AD; B02F;B02F;1101 1172 11AE;B02F;1101 1172 11AE; B030;B030;1101 1172 11AF;B030;1101 1172 11AF; B031;B031;1101 1172 11B0;B031;1101 1172 11B0; B032;B032;1101 1172 11B1;B032;1101 1172 11B1; B033;B033;1101 1172 11B2;B033;1101 1172 11B2; B034;B034;1101 1172 11B3;B034;1101 1172 11B3; B035;B035;1101 1172 11B4;B035;1101 1172 11B4; B036;B036;1101 1172 11B5;B036;1101 1172 11B5; B037;B037;1101 1172 11B6;B037;1101 1172 11B6; B038;B038;1101 1172 11B7;B038;1101 1172 11B7; B039;B039;1101 1172 11B8;B039;1101 1172 11B8; B03A;B03A;1101 1172 11B9;B03A;1101 1172 11B9; B03B;B03B;1101 1172 11BA;B03B;1101 1172 11BA; B03C;B03C;1101 1172 11BB;B03C;1101 1172 11BB; B03D;B03D;1101 1172 11BC;B03D;1101 1172 11BC; B03E;B03E;1101 1172 11BD;B03E;1101 1172 11BD; B03F;B03F;1101 1172 11BE;B03F;1101 1172 11BE; B040;B040;1101 1172 11BF;B040;1101 1172 11BF; B041;B041;1101 1172 11C0;B041;1101 1172 11C0; B042;B042;1101 1172 11C1;B042;1101 1172 11C1; B043;B043;1101 1172 11C2;B043;1101 1172 11C2; B044;B044;1101 1173;B044;1101 1173; B045;B045;1101 1173 11A8;B045;1101 1173 11A8; B046;B046;1101 1173 11A9;B046;1101 1173 11A9; B047;B047;1101 1173 11AA;B047;1101 1173 11AA; B048;B048;1101 1173 11AB;B048;1101 1173 11AB; B049;B049;1101 1173 11AC;B049;1101 1173 11AC; B04A;B04A;1101 1173 11AD;B04A;1101 1173 11AD; B04B;B04B;1101 1173 11AE;B04B;1101 1173 11AE; B04C;B04C;1101 1173 11AF;B04C;1101 1173 11AF; B04D;B04D;1101 1173 11B0;B04D;1101 1173 11B0; B04E;B04E;1101 1173 11B1;B04E;1101 1173 11B1; B04F;B04F;1101 1173 11B2;B04F;1101 1173 11B2; B050;B050;1101 1173 11B3;B050;1101 1173 11B3; B051;B051;1101 1173 11B4;B051;1101 1173 11B4; B052;B052;1101 1173 11B5;B052;1101 1173 11B5; B053;B053;1101 1173 11B6;B053;1101 1173 11B6; B054;B054;1101 1173 11B7;B054;1101 1173 11B7; B055;B055;1101 1173 11B8;B055;1101 1173 11B8; B056;B056;1101 1173 11B9;B056;1101 1173 11B9; B057;B057;1101 1173 11BA;B057;1101 1173 11BA; B058;B058;1101 1173 11BB;B058;1101 1173 11BB; B059;B059;1101 1173 11BC;B059;1101 1173 11BC; B05A;B05A;1101 1173 11BD;B05A;1101 1173 11BD; B05B;B05B;1101 1173 11BE;B05B;1101 1173 11BE; B05C;B05C;1101 1173 11BF;B05C;1101 1173 11BF; B05D;B05D;1101 1173 11C0;B05D;1101 1173 11C0; B05E;B05E;1101 1173 11C1;B05E;1101 1173 11C1; B05F;B05F;1101 1173 11C2;B05F;1101 1173 11C2; B060;B060;1101 1174;B060;1101 1174; B061;B061;1101 1174 11A8;B061;1101 1174 11A8; B062;B062;1101 1174 11A9;B062;1101 1174 11A9; B063;B063;1101 1174 11AA;B063;1101 1174 11AA; B064;B064;1101 1174 11AB;B064;1101 1174 11AB; B065;B065;1101 1174 11AC;B065;1101 1174 11AC; B066;B066;1101 1174 11AD;B066;1101 1174 11AD; B067;B067;1101 1174 11AE;B067;1101 1174 11AE; B068;B068;1101 1174 11AF;B068;1101 1174 11AF; B069;B069;1101 1174 11B0;B069;1101 1174 11B0; B06A;B06A;1101 1174 11B1;B06A;1101 1174 11B1; B06B;B06B;1101 1174 11B2;B06B;1101 1174 11B2; B06C;B06C;1101 1174 11B3;B06C;1101 1174 11B3; B06D;B06D;1101 1174 11B4;B06D;1101 1174 11B4; B06E;B06E;1101 1174 11B5;B06E;1101 1174 11B5; B06F;B06F;1101 1174 11B6;B06F;1101 1174 11B6; B070;B070;1101 1174 11B7;B070;1101 1174 11B7; B071;B071;1101 1174 11B8;B071;1101 1174 11B8; B072;B072;1101 1174 11B9;B072;1101 1174 11B9; B073;B073;1101 1174 11BA;B073;1101 1174 11BA; B074;B074;1101 1174 11BB;B074;1101 1174 11BB; B075;B075;1101 1174 11BC;B075;1101 1174 11BC; B076;B076;1101 1174 11BD;B076;1101 1174 11BD; B077;B077;1101 1174 11BE;B077;1101 1174 11BE; B078;B078;1101 1174 11BF;B078;1101 1174 11BF; B079;B079;1101 1174 11C0;B079;1101 1174 11C0; B07A;B07A;1101 1174 11C1;B07A;1101 1174 11C1; B07B;B07B;1101 1174 11C2;B07B;1101 1174 11C2; B07C;B07C;1101 1175;B07C;1101 1175; B07D;B07D;1101 1175 11A8;B07D;1101 1175 11A8; B07E;B07E;1101 1175 11A9;B07E;1101 1175 11A9; B07F;B07F;1101 1175 11AA;B07F;1101 1175 11AA; B080;B080;1101 1175 11AB;B080;1101 1175 11AB; B081;B081;1101 1175 11AC;B081;1101 1175 11AC; B082;B082;1101 1175 11AD;B082;1101 1175 11AD; B083;B083;1101 1175 11AE;B083;1101 1175 11AE; B084;B084;1101 1175 11AF;B084;1101 1175 11AF; B085;B085;1101 1175 11B0;B085;1101 1175 11B0; B086;B086;1101 1175 11B1;B086;1101 1175 11B1; B087;B087;1101 1175 11B2;B087;1101 1175 11B2; B088;B088;1101 1175 11B3;B088;1101 1175 11B3; B089;B089;1101 1175 11B4;B089;1101 1175 11B4; B08A;B08A;1101 1175 11B5;B08A;1101 1175 11B5; B08B;B08B;1101 1175 11B6;B08B;1101 1175 11B6; B08C;B08C;1101 1175 11B7;B08C;1101 1175 11B7; B08D;B08D;1101 1175 11B8;B08D;1101 1175 11B8; B08E;B08E;1101 1175 11B9;B08E;1101 1175 11B9; B08F;B08F;1101 1175 11BA;B08F;1101 1175 11BA; B090;B090;1101 1175 11BB;B090;1101 1175 11BB; B091;B091;1101 1175 11BC;B091;1101 1175 11BC; B092;B092;1101 1175 11BD;B092;1101 1175 11BD; B093;B093;1101 1175 11BE;B093;1101 1175 11BE; B094;B094;1101 1175 11BF;B094;1101 1175 11BF; B095;B095;1101 1175 11C0;B095;1101 1175 11C0; B096;B096;1101 1175 11C1;B096;1101 1175 11C1; B097;B097;1101 1175 11C2;B097;1101 1175 11C2; B098;B098;1102 1161;B098;1102 1161; B099;B099;1102 1161 11A8;B099;1102 1161 11A8; B09A;B09A;1102 1161 11A9;B09A;1102 1161 11A9; B09B;B09B;1102 1161 11AA;B09B;1102 1161 11AA; B09C;B09C;1102 1161 11AB;B09C;1102 1161 11AB; B09D;B09D;1102 1161 11AC;B09D;1102 1161 11AC; B09E;B09E;1102 1161 11AD;B09E;1102 1161 11AD; B09F;B09F;1102 1161 11AE;B09F;1102 1161 11AE; B0A0;B0A0;1102 1161 11AF;B0A0;1102 1161 11AF; B0A1;B0A1;1102 1161 11B0;B0A1;1102 1161 11B0; B0A2;B0A2;1102 1161 11B1;B0A2;1102 1161 11B1; B0A3;B0A3;1102 1161 11B2;B0A3;1102 1161 11B2; B0A4;B0A4;1102 1161 11B3;B0A4;1102 1161 11B3; B0A5;B0A5;1102 1161 11B4;B0A5;1102 1161 11B4; B0A6;B0A6;1102 1161 11B5;B0A6;1102 1161 11B5; B0A7;B0A7;1102 1161 11B6;B0A7;1102 1161 11B6; B0A8;B0A8;1102 1161 11B7;B0A8;1102 1161 11B7; B0A9;B0A9;1102 1161 11B8;B0A9;1102 1161 11B8; B0AA;B0AA;1102 1161 11B9;B0AA;1102 1161 11B9; B0AB;B0AB;1102 1161 11BA;B0AB;1102 1161 11BA; B0AC;B0AC;1102 1161 11BB;B0AC;1102 1161 11BB; B0AD;B0AD;1102 1161 11BC;B0AD;1102 1161 11BC; B0AE;B0AE;1102 1161 11BD;B0AE;1102 1161 11BD; B0AF;B0AF;1102 1161 11BE;B0AF;1102 1161 11BE; B0B0;B0B0;1102 1161 11BF;B0B0;1102 1161 11BF; B0B1;B0B1;1102 1161 11C0;B0B1;1102 1161 11C0; B0B2;B0B2;1102 1161 11C1;B0B2;1102 1161 11C1; B0B3;B0B3;1102 1161 11C2;B0B3;1102 1161 11C2; B0B4;B0B4;1102 1162;B0B4;1102 1162; B0B5;B0B5;1102 1162 11A8;B0B5;1102 1162 11A8; B0B6;B0B6;1102 1162 11A9;B0B6;1102 1162 11A9; B0B7;B0B7;1102 1162 11AA;B0B7;1102 1162 11AA; B0B8;B0B8;1102 1162 11AB;B0B8;1102 1162 11AB; B0B9;B0B9;1102 1162 11AC;B0B9;1102 1162 11AC; B0BA;B0BA;1102 1162 11AD;B0BA;1102 1162 11AD; B0BB;B0BB;1102 1162 11AE;B0BB;1102 1162 11AE; B0BC;B0BC;1102 1162 11AF;B0BC;1102 1162 11AF; B0BD;B0BD;1102 1162 11B0;B0BD;1102 1162 11B0; B0BE;B0BE;1102 1162 11B1;B0BE;1102 1162 11B1; B0BF;B0BF;1102 1162 11B2;B0BF;1102 1162 11B2; B0C0;B0C0;1102 1162 11B3;B0C0;1102 1162 11B3; B0C1;B0C1;1102 1162 11B4;B0C1;1102 1162 11B4; B0C2;B0C2;1102 1162 11B5;B0C2;1102 1162 11B5; B0C3;B0C3;1102 1162 11B6;B0C3;1102 1162 11B6; B0C4;B0C4;1102 1162 11B7;B0C4;1102 1162 11B7; B0C5;B0C5;1102 1162 11B8;B0C5;1102 1162 11B8; B0C6;B0C6;1102 1162 11B9;B0C6;1102 1162 11B9; B0C7;B0C7;1102 1162 11BA;B0C7;1102 1162 11BA; B0C8;B0C8;1102 1162 11BB;B0C8;1102 1162 11BB; B0C9;B0C9;1102 1162 11BC;B0C9;1102 1162 11BC; B0CA;B0CA;1102 1162 11BD;B0CA;1102 1162 11BD; B0CB;B0CB;1102 1162 11BE;B0CB;1102 1162 11BE; B0CC;B0CC;1102 1162 11BF;B0CC;1102 1162 11BF; B0CD;B0CD;1102 1162 11C0;B0CD;1102 1162 11C0; B0CE;B0CE;1102 1162 11C1;B0CE;1102 1162 11C1; B0CF;B0CF;1102 1162 11C2;B0CF;1102 1162 11C2; B0D0;B0D0;1102 1163;B0D0;1102 1163; B0D1;B0D1;1102 1163 11A8;B0D1;1102 1163 11A8; B0D2;B0D2;1102 1163 11A9;B0D2;1102 1163 11A9; B0D3;B0D3;1102 1163 11AA;B0D3;1102 1163 11AA; B0D4;B0D4;1102 1163 11AB;B0D4;1102 1163 11AB; B0D5;B0D5;1102 1163 11AC;B0D5;1102 1163 11AC; B0D6;B0D6;1102 1163 11AD;B0D6;1102 1163 11AD; B0D7;B0D7;1102 1163 11AE;B0D7;1102 1163 11AE; B0D8;B0D8;1102 1163 11AF;B0D8;1102 1163 11AF; B0D9;B0D9;1102 1163 11B0;B0D9;1102 1163 11B0; B0DA;B0DA;1102 1163 11B1;B0DA;1102 1163 11B1; B0DB;B0DB;1102 1163 11B2;B0DB;1102 1163 11B2; B0DC;B0DC;1102 1163 11B3;B0DC;1102 1163 11B3; B0DD;B0DD;1102 1163 11B4;B0DD;1102 1163 11B4; B0DE;B0DE;1102 1163 11B5;B0DE;1102 1163 11B5; B0DF;B0DF;1102 1163 11B6;B0DF;1102 1163 11B6; B0E0;B0E0;1102 1163 11B7;B0E0;1102 1163 11B7; B0E1;B0E1;1102 1163 11B8;B0E1;1102 1163 11B8; B0E2;B0E2;1102 1163 11B9;B0E2;1102 1163 11B9; B0E3;B0E3;1102 1163 11BA;B0E3;1102 1163 11BA; B0E4;B0E4;1102 1163 11BB;B0E4;1102 1163 11BB; B0E5;B0E5;1102 1163 11BC;B0E5;1102 1163 11BC; B0E6;B0E6;1102 1163 11BD;B0E6;1102 1163 11BD; B0E7;B0E7;1102 1163 11BE;B0E7;1102 1163 11BE; B0E8;B0E8;1102 1163 11BF;B0E8;1102 1163 11BF; B0E9;B0E9;1102 1163 11C0;B0E9;1102 1163 11C0; B0EA;B0EA;1102 1163 11C1;B0EA;1102 1163 11C1; B0EB;B0EB;1102 1163 11C2;B0EB;1102 1163 11C2; B0EC;B0EC;1102 1164;B0EC;1102 1164; B0ED;B0ED;1102 1164 11A8;B0ED;1102 1164 11A8; B0EE;B0EE;1102 1164 11A9;B0EE;1102 1164 11A9; B0EF;B0EF;1102 1164 11AA;B0EF;1102 1164 11AA; B0F0;B0F0;1102 1164 11AB;B0F0;1102 1164 11AB; B0F1;B0F1;1102 1164 11AC;B0F1;1102 1164 11AC; B0F2;B0F2;1102 1164 11AD;B0F2;1102 1164 11AD; B0F3;B0F3;1102 1164 11AE;B0F3;1102 1164 11AE; B0F4;B0F4;1102 1164 11AF;B0F4;1102 1164 11AF; B0F5;B0F5;1102 1164 11B0;B0F5;1102 1164 11B0; B0F6;B0F6;1102 1164 11B1;B0F6;1102 1164 11B1; B0F7;B0F7;1102 1164 11B2;B0F7;1102 1164 11B2; B0F8;B0F8;1102 1164 11B3;B0F8;1102 1164 11B3; B0F9;B0F9;1102 1164 11B4;B0F9;1102 1164 11B4; B0FA;B0FA;1102 1164 11B5;B0FA;1102 1164 11B5; B0FB;B0FB;1102 1164 11B6;B0FB;1102 1164 11B6; B0FC;B0FC;1102 1164 11B7;B0FC;1102 1164 11B7; B0FD;B0FD;1102 1164 11B8;B0FD;1102 1164 11B8; B0FE;B0FE;1102 1164 11B9;B0FE;1102 1164 11B9; B0FF;B0FF;1102 1164 11BA;B0FF;1102 1164 11BA; B100;B100;1102 1164 11BB;B100;1102 1164 11BB; B101;B101;1102 1164 11BC;B101;1102 1164 11BC; B102;B102;1102 1164 11BD;B102;1102 1164 11BD; B103;B103;1102 1164 11BE;B103;1102 1164 11BE; B104;B104;1102 1164 11BF;B104;1102 1164 11BF; B105;B105;1102 1164 11C0;B105;1102 1164 11C0; B106;B106;1102 1164 11C1;B106;1102 1164 11C1; B107;B107;1102 1164 11C2;B107;1102 1164 11C2; B108;B108;1102 1165;B108;1102 1165; B109;B109;1102 1165 11A8;B109;1102 1165 11A8; B10A;B10A;1102 1165 11A9;B10A;1102 1165 11A9; B10B;B10B;1102 1165 11AA;B10B;1102 1165 11AA; B10C;B10C;1102 1165 11AB;B10C;1102 1165 11AB; B10D;B10D;1102 1165 11AC;B10D;1102 1165 11AC; B10E;B10E;1102 1165 11AD;B10E;1102 1165 11AD; B10F;B10F;1102 1165 11AE;B10F;1102 1165 11AE; B110;B110;1102 1165 11AF;B110;1102 1165 11AF; B111;B111;1102 1165 11B0;B111;1102 1165 11B0; B112;B112;1102 1165 11B1;B112;1102 1165 11B1; B113;B113;1102 1165 11B2;B113;1102 1165 11B2; B114;B114;1102 1165 11B3;B114;1102 1165 11B3; B115;B115;1102 1165 11B4;B115;1102 1165 11B4; B116;B116;1102 1165 11B5;B116;1102 1165 11B5; B117;B117;1102 1165 11B6;B117;1102 1165 11B6; B118;B118;1102 1165 11B7;B118;1102 1165 11B7; B119;B119;1102 1165 11B8;B119;1102 1165 11B8; B11A;B11A;1102 1165 11B9;B11A;1102 1165 11B9; B11B;B11B;1102 1165 11BA;B11B;1102 1165 11BA; B11C;B11C;1102 1165 11BB;B11C;1102 1165 11BB; B11D;B11D;1102 1165 11BC;B11D;1102 1165 11BC; B11E;B11E;1102 1165 11BD;B11E;1102 1165 11BD; B11F;B11F;1102 1165 11BE;B11F;1102 1165 11BE; B120;B120;1102 1165 11BF;B120;1102 1165 11BF; B121;B121;1102 1165 11C0;B121;1102 1165 11C0; B122;B122;1102 1165 11C1;B122;1102 1165 11C1; B123;B123;1102 1165 11C2;B123;1102 1165 11C2; B124;B124;1102 1166;B124;1102 1166; B125;B125;1102 1166 11A8;B125;1102 1166 11A8; B126;B126;1102 1166 11A9;B126;1102 1166 11A9; B127;B127;1102 1166 11AA;B127;1102 1166 11AA; B128;B128;1102 1166 11AB;B128;1102 1166 11AB; B129;B129;1102 1166 11AC;B129;1102 1166 11AC; B12A;B12A;1102 1166 11AD;B12A;1102 1166 11AD; B12B;B12B;1102 1166 11AE;B12B;1102 1166 11AE; B12C;B12C;1102 1166 11AF;B12C;1102 1166 11AF; B12D;B12D;1102 1166 11B0;B12D;1102 1166 11B0; B12E;B12E;1102 1166 11B1;B12E;1102 1166 11B1; B12F;B12F;1102 1166 11B2;B12F;1102 1166 11B2; B130;B130;1102 1166 11B3;B130;1102 1166 11B3; B131;B131;1102 1166 11B4;B131;1102 1166 11B4; B132;B132;1102 1166 11B5;B132;1102 1166 11B5; B133;B133;1102 1166 11B6;B133;1102 1166 11B6; B134;B134;1102 1166 11B7;B134;1102 1166 11B7; B135;B135;1102 1166 11B8;B135;1102 1166 11B8; B136;B136;1102 1166 11B9;B136;1102 1166 11B9; B137;B137;1102 1166 11BA;B137;1102 1166 11BA; B138;B138;1102 1166 11BB;B138;1102 1166 11BB; B139;B139;1102 1166 11BC;B139;1102 1166 11BC; B13A;B13A;1102 1166 11BD;B13A;1102 1166 11BD; B13B;B13B;1102 1166 11BE;B13B;1102 1166 11BE; B13C;B13C;1102 1166 11BF;B13C;1102 1166 11BF; B13D;B13D;1102 1166 11C0;B13D;1102 1166 11C0; B13E;B13E;1102 1166 11C1;B13E;1102 1166 11C1; B13F;B13F;1102 1166 11C2;B13F;1102 1166 11C2; B140;B140;1102 1167;B140;1102 1167; B141;B141;1102 1167 11A8;B141;1102 1167 11A8; B142;B142;1102 1167 11A9;B142;1102 1167 11A9; B143;B143;1102 1167 11AA;B143;1102 1167 11AA; B144;B144;1102 1167 11AB;B144;1102 1167 11AB; B145;B145;1102 1167 11AC;B145;1102 1167 11AC; B146;B146;1102 1167 11AD;B146;1102 1167 11AD; B147;B147;1102 1167 11AE;B147;1102 1167 11AE; B148;B148;1102 1167 11AF;B148;1102 1167 11AF; B149;B149;1102 1167 11B0;B149;1102 1167 11B0; B14A;B14A;1102 1167 11B1;B14A;1102 1167 11B1; B14B;B14B;1102 1167 11B2;B14B;1102 1167 11B2; B14C;B14C;1102 1167 11B3;B14C;1102 1167 11B3; B14D;B14D;1102 1167 11B4;B14D;1102 1167 11B4; B14E;B14E;1102 1167 11B5;B14E;1102 1167 11B5; B14F;B14F;1102 1167 11B6;B14F;1102 1167 11B6; B150;B150;1102 1167 11B7;B150;1102 1167 11B7; B151;B151;1102 1167 11B8;B151;1102 1167 11B8; B152;B152;1102 1167 11B9;B152;1102 1167 11B9; B153;B153;1102 1167 11BA;B153;1102 1167 11BA; B154;B154;1102 1167 11BB;B154;1102 1167 11BB; B155;B155;1102 1167 11BC;B155;1102 1167 11BC; B156;B156;1102 1167 11BD;B156;1102 1167 11BD; B157;B157;1102 1167 11BE;B157;1102 1167 11BE; B158;B158;1102 1167 11BF;B158;1102 1167 11BF; B159;B159;1102 1167 11C0;B159;1102 1167 11C0; B15A;B15A;1102 1167 11C1;B15A;1102 1167 11C1; B15B;B15B;1102 1167 11C2;B15B;1102 1167 11C2; B15C;B15C;1102 1168;B15C;1102 1168; B15D;B15D;1102 1168 11A8;B15D;1102 1168 11A8; B15E;B15E;1102 1168 11A9;B15E;1102 1168 11A9; B15F;B15F;1102 1168 11AA;B15F;1102 1168 11AA; B160;B160;1102 1168 11AB;B160;1102 1168 11AB; B161;B161;1102 1168 11AC;B161;1102 1168 11AC; B162;B162;1102 1168 11AD;B162;1102 1168 11AD; B163;B163;1102 1168 11AE;B163;1102 1168 11AE; B164;B164;1102 1168 11AF;B164;1102 1168 11AF; B165;B165;1102 1168 11B0;B165;1102 1168 11B0; B166;B166;1102 1168 11B1;B166;1102 1168 11B1; B167;B167;1102 1168 11B2;B167;1102 1168 11B2; B168;B168;1102 1168 11B3;B168;1102 1168 11B3; B169;B169;1102 1168 11B4;B169;1102 1168 11B4; B16A;B16A;1102 1168 11B5;B16A;1102 1168 11B5; B16B;B16B;1102 1168 11B6;B16B;1102 1168 11B6; B16C;B16C;1102 1168 11B7;B16C;1102 1168 11B7; B16D;B16D;1102 1168 11B8;B16D;1102 1168 11B8; B16E;B16E;1102 1168 11B9;B16E;1102 1168 11B9; B16F;B16F;1102 1168 11BA;B16F;1102 1168 11BA; B170;B170;1102 1168 11BB;B170;1102 1168 11BB; B171;B171;1102 1168 11BC;B171;1102 1168 11BC; B172;B172;1102 1168 11BD;B172;1102 1168 11BD; B173;B173;1102 1168 11BE;B173;1102 1168 11BE; B174;B174;1102 1168 11BF;B174;1102 1168 11BF; B175;B175;1102 1168 11C0;B175;1102 1168 11C0; B176;B176;1102 1168 11C1;B176;1102 1168 11C1; B177;B177;1102 1168 11C2;B177;1102 1168 11C2; B178;B178;1102 1169;B178;1102 1169; B179;B179;1102 1169 11A8;B179;1102 1169 11A8; B17A;B17A;1102 1169 11A9;B17A;1102 1169 11A9; B17B;B17B;1102 1169 11AA;B17B;1102 1169 11AA; B17C;B17C;1102 1169 11AB;B17C;1102 1169 11AB; B17D;B17D;1102 1169 11AC;B17D;1102 1169 11AC; B17E;B17E;1102 1169 11AD;B17E;1102 1169 11AD; B17F;B17F;1102 1169 11AE;B17F;1102 1169 11AE; B180;B180;1102 1169 11AF;B180;1102 1169 11AF; B181;B181;1102 1169 11B0;B181;1102 1169 11B0; B182;B182;1102 1169 11B1;B182;1102 1169 11B1; B183;B183;1102 1169 11B2;B183;1102 1169 11B2; B184;B184;1102 1169 11B3;B184;1102 1169 11B3; B185;B185;1102 1169 11B4;B185;1102 1169 11B4; B186;B186;1102 1169 11B5;B186;1102 1169 11B5; B187;B187;1102 1169 11B6;B187;1102 1169 11B6; B188;B188;1102 1169 11B7;B188;1102 1169 11B7; B189;B189;1102 1169 11B8;B189;1102 1169 11B8; B18A;B18A;1102 1169 11B9;B18A;1102 1169 11B9; B18B;B18B;1102 1169 11BA;B18B;1102 1169 11BA; B18C;B18C;1102 1169 11BB;B18C;1102 1169 11BB; B18D;B18D;1102 1169 11BC;B18D;1102 1169 11BC; B18E;B18E;1102 1169 11BD;B18E;1102 1169 11BD; B18F;B18F;1102 1169 11BE;B18F;1102 1169 11BE; B190;B190;1102 1169 11BF;B190;1102 1169 11BF; B191;B191;1102 1169 11C0;B191;1102 1169 11C0; B192;B192;1102 1169 11C1;B192;1102 1169 11C1; B193;B193;1102 1169 11C2;B193;1102 1169 11C2; B194;B194;1102 116A;B194;1102 116A; B195;B195;1102 116A 11A8;B195;1102 116A 11A8; B196;B196;1102 116A 11A9;B196;1102 116A 11A9; B197;B197;1102 116A 11AA;B197;1102 116A 11AA; B198;B198;1102 116A 11AB;B198;1102 116A 11AB; B199;B199;1102 116A 11AC;B199;1102 116A 11AC; B19A;B19A;1102 116A 11AD;B19A;1102 116A 11AD; B19B;B19B;1102 116A 11AE;B19B;1102 116A 11AE; B19C;B19C;1102 116A 11AF;B19C;1102 116A 11AF; B19D;B19D;1102 116A 11B0;B19D;1102 116A 11B0; B19E;B19E;1102 116A 11B1;B19E;1102 116A 11B1; B19F;B19F;1102 116A 11B2;B19F;1102 116A 11B2; B1A0;B1A0;1102 116A 11B3;B1A0;1102 116A 11B3; B1A1;B1A1;1102 116A 11B4;B1A1;1102 116A 11B4; B1A2;B1A2;1102 116A 11B5;B1A2;1102 116A 11B5; B1A3;B1A3;1102 116A 11B6;B1A3;1102 116A 11B6; B1A4;B1A4;1102 116A 11B7;B1A4;1102 116A 11B7; B1A5;B1A5;1102 116A 11B8;B1A5;1102 116A 11B8; B1A6;B1A6;1102 116A 11B9;B1A6;1102 116A 11B9; B1A7;B1A7;1102 116A 11BA;B1A7;1102 116A 11BA; B1A8;B1A8;1102 116A 11BB;B1A8;1102 116A 11BB; B1A9;B1A9;1102 116A 11BC;B1A9;1102 116A 11BC; B1AA;B1AA;1102 116A 11BD;B1AA;1102 116A 11BD; B1AB;B1AB;1102 116A 11BE;B1AB;1102 116A 11BE; B1AC;B1AC;1102 116A 11BF;B1AC;1102 116A 11BF; B1AD;B1AD;1102 116A 11C0;B1AD;1102 116A 11C0; B1AE;B1AE;1102 116A 11C1;B1AE;1102 116A 11C1; B1AF;B1AF;1102 116A 11C2;B1AF;1102 116A 11C2; B1B0;B1B0;1102 116B;B1B0;1102 116B; B1B1;B1B1;1102 116B 11A8;B1B1;1102 116B 11A8; B1B2;B1B2;1102 116B 11A9;B1B2;1102 116B 11A9; B1B3;B1B3;1102 116B 11AA;B1B3;1102 116B 11AA; B1B4;B1B4;1102 116B 11AB;B1B4;1102 116B 11AB; B1B5;B1B5;1102 116B 11AC;B1B5;1102 116B 11AC; B1B6;B1B6;1102 116B 11AD;B1B6;1102 116B 11AD; B1B7;B1B7;1102 116B 11AE;B1B7;1102 116B 11AE; B1B8;B1B8;1102 116B 11AF;B1B8;1102 116B 11AF; B1B9;B1B9;1102 116B 11B0;B1B9;1102 116B 11B0; B1BA;B1BA;1102 116B 11B1;B1BA;1102 116B 11B1; B1BB;B1BB;1102 116B 11B2;B1BB;1102 116B 11B2; B1BC;B1BC;1102 116B 11B3;B1BC;1102 116B 11B3; B1BD;B1BD;1102 116B 11B4;B1BD;1102 116B 11B4; B1BE;B1BE;1102 116B 11B5;B1BE;1102 116B 11B5; B1BF;B1BF;1102 116B 11B6;B1BF;1102 116B 11B6; B1C0;B1C0;1102 116B 11B7;B1C0;1102 116B 11B7; B1C1;B1C1;1102 116B 11B8;B1C1;1102 116B 11B8; B1C2;B1C2;1102 116B 11B9;B1C2;1102 116B 11B9; B1C3;B1C3;1102 116B 11BA;B1C3;1102 116B 11BA; B1C4;B1C4;1102 116B 11BB;B1C4;1102 116B 11BB; B1C5;B1C5;1102 116B 11BC;B1C5;1102 116B 11BC; B1C6;B1C6;1102 116B 11BD;B1C6;1102 116B 11BD; B1C7;B1C7;1102 116B 11BE;B1C7;1102 116B 11BE; B1C8;B1C8;1102 116B 11BF;B1C8;1102 116B 11BF; B1C9;B1C9;1102 116B 11C0;B1C9;1102 116B 11C0; B1CA;B1CA;1102 116B 11C1;B1CA;1102 116B 11C1; B1CB;B1CB;1102 116B 11C2;B1CB;1102 116B 11C2; B1CC;B1CC;1102 116C;B1CC;1102 116C; B1CD;B1CD;1102 116C 11A8;B1CD;1102 116C 11A8; B1CE;B1CE;1102 116C 11A9;B1CE;1102 116C 11A9; B1CF;B1CF;1102 116C 11AA;B1CF;1102 116C 11AA; B1D0;B1D0;1102 116C 11AB;B1D0;1102 116C 11AB; B1D1;B1D1;1102 116C 11AC;B1D1;1102 116C 11AC; B1D2;B1D2;1102 116C 11AD;B1D2;1102 116C 11AD; B1D3;B1D3;1102 116C 11AE;B1D3;1102 116C 11AE; B1D4;B1D4;1102 116C 11AF;B1D4;1102 116C 11AF; B1D5;B1D5;1102 116C 11B0;B1D5;1102 116C 11B0; B1D6;B1D6;1102 116C 11B1;B1D6;1102 116C 11B1; B1D7;B1D7;1102 116C 11B2;B1D7;1102 116C 11B2; B1D8;B1D8;1102 116C 11B3;B1D8;1102 116C 11B3; B1D9;B1D9;1102 116C 11B4;B1D9;1102 116C 11B4; B1DA;B1DA;1102 116C 11B5;B1DA;1102 116C 11B5; B1DB;B1DB;1102 116C 11B6;B1DB;1102 116C 11B6; B1DC;B1DC;1102 116C 11B7;B1DC;1102 116C 11B7; B1DD;B1DD;1102 116C 11B8;B1DD;1102 116C 11B8; B1DE;B1DE;1102 116C 11B9;B1DE;1102 116C 11B9; B1DF;B1DF;1102 116C 11BA;B1DF;1102 116C 11BA; B1E0;B1E0;1102 116C 11BB;B1E0;1102 116C 11BB; B1E1;B1E1;1102 116C 11BC;B1E1;1102 116C 11BC; B1E2;B1E2;1102 116C 11BD;B1E2;1102 116C 11BD; B1E3;B1E3;1102 116C 11BE;B1E3;1102 116C 11BE; B1E4;B1E4;1102 116C 11BF;B1E4;1102 116C 11BF; B1E5;B1E5;1102 116C 11C0;B1E5;1102 116C 11C0; B1E6;B1E6;1102 116C 11C1;B1E6;1102 116C 11C1; B1E7;B1E7;1102 116C 11C2;B1E7;1102 116C 11C2; B1E8;B1E8;1102 116D;B1E8;1102 116D; B1E9;B1E9;1102 116D 11A8;B1E9;1102 116D 11A8; B1EA;B1EA;1102 116D 11A9;B1EA;1102 116D 11A9; B1EB;B1EB;1102 116D 11AA;B1EB;1102 116D 11AA; B1EC;B1EC;1102 116D 11AB;B1EC;1102 116D 11AB; B1ED;B1ED;1102 116D 11AC;B1ED;1102 116D 11AC; B1EE;B1EE;1102 116D 11AD;B1EE;1102 116D 11AD; B1EF;B1EF;1102 116D 11AE;B1EF;1102 116D 11AE; B1F0;B1F0;1102 116D 11AF;B1F0;1102 116D 11AF; B1F1;B1F1;1102 116D 11B0;B1F1;1102 116D 11B0; B1F2;B1F2;1102 116D 11B1;B1F2;1102 116D 11B1; B1F3;B1F3;1102 116D 11B2;B1F3;1102 116D 11B2; B1F4;B1F4;1102 116D 11B3;B1F4;1102 116D 11B3; B1F5;B1F5;1102 116D 11B4;B1F5;1102 116D 11B4; B1F6;B1F6;1102 116D 11B5;B1F6;1102 116D 11B5; B1F7;B1F7;1102 116D 11B6;B1F7;1102 116D 11B6; B1F8;B1F8;1102 116D 11B7;B1F8;1102 116D 11B7; B1F9;B1F9;1102 116D 11B8;B1F9;1102 116D 11B8; B1FA;B1FA;1102 116D 11B9;B1FA;1102 116D 11B9; B1FB;B1FB;1102 116D 11BA;B1FB;1102 116D 11BA; B1FC;B1FC;1102 116D 11BB;B1FC;1102 116D 11BB; B1FD;B1FD;1102 116D 11BC;B1FD;1102 116D 11BC; B1FE;B1FE;1102 116D 11BD;B1FE;1102 116D 11BD; B1FF;B1FF;1102 116D 11BE;B1FF;1102 116D 11BE; B200;B200;1102 116D 11BF;B200;1102 116D 11BF; B201;B201;1102 116D 11C0;B201;1102 116D 11C0; B202;B202;1102 116D 11C1;B202;1102 116D 11C1; B203;B203;1102 116D 11C2;B203;1102 116D 11C2; B204;B204;1102 116E;B204;1102 116E; B205;B205;1102 116E 11A8;B205;1102 116E 11A8; B206;B206;1102 116E 11A9;B206;1102 116E 11A9; B207;B207;1102 116E 11AA;B207;1102 116E 11AA; B208;B208;1102 116E 11AB;B208;1102 116E 11AB; B209;B209;1102 116E 11AC;B209;1102 116E 11AC; B20A;B20A;1102 116E 11AD;B20A;1102 116E 11AD; B20B;B20B;1102 116E 11AE;B20B;1102 116E 11AE; B20C;B20C;1102 116E 11AF;B20C;1102 116E 11AF; B20D;B20D;1102 116E 11B0;B20D;1102 116E 11B0; B20E;B20E;1102 116E 11B1;B20E;1102 116E 11B1; B20F;B20F;1102 116E 11B2;B20F;1102 116E 11B2; B210;B210;1102 116E 11B3;B210;1102 116E 11B3; B211;B211;1102 116E 11B4;B211;1102 116E 11B4; B212;B212;1102 116E 11B5;B212;1102 116E 11B5; B213;B213;1102 116E 11B6;B213;1102 116E 11B6; B214;B214;1102 116E 11B7;B214;1102 116E 11B7; B215;B215;1102 116E 11B8;B215;1102 116E 11B8; B216;B216;1102 116E 11B9;B216;1102 116E 11B9; B217;B217;1102 116E 11BA;B217;1102 116E 11BA; B218;B218;1102 116E 11BB;B218;1102 116E 11BB; B219;B219;1102 116E 11BC;B219;1102 116E 11BC; B21A;B21A;1102 116E 11BD;B21A;1102 116E 11BD; B21B;B21B;1102 116E 11BE;B21B;1102 116E 11BE; B21C;B21C;1102 116E 11BF;B21C;1102 116E 11BF; B21D;B21D;1102 116E 11C0;B21D;1102 116E 11C0; B21E;B21E;1102 116E 11C1;B21E;1102 116E 11C1; B21F;B21F;1102 116E 11C2;B21F;1102 116E 11C2; B220;B220;1102 116F;B220;1102 116F; B221;B221;1102 116F 11A8;B221;1102 116F 11A8; B222;B222;1102 116F 11A9;B222;1102 116F 11A9; B223;B223;1102 116F 11AA;B223;1102 116F 11AA; B224;B224;1102 116F 11AB;B224;1102 116F 11AB; B225;B225;1102 116F 11AC;B225;1102 116F 11AC; B226;B226;1102 116F 11AD;B226;1102 116F 11AD; B227;B227;1102 116F 11AE;B227;1102 116F 11AE; B228;B228;1102 116F 11AF;B228;1102 116F 11AF; B229;B229;1102 116F 11B0;B229;1102 116F 11B0; B22A;B22A;1102 116F 11B1;B22A;1102 116F 11B1; B22B;B22B;1102 116F 11B2;B22B;1102 116F 11B2; B22C;B22C;1102 116F 11B3;B22C;1102 116F 11B3; B22D;B22D;1102 116F 11B4;B22D;1102 116F 11B4; B22E;B22E;1102 116F 11B5;B22E;1102 116F 11B5; B22F;B22F;1102 116F 11B6;B22F;1102 116F 11B6; B230;B230;1102 116F 11B7;B230;1102 116F 11B7; B231;B231;1102 116F 11B8;B231;1102 116F 11B8; B232;B232;1102 116F 11B9;B232;1102 116F 11B9; B233;B233;1102 116F 11BA;B233;1102 116F 11BA; B234;B234;1102 116F 11BB;B234;1102 116F 11BB; B235;B235;1102 116F 11BC;B235;1102 116F 11BC; B236;B236;1102 116F 11BD;B236;1102 116F 11BD; B237;B237;1102 116F 11BE;B237;1102 116F 11BE; B238;B238;1102 116F 11BF;B238;1102 116F 11BF; B239;B239;1102 116F 11C0;B239;1102 116F 11C0; B23A;B23A;1102 116F 11C1;B23A;1102 116F 11C1; B23B;B23B;1102 116F 11C2;B23B;1102 116F 11C2; B23C;B23C;1102 1170;B23C;1102 1170; B23D;B23D;1102 1170 11A8;B23D;1102 1170 11A8; B23E;B23E;1102 1170 11A9;B23E;1102 1170 11A9; B23F;B23F;1102 1170 11AA;B23F;1102 1170 11AA; B240;B240;1102 1170 11AB;B240;1102 1170 11AB; B241;B241;1102 1170 11AC;B241;1102 1170 11AC; B242;B242;1102 1170 11AD;B242;1102 1170 11AD; B243;B243;1102 1170 11AE;B243;1102 1170 11AE; B244;B244;1102 1170 11AF;B244;1102 1170 11AF; B245;B245;1102 1170 11B0;B245;1102 1170 11B0; B246;B246;1102 1170 11B1;B246;1102 1170 11B1; B247;B247;1102 1170 11B2;B247;1102 1170 11B2; B248;B248;1102 1170 11B3;B248;1102 1170 11B3; B249;B249;1102 1170 11B4;B249;1102 1170 11B4; B24A;B24A;1102 1170 11B5;B24A;1102 1170 11B5; B24B;B24B;1102 1170 11B6;B24B;1102 1170 11B6; B24C;B24C;1102 1170 11B7;B24C;1102 1170 11B7; B24D;B24D;1102 1170 11B8;B24D;1102 1170 11B8; B24E;B24E;1102 1170 11B9;B24E;1102 1170 11B9; B24F;B24F;1102 1170 11BA;B24F;1102 1170 11BA; B250;B250;1102 1170 11BB;B250;1102 1170 11BB; B251;B251;1102 1170 11BC;B251;1102 1170 11BC; B252;B252;1102 1170 11BD;B252;1102 1170 11BD; B253;B253;1102 1170 11BE;B253;1102 1170 11BE; B254;B254;1102 1170 11BF;B254;1102 1170 11BF; B255;B255;1102 1170 11C0;B255;1102 1170 11C0; B256;B256;1102 1170 11C1;B256;1102 1170 11C1; B257;B257;1102 1170 11C2;B257;1102 1170 11C2; B258;B258;1102 1171;B258;1102 1171; B259;B259;1102 1171 11A8;B259;1102 1171 11A8; B25A;B25A;1102 1171 11A9;B25A;1102 1171 11A9; B25B;B25B;1102 1171 11AA;B25B;1102 1171 11AA; B25C;B25C;1102 1171 11AB;B25C;1102 1171 11AB; B25D;B25D;1102 1171 11AC;B25D;1102 1171 11AC; B25E;B25E;1102 1171 11AD;B25E;1102 1171 11AD; B25F;B25F;1102 1171 11AE;B25F;1102 1171 11AE; B260;B260;1102 1171 11AF;B260;1102 1171 11AF; B261;B261;1102 1171 11B0;B261;1102 1171 11B0; B262;B262;1102 1171 11B1;B262;1102 1171 11B1; B263;B263;1102 1171 11B2;B263;1102 1171 11B2; B264;B264;1102 1171 11B3;B264;1102 1171 11B3; B265;B265;1102 1171 11B4;B265;1102 1171 11B4; B266;B266;1102 1171 11B5;B266;1102 1171 11B5; B267;B267;1102 1171 11B6;B267;1102 1171 11B6; B268;B268;1102 1171 11B7;B268;1102 1171 11B7; B269;B269;1102 1171 11B8;B269;1102 1171 11B8; B26A;B26A;1102 1171 11B9;B26A;1102 1171 11B9; B26B;B26B;1102 1171 11BA;B26B;1102 1171 11BA; B26C;B26C;1102 1171 11BB;B26C;1102 1171 11BB; B26D;B26D;1102 1171 11BC;B26D;1102 1171 11BC; B26E;B26E;1102 1171 11BD;B26E;1102 1171 11BD; B26F;B26F;1102 1171 11BE;B26F;1102 1171 11BE; B270;B270;1102 1171 11BF;B270;1102 1171 11BF; B271;B271;1102 1171 11C0;B271;1102 1171 11C0; B272;B272;1102 1171 11C1;B272;1102 1171 11C1; B273;B273;1102 1171 11C2;B273;1102 1171 11C2; B274;B274;1102 1172;B274;1102 1172; B275;B275;1102 1172 11A8;B275;1102 1172 11A8; B276;B276;1102 1172 11A9;B276;1102 1172 11A9; B277;B277;1102 1172 11AA;B277;1102 1172 11AA; B278;B278;1102 1172 11AB;B278;1102 1172 11AB; B279;B279;1102 1172 11AC;B279;1102 1172 11AC; B27A;B27A;1102 1172 11AD;B27A;1102 1172 11AD; B27B;B27B;1102 1172 11AE;B27B;1102 1172 11AE; B27C;B27C;1102 1172 11AF;B27C;1102 1172 11AF; B27D;B27D;1102 1172 11B0;B27D;1102 1172 11B0; B27E;B27E;1102 1172 11B1;B27E;1102 1172 11B1; B27F;B27F;1102 1172 11B2;B27F;1102 1172 11B2; B280;B280;1102 1172 11B3;B280;1102 1172 11B3; B281;B281;1102 1172 11B4;B281;1102 1172 11B4; B282;B282;1102 1172 11B5;B282;1102 1172 11B5; B283;B283;1102 1172 11B6;B283;1102 1172 11B6; B284;B284;1102 1172 11B7;B284;1102 1172 11B7; B285;B285;1102 1172 11B8;B285;1102 1172 11B8; B286;B286;1102 1172 11B9;B286;1102 1172 11B9; B287;B287;1102 1172 11BA;B287;1102 1172 11BA; B288;B288;1102 1172 11BB;B288;1102 1172 11BB; B289;B289;1102 1172 11BC;B289;1102 1172 11BC; B28A;B28A;1102 1172 11BD;B28A;1102 1172 11BD; B28B;B28B;1102 1172 11BE;B28B;1102 1172 11BE; B28C;B28C;1102 1172 11BF;B28C;1102 1172 11BF; B28D;B28D;1102 1172 11C0;B28D;1102 1172 11C0; B28E;B28E;1102 1172 11C1;B28E;1102 1172 11C1; B28F;B28F;1102 1172 11C2;B28F;1102 1172 11C2; B290;B290;1102 1173;B290;1102 1173; B291;B291;1102 1173 11A8;B291;1102 1173 11A8; B292;B292;1102 1173 11A9;B292;1102 1173 11A9; B293;B293;1102 1173 11AA;B293;1102 1173 11AA; B294;B294;1102 1173 11AB;B294;1102 1173 11AB; B295;B295;1102 1173 11AC;B295;1102 1173 11AC; B296;B296;1102 1173 11AD;B296;1102 1173 11AD; B297;B297;1102 1173 11AE;B297;1102 1173 11AE; B298;B298;1102 1173 11AF;B298;1102 1173 11AF; B299;B299;1102 1173 11B0;B299;1102 1173 11B0; B29A;B29A;1102 1173 11B1;B29A;1102 1173 11B1; B29B;B29B;1102 1173 11B2;B29B;1102 1173 11B2; B29C;B29C;1102 1173 11B3;B29C;1102 1173 11B3; B29D;B29D;1102 1173 11B4;B29D;1102 1173 11B4; B29E;B29E;1102 1173 11B5;B29E;1102 1173 11B5; B29F;B29F;1102 1173 11B6;B29F;1102 1173 11B6; B2A0;B2A0;1102 1173 11B7;B2A0;1102 1173 11B7; B2A1;B2A1;1102 1173 11B8;B2A1;1102 1173 11B8; B2A2;B2A2;1102 1173 11B9;B2A2;1102 1173 11B9; B2A3;B2A3;1102 1173 11BA;B2A3;1102 1173 11BA; B2A4;B2A4;1102 1173 11BB;B2A4;1102 1173 11BB; B2A5;B2A5;1102 1173 11BC;B2A5;1102 1173 11BC; B2A6;B2A6;1102 1173 11BD;B2A6;1102 1173 11BD; B2A7;B2A7;1102 1173 11BE;B2A7;1102 1173 11BE; B2A8;B2A8;1102 1173 11BF;B2A8;1102 1173 11BF; B2A9;B2A9;1102 1173 11C0;B2A9;1102 1173 11C0; B2AA;B2AA;1102 1173 11C1;B2AA;1102 1173 11C1; B2AB;B2AB;1102 1173 11C2;B2AB;1102 1173 11C2; B2AC;B2AC;1102 1174;B2AC;1102 1174; B2AD;B2AD;1102 1174 11A8;B2AD;1102 1174 11A8; B2AE;B2AE;1102 1174 11A9;B2AE;1102 1174 11A9; B2AF;B2AF;1102 1174 11AA;B2AF;1102 1174 11AA; B2B0;B2B0;1102 1174 11AB;B2B0;1102 1174 11AB; B2B1;B2B1;1102 1174 11AC;B2B1;1102 1174 11AC; B2B2;B2B2;1102 1174 11AD;B2B2;1102 1174 11AD; B2B3;B2B3;1102 1174 11AE;B2B3;1102 1174 11AE; B2B4;B2B4;1102 1174 11AF;B2B4;1102 1174 11AF; B2B5;B2B5;1102 1174 11B0;B2B5;1102 1174 11B0; B2B6;B2B6;1102 1174 11B1;B2B6;1102 1174 11B1; B2B7;B2B7;1102 1174 11B2;B2B7;1102 1174 11B2; B2B8;B2B8;1102 1174 11B3;B2B8;1102 1174 11B3; B2B9;B2B9;1102 1174 11B4;B2B9;1102 1174 11B4; B2BA;B2BA;1102 1174 11B5;B2BA;1102 1174 11B5; B2BB;B2BB;1102 1174 11B6;B2BB;1102 1174 11B6; B2BC;B2BC;1102 1174 11B7;B2BC;1102 1174 11B7; B2BD;B2BD;1102 1174 11B8;B2BD;1102 1174 11B8; B2BE;B2BE;1102 1174 11B9;B2BE;1102 1174 11B9; B2BF;B2BF;1102 1174 11BA;B2BF;1102 1174 11BA; B2C0;B2C0;1102 1174 11BB;B2C0;1102 1174 11BB; B2C1;B2C1;1102 1174 11BC;B2C1;1102 1174 11BC; B2C2;B2C2;1102 1174 11BD;B2C2;1102 1174 11BD; B2C3;B2C3;1102 1174 11BE;B2C3;1102 1174 11BE; B2C4;B2C4;1102 1174 11BF;B2C4;1102 1174 11BF; B2C5;B2C5;1102 1174 11C0;B2C5;1102 1174 11C0; B2C6;B2C6;1102 1174 11C1;B2C6;1102 1174 11C1; B2C7;B2C7;1102 1174 11C2;B2C7;1102 1174 11C2; B2C8;B2C8;1102 1175;B2C8;1102 1175; B2C9;B2C9;1102 1175 11A8;B2C9;1102 1175 11A8; B2CA;B2CA;1102 1175 11A9;B2CA;1102 1175 11A9; B2CB;B2CB;1102 1175 11AA;B2CB;1102 1175 11AA; B2CC;B2CC;1102 1175 11AB;B2CC;1102 1175 11AB; B2CD;B2CD;1102 1175 11AC;B2CD;1102 1175 11AC; B2CE;B2CE;1102 1175 11AD;B2CE;1102 1175 11AD; B2CF;B2CF;1102 1175 11AE;B2CF;1102 1175 11AE; B2D0;B2D0;1102 1175 11AF;B2D0;1102 1175 11AF; B2D1;B2D1;1102 1175 11B0;B2D1;1102 1175 11B0; B2D2;B2D2;1102 1175 11B1;B2D2;1102 1175 11B1; B2D3;B2D3;1102 1175 11B2;B2D3;1102 1175 11B2; B2D4;B2D4;1102 1175 11B3;B2D4;1102 1175 11B3; B2D5;B2D5;1102 1175 11B4;B2D5;1102 1175 11B4; B2D6;B2D6;1102 1175 11B5;B2D6;1102 1175 11B5; B2D7;B2D7;1102 1175 11B6;B2D7;1102 1175 11B6; B2D8;B2D8;1102 1175 11B7;B2D8;1102 1175 11B7; B2D9;B2D9;1102 1175 11B8;B2D9;1102 1175 11B8; B2DA;B2DA;1102 1175 11B9;B2DA;1102 1175 11B9; B2DB;B2DB;1102 1175 11BA;B2DB;1102 1175 11BA; B2DC;B2DC;1102 1175 11BB;B2DC;1102 1175 11BB; B2DD;B2DD;1102 1175 11BC;B2DD;1102 1175 11BC; B2DE;B2DE;1102 1175 11BD;B2DE;1102 1175 11BD; B2DF;B2DF;1102 1175 11BE;B2DF;1102 1175 11BE; B2E0;B2E0;1102 1175 11BF;B2E0;1102 1175 11BF; B2E1;B2E1;1102 1175 11C0;B2E1;1102 1175 11C0; B2E2;B2E2;1102 1175 11C1;B2E2;1102 1175 11C1; B2E3;B2E3;1102 1175 11C2;B2E3;1102 1175 11C2; B2E4;B2E4;1103 1161;B2E4;1103 1161; B2E5;B2E5;1103 1161 11A8;B2E5;1103 1161 11A8; B2E6;B2E6;1103 1161 11A9;B2E6;1103 1161 11A9; B2E7;B2E7;1103 1161 11AA;B2E7;1103 1161 11AA; B2E8;B2E8;1103 1161 11AB;B2E8;1103 1161 11AB; B2E9;B2E9;1103 1161 11AC;B2E9;1103 1161 11AC; B2EA;B2EA;1103 1161 11AD;B2EA;1103 1161 11AD; B2EB;B2EB;1103 1161 11AE;B2EB;1103 1161 11AE; B2EC;B2EC;1103 1161 11AF;B2EC;1103 1161 11AF; B2ED;B2ED;1103 1161 11B0;B2ED;1103 1161 11B0; B2EE;B2EE;1103 1161 11B1;B2EE;1103 1161 11B1; B2EF;B2EF;1103 1161 11B2;B2EF;1103 1161 11B2; B2F0;B2F0;1103 1161 11B3;B2F0;1103 1161 11B3; B2F1;B2F1;1103 1161 11B4;B2F1;1103 1161 11B4; B2F2;B2F2;1103 1161 11B5;B2F2;1103 1161 11B5; B2F3;B2F3;1103 1161 11B6;B2F3;1103 1161 11B6; B2F4;B2F4;1103 1161 11B7;B2F4;1103 1161 11B7; B2F5;B2F5;1103 1161 11B8;B2F5;1103 1161 11B8; B2F6;B2F6;1103 1161 11B9;B2F6;1103 1161 11B9; B2F7;B2F7;1103 1161 11BA;B2F7;1103 1161 11BA; B2F8;B2F8;1103 1161 11BB;B2F8;1103 1161 11BB; B2F9;B2F9;1103 1161 11BC;B2F9;1103 1161 11BC; B2FA;B2FA;1103 1161 11BD;B2FA;1103 1161 11BD; B2FB;B2FB;1103 1161 11BE;B2FB;1103 1161 11BE; B2FC;B2FC;1103 1161 11BF;B2FC;1103 1161 11BF; B2FD;B2FD;1103 1161 11C0;B2FD;1103 1161 11C0; B2FE;B2FE;1103 1161 11C1;B2FE;1103 1161 11C1; B2FF;B2FF;1103 1161 11C2;B2FF;1103 1161 11C2; B300;B300;1103 1162;B300;1103 1162; B301;B301;1103 1162 11A8;B301;1103 1162 11A8; B302;B302;1103 1162 11A9;B302;1103 1162 11A9; B303;B303;1103 1162 11AA;B303;1103 1162 11AA; B304;B304;1103 1162 11AB;B304;1103 1162 11AB; B305;B305;1103 1162 11AC;B305;1103 1162 11AC; B306;B306;1103 1162 11AD;B306;1103 1162 11AD; B307;B307;1103 1162 11AE;B307;1103 1162 11AE; B308;B308;1103 1162 11AF;B308;1103 1162 11AF; B309;B309;1103 1162 11B0;B309;1103 1162 11B0; B30A;B30A;1103 1162 11B1;B30A;1103 1162 11B1; B30B;B30B;1103 1162 11B2;B30B;1103 1162 11B2; B30C;B30C;1103 1162 11B3;B30C;1103 1162 11B3; B30D;B30D;1103 1162 11B4;B30D;1103 1162 11B4; B30E;B30E;1103 1162 11B5;B30E;1103 1162 11B5; B30F;B30F;1103 1162 11B6;B30F;1103 1162 11B6; B310;B310;1103 1162 11B7;B310;1103 1162 11B7; B311;B311;1103 1162 11B8;B311;1103 1162 11B8; B312;B312;1103 1162 11B9;B312;1103 1162 11B9; B313;B313;1103 1162 11BA;B313;1103 1162 11BA; B314;B314;1103 1162 11BB;B314;1103 1162 11BB; B315;B315;1103 1162 11BC;B315;1103 1162 11BC; B316;B316;1103 1162 11BD;B316;1103 1162 11BD; B317;B317;1103 1162 11BE;B317;1103 1162 11BE; B318;B318;1103 1162 11BF;B318;1103 1162 11BF; B319;B319;1103 1162 11C0;B319;1103 1162 11C0; B31A;B31A;1103 1162 11C1;B31A;1103 1162 11C1; B31B;B31B;1103 1162 11C2;B31B;1103 1162 11C2; B31C;B31C;1103 1163;B31C;1103 1163; B31D;B31D;1103 1163 11A8;B31D;1103 1163 11A8; B31E;B31E;1103 1163 11A9;B31E;1103 1163 11A9; B31F;B31F;1103 1163 11AA;B31F;1103 1163 11AA; B320;B320;1103 1163 11AB;B320;1103 1163 11AB; B321;B321;1103 1163 11AC;B321;1103 1163 11AC; B322;B322;1103 1163 11AD;B322;1103 1163 11AD; B323;B323;1103 1163 11AE;B323;1103 1163 11AE; B324;B324;1103 1163 11AF;B324;1103 1163 11AF; B325;B325;1103 1163 11B0;B325;1103 1163 11B0; B326;B326;1103 1163 11B1;B326;1103 1163 11B1; B327;B327;1103 1163 11B2;B327;1103 1163 11B2; B328;B328;1103 1163 11B3;B328;1103 1163 11B3; B329;B329;1103 1163 11B4;B329;1103 1163 11B4; B32A;B32A;1103 1163 11B5;B32A;1103 1163 11B5; B32B;B32B;1103 1163 11B6;B32B;1103 1163 11B6; B32C;B32C;1103 1163 11B7;B32C;1103 1163 11B7; B32D;B32D;1103 1163 11B8;B32D;1103 1163 11B8; B32E;B32E;1103 1163 11B9;B32E;1103 1163 11B9; B32F;B32F;1103 1163 11BA;B32F;1103 1163 11BA; B330;B330;1103 1163 11BB;B330;1103 1163 11BB; B331;B331;1103 1163 11BC;B331;1103 1163 11BC; B332;B332;1103 1163 11BD;B332;1103 1163 11BD; B333;B333;1103 1163 11BE;B333;1103 1163 11BE; B334;B334;1103 1163 11BF;B334;1103 1163 11BF; B335;B335;1103 1163 11C0;B335;1103 1163 11C0; B336;B336;1103 1163 11C1;B336;1103 1163 11C1; B337;B337;1103 1163 11C2;B337;1103 1163 11C2; B338;B338;1103 1164;B338;1103 1164; B339;B339;1103 1164 11A8;B339;1103 1164 11A8; B33A;B33A;1103 1164 11A9;B33A;1103 1164 11A9; B33B;B33B;1103 1164 11AA;B33B;1103 1164 11AA; B33C;B33C;1103 1164 11AB;B33C;1103 1164 11AB; B33D;B33D;1103 1164 11AC;B33D;1103 1164 11AC; B33E;B33E;1103 1164 11AD;B33E;1103 1164 11AD; B33F;B33F;1103 1164 11AE;B33F;1103 1164 11AE; B340;B340;1103 1164 11AF;B340;1103 1164 11AF; B341;B341;1103 1164 11B0;B341;1103 1164 11B0; B342;B342;1103 1164 11B1;B342;1103 1164 11B1; B343;B343;1103 1164 11B2;B343;1103 1164 11B2; B344;B344;1103 1164 11B3;B344;1103 1164 11B3; B345;B345;1103 1164 11B4;B345;1103 1164 11B4; B346;B346;1103 1164 11B5;B346;1103 1164 11B5; B347;B347;1103 1164 11B6;B347;1103 1164 11B6; B348;B348;1103 1164 11B7;B348;1103 1164 11B7; B349;B349;1103 1164 11B8;B349;1103 1164 11B8; B34A;B34A;1103 1164 11B9;B34A;1103 1164 11B9; B34B;B34B;1103 1164 11BA;B34B;1103 1164 11BA; B34C;B34C;1103 1164 11BB;B34C;1103 1164 11BB; B34D;B34D;1103 1164 11BC;B34D;1103 1164 11BC; B34E;B34E;1103 1164 11BD;B34E;1103 1164 11BD; B34F;B34F;1103 1164 11BE;B34F;1103 1164 11BE; B350;B350;1103 1164 11BF;B350;1103 1164 11BF; B351;B351;1103 1164 11C0;B351;1103 1164 11C0; B352;B352;1103 1164 11C1;B352;1103 1164 11C1; B353;B353;1103 1164 11C2;B353;1103 1164 11C2; B354;B354;1103 1165;B354;1103 1165; B355;B355;1103 1165 11A8;B355;1103 1165 11A8; B356;B356;1103 1165 11A9;B356;1103 1165 11A9; B357;B357;1103 1165 11AA;B357;1103 1165 11AA; B358;B358;1103 1165 11AB;B358;1103 1165 11AB; B359;B359;1103 1165 11AC;B359;1103 1165 11AC; B35A;B35A;1103 1165 11AD;B35A;1103 1165 11AD; B35B;B35B;1103 1165 11AE;B35B;1103 1165 11AE; B35C;B35C;1103 1165 11AF;B35C;1103 1165 11AF; B35D;B35D;1103 1165 11B0;B35D;1103 1165 11B0; B35E;B35E;1103 1165 11B1;B35E;1103 1165 11B1; B35F;B35F;1103 1165 11B2;B35F;1103 1165 11B2; B360;B360;1103 1165 11B3;B360;1103 1165 11B3; B361;B361;1103 1165 11B4;B361;1103 1165 11B4; B362;B362;1103 1165 11B5;B362;1103 1165 11B5; B363;B363;1103 1165 11B6;B363;1103 1165 11B6; B364;B364;1103 1165 11B7;B364;1103 1165 11B7; B365;B365;1103 1165 11B8;B365;1103 1165 11B8; B366;B366;1103 1165 11B9;B366;1103 1165 11B9; B367;B367;1103 1165 11BA;B367;1103 1165 11BA; B368;B368;1103 1165 11BB;B368;1103 1165 11BB; B369;B369;1103 1165 11BC;B369;1103 1165 11BC; B36A;B36A;1103 1165 11BD;B36A;1103 1165 11BD; B36B;B36B;1103 1165 11BE;B36B;1103 1165 11BE; B36C;B36C;1103 1165 11BF;B36C;1103 1165 11BF; B36D;B36D;1103 1165 11C0;B36D;1103 1165 11C0; B36E;B36E;1103 1165 11C1;B36E;1103 1165 11C1; B36F;B36F;1103 1165 11C2;B36F;1103 1165 11C2; B370;B370;1103 1166;B370;1103 1166; B371;B371;1103 1166 11A8;B371;1103 1166 11A8; B372;B372;1103 1166 11A9;B372;1103 1166 11A9; B373;B373;1103 1166 11AA;B373;1103 1166 11AA; B374;B374;1103 1166 11AB;B374;1103 1166 11AB; B375;B375;1103 1166 11AC;B375;1103 1166 11AC; B376;B376;1103 1166 11AD;B376;1103 1166 11AD; B377;B377;1103 1166 11AE;B377;1103 1166 11AE; B378;B378;1103 1166 11AF;B378;1103 1166 11AF; B379;B379;1103 1166 11B0;B379;1103 1166 11B0; B37A;B37A;1103 1166 11B1;B37A;1103 1166 11B1; B37B;B37B;1103 1166 11B2;B37B;1103 1166 11B2; B37C;B37C;1103 1166 11B3;B37C;1103 1166 11B3; B37D;B37D;1103 1166 11B4;B37D;1103 1166 11B4; B37E;B37E;1103 1166 11B5;B37E;1103 1166 11B5; B37F;B37F;1103 1166 11B6;B37F;1103 1166 11B6; B380;B380;1103 1166 11B7;B380;1103 1166 11B7; B381;B381;1103 1166 11B8;B381;1103 1166 11B8; B382;B382;1103 1166 11B9;B382;1103 1166 11B9; B383;B383;1103 1166 11BA;B383;1103 1166 11BA; B384;B384;1103 1166 11BB;B384;1103 1166 11BB; B385;B385;1103 1166 11BC;B385;1103 1166 11BC; B386;B386;1103 1166 11BD;B386;1103 1166 11BD; B387;B387;1103 1166 11BE;B387;1103 1166 11BE; B388;B388;1103 1166 11BF;B388;1103 1166 11BF; B389;B389;1103 1166 11C0;B389;1103 1166 11C0; B38A;B38A;1103 1166 11C1;B38A;1103 1166 11C1; B38B;B38B;1103 1166 11C2;B38B;1103 1166 11C2; B38C;B38C;1103 1167;B38C;1103 1167; B38D;B38D;1103 1167 11A8;B38D;1103 1167 11A8; B38E;B38E;1103 1167 11A9;B38E;1103 1167 11A9; B38F;B38F;1103 1167 11AA;B38F;1103 1167 11AA; B390;B390;1103 1167 11AB;B390;1103 1167 11AB; B391;B391;1103 1167 11AC;B391;1103 1167 11AC; B392;B392;1103 1167 11AD;B392;1103 1167 11AD; B393;B393;1103 1167 11AE;B393;1103 1167 11AE; B394;B394;1103 1167 11AF;B394;1103 1167 11AF; B395;B395;1103 1167 11B0;B395;1103 1167 11B0; B396;B396;1103 1167 11B1;B396;1103 1167 11B1; B397;B397;1103 1167 11B2;B397;1103 1167 11B2; B398;B398;1103 1167 11B3;B398;1103 1167 11B3; B399;B399;1103 1167 11B4;B399;1103 1167 11B4; B39A;B39A;1103 1167 11B5;B39A;1103 1167 11B5; B39B;B39B;1103 1167 11B6;B39B;1103 1167 11B6; B39C;B39C;1103 1167 11B7;B39C;1103 1167 11B7; B39D;B39D;1103 1167 11B8;B39D;1103 1167 11B8; B39E;B39E;1103 1167 11B9;B39E;1103 1167 11B9; B39F;B39F;1103 1167 11BA;B39F;1103 1167 11BA; B3A0;B3A0;1103 1167 11BB;B3A0;1103 1167 11BB; B3A1;B3A1;1103 1167 11BC;B3A1;1103 1167 11BC; B3A2;B3A2;1103 1167 11BD;B3A2;1103 1167 11BD; B3A3;B3A3;1103 1167 11BE;B3A3;1103 1167 11BE; B3A4;B3A4;1103 1167 11BF;B3A4;1103 1167 11BF; B3A5;B3A5;1103 1167 11C0;B3A5;1103 1167 11C0; B3A6;B3A6;1103 1167 11C1;B3A6;1103 1167 11C1; B3A7;B3A7;1103 1167 11C2;B3A7;1103 1167 11C2; B3A8;B3A8;1103 1168;B3A8;1103 1168; B3A9;B3A9;1103 1168 11A8;B3A9;1103 1168 11A8; B3AA;B3AA;1103 1168 11A9;B3AA;1103 1168 11A9; B3AB;B3AB;1103 1168 11AA;B3AB;1103 1168 11AA; B3AC;B3AC;1103 1168 11AB;B3AC;1103 1168 11AB; B3AD;B3AD;1103 1168 11AC;B3AD;1103 1168 11AC; B3AE;B3AE;1103 1168 11AD;B3AE;1103 1168 11AD; B3AF;B3AF;1103 1168 11AE;B3AF;1103 1168 11AE; B3B0;B3B0;1103 1168 11AF;B3B0;1103 1168 11AF; B3B1;B3B1;1103 1168 11B0;B3B1;1103 1168 11B0; B3B2;B3B2;1103 1168 11B1;B3B2;1103 1168 11B1; B3B3;B3B3;1103 1168 11B2;B3B3;1103 1168 11B2; B3B4;B3B4;1103 1168 11B3;B3B4;1103 1168 11B3; B3B5;B3B5;1103 1168 11B4;B3B5;1103 1168 11B4; B3B6;B3B6;1103 1168 11B5;B3B6;1103 1168 11B5; B3B7;B3B7;1103 1168 11B6;B3B7;1103 1168 11B6; B3B8;B3B8;1103 1168 11B7;B3B8;1103 1168 11B7; B3B9;B3B9;1103 1168 11B8;B3B9;1103 1168 11B8; B3BA;B3BA;1103 1168 11B9;B3BA;1103 1168 11B9; B3BB;B3BB;1103 1168 11BA;B3BB;1103 1168 11BA; B3BC;B3BC;1103 1168 11BB;B3BC;1103 1168 11BB; B3BD;B3BD;1103 1168 11BC;B3BD;1103 1168 11BC; B3BE;B3BE;1103 1168 11BD;B3BE;1103 1168 11BD; B3BF;B3BF;1103 1168 11BE;B3BF;1103 1168 11BE; B3C0;B3C0;1103 1168 11BF;B3C0;1103 1168 11BF; B3C1;B3C1;1103 1168 11C0;B3C1;1103 1168 11C0; B3C2;B3C2;1103 1168 11C1;B3C2;1103 1168 11C1; B3C3;B3C3;1103 1168 11C2;B3C3;1103 1168 11C2; B3C4;B3C4;1103 1169;B3C4;1103 1169; B3C5;B3C5;1103 1169 11A8;B3C5;1103 1169 11A8; B3C6;B3C6;1103 1169 11A9;B3C6;1103 1169 11A9; B3C7;B3C7;1103 1169 11AA;B3C7;1103 1169 11AA; B3C8;B3C8;1103 1169 11AB;B3C8;1103 1169 11AB; B3C9;B3C9;1103 1169 11AC;B3C9;1103 1169 11AC; B3CA;B3CA;1103 1169 11AD;B3CA;1103 1169 11AD; B3CB;B3CB;1103 1169 11AE;B3CB;1103 1169 11AE; B3CC;B3CC;1103 1169 11AF;B3CC;1103 1169 11AF; B3CD;B3CD;1103 1169 11B0;B3CD;1103 1169 11B0; B3CE;B3CE;1103 1169 11B1;B3CE;1103 1169 11B1; B3CF;B3CF;1103 1169 11B2;B3CF;1103 1169 11B2; B3D0;B3D0;1103 1169 11B3;B3D0;1103 1169 11B3; B3D1;B3D1;1103 1169 11B4;B3D1;1103 1169 11B4; B3D2;B3D2;1103 1169 11B5;B3D2;1103 1169 11B5; B3D3;B3D3;1103 1169 11B6;B3D3;1103 1169 11B6; B3D4;B3D4;1103 1169 11B7;B3D4;1103 1169 11B7; B3D5;B3D5;1103 1169 11B8;B3D5;1103 1169 11B8; B3D6;B3D6;1103 1169 11B9;B3D6;1103 1169 11B9; B3D7;B3D7;1103 1169 11BA;B3D7;1103 1169 11BA; B3D8;B3D8;1103 1169 11BB;B3D8;1103 1169 11BB; B3D9;B3D9;1103 1169 11BC;B3D9;1103 1169 11BC; B3DA;B3DA;1103 1169 11BD;B3DA;1103 1169 11BD; B3DB;B3DB;1103 1169 11BE;B3DB;1103 1169 11BE; B3DC;B3DC;1103 1169 11BF;B3DC;1103 1169 11BF; B3DD;B3DD;1103 1169 11C0;B3DD;1103 1169 11C0; B3DE;B3DE;1103 1169 11C1;B3DE;1103 1169 11C1; B3DF;B3DF;1103 1169 11C2;B3DF;1103 1169 11C2; B3E0;B3E0;1103 116A;B3E0;1103 116A; B3E1;B3E1;1103 116A 11A8;B3E1;1103 116A 11A8; B3E2;B3E2;1103 116A 11A9;B3E2;1103 116A 11A9; B3E3;B3E3;1103 116A 11AA;B3E3;1103 116A 11AA; B3E4;B3E4;1103 116A 11AB;B3E4;1103 116A 11AB; B3E5;B3E5;1103 116A 11AC;B3E5;1103 116A 11AC; B3E6;B3E6;1103 116A 11AD;B3E6;1103 116A 11AD; B3E7;B3E7;1103 116A 11AE;B3E7;1103 116A 11AE; B3E8;B3E8;1103 116A 11AF;B3E8;1103 116A 11AF; B3E9;B3E9;1103 116A 11B0;B3E9;1103 116A 11B0; B3EA;B3EA;1103 116A 11B1;B3EA;1103 116A 11B1; B3EB;B3EB;1103 116A 11B2;B3EB;1103 116A 11B2; B3EC;B3EC;1103 116A 11B3;B3EC;1103 116A 11B3; B3ED;B3ED;1103 116A 11B4;B3ED;1103 116A 11B4; B3EE;B3EE;1103 116A 11B5;B3EE;1103 116A 11B5; B3EF;B3EF;1103 116A 11B6;B3EF;1103 116A 11B6; B3F0;B3F0;1103 116A 11B7;B3F0;1103 116A 11B7; B3F1;B3F1;1103 116A 11B8;B3F1;1103 116A 11B8; B3F2;B3F2;1103 116A 11B9;B3F2;1103 116A 11B9; B3F3;B3F3;1103 116A 11BA;B3F3;1103 116A 11BA; B3F4;B3F4;1103 116A 11BB;B3F4;1103 116A 11BB; B3F5;B3F5;1103 116A 11BC;B3F5;1103 116A 11BC; B3F6;B3F6;1103 116A 11BD;B3F6;1103 116A 11BD; B3F7;B3F7;1103 116A 11BE;B3F7;1103 116A 11BE; B3F8;B3F8;1103 116A 11BF;B3F8;1103 116A 11BF; B3F9;B3F9;1103 116A 11C0;B3F9;1103 116A 11C0; B3FA;B3FA;1103 116A 11C1;B3FA;1103 116A 11C1; B3FB;B3FB;1103 116A 11C2;B3FB;1103 116A 11C2; B3FC;B3FC;1103 116B;B3FC;1103 116B; B3FD;B3FD;1103 116B 11A8;B3FD;1103 116B 11A8; B3FE;B3FE;1103 116B 11A9;B3FE;1103 116B 11A9; B3FF;B3FF;1103 116B 11AA;B3FF;1103 116B 11AA; B400;B400;1103 116B 11AB;B400;1103 116B 11AB; B401;B401;1103 116B 11AC;B401;1103 116B 11AC; B402;B402;1103 116B 11AD;B402;1103 116B 11AD; B403;B403;1103 116B 11AE;B403;1103 116B 11AE; B404;B404;1103 116B 11AF;B404;1103 116B 11AF; B405;B405;1103 116B 11B0;B405;1103 116B 11B0; B406;B406;1103 116B 11B1;B406;1103 116B 11B1; B407;B407;1103 116B 11B2;B407;1103 116B 11B2; B408;B408;1103 116B 11B3;B408;1103 116B 11B3; B409;B409;1103 116B 11B4;B409;1103 116B 11B4; B40A;B40A;1103 116B 11B5;B40A;1103 116B 11B5; B40B;B40B;1103 116B 11B6;B40B;1103 116B 11B6; B40C;B40C;1103 116B 11B7;B40C;1103 116B 11B7; B40D;B40D;1103 116B 11B8;B40D;1103 116B 11B8; B40E;B40E;1103 116B 11B9;B40E;1103 116B 11B9; B40F;B40F;1103 116B 11BA;B40F;1103 116B 11BA; B410;B410;1103 116B 11BB;B410;1103 116B 11BB; B411;B411;1103 116B 11BC;B411;1103 116B 11BC; B412;B412;1103 116B 11BD;B412;1103 116B 11BD; B413;B413;1103 116B 11BE;B413;1103 116B 11BE; B414;B414;1103 116B 11BF;B414;1103 116B 11BF; B415;B415;1103 116B 11C0;B415;1103 116B 11C0; B416;B416;1103 116B 11C1;B416;1103 116B 11C1; B417;B417;1103 116B 11C2;B417;1103 116B 11C2; B418;B418;1103 116C;B418;1103 116C; B419;B419;1103 116C 11A8;B419;1103 116C 11A8; B41A;B41A;1103 116C 11A9;B41A;1103 116C 11A9; B41B;B41B;1103 116C 11AA;B41B;1103 116C 11AA; B41C;B41C;1103 116C 11AB;B41C;1103 116C 11AB; B41D;B41D;1103 116C 11AC;B41D;1103 116C 11AC; B41E;B41E;1103 116C 11AD;B41E;1103 116C 11AD; B41F;B41F;1103 116C 11AE;B41F;1103 116C 11AE; B420;B420;1103 116C 11AF;B420;1103 116C 11AF; B421;B421;1103 116C 11B0;B421;1103 116C 11B0; B422;B422;1103 116C 11B1;B422;1103 116C 11B1; B423;B423;1103 116C 11B2;B423;1103 116C 11B2; B424;B424;1103 116C 11B3;B424;1103 116C 11B3; B425;B425;1103 116C 11B4;B425;1103 116C 11B4; B426;B426;1103 116C 11B5;B426;1103 116C 11B5; B427;B427;1103 116C 11B6;B427;1103 116C 11B6; B428;B428;1103 116C 11B7;B428;1103 116C 11B7; B429;B429;1103 116C 11B8;B429;1103 116C 11B8; B42A;B42A;1103 116C 11B9;B42A;1103 116C 11B9; B42B;B42B;1103 116C 11BA;B42B;1103 116C 11BA; B42C;B42C;1103 116C 11BB;B42C;1103 116C 11BB; B42D;B42D;1103 116C 11BC;B42D;1103 116C 11BC; B42E;B42E;1103 116C 11BD;B42E;1103 116C 11BD; B42F;B42F;1103 116C 11BE;B42F;1103 116C 11BE; B430;B430;1103 116C 11BF;B430;1103 116C 11BF; B431;B431;1103 116C 11C0;B431;1103 116C 11C0; B432;B432;1103 116C 11C1;B432;1103 116C 11C1; B433;B433;1103 116C 11C2;B433;1103 116C 11C2; B434;B434;1103 116D;B434;1103 116D; B435;B435;1103 116D 11A8;B435;1103 116D 11A8; B436;B436;1103 116D 11A9;B436;1103 116D 11A9; B437;B437;1103 116D 11AA;B437;1103 116D 11AA; B438;B438;1103 116D 11AB;B438;1103 116D 11AB; B439;B439;1103 116D 11AC;B439;1103 116D 11AC; B43A;B43A;1103 116D 11AD;B43A;1103 116D 11AD; B43B;B43B;1103 116D 11AE;B43B;1103 116D 11AE; B43C;B43C;1103 116D 11AF;B43C;1103 116D 11AF; B43D;B43D;1103 116D 11B0;B43D;1103 116D 11B0; B43E;B43E;1103 116D 11B1;B43E;1103 116D 11B1; B43F;B43F;1103 116D 11B2;B43F;1103 116D 11B2; B440;B440;1103 116D 11B3;B440;1103 116D 11B3; B441;B441;1103 116D 11B4;B441;1103 116D 11B4; B442;B442;1103 116D 11B5;B442;1103 116D 11B5; B443;B443;1103 116D 11B6;B443;1103 116D 11B6; B444;B444;1103 116D 11B7;B444;1103 116D 11B7; B445;B445;1103 116D 11B8;B445;1103 116D 11B8; B446;B446;1103 116D 11B9;B446;1103 116D 11B9; B447;B447;1103 116D 11BA;B447;1103 116D 11BA; B448;B448;1103 116D 11BB;B448;1103 116D 11BB; B449;B449;1103 116D 11BC;B449;1103 116D 11BC; B44A;B44A;1103 116D 11BD;B44A;1103 116D 11BD; B44B;B44B;1103 116D 11BE;B44B;1103 116D 11BE; B44C;B44C;1103 116D 11BF;B44C;1103 116D 11BF; B44D;B44D;1103 116D 11C0;B44D;1103 116D 11C0; B44E;B44E;1103 116D 11C1;B44E;1103 116D 11C1; B44F;B44F;1103 116D 11C2;B44F;1103 116D 11C2; B450;B450;1103 116E;B450;1103 116E; B451;B451;1103 116E 11A8;B451;1103 116E 11A8; B452;B452;1103 116E 11A9;B452;1103 116E 11A9; B453;B453;1103 116E 11AA;B453;1103 116E 11AA; B454;B454;1103 116E 11AB;B454;1103 116E 11AB; B455;B455;1103 116E 11AC;B455;1103 116E 11AC; B456;B456;1103 116E 11AD;B456;1103 116E 11AD; B457;B457;1103 116E 11AE;B457;1103 116E 11AE; B458;B458;1103 116E 11AF;B458;1103 116E 11AF; B459;B459;1103 116E 11B0;B459;1103 116E 11B0; B45A;B45A;1103 116E 11B1;B45A;1103 116E 11B1; B45B;B45B;1103 116E 11B2;B45B;1103 116E 11B2; B45C;B45C;1103 116E 11B3;B45C;1103 116E 11B3; B45D;B45D;1103 116E 11B4;B45D;1103 116E 11B4; B45E;B45E;1103 116E 11B5;B45E;1103 116E 11B5; B45F;B45F;1103 116E 11B6;B45F;1103 116E 11B6; B460;B460;1103 116E 11B7;B460;1103 116E 11B7; B461;B461;1103 116E 11B8;B461;1103 116E 11B8; B462;B462;1103 116E 11B9;B462;1103 116E 11B9; B463;B463;1103 116E 11BA;B463;1103 116E 11BA; B464;B464;1103 116E 11BB;B464;1103 116E 11BB; B465;B465;1103 116E 11BC;B465;1103 116E 11BC; B466;B466;1103 116E 11BD;B466;1103 116E 11BD; B467;B467;1103 116E 11BE;B467;1103 116E 11BE; B468;B468;1103 116E 11BF;B468;1103 116E 11BF; B469;B469;1103 116E 11C0;B469;1103 116E 11C0; B46A;B46A;1103 116E 11C1;B46A;1103 116E 11C1; B46B;B46B;1103 116E 11C2;B46B;1103 116E 11C2; B46C;B46C;1103 116F;B46C;1103 116F; B46D;B46D;1103 116F 11A8;B46D;1103 116F 11A8; B46E;B46E;1103 116F 11A9;B46E;1103 116F 11A9; B46F;B46F;1103 116F 11AA;B46F;1103 116F 11AA; B470;B470;1103 116F 11AB;B470;1103 116F 11AB; B471;B471;1103 116F 11AC;B471;1103 116F 11AC; B472;B472;1103 116F 11AD;B472;1103 116F 11AD; B473;B473;1103 116F 11AE;B473;1103 116F 11AE; B474;B474;1103 116F 11AF;B474;1103 116F 11AF; B475;B475;1103 116F 11B0;B475;1103 116F 11B0; B476;B476;1103 116F 11B1;B476;1103 116F 11B1; B477;B477;1103 116F 11B2;B477;1103 116F 11B2; B478;B478;1103 116F 11B3;B478;1103 116F 11B3; B479;B479;1103 116F 11B4;B479;1103 116F 11B4; B47A;B47A;1103 116F 11B5;B47A;1103 116F 11B5; B47B;B47B;1103 116F 11B6;B47B;1103 116F 11B6; B47C;B47C;1103 116F 11B7;B47C;1103 116F 11B7; B47D;B47D;1103 116F 11B8;B47D;1103 116F 11B8; B47E;B47E;1103 116F 11B9;B47E;1103 116F 11B9; B47F;B47F;1103 116F 11BA;B47F;1103 116F 11BA; B480;B480;1103 116F 11BB;B480;1103 116F 11BB; B481;B481;1103 116F 11BC;B481;1103 116F 11BC; B482;B482;1103 116F 11BD;B482;1103 116F 11BD; B483;B483;1103 116F 11BE;B483;1103 116F 11BE; B484;B484;1103 116F 11BF;B484;1103 116F 11BF; B485;B485;1103 116F 11C0;B485;1103 116F 11C0; B486;B486;1103 116F 11C1;B486;1103 116F 11C1; B487;B487;1103 116F 11C2;B487;1103 116F 11C2; B488;B488;1103 1170;B488;1103 1170; B489;B489;1103 1170 11A8;B489;1103 1170 11A8; B48A;B48A;1103 1170 11A9;B48A;1103 1170 11A9; B48B;B48B;1103 1170 11AA;B48B;1103 1170 11AA; B48C;B48C;1103 1170 11AB;B48C;1103 1170 11AB; B48D;B48D;1103 1170 11AC;B48D;1103 1170 11AC; B48E;B48E;1103 1170 11AD;B48E;1103 1170 11AD; B48F;B48F;1103 1170 11AE;B48F;1103 1170 11AE; B490;B490;1103 1170 11AF;B490;1103 1170 11AF; B491;B491;1103 1170 11B0;B491;1103 1170 11B0; B492;B492;1103 1170 11B1;B492;1103 1170 11B1; B493;B493;1103 1170 11B2;B493;1103 1170 11B2; B494;B494;1103 1170 11B3;B494;1103 1170 11B3; B495;B495;1103 1170 11B4;B495;1103 1170 11B4; B496;B496;1103 1170 11B5;B496;1103 1170 11B5; B497;B497;1103 1170 11B6;B497;1103 1170 11B6; B498;B498;1103 1170 11B7;B498;1103 1170 11B7; B499;B499;1103 1170 11B8;B499;1103 1170 11B8; B49A;B49A;1103 1170 11B9;B49A;1103 1170 11B9; B49B;B49B;1103 1170 11BA;B49B;1103 1170 11BA; B49C;B49C;1103 1170 11BB;B49C;1103 1170 11BB; B49D;B49D;1103 1170 11BC;B49D;1103 1170 11BC; B49E;B49E;1103 1170 11BD;B49E;1103 1170 11BD; B49F;B49F;1103 1170 11BE;B49F;1103 1170 11BE; B4A0;B4A0;1103 1170 11BF;B4A0;1103 1170 11BF; B4A1;B4A1;1103 1170 11C0;B4A1;1103 1170 11C0; B4A2;B4A2;1103 1170 11C1;B4A2;1103 1170 11C1; B4A3;B4A3;1103 1170 11C2;B4A3;1103 1170 11C2; B4A4;B4A4;1103 1171;B4A4;1103 1171; B4A5;B4A5;1103 1171 11A8;B4A5;1103 1171 11A8; B4A6;B4A6;1103 1171 11A9;B4A6;1103 1171 11A9; B4A7;B4A7;1103 1171 11AA;B4A7;1103 1171 11AA; B4A8;B4A8;1103 1171 11AB;B4A8;1103 1171 11AB; B4A9;B4A9;1103 1171 11AC;B4A9;1103 1171 11AC; B4AA;B4AA;1103 1171 11AD;B4AA;1103 1171 11AD; B4AB;B4AB;1103 1171 11AE;B4AB;1103 1171 11AE; B4AC;B4AC;1103 1171 11AF;B4AC;1103 1171 11AF; B4AD;B4AD;1103 1171 11B0;B4AD;1103 1171 11B0; B4AE;B4AE;1103 1171 11B1;B4AE;1103 1171 11B1; B4AF;B4AF;1103 1171 11B2;B4AF;1103 1171 11B2; B4B0;B4B0;1103 1171 11B3;B4B0;1103 1171 11B3; B4B1;B4B1;1103 1171 11B4;B4B1;1103 1171 11B4; B4B2;B4B2;1103 1171 11B5;B4B2;1103 1171 11B5; B4B3;B4B3;1103 1171 11B6;B4B3;1103 1171 11B6; B4B4;B4B4;1103 1171 11B7;B4B4;1103 1171 11B7; B4B5;B4B5;1103 1171 11B8;B4B5;1103 1171 11B8; B4B6;B4B6;1103 1171 11B9;B4B6;1103 1171 11B9; B4B7;B4B7;1103 1171 11BA;B4B7;1103 1171 11BA; B4B8;B4B8;1103 1171 11BB;B4B8;1103 1171 11BB; B4B9;B4B9;1103 1171 11BC;B4B9;1103 1171 11BC; B4BA;B4BA;1103 1171 11BD;B4BA;1103 1171 11BD; B4BB;B4BB;1103 1171 11BE;B4BB;1103 1171 11BE; B4BC;B4BC;1103 1171 11BF;B4BC;1103 1171 11BF; B4BD;B4BD;1103 1171 11C0;B4BD;1103 1171 11C0; B4BE;B4BE;1103 1171 11C1;B4BE;1103 1171 11C1; B4BF;B4BF;1103 1171 11C2;B4BF;1103 1171 11C2; B4C0;B4C0;1103 1172;B4C0;1103 1172; B4C1;B4C1;1103 1172 11A8;B4C1;1103 1172 11A8; B4C2;B4C2;1103 1172 11A9;B4C2;1103 1172 11A9; B4C3;B4C3;1103 1172 11AA;B4C3;1103 1172 11AA; B4C4;B4C4;1103 1172 11AB;B4C4;1103 1172 11AB; B4C5;B4C5;1103 1172 11AC;B4C5;1103 1172 11AC; B4C6;B4C6;1103 1172 11AD;B4C6;1103 1172 11AD; B4C7;B4C7;1103 1172 11AE;B4C7;1103 1172 11AE; B4C8;B4C8;1103 1172 11AF;B4C8;1103 1172 11AF; B4C9;B4C9;1103 1172 11B0;B4C9;1103 1172 11B0; B4CA;B4CA;1103 1172 11B1;B4CA;1103 1172 11B1; B4CB;B4CB;1103 1172 11B2;B4CB;1103 1172 11B2; B4CC;B4CC;1103 1172 11B3;B4CC;1103 1172 11B3; B4CD;B4CD;1103 1172 11B4;B4CD;1103 1172 11B4; B4CE;B4CE;1103 1172 11B5;B4CE;1103 1172 11B5; B4CF;B4CF;1103 1172 11B6;B4CF;1103 1172 11B6; B4D0;B4D0;1103 1172 11B7;B4D0;1103 1172 11B7; B4D1;B4D1;1103 1172 11B8;B4D1;1103 1172 11B8; B4D2;B4D2;1103 1172 11B9;B4D2;1103 1172 11B9; B4D3;B4D3;1103 1172 11BA;B4D3;1103 1172 11BA; B4D4;B4D4;1103 1172 11BB;B4D4;1103 1172 11BB; B4D5;B4D5;1103 1172 11BC;B4D5;1103 1172 11BC; B4D6;B4D6;1103 1172 11BD;B4D6;1103 1172 11BD; B4D7;B4D7;1103 1172 11BE;B4D7;1103 1172 11BE; B4D8;B4D8;1103 1172 11BF;B4D8;1103 1172 11BF; B4D9;B4D9;1103 1172 11C0;B4D9;1103 1172 11C0; B4DA;B4DA;1103 1172 11C1;B4DA;1103 1172 11C1; B4DB;B4DB;1103 1172 11C2;B4DB;1103 1172 11C2; B4DC;B4DC;1103 1173;B4DC;1103 1173; B4DD;B4DD;1103 1173 11A8;B4DD;1103 1173 11A8; B4DE;B4DE;1103 1173 11A9;B4DE;1103 1173 11A9; B4DF;B4DF;1103 1173 11AA;B4DF;1103 1173 11AA; B4E0;B4E0;1103 1173 11AB;B4E0;1103 1173 11AB; B4E1;B4E1;1103 1173 11AC;B4E1;1103 1173 11AC; B4E2;B4E2;1103 1173 11AD;B4E2;1103 1173 11AD; B4E3;B4E3;1103 1173 11AE;B4E3;1103 1173 11AE; B4E4;B4E4;1103 1173 11AF;B4E4;1103 1173 11AF; B4E5;B4E5;1103 1173 11B0;B4E5;1103 1173 11B0; B4E6;B4E6;1103 1173 11B1;B4E6;1103 1173 11B1; B4E7;B4E7;1103 1173 11B2;B4E7;1103 1173 11B2; B4E8;B4E8;1103 1173 11B3;B4E8;1103 1173 11B3; B4E9;B4E9;1103 1173 11B4;B4E9;1103 1173 11B4; B4EA;B4EA;1103 1173 11B5;B4EA;1103 1173 11B5; B4EB;B4EB;1103 1173 11B6;B4EB;1103 1173 11B6; B4EC;B4EC;1103 1173 11B7;B4EC;1103 1173 11B7; B4ED;B4ED;1103 1173 11B8;B4ED;1103 1173 11B8; B4EE;B4EE;1103 1173 11B9;B4EE;1103 1173 11B9; B4EF;B4EF;1103 1173 11BA;B4EF;1103 1173 11BA; B4F0;B4F0;1103 1173 11BB;B4F0;1103 1173 11BB; B4F1;B4F1;1103 1173 11BC;B4F1;1103 1173 11BC; B4F2;B4F2;1103 1173 11BD;B4F2;1103 1173 11BD; B4F3;B4F3;1103 1173 11BE;B4F3;1103 1173 11BE; B4F4;B4F4;1103 1173 11BF;B4F4;1103 1173 11BF; B4F5;B4F5;1103 1173 11C0;B4F5;1103 1173 11C0; B4F6;B4F6;1103 1173 11C1;B4F6;1103 1173 11C1; B4F7;B4F7;1103 1173 11C2;B4F7;1103 1173 11C2; B4F8;B4F8;1103 1174;B4F8;1103 1174; B4F9;B4F9;1103 1174 11A8;B4F9;1103 1174 11A8; B4FA;B4FA;1103 1174 11A9;B4FA;1103 1174 11A9; B4FB;B4FB;1103 1174 11AA;B4FB;1103 1174 11AA; B4FC;B4FC;1103 1174 11AB;B4FC;1103 1174 11AB; B4FD;B4FD;1103 1174 11AC;B4FD;1103 1174 11AC; B4FE;B4FE;1103 1174 11AD;B4FE;1103 1174 11AD; B4FF;B4FF;1103 1174 11AE;B4FF;1103 1174 11AE; B500;B500;1103 1174 11AF;B500;1103 1174 11AF; B501;B501;1103 1174 11B0;B501;1103 1174 11B0; B502;B502;1103 1174 11B1;B502;1103 1174 11B1; B503;B503;1103 1174 11B2;B503;1103 1174 11B2; B504;B504;1103 1174 11B3;B504;1103 1174 11B3; B505;B505;1103 1174 11B4;B505;1103 1174 11B4; B506;B506;1103 1174 11B5;B506;1103 1174 11B5; B507;B507;1103 1174 11B6;B507;1103 1174 11B6; B508;B508;1103 1174 11B7;B508;1103 1174 11B7; B509;B509;1103 1174 11B8;B509;1103 1174 11B8; B50A;B50A;1103 1174 11B9;B50A;1103 1174 11B9; B50B;B50B;1103 1174 11BA;B50B;1103 1174 11BA; B50C;B50C;1103 1174 11BB;B50C;1103 1174 11BB; B50D;B50D;1103 1174 11BC;B50D;1103 1174 11BC; B50E;B50E;1103 1174 11BD;B50E;1103 1174 11BD; B50F;B50F;1103 1174 11BE;B50F;1103 1174 11BE; B510;B510;1103 1174 11BF;B510;1103 1174 11BF; B511;B511;1103 1174 11C0;B511;1103 1174 11C0; B512;B512;1103 1174 11C1;B512;1103 1174 11C1; B513;B513;1103 1174 11C2;B513;1103 1174 11C2; B514;B514;1103 1175;B514;1103 1175; B515;B515;1103 1175 11A8;B515;1103 1175 11A8; B516;B516;1103 1175 11A9;B516;1103 1175 11A9; B517;B517;1103 1175 11AA;B517;1103 1175 11AA; B518;B518;1103 1175 11AB;B518;1103 1175 11AB; B519;B519;1103 1175 11AC;B519;1103 1175 11AC; B51A;B51A;1103 1175 11AD;B51A;1103 1175 11AD; B51B;B51B;1103 1175 11AE;B51B;1103 1175 11AE; B51C;B51C;1103 1175 11AF;B51C;1103 1175 11AF; B51D;B51D;1103 1175 11B0;B51D;1103 1175 11B0; B51E;B51E;1103 1175 11B1;B51E;1103 1175 11B1; B51F;B51F;1103 1175 11B2;B51F;1103 1175 11B2; B520;B520;1103 1175 11B3;B520;1103 1175 11B3; B521;B521;1103 1175 11B4;B521;1103 1175 11B4; B522;B522;1103 1175 11B5;B522;1103 1175 11B5; B523;B523;1103 1175 11B6;B523;1103 1175 11B6; B524;B524;1103 1175 11B7;B524;1103 1175 11B7; B525;B525;1103 1175 11B8;B525;1103 1175 11B8; B526;B526;1103 1175 11B9;B526;1103 1175 11B9; B527;B527;1103 1175 11BA;B527;1103 1175 11BA; B528;B528;1103 1175 11BB;B528;1103 1175 11BB; B529;B529;1103 1175 11BC;B529;1103 1175 11BC; B52A;B52A;1103 1175 11BD;B52A;1103 1175 11BD; B52B;B52B;1103 1175 11BE;B52B;1103 1175 11BE; B52C;B52C;1103 1175 11BF;B52C;1103 1175 11BF; B52D;B52D;1103 1175 11C0;B52D;1103 1175 11C0; B52E;B52E;1103 1175 11C1;B52E;1103 1175 11C1; B52F;B52F;1103 1175 11C2;B52F;1103 1175 11C2; B530;B530;1104 1161;B530;1104 1161; B531;B531;1104 1161 11A8;B531;1104 1161 11A8; B532;B532;1104 1161 11A9;B532;1104 1161 11A9; B533;B533;1104 1161 11AA;B533;1104 1161 11AA; B534;B534;1104 1161 11AB;B534;1104 1161 11AB; B535;B535;1104 1161 11AC;B535;1104 1161 11AC; B536;B536;1104 1161 11AD;B536;1104 1161 11AD; B537;B537;1104 1161 11AE;B537;1104 1161 11AE; B538;B538;1104 1161 11AF;B538;1104 1161 11AF; B539;B539;1104 1161 11B0;B539;1104 1161 11B0; B53A;B53A;1104 1161 11B1;B53A;1104 1161 11B1; B53B;B53B;1104 1161 11B2;B53B;1104 1161 11B2; B53C;B53C;1104 1161 11B3;B53C;1104 1161 11B3; B53D;B53D;1104 1161 11B4;B53D;1104 1161 11B4; B53E;B53E;1104 1161 11B5;B53E;1104 1161 11B5; B53F;B53F;1104 1161 11B6;B53F;1104 1161 11B6; B540;B540;1104 1161 11B7;B540;1104 1161 11B7; B541;B541;1104 1161 11B8;B541;1104 1161 11B8; B542;B542;1104 1161 11B9;B542;1104 1161 11B9; B543;B543;1104 1161 11BA;B543;1104 1161 11BA; B544;B544;1104 1161 11BB;B544;1104 1161 11BB; B545;B545;1104 1161 11BC;B545;1104 1161 11BC; B546;B546;1104 1161 11BD;B546;1104 1161 11BD; B547;B547;1104 1161 11BE;B547;1104 1161 11BE; B548;B548;1104 1161 11BF;B548;1104 1161 11BF; B549;B549;1104 1161 11C0;B549;1104 1161 11C0; B54A;B54A;1104 1161 11C1;B54A;1104 1161 11C1; B54B;B54B;1104 1161 11C2;B54B;1104 1161 11C2; B54C;B54C;1104 1162;B54C;1104 1162; B54D;B54D;1104 1162 11A8;B54D;1104 1162 11A8; B54E;B54E;1104 1162 11A9;B54E;1104 1162 11A9; B54F;B54F;1104 1162 11AA;B54F;1104 1162 11AA; B550;B550;1104 1162 11AB;B550;1104 1162 11AB; B551;B551;1104 1162 11AC;B551;1104 1162 11AC; B552;B552;1104 1162 11AD;B552;1104 1162 11AD; B553;B553;1104 1162 11AE;B553;1104 1162 11AE; B554;B554;1104 1162 11AF;B554;1104 1162 11AF; B555;B555;1104 1162 11B0;B555;1104 1162 11B0; B556;B556;1104 1162 11B1;B556;1104 1162 11B1; B557;B557;1104 1162 11B2;B557;1104 1162 11B2; B558;B558;1104 1162 11B3;B558;1104 1162 11B3; B559;B559;1104 1162 11B4;B559;1104 1162 11B4; B55A;B55A;1104 1162 11B5;B55A;1104 1162 11B5; B55B;B55B;1104 1162 11B6;B55B;1104 1162 11B6; B55C;B55C;1104 1162 11B7;B55C;1104 1162 11B7; B55D;B55D;1104 1162 11B8;B55D;1104 1162 11B8; B55E;B55E;1104 1162 11B9;B55E;1104 1162 11B9; B55F;B55F;1104 1162 11BA;B55F;1104 1162 11BA; B560;B560;1104 1162 11BB;B560;1104 1162 11BB; B561;B561;1104 1162 11BC;B561;1104 1162 11BC; B562;B562;1104 1162 11BD;B562;1104 1162 11BD; B563;B563;1104 1162 11BE;B563;1104 1162 11BE; B564;B564;1104 1162 11BF;B564;1104 1162 11BF; B565;B565;1104 1162 11C0;B565;1104 1162 11C0; B566;B566;1104 1162 11C1;B566;1104 1162 11C1; B567;B567;1104 1162 11C2;B567;1104 1162 11C2; B568;B568;1104 1163;B568;1104 1163; B569;B569;1104 1163 11A8;B569;1104 1163 11A8; B56A;B56A;1104 1163 11A9;B56A;1104 1163 11A9; B56B;B56B;1104 1163 11AA;B56B;1104 1163 11AA; B56C;B56C;1104 1163 11AB;B56C;1104 1163 11AB; B56D;B56D;1104 1163 11AC;B56D;1104 1163 11AC; B56E;B56E;1104 1163 11AD;B56E;1104 1163 11AD; B56F;B56F;1104 1163 11AE;B56F;1104 1163 11AE; B570;B570;1104 1163 11AF;B570;1104 1163 11AF; B571;B571;1104 1163 11B0;B571;1104 1163 11B0; B572;B572;1104 1163 11B1;B572;1104 1163 11B1; B573;B573;1104 1163 11B2;B573;1104 1163 11B2; B574;B574;1104 1163 11B3;B574;1104 1163 11B3; B575;B575;1104 1163 11B4;B575;1104 1163 11B4; B576;B576;1104 1163 11B5;B576;1104 1163 11B5; B577;B577;1104 1163 11B6;B577;1104 1163 11B6; B578;B578;1104 1163 11B7;B578;1104 1163 11B7; B579;B579;1104 1163 11B8;B579;1104 1163 11B8; B57A;B57A;1104 1163 11B9;B57A;1104 1163 11B9; B57B;B57B;1104 1163 11BA;B57B;1104 1163 11BA; B57C;B57C;1104 1163 11BB;B57C;1104 1163 11BB; B57D;B57D;1104 1163 11BC;B57D;1104 1163 11BC; B57E;B57E;1104 1163 11BD;B57E;1104 1163 11BD; B57F;B57F;1104 1163 11BE;B57F;1104 1163 11BE; B580;B580;1104 1163 11BF;B580;1104 1163 11BF; B581;B581;1104 1163 11C0;B581;1104 1163 11C0; B582;B582;1104 1163 11C1;B582;1104 1163 11C1; B583;B583;1104 1163 11C2;B583;1104 1163 11C2; B584;B584;1104 1164;B584;1104 1164; B585;B585;1104 1164 11A8;B585;1104 1164 11A8; B586;B586;1104 1164 11A9;B586;1104 1164 11A9; B587;B587;1104 1164 11AA;B587;1104 1164 11AA; B588;B588;1104 1164 11AB;B588;1104 1164 11AB; B589;B589;1104 1164 11AC;B589;1104 1164 11AC; B58A;B58A;1104 1164 11AD;B58A;1104 1164 11AD; B58B;B58B;1104 1164 11AE;B58B;1104 1164 11AE; B58C;B58C;1104 1164 11AF;B58C;1104 1164 11AF; B58D;B58D;1104 1164 11B0;B58D;1104 1164 11B0; B58E;B58E;1104 1164 11B1;B58E;1104 1164 11B1; B58F;B58F;1104 1164 11B2;B58F;1104 1164 11B2; B590;B590;1104 1164 11B3;B590;1104 1164 11B3; B591;B591;1104 1164 11B4;B591;1104 1164 11B4; B592;B592;1104 1164 11B5;B592;1104 1164 11B5; B593;B593;1104 1164 11B6;B593;1104 1164 11B6; B594;B594;1104 1164 11B7;B594;1104 1164 11B7; B595;B595;1104 1164 11B8;B595;1104 1164 11B8; B596;B596;1104 1164 11B9;B596;1104 1164 11B9; B597;B597;1104 1164 11BA;B597;1104 1164 11BA; B598;B598;1104 1164 11BB;B598;1104 1164 11BB; B599;B599;1104 1164 11BC;B599;1104 1164 11BC; B59A;B59A;1104 1164 11BD;B59A;1104 1164 11BD; B59B;B59B;1104 1164 11BE;B59B;1104 1164 11BE; B59C;B59C;1104 1164 11BF;B59C;1104 1164 11BF; B59D;B59D;1104 1164 11C0;B59D;1104 1164 11C0; B59E;B59E;1104 1164 11C1;B59E;1104 1164 11C1; B59F;B59F;1104 1164 11C2;B59F;1104 1164 11C2; B5A0;B5A0;1104 1165;B5A0;1104 1165; B5A1;B5A1;1104 1165 11A8;B5A1;1104 1165 11A8; B5A2;B5A2;1104 1165 11A9;B5A2;1104 1165 11A9; B5A3;B5A3;1104 1165 11AA;B5A3;1104 1165 11AA; B5A4;B5A4;1104 1165 11AB;B5A4;1104 1165 11AB; B5A5;B5A5;1104 1165 11AC;B5A5;1104 1165 11AC; B5A6;B5A6;1104 1165 11AD;B5A6;1104 1165 11AD; B5A7;B5A7;1104 1165 11AE;B5A7;1104 1165 11AE; B5A8;B5A8;1104 1165 11AF;B5A8;1104 1165 11AF; B5A9;B5A9;1104 1165 11B0;B5A9;1104 1165 11B0; B5AA;B5AA;1104 1165 11B1;B5AA;1104 1165 11B1; B5AB;B5AB;1104 1165 11B2;B5AB;1104 1165 11B2; B5AC;B5AC;1104 1165 11B3;B5AC;1104 1165 11B3; B5AD;B5AD;1104 1165 11B4;B5AD;1104 1165 11B4; B5AE;B5AE;1104 1165 11B5;B5AE;1104 1165 11B5; B5AF;B5AF;1104 1165 11B6;B5AF;1104 1165 11B6; B5B0;B5B0;1104 1165 11B7;B5B0;1104 1165 11B7; B5B1;B5B1;1104 1165 11B8;B5B1;1104 1165 11B8; B5B2;B5B2;1104 1165 11B9;B5B2;1104 1165 11B9; B5B3;B5B3;1104 1165 11BA;B5B3;1104 1165 11BA; B5B4;B5B4;1104 1165 11BB;B5B4;1104 1165 11BB; B5B5;B5B5;1104 1165 11BC;B5B5;1104 1165 11BC; B5B6;B5B6;1104 1165 11BD;B5B6;1104 1165 11BD; B5B7;B5B7;1104 1165 11BE;B5B7;1104 1165 11BE; B5B8;B5B8;1104 1165 11BF;B5B8;1104 1165 11BF; B5B9;B5B9;1104 1165 11C0;B5B9;1104 1165 11C0; B5BA;B5BA;1104 1165 11C1;B5BA;1104 1165 11C1; B5BB;B5BB;1104 1165 11C2;B5BB;1104 1165 11C2; B5BC;B5BC;1104 1166;B5BC;1104 1166; B5BD;B5BD;1104 1166 11A8;B5BD;1104 1166 11A8; B5BE;B5BE;1104 1166 11A9;B5BE;1104 1166 11A9; B5BF;B5BF;1104 1166 11AA;B5BF;1104 1166 11AA; B5C0;B5C0;1104 1166 11AB;B5C0;1104 1166 11AB; B5C1;B5C1;1104 1166 11AC;B5C1;1104 1166 11AC; B5C2;B5C2;1104 1166 11AD;B5C2;1104 1166 11AD; B5C3;B5C3;1104 1166 11AE;B5C3;1104 1166 11AE; B5C4;B5C4;1104 1166 11AF;B5C4;1104 1166 11AF; B5C5;B5C5;1104 1166 11B0;B5C5;1104 1166 11B0; B5C6;B5C6;1104 1166 11B1;B5C6;1104 1166 11B1; B5C7;B5C7;1104 1166 11B2;B5C7;1104 1166 11B2; B5C8;B5C8;1104 1166 11B3;B5C8;1104 1166 11B3; B5C9;B5C9;1104 1166 11B4;B5C9;1104 1166 11B4; B5CA;B5CA;1104 1166 11B5;B5CA;1104 1166 11B5; B5CB;B5CB;1104 1166 11B6;B5CB;1104 1166 11B6; B5CC;B5CC;1104 1166 11B7;B5CC;1104 1166 11B7; B5CD;B5CD;1104 1166 11B8;B5CD;1104 1166 11B8; B5CE;B5CE;1104 1166 11B9;B5CE;1104 1166 11B9; B5CF;B5CF;1104 1166 11BA;B5CF;1104 1166 11BA; B5D0;B5D0;1104 1166 11BB;B5D0;1104 1166 11BB; B5D1;B5D1;1104 1166 11BC;B5D1;1104 1166 11BC; B5D2;B5D2;1104 1166 11BD;B5D2;1104 1166 11BD; B5D3;B5D3;1104 1166 11BE;B5D3;1104 1166 11BE; B5D4;B5D4;1104 1166 11BF;B5D4;1104 1166 11BF; B5D5;B5D5;1104 1166 11C0;B5D5;1104 1166 11C0; B5D6;B5D6;1104 1166 11C1;B5D6;1104 1166 11C1; B5D7;B5D7;1104 1166 11C2;B5D7;1104 1166 11C2; B5D8;B5D8;1104 1167;B5D8;1104 1167; B5D9;B5D9;1104 1167 11A8;B5D9;1104 1167 11A8; B5DA;B5DA;1104 1167 11A9;B5DA;1104 1167 11A9; B5DB;B5DB;1104 1167 11AA;B5DB;1104 1167 11AA; B5DC;B5DC;1104 1167 11AB;B5DC;1104 1167 11AB; B5DD;B5DD;1104 1167 11AC;B5DD;1104 1167 11AC; B5DE;B5DE;1104 1167 11AD;B5DE;1104 1167 11AD; B5DF;B5DF;1104 1167 11AE;B5DF;1104 1167 11AE; B5E0;B5E0;1104 1167 11AF;B5E0;1104 1167 11AF; B5E1;B5E1;1104 1167 11B0;B5E1;1104 1167 11B0; B5E2;B5E2;1104 1167 11B1;B5E2;1104 1167 11B1; B5E3;B5E3;1104 1167 11B2;B5E3;1104 1167 11B2; B5E4;B5E4;1104 1167 11B3;B5E4;1104 1167 11B3; B5E5;B5E5;1104 1167 11B4;B5E5;1104 1167 11B4; B5E6;B5E6;1104 1167 11B5;B5E6;1104 1167 11B5; B5E7;B5E7;1104 1167 11B6;B5E7;1104 1167 11B6; B5E8;B5E8;1104 1167 11B7;B5E8;1104 1167 11B7; B5E9;B5E9;1104 1167 11B8;B5E9;1104 1167 11B8; B5EA;B5EA;1104 1167 11B9;B5EA;1104 1167 11B9; B5EB;B5EB;1104 1167 11BA;B5EB;1104 1167 11BA; B5EC;B5EC;1104 1167 11BB;B5EC;1104 1167 11BB; B5ED;B5ED;1104 1167 11BC;B5ED;1104 1167 11BC; B5EE;B5EE;1104 1167 11BD;B5EE;1104 1167 11BD; B5EF;B5EF;1104 1167 11BE;B5EF;1104 1167 11BE; B5F0;B5F0;1104 1167 11BF;B5F0;1104 1167 11BF; B5F1;B5F1;1104 1167 11C0;B5F1;1104 1167 11C0; B5F2;B5F2;1104 1167 11C1;B5F2;1104 1167 11C1; B5F3;B5F3;1104 1167 11C2;B5F3;1104 1167 11C2; B5F4;B5F4;1104 1168;B5F4;1104 1168; B5F5;B5F5;1104 1168 11A8;B5F5;1104 1168 11A8; B5F6;B5F6;1104 1168 11A9;B5F6;1104 1168 11A9; B5F7;B5F7;1104 1168 11AA;B5F7;1104 1168 11AA; B5F8;B5F8;1104 1168 11AB;B5F8;1104 1168 11AB; B5F9;B5F9;1104 1168 11AC;B5F9;1104 1168 11AC; B5FA;B5FA;1104 1168 11AD;B5FA;1104 1168 11AD; B5FB;B5FB;1104 1168 11AE;B5FB;1104 1168 11AE; B5FC;B5FC;1104 1168 11AF;B5FC;1104 1168 11AF; B5FD;B5FD;1104 1168 11B0;B5FD;1104 1168 11B0; B5FE;B5FE;1104 1168 11B1;B5FE;1104 1168 11B1; B5FF;B5FF;1104 1168 11B2;B5FF;1104 1168 11B2; B600;B600;1104 1168 11B3;B600;1104 1168 11B3; B601;B601;1104 1168 11B4;B601;1104 1168 11B4; B602;B602;1104 1168 11B5;B602;1104 1168 11B5; B603;B603;1104 1168 11B6;B603;1104 1168 11B6; B604;B604;1104 1168 11B7;B604;1104 1168 11B7; B605;B605;1104 1168 11B8;B605;1104 1168 11B8; B606;B606;1104 1168 11B9;B606;1104 1168 11B9; B607;B607;1104 1168 11BA;B607;1104 1168 11BA; B608;B608;1104 1168 11BB;B608;1104 1168 11BB; B609;B609;1104 1168 11BC;B609;1104 1168 11BC; B60A;B60A;1104 1168 11BD;B60A;1104 1168 11BD; B60B;B60B;1104 1168 11BE;B60B;1104 1168 11BE; B60C;B60C;1104 1168 11BF;B60C;1104 1168 11BF; B60D;B60D;1104 1168 11C0;B60D;1104 1168 11C0; B60E;B60E;1104 1168 11C1;B60E;1104 1168 11C1; B60F;B60F;1104 1168 11C2;B60F;1104 1168 11C2; B610;B610;1104 1169;B610;1104 1169; B611;B611;1104 1169 11A8;B611;1104 1169 11A8; B612;B612;1104 1169 11A9;B612;1104 1169 11A9; B613;B613;1104 1169 11AA;B613;1104 1169 11AA; B614;B614;1104 1169 11AB;B614;1104 1169 11AB; B615;B615;1104 1169 11AC;B615;1104 1169 11AC; B616;B616;1104 1169 11AD;B616;1104 1169 11AD; B617;B617;1104 1169 11AE;B617;1104 1169 11AE; B618;B618;1104 1169 11AF;B618;1104 1169 11AF; B619;B619;1104 1169 11B0;B619;1104 1169 11B0; B61A;B61A;1104 1169 11B1;B61A;1104 1169 11B1; B61B;B61B;1104 1169 11B2;B61B;1104 1169 11B2; B61C;B61C;1104 1169 11B3;B61C;1104 1169 11B3; B61D;B61D;1104 1169 11B4;B61D;1104 1169 11B4; B61E;B61E;1104 1169 11B5;B61E;1104 1169 11B5; B61F;B61F;1104 1169 11B6;B61F;1104 1169 11B6; B620;B620;1104 1169 11B7;B620;1104 1169 11B7; B621;B621;1104 1169 11B8;B621;1104 1169 11B8; B622;B622;1104 1169 11B9;B622;1104 1169 11B9; B623;B623;1104 1169 11BA;B623;1104 1169 11BA; B624;B624;1104 1169 11BB;B624;1104 1169 11BB; B625;B625;1104 1169 11BC;B625;1104 1169 11BC; B626;B626;1104 1169 11BD;B626;1104 1169 11BD; B627;B627;1104 1169 11BE;B627;1104 1169 11BE; B628;B628;1104 1169 11BF;B628;1104 1169 11BF; B629;B629;1104 1169 11C0;B629;1104 1169 11C0; B62A;B62A;1104 1169 11C1;B62A;1104 1169 11C1; B62B;B62B;1104 1169 11C2;B62B;1104 1169 11C2; B62C;B62C;1104 116A;B62C;1104 116A; B62D;B62D;1104 116A 11A8;B62D;1104 116A 11A8; B62E;B62E;1104 116A 11A9;B62E;1104 116A 11A9; B62F;B62F;1104 116A 11AA;B62F;1104 116A 11AA; B630;B630;1104 116A 11AB;B630;1104 116A 11AB; B631;B631;1104 116A 11AC;B631;1104 116A 11AC; B632;B632;1104 116A 11AD;B632;1104 116A 11AD; B633;B633;1104 116A 11AE;B633;1104 116A 11AE; B634;B634;1104 116A 11AF;B634;1104 116A 11AF; B635;B635;1104 116A 11B0;B635;1104 116A 11B0; B636;B636;1104 116A 11B1;B636;1104 116A 11B1; B637;B637;1104 116A 11B2;B637;1104 116A 11B2; B638;B638;1104 116A 11B3;B638;1104 116A 11B3; B639;B639;1104 116A 11B4;B639;1104 116A 11B4; B63A;B63A;1104 116A 11B5;B63A;1104 116A 11B5; B63B;B63B;1104 116A 11B6;B63B;1104 116A 11B6; B63C;B63C;1104 116A 11B7;B63C;1104 116A 11B7; B63D;B63D;1104 116A 11B8;B63D;1104 116A 11B8; B63E;B63E;1104 116A 11B9;B63E;1104 116A 11B9; B63F;B63F;1104 116A 11BA;B63F;1104 116A 11BA; B640;B640;1104 116A 11BB;B640;1104 116A 11BB; B641;B641;1104 116A 11BC;B641;1104 116A 11BC; B642;B642;1104 116A 11BD;B642;1104 116A 11BD; B643;B643;1104 116A 11BE;B643;1104 116A 11BE; B644;B644;1104 116A 11BF;B644;1104 116A 11BF; B645;B645;1104 116A 11C0;B645;1104 116A 11C0; B646;B646;1104 116A 11C1;B646;1104 116A 11C1; B647;B647;1104 116A 11C2;B647;1104 116A 11C2; B648;B648;1104 116B;B648;1104 116B; B649;B649;1104 116B 11A8;B649;1104 116B 11A8; B64A;B64A;1104 116B 11A9;B64A;1104 116B 11A9; B64B;B64B;1104 116B 11AA;B64B;1104 116B 11AA; B64C;B64C;1104 116B 11AB;B64C;1104 116B 11AB; B64D;B64D;1104 116B 11AC;B64D;1104 116B 11AC; B64E;B64E;1104 116B 11AD;B64E;1104 116B 11AD; B64F;B64F;1104 116B 11AE;B64F;1104 116B 11AE; B650;B650;1104 116B 11AF;B650;1104 116B 11AF; B651;B651;1104 116B 11B0;B651;1104 116B 11B0; B652;B652;1104 116B 11B1;B652;1104 116B 11B1; B653;B653;1104 116B 11B2;B653;1104 116B 11B2; B654;B654;1104 116B 11B3;B654;1104 116B 11B3; B655;B655;1104 116B 11B4;B655;1104 116B 11B4; B656;B656;1104 116B 11B5;B656;1104 116B 11B5; B657;B657;1104 116B 11B6;B657;1104 116B 11B6; B658;B658;1104 116B 11B7;B658;1104 116B 11B7; B659;B659;1104 116B 11B8;B659;1104 116B 11B8; B65A;B65A;1104 116B 11B9;B65A;1104 116B 11B9; B65B;B65B;1104 116B 11BA;B65B;1104 116B 11BA; B65C;B65C;1104 116B 11BB;B65C;1104 116B 11BB; B65D;B65D;1104 116B 11BC;B65D;1104 116B 11BC; B65E;B65E;1104 116B 11BD;B65E;1104 116B 11BD; B65F;B65F;1104 116B 11BE;B65F;1104 116B 11BE; B660;B660;1104 116B 11BF;B660;1104 116B 11BF; B661;B661;1104 116B 11C0;B661;1104 116B 11C0; B662;B662;1104 116B 11C1;B662;1104 116B 11C1; B663;B663;1104 116B 11C2;B663;1104 116B 11C2; B664;B664;1104 116C;B664;1104 116C; B665;B665;1104 116C 11A8;B665;1104 116C 11A8; B666;B666;1104 116C 11A9;B666;1104 116C 11A9; B667;B667;1104 116C 11AA;B667;1104 116C 11AA; B668;B668;1104 116C 11AB;B668;1104 116C 11AB; B669;B669;1104 116C 11AC;B669;1104 116C 11AC; B66A;B66A;1104 116C 11AD;B66A;1104 116C 11AD; B66B;B66B;1104 116C 11AE;B66B;1104 116C 11AE; B66C;B66C;1104 116C 11AF;B66C;1104 116C 11AF; B66D;B66D;1104 116C 11B0;B66D;1104 116C 11B0; B66E;B66E;1104 116C 11B1;B66E;1104 116C 11B1; B66F;B66F;1104 116C 11B2;B66F;1104 116C 11B2; B670;B670;1104 116C 11B3;B670;1104 116C 11B3; B671;B671;1104 116C 11B4;B671;1104 116C 11B4; B672;B672;1104 116C 11B5;B672;1104 116C 11B5; B673;B673;1104 116C 11B6;B673;1104 116C 11B6; B674;B674;1104 116C 11B7;B674;1104 116C 11B7; B675;B675;1104 116C 11B8;B675;1104 116C 11B8; B676;B676;1104 116C 11B9;B676;1104 116C 11B9; B677;B677;1104 116C 11BA;B677;1104 116C 11BA; B678;B678;1104 116C 11BB;B678;1104 116C 11BB; B679;B679;1104 116C 11BC;B679;1104 116C 11BC; B67A;B67A;1104 116C 11BD;B67A;1104 116C 11BD; B67B;B67B;1104 116C 11BE;B67B;1104 116C 11BE; B67C;B67C;1104 116C 11BF;B67C;1104 116C 11BF; B67D;B67D;1104 116C 11C0;B67D;1104 116C 11C0; B67E;B67E;1104 116C 11C1;B67E;1104 116C 11C1; B67F;B67F;1104 116C 11C2;B67F;1104 116C 11C2; B680;B680;1104 116D;B680;1104 116D; B681;B681;1104 116D 11A8;B681;1104 116D 11A8; B682;B682;1104 116D 11A9;B682;1104 116D 11A9; B683;B683;1104 116D 11AA;B683;1104 116D 11AA; B684;B684;1104 116D 11AB;B684;1104 116D 11AB; B685;B685;1104 116D 11AC;B685;1104 116D 11AC; B686;B686;1104 116D 11AD;B686;1104 116D 11AD; B687;B687;1104 116D 11AE;B687;1104 116D 11AE; B688;B688;1104 116D 11AF;B688;1104 116D 11AF; B689;B689;1104 116D 11B0;B689;1104 116D 11B0; B68A;B68A;1104 116D 11B1;B68A;1104 116D 11B1; B68B;B68B;1104 116D 11B2;B68B;1104 116D 11B2; B68C;B68C;1104 116D 11B3;B68C;1104 116D 11B3; B68D;B68D;1104 116D 11B4;B68D;1104 116D 11B4; B68E;B68E;1104 116D 11B5;B68E;1104 116D 11B5; B68F;B68F;1104 116D 11B6;B68F;1104 116D 11B6; B690;B690;1104 116D 11B7;B690;1104 116D 11B7; B691;B691;1104 116D 11B8;B691;1104 116D 11B8; B692;B692;1104 116D 11B9;B692;1104 116D 11B9; B693;B693;1104 116D 11BA;B693;1104 116D 11BA; B694;B694;1104 116D 11BB;B694;1104 116D 11BB; B695;B695;1104 116D 11BC;B695;1104 116D 11BC; B696;B696;1104 116D 11BD;B696;1104 116D 11BD; B697;B697;1104 116D 11BE;B697;1104 116D 11BE; B698;B698;1104 116D 11BF;B698;1104 116D 11BF; B699;B699;1104 116D 11C0;B699;1104 116D 11C0; B69A;B69A;1104 116D 11C1;B69A;1104 116D 11C1; B69B;B69B;1104 116D 11C2;B69B;1104 116D 11C2; B69C;B69C;1104 116E;B69C;1104 116E; B69D;B69D;1104 116E 11A8;B69D;1104 116E 11A8; B69E;B69E;1104 116E 11A9;B69E;1104 116E 11A9; B69F;B69F;1104 116E 11AA;B69F;1104 116E 11AA; B6A0;B6A0;1104 116E 11AB;B6A0;1104 116E 11AB; B6A1;B6A1;1104 116E 11AC;B6A1;1104 116E 11AC; B6A2;B6A2;1104 116E 11AD;B6A2;1104 116E 11AD; B6A3;B6A3;1104 116E 11AE;B6A3;1104 116E 11AE; B6A4;B6A4;1104 116E 11AF;B6A4;1104 116E 11AF; B6A5;B6A5;1104 116E 11B0;B6A5;1104 116E 11B0; B6A6;B6A6;1104 116E 11B1;B6A6;1104 116E 11B1; B6A7;B6A7;1104 116E 11B2;B6A7;1104 116E 11B2; B6A8;B6A8;1104 116E 11B3;B6A8;1104 116E 11B3; B6A9;B6A9;1104 116E 11B4;B6A9;1104 116E 11B4; B6AA;B6AA;1104 116E 11B5;B6AA;1104 116E 11B5; B6AB;B6AB;1104 116E 11B6;B6AB;1104 116E 11B6; B6AC;B6AC;1104 116E 11B7;B6AC;1104 116E 11B7; B6AD;B6AD;1104 116E 11B8;B6AD;1104 116E 11B8; B6AE;B6AE;1104 116E 11B9;B6AE;1104 116E 11B9; B6AF;B6AF;1104 116E 11BA;B6AF;1104 116E 11BA; B6B0;B6B0;1104 116E 11BB;B6B0;1104 116E 11BB; B6B1;B6B1;1104 116E 11BC;B6B1;1104 116E 11BC; B6B2;B6B2;1104 116E 11BD;B6B2;1104 116E 11BD; B6B3;B6B3;1104 116E 11BE;B6B3;1104 116E 11BE; B6B4;B6B4;1104 116E 11BF;B6B4;1104 116E 11BF; B6B5;B6B5;1104 116E 11C0;B6B5;1104 116E 11C0; B6B6;B6B6;1104 116E 11C1;B6B6;1104 116E 11C1; B6B7;B6B7;1104 116E 11C2;B6B7;1104 116E 11C2; B6B8;B6B8;1104 116F;B6B8;1104 116F; B6B9;B6B9;1104 116F 11A8;B6B9;1104 116F 11A8; B6BA;B6BA;1104 116F 11A9;B6BA;1104 116F 11A9; B6BB;B6BB;1104 116F 11AA;B6BB;1104 116F 11AA; B6BC;B6BC;1104 116F 11AB;B6BC;1104 116F 11AB; B6BD;B6BD;1104 116F 11AC;B6BD;1104 116F 11AC; B6BE;B6BE;1104 116F 11AD;B6BE;1104 116F 11AD; B6BF;B6BF;1104 116F 11AE;B6BF;1104 116F 11AE; B6C0;B6C0;1104 116F 11AF;B6C0;1104 116F 11AF; B6C1;B6C1;1104 116F 11B0;B6C1;1104 116F 11B0; B6C2;B6C2;1104 116F 11B1;B6C2;1104 116F 11B1; B6C3;B6C3;1104 116F 11B2;B6C3;1104 116F 11B2; B6C4;B6C4;1104 116F 11B3;B6C4;1104 116F 11B3; B6C5;B6C5;1104 116F 11B4;B6C5;1104 116F 11B4; B6C6;B6C6;1104 116F 11B5;B6C6;1104 116F 11B5; B6C7;B6C7;1104 116F 11B6;B6C7;1104 116F 11B6; B6C8;B6C8;1104 116F 11B7;B6C8;1104 116F 11B7; B6C9;B6C9;1104 116F 11B8;B6C9;1104 116F 11B8; B6CA;B6CA;1104 116F 11B9;B6CA;1104 116F 11B9; B6CB;B6CB;1104 116F 11BA;B6CB;1104 116F 11BA; B6CC;B6CC;1104 116F 11BB;B6CC;1104 116F 11BB; B6CD;B6CD;1104 116F 11BC;B6CD;1104 116F 11BC; B6CE;B6CE;1104 116F 11BD;B6CE;1104 116F 11BD; B6CF;B6CF;1104 116F 11BE;B6CF;1104 116F 11BE; B6D0;B6D0;1104 116F 11BF;B6D0;1104 116F 11BF; B6D1;B6D1;1104 116F 11C0;B6D1;1104 116F 11C0; B6D2;B6D2;1104 116F 11C1;B6D2;1104 116F 11C1; B6D3;B6D3;1104 116F 11C2;B6D3;1104 116F 11C2; B6D4;B6D4;1104 1170;B6D4;1104 1170; B6D5;B6D5;1104 1170 11A8;B6D5;1104 1170 11A8; B6D6;B6D6;1104 1170 11A9;B6D6;1104 1170 11A9; B6D7;B6D7;1104 1170 11AA;B6D7;1104 1170 11AA; B6D8;B6D8;1104 1170 11AB;B6D8;1104 1170 11AB; B6D9;B6D9;1104 1170 11AC;B6D9;1104 1170 11AC; B6DA;B6DA;1104 1170 11AD;B6DA;1104 1170 11AD; B6DB;B6DB;1104 1170 11AE;B6DB;1104 1170 11AE; B6DC;B6DC;1104 1170 11AF;B6DC;1104 1170 11AF; B6DD;B6DD;1104 1170 11B0;B6DD;1104 1170 11B0; B6DE;B6DE;1104 1170 11B1;B6DE;1104 1170 11B1; B6DF;B6DF;1104 1170 11B2;B6DF;1104 1170 11B2; B6E0;B6E0;1104 1170 11B3;B6E0;1104 1170 11B3; B6E1;B6E1;1104 1170 11B4;B6E1;1104 1170 11B4; B6E2;B6E2;1104 1170 11B5;B6E2;1104 1170 11B5; B6E3;B6E3;1104 1170 11B6;B6E3;1104 1170 11B6; B6E4;B6E4;1104 1170 11B7;B6E4;1104 1170 11B7; B6E5;B6E5;1104 1170 11B8;B6E5;1104 1170 11B8; B6E6;B6E6;1104 1170 11B9;B6E6;1104 1170 11B9; B6E7;B6E7;1104 1170 11BA;B6E7;1104 1170 11BA; B6E8;B6E8;1104 1170 11BB;B6E8;1104 1170 11BB; B6E9;B6E9;1104 1170 11BC;B6E9;1104 1170 11BC; B6EA;B6EA;1104 1170 11BD;B6EA;1104 1170 11BD; B6EB;B6EB;1104 1170 11BE;B6EB;1104 1170 11BE; B6EC;B6EC;1104 1170 11BF;B6EC;1104 1170 11BF; B6ED;B6ED;1104 1170 11C0;B6ED;1104 1170 11C0; B6EE;B6EE;1104 1170 11C1;B6EE;1104 1170 11C1; B6EF;B6EF;1104 1170 11C2;B6EF;1104 1170 11C2; B6F0;B6F0;1104 1171;B6F0;1104 1171; B6F1;B6F1;1104 1171 11A8;B6F1;1104 1171 11A8; B6F2;B6F2;1104 1171 11A9;B6F2;1104 1171 11A9; B6F3;B6F3;1104 1171 11AA;B6F3;1104 1171 11AA; B6F4;B6F4;1104 1171 11AB;B6F4;1104 1171 11AB; B6F5;B6F5;1104 1171 11AC;B6F5;1104 1171 11AC; B6F6;B6F6;1104 1171 11AD;B6F6;1104 1171 11AD; B6F7;B6F7;1104 1171 11AE;B6F7;1104 1171 11AE; B6F8;B6F8;1104 1171 11AF;B6F8;1104 1171 11AF; B6F9;B6F9;1104 1171 11B0;B6F9;1104 1171 11B0; B6FA;B6FA;1104 1171 11B1;B6FA;1104 1171 11B1; B6FB;B6FB;1104 1171 11B2;B6FB;1104 1171 11B2; B6FC;B6FC;1104 1171 11B3;B6FC;1104 1171 11B3; B6FD;B6FD;1104 1171 11B4;B6FD;1104 1171 11B4; B6FE;B6FE;1104 1171 11B5;B6FE;1104 1171 11B5; B6FF;B6FF;1104 1171 11B6;B6FF;1104 1171 11B6; B700;B700;1104 1171 11B7;B700;1104 1171 11B7; B701;B701;1104 1171 11B8;B701;1104 1171 11B8; B702;B702;1104 1171 11B9;B702;1104 1171 11B9; B703;B703;1104 1171 11BA;B703;1104 1171 11BA; B704;B704;1104 1171 11BB;B704;1104 1171 11BB; B705;B705;1104 1171 11BC;B705;1104 1171 11BC; B706;B706;1104 1171 11BD;B706;1104 1171 11BD; B707;B707;1104 1171 11BE;B707;1104 1171 11BE; B708;B708;1104 1171 11BF;B708;1104 1171 11BF; B709;B709;1104 1171 11C0;B709;1104 1171 11C0; B70A;B70A;1104 1171 11C1;B70A;1104 1171 11C1; B70B;B70B;1104 1171 11C2;B70B;1104 1171 11C2; B70C;B70C;1104 1172;B70C;1104 1172; B70D;B70D;1104 1172 11A8;B70D;1104 1172 11A8; B70E;B70E;1104 1172 11A9;B70E;1104 1172 11A9; B70F;B70F;1104 1172 11AA;B70F;1104 1172 11AA; B710;B710;1104 1172 11AB;B710;1104 1172 11AB; B711;B711;1104 1172 11AC;B711;1104 1172 11AC; B712;B712;1104 1172 11AD;B712;1104 1172 11AD; B713;B713;1104 1172 11AE;B713;1104 1172 11AE; B714;B714;1104 1172 11AF;B714;1104 1172 11AF; B715;B715;1104 1172 11B0;B715;1104 1172 11B0; B716;B716;1104 1172 11B1;B716;1104 1172 11B1; B717;B717;1104 1172 11B2;B717;1104 1172 11B2; B718;B718;1104 1172 11B3;B718;1104 1172 11B3; B719;B719;1104 1172 11B4;B719;1104 1172 11B4; B71A;B71A;1104 1172 11B5;B71A;1104 1172 11B5; B71B;B71B;1104 1172 11B6;B71B;1104 1172 11B6; B71C;B71C;1104 1172 11B7;B71C;1104 1172 11B7; B71D;B71D;1104 1172 11B8;B71D;1104 1172 11B8; B71E;B71E;1104 1172 11B9;B71E;1104 1172 11B9; B71F;B71F;1104 1172 11BA;B71F;1104 1172 11BA; B720;B720;1104 1172 11BB;B720;1104 1172 11BB; B721;B721;1104 1172 11BC;B721;1104 1172 11BC; B722;B722;1104 1172 11BD;B722;1104 1172 11BD; B723;B723;1104 1172 11BE;B723;1104 1172 11BE; B724;B724;1104 1172 11BF;B724;1104 1172 11BF; B725;B725;1104 1172 11C0;B725;1104 1172 11C0; B726;B726;1104 1172 11C1;B726;1104 1172 11C1; B727;B727;1104 1172 11C2;B727;1104 1172 11C2; B728;B728;1104 1173;B728;1104 1173; B729;B729;1104 1173 11A8;B729;1104 1173 11A8; B72A;B72A;1104 1173 11A9;B72A;1104 1173 11A9; B72B;B72B;1104 1173 11AA;B72B;1104 1173 11AA; B72C;B72C;1104 1173 11AB;B72C;1104 1173 11AB; B72D;B72D;1104 1173 11AC;B72D;1104 1173 11AC; B72E;B72E;1104 1173 11AD;B72E;1104 1173 11AD; B72F;B72F;1104 1173 11AE;B72F;1104 1173 11AE; B730;B730;1104 1173 11AF;B730;1104 1173 11AF; B731;B731;1104 1173 11B0;B731;1104 1173 11B0; B732;B732;1104 1173 11B1;B732;1104 1173 11B1; B733;B733;1104 1173 11B2;B733;1104 1173 11B2; B734;B734;1104 1173 11B3;B734;1104 1173 11B3; B735;B735;1104 1173 11B4;B735;1104 1173 11B4; B736;B736;1104 1173 11B5;B736;1104 1173 11B5; B737;B737;1104 1173 11B6;B737;1104 1173 11B6; B738;B738;1104 1173 11B7;B738;1104 1173 11B7; B739;B739;1104 1173 11B8;B739;1104 1173 11B8; B73A;B73A;1104 1173 11B9;B73A;1104 1173 11B9; B73B;B73B;1104 1173 11BA;B73B;1104 1173 11BA; B73C;B73C;1104 1173 11BB;B73C;1104 1173 11BB; B73D;B73D;1104 1173 11BC;B73D;1104 1173 11BC; B73E;B73E;1104 1173 11BD;B73E;1104 1173 11BD; B73F;B73F;1104 1173 11BE;B73F;1104 1173 11BE; B740;B740;1104 1173 11BF;B740;1104 1173 11BF; B741;B741;1104 1173 11C0;B741;1104 1173 11C0; B742;B742;1104 1173 11C1;B742;1104 1173 11C1; B743;B743;1104 1173 11C2;B743;1104 1173 11C2; B744;B744;1104 1174;B744;1104 1174; B745;B745;1104 1174 11A8;B745;1104 1174 11A8; B746;B746;1104 1174 11A9;B746;1104 1174 11A9; B747;B747;1104 1174 11AA;B747;1104 1174 11AA; B748;B748;1104 1174 11AB;B748;1104 1174 11AB; B749;B749;1104 1174 11AC;B749;1104 1174 11AC; B74A;B74A;1104 1174 11AD;B74A;1104 1174 11AD; B74B;B74B;1104 1174 11AE;B74B;1104 1174 11AE; B74C;B74C;1104 1174 11AF;B74C;1104 1174 11AF; B74D;B74D;1104 1174 11B0;B74D;1104 1174 11B0; B74E;B74E;1104 1174 11B1;B74E;1104 1174 11B1; B74F;B74F;1104 1174 11B2;B74F;1104 1174 11B2; B750;B750;1104 1174 11B3;B750;1104 1174 11B3; B751;B751;1104 1174 11B4;B751;1104 1174 11B4; B752;B752;1104 1174 11B5;B752;1104 1174 11B5; B753;B753;1104 1174 11B6;B753;1104 1174 11B6; B754;B754;1104 1174 11B7;B754;1104 1174 11B7; B755;B755;1104 1174 11B8;B755;1104 1174 11B8; B756;B756;1104 1174 11B9;B756;1104 1174 11B9; B757;B757;1104 1174 11BA;B757;1104 1174 11BA; B758;B758;1104 1174 11BB;B758;1104 1174 11BB; B759;B759;1104 1174 11BC;B759;1104 1174 11BC; B75A;B75A;1104 1174 11BD;B75A;1104 1174 11BD; B75B;B75B;1104 1174 11BE;B75B;1104 1174 11BE; B75C;B75C;1104 1174 11BF;B75C;1104 1174 11BF; B75D;B75D;1104 1174 11C0;B75D;1104 1174 11C0; B75E;B75E;1104 1174 11C1;B75E;1104 1174 11C1; B75F;B75F;1104 1174 11C2;B75F;1104 1174 11C2; B760;B760;1104 1175;B760;1104 1175; B761;B761;1104 1175 11A8;B761;1104 1175 11A8; B762;B762;1104 1175 11A9;B762;1104 1175 11A9; B763;B763;1104 1175 11AA;B763;1104 1175 11AA; B764;B764;1104 1175 11AB;B764;1104 1175 11AB; B765;B765;1104 1175 11AC;B765;1104 1175 11AC; B766;B766;1104 1175 11AD;B766;1104 1175 11AD; B767;B767;1104 1175 11AE;B767;1104 1175 11AE; B768;B768;1104 1175 11AF;B768;1104 1175 11AF; B769;B769;1104 1175 11B0;B769;1104 1175 11B0; B76A;B76A;1104 1175 11B1;B76A;1104 1175 11B1; B76B;B76B;1104 1175 11B2;B76B;1104 1175 11B2; B76C;B76C;1104 1175 11B3;B76C;1104 1175 11B3; B76D;B76D;1104 1175 11B4;B76D;1104 1175 11B4; B76E;B76E;1104 1175 11B5;B76E;1104 1175 11B5; B76F;B76F;1104 1175 11B6;B76F;1104 1175 11B6; B770;B770;1104 1175 11B7;B770;1104 1175 11B7; B771;B771;1104 1175 11B8;B771;1104 1175 11B8; B772;B772;1104 1175 11B9;B772;1104 1175 11B9; B773;B773;1104 1175 11BA;B773;1104 1175 11BA; B774;B774;1104 1175 11BB;B774;1104 1175 11BB; B775;B775;1104 1175 11BC;B775;1104 1175 11BC; B776;B776;1104 1175 11BD;B776;1104 1175 11BD; B777;B777;1104 1175 11BE;B777;1104 1175 11BE; B778;B778;1104 1175 11BF;B778;1104 1175 11BF; B779;B779;1104 1175 11C0;B779;1104 1175 11C0; B77A;B77A;1104 1175 11C1;B77A;1104 1175 11C1; B77B;B77B;1104 1175 11C2;B77B;1104 1175 11C2; B77C;B77C;1105 1161;B77C;1105 1161; B77D;B77D;1105 1161 11A8;B77D;1105 1161 11A8; B77E;B77E;1105 1161 11A9;B77E;1105 1161 11A9; B77F;B77F;1105 1161 11AA;B77F;1105 1161 11AA; B780;B780;1105 1161 11AB;B780;1105 1161 11AB; B781;B781;1105 1161 11AC;B781;1105 1161 11AC; B782;B782;1105 1161 11AD;B782;1105 1161 11AD; B783;B783;1105 1161 11AE;B783;1105 1161 11AE; B784;B784;1105 1161 11AF;B784;1105 1161 11AF; B785;B785;1105 1161 11B0;B785;1105 1161 11B0; B786;B786;1105 1161 11B1;B786;1105 1161 11B1; B787;B787;1105 1161 11B2;B787;1105 1161 11B2; B788;B788;1105 1161 11B3;B788;1105 1161 11B3; B789;B789;1105 1161 11B4;B789;1105 1161 11B4; B78A;B78A;1105 1161 11B5;B78A;1105 1161 11B5; B78B;B78B;1105 1161 11B6;B78B;1105 1161 11B6; B78C;B78C;1105 1161 11B7;B78C;1105 1161 11B7; B78D;B78D;1105 1161 11B8;B78D;1105 1161 11B8; B78E;B78E;1105 1161 11B9;B78E;1105 1161 11B9; B78F;B78F;1105 1161 11BA;B78F;1105 1161 11BA; B790;B790;1105 1161 11BB;B790;1105 1161 11BB; B791;B791;1105 1161 11BC;B791;1105 1161 11BC; B792;B792;1105 1161 11BD;B792;1105 1161 11BD; B793;B793;1105 1161 11BE;B793;1105 1161 11BE; B794;B794;1105 1161 11BF;B794;1105 1161 11BF; B795;B795;1105 1161 11C0;B795;1105 1161 11C0; B796;B796;1105 1161 11C1;B796;1105 1161 11C1; B797;B797;1105 1161 11C2;B797;1105 1161 11C2; B798;B798;1105 1162;B798;1105 1162; B799;B799;1105 1162 11A8;B799;1105 1162 11A8; B79A;B79A;1105 1162 11A9;B79A;1105 1162 11A9; B79B;B79B;1105 1162 11AA;B79B;1105 1162 11AA; B79C;B79C;1105 1162 11AB;B79C;1105 1162 11AB; B79D;B79D;1105 1162 11AC;B79D;1105 1162 11AC; B79E;B79E;1105 1162 11AD;B79E;1105 1162 11AD; B79F;B79F;1105 1162 11AE;B79F;1105 1162 11AE; B7A0;B7A0;1105 1162 11AF;B7A0;1105 1162 11AF; B7A1;B7A1;1105 1162 11B0;B7A1;1105 1162 11B0; B7A2;B7A2;1105 1162 11B1;B7A2;1105 1162 11B1; B7A3;B7A3;1105 1162 11B2;B7A3;1105 1162 11B2; B7A4;B7A4;1105 1162 11B3;B7A4;1105 1162 11B3; B7A5;B7A5;1105 1162 11B4;B7A5;1105 1162 11B4; B7A6;B7A6;1105 1162 11B5;B7A6;1105 1162 11B5; B7A7;B7A7;1105 1162 11B6;B7A7;1105 1162 11B6; B7A8;B7A8;1105 1162 11B7;B7A8;1105 1162 11B7; B7A9;B7A9;1105 1162 11B8;B7A9;1105 1162 11B8; B7AA;B7AA;1105 1162 11B9;B7AA;1105 1162 11B9; B7AB;B7AB;1105 1162 11BA;B7AB;1105 1162 11BA; B7AC;B7AC;1105 1162 11BB;B7AC;1105 1162 11BB; B7AD;B7AD;1105 1162 11BC;B7AD;1105 1162 11BC; B7AE;B7AE;1105 1162 11BD;B7AE;1105 1162 11BD; B7AF;B7AF;1105 1162 11BE;B7AF;1105 1162 11BE; B7B0;B7B0;1105 1162 11BF;B7B0;1105 1162 11BF; B7B1;B7B1;1105 1162 11C0;B7B1;1105 1162 11C0; B7B2;B7B2;1105 1162 11C1;B7B2;1105 1162 11C1; B7B3;B7B3;1105 1162 11C2;B7B3;1105 1162 11C2; B7B4;B7B4;1105 1163;B7B4;1105 1163; B7B5;B7B5;1105 1163 11A8;B7B5;1105 1163 11A8; B7B6;B7B6;1105 1163 11A9;B7B6;1105 1163 11A9; B7B7;B7B7;1105 1163 11AA;B7B7;1105 1163 11AA; B7B8;B7B8;1105 1163 11AB;B7B8;1105 1163 11AB; B7B9;B7B9;1105 1163 11AC;B7B9;1105 1163 11AC; B7BA;B7BA;1105 1163 11AD;B7BA;1105 1163 11AD; B7BB;B7BB;1105 1163 11AE;B7BB;1105 1163 11AE; B7BC;B7BC;1105 1163 11AF;B7BC;1105 1163 11AF; B7BD;B7BD;1105 1163 11B0;B7BD;1105 1163 11B0; B7BE;B7BE;1105 1163 11B1;B7BE;1105 1163 11B1; B7BF;B7BF;1105 1163 11B2;B7BF;1105 1163 11B2; B7C0;B7C0;1105 1163 11B3;B7C0;1105 1163 11B3; B7C1;B7C1;1105 1163 11B4;B7C1;1105 1163 11B4; B7C2;B7C2;1105 1163 11B5;B7C2;1105 1163 11B5; B7C3;B7C3;1105 1163 11B6;B7C3;1105 1163 11B6; B7C4;B7C4;1105 1163 11B7;B7C4;1105 1163 11B7; B7C5;B7C5;1105 1163 11B8;B7C5;1105 1163 11B8; B7C6;B7C6;1105 1163 11B9;B7C6;1105 1163 11B9; B7C7;B7C7;1105 1163 11BA;B7C7;1105 1163 11BA; B7C8;B7C8;1105 1163 11BB;B7C8;1105 1163 11BB; B7C9;B7C9;1105 1163 11BC;B7C9;1105 1163 11BC; B7CA;B7CA;1105 1163 11BD;B7CA;1105 1163 11BD; B7CB;B7CB;1105 1163 11BE;B7CB;1105 1163 11BE; B7CC;B7CC;1105 1163 11BF;B7CC;1105 1163 11BF; B7CD;B7CD;1105 1163 11C0;B7CD;1105 1163 11C0; B7CE;B7CE;1105 1163 11C1;B7CE;1105 1163 11C1; B7CF;B7CF;1105 1163 11C2;B7CF;1105 1163 11C2; B7D0;B7D0;1105 1164;B7D0;1105 1164; B7D1;B7D1;1105 1164 11A8;B7D1;1105 1164 11A8; B7D2;B7D2;1105 1164 11A9;B7D2;1105 1164 11A9; B7D3;B7D3;1105 1164 11AA;B7D3;1105 1164 11AA; B7D4;B7D4;1105 1164 11AB;B7D4;1105 1164 11AB; B7D5;B7D5;1105 1164 11AC;B7D5;1105 1164 11AC; B7D6;B7D6;1105 1164 11AD;B7D6;1105 1164 11AD; B7D7;B7D7;1105 1164 11AE;B7D7;1105 1164 11AE; B7D8;B7D8;1105 1164 11AF;B7D8;1105 1164 11AF; B7D9;B7D9;1105 1164 11B0;B7D9;1105 1164 11B0; B7DA;B7DA;1105 1164 11B1;B7DA;1105 1164 11B1; B7DB;B7DB;1105 1164 11B2;B7DB;1105 1164 11B2; B7DC;B7DC;1105 1164 11B3;B7DC;1105 1164 11B3; B7DD;B7DD;1105 1164 11B4;B7DD;1105 1164 11B4; B7DE;B7DE;1105 1164 11B5;B7DE;1105 1164 11B5; B7DF;B7DF;1105 1164 11B6;B7DF;1105 1164 11B6; B7E0;B7E0;1105 1164 11B7;B7E0;1105 1164 11B7; B7E1;B7E1;1105 1164 11B8;B7E1;1105 1164 11B8; B7E2;B7E2;1105 1164 11B9;B7E2;1105 1164 11B9; B7E3;B7E3;1105 1164 11BA;B7E3;1105 1164 11BA; B7E4;B7E4;1105 1164 11BB;B7E4;1105 1164 11BB; B7E5;B7E5;1105 1164 11BC;B7E5;1105 1164 11BC; B7E6;B7E6;1105 1164 11BD;B7E6;1105 1164 11BD; B7E7;B7E7;1105 1164 11BE;B7E7;1105 1164 11BE; B7E8;B7E8;1105 1164 11BF;B7E8;1105 1164 11BF; B7E9;B7E9;1105 1164 11C0;B7E9;1105 1164 11C0; B7EA;B7EA;1105 1164 11C1;B7EA;1105 1164 11C1; B7EB;B7EB;1105 1164 11C2;B7EB;1105 1164 11C2; B7EC;B7EC;1105 1165;B7EC;1105 1165; B7ED;B7ED;1105 1165 11A8;B7ED;1105 1165 11A8; B7EE;B7EE;1105 1165 11A9;B7EE;1105 1165 11A9; B7EF;B7EF;1105 1165 11AA;B7EF;1105 1165 11AA; B7F0;B7F0;1105 1165 11AB;B7F0;1105 1165 11AB; B7F1;B7F1;1105 1165 11AC;B7F1;1105 1165 11AC; B7F2;B7F2;1105 1165 11AD;B7F2;1105 1165 11AD; B7F3;B7F3;1105 1165 11AE;B7F3;1105 1165 11AE; B7F4;B7F4;1105 1165 11AF;B7F4;1105 1165 11AF; B7F5;B7F5;1105 1165 11B0;B7F5;1105 1165 11B0; B7F6;B7F6;1105 1165 11B1;B7F6;1105 1165 11B1; B7F7;B7F7;1105 1165 11B2;B7F7;1105 1165 11B2; B7F8;B7F8;1105 1165 11B3;B7F8;1105 1165 11B3; B7F9;B7F9;1105 1165 11B4;B7F9;1105 1165 11B4; B7FA;B7FA;1105 1165 11B5;B7FA;1105 1165 11B5; B7FB;B7FB;1105 1165 11B6;B7FB;1105 1165 11B6; B7FC;B7FC;1105 1165 11B7;B7FC;1105 1165 11B7; B7FD;B7FD;1105 1165 11B8;B7FD;1105 1165 11B8; B7FE;B7FE;1105 1165 11B9;B7FE;1105 1165 11B9; B7FF;B7FF;1105 1165 11BA;B7FF;1105 1165 11BA; B800;B800;1105 1165 11BB;B800;1105 1165 11BB; B801;B801;1105 1165 11BC;B801;1105 1165 11BC; B802;B802;1105 1165 11BD;B802;1105 1165 11BD; B803;B803;1105 1165 11BE;B803;1105 1165 11BE; B804;B804;1105 1165 11BF;B804;1105 1165 11BF; B805;B805;1105 1165 11C0;B805;1105 1165 11C0; B806;B806;1105 1165 11C1;B806;1105 1165 11C1; B807;B807;1105 1165 11C2;B807;1105 1165 11C2; B808;B808;1105 1166;B808;1105 1166; B809;B809;1105 1166 11A8;B809;1105 1166 11A8; B80A;B80A;1105 1166 11A9;B80A;1105 1166 11A9; B80B;B80B;1105 1166 11AA;B80B;1105 1166 11AA; B80C;B80C;1105 1166 11AB;B80C;1105 1166 11AB; B80D;B80D;1105 1166 11AC;B80D;1105 1166 11AC; B80E;B80E;1105 1166 11AD;B80E;1105 1166 11AD; B80F;B80F;1105 1166 11AE;B80F;1105 1166 11AE; B810;B810;1105 1166 11AF;B810;1105 1166 11AF; B811;B811;1105 1166 11B0;B811;1105 1166 11B0; B812;B812;1105 1166 11B1;B812;1105 1166 11B1; B813;B813;1105 1166 11B2;B813;1105 1166 11B2; B814;B814;1105 1166 11B3;B814;1105 1166 11B3; B815;B815;1105 1166 11B4;B815;1105 1166 11B4; B816;B816;1105 1166 11B5;B816;1105 1166 11B5; B817;B817;1105 1166 11B6;B817;1105 1166 11B6; B818;B818;1105 1166 11B7;B818;1105 1166 11B7; B819;B819;1105 1166 11B8;B819;1105 1166 11B8; B81A;B81A;1105 1166 11B9;B81A;1105 1166 11B9; B81B;B81B;1105 1166 11BA;B81B;1105 1166 11BA; B81C;B81C;1105 1166 11BB;B81C;1105 1166 11BB; B81D;B81D;1105 1166 11BC;B81D;1105 1166 11BC; B81E;B81E;1105 1166 11BD;B81E;1105 1166 11BD; B81F;B81F;1105 1166 11BE;B81F;1105 1166 11BE; B820;B820;1105 1166 11BF;B820;1105 1166 11BF; B821;B821;1105 1166 11C0;B821;1105 1166 11C0; B822;B822;1105 1166 11C1;B822;1105 1166 11C1; B823;B823;1105 1166 11C2;B823;1105 1166 11C2; B824;B824;1105 1167;B824;1105 1167; B825;B825;1105 1167 11A8;B825;1105 1167 11A8; B826;B826;1105 1167 11A9;B826;1105 1167 11A9; B827;B827;1105 1167 11AA;B827;1105 1167 11AA; B828;B828;1105 1167 11AB;B828;1105 1167 11AB; B829;B829;1105 1167 11AC;B829;1105 1167 11AC; B82A;B82A;1105 1167 11AD;B82A;1105 1167 11AD; B82B;B82B;1105 1167 11AE;B82B;1105 1167 11AE; B82C;B82C;1105 1167 11AF;B82C;1105 1167 11AF; B82D;B82D;1105 1167 11B0;B82D;1105 1167 11B0; B82E;B82E;1105 1167 11B1;B82E;1105 1167 11B1; B82F;B82F;1105 1167 11B2;B82F;1105 1167 11B2; B830;B830;1105 1167 11B3;B830;1105 1167 11B3; B831;B831;1105 1167 11B4;B831;1105 1167 11B4; B832;B832;1105 1167 11B5;B832;1105 1167 11B5; B833;B833;1105 1167 11B6;B833;1105 1167 11B6; B834;B834;1105 1167 11B7;B834;1105 1167 11B7; B835;B835;1105 1167 11B8;B835;1105 1167 11B8; B836;B836;1105 1167 11B9;B836;1105 1167 11B9; B837;B837;1105 1167 11BA;B837;1105 1167 11BA; B838;B838;1105 1167 11BB;B838;1105 1167 11BB; B839;B839;1105 1167 11BC;B839;1105 1167 11BC; B83A;B83A;1105 1167 11BD;B83A;1105 1167 11BD; B83B;B83B;1105 1167 11BE;B83B;1105 1167 11BE; B83C;B83C;1105 1167 11BF;B83C;1105 1167 11BF; B83D;B83D;1105 1167 11C0;B83D;1105 1167 11C0; B83E;B83E;1105 1167 11C1;B83E;1105 1167 11C1; B83F;B83F;1105 1167 11C2;B83F;1105 1167 11C2; B840;B840;1105 1168;B840;1105 1168; B841;B841;1105 1168 11A8;B841;1105 1168 11A8; B842;B842;1105 1168 11A9;B842;1105 1168 11A9; B843;B843;1105 1168 11AA;B843;1105 1168 11AA; B844;B844;1105 1168 11AB;B844;1105 1168 11AB; B845;B845;1105 1168 11AC;B845;1105 1168 11AC; B846;B846;1105 1168 11AD;B846;1105 1168 11AD; B847;B847;1105 1168 11AE;B847;1105 1168 11AE; B848;B848;1105 1168 11AF;B848;1105 1168 11AF; B849;B849;1105 1168 11B0;B849;1105 1168 11B0; B84A;B84A;1105 1168 11B1;B84A;1105 1168 11B1; B84B;B84B;1105 1168 11B2;B84B;1105 1168 11B2; B84C;B84C;1105 1168 11B3;B84C;1105 1168 11B3; B84D;B84D;1105 1168 11B4;B84D;1105 1168 11B4; B84E;B84E;1105 1168 11B5;B84E;1105 1168 11B5; B84F;B84F;1105 1168 11B6;B84F;1105 1168 11B6; B850;B850;1105 1168 11B7;B850;1105 1168 11B7; B851;B851;1105 1168 11B8;B851;1105 1168 11B8; B852;B852;1105 1168 11B9;B852;1105 1168 11B9; B853;B853;1105 1168 11BA;B853;1105 1168 11BA; B854;B854;1105 1168 11BB;B854;1105 1168 11BB; B855;B855;1105 1168 11BC;B855;1105 1168 11BC; B856;B856;1105 1168 11BD;B856;1105 1168 11BD; B857;B857;1105 1168 11BE;B857;1105 1168 11BE; B858;B858;1105 1168 11BF;B858;1105 1168 11BF; B859;B859;1105 1168 11C0;B859;1105 1168 11C0; B85A;B85A;1105 1168 11C1;B85A;1105 1168 11C1; B85B;B85B;1105 1168 11C2;B85B;1105 1168 11C2; B85C;B85C;1105 1169;B85C;1105 1169; B85D;B85D;1105 1169 11A8;B85D;1105 1169 11A8; B85E;B85E;1105 1169 11A9;B85E;1105 1169 11A9; B85F;B85F;1105 1169 11AA;B85F;1105 1169 11AA; B860;B860;1105 1169 11AB;B860;1105 1169 11AB; B861;B861;1105 1169 11AC;B861;1105 1169 11AC; B862;B862;1105 1169 11AD;B862;1105 1169 11AD; B863;B863;1105 1169 11AE;B863;1105 1169 11AE; B864;B864;1105 1169 11AF;B864;1105 1169 11AF; B865;B865;1105 1169 11B0;B865;1105 1169 11B0; B866;B866;1105 1169 11B1;B866;1105 1169 11B1; B867;B867;1105 1169 11B2;B867;1105 1169 11B2; B868;B868;1105 1169 11B3;B868;1105 1169 11B3; B869;B869;1105 1169 11B4;B869;1105 1169 11B4; B86A;B86A;1105 1169 11B5;B86A;1105 1169 11B5; B86B;B86B;1105 1169 11B6;B86B;1105 1169 11B6; B86C;B86C;1105 1169 11B7;B86C;1105 1169 11B7; B86D;B86D;1105 1169 11B8;B86D;1105 1169 11B8; B86E;B86E;1105 1169 11B9;B86E;1105 1169 11B9; B86F;B86F;1105 1169 11BA;B86F;1105 1169 11BA; B870;B870;1105 1169 11BB;B870;1105 1169 11BB; B871;B871;1105 1169 11BC;B871;1105 1169 11BC; B872;B872;1105 1169 11BD;B872;1105 1169 11BD; B873;B873;1105 1169 11BE;B873;1105 1169 11BE; B874;B874;1105 1169 11BF;B874;1105 1169 11BF; B875;B875;1105 1169 11C0;B875;1105 1169 11C0; B876;B876;1105 1169 11C1;B876;1105 1169 11C1; B877;B877;1105 1169 11C2;B877;1105 1169 11C2; B878;B878;1105 116A;B878;1105 116A; B879;B879;1105 116A 11A8;B879;1105 116A 11A8; B87A;B87A;1105 116A 11A9;B87A;1105 116A 11A9; B87B;B87B;1105 116A 11AA;B87B;1105 116A 11AA; B87C;B87C;1105 116A 11AB;B87C;1105 116A 11AB; B87D;B87D;1105 116A 11AC;B87D;1105 116A 11AC; B87E;B87E;1105 116A 11AD;B87E;1105 116A 11AD; B87F;B87F;1105 116A 11AE;B87F;1105 116A 11AE; B880;B880;1105 116A 11AF;B880;1105 116A 11AF; B881;B881;1105 116A 11B0;B881;1105 116A 11B0; B882;B882;1105 116A 11B1;B882;1105 116A 11B1; B883;B883;1105 116A 11B2;B883;1105 116A 11B2; B884;B884;1105 116A 11B3;B884;1105 116A 11B3; B885;B885;1105 116A 11B4;B885;1105 116A 11B4; B886;B886;1105 116A 11B5;B886;1105 116A 11B5; B887;B887;1105 116A 11B6;B887;1105 116A 11B6; B888;B888;1105 116A 11B7;B888;1105 116A 11B7; B889;B889;1105 116A 11B8;B889;1105 116A 11B8; B88A;B88A;1105 116A 11B9;B88A;1105 116A 11B9; B88B;B88B;1105 116A 11BA;B88B;1105 116A 11BA; B88C;B88C;1105 116A 11BB;B88C;1105 116A 11BB; B88D;B88D;1105 116A 11BC;B88D;1105 116A 11BC; B88E;B88E;1105 116A 11BD;B88E;1105 116A 11BD; B88F;B88F;1105 116A 11BE;B88F;1105 116A 11BE; B890;B890;1105 116A 11BF;B890;1105 116A 11BF; B891;B891;1105 116A 11C0;B891;1105 116A 11C0; B892;B892;1105 116A 11C1;B892;1105 116A 11C1; B893;B893;1105 116A 11C2;B893;1105 116A 11C2; B894;B894;1105 116B;B894;1105 116B; B895;B895;1105 116B 11A8;B895;1105 116B 11A8; B896;B896;1105 116B 11A9;B896;1105 116B 11A9; B897;B897;1105 116B 11AA;B897;1105 116B 11AA; B898;B898;1105 116B 11AB;B898;1105 116B 11AB; B899;B899;1105 116B 11AC;B899;1105 116B 11AC; B89A;B89A;1105 116B 11AD;B89A;1105 116B 11AD; B89B;B89B;1105 116B 11AE;B89B;1105 116B 11AE; B89C;B89C;1105 116B 11AF;B89C;1105 116B 11AF; B89D;B89D;1105 116B 11B0;B89D;1105 116B 11B0; B89E;B89E;1105 116B 11B1;B89E;1105 116B 11B1; B89F;B89F;1105 116B 11B2;B89F;1105 116B 11B2; B8A0;B8A0;1105 116B 11B3;B8A0;1105 116B 11B3; B8A1;B8A1;1105 116B 11B4;B8A1;1105 116B 11B4; B8A2;B8A2;1105 116B 11B5;B8A2;1105 116B 11B5; B8A3;B8A3;1105 116B 11B6;B8A3;1105 116B 11B6; B8A4;B8A4;1105 116B 11B7;B8A4;1105 116B 11B7; B8A5;B8A5;1105 116B 11B8;B8A5;1105 116B 11B8; B8A6;B8A6;1105 116B 11B9;B8A6;1105 116B 11B9; B8A7;B8A7;1105 116B 11BA;B8A7;1105 116B 11BA; B8A8;B8A8;1105 116B 11BB;B8A8;1105 116B 11BB; B8A9;B8A9;1105 116B 11BC;B8A9;1105 116B 11BC; B8AA;B8AA;1105 116B 11BD;B8AA;1105 116B 11BD; B8AB;B8AB;1105 116B 11BE;B8AB;1105 116B 11BE; B8AC;B8AC;1105 116B 11BF;B8AC;1105 116B 11BF; B8AD;B8AD;1105 116B 11C0;B8AD;1105 116B 11C0; B8AE;B8AE;1105 116B 11C1;B8AE;1105 116B 11C1; B8AF;B8AF;1105 116B 11C2;B8AF;1105 116B 11C2; B8B0;B8B0;1105 116C;B8B0;1105 116C; B8B1;B8B1;1105 116C 11A8;B8B1;1105 116C 11A8; B8B2;B8B2;1105 116C 11A9;B8B2;1105 116C 11A9; B8B3;B8B3;1105 116C 11AA;B8B3;1105 116C 11AA; B8B4;B8B4;1105 116C 11AB;B8B4;1105 116C 11AB; B8B5;B8B5;1105 116C 11AC;B8B5;1105 116C 11AC; B8B6;B8B6;1105 116C 11AD;B8B6;1105 116C 11AD; B8B7;B8B7;1105 116C 11AE;B8B7;1105 116C 11AE; B8B8;B8B8;1105 116C 11AF;B8B8;1105 116C 11AF; B8B9;B8B9;1105 116C 11B0;B8B9;1105 116C 11B0; B8BA;B8BA;1105 116C 11B1;B8BA;1105 116C 11B1; B8BB;B8BB;1105 116C 11B2;B8BB;1105 116C 11B2; B8BC;B8BC;1105 116C 11B3;B8BC;1105 116C 11B3; B8BD;B8BD;1105 116C 11B4;B8BD;1105 116C 11B4; B8BE;B8BE;1105 116C 11B5;B8BE;1105 116C 11B5; B8BF;B8BF;1105 116C 11B6;B8BF;1105 116C 11B6; B8C0;B8C0;1105 116C 11B7;B8C0;1105 116C 11B7; B8C1;B8C1;1105 116C 11B8;B8C1;1105 116C 11B8; B8C2;B8C2;1105 116C 11B9;B8C2;1105 116C 11B9; B8C3;B8C3;1105 116C 11BA;B8C3;1105 116C 11BA; B8C4;B8C4;1105 116C 11BB;B8C4;1105 116C 11BB; B8C5;B8C5;1105 116C 11BC;B8C5;1105 116C 11BC; B8C6;B8C6;1105 116C 11BD;B8C6;1105 116C 11BD; B8C7;B8C7;1105 116C 11BE;B8C7;1105 116C 11BE; B8C8;B8C8;1105 116C 11BF;B8C8;1105 116C 11BF; B8C9;B8C9;1105 116C 11C0;B8C9;1105 116C 11C0; B8CA;B8CA;1105 116C 11C1;B8CA;1105 116C 11C1; B8CB;B8CB;1105 116C 11C2;B8CB;1105 116C 11C2; B8CC;B8CC;1105 116D;B8CC;1105 116D; B8CD;B8CD;1105 116D 11A8;B8CD;1105 116D 11A8; B8CE;B8CE;1105 116D 11A9;B8CE;1105 116D 11A9; B8CF;B8CF;1105 116D 11AA;B8CF;1105 116D 11AA; B8D0;B8D0;1105 116D 11AB;B8D0;1105 116D 11AB; B8D1;B8D1;1105 116D 11AC;B8D1;1105 116D 11AC; B8D2;B8D2;1105 116D 11AD;B8D2;1105 116D 11AD; B8D3;B8D3;1105 116D 11AE;B8D3;1105 116D 11AE; B8D4;B8D4;1105 116D 11AF;B8D4;1105 116D 11AF; B8D5;B8D5;1105 116D 11B0;B8D5;1105 116D 11B0; B8D6;B8D6;1105 116D 11B1;B8D6;1105 116D 11B1; B8D7;B8D7;1105 116D 11B2;B8D7;1105 116D 11B2; B8D8;B8D8;1105 116D 11B3;B8D8;1105 116D 11B3; B8D9;B8D9;1105 116D 11B4;B8D9;1105 116D 11B4; B8DA;B8DA;1105 116D 11B5;B8DA;1105 116D 11B5; B8DB;B8DB;1105 116D 11B6;B8DB;1105 116D 11B6; B8DC;B8DC;1105 116D 11B7;B8DC;1105 116D 11B7; B8DD;B8DD;1105 116D 11B8;B8DD;1105 116D 11B8; B8DE;B8DE;1105 116D 11B9;B8DE;1105 116D 11B9; B8DF;B8DF;1105 116D 11BA;B8DF;1105 116D 11BA; B8E0;B8E0;1105 116D 11BB;B8E0;1105 116D 11BB; B8E1;B8E1;1105 116D 11BC;B8E1;1105 116D 11BC; B8E2;B8E2;1105 116D 11BD;B8E2;1105 116D 11BD; B8E3;B8E3;1105 116D 11BE;B8E3;1105 116D 11BE; B8E4;B8E4;1105 116D 11BF;B8E4;1105 116D 11BF; B8E5;B8E5;1105 116D 11C0;B8E5;1105 116D 11C0; B8E6;B8E6;1105 116D 11C1;B8E6;1105 116D 11C1; B8E7;B8E7;1105 116D 11C2;B8E7;1105 116D 11C2; B8E8;B8E8;1105 116E;B8E8;1105 116E; B8E9;B8E9;1105 116E 11A8;B8E9;1105 116E 11A8; B8EA;B8EA;1105 116E 11A9;B8EA;1105 116E 11A9; B8EB;B8EB;1105 116E 11AA;B8EB;1105 116E 11AA; B8EC;B8EC;1105 116E 11AB;B8EC;1105 116E 11AB; B8ED;B8ED;1105 116E 11AC;B8ED;1105 116E 11AC; B8EE;B8EE;1105 116E 11AD;B8EE;1105 116E 11AD; B8EF;B8EF;1105 116E 11AE;B8EF;1105 116E 11AE; B8F0;B8F0;1105 116E 11AF;B8F0;1105 116E 11AF; B8F1;B8F1;1105 116E 11B0;B8F1;1105 116E 11B0; B8F2;B8F2;1105 116E 11B1;B8F2;1105 116E 11B1; B8F3;B8F3;1105 116E 11B2;B8F3;1105 116E 11B2; B8F4;B8F4;1105 116E 11B3;B8F4;1105 116E 11B3; B8F5;B8F5;1105 116E 11B4;B8F5;1105 116E 11B4; B8F6;B8F6;1105 116E 11B5;B8F6;1105 116E 11B5; B8F7;B8F7;1105 116E 11B6;B8F7;1105 116E 11B6; B8F8;B8F8;1105 116E 11B7;B8F8;1105 116E 11B7; B8F9;B8F9;1105 116E 11B8;B8F9;1105 116E 11B8; B8FA;B8FA;1105 116E 11B9;B8FA;1105 116E 11B9; B8FB;B8FB;1105 116E 11BA;B8FB;1105 116E 11BA; B8FC;B8FC;1105 116E 11BB;B8FC;1105 116E 11BB; B8FD;B8FD;1105 116E 11BC;B8FD;1105 116E 11BC; B8FE;B8FE;1105 116E 11BD;B8FE;1105 116E 11BD; B8FF;B8FF;1105 116E 11BE;B8FF;1105 116E 11BE; B900;B900;1105 116E 11BF;B900;1105 116E 11BF; B901;B901;1105 116E 11C0;B901;1105 116E 11C0; B902;B902;1105 116E 11C1;B902;1105 116E 11C1; B903;B903;1105 116E 11C2;B903;1105 116E 11C2; B904;B904;1105 116F;B904;1105 116F; B905;B905;1105 116F 11A8;B905;1105 116F 11A8; B906;B906;1105 116F 11A9;B906;1105 116F 11A9; B907;B907;1105 116F 11AA;B907;1105 116F 11AA; B908;B908;1105 116F 11AB;B908;1105 116F 11AB; B909;B909;1105 116F 11AC;B909;1105 116F 11AC; B90A;B90A;1105 116F 11AD;B90A;1105 116F 11AD; B90B;B90B;1105 116F 11AE;B90B;1105 116F 11AE; B90C;B90C;1105 116F 11AF;B90C;1105 116F 11AF; B90D;B90D;1105 116F 11B0;B90D;1105 116F 11B0; B90E;B90E;1105 116F 11B1;B90E;1105 116F 11B1; B90F;B90F;1105 116F 11B2;B90F;1105 116F 11B2; B910;B910;1105 116F 11B3;B910;1105 116F 11B3; B911;B911;1105 116F 11B4;B911;1105 116F 11B4; B912;B912;1105 116F 11B5;B912;1105 116F 11B5; B913;B913;1105 116F 11B6;B913;1105 116F 11B6; B914;B914;1105 116F 11B7;B914;1105 116F 11B7; B915;B915;1105 116F 11B8;B915;1105 116F 11B8; B916;B916;1105 116F 11B9;B916;1105 116F 11B9; B917;B917;1105 116F 11BA;B917;1105 116F 11BA; B918;B918;1105 116F 11BB;B918;1105 116F 11BB; B919;B919;1105 116F 11BC;B919;1105 116F 11BC; B91A;B91A;1105 116F 11BD;B91A;1105 116F 11BD; B91B;B91B;1105 116F 11BE;B91B;1105 116F 11BE; B91C;B91C;1105 116F 11BF;B91C;1105 116F 11BF; B91D;B91D;1105 116F 11C0;B91D;1105 116F 11C0; B91E;B91E;1105 116F 11C1;B91E;1105 116F 11C1; B91F;B91F;1105 116F 11C2;B91F;1105 116F 11C2; B920;B920;1105 1170;B920;1105 1170; B921;B921;1105 1170 11A8;B921;1105 1170 11A8; B922;B922;1105 1170 11A9;B922;1105 1170 11A9; B923;B923;1105 1170 11AA;B923;1105 1170 11AA; B924;B924;1105 1170 11AB;B924;1105 1170 11AB; B925;B925;1105 1170 11AC;B925;1105 1170 11AC; B926;B926;1105 1170 11AD;B926;1105 1170 11AD; B927;B927;1105 1170 11AE;B927;1105 1170 11AE; B928;B928;1105 1170 11AF;B928;1105 1170 11AF; B929;B929;1105 1170 11B0;B929;1105 1170 11B0; B92A;B92A;1105 1170 11B1;B92A;1105 1170 11B1; B92B;B92B;1105 1170 11B2;B92B;1105 1170 11B2; B92C;B92C;1105 1170 11B3;B92C;1105 1170 11B3; B92D;B92D;1105 1170 11B4;B92D;1105 1170 11B4; B92E;B92E;1105 1170 11B5;B92E;1105 1170 11B5; B92F;B92F;1105 1170 11B6;B92F;1105 1170 11B6; B930;B930;1105 1170 11B7;B930;1105 1170 11B7; B931;B931;1105 1170 11B8;B931;1105 1170 11B8; B932;B932;1105 1170 11B9;B932;1105 1170 11B9; B933;B933;1105 1170 11BA;B933;1105 1170 11BA; B934;B934;1105 1170 11BB;B934;1105 1170 11BB; B935;B935;1105 1170 11BC;B935;1105 1170 11BC; B936;B936;1105 1170 11BD;B936;1105 1170 11BD; B937;B937;1105 1170 11BE;B937;1105 1170 11BE; B938;B938;1105 1170 11BF;B938;1105 1170 11BF; B939;B939;1105 1170 11C0;B939;1105 1170 11C0; B93A;B93A;1105 1170 11C1;B93A;1105 1170 11C1; B93B;B93B;1105 1170 11C2;B93B;1105 1170 11C2; B93C;B93C;1105 1171;B93C;1105 1171; B93D;B93D;1105 1171 11A8;B93D;1105 1171 11A8; B93E;B93E;1105 1171 11A9;B93E;1105 1171 11A9; B93F;B93F;1105 1171 11AA;B93F;1105 1171 11AA; B940;B940;1105 1171 11AB;B940;1105 1171 11AB; B941;B941;1105 1171 11AC;B941;1105 1171 11AC; B942;B942;1105 1171 11AD;B942;1105 1171 11AD; B943;B943;1105 1171 11AE;B943;1105 1171 11AE; B944;B944;1105 1171 11AF;B944;1105 1171 11AF; B945;B945;1105 1171 11B0;B945;1105 1171 11B0; B946;B946;1105 1171 11B1;B946;1105 1171 11B1; B947;B947;1105 1171 11B2;B947;1105 1171 11B2; B948;B948;1105 1171 11B3;B948;1105 1171 11B3; B949;B949;1105 1171 11B4;B949;1105 1171 11B4; B94A;B94A;1105 1171 11B5;B94A;1105 1171 11B5; B94B;B94B;1105 1171 11B6;B94B;1105 1171 11B6; B94C;B94C;1105 1171 11B7;B94C;1105 1171 11B7; B94D;B94D;1105 1171 11B8;B94D;1105 1171 11B8; B94E;B94E;1105 1171 11B9;B94E;1105 1171 11B9; B94F;B94F;1105 1171 11BA;B94F;1105 1171 11BA; B950;B950;1105 1171 11BB;B950;1105 1171 11BB; B951;B951;1105 1171 11BC;B951;1105 1171 11BC; B952;B952;1105 1171 11BD;B952;1105 1171 11BD; B953;B953;1105 1171 11BE;B953;1105 1171 11BE; B954;B954;1105 1171 11BF;B954;1105 1171 11BF; B955;B955;1105 1171 11C0;B955;1105 1171 11C0; B956;B956;1105 1171 11C1;B956;1105 1171 11C1; B957;B957;1105 1171 11C2;B957;1105 1171 11C2; B958;B958;1105 1172;B958;1105 1172; B959;B959;1105 1172 11A8;B959;1105 1172 11A8; B95A;B95A;1105 1172 11A9;B95A;1105 1172 11A9; B95B;B95B;1105 1172 11AA;B95B;1105 1172 11AA; B95C;B95C;1105 1172 11AB;B95C;1105 1172 11AB; B95D;B95D;1105 1172 11AC;B95D;1105 1172 11AC; B95E;B95E;1105 1172 11AD;B95E;1105 1172 11AD; B95F;B95F;1105 1172 11AE;B95F;1105 1172 11AE; B960;B960;1105 1172 11AF;B960;1105 1172 11AF; B961;B961;1105 1172 11B0;B961;1105 1172 11B0; B962;B962;1105 1172 11B1;B962;1105 1172 11B1; B963;B963;1105 1172 11B2;B963;1105 1172 11B2; B964;B964;1105 1172 11B3;B964;1105 1172 11B3; B965;B965;1105 1172 11B4;B965;1105 1172 11B4; B966;B966;1105 1172 11B5;B966;1105 1172 11B5; B967;B967;1105 1172 11B6;B967;1105 1172 11B6; B968;B968;1105 1172 11B7;B968;1105 1172 11B7; B969;B969;1105 1172 11B8;B969;1105 1172 11B8; B96A;B96A;1105 1172 11B9;B96A;1105 1172 11B9; B96B;B96B;1105 1172 11BA;B96B;1105 1172 11BA; B96C;B96C;1105 1172 11BB;B96C;1105 1172 11BB; B96D;B96D;1105 1172 11BC;B96D;1105 1172 11BC; B96E;B96E;1105 1172 11BD;B96E;1105 1172 11BD; B96F;B96F;1105 1172 11BE;B96F;1105 1172 11BE; B970;B970;1105 1172 11BF;B970;1105 1172 11BF; B971;B971;1105 1172 11C0;B971;1105 1172 11C0; B972;B972;1105 1172 11C1;B972;1105 1172 11C1; B973;B973;1105 1172 11C2;B973;1105 1172 11C2; B974;B974;1105 1173;B974;1105 1173; B975;B975;1105 1173 11A8;B975;1105 1173 11A8; B976;B976;1105 1173 11A9;B976;1105 1173 11A9; B977;B977;1105 1173 11AA;B977;1105 1173 11AA; B978;B978;1105 1173 11AB;B978;1105 1173 11AB; B979;B979;1105 1173 11AC;B979;1105 1173 11AC; B97A;B97A;1105 1173 11AD;B97A;1105 1173 11AD; B97B;B97B;1105 1173 11AE;B97B;1105 1173 11AE; B97C;B97C;1105 1173 11AF;B97C;1105 1173 11AF; B97D;B97D;1105 1173 11B0;B97D;1105 1173 11B0; B97E;B97E;1105 1173 11B1;B97E;1105 1173 11B1; B97F;B97F;1105 1173 11B2;B97F;1105 1173 11B2; B980;B980;1105 1173 11B3;B980;1105 1173 11B3; B981;B981;1105 1173 11B4;B981;1105 1173 11B4; B982;B982;1105 1173 11B5;B982;1105 1173 11B5; B983;B983;1105 1173 11B6;B983;1105 1173 11B6; B984;B984;1105 1173 11B7;B984;1105 1173 11B7; B985;B985;1105 1173 11B8;B985;1105 1173 11B8; B986;B986;1105 1173 11B9;B986;1105 1173 11B9; B987;B987;1105 1173 11BA;B987;1105 1173 11BA; B988;B988;1105 1173 11BB;B988;1105 1173 11BB; B989;B989;1105 1173 11BC;B989;1105 1173 11BC; B98A;B98A;1105 1173 11BD;B98A;1105 1173 11BD; B98B;B98B;1105 1173 11BE;B98B;1105 1173 11BE; B98C;B98C;1105 1173 11BF;B98C;1105 1173 11BF; B98D;B98D;1105 1173 11C0;B98D;1105 1173 11C0; B98E;B98E;1105 1173 11C1;B98E;1105 1173 11C1; B98F;B98F;1105 1173 11C2;B98F;1105 1173 11C2; B990;B990;1105 1174;B990;1105 1174; B991;B991;1105 1174 11A8;B991;1105 1174 11A8; B992;B992;1105 1174 11A9;B992;1105 1174 11A9; B993;B993;1105 1174 11AA;B993;1105 1174 11AA; B994;B994;1105 1174 11AB;B994;1105 1174 11AB; B995;B995;1105 1174 11AC;B995;1105 1174 11AC; B996;B996;1105 1174 11AD;B996;1105 1174 11AD; B997;B997;1105 1174 11AE;B997;1105 1174 11AE; B998;B998;1105 1174 11AF;B998;1105 1174 11AF; B999;B999;1105 1174 11B0;B999;1105 1174 11B0; B99A;B99A;1105 1174 11B1;B99A;1105 1174 11B1; B99B;B99B;1105 1174 11B2;B99B;1105 1174 11B2; B99C;B99C;1105 1174 11B3;B99C;1105 1174 11B3; B99D;B99D;1105 1174 11B4;B99D;1105 1174 11B4; B99E;B99E;1105 1174 11B5;B99E;1105 1174 11B5; B99F;B99F;1105 1174 11B6;B99F;1105 1174 11B6; B9A0;B9A0;1105 1174 11B7;B9A0;1105 1174 11B7; B9A1;B9A1;1105 1174 11B8;B9A1;1105 1174 11B8; B9A2;B9A2;1105 1174 11B9;B9A2;1105 1174 11B9; B9A3;B9A3;1105 1174 11BA;B9A3;1105 1174 11BA; B9A4;B9A4;1105 1174 11BB;B9A4;1105 1174 11BB; B9A5;B9A5;1105 1174 11BC;B9A5;1105 1174 11BC; B9A6;B9A6;1105 1174 11BD;B9A6;1105 1174 11BD; B9A7;B9A7;1105 1174 11BE;B9A7;1105 1174 11BE; B9A8;B9A8;1105 1174 11BF;B9A8;1105 1174 11BF; B9A9;B9A9;1105 1174 11C0;B9A9;1105 1174 11C0; B9AA;B9AA;1105 1174 11C1;B9AA;1105 1174 11C1; B9AB;B9AB;1105 1174 11C2;B9AB;1105 1174 11C2; B9AC;B9AC;1105 1175;B9AC;1105 1175; B9AD;B9AD;1105 1175 11A8;B9AD;1105 1175 11A8; B9AE;B9AE;1105 1175 11A9;B9AE;1105 1175 11A9; B9AF;B9AF;1105 1175 11AA;B9AF;1105 1175 11AA; B9B0;B9B0;1105 1175 11AB;B9B0;1105 1175 11AB; B9B1;B9B1;1105 1175 11AC;B9B1;1105 1175 11AC; B9B2;B9B2;1105 1175 11AD;B9B2;1105 1175 11AD; B9B3;B9B3;1105 1175 11AE;B9B3;1105 1175 11AE; B9B4;B9B4;1105 1175 11AF;B9B4;1105 1175 11AF; B9B5;B9B5;1105 1175 11B0;B9B5;1105 1175 11B0; B9B6;B9B6;1105 1175 11B1;B9B6;1105 1175 11B1; B9B7;B9B7;1105 1175 11B2;B9B7;1105 1175 11B2; B9B8;B9B8;1105 1175 11B3;B9B8;1105 1175 11B3; B9B9;B9B9;1105 1175 11B4;B9B9;1105 1175 11B4; B9BA;B9BA;1105 1175 11B5;B9BA;1105 1175 11B5; B9BB;B9BB;1105 1175 11B6;B9BB;1105 1175 11B6; B9BC;B9BC;1105 1175 11B7;B9BC;1105 1175 11B7; B9BD;B9BD;1105 1175 11B8;B9BD;1105 1175 11B8; B9BE;B9BE;1105 1175 11B9;B9BE;1105 1175 11B9; B9BF;B9BF;1105 1175 11BA;B9BF;1105 1175 11BA; B9C0;B9C0;1105 1175 11BB;B9C0;1105 1175 11BB; B9C1;B9C1;1105 1175 11BC;B9C1;1105 1175 11BC; B9C2;B9C2;1105 1175 11BD;B9C2;1105 1175 11BD; B9C3;B9C3;1105 1175 11BE;B9C3;1105 1175 11BE; B9C4;B9C4;1105 1175 11BF;B9C4;1105 1175 11BF; B9C5;B9C5;1105 1175 11C0;B9C5;1105 1175 11C0; B9C6;B9C6;1105 1175 11C1;B9C6;1105 1175 11C1; B9C7;B9C7;1105 1175 11C2;B9C7;1105 1175 11C2; B9C8;B9C8;1106 1161;B9C8;1106 1161; B9C9;B9C9;1106 1161 11A8;B9C9;1106 1161 11A8; B9CA;B9CA;1106 1161 11A9;B9CA;1106 1161 11A9; B9CB;B9CB;1106 1161 11AA;B9CB;1106 1161 11AA; B9CC;B9CC;1106 1161 11AB;B9CC;1106 1161 11AB; B9CD;B9CD;1106 1161 11AC;B9CD;1106 1161 11AC; B9CE;B9CE;1106 1161 11AD;B9CE;1106 1161 11AD; B9CF;B9CF;1106 1161 11AE;B9CF;1106 1161 11AE; B9D0;B9D0;1106 1161 11AF;B9D0;1106 1161 11AF; B9D1;B9D1;1106 1161 11B0;B9D1;1106 1161 11B0; B9D2;B9D2;1106 1161 11B1;B9D2;1106 1161 11B1; B9D3;B9D3;1106 1161 11B2;B9D3;1106 1161 11B2; B9D4;B9D4;1106 1161 11B3;B9D4;1106 1161 11B3; B9D5;B9D5;1106 1161 11B4;B9D5;1106 1161 11B4; B9D6;B9D6;1106 1161 11B5;B9D6;1106 1161 11B5; B9D7;B9D7;1106 1161 11B6;B9D7;1106 1161 11B6; B9D8;B9D8;1106 1161 11B7;B9D8;1106 1161 11B7; B9D9;B9D9;1106 1161 11B8;B9D9;1106 1161 11B8; B9DA;B9DA;1106 1161 11B9;B9DA;1106 1161 11B9; B9DB;B9DB;1106 1161 11BA;B9DB;1106 1161 11BA; B9DC;B9DC;1106 1161 11BB;B9DC;1106 1161 11BB; B9DD;B9DD;1106 1161 11BC;B9DD;1106 1161 11BC; B9DE;B9DE;1106 1161 11BD;B9DE;1106 1161 11BD; B9DF;B9DF;1106 1161 11BE;B9DF;1106 1161 11BE; B9E0;B9E0;1106 1161 11BF;B9E0;1106 1161 11BF; B9E1;B9E1;1106 1161 11C0;B9E1;1106 1161 11C0; B9E2;B9E2;1106 1161 11C1;B9E2;1106 1161 11C1; B9E3;B9E3;1106 1161 11C2;B9E3;1106 1161 11C2; B9E4;B9E4;1106 1162;B9E4;1106 1162; B9E5;B9E5;1106 1162 11A8;B9E5;1106 1162 11A8; B9E6;B9E6;1106 1162 11A9;B9E6;1106 1162 11A9; B9E7;B9E7;1106 1162 11AA;B9E7;1106 1162 11AA; B9E8;B9E8;1106 1162 11AB;B9E8;1106 1162 11AB; B9E9;B9E9;1106 1162 11AC;B9E9;1106 1162 11AC; B9EA;B9EA;1106 1162 11AD;B9EA;1106 1162 11AD; B9EB;B9EB;1106 1162 11AE;B9EB;1106 1162 11AE; B9EC;B9EC;1106 1162 11AF;B9EC;1106 1162 11AF; B9ED;B9ED;1106 1162 11B0;B9ED;1106 1162 11B0; B9EE;B9EE;1106 1162 11B1;B9EE;1106 1162 11B1; B9EF;B9EF;1106 1162 11B2;B9EF;1106 1162 11B2; B9F0;B9F0;1106 1162 11B3;B9F0;1106 1162 11B3; B9F1;B9F1;1106 1162 11B4;B9F1;1106 1162 11B4; B9F2;B9F2;1106 1162 11B5;B9F2;1106 1162 11B5; B9F3;B9F3;1106 1162 11B6;B9F3;1106 1162 11B6; B9F4;B9F4;1106 1162 11B7;B9F4;1106 1162 11B7; B9F5;B9F5;1106 1162 11B8;B9F5;1106 1162 11B8; B9F6;B9F6;1106 1162 11B9;B9F6;1106 1162 11B9; B9F7;B9F7;1106 1162 11BA;B9F7;1106 1162 11BA; B9F8;B9F8;1106 1162 11BB;B9F8;1106 1162 11BB; B9F9;B9F9;1106 1162 11BC;B9F9;1106 1162 11BC; B9FA;B9FA;1106 1162 11BD;B9FA;1106 1162 11BD; B9FB;B9FB;1106 1162 11BE;B9FB;1106 1162 11BE; B9FC;B9FC;1106 1162 11BF;B9FC;1106 1162 11BF; B9FD;B9FD;1106 1162 11C0;B9FD;1106 1162 11C0; B9FE;B9FE;1106 1162 11C1;B9FE;1106 1162 11C1; B9FF;B9FF;1106 1162 11C2;B9FF;1106 1162 11C2; BA00;BA00;1106 1163;BA00;1106 1163; BA01;BA01;1106 1163 11A8;BA01;1106 1163 11A8; BA02;BA02;1106 1163 11A9;BA02;1106 1163 11A9; BA03;BA03;1106 1163 11AA;BA03;1106 1163 11AA; BA04;BA04;1106 1163 11AB;BA04;1106 1163 11AB; BA05;BA05;1106 1163 11AC;BA05;1106 1163 11AC; BA06;BA06;1106 1163 11AD;BA06;1106 1163 11AD; BA07;BA07;1106 1163 11AE;BA07;1106 1163 11AE; BA08;BA08;1106 1163 11AF;BA08;1106 1163 11AF; BA09;BA09;1106 1163 11B0;BA09;1106 1163 11B0; BA0A;BA0A;1106 1163 11B1;BA0A;1106 1163 11B1; BA0B;BA0B;1106 1163 11B2;BA0B;1106 1163 11B2; BA0C;BA0C;1106 1163 11B3;BA0C;1106 1163 11B3; BA0D;BA0D;1106 1163 11B4;BA0D;1106 1163 11B4; BA0E;BA0E;1106 1163 11B5;BA0E;1106 1163 11B5; BA0F;BA0F;1106 1163 11B6;BA0F;1106 1163 11B6; BA10;BA10;1106 1163 11B7;BA10;1106 1163 11B7; BA11;BA11;1106 1163 11B8;BA11;1106 1163 11B8; BA12;BA12;1106 1163 11B9;BA12;1106 1163 11B9; BA13;BA13;1106 1163 11BA;BA13;1106 1163 11BA; BA14;BA14;1106 1163 11BB;BA14;1106 1163 11BB; BA15;BA15;1106 1163 11BC;BA15;1106 1163 11BC; BA16;BA16;1106 1163 11BD;BA16;1106 1163 11BD; BA17;BA17;1106 1163 11BE;BA17;1106 1163 11BE; BA18;BA18;1106 1163 11BF;BA18;1106 1163 11BF; BA19;BA19;1106 1163 11C0;BA19;1106 1163 11C0; BA1A;BA1A;1106 1163 11C1;BA1A;1106 1163 11C1; BA1B;BA1B;1106 1163 11C2;BA1B;1106 1163 11C2; BA1C;BA1C;1106 1164;BA1C;1106 1164; BA1D;BA1D;1106 1164 11A8;BA1D;1106 1164 11A8; BA1E;BA1E;1106 1164 11A9;BA1E;1106 1164 11A9; BA1F;BA1F;1106 1164 11AA;BA1F;1106 1164 11AA; BA20;BA20;1106 1164 11AB;BA20;1106 1164 11AB; BA21;BA21;1106 1164 11AC;BA21;1106 1164 11AC; BA22;BA22;1106 1164 11AD;BA22;1106 1164 11AD; BA23;BA23;1106 1164 11AE;BA23;1106 1164 11AE; BA24;BA24;1106 1164 11AF;BA24;1106 1164 11AF; BA25;BA25;1106 1164 11B0;BA25;1106 1164 11B0; BA26;BA26;1106 1164 11B1;BA26;1106 1164 11B1; BA27;BA27;1106 1164 11B2;BA27;1106 1164 11B2; BA28;BA28;1106 1164 11B3;BA28;1106 1164 11B3; BA29;BA29;1106 1164 11B4;BA29;1106 1164 11B4; BA2A;BA2A;1106 1164 11B5;BA2A;1106 1164 11B5; BA2B;BA2B;1106 1164 11B6;BA2B;1106 1164 11B6; BA2C;BA2C;1106 1164 11B7;BA2C;1106 1164 11B7; BA2D;BA2D;1106 1164 11B8;BA2D;1106 1164 11B8; BA2E;BA2E;1106 1164 11B9;BA2E;1106 1164 11B9; BA2F;BA2F;1106 1164 11BA;BA2F;1106 1164 11BA; BA30;BA30;1106 1164 11BB;BA30;1106 1164 11BB; BA31;BA31;1106 1164 11BC;BA31;1106 1164 11BC; BA32;BA32;1106 1164 11BD;BA32;1106 1164 11BD; BA33;BA33;1106 1164 11BE;BA33;1106 1164 11BE; BA34;BA34;1106 1164 11BF;BA34;1106 1164 11BF; BA35;BA35;1106 1164 11C0;BA35;1106 1164 11C0; BA36;BA36;1106 1164 11C1;BA36;1106 1164 11C1; BA37;BA37;1106 1164 11C2;BA37;1106 1164 11C2; BA38;BA38;1106 1165;BA38;1106 1165; BA39;BA39;1106 1165 11A8;BA39;1106 1165 11A8; BA3A;BA3A;1106 1165 11A9;BA3A;1106 1165 11A9; BA3B;BA3B;1106 1165 11AA;BA3B;1106 1165 11AA; BA3C;BA3C;1106 1165 11AB;BA3C;1106 1165 11AB; BA3D;BA3D;1106 1165 11AC;BA3D;1106 1165 11AC; BA3E;BA3E;1106 1165 11AD;BA3E;1106 1165 11AD; BA3F;BA3F;1106 1165 11AE;BA3F;1106 1165 11AE; BA40;BA40;1106 1165 11AF;BA40;1106 1165 11AF; BA41;BA41;1106 1165 11B0;BA41;1106 1165 11B0; BA42;BA42;1106 1165 11B1;BA42;1106 1165 11B1; BA43;BA43;1106 1165 11B2;BA43;1106 1165 11B2; BA44;BA44;1106 1165 11B3;BA44;1106 1165 11B3; BA45;BA45;1106 1165 11B4;BA45;1106 1165 11B4; BA46;BA46;1106 1165 11B5;BA46;1106 1165 11B5; BA47;BA47;1106 1165 11B6;BA47;1106 1165 11B6; BA48;BA48;1106 1165 11B7;BA48;1106 1165 11B7; BA49;BA49;1106 1165 11B8;BA49;1106 1165 11B8; BA4A;BA4A;1106 1165 11B9;BA4A;1106 1165 11B9; BA4B;BA4B;1106 1165 11BA;BA4B;1106 1165 11BA; BA4C;BA4C;1106 1165 11BB;BA4C;1106 1165 11BB; BA4D;BA4D;1106 1165 11BC;BA4D;1106 1165 11BC; BA4E;BA4E;1106 1165 11BD;BA4E;1106 1165 11BD; BA4F;BA4F;1106 1165 11BE;BA4F;1106 1165 11BE; BA50;BA50;1106 1165 11BF;BA50;1106 1165 11BF; BA51;BA51;1106 1165 11C0;BA51;1106 1165 11C0; BA52;BA52;1106 1165 11C1;BA52;1106 1165 11C1; BA53;BA53;1106 1165 11C2;BA53;1106 1165 11C2; BA54;BA54;1106 1166;BA54;1106 1166; BA55;BA55;1106 1166 11A8;BA55;1106 1166 11A8; BA56;BA56;1106 1166 11A9;BA56;1106 1166 11A9; BA57;BA57;1106 1166 11AA;BA57;1106 1166 11AA; BA58;BA58;1106 1166 11AB;BA58;1106 1166 11AB; BA59;BA59;1106 1166 11AC;BA59;1106 1166 11AC; BA5A;BA5A;1106 1166 11AD;BA5A;1106 1166 11AD; BA5B;BA5B;1106 1166 11AE;BA5B;1106 1166 11AE; BA5C;BA5C;1106 1166 11AF;BA5C;1106 1166 11AF; BA5D;BA5D;1106 1166 11B0;BA5D;1106 1166 11B0; BA5E;BA5E;1106 1166 11B1;BA5E;1106 1166 11B1; BA5F;BA5F;1106 1166 11B2;BA5F;1106 1166 11B2; BA60;BA60;1106 1166 11B3;BA60;1106 1166 11B3; BA61;BA61;1106 1166 11B4;BA61;1106 1166 11B4; BA62;BA62;1106 1166 11B5;BA62;1106 1166 11B5; BA63;BA63;1106 1166 11B6;BA63;1106 1166 11B6; BA64;BA64;1106 1166 11B7;BA64;1106 1166 11B7; BA65;BA65;1106 1166 11B8;BA65;1106 1166 11B8; BA66;BA66;1106 1166 11B9;BA66;1106 1166 11B9; BA67;BA67;1106 1166 11BA;BA67;1106 1166 11BA; BA68;BA68;1106 1166 11BB;BA68;1106 1166 11BB; BA69;BA69;1106 1166 11BC;BA69;1106 1166 11BC; BA6A;BA6A;1106 1166 11BD;BA6A;1106 1166 11BD; BA6B;BA6B;1106 1166 11BE;BA6B;1106 1166 11BE; BA6C;BA6C;1106 1166 11BF;BA6C;1106 1166 11BF; BA6D;BA6D;1106 1166 11C0;BA6D;1106 1166 11C0; BA6E;BA6E;1106 1166 11C1;BA6E;1106 1166 11C1; BA6F;BA6F;1106 1166 11C2;BA6F;1106 1166 11C2; BA70;BA70;1106 1167;BA70;1106 1167; BA71;BA71;1106 1167 11A8;BA71;1106 1167 11A8; BA72;BA72;1106 1167 11A9;BA72;1106 1167 11A9; BA73;BA73;1106 1167 11AA;BA73;1106 1167 11AA; BA74;BA74;1106 1167 11AB;BA74;1106 1167 11AB; BA75;BA75;1106 1167 11AC;BA75;1106 1167 11AC; BA76;BA76;1106 1167 11AD;BA76;1106 1167 11AD; BA77;BA77;1106 1167 11AE;BA77;1106 1167 11AE; BA78;BA78;1106 1167 11AF;BA78;1106 1167 11AF; BA79;BA79;1106 1167 11B0;BA79;1106 1167 11B0; BA7A;BA7A;1106 1167 11B1;BA7A;1106 1167 11B1; BA7B;BA7B;1106 1167 11B2;BA7B;1106 1167 11B2; BA7C;BA7C;1106 1167 11B3;BA7C;1106 1167 11B3; BA7D;BA7D;1106 1167 11B4;BA7D;1106 1167 11B4; BA7E;BA7E;1106 1167 11B5;BA7E;1106 1167 11B5; BA7F;BA7F;1106 1167 11B6;BA7F;1106 1167 11B6; BA80;BA80;1106 1167 11B7;BA80;1106 1167 11B7; BA81;BA81;1106 1167 11B8;BA81;1106 1167 11B8; BA82;BA82;1106 1167 11B9;BA82;1106 1167 11B9; BA83;BA83;1106 1167 11BA;BA83;1106 1167 11BA; BA84;BA84;1106 1167 11BB;BA84;1106 1167 11BB; BA85;BA85;1106 1167 11BC;BA85;1106 1167 11BC; BA86;BA86;1106 1167 11BD;BA86;1106 1167 11BD; BA87;BA87;1106 1167 11BE;BA87;1106 1167 11BE; BA88;BA88;1106 1167 11BF;BA88;1106 1167 11BF; BA89;BA89;1106 1167 11C0;BA89;1106 1167 11C0; BA8A;BA8A;1106 1167 11C1;BA8A;1106 1167 11C1; BA8B;BA8B;1106 1167 11C2;BA8B;1106 1167 11C2; BA8C;BA8C;1106 1168;BA8C;1106 1168; BA8D;BA8D;1106 1168 11A8;BA8D;1106 1168 11A8; BA8E;BA8E;1106 1168 11A9;BA8E;1106 1168 11A9; BA8F;BA8F;1106 1168 11AA;BA8F;1106 1168 11AA; BA90;BA90;1106 1168 11AB;BA90;1106 1168 11AB; BA91;BA91;1106 1168 11AC;BA91;1106 1168 11AC; BA92;BA92;1106 1168 11AD;BA92;1106 1168 11AD; BA93;BA93;1106 1168 11AE;BA93;1106 1168 11AE; BA94;BA94;1106 1168 11AF;BA94;1106 1168 11AF; BA95;BA95;1106 1168 11B0;BA95;1106 1168 11B0; BA96;BA96;1106 1168 11B1;BA96;1106 1168 11B1; BA97;BA97;1106 1168 11B2;BA97;1106 1168 11B2; BA98;BA98;1106 1168 11B3;BA98;1106 1168 11B3; BA99;BA99;1106 1168 11B4;BA99;1106 1168 11B4; BA9A;BA9A;1106 1168 11B5;BA9A;1106 1168 11B5; BA9B;BA9B;1106 1168 11B6;BA9B;1106 1168 11B6; BA9C;BA9C;1106 1168 11B7;BA9C;1106 1168 11B7; BA9D;BA9D;1106 1168 11B8;BA9D;1106 1168 11B8; BA9E;BA9E;1106 1168 11B9;BA9E;1106 1168 11B9; BA9F;BA9F;1106 1168 11BA;BA9F;1106 1168 11BA; BAA0;BAA0;1106 1168 11BB;BAA0;1106 1168 11BB; BAA1;BAA1;1106 1168 11BC;BAA1;1106 1168 11BC; BAA2;BAA2;1106 1168 11BD;BAA2;1106 1168 11BD; BAA3;BAA3;1106 1168 11BE;BAA3;1106 1168 11BE; BAA4;BAA4;1106 1168 11BF;BAA4;1106 1168 11BF; BAA5;BAA5;1106 1168 11C0;BAA5;1106 1168 11C0; BAA6;BAA6;1106 1168 11C1;BAA6;1106 1168 11C1; BAA7;BAA7;1106 1168 11C2;BAA7;1106 1168 11C2; BAA8;BAA8;1106 1169;BAA8;1106 1169; BAA9;BAA9;1106 1169 11A8;BAA9;1106 1169 11A8; BAAA;BAAA;1106 1169 11A9;BAAA;1106 1169 11A9; BAAB;BAAB;1106 1169 11AA;BAAB;1106 1169 11AA; BAAC;BAAC;1106 1169 11AB;BAAC;1106 1169 11AB; BAAD;BAAD;1106 1169 11AC;BAAD;1106 1169 11AC; BAAE;BAAE;1106 1169 11AD;BAAE;1106 1169 11AD; BAAF;BAAF;1106 1169 11AE;BAAF;1106 1169 11AE; BAB0;BAB0;1106 1169 11AF;BAB0;1106 1169 11AF; BAB1;BAB1;1106 1169 11B0;BAB1;1106 1169 11B0; BAB2;BAB2;1106 1169 11B1;BAB2;1106 1169 11B1; BAB3;BAB3;1106 1169 11B2;BAB3;1106 1169 11B2; BAB4;BAB4;1106 1169 11B3;BAB4;1106 1169 11B3; BAB5;BAB5;1106 1169 11B4;BAB5;1106 1169 11B4; BAB6;BAB6;1106 1169 11B5;BAB6;1106 1169 11B5; BAB7;BAB7;1106 1169 11B6;BAB7;1106 1169 11B6; BAB8;BAB8;1106 1169 11B7;BAB8;1106 1169 11B7; BAB9;BAB9;1106 1169 11B8;BAB9;1106 1169 11B8; BABA;BABA;1106 1169 11B9;BABA;1106 1169 11B9; BABB;BABB;1106 1169 11BA;BABB;1106 1169 11BA; BABC;BABC;1106 1169 11BB;BABC;1106 1169 11BB; BABD;BABD;1106 1169 11BC;BABD;1106 1169 11BC; BABE;BABE;1106 1169 11BD;BABE;1106 1169 11BD; BABF;BABF;1106 1169 11BE;BABF;1106 1169 11BE; BAC0;BAC0;1106 1169 11BF;BAC0;1106 1169 11BF; BAC1;BAC1;1106 1169 11C0;BAC1;1106 1169 11C0; BAC2;BAC2;1106 1169 11C1;BAC2;1106 1169 11C1; BAC3;BAC3;1106 1169 11C2;BAC3;1106 1169 11C2; BAC4;BAC4;1106 116A;BAC4;1106 116A; BAC5;BAC5;1106 116A 11A8;BAC5;1106 116A 11A8; BAC6;BAC6;1106 116A 11A9;BAC6;1106 116A 11A9; BAC7;BAC7;1106 116A 11AA;BAC7;1106 116A 11AA; BAC8;BAC8;1106 116A 11AB;BAC8;1106 116A 11AB; BAC9;BAC9;1106 116A 11AC;BAC9;1106 116A 11AC; BACA;BACA;1106 116A 11AD;BACA;1106 116A 11AD; BACB;BACB;1106 116A 11AE;BACB;1106 116A 11AE; BACC;BACC;1106 116A 11AF;BACC;1106 116A 11AF; BACD;BACD;1106 116A 11B0;BACD;1106 116A 11B0; BACE;BACE;1106 116A 11B1;BACE;1106 116A 11B1; BACF;BACF;1106 116A 11B2;BACF;1106 116A 11B2; BAD0;BAD0;1106 116A 11B3;BAD0;1106 116A 11B3; BAD1;BAD1;1106 116A 11B4;BAD1;1106 116A 11B4; BAD2;BAD2;1106 116A 11B5;BAD2;1106 116A 11B5; BAD3;BAD3;1106 116A 11B6;BAD3;1106 116A 11B6; BAD4;BAD4;1106 116A 11B7;BAD4;1106 116A 11B7; BAD5;BAD5;1106 116A 11B8;BAD5;1106 116A 11B8; BAD6;BAD6;1106 116A 11B9;BAD6;1106 116A 11B9; BAD7;BAD7;1106 116A 11BA;BAD7;1106 116A 11BA; BAD8;BAD8;1106 116A 11BB;BAD8;1106 116A 11BB; BAD9;BAD9;1106 116A 11BC;BAD9;1106 116A 11BC; BADA;BADA;1106 116A 11BD;BADA;1106 116A 11BD; BADB;BADB;1106 116A 11BE;BADB;1106 116A 11BE; BADC;BADC;1106 116A 11BF;BADC;1106 116A 11BF; BADD;BADD;1106 116A 11C0;BADD;1106 116A 11C0; BADE;BADE;1106 116A 11C1;BADE;1106 116A 11C1; BADF;BADF;1106 116A 11C2;BADF;1106 116A 11C2; BAE0;BAE0;1106 116B;BAE0;1106 116B; BAE1;BAE1;1106 116B 11A8;BAE1;1106 116B 11A8; BAE2;BAE2;1106 116B 11A9;BAE2;1106 116B 11A9; BAE3;BAE3;1106 116B 11AA;BAE3;1106 116B 11AA; BAE4;BAE4;1106 116B 11AB;BAE4;1106 116B 11AB; BAE5;BAE5;1106 116B 11AC;BAE5;1106 116B 11AC; BAE6;BAE6;1106 116B 11AD;BAE6;1106 116B 11AD; BAE7;BAE7;1106 116B 11AE;BAE7;1106 116B 11AE; BAE8;BAE8;1106 116B 11AF;BAE8;1106 116B 11AF; BAE9;BAE9;1106 116B 11B0;BAE9;1106 116B 11B0; BAEA;BAEA;1106 116B 11B1;BAEA;1106 116B 11B1; BAEB;BAEB;1106 116B 11B2;BAEB;1106 116B 11B2; BAEC;BAEC;1106 116B 11B3;BAEC;1106 116B 11B3; BAED;BAED;1106 116B 11B4;BAED;1106 116B 11B4; BAEE;BAEE;1106 116B 11B5;BAEE;1106 116B 11B5; BAEF;BAEF;1106 116B 11B6;BAEF;1106 116B 11B6; BAF0;BAF0;1106 116B 11B7;BAF0;1106 116B 11B7; BAF1;BAF1;1106 116B 11B8;BAF1;1106 116B 11B8; BAF2;BAF2;1106 116B 11B9;BAF2;1106 116B 11B9; BAF3;BAF3;1106 116B 11BA;BAF3;1106 116B 11BA; BAF4;BAF4;1106 116B 11BB;BAF4;1106 116B 11BB; BAF5;BAF5;1106 116B 11BC;BAF5;1106 116B 11BC; BAF6;BAF6;1106 116B 11BD;BAF6;1106 116B 11BD; BAF7;BAF7;1106 116B 11BE;BAF7;1106 116B 11BE; BAF8;BAF8;1106 116B 11BF;BAF8;1106 116B 11BF; BAF9;BAF9;1106 116B 11C0;BAF9;1106 116B 11C0; BAFA;BAFA;1106 116B 11C1;BAFA;1106 116B 11C1; BAFB;BAFB;1106 116B 11C2;BAFB;1106 116B 11C2; BAFC;BAFC;1106 116C;BAFC;1106 116C; BAFD;BAFD;1106 116C 11A8;BAFD;1106 116C 11A8; BAFE;BAFE;1106 116C 11A9;BAFE;1106 116C 11A9; BAFF;BAFF;1106 116C 11AA;BAFF;1106 116C 11AA; BB00;BB00;1106 116C 11AB;BB00;1106 116C 11AB; BB01;BB01;1106 116C 11AC;BB01;1106 116C 11AC; BB02;BB02;1106 116C 11AD;BB02;1106 116C 11AD; BB03;BB03;1106 116C 11AE;BB03;1106 116C 11AE; BB04;BB04;1106 116C 11AF;BB04;1106 116C 11AF; BB05;BB05;1106 116C 11B0;BB05;1106 116C 11B0; BB06;BB06;1106 116C 11B1;BB06;1106 116C 11B1; BB07;BB07;1106 116C 11B2;BB07;1106 116C 11B2; BB08;BB08;1106 116C 11B3;BB08;1106 116C 11B3; BB09;BB09;1106 116C 11B4;BB09;1106 116C 11B4; BB0A;BB0A;1106 116C 11B5;BB0A;1106 116C 11B5; BB0B;BB0B;1106 116C 11B6;BB0B;1106 116C 11B6; BB0C;BB0C;1106 116C 11B7;BB0C;1106 116C 11B7; BB0D;BB0D;1106 116C 11B8;BB0D;1106 116C 11B8; BB0E;BB0E;1106 116C 11B9;BB0E;1106 116C 11B9; BB0F;BB0F;1106 116C 11BA;BB0F;1106 116C 11BA; BB10;BB10;1106 116C 11BB;BB10;1106 116C 11BB; BB11;BB11;1106 116C 11BC;BB11;1106 116C 11BC; BB12;BB12;1106 116C 11BD;BB12;1106 116C 11BD; BB13;BB13;1106 116C 11BE;BB13;1106 116C 11BE; BB14;BB14;1106 116C 11BF;BB14;1106 116C 11BF; BB15;BB15;1106 116C 11C0;BB15;1106 116C 11C0; BB16;BB16;1106 116C 11C1;BB16;1106 116C 11C1; BB17;BB17;1106 116C 11C2;BB17;1106 116C 11C2; BB18;BB18;1106 116D;BB18;1106 116D; BB19;BB19;1106 116D 11A8;BB19;1106 116D 11A8; BB1A;BB1A;1106 116D 11A9;BB1A;1106 116D 11A9; BB1B;BB1B;1106 116D 11AA;BB1B;1106 116D 11AA; BB1C;BB1C;1106 116D 11AB;BB1C;1106 116D 11AB; BB1D;BB1D;1106 116D 11AC;BB1D;1106 116D 11AC; BB1E;BB1E;1106 116D 11AD;BB1E;1106 116D 11AD; BB1F;BB1F;1106 116D 11AE;BB1F;1106 116D 11AE; BB20;BB20;1106 116D 11AF;BB20;1106 116D 11AF; BB21;BB21;1106 116D 11B0;BB21;1106 116D 11B0; BB22;BB22;1106 116D 11B1;BB22;1106 116D 11B1; BB23;BB23;1106 116D 11B2;BB23;1106 116D 11B2; BB24;BB24;1106 116D 11B3;BB24;1106 116D 11B3; BB25;BB25;1106 116D 11B4;BB25;1106 116D 11B4; BB26;BB26;1106 116D 11B5;BB26;1106 116D 11B5; BB27;BB27;1106 116D 11B6;BB27;1106 116D 11B6; BB28;BB28;1106 116D 11B7;BB28;1106 116D 11B7; BB29;BB29;1106 116D 11B8;BB29;1106 116D 11B8; BB2A;BB2A;1106 116D 11B9;BB2A;1106 116D 11B9; BB2B;BB2B;1106 116D 11BA;BB2B;1106 116D 11BA; BB2C;BB2C;1106 116D 11BB;BB2C;1106 116D 11BB; BB2D;BB2D;1106 116D 11BC;BB2D;1106 116D 11BC; BB2E;BB2E;1106 116D 11BD;BB2E;1106 116D 11BD; BB2F;BB2F;1106 116D 11BE;BB2F;1106 116D 11BE; BB30;BB30;1106 116D 11BF;BB30;1106 116D 11BF; BB31;BB31;1106 116D 11C0;BB31;1106 116D 11C0; BB32;BB32;1106 116D 11C1;BB32;1106 116D 11C1; BB33;BB33;1106 116D 11C2;BB33;1106 116D 11C2; BB34;BB34;1106 116E;BB34;1106 116E; BB35;BB35;1106 116E 11A8;BB35;1106 116E 11A8; BB36;BB36;1106 116E 11A9;BB36;1106 116E 11A9; BB37;BB37;1106 116E 11AA;BB37;1106 116E 11AA; BB38;BB38;1106 116E 11AB;BB38;1106 116E 11AB; BB39;BB39;1106 116E 11AC;BB39;1106 116E 11AC; BB3A;BB3A;1106 116E 11AD;BB3A;1106 116E 11AD; BB3B;BB3B;1106 116E 11AE;BB3B;1106 116E 11AE; BB3C;BB3C;1106 116E 11AF;BB3C;1106 116E 11AF; BB3D;BB3D;1106 116E 11B0;BB3D;1106 116E 11B0; BB3E;BB3E;1106 116E 11B1;BB3E;1106 116E 11B1; BB3F;BB3F;1106 116E 11B2;BB3F;1106 116E 11B2; BB40;BB40;1106 116E 11B3;BB40;1106 116E 11B3; BB41;BB41;1106 116E 11B4;BB41;1106 116E 11B4; BB42;BB42;1106 116E 11B5;BB42;1106 116E 11B5; BB43;BB43;1106 116E 11B6;BB43;1106 116E 11B6; BB44;BB44;1106 116E 11B7;BB44;1106 116E 11B7; BB45;BB45;1106 116E 11B8;BB45;1106 116E 11B8; BB46;BB46;1106 116E 11B9;BB46;1106 116E 11B9; BB47;BB47;1106 116E 11BA;BB47;1106 116E 11BA; BB48;BB48;1106 116E 11BB;BB48;1106 116E 11BB; BB49;BB49;1106 116E 11BC;BB49;1106 116E 11BC; BB4A;BB4A;1106 116E 11BD;BB4A;1106 116E 11BD; BB4B;BB4B;1106 116E 11BE;BB4B;1106 116E 11BE; BB4C;BB4C;1106 116E 11BF;BB4C;1106 116E 11BF; BB4D;BB4D;1106 116E 11C0;BB4D;1106 116E 11C0; BB4E;BB4E;1106 116E 11C1;BB4E;1106 116E 11C1; BB4F;BB4F;1106 116E 11C2;BB4F;1106 116E 11C2; BB50;BB50;1106 116F;BB50;1106 116F; BB51;BB51;1106 116F 11A8;BB51;1106 116F 11A8; BB52;BB52;1106 116F 11A9;BB52;1106 116F 11A9; BB53;BB53;1106 116F 11AA;BB53;1106 116F 11AA; BB54;BB54;1106 116F 11AB;BB54;1106 116F 11AB; BB55;BB55;1106 116F 11AC;BB55;1106 116F 11AC; BB56;BB56;1106 116F 11AD;BB56;1106 116F 11AD; BB57;BB57;1106 116F 11AE;BB57;1106 116F 11AE; BB58;BB58;1106 116F 11AF;BB58;1106 116F 11AF; BB59;BB59;1106 116F 11B0;BB59;1106 116F 11B0; BB5A;BB5A;1106 116F 11B1;BB5A;1106 116F 11B1; BB5B;BB5B;1106 116F 11B2;BB5B;1106 116F 11B2; BB5C;BB5C;1106 116F 11B3;BB5C;1106 116F 11B3; BB5D;BB5D;1106 116F 11B4;BB5D;1106 116F 11B4; BB5E;BB5E;1106 116F 11B5;BB5E;1106 116F 11B5; BB5F;BB5F;1106 116F 11B6;BB5F;1106 116F 11B6; BB60;BB60;1106 116F 11B7;BB60;1106 116F 11B7; BB61;BB61;1106 116F 11B8;BB61;1106 116F 11B8; BB62;BB62;1106 116F 11B9;BB62;1106 116F 11B9; BB63;BB63;1106 116F 11BA;BB63;1106 116F 11BA; BB64;BB64;1106 116F 11BB;BB64;1106 116F 11BB; BB65;BB65;1106 116F 11BC;BB65;1106 116F 11BC; BB66;BB66;1106 116F 11BD;BB66;1106 116F 11BD; BB67;BB67;1106 116F 11BE;BB67;1106 116F 11BE; BB68;BB68;1106 116F 11BF;BB68;1106 116F 11BF; BB69;BB69;1106 116F 11C0;BB69;1106 116F 11C0; BB6A;BB6A;1106 116F 11C1;BB6A;1106 116F 11C1; BB6B;BB6B;1106 116F 11C2;BB6B;1106 116F 11C2; BB6C;BB6C;1106 1170;BB6C;1106 1170; BB6D;BB6D;1106 1170 11A8;BB6D;1106 1170 11A8; BB6E;BB6E;1106 1170 11A9;BB6E;1106 1170 11A9; BB6F;BB6F;1106 1170 11AA;BB6F;1106 1170 11AA; BB70;BB70;1106 1170 11AB;BB70;1106 1170 11AB; BB71;BB71;1106 1170 11AC;BB71;1106 1170 11AC; BB72;BB72;1106 1170 11AD;BB72;1106 1170 11AD; BB73;BB73;1106 1170 11AE;BB73;1106 1170 11AE; BB74;BB74;1106 1170 11AF;BB74;1106 1170 11AF; BB75;BB75;1106 1170 11B0;BB75;1106 1170 11B0; BB76;BB76;1106 1170 11B1;BB76;1106 1170 11B1; BB77;BB77;1106 1170 11B2;BB77;1106 1170 11B2; BB78;BB78;1106 1170 11B3;BB78;1106 1170 11B3; BB79;BB79;1106 1170 11B4;BB79;1106 1170 11B4; BB7A;BB7A;1106 1170 11B5;BB7A;1106 1170 11B5; BB7B;BB7B;1106 1170 11B6;BB7B;1106 1170 11B6; BB7C;BB7C;1106 1170 11B7;BB7C;1106 1170 11B7; BB7D;BB7D;1106 1170 11B8;BB7D;1106 1170 11B8; BB7E;BB7E;1106 1170 11B9;BB7E;1106 1170 11B9; BB7F;BB7F;1106 1170 11BA;BB7F;1106 1170 11BA; BB80;BB80;1106 1170 11BB;BB80;1106 1170 11BB; BB81;BB81;1106 1170 11BC;BB81;1106 1170 11BC; BB82;BB82;1106 1170 11BD;BB82;1106 1170 11BD; BB83;BB83;1106 1170 11BE;BB83;1106 1170 11BE; BB84;BB84;1106 1170 11BF;BB84;1106 1170 11BF; BB85;BB85;1106 1170 11C0;BB85;1106 1170 11C0; BB86;BB86;1106 1170 11C1;BB86;1106 1170 11C1; BB87;BB87;1106 1170 11C2;BB87;1106 1170 11C2; BB88;BB88;1106 1171;BB88;1106 1171; BB89;BB89;1106 1171 11A8;BB89;1106 1171 11A8; BB8A;BB8A;1106 1171 11A9;BB8A;1106 1171 11A9; BB8B;BB8B;1106 1171 11AA;BB8B;1106 1171 11AA; BB8C;BB8C;1106 1171 11AB;BB8C;1106 1171 11AB; BB8D;BB8D;1106 1171 11AC;BB8D;1106 1171 11AC; BB8E;BB8E;1106 1171 11AD;BB8E;1106 1171 11AD; BB8F;BB8F;1106 1171 11AE;BB8F;1106 1171 11AE; BB90;BB90;1106 1171 11AF;BB90;1106 1171 11AF; BB91;BB91;1106 1171 11B0;BB91;1106 1171 11B0; BB92;BB92;1106 1171 11B1;BB92;1106 1171 11B1; BB93;BB93;1106 1171 11B2;BB93;1106 1171 11B2; BB94;BB94;1106 1171 11B3;BB94;1106 1171 11B3; BB95;BB95;1106 1171 11B4;BB95;1106 1171 11B4; BB96;BB96;1106 1171 11B5;BB96;1106 1171 11B5; BB97;BB97;1106 1171 11B6;BB97;1106 1171 11B6; BB98;BB98;1106 1171 11B7;BB98;1106 1171 11B7; BB99;BB99;1106 1171 11B8;BB99;1106 1171 11B8; BB9A;BB9A;1106 1171 11B9;BB9A;1106 1171 11B9; BB9B;BB9B;1106 1171 11BA;BB9B;1106 1171 11BA; BB9C;BB9C;1106 1171 11BB;BB9C;1106 1171 11BB; BB9D;BB9D;1106 1171 11BC;BB9D;1106 1171 11BC; BB9E;BB9E;1106 1171 11BD;BB9E;1106 1171 11BD; BB9F;BB9F;1106 1171 11BE;BB9F;1106 1171 11BE; BBA0;BBA0;1106 1171 11BF;BBA0;1106 1171 11BF; BBA1;BBA1;1106 1171 11C0;BBA1;1106 1171 11C0; BBA2;BBA2;1106 1171 11C1;BBA2;1106 1171 11C1; BBA3;BBA3;1106 1171 11C2;BBA3;1106 1171 11C2; BBA4;BBA4;1106 1172;BBA4;1106 1172; BBA5;BBA5;1106 1172 11A8;BBA5;1106 1172 11A8; BBA6;BBA6;1106 1172 11A9;BBA6;1106 1172 11A9; BBA7;BBA7;1106 1172 11AA;BBA7;1106 1172 11AA; BBA8;BBA8;1106 1172 11AB;BBA8;1106 1172 11AB; BBA9;BBA9;1106 1172 11AC;BBA9;1106 1172 11AC; BBAA;BBAA;1106 1172 11AD;BBAA;1106 1172 11AD; BBAB;BBAB;1106 1172 11AE;BBAB;1106 1172 11AE; BBAC;BBAC;1106 1172 11AF;BBAC;1106 1172 11AF; BBAD;BBAD;1106 1172 11B0;BBAD;1106 1172 11B0; BBAE;BBAE;1106 1172 11B1;BBAE;1106 1172 11B1; BBAF;BBAF;1106 1172 11B2;BBAF;1106 1172 11B2; BBB0;BBB0;1106 1172 11B3;BBB0;1106 1172 11B3; BBB1;BBB1;1106 1172 11B4;BBB1;1106 1172 11B4; BBB2;BBB2;1106 1172 11B5;BBB2;1106 1172 11B5; BBB3;BBB3;1106 1172 11B6;BBB3;1106 1172 11B6; BBB4;BBB4;1106 1172 11B7;BBB4;1106 1172 11B7; BBB5;BBB5;1106 1172 11B8;BBB5;1106 1172 11B8; BBB6;BBB6;1106 1172 11B9;BBB6;1106 1172 11B9; BBB7;BBB7;1106 1172 11BA;BBB7;1106 1172 11BA; BBB8;BBB8;1106 1172 11BB;BBB8;1106 1172 11BB; BBB9;BBB9;1106 1172 11BC;BBB9;1106 1172 11BC; BBBA;BBBA;1106 1172 11BD;BBBA;1106 1172 11BD; BBBB;BBBB;1106 1172 11BE;BBBB;1106 1172 11BE; BBBC;BBBC;1106 1172 11BF;BBBC;1106 1172 11BF; BBBD;BBBD;1106 1172 11C0;BBBD;1106 1172 11C0; BBBE;BBBE;1106 1172 11C1;BBBE;1106 1172 11C1; BBBF;BBBF;1106 1172 11C2;BBBF;1106 1172 11C2; BBC0;BBC0;1106 1173;BBC0;1106 1173; BBC1;BBC1;1106 1173 11A8;BBC1;1106 1173 11A8; BBC2;BBC2;1106 1173 11A9;BBC2;1106 1173 11A9; BBC3;BBC3;1106 1173 11AA;BBC3;1106 1173 11AA; BBC4;BBC4;1106 1173 11AB;BBC4;1106 1173 11AB; BBC5;BBC5;1106 1173 11AC;BBC5;1106 1173 11AC; BBC6;BBC6;1106 1173 11AD;BBC6;1106 1173 11AD; BBC7;BBC7;1106 1173 11AE;BBC7;1106 1173 11AE; BBC8;BBC8;1106 1173 11AF;BBC8;1106 1173 11AF; BBC9;BBC9;1106 1173 11B0;BBC9;1106 1173 11B0; BBCA;BBCA;1106 1173 11B1;BBCA;1106 1173 11B1; BBCB;BBCB;1106 1173 11B2;BBCB;1106 1173 11B2; BBCC;BBCC;1106 1173 11B3;BBCC;1106 1173 11B3; BBCD;BBCD;1106 1173 11B4;BBCD;1106 1173 11B4; BBCE;BBCE;1106 1173 11B5;BBCE;1106 1173 11B5; BBCF;BBCF;1106 1173 11B6;BBCF;1106 1173 11B6; BBD0;BBD0;1106 1173 11B7;BBD0;1106 1173 11B7; BBD1;BBD1;1106 1173 11B8;BBD1;1106 1173 11B8; BBD2;BBD2;1106 1173 11B9;BBD2;1106 1173 11B9; BBD3;BBD3;1106 1173 11BA;BBD3;1106 1173 11BA; BBD4;BBD4;1106 1173 11BB;BBD4;1106 1173 11BB; BBD5;BBD5;1106 1173 11BC;BBD5;1106 1173 11BC; BBD6;BBD6;1106 1173 11BD;BBD6;1106 1173 11BD; BBD7;BBD7;1106 1173 11BE;BBD7;1106 1173 11BE; BBD8;BBD8;1106 1173 11BF;BBD8;1106 1173 11BF; BBD9;BBD9;1106 1173 11C0;BBD9;1106 1173 11C0; BBDA;BBDA;1106 1173 11C1;BBDA;1106 1173 11C1; BBDB;BBDB;1106 1173 11C2;BBDB;1106 1173 11C2; BBDC;BBDC;1106 1174;BBDC;1106 1174; BBDD;BBDD;1106 1174 11A8;BBDD;1106 1174 11A8; BBDE;BBDE;1106 1174 11A9;BBDE;1106 1174 11A9; BBDF;BBDF;1106 1174 11AA;BBDF;1106 1174 11AA; BBE0;BBE0;1106 1174 11AB;BBE0;1106 1174 11AB; BBE1;BBE1;1106 1174 11AC;BBE1;1106 1174 11AC; BBE2;BBE2;1106 1174 11AD;BBE2;1106 1174 11AD; BBE3;BBE3;1106 1174 11AE;BBE3;1106 1174 11AE; BBE4;BBE4;1106 1174 11AF;BBE4;1106 1174 11AF; BBE5;BBE5;1106 1174 11B0;BBE5;1106 1174 11B0; BBE6;BBE6;1106 1174 11B1;BBE6;1106 1174 11B1; BBE7;BBE7;1106 1174 11B2;BBE7;1106 1174 11B2; BBE8;BBE8;1106 1174 11B3;BBE8;1106 1174 11B3; BBE9;BBE9;1106 1174 11B4;BBE9;1106 1174 11B4; BBEA;BBEA;1106 1174 11B5;BBEA;1106 1174 11B5; BBEB;BBEB;1106 1174 11B6;BBEB;1106 1174 11B6; BBEC;BBEC;1106 1174 11B7;BBEC;1106 1174 11B7; BBED;BBED;1106 1174 11B8;BBED;1106 1174 11B8; BBEE;BBEE;1106 1174 11B9;BBEE;1106 1174 11B9; BBEF;BBEF;1106 1174 11BA;BBEF;1106 1174 11BA; BBF0;BBF0;1106 1174 11BB;BBF0;1106 1174 11BB; BBF1;BBF1;1106 1174 11BC;BBF1;1106 1174 11BC; BBF2;BBF2;1106 1174 11BD;BBF2;1106 1174 11BD; BBF3;BBF3;1106 1174 11BE;BBF3;1106 1174 11BE; BBF4;BBF4;1106 1174 11BF;BBF4;1106 1174 11BF; BBF5;BBF5;1106 1174 11C0;BBF5;1106 1174 11C0; BBF6;BBF6;1106 1174 11C1;BBF6;1106 1174 11C1; BBF7;BBF7;1106 1174 11C2;BBF7;1106 1174 11C2; BBF8;BBF8;1106 1175;BBF8;1106 1175; BBF9;BBF9;1106 1175 11A8;BBF9;1106 1175 11A8; BBFA;BBFA;1106 1175 11A9;BBFA;1106 1175 11A9; BBFB;BBFB;1106 1175 11AA;BBFB;1106 1175 11AA; BBFC;BBFC;1106 1175 11AB;BBFC;1106 1175 11AB; BBFD;BBFD;1106 1175 11AC;BBFD;1106 1175 11AC; BBFE;BBFE;1106 1175 11AD;BBFE;1106 1175 11AD; BBFF;BBFF;1106 1175 11AE;BBFF;1106 1175 11AE; BC00;BC00;1106 1175 11AF;BC00;1106 1175 11AF; BC01;BC01;1106 1175 11B0;BC01;1106 1175 11B0; BC02;BC02;1106 1175 11B1;BC02;1106 1175 11B1; BC03;BC03;1106 1175 11B2;BC03;1106 1175 11B2; BC04;BC04;1106 1175 11B3;BC04;1106 1175 11B3; BC05;BC05;1106 1175 11B4;BC05;1106 1175 11B4; BC06;BC06;1106 1175 11B5;BC06;1106 1175 11B5; BC07;BC07;1106 1175 11B6;BC07;1106 1175 11B6; BC08;BC08;1106 1175 11B7;BC08;1106 1175 11B7; BC09;BC09;1106 1175 11B8;BC09;1106 1175 11B8; BC0A;BC0A;1106 1175 11B9;BC0A;1106 1175 11B9; BC0B;BC0B;1106 1175 11BA;BC0B;1106 1175 11BA; BC0C;BC0C;1106 1175 11BB;BC0C;1106 1175 11BB; BC0D;BC0D;1106 1175 11BC;BC0D;1106 1175 11BC; BC0E;BC0E;1106 1175 11BD;BC0E;1106 1175 11BD; BC0F;BC0F;1106 1175 11BE;BC0F;1106 1175 11BE; BC10;BC10;1106 1175 11BF;BC10;1106 1175 11BF; BC11;BC11;1106 1175 11C0;BC11;1106 1175 11C0; BC12;BC12;1106 1175 11C1;BC12;1106 1175 11C1; BC13;BC13;1106 1175 11C2;BC13;1106 1175 11C2; BC14;BC14;1107 1161;BC14;1107 1161; BC15;BC15;1107 1161 11A8;BC15;1107 1161 11A8; BC16;BC16;1107 1161 11A9;BC16;1107 1161 11A9; BC17;BC17;1107 1161 11AA;BC17;1107 1161 11AA; BC18;BC18;1107 1161 11AB;BC18;1107 1161 11AB; BC19;BC19;1107 1161 11AC;BC19;1107 1161 11AC; BC1A;BC1A;1107 1161 11AD;BC1A;1107 1161 11AD; BC1B;BC1B;1107 1161 11AE;BC1B;1107 1161 11AE; BC1C;BC1C;1107 1161 11AF;BC1C;1107 1161 11AF; BC1D;BC1D;1107 1161 11B0;BC1D;1107 1161 11B0; BC1E;BC1E;1107 1161 11B1;BC1E;1107 1161 11B1; BC1F;BC1F;1107 1161 11B2;BC1F;1107 1161 11B2; BC20;BC20;1107 1161 11B3;BC20;1107 1161 11B3; BC21;BC21;1107 1161 11B4;BC21;1107 1161 11B4; BC22;BC22;1107 1161 11B5;BC22;1107 1161 11B5; BC23;BC23;1107 1161 11B6;BC23;1107 1161 11B6; BC24;BC24;1107 1161 11B7;BC24;1107 1161 11B7; BC25;BC25;1107 1161 11B8;BC25;1107 1161 11B8; BC26;BC26;1107 1161 11B9;BC26;1107 1161 11B9; BC27;BC27;1107 1161 11BA;BC27;1107 1161 11BA; BC28;BC28;1107 1161 11BB;BC28;1107 1161 11BB; BC29;BC29;1107 1161 11BC;BC29;1107 1161 11BC; BC2A;BC2A;1107 1161 11BD;BC2A;1107 1161 11BD; BC2B;BC2B;1107 1161 11BE;BC2B;1107 1161 11BE; BC2C;BC2C;1107 1161 11BF;BC2C;1107 1161 11BF; BC2D;BC2D;1107 1161 11C0;BC2D;1107 1161 11C0; BC2E;BC2E;1107 1161 11C1;BC2E;1107 1161 11C1; BC2F;BC2F;1107 1161 11C2;BC2F;1107 1161 11C2; BC30;BC30;1107 1162;BC30;1107 1162; BC31;BC31;1107 1162 11A8;BC31;1107 1162 11A8; BC32;BC32;1107 1162 11A9;BC32;1107 1162 11A9; BC33;BC33;1107 1162 11AA;BC33;1107 1162 11AA; BC34;BC34;1107 1162 11AB;BC34;1107 1162 11AB; BC35;BC35;1107 1162 11AC;BC35;1107 1162 11AC; BC36;BC36;1107 1162 11AD;BC36;1107 1162 11AD; BC37;BC37;1107 1162 11AE;BC37;1107 1162 11AE; BC38;BC38;1107 1162 11AF;BC38;1107 1162 11AF; BC39;BC39;1107 1162 11B0;BC39;1107 1162 11B0; BC3A;BC3A;1107 1162 11B1;BC3A;1107 1162 11B1; BC3B;BC3B;1107 1162 11B2;BC3B;1107 1162 11B2; BC3C;BC3C;1107 1162 11B3;BC3C;1107 1162 11B3; BC3D;BC3D;1107 1162 11B4;BC3D;1107 1162 11B4; BC3E;BC3E;1107 1162 11B5;BC3E;1107 1162 11B5; BC3F;BC3F;1107 1162 11B6;BC3F;1107 1162 11B6; BC40;BC40;1107 1162 11B7;BC40;1107 1162 11B7; BC41;BC41;1107 1162 11B8;BC41;1107 1162 11B8; BC42;BC42;1107 1162 11B9;BC42;1107 1162 11B9; BC43;BC43;1107 1162 11BA;BC43;1107 1162 11BA; BC44;BC44;1107 1162 11BB;BC44;1107 1162 11BB; BC45;BC45;1107 1162 11BC;BC45;1107 1162 11BC; BC46;BC46;1107 1162 11BD;BC46;1107 1162 11BD; BC47;BC47;1107 1162 11BE;BC47;1107 1162 11BE; BC48;BC48;1107 1162 11BF;BC48;1107 1162 11BF; BC49;BC49;1107 1162 11C0;BC49;1107 1162 11C0; BC4A;BC4A;1107 1162 11C1;BC4A;1107 1162 11C1; BC4B;BC4B;1107 1162 11C2;BC4B;1107 1162 11C2; BC4C;BC4C;1107 1163;BC4C;1107 1163; BC4D;BC4D;1107 1163 11A8;BC4D;1107 1163 11A8; BC4E;BC4E;1107 1163 11A9;BC4E;1107 1163 11A9; BC4F;BC4F;1107 1163 11AA;BC4F;1107 1163 11AA; BC50;BC50;1107 1163 11AB;BC50;1107 1163 11AB; BC51;BC51;1107 1163 11AC;BC51;1107 1163 11AC; BC52;BC52;1107 1163 11AD;BC52;1107 1163 11AD; BC53;BC53;1107 1163 11AE;BC53;1107 1163 11AE; BC54;BC54;1107 1163 11AF;BC54;1107 1163 11AF; BC55;BC55;1107 1163 11B0;BC55;1107 1163 11B0; BC56;BC56;1107 1163 11B1;BC56;1107 1163 11B1; BC57;BC57;1107 1163 11B2;BC57;1107 1163 11B2; BC58;BC58;1107 1163 11B3;BC58;1107 1163 11B3; BC59;BC59;1107 1163 11B4;BC59;1107 1163 11B4; BC5A;BC5A;1107 1163 11B5;BC5A;1107 1163 11B5; BC5B;BC5B;1107 1163 11B6;BC5B;1107 1163 11B6; BC5C;BC5C;1107 1163 11B7;BC5C;1107 1163 11B7; BC5D;BC5D;1107 1163 11B8;BC5D;1107 1163 11B8; BC5E;BC5E;1107 1163 11B9;BC5E;1107 1163 11B9; BC5F;BC5F;1107 1163 11BA;BC5F;1107 1163 11BA; BC60;BC60;1107 1163 11BB;BC60;1107 1163 11BB; BC61;BC61;1107 1163 11BC;BC61;1107 1163 11BC; BC62;BC62;1107 1163 11BD;BC62;1107 1163 11BD; BC63;BC63;1107 1163 11BE;BC63;1107 1163 11BE; BC64;BC64;1107 1163 11BF;BC64;1107 1163 11BF; BC65;BC65;1107 1163 11C0;BC65;1107 1163 11C0; BC66;BC66;1107 1163 11C1;BC66;1107 1163 11C1; BC67;BC67;1107 1163 11C2;BC67;1107 1163 11C2; BC68;BC68;1107 1164;BC68;1107 1164; BC69;BC69;1107 1164 11A8;BC69;1107 1164 11A8; BC6A;BC6A;1107 1164 11A9;BC6A;1107 1164 11A9; BC6B;BC6B;1107 1164 11AA;BC6B;1107 1164 11AA; BC6C;BC6C;1107 1164 11AB;BC6C;1107 1164 11AB; BC6D;BC6D;1107 1164 11AC;BC6D;1107 1164 11AC; BC6E;BC6E;1107 1164 11AD;BC6E;1107 1164 11AD; BC6F;BC6F;1107 1164 11AE;BC6F;1107 1164 11AE; BC70;BC70;1107 1164 11AF;BC70;1107 1164 11AF; BC71;BC71;1107 1164 11B0;BC71;1107 1164 11B0; BC72;BC72;1107 1164 11B1;BC72;1107 1164 11B1; BC73;BC73;1107 1164 11B2;BC73;1107 1164 11B2; BC74;BC74;1107 1164 11B3;BC74;1107 1164 11B3; BC75;BC75;1107 1164 11B4;BC75;1107 1164 11B4; BC76;BC76;1107 1164 11B5;BC76;1107 1164 11B5; BC77;BC77;1107 1164 11B6;BC77;1107 1164 11B6; BC78;BC78;1107 1164 11B7;BC78;1107 1164 11B7; BC79;BC79;1107 1164 11B8;BC79;1107 1164 11B8; BC7A;BC7A;1107 1164 11B9;BC7A;1107 1164 11B9; BC7B;BC7B;1107 1164 11BA;BC7B;1107 1164 11BA; BC7C;BC7C;1107 1164 11BB;BC7C;1107 1164 11BB; BC7D;BC7D;1107 1164 11BC;BC7D;1107 1164 11BC; BC7E;BC7E;1107 1164 11BD;BC7E;1107 1164 11BD; BC7F;BC7F;1107 1164 11BE;BC7F;1107 1164 11BE; BC80;BC80;1107 1164 11BF;BC80;1107 1164 11BF; BC81;BC81;1107 1164 11C0;BC81;1107 1164 11C0; BC82;BC82;1107 1164 11C1;BC82;1107 1164 11C1; BC83;BC83;1107 1164 11C2;BC83;1107 1164 11C2; BC84;BC84;1107 1165;BC84;1107 1165; BC85;BC85;1107 1165 11A8;BC85;1107 1165 11A8; BC86;BC86;1107 1165 11A9;BC86;1107 1165 11A9; BC87;BC87;1107 1165 11AA;BC87;1107 1165 11AA; BC88;BC88;1107 1165 11AB;BC88;1107 1165 11AB; BC89;BC89;1107 1165 11AC;BC89;1107 1165 11AC; BC8A;BC8A;1107 1165 11AD;BC8A;1107 1165 11AD; BC8B;BC8B;1107 1165 11AE;BC8B;1107 1165 11AE; BC8C;BC8C;1107 1165 11AF;BC8C;1107 1165 11AF; BC8D;BC8D;1107 1165 11B0;BC8D;1107 1165 11B0; BC8E;BC8E;1107 1165 11B1;BC8E;1107 1165 11B1; BC8F;BC8F;1107 1165 11B2;BC8F;1107 1165 11B2; BC90;BC90;1107 1165 11B3;BC90;1107 1165 11B3; BC91;BC91;1107 1165 11B4;BC91;1107 1165 11B4; BC92;BC92;1107 1165 11B5;BC92;1107 1165 11B5; BC93;BC93;1107 1165 11B6;BC93;1107 1165 11B6; BC94;BC94;1107 1165 11B7;BC94;1107 1165 11B7; BC95;BC95;1107 1165 11B8;BC95;1107 1165 11B8; BC96;BC96;1107 1165 11B9;BC96;1107 1165 11B9; BC97;BC97;1107 1165 11BA;BC97;1107 1165 11BA; BC98;BC98;1107 1165 11BB;BC98;1107 1165 11BB; BC99;BC99;1107 1165 11BC;BC99;1107 1165 11BC; BC9A;BC9A;1107 1165 11BD;BC9A;1107 1165 11BD; BC9B;BC9B;1107 1165 11BE;BC9B;1107 1165 11BE; BC9C;BC9C;1107 1165 11BF;BC9C;1107 1165 11BF; BC9D;BC9D;1107 1165 11C0;BC9D;1107 1165 11C0; BC9E;BC9E;1107 1165 11C1;BC9E;1107 1165 11C1; BC9F;BC9F;1107 1165 11C2;BC9F;1107 1165 11C2; BCA0;BCA0;1107 1166;BCA0;1107 1166; BCA1;BCA1;1107 1166 11A8;BCA1;1107 1166 11A8; BCA2;BCA2;1107 1166 11A9;BCA2;1107 1166 11A9; BCA3;BCA3;1107 1166 11AA;BCA3;1107 1166 11AA; BCA4;BCA4;1107 1166 11AB;BCA4;1107 1166 11AB; BCA5;BCA5;1107 1166 11AC;BCA5;1107 1166 11AC; BCA6;BCA6;1107 1166 11AD;BCA6;1107 1166 11AD; BCA7;BCA7;1107 1166 11AE;BCA7;1107 1166 11AE; BCA8;BCA8;1107 1166 11AF;BCA8;1107 1166 11AF; BCA9;BCA9;1107 1166 11B0;BCA9;1107 1166 11B0; BCAA;BCAA;1107 1166 11B1;BCAA;1107 1166 11B1; BCAB;BCAB;1107 1166 11B2;BCAB;1107 1166 11B2; BCAC;BCAC;1107 1166 11B3;BCAC;1107 1166 11B3; BCAD;BCAD;1107 1166 11B4;BCAD;1107 1166 11B4; BCAE;BCAE;1107 1166 11B5;BCAE;1107 1166 11B5; BCAF;BCAF;1107 1166 11B6;BCAF;1107 1166 11B6; BCB0;BCB0;1107 1166 11B7;BCB0;1107 1166 11B7; BCB1;BCB1;1107 1166 11B8;BCB1;1107 1166 11B8; BCB2;BCB2;1107 1166 11B9;BCB2;1107 1166 11B9; BCB3;BCB3;1107 1166 11BA;BCB3;1107 1166 11BA; BCB4;BCB4;1107 1166 11BB;BCB4;1107 1166 11BB; BCB5;BCB5;1107 1166 11BC;BCB5;1107 1166 11BC; BCB6;BCB6;1107 1166 11BD;BCB6;1107 1166 11BD; BCB7;BCB7;1107 1166 11BE;BCB7;1107 1166 11BE; BCB8;BCB8;1107 1166 11BF;BCB8;1107 1166 11BF; BCB9;BCB9;1107 1166 11C0;BCB9;1107 1166 11C0; BCBA;BCBA;1107 1166 11C1;BCBA;1107 1166 11C1; BCBB;BCBB;1107 1166 11C2;BCBB;1107 1166 11C2; BCBC;BCBC;1107 1167;BCBC;1107 1167; BCBD;BCBD;1107 1167 11A8;BCBD;1107 1167 11A8; BCBE;BCBE;1107 1167 11A9;BCBE;1107 1167 11A9; BCBF;BCBF;1107 1167 11AA;BCBF;1107 1167 11AA; BCC0;BCC0;1107 1167 11AB;BCC0;1107 1167 11AB; BCC1;BCC1;1107 1167 11AC;BCC1;1107 1167 11AC; BCC2;BCC2;1107 1167 11AD;BCC2;1107 1167 11AD; BCC3;BCC3;1107 1167 11AE;BCC3;1107 1167 11AE; BCC4;BCC4;1107 1167 11AF;BCC4;1107 1167 11AF; BCC5;BCC5;1107 1167 11B0;BCC5;1107 1167 11B0; BCC6;BCC6;1107 1167 11B1;BCC6;1107 1167 11B1; BCC7;BCC7;1107 1167 11B2;BCC7;1107 1167 11B2; BCC8;BCC8;1107 1167 11B3;BCC8;1107 1167 11B3; BCC9;BCC9;1107 1167 11B4;BCC9;1107 1167 11B4; BCCA;BCCA;1107 1167 11B5;BCCA;1107 1167 11B5; BCCB;BCCB;1107 1167 11B6;BCCB;1107 1167 11B6; BCCC;BCCC;1107 1167 11B7;BCCC;1107 1167 11B7; BCCD;BCCD;1107 1167 11B8;BCCD;1107 1167 11B8; BCCE;BCCE;1107 1167 11B9;BCCE;1107 1167 11B9; BCCF;BCCF;1107 1167 11BA;BCCF;1107 1167 11BA; BCD0;BCD0;1107 1167 11BB;BCD0;1107 1167 11BB; BCD1;BCD1;1107 1167 11BC;BCD1;1107 1167 11BC; BCD2;BCD2;1107 1167 11BD;BCD2;1107 1167 11BD; BCD3;BCD3;1107 1167 11BE;BCD3;1107 1167 11BE; BCD4;BCD4;1107 1167 11BF;BCD4;1107 1167 11BF; BCD5;BCD5;1107 1167 11C0;BCD5;1107 1167 11C0; BCD6;BCD6;1107 1167 11C1;BCD6;1107 1167 11C1; BCD7;BCD7;1107 1167 11C2;BCD7;1107 1167 11C2; BCD8;BCD8;1107 1168;BCD8;1107 1168; BCD9;BCD9;1107 1168 11A8;BCD9;1107 1168 11A8; BCDA;BCDA;1107 1168 11A9;BCDA;1107 1168 11A9; BCDB;BCDB;1107 1168 11AA;BCDB;1107 1168 11AA; BCDC;BCDC;1107 1168 11AB;BCDC;1107 1168 11AB; BCDD;BCDD;1107 1168 11AC;BCDD;1107 1168 11AC; BCDE;BCDE;1107 1168 11AD;BCDE;1107 1168 11AD; BCDF;BCDF;1107 1168 11AE;BCDF;1107 1168 11AE; BCE0;BCE0;1107 1168 11AF;BCE0;1107 1168 11AF; BCE1;BCE1;1107 1168 11B0;BCE1;1107 1168 11B0; BCE2;BCE2;1107 1168 11B1;BCE2;1107 1168 11B1; BCE3;BCE3;1107 1168 11B2;BCE3;1107 1168 11B2; BCE4;BCE4;1107 1168 11B3;BCE4;1107 1168 11B3; BCE5;BCE5;1107 1168 11B4;BCE5;1107 1168 11B4; BCE6;BCE6;1107 1168 11B5;BCE6;1107 1168 11B5; BCE7;BCE7;1107 1168 11B6;BCE7;1107 1168 11B6; BCE8;BCE8;1107 1168 11B7;BCE8;1107 1168 11B7; BCE9;BCE9;1107 1168 11B8;BCE9;1107 1168 11B8; BCEA;BCEA;1107 1168 11B9;BCEA;1107 1168 11B9; BCEB;BCEB;1107 1168 11BA;BCEB;1107 1168 11BA; BCEC;BCEC;1107 1168 11BB;BCEC;1107 1168 11BB; BCED;BCED;1107 1168 11BC;BCED;1107 1168 11BC; BCEE;BCEE;1107 1168 11BD;BCEE;1107 1168 11BD; BCEF;BCEF;1107 1168 11BE;BCEF;1107 1168 11BE; BCF0;BCF0;1107 1168 11BF;BCF0;1107 1168 11BF; BCF1;BCF1;1107 1168 11C0;BCF1;1107 1168 11C0; BCF2;BCF2;1107 1168 11C1;BCF2;1107 1168 11C1; BCF3;BCF3;1107 1168 11C2;BCF3;1107 1168 11C2; BCF4;BCF4;1107 1169;BCF4;1107 1169; BCF5;BCF5;1107 1169 11A8;BCF5;1107 1169 11A8; BCF6;BCF6;1107 1169 11A9;BCF6;1107 1169 11A9; BCF7;BCF7;1107 1169 11AA;BCF7;1107 1169 11AA; BCF8;BCF8;1107 1169 11AB;BCF8;1107 1169 11AB; BCF9;BCF9;1107 1169 11AC;BCF9;1107 1169 11AC; BCFA;BCFA;1107 1169 11AD;BCFA;1107 1169 11AD; BCFB;BCFB;1107 1169 11AE;BCFB;1107 1169 11AE; BCFC;BCFC;1107 1169 11AF;BCFC;1107 1169 11AF; BCFD;BCFD;1107 1169 11B0;BCFD;1107 1169 11B0; BCFE;BCFE;1107 1169 11B1;BCFE;1107 1169 11B1; BCFF;BCFF;1107 1169 11B2;BCFF;1107 1169 11B2; BD00;BD00;1107 1169 11B3;BD00;1107 1169 11B3; BD01;BD01;1107 1169 11B4;BD01;1107 1169 11B4; BD02;BD02;1107 1169 11B5;BD02;1107 1169 11B5; BD03;BD03;1107 1169 11B6;BD03;1107 1169 11B6; BD04;BD04;1107 1169 11B7;BD04;1107 1169 11B7; BD05;BD05;1107 1169 11B8;BD05;1107 1169 11B8; BD06;BD06;1107 1169 11B9;BD06;1107 1169 11B9; BD07;BD07;1107 1169 11BA;BD07;1107 1169 11BA; BD08;BD08;1107 1169 11BB;BD08;1107 1169 11BB; BD09;BD09;1107 1169 11BC;BD09;1107 1169 11BC; BD0A;BD0A;1107 1169 11BD;BD0A;1107 1169 11BD; BD0B;BD0B;1107 1169 11BE;BD0B;1107 1169 11BE; BD0C;BD0C;1107 1169 11BF;BD0C;1107 1169 11BF; BD0D;BD0D;1107 1169 11C0;BD0D;1107 1169 11C0; BD0E;BD0E;1107 1169 11C1;BD0E;1107 1169 11C1; BD0F;BD0F;1107 1169 11C2;BD0F;1107 1169 11C2; BD10;BD10;1107 116A;BD10;1107 116A; BD11;BD11;1107 116A 11A8;BD11;1107 116A 11A8; BD12;BD12;1107 116A 11A9;BD12;1107 116A 11A9; BD13;BD13;1107 116A 11AA;BD13;1107 116A 11AA; BD14;BD14;1107 116A 11AB;BD14;1107 116A 11AB; BD15;BD15;1107 116A 11AC;BD15;1107 116A 11AC; BD16;BD16;1107 116A 11AD;BD16;1107 116A 11AD; BD17;BD17;1107 116A 11AE;BD17;1107 116A 11AE; BD18;BD18;1107 116A 11AF;BD18;1107 116A 11AF; BD19;BD19;1107 116A 11B0;BD19;1107 116A 11B0; BD1A;BD1A;1107 116A 11B1;BD1A;1107 116A 11B1; BD1B;BD1B;1107 116A 11B2;BD1B;1107 116A 11B2; BD1C;BD1C;1107 116A 11B3;BD1C;1107 116A 11B3; BD1D;BD1D;1107 116A 11B4;BD1D;1107 116A 11B4; BD1E;BD1E;1107 116A 11B5;BD1E;1107 116A 11B5; BD1F;BD1F;1107 116A 11B6;BD1F;1107 116A 11B6; BD20;BD20;1107 116A 11B7;BD20;1107 116A 11B7; BD21;BD21;1107 116A 11B8;BD21;1107 116A 11B8; BD22;BD22;1107 116A 11B9;BD22;1107 116A 11B9; BD23;BD23;1107 116A 11BA;BD23;1107 116A 11BA; BD24;BD24;1107 116A 11BB;BD24;1107 116A 11BB; BD25;BD25;1107 116A 11BC;BD25;1107 116A 11BC; BD26;BD26;1107 116A 11BD;BD26;1107 116A 11BD; BD27;BD27;1107 116A 11BE;BD27;1107 116A 11BE; BD28;BD28;1107 116A 11BF;BD28;1107 116A 11BF; BD29;BD29;1107 116A 11C0;BD29;1107 116A 11C0; BD2A;BD2A;1107 116A 11C1;BD2A;1107 116A 11C1; BD2B;BD2B;1107 116A 11C2;BD2B;1107 116A 11C2; BD2C;BD2C;1107 116B;BD2C;1107 116B; BD2D;BD2D;1107 116B 11A8;BD2D;1107 116B 11A8; BD2E;BD2E;1107 116B 11A9;BD2E;1107 116B 11A9; BD2F;BD2F;1107 116B 11AA;BD2F;1107 116B 11AA; BD30;BD30;1107 116B 11AB;BD30;1107 116B 11AB; BD31;BD31;1107 116B 11AC;BD31;1107 116B 11AC; BD32;BD32;1107 116B 11AD;BD32;1107 116B 11AD; BD33;BD33;1107 116B 11AE;BD33;1107 116B 11AE; BD34;BD34;1107 116B 11AF;BD34;1107 116B 11AF; BD35;BD35;1107 116B 11B0;BD35;1107 116B 11B0; BD36;BD36;1107 116B 11B1;BD36;1107 116B 11B1; BD37;BD37;1107 116B 11B2;BD37;1107 116B 11B2; BD38;BD38;1107 116B 11B3;BD38;1107 116B 11B3; BD39;BD39;1107 116B 11B4;BD39;1107 116B 11B4; BD3A;BD3A;1107 116B 11B5;BD3A;1107 116B 11B5; BD3B;BD3B;1107 116B 11B6;BD3B;1107 116B 11B6; BD3C;BD3C;1107 116B 11B7;BD3C;1107 116B 11B7; BD3D;BD3D;1107 116B 11B8;BD3D;1107 116B 11B8; BD3E;BD3E;1107 116B 11B9;BD3E;1107 116B 11B9; BD3F;BD3F;1107 116B 11BA;BD3F;1107 116B 11BA; BD40;BD40;1107 116B 11BB;BD40;1107 116B 11BB; BD41;BD41;1107 116B 11BC;BD41;1107 116B 11BC; BD42;BD42;1107 116B 11BD;BD42;1107 116B 11BD; BD43;BD43;1107 116B 11BE;BD43;1107 116B 11BE; BD44;BD44;1107 116B 11BF;BD44;1107 116B 11BF; BD45;BD45;1107 116B 11C0;BD45;1107 116B 11C0; BD46;BD46;1107 116B 11C1;BD46;1107 116B 11C1; BD47;BD47;1107 116B 11C2;BD47;1107 116B 11C2; BD48;BD48;1107 116C;BD48;1107 116C; BD49;BD49;1107 116C 11A8;BD49;1107 116C 11A8; BD4A;BD4A;1107 116C 11A9;BD4A;1107 116C 11A9; BD4B;BD4B;1107 116C 11AA;BD4B;1107 116C 11AA; BD4C;BD4C;1107 116C 11AB;BD4C;1107 116C 11AB; BD4D;BD4D;1107 116C 11AC;BD4D;1107 116C 11AC; BD4E;BD4E;1107 116C 11AD;BD4E;1107 116C 11AD; BD4F;BD4F;1107 116C 11AE;BD4F;1107 116C 11AE; BD50;BD50;1107 116C 11AF;BD50;1107 116C 11AF; BD51;BD51;1107 116C 11B0;BD51;1107 116C 11B0; BD52;BD52;1107 116C 11B1;BD52;1107 116C 11B1; BD53;BD53;1107 116C 11B2;BD53;1107 116C 11B2; BD54;BD54;1107 116C 11B3;BD54;1107 116C 11B3; BD55;BD55;1107 116C 11B4;BD55;1107 116C 11B4; BD56;BD56;1107 116C 11B5;BD56;1107 116C 11B5; BD57;BD57;1107 116C 11B6;BD57;1107 116C 11B6; BD58;BD58;1107 116C 11B7;BD58;1107 116C 11B7; BD59;BD59;1107 116C 11B8;BD59;1107 116C 11B8; BD5A;BD5A;1107 116C 11B9;BD5A;1107 116C 11B9; BD5B;BD5B;1107 116C 11BA;BD5B;1107 116C 11BA; BD5C;BD5C;1107 116C 11BB;BD5C;1107 116C 11BB; BD5D;BD5D;1107 116C 11BC;BD5D;1107 116C 11BC; BD5E;BD5E;1107 116C 11BD;BD5E;1107 116C 11BD; BD5F;BD5F;1107 116C 11BE;BD5F;1107 116C 11BE; BD60;BD60;1107 116C 11BF;BD60;1107 116C 11BF; BD61;BD61;1107 116C 11C0;BD61;1107 116C 11C0; BD62;BD62;1107 116C 11C1;BD62;1107 116C 11C1; BD63;BD63;1107 116C 11C2;BD63;1107 116C 11C2; BD64;BD64;1107 116D;BD64;1107 116D; BD65;BD65;1107 116D 11A8;BD65;1107 116D 11A8; BD66;BD66;1107 116D 11A9;BD66;1107 116D 11A9; BD67;BD67;1107 116D 11AA;BD67;1107 116D 11AA; BD68;BD68;1107 116D 11AB;BD68;1107 116D 11AB; BD69;BD69;1107 116D 11AC;BD69;1107 116D 11AC; BD6A;BD6A;1107 116D 11AD;BD6A;1107 116D 11AD; BD6B;BD6B;1107 116D 11AE;BD6B;1107 116D 11AE; BD6C;BD6C;1107 116D 11AF;BD6C;1107 116D 11AF; BD6D;BD6D;1107 116D 11B0;BD6D;1107 116D 11B0; BD6E;BD6E;1107 116D 11B1;BD6E;1107 116D 11B1; BD6F;BD6F;1107 116D 11B2;BD6F;1107 116D 11B2; BD70;BD70;1107 116D 11B3;BD70;1107 116D 11B3; BD71;BD71;1107 116D 11B4;BD71;1107 116D 11B4; BD72;BD72;1107 116D 11B5;BD72;1107 116D 11B5; BD73;BD73;1107 116D 11B6;BD73;1107 116D 11B6; BD74;BD74;1107 116D 11B7;BD74;1107 116D 11B7; BD75;BD75;1107 116D 11B8;BD75;1107 116D 11B8; BD76;BD76;1107 116D 11B9;BD76;1107 116D 11B9; BD77;BD77;1107 116D 11BA;BD77;1107 116D 11BA; BD78;BD78;1107 116D 11BB;BD78;1107 116D 11BB; BD79;BD79;1107 116D 11BC;BD79;1107 116D 11BC; BD7A;BD7A;1107 116D 11BD;BD7A;1107 116D 11BD; BD7B;BD7B;1107 116D 11BE;BD7B;1107 116D 11BE; BD7C;BD7C;1107 116D 11BF;BD7C;1107 116D 11BF; BD7D;BD7D;1107 116D 11C0;BD7D;1107 116D 11C0; BD7E;BD7E;1107 116D 11C1;BD7E;1107 116D 11C1; BD7F;BD7F;1107 116D 11C2;BD7F;1107 116D 11C2; BD80;BD80;1107 116E;BD80;1107 116E; BD81;BD81;1107 116E 11A8;BD81;1107 116E 11A8; BD82;BD82;1107 116E 11A9;BD82;1107 116E 11A9; BD83;BD83;1107 116E 11AA;BD83;1107 116E 11AA; BD84;BD84;1107 116E 11AB;BD84;1107 116E 11AB; BD85;BD85;1107 116E 11AC;BD85;1107 116E 11AC; BD86;BD86;1107 116E 11AD;BD86;1107 116E 11AD; BD87;BD87;1107 116E 11AE;BD87;1107 116E 11AE; BD88;BD88;1107 116E 11AF;BD88;1107 116E 11AF; BD89;BD89;1107 116E 11B0;BD89;1107 116E 11B0; BD8A;BD8A;1107 116E 11B1;BD8A;1107 116E 11B1; BD8B;BD8B;1107 116E 11B2;BD8B;1107 116E 11B2; BD8C;BD8C;1107 116E 11B3;BD8C;1107 116E 11B3; BD8D;BD8D;1107 116E 11B4;BD8D;1107 116E 11B4; BD8E;BD8E;1107 116E 11B5;BD8E;1107 116E 11B5; BD8F;BD8F;1107 116E 11B6;BD8F;1107 116E 11B6; BD90;BD90;1107 116E 11B7;BD90;1107 116E 11B7; BD91;BD91;1107 116E 11B8;BD91;1107 116E 11B8; BD92;BD92;1107 116E 11B9;BD92;1107 116E 11B9; BD93;BD93;1107 116E 11BA;BD93;1107 116E 11BA; BD94;BD94;1107 116E 11BB;BD94;1107 116E 11BB; BD95;BD95;1107 116E 11BC;BD95;1107 116E 11BC; BD96;BD96;1107 116E 11BD;BD96;1107 116E 11BD; BD97;BD97;1107 116E 11BE;BD97;1107 116E 11BE; BD98;BD98;1107 116E 11BF;BD98;1107 116E 11BF; BD99;BD99;1107 116E 11C0;BD99;1107 116E 11C0; BD9A;BD9A;1107 116E 11C1;BD9A;1107 116E 11C1; BD9B;BD9B;1107 116E 11C2;BD9B;1107 116E 11C2; BD9C;BD9C;1107 116F;BD9C;1107 116F; BD9D;BD9D;1107 116F 11A8;BD9D;1107 116F 11A8; BD9E;BD9E;1107 116F 11A9;BD9E;1107 116F 11A9; BD9F;BD9F;1107 116F 11AA;BD9F;1107 116F 11AA; BDA0;BDA0;1107 116F 11AB;BDA0;1107 116F 11AB; BDA1;BDA1;1107 116F 11AC;BDA1;1107 116F 11AC; BDA2;BDA2;1107 116F 11AD;BDA2;1107 116F 11AD; BDA3;BDA3;1107 116F 11AE;BDA3;1107 116F 11AE; BDA4;BDA4;1107 116F 11AF;BDA4;1107 116F 11AF; BDA5;BDA5;1107 116F 11B0;BDA5;1107 116F 11B0; BDA6;BDA6;1107 116F 11B1;BDA6;1107 116F 11B1; BDA7;BDA7;1107 116F 11B2;BDA7;1107 116F 11B2; BDA8;BDA8;1107 116F 11B3;BDA8;1107 116F 11B3; BDA9;BDA9;1107 116F 11B4;BDA9;1107 116F 11B4; BDAA;BDAA;1107 116F 11B5;BDAA;1107 116F 11B5; BDAB;BDAB;1107 116F 11B6;BDAB;1107 116F 11B6; BDAC;BDAC;1107 116F 11B7;BDAC;1107 116F 11B7; BDAD;BDAD;1107 116F 11B8;BDAD;1107 116F 11B8; BDAE;BDAE;1107 116F 11B9;BDAE;1107 116F 11B9; BDAF;BDAF;1107 116F 11BA;BDAF;1107 116F 11BA; BDB0;BDB0;1107 116F 11BB;BDB0;1107 116F 11BB; BDB1;BDB1;1107 116F 11BC;BDB1;1107 116F 11BC; BDB2;BDB2;1107 116F 11BD;BDB2;1107 116F 11BD; BDB3;BDB3;1107 116F 11BE;BDB3;1107 116F 11BE; BDB4;BDB4;1107 116F 11BF;BDB4;1107 116F 11BF; BDB5;BDB5;1107 116F 11C0;BDB5;1107 116F 11C0; BDB6;BDB6;1107 116F 11C1;BDB6;1107 116F 11C1; BDB7;BDB7;1107 116F 11C2;BDB7;1107 116F 11C2; BDB8;BDB8;1107 1170;BDB8;1107 1170; BDB9;BDB9;1107 1170 11A8;BDB9;1107 1170 11A8; BDBA;BDBA;1107 1170 11A9;BDBA;1107 1170 11A9; BDBB;BDBB;1107 1170 11AA;BDBB;1107 1170 11AA; BDBC;BDBC;1107 1170 11AB;BDBC;1107 1170 11AB; BDBD;BDBD;1107 1170 11AC;BDBD;1107 1170 11AC; BDBE;BDBE;1107 1170 11AD;BDBE;1107 1170 11AD; BDBF;BDBF;1107 1170 11AE;BDBF;1107 1170 11AE; BDC0;BDC0;1107 1170 11AF;BDC0;1107 1170 11AF; BDC1;BDC1;1107 1170 11B0;BDC1;1107 1170 11B0; BDC2;BDC2;1107 1170 11B1;BDC2;1107 1170 11B1; BDC3;BDC3;1107 1170 11B2;BDC3;1107 1170 11B2; BDC4;BDC4;1107 1170 11B3;BDC4;1107 1170 11B3; BDC5;BDC5;1107 1170 11B4;BDC5;1107 1170 11B4; BDC6;BDC6;1107 1170 11B5;BDC6;1107 1170 11B5; BDC7;BDC7;1107 1170 11B6;BDC7;1107 1170 11B6; BDC8;BDC8;1107 1170 11B7;BDC8;1107 1170 11B7; BDC9;BDC9;1107 1170 11B8;BDC9;1107 1170 11B8; BDCA;BDCA;1107 1170 11B9;BDCA;1107 1170 11B9; BDCB;BDCB;1107 1170 11BA;BDCB;1107 1170 11BA; BDCC;BDCC;1107 1170 11BB;BDCC;1107 1170 11BB; BDCD;BDCD;1107 1170 11BC;BDCD;1107 1170 11BC; BDCE;BDCE;1107 1170 11BD;BDCE;1107 1170 11BD; BDCF;BDCF;1107 1170 11BE;BDCF;1107 1170 11BE; BDD0;BDD0;1107 1170 11BF;BDD0;1107 1170 11BF; BDD1;BDD1;1107 1170 11C0;BDD1;1107 1170 11C0; BDD2;BDD2;1107 1170 11C1;BDD2;1107 1170 11C1; BDD3;BDD3;1107 1170 11C2;BDD3;1107 1170 11C2; BDD4;BDD4;1107 1171;BDD4;1107 1171; BDD5;BDD5;1107 1171 11A8;BDD5;1107 1171 11A8; BDD6;BDD6;1107 1171 11A9;BDD6;1107 1171 11A9; BDD7;BDD7;1107 1171 11AA;BDD7;1107 1171 11AA; BDD8;BDD8;1107 1171 11AB;BDD8;1107 1171 11AB; BDD9;BDD9;1107 1171 11AC;BDD9;1107 1171 11AC; BDDA;BDDA;1107 1171 11AD;BDDA;1107 1171 11AD; BDDB;BDDB;1107 1171 11AE;BDDB;1107 1171 11AE; BDDC;BDDC;1107 1171 11AF;BDDC;1107 1171 11AF; BDDD;BDDD;1107 1171 11B0;BDDD;1107 1171 11B0; BDDE;BDDE;1107 1171 11B1;BDDE;1107 1171 11B1; BDDF;BDDF;1107 1171 11B2;BDDF;1107 1171 11B2; BDE0;BDE0;1107 1171 11B3;BDE0;1107 1171 11B3; BDE1;BDE1;1107 1171 11B4;BDE1;1107 1171 11B4; BDE2;BDE2;1107 1171 11B5;BDE2;1107 1171 11B5; BDE3;BDE3;1107 1171 11B6;BDE3;1107 1171 11B6; BDE4;BDE4;1107 1171 11B7;BDE4;1107 1171 11B7; BDE5;BDE5;1107 1171 11B8;BDE5;1107 1171 11B8; BDE6;BDE6;1107 1171 11B9;BDE6;1107 1171 11B9; BDE7;BDE7;1107 1171 11BA;BDE7;1107 1171 11BA; BDE8;BDE8;1107 1171 11BB;BDE8;1107 1171 11BB; BDE9;BDE9;1107 1171 11BC;BDE9;1107 1171 11BC; BDEA;BDEA;1107 1171 11BD;BDEA;1107 1171 11BD; BDEB;BDEB;1107 1171 11BE;BDEB;1107 1171 11BE; BDEC;BDEC;1107 1171 11BF;BDEC;1107 1171 11BF; BDED;BDED;1107 1171 11C0;BDED;1107 1171 11C0; BDEE;BDEE;1107 1171 11C1;BDEE;1107 1171 11C1; BDEF;BDEF;1107 1171 11C2;BDEF;1107 1171 11C2; BDF0;BDF0;1107 1172;BDF0;1107 1172; BDF1;BDF1;1107 1172 11A8;BDF1;1107 1172 11A8; BDF2;BDF2;1107 1172 11A9;BDF2;1107 1172 11A9; BDF3;BDF3;1107 1172 11AA;BDF3;1107 1172 11AA; BDF4;BDF4;1107 1172 11AB;BDF4;1107 1172 11AB; BDF5;BDF5;1107 1172 11AC;BDF5;1107 1172 11AC; BDF6;BDF6;1107 1172 11AD;BDF6;1107 1172 11AD; BDF7;BDF7;1107 1172 11AE;BDF7;1107 1172 11AE; BDF8;BDF8;1107 1172 11AF;BDF8;1107 1172 11AF; BDF9;BDF9;1107 1172 11B0;BDF9;1107 1172 11B0; BDFA;BDFA;1107 1172 11B1;BDFA;1107 1172 11B1; BDFB;BDFB;1107 1172 11B2;BDFB;1107 1172 11B2; BDFC;BDFC;1107 1172 11B3;BDFC;1107 1172 11B3; BDFD;BDFD;1107 1172 11B4;BDFD;1107 1172 11B4; BDFE;BDFE;1107 1172 11B5;BDFE;1107 1172 11B5; BDFF;BDFF;1107 1172 11B6;BDFF;1107 1172 11B6; BE00;BE00;1107 1172 11B7;BE00;1107 1172 11B7; BE01;BE01;1107 1172 11B8;BE01;1107 1172 11B8; BE02;BE02;1107 1172 11B9;BE02;1107 1172 11B9; BE03;BE03;1107 1172 11BA;BE03;1107 1172 11BA; BE04;BE04;1107 1172 11BB;BE04;1107 1172 11BB; BE05;BE05;1107 1172 11BC;BE05;1107 1172 11BC; BE06;BE06;1107 1172 11BD;BE06;1107 1172 11BD; BE07;BE07;1107 1172 11BE;BE07;1107 1172 11BE; BE08;BE08;1107 1172 11BF;BE08;1107 1172 11BF; BE09;BE09;1107 1172 11C0;BE09;1107 1172 11C0; BE0A;BE0A;1107 1172 11C1;BE0A;1107 1172 11C1; BE0B;BE0B;1107 1172 11C2;BE0B;1107 1172 11C2; BE0C;BE0C;1107 1173;BE0C;1107 1173; BE0D;BE0D;1107 1173 11A8;BE0D;1107 1173 11A8; BE0E;BE0E;1107 1173 11A9;BE0E;1107 1173 11A9; BE0F;BE0F;1107 1173 11AA;BE0F;1107 1173 11AA; BE10;BE10;1107 1173 11AB;BE10;1107 1173 11AB; BE11;BE11;1107 1173 11AC;BE11;1107 1173 11AC; BE12;BE12;1107 1173 11AD;BE12;1107 1173 11AD; BE13;BE13;1107 1173 11AE;BE13;1107 1173 11AE; BE14;BE14;1107 1173 11AF;BE14;1107 1173 11AF; BE15;BE15;1107 1173 11B0;BE15;1107 1173 11B0; BE16;BE16;1107 1173 11B1;BE16;1107 1173 11B1; BE17;BE17;1107 1173 11B2;BE17;1107 1173 11B2; BE18;BE18;1107 1173 11B3;BE18;1107 1173 11B3; BE19;BE19;1107 1173 11B4;BE19;1107 1173 11B4; BE1A;BE1A;1107 1173 11B5;BE1A;1107 1173 11B5; BE1B;BE1B;1107 1173 11B6;BE1B;1107 1173 11B6; BE1C;BE1C;1107 1173 11B7;BE1C;1107 1173 11B7; BE1D;BE1D;1107 1173 11B8;BE1D;1107 1173 11B8; BE1E;BE1E;1107 1173 11B9;BE1E;1107 1173 11B9; BE1F;BE1F;1107 1173 11BA;BE1F;1107 1173 11BA; BE20;BE20;1107 1173 11BB;BE20;1107 1173 11BB; BE21;BE21;1107 1173 11BC;BE21;1107 1173 11BC; BE22;BE22;1107 1173 11BD;BE22;1107 1173 11BD; BE23;BE23;1107 1173 11BE;BE23;1107 1173 11BE; BE24;BE24;1107 1173 11BF;BE24;1107 1173 11BF; BE25;BE25;1107 1173 11C0;BE25;1107 1173 11C0; BE26;BE26;1107 1173 11C1;BE26;1107 1173 11C1; BE27;BE27;1107 1173 11C2;BE27;1107 1173 11C2; BE28;BE28;1107 1174;BE28;1107 1174; BE29;BE29;1107 1174 11A8;BE29;1107 1174 11A8; BE2A;BE2A;1107 1174 11A9;BE2A;1107 1174 11A9; BE2B;BE2B;1107 1174 11AA;BE2B;1107 1174 11AA; BE2C;BE2C;1107 1174 11AB;BE2C;1107 1174 11AB; BE2D;BE2D;1107 1174 11AC;BE2D;1107 1174 11AC; BE2E;BE2E;1107 1174 11AD;BE2E;1107 1174 11AD; BE2F;BE2F;1107 1174 11AE;BE2F;1107 1174 11AE; BE30;BE30;1107 1174 11AF;BE30;1107 1174 11AF; BE31;BE31;1107 1174 11B0;BE31;1107 1174 11B0; BE32;BE32;1107 1174 11B1;BE32;1107 1174 11B1; BE33;BE33;1107 1174 11B2;BE33;1107 1174 11B2; BE34;BE34;1107 1174 11B3;BE34;1107 1174 11B3; BE35;BE35;1107 1174 11B4;BE35;1107 1174 11B4; BE36;BE36;1107 1174 11B5;BE36;1107 1174 11B5; BE37;BE37;1107 1174 11B6;BE37;1107 1174 11B6; BE38;BE38;1107 1174 11B7;BE38;1107 1174 11B7; BE39;BE39;1107 1174 11B8;BE39;1107 1174 11B8; BE3A;BE3A;1107 1174 11B9;BE3A;1107 1174 11B9; BE3B;BE3B;1107 1174 11BA;BE3B;1107 1174 11BA; BE3C;BE3C;1107 1174 11BB;BE3C;1107 1174 11BB; BE3D;BE3D;1107 1174 11BC;BE3D;1107 1174 11BC; BE3E;BE3E;1107 1174 11BD;BE3E;1107 1174 11BD; BE3F;BE3F;1107 1174 11BE;BE3F;1107 1174 11BE; BE40;BE40;1107 1174 11BF;BE40;1107 1174 11BF; BE41;BE41;1107 1174 11C0;BE41;1107 1174 11C0; BE42;BE42;1107 1174 11C1;BE42;1107 1174 11C1; BE43;BE43;1107 1174 11C2;BE43;1107 1174 11C2; BE44;BE44;1107 1175;BE44;1107 1175; BE45;BE45;1107 1175 11A8;BE45;1107 1175 11A8; BE46;BE46;1107 1175 11A9;BE46;1107 1175 11A9; BE47;BE47;1107 1175 11AA;BE47;1107 1175 11AA; BE48;BE48;1107 1175 11AB;BE48;1107 1175 11AB; BE49;BE49;1107 1175 11AC;BE49;1107 1175 11AC; BE4A;BE4A;1107 1175 11AD;BE4A;1107 1175 11AD; BE4B;BE4B;1107 1175 11AE;BE4B;1107 1175 11AE; BE4C;BE4C;1107 1175 11AF;BE4C;1107 1175 11AF; BE4D;BE4D;1107 1175 11B0;BE4D;1107 1175 11B0; BE4E;BE4E;1107 1175 11B1;BE4E;1107 1175 11B1; BE4F;BE4F;1107 1175 11B2;BE4F;1107 1175 11B2; BE50;BE50;1107 1175 11B3;BE50;1107 1175 11B3; BE51;BE51;1107 1175 11B4;BE51;1107 1175 11B4; BE52;BE52;1107 1175 11B5;BE52;1107 1175 11B5; BE53;BE53;1107 1175 11B6;BE53;1107 1175 11B6; BE54;BE54;1107 1175 11B7;BE54;1107 1175 11B7; BE55;BE55;1107 1175 11B8;BE55;1107 1175 11B8; BE56;BE56;1107 1175 11B9;BE56;1107 1175 11B9; BE57;BE57;1107 1175 11BA;BE57;1107 1175 11BA; BE58;BE58;1107 1175 11BB;BE58;1107 1175 11BB; BE59;BE59;1107 1175 11BC;BE59;1107 1175 11BC; BE5A;BE5A;1107 1175 11BD;BE5A;1107 1175 11BD; BE5B;BE5B;1107 1175 11BE;BE5B;1107 1175 11BE; BE5C;BE5C;1107 1175 11BF;BE5C;1107 1175 11BF; BE5D;BE5D;1107 1175 11C0;BE5D;1107 1175 11C0; BE5E;BE5E;1107 1175 11C1;BE5E;1107 1175 11C1; BE5F;BE5F;1107 1175 11C2;BE5F;1107 1175 11C2; BE60;BE60;1108 1161;BE60;1108 1161; BE61;BE61;1108 1161 11A8;BE61;1108 1161 11A8; BE62;BE62;1108 1161 11A9;BE62;1108 1161 11A9; BE63;BE63;1108 1161 11AA;BE63;1108 1161 11AA; BE64;BE64;1108 1161 11AB;BE64;1108 1161 11AB; BE65;BE65;1108 1161 11AC;BE65;1108 1161 11AC; BE66;BE66;1108 1161 11AD;BE66;1108 1161 11AD; BE67;BE67;1108 1161 11AE;BE67;1108 1161 11AE; BE68;BE68;1108 1161 11AF;BE68;1108 1161 11AF; BE69;BE69;1108 1161 11B0;BE69;1108 1161 11B0; BE6A;BE6A;1108 1161 11B1;BE6A;1108 1161 11B1; BE6B;BE6B;1108 1161 11B2;BE6B;1108 1161 11B2; BE6C;BE6C;1108 1161 11B3;BE6C;1108 1161 11B3; BE6D;BE6D;1108 1161 11B4;BE6D;1108 1161 11B4; BE6E;BE6E;1108 1161 11B5;BE6E;1108 1161 11B5; BE6F;BE6F;1108 1161 11B6;BE6F;1108 1161 11B6; BE70;BE70;1108 1161 11B7;BE70;1108 1161 11B7; BE71;BE71;1108 1161 11B8;BE71;1108 1161 11B8; BE72;BE72;1108 1161 11B9;BE72;1108 1161 11B9; BE73;BE73;1108 1161 11BA;BE73;1108 1161 11BA; BE74;BE74;1108 1161 11BB;BE74;1108 1161 11BB; BE75;BE75;1108 1161 11BC;BE75;1108 1161 11BC; BE76;BE76;1108 1161 11BD;BE76;1108 1161 11BD; BE77;BE77;1108 1161 11BE;BE77;1108 1161 11BE; BE78;BE78;1108 1161 11BF;BE78;1108 1161 11BF; BE79;BE79;1108 1161 11C0;BE79;1108 1161 11C0; BE7A;BE7A;1108 1161 11C1;BE7A;1108 1161 11C1; BE7B;BE7B;1108 1161 11C2;BE7B;1108 1161 11C2; BE7C;BE7C;1108 1162;BE7C;1108 1162; BE7D;BE7D;1108 1162 11A8;BE7D;1108 1162 11A8; BE7E;BE7E;1108 1162 11A9;BE7E;1108 1162 11A9; BE7F;BE7F;1108 1162 11AA;BE7F;1108 1162 11AA; BE80;BE80;1108 1162 11AB;BE80;1108 1162 11AB; BE81;BE81;1108 1162 11AC;BE81;1108 1162 11AC; BE82;BE82;1108 1162 11AD;BE82;1108 1162 11AD; BE83;BE83;1108 1162 11AE;BE83;1108 1162 11AE; BE84;BE84;1108 1162 11AF;BE84;1108 1162 11AF; BE85;BE85;1108 1162 11B0;BE85;1108 1162 11B0; BE86;BE86;1108 1162 11B1;BE86;1108 1162 11B1; BE87;BE87;1108 1162 11B2;BE87;1108 1162 11B2; BE88;BE88;1108 1162 11B3;BE88;1108 1162 11B3; BE89;BE89;1108 1162 11B4;BE89;1108 1162 11B4; BE8A;BE8A;1108 1162 11B5;BE8A;1108 1162 11B5; BE8B;BE8B;1108 1162 11B6;BE8B;1108 1162 11B6; BE8C;BE8C;1108 1162 11B7;BE8C;1108 1162 11B7; BE8D;BE8D;1108 1162 11B8;BE8D;1108 1162 11B8; BE8E;BE8E;1108 1162 11B9;BE8E;1108 1162 11B9; BE8F;BE8F;1108 1162 11BA;BE8F;1108 1162 11BA; BE90;BE90;1108 1162 11BB;BE90;1108 1162 11BB; BE91;BE91;1108 1162 11BC;BE91;1108 1162 11BC; BE92;BE92;1108 1162 11BD;BE92;1108 1162 11BD; BE93;BE93;1108 1162 11BE;BE93;1108 1162 11BE; BE94;BE94;1108 1162 11BF;BE94;1108 1162 11BF; BE95;BE95;1108 1162 11C0;BE95;1108 1162 11C0; BE96;BE96;1108 1162 11C1;BE96;1108 1162 11C1; BE97;BE97;1108 1162 11C2;BE97;1108 1162 11C2; BE98;BE98;1108 1163;BE98;1108 1163; BE99;BE99;1108 1163 11A8;BE99;1108 1163 11A8; BE9A;BE9A;1108 1163 11A9;BE9A;1108 1163 11A9; BE9B;BE9B;1108 1163 11AA;BE9B;1108 1163 11AA; BE9C;BE9C;1108 1163 11AB;BE9C;1108 1163 11AB; BE9D;BE9D;1108 1163 11AC;BE9D;1108 1163 11AC; BE9E;BE9E;1108 1163 11AD;BE9E;1108 1163 11AD; BE9F;BE9F;1108 1163 11AE;BE9F;1108 1163 11AE; BEA0;BEA0;1108 1163 11AF;BEA0;1108 1163 11AF; BEA1;BEA1;1108 1163 11B0;BEA1;1108 1163 11B0; BEA2;BEA2;1108 1163 11B1;BEA2;1108 1163 11B1; BEA3;BEA3;1108 1163 11B2;BEA3;1108 1163 11B2; BEA4;BEA4;1108 1163 11B3;BEA4;1108 1163 11B3; BEA5;BEA5;1108 1163 11B4;BEA5;1108 1163 11B4; BEA6;BEA6;1108 1163 11B5;BEA6;1108 1163 11B5; BEA7;BEA7;1108 1163 11B6;BEA7;1108 1163 11B6; BEA8;BEA8;1108 1163 11B7;BEA8;1108 1163 11B7; BEA9;BEA9;1108 1163 11B8;BEA9;1108 1163 11B8; BEAA;BEAA;1108 1163 11B9;BEAA;1108 1163 11B9; BEAB;BEAB;1108 1163 11BA;BEAB;1108 1163 11BA; BEAC;BEAC;1108 1163 11BB;BEAC;1108 1163 11BB; BEAD;BEAD;1108 1163 11BC;BEAD;1108 1163 11BC; BEAE;BEAE;1108 1163 11BD;BEAE;1108 1163 11BD; BEAF;BEAF;1108 1163 11BE;BEAF;1108 1163 11BE; BEB0;BEB0;1108 1163 11BF;BEB0;1108 1163 11BF; BEB1;BEB1;1108 1163 11C0;BEB1;1108 1163 11C0; BEB2;BEB2;1108 1163 11C1;BEB2;1108 1163 11C1; BEB3;BEB3;1108 1163 11C2;BEB3;1108 1163 11C2; BEB4;BEB4;1108 1164;BEB4;1108 1164; BEB5;BEB5;1108 1164 11A8;BEB5;1108 1164 11A8; BEB6;BEB6;1108 1164 11A9;BEB6;1108 1164 11A9; BEB7;BEB7;1108 1164 11AA;BEB7;1108 1164 11AA; BEB8;BEB8;1108 1164 11AB;BEB8;1108 1164 11AB; BEB9;BEB9;1108 1164 11AC;BEB9;1108 1164 11AC; BEBA;BEBA;1108 1164 11AD;BEBA;1108 1164 11AD; BEBB;BEBB;1108 1164 11AE;BEBB;1108 1164 11AE; BEBC;BEBC;1108 1164 11AF;BEBC;1108 1164 11AF; BEBD;BEBD;1108 1164 11B0;BEBD;1108 1164 11B0; BEBE;BEBE;1108 1164 11B1;BEBE;1108 1164 11B1; BEBF;BEBF;1108 1164 11B2;BEBF;1108 1164 11B2; BEC0;BEC0;1108 1164 11B3;BEC0;1108 1164 11B3; BEC1;BEC1;1108 1164 11B4;BEC1;1108 1164 11B4; BEC2;BEC2;1108 1164 11B5;BEC2;1108 1164 11B5; BEC3;BEC3;1108 1164 11B6;BEC3;1108 1164 11B6; BEC4;BEC4;1108 1164 11B7;BEC4;1108 1164 11B7; BEC5;BEC5;1108 1164 11B8;BEC5;1108 1164 11B8; BEC6;BEC6;1108 1164 11B9;BEC6;1108 1164 11B9; BEC7;BEC7;1108 1164 11BA;BEC7;1108 1164 11BA; BEC8;BEC8;1108 1164 11BB;BEC8;1108 1164 11BB; BEC9;BEC9;1108 1164 11BC;BEC9;1108 1164 11BC; BECA;BECA;1108 1164 11BD;BECA;1108 1164 11BD; BECB;BECB;1108 1164 11BE;BECB;1108 1164 11BE; BECC;BECC;1108 1164 11BF;BECC;1108 1164 11BF; BECD;BECD;1108 1164 11C0;BECD;1108 1164 11C0; BECE;BECE;1108 1164 11C1;BECE;1108 1164 11C1; BECF;BECF;1108 1164 11C2;BECF;1108 1164 11C2; BED0;BED0;1108 1165;BED0;1108 1165; BED1;BED1;1108 1165 11A8;BED1;1108 1165 11A8; BED2;BED2;1108 1165 11A9;BED2;1108 1165 11A9; BED3;BED3;1108 1165 11AA;BED3;1108 1165 11AA; BED4;BED4;1108 1165 11AB;BED4;1108 1165 11AB; BED5;BED5;1108 1165 11AC;BED5;1108 1165 11AC; BED6;BED6;1108 1165 11AD;BED6;1108 1165 11AD; BED7;BED7;1108 1165 11AE;BED7;1108 1165 11AE; BED8;BED8;1108 1165 11AF;BED8;1108 1165 11AF; BED9;BED9;1108 1165 11B0;BED9;1108 1165 11B0; BEDA;BEDA;1108 1165 11B1;BEDA;1108 1165 11B1; BEDB;BEDB;1108 1165 11B2;BEDB;1108 1165 11B2; BEDC;BEDC;1108 1165 11B3;BEDC;1108 1165 11B3; BEDD;BEDD;1108 1165 11B4;BEDD;1108 1165 11B4; BEDE;BEDE;1108 1165 11B5;BEDE;1108 1165 11B5; BEDF;BEDF;1108 1165 11B6;BEDF;1108 1165 11B6; BEE0;BEE0;1108 1165 11B7;BEE0;1108 1165 11B7; BEE1;BEE1;1108 1165 11B8;BEE1;1108 1165 11B8; BEE2;BEE2;1108 1165 11B9;BEE2;1108 1165 11B9; BEE3;BEE3;1108 1165 11BA;BEE3;1108 1165 11BA; BEE4;BEE4;1108 1165 11BB;BEE4;1108 1165 11BB; BEE5;BEE5;1108 1165 11BC;BEE5;1108 1165 11BC; BEE6;BEE6;1108 1165 11BD;BEE6;1108 1165 11BD; BEE7;BEE7;1108 1165 11BE;BEE7;1108 1165 11BE; BEE8;BEE8;1108 1165 11BF;BEE8;1108 1165 11BF; BEE9;BEE9;1108 1165 11C0;BEE9;1108 1165 11C0; BEEA;BEEA;1108 1165 11C1;BEEA;1108 1165 11C1; BEEB;BEEB;1108 1165 11C2;BEEB;1108 1165 11C2; BEEC;BEEC;1108 1166;BEEC;1108 1166; BEED;BEED;1108 1166 11A8;BEED;1108 1166 11A8; BEEE;BEEE;1108 1166 11A9;BEEE;1108 1166 11A9; BEEF;BEEF;1108 1166 11AA;BEEF;1108 1166 11AA; BEF0;BEF0;1108 1166 11AB;BEF0;1108 1166 11AB; BEF1;BEF1;1108 1166 11AC;BEF1;1108 1166 11AC; BEF2;BEF2;1108 1166 11AD;BEF2;1108 1166 11AD; BEF3;BEF3;1108 1166 11AE;BEF3;1108 1166 11AE; BEF4;BEF4;1108 1166 11AF;BEF4;1108 1166 11AF; BEF5;BEF5;1108 1166 11B0;BEF5;1108 1166 11B0; BEF6;BEF6;1108 1166 11B1;BEF6;1108 1166 11B1; BEF7;BEF7;1108 1166 11B2;BEF7;1108 1166 11B2; BEF8;BEF8;1108 1166 11B3;BEF8;1108 1166 11B3; BEF9;BEF9;1108 1166 11B4;BEF9;1108 1166 11B4; BEFA;BEFA;1108 1166 11B5;BEFA;1108 1166 11B5; BEFB;BEFB;1108 1166 11B6;BEFB;1108 1166 11B6; BEFC;BEFC;1108 1166 11B7;BEFC;1108 1166 11B7; BEFD;BEFD;1108 1166 11B8;BEFD;1108 1166 11B8; BEFE;BEFE;1108 1166 11B9;BEFE;1108 1166 11B9; BEFF;BEFF;1108 1166 11BA;BEFF;1108 1166 11BA; BF00;BF00;1108 1166 11BB;BF00;1108 1166 11BB; BF01;BF01;1108 1166 11BC;BF01;1108 1166 11BC; BF02;BF02;1108 1166 11BD;BF02;1108 1166 11BD; BF03;BF03;1108 1166 11BE;BF03;1108 1166 11BE; BF04;BF04;1108 1166 11BF;BF04;1108 1166 11BF; BF05;BF05;1108 1166 11C0;BF05;1108 1166 11C0; BF06;BF06;1108 1166 11C1;BF06;1108 1166 11C1; BF07;BF07;1108 1166 11C2;BF07;1108 1166 11C2; BF08;BF08;1108 1167;BF08;1108 1167; BF09;BF09;1108 1167 11A8;BF09;1108 1167 11A8; BF0A;BF0A;1108 1167 11A9;BF0A;1108 1167 11A9; BF0B;BF0B;1108 1167 11AA;BF0B;1108 1167 11AA; BF0C;BF0C;1108 1167 11AB;BF0C;1108 1167 11AB; BF0D;BF0D;1108 1167 11AC;BF0D;1108 1167 11AC; BF0E;BF0E;1108 1167 11AD;BF0E;1108 1167 11AD; BF0F;BF0F;1108 1167 11AE;BF0F;1108 1167 11AE; BF10;BF10;1108 1167 11AF;BF10;1108 1167 11AF; BF11;BF11;1108 1167 11B0;BF11;1108 1167 11B0; BF12;BF12;1108 1167 11B1;BF12;1108 1167 11B1; BF13;BF13;1108 1167 11B2;BF13;1108 1167 11B2; BF14;BF14;1108 1167 11B3;BF14;1108 1167 11B3; BF15;BF15;1108 1167 11B4;BF15;1108 1167 11B4; BF16;BF16;1108 1167 11B5;BF16;1108 1167 11B5; BF17;BF17;1108 1167 11B6;BF17;1108 1167 11B6; BF18;BF18;1108 1167 11B7;BF18;1108 1167 11B7; BF19;BF19;1108 1167 11B8;BF19;1108 1167 11B8; BF1A;BF1A;1108 1167 11B9;BF1A;1108 1167 11B9; BF1B;BF1B;1108 1167 11BA;BF1B;1108 1167 11BA; BF1C;BF1C;1108 1167 11BB;BF1C;1108 1167 11BB; BF1D;BF1D;1108 1167 11BC;BF1D;1108 1167 11BC; BF1E;BF1E;1108 1167 11BD;BF1E;1108 1167 11BD; BF1F;BF1F;1108 1167 11BE;BF1F;1108 1167 11BE; BF20;BF20;1108 1167 11BF;BF20;1108 1167 11BF; BF21;BF21;1108 1167 11C0;BF21;1108 1167 11C0; BF22;BF22;1108 1167 11C1;BF22;1108 1167 11C1; BF23;BF23;1108 1167 11C2;BF23;1108 1167 11C2; BF24;BF24;1108 1168;BF24;1108 1168; BF25;BF25;1108 1168 11A8;BF25;1108 1168 11A8; BF26;BF26;1108 1168 11A9;BF26;1108 1168 11A9; BF27;BF27;1108 1168 11AA;BF27;1108 1168 11AA; BF28;BF28;1108 1168 11AB;BF28;1108 1168 11AB; BF29;BF29;1108 1168 11AC;BF29;1108 1168 11AC; BF2A;BF2A;1108 1168 11AD;BF2A;1108 1168 11AD; BF2B;BF2B;1108 1168 11AE;BF2B;1108 1168 11AE; BF2C;BF2C;1108 1168 11AF;BF2C;1108 1168 11AF; BF2D;BF2D;1108 1168 11B0;BF2D;1108 1168 11B0; BF2E;BF2E;1108 1168 11B1;BF2E;1108 1168 11B1; BF2F;BF2F;1108 1168 11B2;BF2F;1108 1168 11B2; BF30;BF30;1108 1168 11B3;BF30;1108 1168 11B3; BF31;BF31;1108 1168 11B4;BF31;1108 1168 11B4; BF32;BF32;1108 1168 11B5;BF32;1108 1168 11B5; BF33;BF33;1108 1168 11B6;BF33;1108 1168 11B6; BF34;BF34;1108 1168 11B7;BF34;1108 1168 11B7; BF35;BF35;1108 1168 11B8;BF35;1108 1168 11B8; BF36;BF36;1108 1168 11B9;BF36;1108 1168 11B9; BF37;BF37;1108 1168 11BA;BF37;1108 1168 11BA; BF38;BF38;1108 1168 11BB;BF38;1108 1168 11BB; BF39;BF39;1108 1168 11BC;BF39;1108 1168 11BC; BF3A;BF3A;1108 1168 11BD;BF3A;1108 1168 11BD; BF3B;BF3B;1108 1168 11BE;BF3B;1108 1168 11BE; BF3C;BF3C;1108 1168 11BF;BF3C;1108 1168 11BF; BF3D;BF3D;1108 1168 11C0;BF3D;1108 1168 11C0; BF3E;BF3E;1108 1168 11C1;BF3E;1108 1168 11C1; BF3F;BF3F;1108 1168 11C2;BF3F;1108 1168 11C2; BF40;BF40;1108 1169;BF40;1108 1169; BF41;BF41;1108 1169 11A8;BF41;1108 1169 11A8; BF42;BF42;1108 1169 11A9;BF42;1108 1169 11A9; BF43;BF43;1108 1169 11AA;BF43;1108 1169 11AA; BF44;BF44;1108 1169 11AB;BF44;1108 1169 11AB; BF45;BF45;1108 1169 11AC;BF45;1108 1169 11AC; BF46;BF46;1108 1169 11AD;BF46;1108 1169 11AD; BF47;BF47;1108 1169 11AE;BF47;1108 1169 11AE; BF48;BF48;1108 1169 11AF;BF48;1108 1169 11AF; BF49;BF49;1108 1169 11B0;BF49;1108 1169 11B0; BF4A;BF4A;1108 1169 11B1;BF4A;1108 1169 11B1; BF4B;BF4B;1108 1169 11B2;BF4B;1108 1169 11B2; BF4C;BF4C;1108 1169 11B3;BF4C;1108 1169 11B3; BF4D;BF4D;1108 1169 11B4;BF4D;1108 1169 11B4; BF4E;BF4E;1108 1169 11B5;BF4E;1108 1169 11B5; BF4F;BF4F;1108 1169 11B6;BF4F;1108 1169 11B6; BF50;BF50;1108 1169 11B7;BF50;1108 1169 11B7; BF51;BF51;1108 1169 11B8;BF51;1108 1169 11B8; BF52;BF52;1108 1169 11B9;BF52;1108 1169 11B9; BF53;BF53;1108 1169 11BA;BF53;1108 1169 11BA; BF54;BF54;1108 1169 11BB;BF54;1108 1169 11BB; BF55;BF55;1108 1169 11BC;BF55;1108 1169 11BC; BF56;BF56;1108 1169 11BD;BF56;1108 1169 11BD; BF57;BF57;1108 1169 11BE;BF57;1108 1169 11BE; BF58;BF58;1108 1169 11BF;BF58;1108 1169 11BF; BF59;BF59;1108 1169 11C0;BF59;1108 1169 11C0; BF5A;BF5A;1108 1169 11C1;BF5A;1108 1169 11C1; BF5B;BF5B;1108 1169 11C2;BF5B;1108 1169 11C2; BF5C;BF5C;1108 116A;BF5C;1108 116A; BF5D;BF5D;1108 116A 11A8;BF5D;1108 116A 11A8; BF5E;BF5E;1108 116A 11A9;BF5E;1108 116A 11A9; BF5F;BF5F;1108 116A 11AA;BF5F;1108 116A 11AA; BF60;BF60;1108 116A 11AB;BF60;1108 116A 11AB; BF61;BF61;1108 116A 11AC;BF61;1108 116A 11AC; BF62;BF62;1108 116A 11AD;BF62;1108 116A 11AD; BF63;BF63;1108 116A 11AE;BF63;1108 116A 11AE; BF64;BF64;1108 116A 11AF;BF64;1108 116A 11AF; BF65;BF65;1108 116A 11B0;BF65;1108 116A 11B0; BF66;BF66;1108 116A 11B1;BF66;1108 116A 11B1; BF67;BF67;1108 116A 11B2;BF67;1108 116A 11B2; BF68;BF68;1108 116A 11B3;BF68;1108 116A 11B3; BF69;BF69;1108 116A 11B4;BF69;1108 116A 11B4; BF6A;BF6A;1108 116A 11B5;BF6A;1108 116A 11B5; BF6B;BF6B;1108 116A 11B6;BF6B;1108 116A 11B6; BF6C;BF6C;1108 116A 11B7;BF6C;1108 116A 11B7; BF6D;BF6D;1108 116A 11B8;BF6D;1108 116A 11B8; BF6E;BF6E;1108 116A 11B9;BF6E;1108 116A 11B9; BF6F;BF6F;1108 116A 11BA;BF6F;1108 116A 11BA; BF70;BF70;1108 116A 11BB;BF70;1108 116A 11BB; BF71;BF71;1108 116A 11BC;BF71;1108 116A 11BC; BF72;BF72;1108 116A 11BD;BF72;1108 116A 11BD; BF73;BF73;1108 116A 11BE;BF73;1108 116A 11BE; BF74;BF74;1108 116A 11BF;BF74;1108 116A 11BF; BF75;BF75;1108 116A 11C0;BF75;1108 116A 11C0; BF76;BF76;1108 116A 11C1;BF76;1108 116A 11C1; BF77;BF77;1108 116A 11C2;BF77;1108 116A 11C2; BF78;BF78;1108 116B;BF78;1108 116B; BF79;BF79;1108 116B 11A8;BF79;1108 116B 11A8; BF7A;BF7A;1108 116B 11A9;BF7A;1108 116B 11A9; BF7B;BF7B;1108 116B 11AA;BF7B;1108 116B 11AA; BF7C;BF7C;1108 116B 11AB;BF7C;1108 116B 11AB; BF7D;BF7D;1108 116B 11AC;BF7D;1108 116B 11AC; BF7E;BF7E;1108 116B 11AD;BF7E;1108 116B 11AD; BF7F;BF7F;1108 116B 11AE;BF7F;1108 116B 11AE; BF80;BF80;1108 116B 11AF;BF80;1108 116B 11AF; BF81;BF81;1108 116B 11B0;BF81;1108 116B 11B0; BF82;BF82;1108 116B 11B1;BF82;1108 116B 11B1; BF83;BF83;1108 116B 11B2;BF83;1108 116B 11B2; BF84;BF84;1108 116B 11B3;BF84;1108 116B 11B3; BF85;BF85;1108 116B 11B4;BF85;1108 116B 11B4; BF86;BF86;1108 116B 11B5;BF86;1108 116B 11B5; BF87;BF87;1108 116B 11B6;BF87;1108 116B 11B6; BF88;BF88;1108 116B 11B7;BF88;1108 116B 11B7; BF89;BF89;1108 116B 11B8;BF89;1108 116B 11B8; BF8A;BF8A;1108 116B 11B9;BF8A;1108 116B 11B9; BF8B;BF8B;1108 116B 11BA;BF8B;1108 116B 11BA; BF8C;BF8C;1108 116B 11BB;BF8C;1108 116B 11BB; BF8D;BF8D;1108 116B 11BC;BF8D;1108 116B 11BC; BF8E;BF8E;1108 116B 11BD;BF8E;1108 116B 11BD; BF8F;BF8F;1108 116B 11BE;BF8F;1108 116B 11BE; BF90;BF90;1108 116B 11BF;BF90;1108 116B 11BF; BF91;BF91;1108 116B 11C0;BF91;1108 116B 11C0; BF92;BF92;1108 116B 11C1;BF92;1108 116B 11C1; BF93;BF93;1108 116B 11C2;BF93;1108 116B 11C2; BF94;BF94;1108 116C;BF94;1108 116C; BF95;BF95;1108 116C 11A8;BF95;1108 116C 11A8; BF96;BF96;1108 116C 11A9;BF96;1108 116C 11A9; BF97;BF97;1108 116C 11AA;BF97;1108 116C 11AA; BF98;BF98;1108 116C 11AB;BF98;1108 116C 11AB; BF99;BF99;1108 116C 11AC;BF99;1108 116C 11AC; BF9A;BF9A;1108 116C 11AD;BF9A;1108 116C 11AD; BF9B;BF9B;1108 116C 11AE;BF9B;1108 116C 11AE; BF9C;BF9C;1108 116C 11AF;BF9C;1108 116C 11AF; BF9D;BF9D;1108 116C 11B0;BF9D;1108 116C 11B0; BF9E;BF9E;1108 116C 11B1;BF9E;1108 116C 11B1; BF9F;BF9F;1108 116C 11B2;BF9F;1108 116C 11B2; BFA0;BFA0;1108 116C 11B3;BFA0;1108 116C 11B3; BFA1;BFA1;1108 116C 11B4;BFA1;1108 116C 11B4; BFA2;BFA2;1108 116C 11B5;BFA2;1108 116C 11B5; BFA3;BFA3;1108 116C 11B6;BFA3;1108 116C 11B6; BFA4;BFA4;1108 116C 11B7;BFA4;1108 116C 11B7; BFA5;BFA5;1108 116C 11B8;BFA5;1108 116C 11B8; BFA6;BFA6;1108 116C 11B9;BFA6;1108 116C 11B9; BFA7;BFA7;1108 116C 11BA;BFA7;1108 116C 11BA; BFA8;BFA8;1108 116C 11BB;BFA8;1108 116C 11BB; BFA9;BFA9;1108 116C 11BC;BFA9;1108 116C 11BC; BFAA;BFAA;1108 116C 11BD;BFAA;1108 116C 11BD; BFAB;BFAB;1108 116C 11BE;BFAB;1108 116C 11BE; BFAC;BFAC;1108 116C 11BF;BFAC;1108 116C 11BF; BFAD;BFAD;1108 116C 11C0;BFAD;1108 116C 11C0; BFAE;BFAE;1108 116C 11C1;BFAE;1108 116C 11C1; BFAF;BFAF;1108 116C 11C2;BFAF;1108 116C 11C2; BFB0;BFB0;1108 116D;BFB0;1108 116D; BFB1;BFB1;1108 116D 11A8;BFB1;1108 116D 11A8; BFB2;BFB2;1108 116D 11A9;BFB2;1108 116D 11A9; BFB3;BFB3;1108 116D 11AA;BFB3;1108 116D 11AA; BFB4;BFB4;1108 116D 11AB;BFB4;1108 116D 11AB; BFB5;BFB5;1108 116D 11AC;BFB5;1108 116D 11AC; BFB6;BFB6;1108 116D 11AD;BFB6;1108 116D 11AD; BFB7;BFB7;1108 116D 11AE;BFB7;1108 116D 11AE; BFB8;BFB8;1108 116D 11AF;BFB8;1108 116D 11AF; BFB9;BFB9;1108 116D 11B0;BFB9;1108 116D 11B0; BFBA;BFBA;1108 116D 11B1;BFBA;1108 116D 11B1; BFBB;BFBB;1108 116D 11B2;BFBB;1108 116D 11B2; BFBC;BFBC;1108 116D 11B3;BFBC;1108 116D 11B3; BFBD;BFBD;1108 116D 11B4;BFBD;1108 116D 11B4; BFBE;BFBE;1108 116D 11B5;BFBE;1108 116D 11B5; BFBF;BFBF;1108 116D 11B6;BFBF;1108 116D 11B6; BFC0;BFC0;1108 116D 11B7;BFC0;1108 116D 11B7; BFC1;BFC1;1108 116D 11B8;BFC1;1108 116D 11B8; BFC2;BFC2;1108 116D 11B9;BFC2;1108 116D 11B9; BFC3;BFC3;1108 116D 11BA;BFC3;1108 116D 11BA; BFC4;BFC4;1108 116D 11BB;BFC4;1108 116D 11BB; BFC5;BFC5;1108 116D 11BC;BFC5;1108 116D 11BC; BFC6;BFC6;1108 116D 11BD;BFC6;1108 116D 11BD; BFC7;BFC7;1108 116D 11BE;BFC7;1108 116D 11BE; BFC8;BFC8;1108 116D 11BF;BFC8;1108 116D 11BF; BFC9;BFC9;1108 116D 11C0;BFC9;1108 116D 11C0; BFCA;BFCA;1108 116D 11C1;BFCA;1108 116D 11C1; BFCB;BFCB;1108 116D 11C2;BFCB;1108 116D 11C2; BFCC;BFCC;1108 116E;BFCC;1108 116E; BFCD;BFCD;1108 116E 11A8;BFCD;1108 116E 11A8; BFCE;BFCE;1108 116E 11A9;BFCE;1108 116E 11A9; BFCF;BFCF;1108 116E 11AA;BFCF;1108 116E 11AA; BFD0;BFD0;1108 116E 11AB;BFD0;1108 116E 11AB; BFD1;BFD1;1108 116E 11AC;BFD1;1108 116E 11AC; BFD2;BFD2;1108 116E 11AD;BFD2;1108 116E 11AD; BFD3;BFD3;1108 116E 11AE;BFD3;1108 116E 11AE; BFD4;BFD4;1108 116E 11AF;BFD4;1108 116E 11AF; BFD5;BFD5;1108 116E 11B0;BFD5;1108 116E 11B0; BFD6;BFD6;1108 116E 11B1;BFD6;1108 116E 11B1; BFD7;BFD7;1108 116E 11B2;BFD7;1108 116E 11B2; BFD8;BFD8;1108 116E 11B3;BFD8;1108 116E 11B3; BFD9;BFD9;1108 116E 11B4;BFD9;1108 116E 11B4; BFDA;BFDA;1108 116E 11B5;BFDA;1108 116E 11B5; BFDB;BFDB;1108 116E 11B6;BFDB;1108 116E 11B6; BFDC;BFDC;1108 116E 11B7;BFDC;1108 116E 11B7; BFDD;BFDD;1108 116E 11B8;BFDD;1108 116E 11B8; BFDE;BFDE;1108 116E 11B9;BFDE;1108 116E 11B9; BFDF;BFDF;1108 116E 11BA;BFDF;1108 116E 11BA; BFE0;BFE0;1108 116E 11BB;BFE0;1108 116E 11BB; BFE1;BFE1;1108 116E 11BC;BFE1;1108 116E 11BC; BFE2;BFE2;1108 116E 11BD;BFE2;1108 116E 11BD; BFE3;BFE3;1108 116E 11BE;BFE3;1108 116E 11BE; BFE4;BFE4;1108 116E 11BF;BFE4;1108 116E 11BF; BFE5;BFE5;1108 116E 11C0;BFE5;1108 116E 11C0; BFE6;BFE6;1108 116E 11C1;BFE6;1108 116E 11C1; BFE7;BFE7;1108 116E 11C2;BFE7;1108 116E 11C2; BFE8;BFE8;1108 116F;BFE8;1108 116F; BFE9;BFE9;1108 116F 11A8;BFE9;1108 116F 11A8; BFEA;BFEA;1108 116F 11A9;BFEA;1108 116F 11A9; BFEB;BFEB;1108 116F 11AA;BFEB;1108 116F 11AA; BFEC;BFEC;1108 116F 11AB;BFEC;1108 116F 11AB; BFED;BFED;1108 116F 11AC;BFED;1108 116F 11AC; BFEE;BFEE;1108 116F 11AD;BFEE;1108 116F 11AD; BFEF;BFEF;1108 116F 11AE;BFEF;1108 116F 11AE; BFF0;BFF0;1108 116F 11AF;BFF0;1108 116F 11AF; BFF1;BFF1;1108 116F 11B0;BFF1;1108 116F 11B0; BFF2;BFF2;1108 116F 11B1;BFF2;1108 116F 11B1; BFF3;BFF3;1108 116F 11B2;BFF3;1108 116F 11B2; BFF4;BFF4;1108 116F 11B3;BFF4;1108 116F 11B3; BFF5;BFF5;1108 116F 11B4;BFF5;1108 116F 11B4; BFF6;BFF6;1108 116F 11B5;BFF6;1108 116F 11B5; BFF7;BFF7;1108 116F 11B6;BFF7;1108 116F 11B6; BFF8;BFF8;1108 116F 11B7;BFF8;1108 116F 11B7; BFF9;BFF9;1108 116F 11B8;BFF9;1108 116F 11B8; BFFA;BFFA;1108 116F 11B9;BFFA;1108 116F 11B9; BFFB;BFFB;1108 116F 11BA;BFFB;1108 116F 11BA; BFFC;BFFC;1108 116F 11BB;BFFC;1108 116F 11BB; BFFD;BFFD;1108 116F 11BC;BFFD;1108 116F 11BC; BFFE;BFFE;1108 116F 11BD;BFFE;1108 116F 11BD; BFFF;BFFF;1108 116F 11BE;BFFF;1108 116F 11BE; C000;C000;1108 116F 11BF;C000;1108 116F 11BF; C001;C001;1108 116F 11C0;C001;1108 116F 11C0; C002;C002;1108 116F 11C1;C002;1108 116F 11C1; C003;C003;1108 116F 11C2;C003;1108 116F 11C2; C004;C004;1108 1170;C004;1108 1170; C005;C005;1108 1170 11A8;C005;1108 1170 11A8; C006;C006;1108 1170 11A9;C006;1108 1170 11A9; C007;C007;1108 1170 11AA;C007;1108 1170 11AA; C008;C008;1108 1170 11AB;C008;1108 1170 11AB; C009;C009;1108 1170 11AC;C009;1108 1170 11AC; C00A;C00A;1108 1170 11AD;C00A;1108 1170 11AD; C00B;C00B;1108 1170 11AE;C00B;1108 1170 11AE; C00C;C00C;1108 1170 11AF;C00C;1108 1170 11AF; C00D;C00D;1108 1170 11B0;C00D;1108 1170 11B0; C00E;C00E;1108 1170 11B1;C00E;1108 1170 11B1; C00F;C00F;1108 1170 11B2;C00F;1108 1170 11B2; C010;C010;1108 1170 11B3;C010;1108 1170 11B3; C011;C011;1108 1170 11B4;C011;1108 1170 11B4; C012;C012;1108 1170 11B5;C012;1108 1170 11B5; C013;C013;1108 1170 11B6;C013;1108 1170 11B6; C014;C014;1108 1170 11B7;C014;1108 1170 11B7; C015;C015;1108 1170 11B8;C015;1108 1170 11B8; C016;C016;1108 1170 11B9;C016;1108 1170 11B9; C017;C017;1108 1170 11BA;C017;1108 1170 11BA; C018;C018;1108 1170 11BB;C018;1108 1170 11BB; C019;C019;1108 1170 11BC;C019;1108 1170 11BC; C01A;C01A;1108 1170 11BD;C01A;1108 1170 11BD; C01B;C01B;1108 1170 11BE;C01B;1108 1170 11BE; C01C;C01C;1108 1170 11BF;C01C;1108 1170 11BF; C01D;C01D;1108 1170 11C0;C01D;1108 1170 11C0; C01E;C01E;1108 1170 11C1;C01E;1108 1170 11C1; C01F;C01F;1108 1170 11C2;C01F;1108 1170 11C2; C020;C020;1108 1171;C020;1108 1171; C021;C021;1108 1171 11A8;C021;1108 1171 11A8; C022;C022;1108 1171 11A9;C022;1108 1171 11A9; C023;C023;1108 1171 11AA;C023;1108 1171 11AA; C024;C024;1108 1171 11AB;C024;1108 1171 11AB; C025;C025;1108 1171 11AC;C025;1108 1171 11AC; C026;C026;1108 1171 11AD;C026;1108 1171 11AD; C027;C027;1108 1171 11AE;C027;1108 1171 11AE; C028;C028;1108 1171 11AF;C028;1108 1171 11AF; C029;C029;1108 1171 11B0;C029;1108 1171 11B0; C02A;C02A;1108 1171 11B1;C02A;1108 1171 11B1; C02B;C02B;1108 1171 11B2;C02B;1108 1171 11B2; C02C;C02C;1108 1171 11B3;C02C;1108 1171 11B3; C02D;C02D;1108 1171 11B4;C02D;1108 1171 11B4; C02E;C02E;1108 1171 11B5;C02E;1108 1171 11B5; C02F;C02F;1108 1171 11B6;C02F;1108 1171 11B6; C030;C030;1108 1171 11B7;C030;1108 1171 11B7; C031;C031;1108 1171 11B8;C031;1108 1171 11B8; C032;C032;1108 1171 11B9;C032;1108 1171 11B9; C033;C033;1108 1171 11BA;C033;1108 1171 11BA; C034;C034;1108 1171 11BB;C034;1108 1171 11BB; C035;C035;1108 1171 11BC;C035;1108 1171 11BC; C036;C036;1108 1171 11BD;C036;1108 1171 11BD; C037;C037;1108 1171 11BE;C037;1108 1171 11BE; C038;C038;1108 1171 11BF;C038;1108 1171 11BF; C039;C039;1108 1171 11C0;C039;1108 1171 11C0; C03A;C03A;1108 1171 11C1;C03A;1108 1171 11C1; C03B;C03B;1108 1171 11C2;C03B;1108 1171 11C2; C03C;C03C;1108 1172;C03C;1108 1172; C03D;C03D;1108 1172 11A8;C03D;1108 1172 11A8; C03E;C03E;1108 1172 11A9;C03E;1108 1172 11A9; C03F;C03F;1108 1172 11AA;C03F;1108 1172 11AA; C040;C040;1108 1172 11AB;C040;1108 1172 11AB; C041;C041;1108 1172 11AC;C041;1108 1172 11AC; C042;C042;1108 1172 11AD;C042;1108 1172 11AD; C043;C043;1108 1172 11AE;C043;1108 1172 11AE; C044;C044;1108 1172 11AF;C044;1108 1172 11AF; C045;C045;1108 1172 11B0;C045;1108 1172 11B0; C046;C046;1108 1172 11B1;C046;1108 1172 11B1; C047;C047;1108 1172 11B2;C047;1108 1172 11B2; C048;C048;1108 1172 11B3;C048;1108 1172 11B3; C049;C049;1108 1172 11B4;C049;1108 1172 11B4; C04A;C04A;1108 1172 11B5;C04A;1108 1172 11B5; C04B;C04B;1108 1172 11B6;C04B;1108 1172 11B6; C04C;C04C;1108 1172 11B7;C04C;1108 1172 11B7; C04D;C04D;1108 1172 11B8;C04D;1108 1172 11B8; C04E;C04E;1108 1172 11B9;C04E;1108 1172 11B9; C04F;C04F;1108 1172 11BA;C04F;1108 1172 11BA; C050;C050;1108 1172 11BB;C050;1108 1172 11BB; C051;C051;1108 1172 11BC;C051;1108 1172 11BC; C052;C052;1108 1172 11BD;C052;1108 1172 11BD; C053;C053;1108 1172 11BE;C053;1108 1172 11BE; C054;C054;1108 1172 11BF;C054;1108 1172 11BF; C055;C055;1108 1172 11C0;C055;1108 1172 11C0; C056;C056;1108 1172 11C1;C056;1108 1172 11C1; C057;C057;1108 1172 11C2;C057;1108 1172 11C2; C058;C058;1108 1173;C058;1108 1173; C059;C059;1108 1173 11A8;C059;1108 1173 11A8; C05A;C05A;1108 1173 11A9;C05A;1108 1173 11A9; C05B;C05B;1108 1173 11AA;C05B;1108 1173 11AA; C05C;C05C;1108 1173 11AB;C05C;1108 1173 11AB; C05D;C05D;1108 1173 11AC;C05D;1108 1173 11AC; C05E;C05E;1108 1173 11AD;C05E;1108 1173 11AD; C05F;C05F;1108 1173 11AE;C05F;1108 1173 11AE; C060;C060;1108 1173 11AF;C060;1108 1173 11AF; C061;C061;1108 1173 11B0;C061;1108 1173 11B0; C062;C062;1108 1173 11B1;C062;1108 1173 11B1; C063;C063;1108 1173 11B2;C063;1108 1173 11B2; C064;C064;1108 1173 11B3;C064;1108 1173 11B3; C065;C065;1108 1173 11B4;C065;1108 1173 11B4; C066;C066;1108 1173 11B5;C066;1108 1173 11B5; C067;C067;1108 1173 11B6;C067;1108 1173 11B6; C068;C068;1108 1173 11B7;C068;1108 1173 11B7; C069;C069;1108 1173 11B8;C069;1108 1173 11B8; C06A;C06A;1108 1173 11B9;C06A;1108 1173 11B9; C06B;C06B;1108 1173 11BA;C06B;1108 1173 11BA; C06C;C06C;1108 1173 11BB;C06C;1108 1173 11BB; C06D;C06D;1108 1173 11BC;C06D;1108 1173 11BC; C06E;C06E;1108 1173 11BD;C06E;1108 1173 11BD; C06F;C06F;1108 1173 11BE;C06F;1108 1173 11BE; C070;C070;1108 1173 11BF;C070;1108 1173 11BF; C071;C071;1108 1173 11C0;C071;1108 1173 11C0; C072;C072;1108 1173 11C1;C072;1108 1173 11C1; C073;C073;1108 1173 11C2;C073;1108 1173 11C2; C074;C074;1108 1174;C074;1108 1174; C075;C075;1108 1174 11A8;C075;1108 1174 11A8; C076;C076;1108 1174 11A9;C076;1108 1174 11A9; C077;C077;1108 1174 11AA;C077;1108 1174 11AA; C078;C078;1108 1174 11AB;C078;1108 1174 11AB; C079;C079;1108 1174 11AC;C079;1108 1174 11AC; C07A;C07A;1108 1174 11AD;C07A;1108 1174 11AD; C07B;C07B;1108 1174 11AE;C07B;1108 1174 11AE; C07C;C07C;1108 1174 11AF;C07C;1108 1174 11AF; C07D;C07D;1108 1174 11B0;C07D;1108 1174 11B0; C07E;C07E;1108 1174 11B1;C07E;1108 1174 11B1; C07F;C07F;1108 1174 11B2;C07F;1108 1174 11B2; C080;C080;1108 1174 11B3;C080;1108 1174 11B3; C081;C081;1108 1174 11B4;C081;1108 1174 11B4; C082;C082;1108 1174 11B5;C082;1108 1174 11B5; C083;C083;1108 1174 11B6;C083;1108 1174 11B6; C084;C084;1108 1174 11B7;C084;1108 1174 11B7; C085;C085;1108 1174 11B8;C085;1108 1174 11B8; C086;C086;1108 1174 11B9;C086;1108 1174 11B9; C087;C087;1108 1174 11BA;C087;1108 1174 11BA; C088;C088;1108 1174 11BB;C088;1108 1174 11BB; C089;C089;1108 1174 11BC;C089;1108 1174 11BC; C08A;C08A;1108 1174 11BD;C08A;1108 1174 11BD; C08B;C08B;1108 1174 11BE;C08B;1108 1174 11BE; C08C;C08C;1108 1174 11BF;C08C;1108 1174 11BF; C08D;C08D;1108 1174 11C0;C08D;1108 1174 11C0; C08E;C08E;1108 1174 11C1;C08E;1108 1174 11C1; C08F;C08F;1108 1174 11C2;C08F;1108 1174 11C2; C090;C090;1108 1175;C090;1108 1175; C091;C091;1108 1175 11A8;C091;1108 1175 11A8; C092;C092;1108 1175 11A9;C092;1108 1175 11A9; C093;C093;1108 1175 11AA;C093;1108 1175 11AA; C094;C094;1108 1175 11AB;C094;1108 1175 11AB; C095;C095;1108 1175 11AC;C095;1108 1175 11AC; C096;C096;1108 1175 11AD;C096;1108 1175 11AD; C097;C097;1108 1175 11AE;C097;1108 1175 11AE; C098;C098;1108 1175 11AF;C098;1108 1175 11AF; C099;C099;1108 1175 11B0;C099;1108 1175 11B0; C09A;C09A;1108 1175 11B1;C09A;1108 1175 11B1; C09B;C09B;1108 1175 11B2;C09B;1108 1175 11B2; C09C;C09C;1108 1175 11B3;C09C;1108 1175 11B3; C09D;C09D;1108 1175 11B4;C09D;1108 1175 11B4; C09E;C09E;1108 1175 11B5;C09E;1108 1175 11B5; C09F;C09F;1108 1175 11B6;C09F;1108 1175 11B6; C0A0;C0A0;1108 1175 11B7;C0A0;1108 1175 11B7; C0A1;C0A1;1108 1175 11B8;C0A1;1108 1175 11B8; C0A2;C0A2;1108 1175 11B9;C0A2;1108 1175 11B9; C0A3;C0A3;1108 1175 11BA;C0A3;1108 1175 11BA; C0A4;C0A4;1108 1175 11BB;C0A4;1108 1175 11BB; C0A5;C0A5;1108 1175 11BC;C0A5;1108 1175 11BC; C0A6;C0A6;1108 1175 11BD;C0A6;1108 1175 11BD; C0A7;C0A7;1108 1175 11BE;C0A7;1108 1175 11BE; C0A8;C0A8;1108 1175 11BF;C0A8;1108 1175 11BF; C0A9;C0A9;1108 1175 11C0;C0A9;1108 1175 11C0; C0AA;C0AA;1108 1175 11C1;C0AA;1108 1175 11C1; C0AB;C0AB;1108 1175 11C2;C0AB;1108 1175 11C2; C0AC;C0AC;1109 1161;C0AC;1109 1161; C0AD;C0AD;1109 1161 11A8;C0AD;1109 1161 11A8; C0AE;C0AE;1109 1161 11A9;C0AE;1109 1161 11A9; C0AF;C0AF;1109 1161 11AA;C0AF;1109 1161 11AA; C0B0;C0B0;1109 1161 11AB;C0B0;1109 1161 11AB; C0B1;C0B1;1109 1161 11AC;C0B1;1109 1161 11AC; C0B2;C0B2;1109 1161 11AD;C0B2;1109 1161 11AD; C0B3;C0B3;1109 1161 11AE;C0B3;1109 1161 11AE; C0B4;C0B4;1109 1161 11AF;C0B4;1109 1161 11AF; C0B5;C0B5;1109 1161 11B0;C0B5;1109 1161 11B0; C0B6;C0B6;1109 1161 11B1;C0B6;1109 1161 11B1; C0B7;C0B7;1109 1161 11B2;C0B7;1109 1161 11B2; C0B8;C0B8;1109 1161 11B3;C0B8;1109 1161 11B3; C0B9;C0B9;1109 1161 11B4;C0B9;1109 1161 11B4; C0BA;C0BA;1109 1161 11B5;C0BA;1109 1161 11B5; C0BB;C0BB;1109 1161 11B6;C0BB;1109 1161 11B6; C0BC;C0BC;1109 1161 11B7;C0BC;1109 1161 11B7; C0BD;C0BD;1109 1161 11B8;C0BD;1109 1161 11B8; C0BE;C0BE;1109 1161 11B9;C0BE;1109 1161 11B9; C0BF;C0BF;1109 1161 11BA;C0BF;1109 1161 11BA; C0C0;C0C0;1109 1161 11BB;C0C0;1109 1161 11BB; C0C1;C0C1;1109 1161 11BC;C0C1;1109 1161 11BC; C0C2;C0C2;1109 1161 11BD;C0C2;1109 1161 11BD; C0C3;C0C3;1109 1161 11BE;C0C3;1109 1161 11BE; C0C4;C0C4;1109 1161 11BF;C0C4;1109 1161 11BF; C0C5;C0C5;1109 1161 11C0;C0C5;1109 1161 11C0; C0C6;C0C6;1109 1161 11C1;C0C6;1109 1161 11C1; C0C7;C0C7;1109 1161 11C2;C0C7;1109 1161 11C2; C0C8;C0C8;1109 1162;C0C8;1109 1162; C0C9;C0C9;1109 1162 11A8;C0C9;1109 1162 11A8; C0CA;C0CA;1109 1162 11A9;C0CA;1109 1162 11A9; C0CB;C0CB;1109 1162 11AA;C0CB;1109 1162 11AA; C0CC;C0CC;1109 1162 11AB;C0CC;1109 1162 11AB; C0CD;C0CD;1109 1162 11AC;C0CD;1109 1162 11AC; C0CE;C0CE;1109 1162 11AD;C0CE;1109 1162 11AD; C0CF;C0CF;1109 1162 11AE;C0CF;1109 1162 11AE; C0D0;C0D0;1109 1162 11AF;C0D0;1109 1162 11AF; C0D1;C0D1;1109 1162 11B0;C0D1;1109 1162 11B0; C0D2;C0D2;1109 1162 11B1;C0D2;1109 1162 11B1; C0D3;C0D3;1109 1162 11B2;C0D3;1109 1162 11B2; C0D4;C0D4;1109 1162 11B3;C0D4;1109 1162 11B3; C0D5;C0D5;1109 1162 11B4;C0D5;1109 1162 11B4; C0D6;C0D6;1109 1162 11B5;C0D6;1109 1162 11B5; C0D7;C0D7;1109 1162 11B6;C0D7;1109 1162 11B6; C0D8;C0D8;1109 1162 11B7;C0D8;1109 1162 11B7; C0D9;C0D9;1109 1162 11B8;C0D9;1109 1162 11B8; C0DA;C0DA;1109 1162 11B9;C0DA;1109 1162 11B9; C0DB;C0DB;1109 1162 11BA;C0DB;1109 1162 11BA; C0DC;C0DC;1109 1162 11BB;C0DC;1109 1162 11BB; C0DD;C0DD;1109 1162 11BC;C0DD;1109 1162 11BC; C0DE;C0DE;1109 1162 11BD;C0DE;1109 1162 11BD; C0DF;C0DF;1109 1162 11BE;C0DF;1109 1162 11BE; C0E0;C0E0;1109 1162 11BF;C0E0;1109 1162 11BF; C0E1;C0E1;1109 1162 11C0;C0E1;1109 1162 11C0; C0E2;C0E2;1109 1162 11C1;C0E2;1109 1162 11C1; C0E3;C0E3;1109 1162 11C2;C0E3;1109 1162 11C2; C0E4;C0E4;1109 1163;C0E4;1109 1163; C0E5;C0E5;1109 1163 11A8;C0E5;1109 1163 11A8; C0E6;C0E6;1109 1163 11A9;C0E6;1109 1163 11A9; C0E7;C0E7;1109 1163 11AA;C0E7;1109 1163 11AA; C0E8;C0E8;1109 1163 11AB;C0E8;1109 1163 11AB; C0E9;C0E9;1109 1163 11AC;C0E9;1109 1163 11AC; C0EA;C0EA;1109 1163 11AD;C0EA;1109 1163 11AD; C0EB;C0EB;1109 1163 11AE;C0EB;1109 1163 11AE; C0EC;C0EC;1109 1163 11AF;C0EC;1109 1163 11AF; C0ED;C0ED;1109 1163 11B0;C0ED;1109 1163 11B0; C0EE;C0EE;1109 1163 11B1;C0EE;1109 1163 11B1; C0EF;C0EF;1109 1163 11B2;C0EF;1109 1163 11B2; C0F0;C0F0;1109 1163 11B3;C0F0;1109 1163 11B3; C0F1;C0F1;1109 1163 11B4;C0F1;1109 1163 11B4; C0F2;C0F2;1109 1163 11B5;C0F2;1109 1163 11B5; C0F3;C0F3;1109 1163 11B6;C0F3;1109 1163 11B6; C0F4;C0F4;1109 1163 11B7;C0F4;1109 1163 11B7; C0F5;C0F5;1109 1163 11B8;C0F5;1109 1163 11B8; C0F6;C0F6;1109 1163 11B9;C0F6;1109 1163 11B9; C0F7;C0F7;1109 1163 11BA;C0F7;1109 1163 11BA; C0F8;C0F8;1109 1163 11BB;C0F8;1109 1163 11BB; C0F9;C0F9;1109 1163 11BC;C0F9;1109 1163 11BC; C0FA;C0FA;1109 1163 11BD;C0FA;1109 1163 11BD; C0FB;C0FB;1109 1163 11BE;C0FB;1109 1163 11BE; C0FC;C0FC;1109 1163 11BF;C0FC;1109 1163 11BF; C0FD;C0FD;1109 1163 11C0;C0FD;1109 1163 11C0; C0FE;C0FE;1109 1163 11C1;C0FE;1109 1163 11C1; C0FF;C0FF;1109 1163 11C2;C0FF;1109 1163 11C2; C100;C100;1109 1164;C100;1109 1164; C101;C101;1109 1164 11A8;C101;1109 1164 11A8; C102;C102;1109 1164 11A9;C102;1109 1164 11A9; C103;C103;1109 1164 11AA;C103;1109 1164 11AA; C104;C104;1109 1164 11AB;C104;1109 1164 11AB; C105;C105;1109 1164 11AC;C105;1109 1164 11AC; C106;C106;1109 1164 11AD;C106;1109 1164 11AD; C107;C107;1109 1164 11AE;C107;1109 1164 11AE; C108;C108;1109 1164 11AF;C108;1109 1164 11AF; C109;C109;1109 1164 11B0;C109;1109 1164 11B0; C10A;C10A;1109 1164 11B1;C10A;1109 1164 11B1; C10B;C10B;1109 1164 11B2;C10B;1109 1164 11B2; C10C;C10C;1109 1164 11B3;C10C;1109 1164 11B3; C10D;C10D;1109 1164 11B4;C10D;1109 1164 11B4; C10E;C10E;1109 1164 11B5;C10E;1109 1164 11B5; C10F;C10F;1109 1164 11B6;C10F;1109 1164 11B6; C110;C110;1109 1164 11B7;C110;1109 1164 11B7; C111;C111;1109 1164 11B8;C111;1109 1164 11B8; C112;C112;1109 1164 11B9;C112;1109 1164 11B9; C113;C113;1109 1164 11BA;C113;1109 1164 11BA; C114;C114;1109 1164 11BB;C114;1109 1164 11BB; C115;C115;1109 1164 11BC;C115;1109 1164 11BC; C116;C116;1109 1164 11BD;C116;1109 1164 11BD; C117;C117;1109 1164 11BE;C117;1109 1164 11BE; C118;C118;1109 1164 11BF;C118;1109 1164 11BF; C119;C119;1109 1164 11C0;C119;1109 1164 11C0; C11A;C11A;1109 1164 11C1;C11A;1109 1164 11C1; C11B;C11B;1109 1164 11C2;C11B;1109 1164 11C2; C11C;C11C;1109 1165;C11C;1109 1165; C11D;C11D;1109 1165 11A8;C11D;1109 1165 11A8; C11E;C11E;1109 1165 11A9;C11E;1109 1165 11A9; C11F;C11F;1109 1165 11AA;C11F;1109 1165 11AA; C120;C120;1109 1165 11AB;C120;1109 1165 11AB; C121;C121;1109 1165 11AC;C121;1109 1165 11AC; C122;C122;1109 1165 11AD;C122;1109 1165 11AD; C123;C123;1109 1165 11AE;C123;1109 1165 11AE; C124;C124;1109 1165 11AF;C124;1109 1165 11AF; C125;C125;1109 1165 11B0;C125;1109 1165 11B0; C126;C126;1109 1165 11B1;C126;1109 1165 11B1; C127;C127;1109 1165 11B2;C127;1109 1165 11B2; C128;C128;1109 1165 11B3;C128;1109 1165 11B3; C129;C129;1109 1165 11B4;C129;1109 1165 11B4; C12A;C12A;1109 1165 11B5;C12A;1109 1165 11B5; C12B;C12B;1109 1165 11B6;C12B;1109 1165 11B6; C12C;C12C;1109 1165 11B7;C12C;1109 1165 11B7; C12D;C12D;1109 1165 11B8;C12D;1109 1165 11B8; C12E;C12E;1109 1165 11B9;C12E;1109 1165 11B9; C12F;C12F;1109 1165 11BA;C12F;1109 1165 11BA; C130;C130;1109 1165 11BB;C130;1109 1165 11BB; C131;C131;1109 1165 11BC;C131;1109 1165 11BC; C132;C132;1109 1165 11BD;C132;1109 1165 11BD; C133;C133;1109 1165 11BE;C133;1109 1165 11BE; C134;C134;1109 1165 11BF;C134;1109 1165 11BF; C135;C135;1109 1165 11C0;C135;1109 1165 11C0; C136;C136;1109 1165 11C1;C136;1109 1165 11C1; C137;C137;1109 1165 11C2;C137;1109 1165 11C2; C138;C138;1109 1166;C138;1109 1166; C139;C139;1109 1166 11A8;C139;1109 1166 11A8; C13A;C13A;1109 1166 11A9;C13A;1109 1166 11A9; C13B;C13B;1109 1166 11AA;C13B;1109 1166 11AA; C13C;C13C;1109 1166 11AB;C13C;1109 1166 11AB; C13D;C13D;1109 1166 11AC;C13D;1109 1166 11AC; C13E;C13E;1109 1166 11AD;C13E;1109 1166 11AD; C13F;C13F;1109 1166 11AE;C13F;1109 1166 11AE; C140;C140;1109 1166 11AF;C140;1109 1166 11AF; C141;C141;1109 1166 11B0;C141;1109 1166 11B0; C142;C142;1109 1166 11B1;C142;1109 1166 11B1; C143;C143;1109 1166 11B2;C143;1109 1166 11B2; C144;C144;1109 1166 11B3;C144;1109 1166 11B3; C145;C145;1109 1166 11B4;C145;1109 1166 11B4; C146;C146;1109 1166 11B5;C146;1109 1166 11B5; C147;C147;1109 1166 11B6;C147;1109 1166 11B6; C148;C148;1109 1166 11B7;C148;1109 1166 11B7; C149;C149;1109 1166 11B8;C149;1109 1166 11B8; C14A;C14A;1109 1166 11B9;C14A;1109 1166 11B9; C14B;C14B;1109 1166 11BA;C14B;1109 1166 11BA; C14C;C14C;1109 1166 11BB;C14C;1109 1166 11BB; C14D;C14D;1109 1166 11BC;C14D;1109 1166 11BC; C14E;C14E;1109 1166 11BD;C14E;1109 1166 11BD; C14F;C14F;1109 1166 11BE;C14F;1109 1166 11BE; C150;C150;1109 1166 11BF;C150;1109 1166 11BF; C151;C151;1109 1166 11C0;C151;1109 1166 11C0; C152;C152;1109 1166 11C1;C152;1109 1166 11C1; C153;C153;1109 1166 11C2;C153;1109 1166 11C2; C154;C154;1109 1167;C154;1109 1167; C155;C155;1109 1167 11A8;C155;1109 1167 11A8; C156;C156;1109 1167 11A9;C156;1109 1167 11A9; C157;C157;1109 1167 11AA;C157;1109 1167 11AA; C158;C158;1109 1167 11AB;C158;1109 1167 11AB; C159;C159;1109 1167 11AC;C159;1109 1167 11AC; C15A;C15A;1109 1167 11AD;C15A;1109 1167 11AD; C15B;C15B;1109 1167 11AE;C15B;1109 1167 11AE; C15C;C15C;1109 1167 11AF;C15C;1109 1167 11AF; C15D;C15D;1109 1167 11B0;C15D;1109 1167 11B0; C15E;C15E;1109 1167 11B1;C15E;1109 1167 11B1; C15F;C15F;1109 1167 11B2;C15F;1109 1167 11B2; C160;C160;1109 1167 11B3;C160;1109 1167 11B3; C161;C161;1109 1167 11B4;C161;1109 1167 11B4; C162;C162;1109 1167 11B5;C162;1109 1167 11B5; C163;C163;1109 1167 11B6;C163;1109 1167 11B6; C164;C164;1109 1167 11B7;C164;1109 1167 11B7; C165;C165;1109 1167 11B8;C165;1109 1167 11B8; C166;C166;1109 1167 11B9;C166;1109 1167 11B9; C167;C167;1109 1167 11BA;C167;1109 1167 11BA; C168;C168;1109 1167 11BB;C168;1109 1167 11BB; C169;C169;1109 1167 11BC;C169;1109 1167 11BC; C16A;C16A;1109 1167 11BD;C16A;1109 1167 11BD; C16B;C16B;1109 1167 11BE;C16B;1109 1167 11BE; C16C;C16C;1109 1167 11BF;C16C;1109 1167 11BF; C16D;C16D;1109 1167 11C0;C16D;1109 1167 11C0; C16E;C16E;1109 1167 11C1;C16E;1109 1167 11C1; C16F;C16F;1109 1167 11C2;C16F;1109 1167 11C2; C170;C170;1109 1168;C170;1109 1168; C171;C171;1109 1168 11A8;C171;1109 1168 11A8; C172;C172;1109 1168 11A9;C172;1109 1168 11A9; C173;C173;1109 1168 11AA;C173;1109 1168 11AA; C174;C174;1109 1168 11AB;C174;1109 1168 11AB; C175;C175;1109 1168 11AC;C175;1109 1168 11AC; C176;C176;1109 1168 11AD;C176;1109 1168 11AD; C177;C177;1109 1168 11AE;C177;1109 1168 11AE; C178;C178;1109 1168 11AF;C178;1109 1168 11AF; C179;C179;1109 1168 11B0;C179;1109 1168 11B0; C17A;C17A;1109 1168 11B1;C17A;1109 1168 11B1; C17B;C17B;1109 1168 11B2;C17B;1109 1168 11B2; C17C;C17C;1109 1168 11B3;C17C;1109 1168 11B3; C17D;C17D;1109 1168 11B4;C17D;1109 1168 11B4; C17E;C17E;1109 1168 11B5;C17E;1109 1168 11B5; C17F;C17F;1109 1168 11B6;C17F;1109 1168 11B6; C180;C180;1109 1168 11B7;C180;1109 1168 11B7; C181;C181;1109 1168 11B8;C181;1109 1168 11B8; C182;C182;1109 1168 11B9;C182;1109 1168 11B9; C183;C183;1109 1168 11BA;C183;1109 1168 11BA; C184;C184;1109 1168 11BB;C184;1109 1168 11BB; C185;C185;1109 1168 11BC;C185;1109 1168 11BC; C186;C186;1109 1168 11BD;C186;1109 1168 11BD; C187;C187;1109 1168 11BE;C187;1109 1168 11BE; C188;C188;1109 1168 11BF;C188;1109 1168 11BF; C189;C189;1109 1168 11C0;C189;1109 1168 11C0; C18A;C18A;1109 1168 11C1;C18A;1109 1168 11C1; C18B;C18B;1109 1168 11C2;C18B;1109 1168 11C2; C18C;C18C;1109 1169;C18C;1109 1169; C18D;C18D;1109 1169 11A8;C18D;1109 1169 11A8; C18E;C18E;1109 1169 11A9;C18E;1109 1169 11A9; C18F;C18F;1109 1169 11AA;C18F;1109 1169 11AA; C190;C190;1109 1169 11AB;C190;1109 1169 11AB; C191;C191;1109 1169 11AC;C191;1109 1169 11AC; C192;C192;1109 1169 11AD;C192;1109 1169 11AD; C193;C193;1109 1169 11AE;C193;1109 1169 11AE; C194;C194;1109 1169 11AF;C194;1109 1169 11AF; C195;C195;1109 1169 11B0;C195;1109 1169 11B0; C196;C196;1109 1169 11B1;C196;1109 1169 11B1; C197;C197;1109 1169 11B2;C197;1109 1169 11B2; C198;C198;1109 1169 11B3;C198;1109 1169 11B3; C199;C199;1109 1169 11B4;C199;1109 1169 11B4; C19A;C19A;1109 1169 11B5;C19A;1109 1169 11B5; C19B;C19B;1109 1169 11B6;C19B;1109 1169 11B6; C19C;C19C;1109 1169 11B7;C19C;1109 1169 11B7; C19D;C19D;1109 1169 11B8;C19D;1109 1169 11B8; C19E;C19E;1109 1169 11B9;C19E;1109 1169 11B9; C19F;C19F;1109 1169 11BA;C19F;1109 1169 11BA; C1A0;C1A0;1109 1169 11BB;C1A0;1109 1169 11BB; C1A1;C1A1;1109 1169 11BC;C1A1;1109 1169 11BC; C1A2;C1A2;1109 1169 11BD;C1A2;1109 1169 11BD; C1A3;C1A3;1109 1169 11BE;C1A3;1109 1169 11BE; C1A4;C1A4;1109 1169 11BF;C1A4;1109 1169 11BF; C1A5;C1A5;1109 1169 11C0;C1A5;1109 1169 11C0; C1A6;C1A6;1109 1169 11C1;C1A6;1109 1169 11C1; C1A7;C1A7;1109 1169 11C2;C1A7;1109 1169 11C2; C1A8;C1A8;1109 116A;C1A8;1109 116A; C1A9;C1A9;1109 116A 11A8;C1A9;1109 116A 11A8; C1AA;C1AA;1109 116A 11A9;C1AA;1109 116A 11A9; C1AB;C1AB;1109 116A 11AA;C1AB;1109 116A 11AA; C1AC;C1AC;1109 116A 11AB;C1AC;1109 116A 11AB; C1AD;C1AD;1109 116A 11AC;C1AD;1109 116A 11AC; C1AE;C1AE;1109 116A 11AD;C1AE;1109 116A 11AD; C1AF;C1AF;1109 116A 11AE;C1AF;1109 116A 11AE; C1B0;C1B0;1109 116A 11AF;C1B0;1109 116A 11AF; C1B1;C1B1;1109 116A 11B0;C1B1;1109 116A 11B0; C1B2;C1B2;1109 116A 11B1;C1B2;1109 116A 11B1; C1B3;C1B3;1109 116A 11B2;C1B3;1109 116A 11B2; C1B4;C1B4;1109 116A 11B3;C1B4;1109 116A 11B3; C1B5;C1B5;1109 116A 11B4;C1B5;1109 116A 11B4; C1B6;C1B6;1109 116A 11B5;C1B6;1109 116A 11B5; C1B7;C1B7;1109 116A 11B6;C1B7;1109 116A 11B6; C1B8;C1B8;1109 116A 11B7;C1B8;1109 116A 11B7; C1B9;C1B9;1109 116A 11B8;C1B9;1109 116A 11B8; C1BA;C1BA;1109 116A 11B9;C1BA;1109 116A 11B9; C1BB;C1BB;1109 116A 11BA;C1BB;1109 116A 11BA; C1BC;C1BC;1109 116A 11BB;C1BC;1109 116A 11BB; C1BD;C1BD;1109 116A 11BC;C1BD;1109 116A 11BC; C1BE;C1BE;1109 116A 11BD;C1BE;1109 116A 11BD; C1BF;C1BF;1109 116A 11BE;C1BF;1109 116A 11BE; C1C0;C1C0;1109 116A 11BF;C1C0;1109 116A 11BF; C1C1;C1C1;1109 116A 11C0;C1C1;1109 116A 11C0; C1C2;C1C2;1109 116A 11C1;C1C2;1109 116A 11C1; C1C3;C1C3;1109 116A 11C2;C1C3;1109 116A 11C2; C1C4;C1C4;1109 116B;C1C4;1109 116B; C1C5;C1C5;1109 116B 11A8;C1C5;1109 116B 11A8; C1C6;C1C6;1109 116B 11A9;C1C6;1109 116B 11A9; C1C7;C1C7;1109 116B 11AA;C1C7;1109 116B 11AA; C1C8;C1C8;1109 116B 11AB;C1C8;1109 116B 11AB; C1C9;C1C9;1109 116B 11AC;C1C9;1109 116B 11AC; C1CA;C1CA;1109 116B 11AD;C1CA;1109 116B 11AD; C1CB;C1CB;1109 116B 11AE;C1CB;1109 116B 11AE; C1CC;C1CC;1109 116B 11AF;C1CC;1109 116B 11AF; C1CD;C1CD;1109 116B 11B0;C1CD;1109 116B 11B0; C1CE;C1CE;1109 116B 11B1;C1CE;1109 116B 11B1; C1CF;C1CF;1109 116B 11B2;C1CF;1109 116B 11B2; C1D0;C1D0;1109 116B 11B3;C1D0;1109 116B 11B3; C1D1;C1D1;1109 116B 11B4;C1D1;1109 116B 11B4; C1D2;C1D2;1109 116B 11B5;C1D2;1109 116B 11B5; C1D3;C1D3;1109 116B 11B6;C1D3;1109 116B 11B6; C1D4;C1D4;1109 116B 11B7;C1D4;1109 116B 11B7; C1D5;C1D5;1109 116B 11B8;C1D5;1109 116B 11B8; C1D6;C1D6;1109 116B 11B9;C1D6;1109 116B 11B9; C1D7;C1D7;1109 116B 11BA;C1D7;1109 116B 11BA; C1D8;C1D8;1109 116B 11BB;C1D8;1109 116B 11BB; C1D9;C1D9;1109 116B 11BC;C1D9;1109 116B 11BC; C1DA;C1DA;1109 116B 11BD;C1DA;1109 116B 11BD; C1DB;C1DB;1109 116B 11BE;C1DB;1109 116B 11BE; C1DC;C1DC;1109 116B 11BF;C1DC;1109 116B 11BF; C1DD;C1DD;1109 116B 11C0;C1DD;1109 116B 11C0; C1DE;C1DE;1109 116B 11C1;C1DE;1109 116B 11C1; C1DF;C1DF;1109 116B 11C2;C1DF;1109 116B 11C2; C1E0;C1E0;1109 116C;C1E0;1109 116C; C1E1;C1E1;1109 116C 11A8;C1E1;1109 116C 11A8; C1E2;C1E2;1109 116C 11A9;C1E2;1109 116C 11A9; C1E3;C1E3;1109 116C 11AA;C1E3;1109 116C 11AA; C1E4;C1E4;1109 116C 11AB;C1E4;1109 116C 11AB; C1E5;C1E5;1109 116C 11AC;C1E5;1109 116C 11AC; C1E6;C1E6;1109 116C 11AD;C1E6;1109 116C 11AD; C1E7;C1E7;1109 116C 11AE;C1E7;1109 116C 11AE; C1E8;C1E8;1109 116C 11AF;C1E8;1109 116C 11AF; C1E9;C1E9;1109 116C 11B0;C1E9;1109 116C 11B0; C1EA;C1EA;1109 116C 11B1;C1EA;1109 116C 11B1; C1EB;C1EB;1109 116C 11B2;C1EB;1109 116C 11B2; C1EC;C1EC;1109 116C 11B3;C1EC;1109 116C 11B3; C1ED;C1ED;1109 116C 11B4;C1ED;1109 116C 11B4; C1EE;C1EE;1109 116C 11B5;C1EE;1109 116C 11B5; C1EF;C1EF;1109 116C 11B6;C1EF;1109 116C 11B6; C1F0;C1F0;1109 116C 11B7;C1F0;1109 116C 11B7; C1F1;C1F1;1109 116C 11B8;C1F1;1109 116C 11B8; C1F2;C1F2;1109 116C 11B9;C1F2;1109 116C 11B9; C1F3;C1F3;1109 116C 11BA;C1F3;1109 116C 11BA; C1F4;C1F4;1109 116C 11BB;C1F4;1109 116C 11BB; C1F5;C1F5;1109 116C 11BC;C1F5;1109 116C 11BC; C1F6;C1F6;1109 116C 11BD;C1F6;1109 116C 11BD; C1F7;C1F7;1109 116C 11BE;C1F7;1109 116C 11BE; C1F8;C1F8;1109 116C 11BF;C1F8;1109 116C 11BF; C1F9;C1F9;1109 116C 11C0;C1F9;1109 116C 11C0; C1FA;C1FA;1109 116C 11C1;C1FA;1109 116C 11C1; C1FB;C1FB;1109 116C 11C2;C1FB;1109 116C 11C2; C1FC;C1FC;1109 116D;C1FC;1109 116D; C1FD;C1FD;1109 116D 11A8;C1FD;1109 116D 11A8; C1FE;C1FE;1109 116D 11A9;C1FE;1109 116D 11A9; C1FF;C1FF;1109 116D 11AA;C1FF;1109 116D 11AA; C200;C200;1109 116D 11AB;C200;1109 116D 11AB; C201;C201;1109 116D 11AC;C201;1109 116D 11AC; C202;C202;1109 116D 11AD;C202;1109 116D 11AD; C203;C203;1109 116D 11AE;C203;1109 116D 11AE; C204;C204;1109 116D 11AF;C204;1109 116D 11AF; C205;C205;1109 116D 11B0;C205;1109 116D 11B0; C206;C206;1109 116D 11B1;C206;1109 116D 11B1; C207;C207;1109 116D 11B2;C207;1109 116D 11B2; C208;C208;1109 116D 11B3;C208;1109 116D 11B3; C209;C209;1109 116D 11B4;C209;1109 116D 11B4; C20A;C20A;1109 116D 11B5;C20A;1109 116D 11B5; C20B;C20B;1109 116D 11B6;C20B;1109 116D 11B6; C20C;C20C;1109 116D 11B7;C20C;1109 116D 11B7; C20D;C20D;1109 116D 11B8;C20D;1109 116D 11B8; C20E;C20E;1109 116D 11B9;C20E;1109 116D 11B9; C20F;C20F;1109 116D 11BA;C20F;1109 116D 11BA; C210;C210;1109 116D 11BB;C210;1109 116D 11BB; C211;C211;1109 116D 11BC;C211;1109 116D 11BC; C212;C212;1109 116D 11BD;C212;1109 116D 11BD; C213;C213;1109 116D 11BE;C213;1109 116D 11BE; C214;C214;1109 116D 11BF;C214;1109 116D 11BF; C215;C215;1109 116D 11C0;C215;1109 116D 11C0; C216;C216;1109 116D 11C1;C216;1109 116D 11C1; C217;C217;1109 116D 11C2;C217;1109 116D 11C2; C218;C218;1109 116E;C218;1109 116E; C219;C219;1109 116E 11A8;C219;1109 116E 11A8; C21A;C21A;1109 116E 11A9;C21A;1109 116E 11A9; C21B;C21B;1109 116E 11AA;C21B;1109 116E 11AA; C21C;C21C;1109 116E 11AB;C21C;1109 116E 11AB; C21D;C21D;1109 116E 11AC;C21D;1109 116E 11AC; C21E;C21E;1109 116E 11AD;C21E;1109 116E 11AD; C21F;C21F;1109 116E 11AE;C21F;1109 116E 11AE; C220;C220;1109 116E 11AF;C220;1109 116E 11AF; C221;C221;1109 116E 11B0;C221;1109 116E 11B0; C222;C222;1109 116E 11B1;C222;1109 116E 11B1; C223;C223;1109 116E 11B2;C223;1109 116E 11B2; C224;C224;1109 116E 11B3;C224;1109 116E 11B3; C225;C225;1109 116E 11B4;C225;1109 116E 11B4; C226;C226;1109 116E 11B5;C226;1109 116E 11B5; C227;C227;1109 116E 11B6;C227;1109 116E 11B6; C228;C228;1109 116E 11B7;C228;1109 116E 11B7; C229;C229;1109 116E 11B8;C229;1109 116E 11B8; C22A;C22A;1109 116E 11B9;C22A;1109 116E 11B9; C22B;C22B;1109 116E 11BA;C22B;1109 116E 11BA; C22C;C22C;1109 116E 11BB;C22C;1109 116E 11BB; C22D;C22D;1109 116E 11BC;C22D;1109 116E 11BC; C22E;C22E;1109 116E 11BD;C22E;1109 116E 11BD; C22F;C22F;1109 116E 11BE;C22F;1109 116E 11BE; C230;C230;1109 116E 11BF;C230;1109 116E 11BF; C231;C231;1109 116E 11C0;C231;1109 116E 11C0; C232;C232;1109 116E 11C1;C232;1109 116E 11C1; C233;C233;1109 116E 11C2;C233;1109 116E 11C2; C234;C234;1109 116F;C234;1109 116F; C235;C235;1109 116F 11A8;C235;1109 116F 11A8; C236;C236;1109 116F 11A9;C236;1109 116F 11A9; C237;C237;1109 116F 11AA;C237;1109 116F 11AA; C238;C238;1109 116F 11AB;C238;1109 116F 11AB; C239;C239;1109 116F 11AC;C239;1109 116F 11AC; C23A;C23A;1109 116F 11AD;C23A;1109 116F 11AD; C23B;C23B;1109 116F 11AE;C23B;1109 116F 11AE; C23C;C23C;1109 116F 11AF;C23C;1109 116F 11AF; C23D;C23D;1109 116F 11B0;C23D;1109 116F 11B0; C23E;C23E;1109 116F 11B1;C23E;1109 116F 11B1; C23F;C23F;1109 116F 11B2;C23F;1109 116F 11B2; C240;C240;1109 116F 11B3;C240;1109 116F 11B3; C241;C241;1109 116F 11B4;C241;1109 116F 11B4; C242;C242;1109 116F 11B5;C242;1109 116F 11B5; C243;C243;1109 116F 11B6;C243;1109 116F 11B6; C244;C244;1109 116F 11B7;C244;1109 116F 11B7; C245;C245;1109 116F 11B8;C245;1109 116F 11B8; C246;C246;1109 116F 11B9;C246;1109 116F 11B9; C247;C247;1109 116F 11BA;C247;1109 116F 11BA; C248;C248;1109 116F 11BB;C248;1109 116F 11BB; C249;C249;1109 116F 11BC;C249;1109 116F 11BC; C24A;C24A;1109 116F 11BD;C24A;1109 116F 11BD; C24B;C24B;1109 116F 11BE;C24B;1109 116F 11BE; C24C;C24C;1109 116F 11BF;C24C;1109 116F 11BF; C24D;C24D;1109 116F 11C0;C24D;1109 116F 11C0; C24E;C24E;1109 116F 11C1;C24E;1109 116F 11C1; C24F;C24F;1109 116F 11C2;C24F;1109 116F 11C2; C250;C250;1109 1170;C250;1109 1170; C251;C251;1109 1170 11A8;C251;1109 1170 11A8; C252;C252;1109 1170 11A9;C252;1109 1170 11A9; C253;C253;1109 1170 11AA;C253;1109 1170 11AA; C254;C254;1109 1170 11AB;C254;1109 1170 11AB; C255;C255;1109 1170 11AC;C255;1109 1170 11AC; C256;C256;1109 1170 11AD;C256;1109 1170 11AD; C257;C257;1109 1170 11AE;C257;1109 1170 11AE; C258;C258;1109 1170 11AF;C258;1109 1170 11AF; C259;C259;1109 1170 11B0;C259;1109 1170 11B0; C25A;C25A;1109 1170 11B1;C25A;1109 1170 11B1; C25B;C25B;1109 1170 11B2;C25B;1109 1170 11B2; C25C;C25C;1109 1170 11B3;C25C;1109 1170 11B3; C25D;C25D;1109 1170 11B4;C25D;1109 1170 11B4; C25E;C25E;1109 1170 11B5;C25E;1109 1170 11B5; C25F;C25F;1109 1170 11B6;C25F;1109 1170 11B6; C260;C260;1109 1170 11B7;C260;1109 1170 11B7; C261;C261;1109 1170 11B8;C261;1109 1170 11B8; C262;C262;1109 1170 11B9;C262;1109 1170 11B9; C263;C263;1109 1170 11BA;C263;1109 1170 11BA; C264;C264;1109 1170 11BB;C264;1109 1170 11BB; C265;C265;1109 1170 11BC;C265;1109 1170 11BC; C266;C266;1109 1170 11BD;C266;1109 1170 11BD; C267;C267;1109 1170 11BE;C267;1109 1170 11BE; C268;C268;1109 1170 11BF;C268;1109 1170 11BF; C269;C269;1109 1170 11C0;C269;1109 1170 11C0; C26A;C26A;1109 1170 11C1;C26A;1109 1170 11C1; C26B;C26B;1109 1170 11C2;C26B;1109 1170 11C2; C26C;C26C;1109 1171;C26C;1109 1171; C26D;C26D;1109 1171 11A8;C26D;1109 1171 11A8; C26E;C26E;1109 1171 11A9;C26E;1109 1171 11A9; C26F;C26F;1109 1171 11AA;C26F;1109 1171 11AA; C270;C270;1109 1171 11AB;C270;1109 1171 11AB; C271;C271;1109 1171 11AC;C271;1109 1171 11AC; C272;C272;1109 1171 11AD;C272;1109 1171 11AD; C273;C273;1109 1171 11AE;C273;1109 1171 11AE; C274;C274;1109 1171 11AF;C274;1109 1171 11AF; C275;C275;1109 1171 11B0;C275;1109 1171 11B0; C276;C276;1109 1171 11B1;C276;1109 1171 11B1; C277;C277;1109 1171 11B2;C277;1109 1171 11B2; C278;C278;1109 1171 11B3;C278;1109 1171 11B3; C279;C279;1109 1171 11B4;C279;1109 1171 11B4; C27A;C27A;1109 1171 11B5;C27A;1109 1171 11B5; C27B;C27B;1109 1171 11B6;C27B;1109 1171 11B6; C27C;C27C;1109 1171 11B7;C27C;1109 1171 11B7; C27D;C27D;1109 1171 11B8;C27D;1109 1171 11B8; C27E;C27E;1109 1171 11B9;C27E;1109 1171 11B9; C27F;C27F;1109 1171 11BA;C27F;1109 1171 11BA; C280;C280;1109 1171 11BB;C280;1109 1171 11BB; C281;C281;1109 1171 11BC;C281;1109 1171 11BC; C282;C282;1109 1171 11BD;C282;1109 1171 11BD; C283;C283;1109 1171 11BE;C283;1109 1171 11BE; C284;C284;1109 1171 11BF;C284;1109 1171 11BF; C285;C285;1109 1171 11C0;C285;1109 1171 11C0; C286;C286;1109 1171 11C1;C286;1109 1171 11C1; C287;C287;1109 1171 11C2;C287;1109 1171 11C2; C288;C288;1109 1172;C288;1109 1172; C289;C289;1109 1172 11A8;C289;1109 1172 11A8; C28A;C28A;1109 1172 11A9;C28A;1109 1172 11A9; C28B;C28B;1109 1172 11AA;C28B;1109 1172 11AA; C28C;C28C;1109 1172 11AB;C28C;1109 1172 11AB; C28D;C28D;1109 1172 11AC;C28D;1109 1172 11AC; C28E;C28E;1109 1172 11AD;C28E;1109 1172 11AD; C28F;C28F;1109 1172 11AE;C28F;1109 1172 11AE; C290;C290;1109 1172 11AF;C290;1109 1172 11AF; C291;C291;1109 1172 11B0;C291;1109 1172 11B0; C292;C292;1109 1172 11B1;C292;1109 1172 11B1; C293;C293;1109 1172 11B2;C293;1109 1172 11B2; C294;C294;1109 1172 11B3;C294;1109 1172 11B3; C295;C295;1109 1172 11B4;C295;1109 1172 11B4; C296;C296;1109 1172 11B5;C296;1109 1172 11B5; C297;C297;1109 1172 11B6;C297;1109 1172 11B6; C298;C298;1109 1172 11B7;C298;1109 1172 11B7; C299;C299;1109 1172 11B8;C299;1109 1172 11B8; C29A;C29A;1109 1172 11B9;C29A;1109 1172 11B9; C29B;C29B;1109 1172 11BA;C29B;1109 1172 11BA; C29C;C29C;1109 1172 11BB;C29C;1109 1172 11BB; C29D;C29D;1109 1172 11BC;C29D;1109 1172 11BC; C29E;C29E;1109 1172 11BD;C29E;1109 1172 11BD; C29F;C29F;1109 1172 11BE;C29F;1109 1172 11BE; C2A0;C2A0;1109 1172 11BF;C2A0;1109 1172 11BF; C2A1;C2A1;1109 1172 11C0;C2A1;1109 1172 11C0; C2A2;C2A2;1109 1172 11C1;C2A2;1109 1172 11C1; C2A3;C2A3;1109 1172 11C2;C2A3;1109 1172 11C2; C2A4;C2A4;1109 1173;C2A4;1109 1173; C2A5;C2A5;1109 1173 11A8;C2A5;1109 1173 11A8; C2A6;C2A6;1109 1173 11A9;C2A6;1109 1173 11A9; C2A7;C2A7;1109 1173 11AA;C2A7;1109 1173 11AA; C2A8;C2A8;1109 1173 11AB;C2A8;1109 1173 11AB; C2A9;C2A9;1109 1173 11AC;C2A9;1109 1173 11AC; C2AA;C2AA;1109 1173 11AD;C2AA;1109 1173 11AD; C2AB;C2AB;1109 1173 11AE;C2AB;1109 1173 11AE; C2AC;C2AC;1109 1173 11AF;C2AC;1109 1173 11AF; C2AD;C2AD;1109 1173 11B0;C2AD;1109 1173 11B0; C2AE;C2AE;1109 1173 11B1;C2AE;1109 1173 11B1; C2AF;C2AF;1109 1173 11B2;C2AF;1109 1173 11B2; C2B0;C2B0;1109 1173 11B3;C2B0;1109 1173 11B3; C2B1;C2B1;1109 1173 11B4;C2B1;1109 1173 11B4; C2B2;C2B2;1109 1173 11B5;C2B2;1109 1173 11B5; C2B3;C2B3;1109 1173 11B6;C2B3;1109 1173 11B6; C2B4;C2B4;1109 1173 11B7;C2B4;1109 1173 11B7; C2B5;C2B5;1109 1173 11B8;C2B5;1109 1173 11B8; C2B6;C2B6;1109 1173 11B9;C2B6;1109 1173 11B9; C2B7;C2B7;1109 1173 11BA;C2B7;1109 1173 11BA; C2B8;C2B8;1109 1173 11BB;C2B8;1109 1173 11BB; C2B9;C2B9;1109 1173 11BC;C2B9;1109 1173 11BC; C2BA;C2BA;1109 1173 11BD;C2BA;1109 1173 11BD; C2BB;C2BB;1109 1173 11BE;C2BB;1109 1173 11BE; C2BC;C2BC;1109 1173 11BF;C2BC;1109 1173 11BF; C2BD;C2BD;1109 1173 11C0;C2BD;1109 1173 11C0; C2BE;C2BE;1109 1173 11C1;C2BE;1109 1173 11C1; C2BF;C2BF;1109 1173 11C2;C2BF;1109 1173 11C2; C2C0;C2C0;1109 1174;C2C0;1109 1174; C2C1;C2C1;1109 1174 11A8;C2C1;1109 1174 11A8; C2C2;C2C2;1109 1174 11A9;C2C2;1109 1174 11A9; C2C3;C2C3;1109 1174 11AA;C2C3;1109 1174 11AA; C2C4;C2C4;1109 1174 11AB;C2C4;1109 1174 11AB; C2C5;C2C5;1109 1174 11AC;C2C5;1109 1174 11AC; C2C6;C2C6;1109 1174 11AD;C2C6;1109 1174 11AD; C2C7;C2C7;1109 1174 11AE;C2C7;1109 1174 11AE; C2C8;C2C8;1109 1174 11AF;C2C8;1109 1174 11AF; C2C9;C2C9;1109 1174 11B0;C2C9;1109 1174 11B0; C2CA;C2CA;1109 1174 11B1;C2CA;1109 1174 11B1; C2CB;C2CB;1109 1174 11B2;C2CB;1109 1174 11B2; C2CC;C2CC;1109 1174 11B3;C2CC;1109 1174 11B3; C2CD;C2CD;1109 1174 11B4;C2CD;1109 1174 11B4; C2CE;C2CE;1109 1174 11B5;C2CE;1109 1174 11B5; C2CF;C2CF;1109 1174 11B6;C2CF;1109 1174 11B6; C2D0;C2D0;1109 1174 11B7;C2D0;1109 1174 11B7; C2D1;C2D1;1109 1174 11B8;C2D1;1109 1174 11B8; C2D2;C2D2;1109 1174 11B9;C2D2;1109 1174 11B9; C2D3;C2D3;1109 1174 11BA;C2D3;1109 1174 11BA; C2D4;C2D4;1109 1174 11BB;C2D4;1109 1174 11BB; C2D5;C2D5;1109 1174 11BC;C2D5;1109 1174 11BC; C2D6;C2D6;1109 1174 11BD;C2D6;1109 1174 11BD; C2D7;C2D7;1109 1174 11BE;C2D7;1109 1174 11BE; C2D8;C2D8;1109 1174 11BF;C2D8;1109 1174 11BF; C2D9;C2D9;1109 1174 11C0;C2D9;1109 1174 11C0; C2DA;C2DA;1109 1174 11C1;C2DA;1109 1174 11C1; C2DB;C2DB;1109 1174 11C2;C2DB;1109 1174 11C2; C2DC;C2DC;1109 1175;C2DC;1109 1175; C2DD;C2DD;1109 1175 11A8;C2DD;1109 1175 11A8; C2DE;C2DE;1109 1175 11A9;C2DE;1109 1175 11A9; C2DF;C2DF;1109 1175 11AA;C2DF;1109 1175 11AA; C2E0;C2E0;1109 1175 11AB;C2E0;1109 1175 11AB; C2E1;C2E1;1109 1175 11AC;C2E1;1109 1175 11AC; C2E2;C2E2;1109 1175 11AD;C2E2;1109 1175 11AD; C2E3;C2E3;1109 1175 11AE;C2E3;1109 1175 11AE; C2E4;C2E4;1109 1175 11AF;C2E4;1109 1175 11AF; C2E5;C2E5;1109 1175 11B0;C2E5;1109 1175 11B0; C2E6;C2E6;1109 1175 11B1;C2E6;1109 1175 11B1; C2E7;C2E7;1109 1175 11B2;C2E7;1109 1175 11B2; C2E8;C2E8;1109 1175 11B3;C2E8;1109 1175 11B3; C2E9;C2E9;1109 1175 11B4;C2E9;1109 1175 11B4; C2EA;C2EA;1109 1175 11B5;C2EA;1109 1175 11B5; C2EB;C2EB;1109 1175 11B6;C2EB;1109 1175 11B6; C2EC;C2EC;1109 1175 11B7;C2EC;1109 1175 11B7; C2ED;C2ED;1109 1175 11B8;C2ED;1109 1175 11B8; C2EE;C2EE;1109 1175 11B9;C2EE;1109 1175 11B9; C2EF;C2EF;1109 1175 11BA;C2EF;1109 1175 11BA; C2F0;C2F0;1109 1175 11BB;C2F0;1109 1175 11BB; C2F1;C2F1;1109 1175 11BC;C2F1;1109 1175 11BC; C2F2;C2F2;1109 1175 11BD;C2F2;1109 1175 11BD; C2F3;C2F3;1109 1175 11BE;C2F3;1109 1175 11BE; C2F4;C2F4;1109 1175 11BF;C2F4;1109 1175 11BF; C2F5;C2F5;1109 1175 11C0;C2F5;1109 1175 11C0; C2F6;C2F6;1109 1175 11C1;C2F6;1109 1175 11C1; C2F7;C2F7;1109 1175 11C2;C2F7;1109 1175 11C2; C2F8;C2F8;110A 1161;C2F8;110A 1161; C2F9;C2F9;110A 1161 11A8;C2F9;110A 1161 11A8; C2FA;C2FA;110A 1161 11A9;C2FA;110A 1161 11A9; C2FB;C2FB;110A 1161 11AA;C2FB;110A 1161 11AA; C2FC;C2FC;110A 1161 11AB;C2FC;110A 1161 11AB; C2FD;C2FD;110A 1161 11AC;C2FD;110A 1161 11AC; C2FE;C2FE;110A 1161 11AD;C2FE;110A 1161 11AD; C2FF;C2FF;110A 1161 11AE;C2FF;110A 1161 11AE; C300;C300;110A 1161 11AF;C300;110A 1161 11AF; C301;C301;110A 1161 11B0;C301;110A 1161 11B0; C302;C302;110A 1161 11B1;C302;110A 1161 11B1; C303;C303;110A 1161 11B2;C303;110A 1161 11B2; C304;C304;110A 1161 11B3;C304;110A 1161 11B3; C305;C305;110A 1161 11B4;C305;110A 1161 11B4; C306;C306;110A 1161 11B5;C306;110A 1161 11B5; C307;C307;110A 1161 11B6;C307;110A 1161 11B6; C308;C308;110A 1161 11B7;C308;110A 1161 11B7; C309;C309;110A 1161 11B8;C309;110A 1161 11B8; C30A;C30A;110A 1161 11B9;C30A;110A 1161 11B9; C30B;C30B;110A 1161 11BA;C30B;110A 1161 11BA; C30C;C30C;110A 1161 11BB;C30C;110A 1161 11BB; C30D;C30D;110A 1161 11BC;C30D;110A 1161 11BC; C30E;C30E;110A 1161 11BD;C30E;110A 1161 11BD; C30F;C30F;110A 1161 11BE;C30F;110A 1161 11BE; C310;C310;110A 1161 11BF;C310;110A 1161 11BF; C311;C311;110A 1161 11C0;C311;110A 1161 11C0; C312;C312;110A 1161 11C1;C312;110A 1161 11C1; C313;C313;110A 1161 11C2;C313;110A 1161 11C2; C314;C314;110A 1162;C314;110A 1162; C315;C315;110A 1162 11A8;C315;110A 1162 11A8; C316;C316;110A 1162 11A9;C316;110A 1162 11A9; C317;C317;110A 1162 11AA;C317;110A 1162 11AA; C318;C318;110A 1162 11AB;C318;110A 1162 11AB; C319;C319;110A 1162 11AC;C319;110A 1162 11AC; C31A;C31A;110A 1162 11AD;C31A;110A 1162 11AD; C31B;C31B;110A 1162 11AE;C31B;110A 1162 11AE; C31C;C31C;110A 1162 11AF;C31C;110A 1162 11AF; C31D;C31D;110A 1162 11B0;C31D;110A 1162 11B0; C31E;C31E;110A 1162 11B1;C31E;110A 1162 11B1; C31F;C31F;110A 1162 11B2;C31F;110A 1162 11B2; C320;C320;110A 1162 11B3;C320;110A 1162 11B3; C321;C321;110A 1162 11B4;C321;110A 1162 11B4; C322;C322;110A 1162 11B5;C322;110A 1162 11B5; C323;C323;110A 1162 11B6;C323;110A 1162 11B6; C324;C324;110A 1162 11B7;C324;110A 1162 11B7; C325;C325;110A 1162 11B8;C325;110A 1162 11B8; C326;C326;110A 1162 11B9;C326;110A 1162 11B9; C327;C327;110A 1162 11BA;C327;110A 1162 11BA; C328;C328;110A 1162 11BB;C328;110A 1162 11BB; C329;C329;110A 1162 11BC;C329;110A 1162 11BC; C32A;C32A;110A 1162 11BD;C32A;110A 1162 11BD; C32B;C32B;110A 1162 11BE;C32B;110A 1162 11BE; C32C;C32C;110A 1162 11BF;C32C;110A 1162 11BF; C32D;C32D;110A 1162 11C0;C32D;110A 1162 11C0; C32E;C32E;110A 1162 11C1;C32E;110A 1162 11C1; C32F;C32F;110A 1162 11C2;C32F;110A 1162 11C2; C330;C330;110A 1163;C330;110A 1163; C331;C331;110A 1163 11A8;C331;110A 1163 11A8; C332;C332;110A 1163 11A9;C332;110A 1163 11A9; C333;C333;110A 1163 11AA;C333;110A 1163 11AA; C334;C334;110A 1163 11AB;C334;110A 1163 11AB; C335;C335;110A 1163 11AC;C335;110A 1163 11AC; C336;C336;110A 1163 11AD;C336;110A 1163 11AD; C337;C337;110A 1163 11AE;C337;110A 1163 11AE; C338;C338;110A 1163 11AF;C338;110A 1163 11AF; C339;C339;110A 1163 11B0;C339;110A 1163 11B0; C33A;C33A;110A 1163 11B1;C33A;110A 1163 11B1; C33B;C33B;110A 1163 11B2;C33B;110A 1163 11B2; C33C;C33C;110A 1163 11B3;C33C;110A 1163 11B3; C33D;C33D;110A 1163 11B4;C33D;110A 1163 11B4; C33E;C33E;110A 1163 11B5;C33E;110A 1163 11B5; C33F;C33F;110A 1163 11B6;C33F;110A 1163 11B6; C340;C340;110A 1163 11B7;C340;110A 1163 11B7; C341;C341;110A 1163 11B8;C341;110A 1163 11B8; C342;C342;110A 1163 11B9;C342;110A 1163 11B9; C343;C343;110A 1163 11BA;C343;110A 1163 11BA; C344;C344;110A 1163 11BB;C344;110A 1163 11BB; C345;C345;110A 1163 11BC;C345;110A 1163 11BC; C346;C346;110A 1163 11BD;C346;110A 1163 11BD; C347;C347;110A 1163 11BE;C347;110A 1163 11BE; C348;C348;110A 1163 11BF;C348;110A 1163 11BF; C349;C349;110A 1163 11C0;C349;110A 1163 11C0; C34A;C34A;110A 1163 11C1;C34A;110A 1163 11C1; C34B;C34B;110A 1163 11C2;C34B;110A 1163 11C2; C34C;C34C;110A 1164;C34C;110A 1164; C34D;C34D;110A 1164 11A8;C34D;110A 1164 11A8; C34E;C34E;110A 1164 11A9;C34E;110A 1164 11A9; C34F;C34F;110A 1164 11AA;C34F;110A 1164 11AA; C350;C350;110A 1164 11AB;C350;110A 1164 11AB; C351;C351;110A 1164 11AC;C351;110A 1164 11AC; C352;C352;110A 1164 11AD;C352;110A 1164 11AD; C353;C353;110A 1164 11AE;C353;110A 1164 11AE; C354;C354;110A 1164 11AF;C354;110A 1164 11AF; C355;C355;110A 1164 11B0;C355;110A 1164 11B0; C356;C356;110A 1164 11B1;C356;110A 1164 11B1; C357;C357;110A 1164 11B2;C357;110A 1164 11B2; C358;C358;110A 1164 11B3;C358;110A 1164 11B3; C359;C359;110A 1164 11B4;C359;110A 1164 11B4; C35A;C35A;110A 1164 11B5;C35A;110A 1164 11B5; C35B;C35B;110A 1164 11B6;C35B;110A 1164 11B6; C35C;C35C;110A 1164 11B7;C35C;110A 1164 11B7; C35D;C35D;110A 1164 11B8;C35D;110A 1164 11B8; C35E;C35E;110A 1164 11B9;C35E;110A 1164 11B9; C35F;C35F;110A 1164 11BA;C35F;110A 1164 11BA; C360;C360;110A 1164 11BB;C360;110A 1164 11BB; C361;C361;110A 1164 11BC;C361;110A 1164 11BC; C362;C362;110A 1164 11BD;C362;110A 1164 11BD; C363;C363;110A 1164 11BE;C363;110A 1164 11BE; C364;C364;110A 1164 11BF;C364;110A 1164 11BF; C365;C365;110A 1164 11C0;C365;110A 1164 11C0; C366;C366;110A 1164 11C1;C366;110A 1164 11C1; C367;C367;110A 1164 11C2;C367;110A 1164 11C2; C368;C368;110A 1165;C368;110A 1165; C369;C369;110A 1165 11A8;C369;110A 1165 11A8; C36A;C36A;110A 1165 11A9;C36A;110A 1165 11A9; C36B;C36B;110A 1165 11AA;C36B;110A 1165 11AA; C36C;C36C;110A 1165 11AB;C36C;110A 1165 11AB; C36D;C36D;110A 1165 11AC;C36D;110A 1165 11AC; C36E;C36E;110A 1165 11AD;C36E;110A 1165 11AD; C36F;C36F;110A 1165 11AE;C36F;110A 1165 11AE; C370;C370;110A 1165 11AF;C370;110A 1165 11AF; C371;C371;110A 1165 11B0;C371;110A 1165 11B0; C372;C372;110A 1165 11B1;C372;110A 1165 11B1; C373;C373;110A 1165 11B2;C373;110A 1165 11B2; C374;C374;110A 1165 11B3;C374;110A 1165 11B3; C375;C375;110A 1165 11B4;C375;110A 1165 11B4; C376;C376;110A 1165 11B5;C376;110A 1165 11B5; C377;C377;110A 1165 11B6;C377;110A 1165 11B6; C378;C378;110A 1165 11B7;C378;110A 1165 11B7; C379;C379;110A 1165 11B8;C379;110A 1165 11B8; C37A;C37A;110A 1165 11B9;C37A;110A 1165 11B9; C37B;C37B;110A 1165 11BA;C37B;110A 1165 11BA; C37C;C37C;110A 1165 11BB;C37C;110A 1165 11BB; C37D;C37D;110A 1165 11BC;C37D;110A 1165 11BC; C37E;C37E;110A 1165 11BD;C37E;110A 1165 11BD; C37F;C37F;110A 1165 11BE;C37F;110A 1165 11BE; C380;C380;110A 1165 11BF;C380;110A 1165 11BF; C381;C381;110A 1165 11C0;C381;110A 1165 11C0; C382;C382;110A 1165 11C1;C382;110A 1165 11C1; C383;C383;110A 1165 11C2;C383;110A 1165 11C2; C384;C384;110A 1166;C384;110A 1166; C385;C385;110A 1166 11A8;C385;110A 1166 11A8; C386;C386;110A 1166 11A9;C386;110A 1166 11A9; C387;C387;110A 1166 11AA;C387;110A 1166 11AA; C388;C388;110A 1166 11AB;C388;110A 1166 11AB; C389;C389;110A 1166 11AC;C389;110A 1166 11AC; C38A;C38A;110A 1166 11AD;C38A;110A 1166 11AD; C38B;C38B;110A 1166 11AE;C38B;110A 1166 11AE; C38C;C38C;110A 1166 11AF;C38C;110A 1166 11AF; C38D;C38D;110A 1166 11B0;C38D;110A 1166 11B0; C38E;C38E;110A 1166 11B1;C38E;110A 1166 11B1; C38F;C38F;110A 1166 11B2;C38F;110A 1166 11B2; C390;C390;110A 1166 11B3;C390;110A 1166 11B3; C391;C391;110A 1166 11B4;C391;110A 1166 11B4; C392;C392;110A 1166 11B5;C392;110A 1166 11B5; C393;C393;110A 1166 11B6;C393;110A 1166 11B6; C394;C394;110A 1166 11B7;C394;110A 1166 11B7; C395;C395;110A 1166 11B8;C395;110A 1166 11B8; C396;C396;110A 1166 11B9;C396;110A 1166 11B9; C397;C397;110A 1166 11BA;C397;110A 1166 11BA; C398;C398;110A 1166 11BB;C398;110A 1166 11BB; C399;C399;110A 1166 11BC;C399;110A 1166 11BC; C39A;C39A;110A 1166 11BD;C39A;110A 1166 11BD; C39B;C39B;110A 1166 11BE;C39B;110A 1166 11BE; C39C;C39C;110A 1166 11BF;C39C;110A 1166 11BF; C39D;C39D;110A 1166 11C0;C39D;110A 1166 11C0; C39E;C39E;110A 1166 11C1;C39E;110A 1166 11C1; C39F;C39F;110A 1166 11C2;C39F;110A 1166 11C2; C3A0;C3A0;110A 1167;C3A0;110A 1167; C3A1;C3A1;110A 1167 11A8;C3A1;110A 1167 11A8; C3A2;C3A2;110A 1167 11A9;C3A2;110A 1167 11A9; C3A3;C3A3;110A 1167 11AA;C3A3;110A 1167 11AA; C3A4;C3A4;110A 1167 11AB;C3A4;110A 1167 11AB; C3A5;C3A5;110A 1167 11AC;C3A5;110A 1167 11AC; C3A6;C3A6;110A 1167 11AD;C3A6;110A 1167 11AD; C3A7;C3A7;110A 1167 11AE;C3A7;110A 1167 11AE; C3A8;C3A8;110A 1167 11AF;C3A8;110A 1167 11AF; C3A9;C3A9;110A 1167 11B0;C3A9;110A 1167 11B0; C3AA;C3AA;110A 1167 11B1;C3AA;110A 1167 11B1; C3AB;C3AB;110A 1167 11B2;C3AB;110A 1167 11B2; C3AC;C3AC;110A 1167 11B3;C3AC;110A 1167 11B3; C3AD;C3AD;110A 1167 11B4;C3AD;110A 1167 11B4; C3AE;C3AE;110A 1167 11B5;C3AE;110A 1167 11B5; C3AF;C3AF;110A 1167 11B6;C3AF;110A 1167 11B6; C3B0;C3B0;110A 1167 11B7;C3B0;110A 1167 11B7; C3B1;C3B1;110A 1167 11B8;C3B1;110A 1167 11B8; C3B2;C3B2;110A 1167 11B9;C3B2;110A 1167 11B9; C3B3;C3B3;110A 1167 11BA;C3B3;110A 1167 11BA; C3B4;C3B4;110A 1167 11BB;C3B4;110A 1167 11BB; C3B5;C3B5;110A 1167 11BC;C3B5;110A 1167 11BC; C3B6;C3B6;110A 1167 11BD;C3B6;110A 1167 11BD; C3B7;C3B7;110A 1167 11BE;C3B7;110A 1167 11BE; C3B8;C3B8;110A 1167 11BF;C3B8;110A 1167 11BF; C3B9;C3B9;110A 1167 11C0;C3B9;110A 1167 11C0; C3BA;C3BA;110A 1167 11C1;C3BA;110A 1167 11C1; C3BB;C3BB;110A 1167 11C2;C3BB;110A 1167 11C2; C3BC;C3BC;110A 1168;C3BC;110A 1168; C3BD;C3BD;110A 1168 11A8;C3BD;110A 1168 11A8; C3BE;C3BE;110A 1168 11A9;C3BE;110A 1168 11A9; C3BF;C3BF;110A 1168 11AA;C3BF;110A 1168 11AA; C3C0;C3C0;110A 1168 11AB;C3C0;110A 1168 11AB; C3C1;C3C1;110A 1168 11AC;C3C1;110A 1168 11AC; C3C2;C3C2;110A 1168 11AD;C3C2;110A 1168 11AD; C3C3;C3C3;110A 1168 11AE;C3C3;110A 1168 11AE; C3C4;C3C4;110A 1168 11AF;C3C4;110A 1168 11AF; C3C5;C3C5;110A 1168 11B0;C3C5;110A 1168 11B0; C3C6;C3C6;110A 1168 11B1;C3C6;110A 1168 11B1; C3C7;C3C7;110A 1168 11B2;C3C7;110A 1168 11B2; C3C8;C3C8;110A 1168 11B3;C3C8;110A 1168 11B3; C3C9;C3C9;110A 1168 11B4;C3C9;110A 1168 11B4; C3CA;C3CA;110A 1168 11B5;C3CA;110A 1168 11B5; C3CB;C3CB;110A 1168 11B6;C3CB;110A 1168 11B6; C3CC;C3CC;110A 1168 11B7;C3CC;110A 1168 11B7; C3CD;C3CD;110A 1168 11B8;C3CD;110A 1168 11B8; C3CE;C3CE;110A 1168 11B9;C3CE;110A 1168 11B9; C3CF;C3CF;110A 1168 11BA;C3CF;110A 1168 11BA; C3D0;C3D0;110A 1168 11BB;C3D0;110A 1168 11BB; C3D1;C3D1;110A 1168 11BC;C3D1;110A 1168 11BC; C3D2;C3D2;110A 1168 11BD;C3D2;110A 1168 11BD; C3D3;C3D3;110A 1168 11BE;C3D3;110A 1168 11BE; C3D4;C3D4;110A 1168 11BF;C3D4;110A 1168 11BF; C3D5;C3D5;110A 1168 11C0;C3D5;110A 1168 11C0; C3D6;C3D6;110A 1168 11C1;C3D6;110A 1168 11C1; C3D7;C3D7;110A 1168 11C2;C3D7;110A 1168 11C2; C3D8;C3D8;110A 1169;C3D8;110A 1169; C3D9;C3D9;110A 1169 11A8;C3D9;110A 1169 11A8; C3DA;C3DA;110A 1169 11A9;C3DA;110A 1169 11A9; C3DB;C3DB;110A 1169 11AA;C3DB;110A 1169 11AA; C3DC;C3DC;110A 1169 11AB;C3DC;110A 1169 11AB; C3DD;C3DD;110A 1169 11AC;C3DD;110A 1169 11AC; C3DE;C3DE;110A 1169 11AD;C3DE;110A 1169 11AD; C3DF;C3DF;110A 1169 11AE;C3DF;110A 1169 11AE; C3E0;C3E0;110A 1169 11AF;C3E0;110A 1169 11AF; C3E1;C3E1;110A 1169 11B0;C3E1;110A 1169 11B0; C3E2;C3E2;110A 1169 11B1;C3E2;110A 1169 11B1; C3E3;C3E3;110A 1169 11B2;C3E3;110A 1169 11B2; C3E4;C3E4;110A 1169 11B3;C3E4;110A 1169 11B3; C3E5;C3E5;110A 1169 11B4;C3E5;110A 1169 11B4; C3E6;C3E6;110A 1169 11B5;C3E6;110A 1169 11B5; C3E7;C3E7;110A 1169 11B6;C3E7;110A 1169 11B6; C3E8;C3E8;110A 1169 11B7;C3E8;110A 1169 11B7; C3E9;C3E9;110A 1169 11B8;C3E9;110A 1169 11B8; C3EA;C3EA;110A 1169 11B9;C3EA;110A 1169 11B9; C3EB;C3EB;110A 1169 11BA;C3EB;110A 1169 11BA; C3EC;C3EC;110A 1169 11BB;C3EC;110A 1169 11BB; C3ED;C3ED;110A 1169 11BC;C3ED;110A 1169 11BC; C3EE;C3EE;110A 1169 11BD;C3EE;110A 1169 11BD; C3EF;C3EF;110A 1169 11BE;C3EF;110A 1169 11BE; C3F0;C3F0;110A 1169 11BF;C3F0;110A 1169 11BF; C3F1;C3F1;110A 1169 11C0;C3F1;110A 1169 11C0; C3F2;C3F2;110A 1169 11C1;C3F2;110A 1169 11C1; C3F3;C3F3;110A 1169 11C2;C3F3;110A 1169 11C2; C3F4;C3F4;110A 116A;C3F4;110A 116A; C3F5;C3F5;110A 116A 11A8;C3F5;110A 116A 11A8; C3F6;C3F6;110A 116A 11A9;C3F6;110A 116A 11A9; C3F7;C3F7;110A 116A 11AA;C3F7;110A 116A 11AA; C3F8;C3F8;110A 116A 11AB;C3F8;110A 116A 11AB; C3F9;C3F9;110A 116A 11AC;C3F9;110A 116A 11AC; C3FA;C3FA;110A 116A 11AD;C3FA;110A 116A 11AD; C3FB;C3FB;110A 116A 11AE;C3FB;110A 116A 11AE; C3FC;C3FC;110A 116A 11AF;C3FC;110A 116A 11AF; C3FD;C3FD;110A 116A 11B0;C3FD;110A 116A 11B0; C3FE;C3FE;110A 116A 11B1;C3FE;110A 116A 11B1; C3FF;C3FF;110A 116A 11B2;C3FF;110A 116A 11B2; C400;C400;110A 116A 11B3;C400;110A 116A 11B3; C401;C401;110A 116A 11B4;C401;110A 116A 11B4; C402;C402;110A 116A 11B5;C402;110A 116A 11B5; C403;C403;110A 116A 11B6;C403;110A 116A 11B6; C404;C404;110A 116A 11B7;C404;110A 116A 11B7; C405;C405;110A 116A 11B8;C405;110A 116A 11B8; C406;C406;110A 116A 11B9;C406;110A 116A 11B9; C407;C407;110A 116A 11BA;C407;110A 116A 11BA; C408;C408;110A 116A 11BB;C408;110A 116A 11BB; C409;C409;110A 116A 11BC;C409;110A 116A 11BC; C40A;C40A;110A 116A 11BD;C40A;110A 116A 11BD; C40B;C40B;110A 116A 11BE;C40B;110A 116A 11BE; C40C;C40C;110A 116A 11BF;C40C;110A 116A 11BF; C40D;C40D;110A 116A 11C0;C40D;110A 116A 11C0; C40E;C40E;110A 116A 11C1;C40E;110A 116A 11C1; C40F;C40F;110A 116A 11C2;C40F;110A 116A 11C2; C410;C410;110A 116B;C410;110A 116B; C411;C411;110A 116B 11A8;C411;110A 116B 11A8; C412;C412;110A 116B 11A9;C412;110A 116B 11A9; C413;C413;110A 116B 11AA;C413;110A 116B 11AA; C414;C414;110A 116B 11AB;C414;110A 116B 11AB; C415;C415;110A 116B 11AC;C415;110A 116B 11AC; C416;C416;110A 116B 11AD;C416;110A 116B 11AD; C417;C417;110A 116B 11AE;C417;110A 116B 11AE; C418;C418;110A 116B 11AF;C418;110A 116B 11AF; C419;C419;110A 116B 11B0;C419;110A 116B 11B0; C41A;C41A;110A 116B 11B1;C41A;110A 116B 11B1; C41B;C41B;110A 116B 11B2;C41B;110A 116B 11B2; C41C;C41C;110A 116B 11B3;C41C;110A 116B 11B3; C41D;C41D;110A 116B 11B4;C41D;110A 116B 11B4; C41E;C41E;110A 116B 11B5;C41E;110A 116B 11B5; C41F;C41F;110A 116B 11B6;C41F;110A 116B 11B6; C420;C420;110A 116B 11B7;C420;110A 116B 11B7; C421;C421;110A 116B 11B8;C421;110A 116B 11B8; C422;C422;110A 116B 11B9;C422;110A 116B 11B9; C423;C423;110A 116B 11BA;C423;110A 116B 11BA; C424;C424;110A 116B 11BB;C424;110A 116B 11BB; C425;C425;110A 116B 11BC;C425;110A 116B 11BC; C426;C426;110A 116B 11BD;C426;110A 116B 11BD; C427;C427;110A 116B 11BE;C427;110A 116B 11BE; C428;C428;110A 116B 11BF;C428;110A 116B 11BF; C429;C429;110A 116B 11C0;C429;110A 116B 11C0; C42A;C42A;110A 116B 11C1;C42A;110A 116B 11C1; C42B;C42B;110A 116B 11C2;C42B;110A 116B 11C2; C42C;C42C;110A 116C;C42C;110A 116C; C42D;C42D;110A 116C 11A8;C42D;110A 116C 11A8; C42E;C42E;110A 116C 11A9;C42E;110A 116C 11A9; C42F;C42F;110A 116C 11AA;C42F;110A 116C 11AA; C430;C430;110A 116C 11AB;C430;110A 116C 11AB; C431;C431;110A 116C 11AC;C431;110A 116C 11AC; C432;C432;110A 116C 11AD;C432;110A 116C 11AD; C433;C433;110A 116C 11AE;C433;110A 116C 11AE; C434;C434;110A 116C 11AF;C434;110A 116C 11AF; C435;C435;110A 116C 11B0;C435;110A 116C 11B0; C436;C436;110A 116C 11B1;C436;110A 116C 11B1; C437;C437;110A 116C 11B2;C437;110A 116C 11B2; C438;C438;110A 116C 11B3;C438;110A 116C 11B3; C439;C439;110A 116C 11B4;C439;110A 116C 11B4; C43A;C43A;110A 116C 11B5;C43A;110A 116C 11B5; C43B;C43B;110A 116C 11B6;C43B;110A 116C 11B6; C43C;C43C;110A 116C 11B7;C43C;110A 116C 11B7; C43D;C43D;110A 116C 11B8;C43D;110A 116C 11B8; C43E;C43E;110A 116C 11B9;C43E;110A 116C 11B9; C43F;C43F;110A 116C 11BA;C43F;110A 116C 11BA; C440;C440;110A 116C 11BB;C440;110A 116C 11BB; C441;C441;110A 116C 11BC;C441;110A 116C 11BC; C442;C442;110A 116C 11BD;C442;110A 116C 11BD; C443;C443;110A 116C 11BE;C443;110A 116C 11BE; C444;C444;110A 116C 11BF;C444;110A 116C 11BF; C445;C445;110A 116C 11C0;C445;110A 116C 11C0; C446;C446;110A 116C 11C1;C446;110A 116C 11C1; C447;C447;110A 116C 11C2;C447;110A 116C 11C2; C448;C448;110A 116D;C448;110A 116D; C449;C449;110A 116D 11A8;C449;110A 116D 11A8; C44A;C44A;110A 116D 11A9;C44A;110A 116D 11A9; C44B;C44B;110A 116D 11AA;C44B;110A 116D 11AA; C44C;C44C;110A 116D 11AB;C44C;110A 116D 11AB; C44D;C44D;110A 116D 11AC;C44D;110A 116D 11AC; C44E;C44E;110A 116D 11AD;C44E;110A 116D 11AD; C44F;C44F;110A 116D 11AE;C44F;110A 116D 11AE; C450;C450;110A 116D 11AF;C450;110A 116D 11AF; C451;C451;110A 116D 11B0;C451;110A 116D 11B0; C452;C452;110A 116D 11B1;C452;110A 116D 11B1; C453;C453;110A 116D 11B2;C453;110A 116D 11B2; C454;C454;110A 116D 11B3;C454;110A 116D 11B3; C455;C455;110A 116D 11B4;C455;110A 116D 11B4; C456;C456;110A 116D 11B5;C456;110A 116D 11B5; C457;C457;110A 116D 11B6;C457;110A 116D 11B6; C458;C458;110A 116D 11B7;C458;110A 116D 11B7; C459;C459;110A 116D 11B8;C459;110A 116D 11B8; C45A;C45A;110A 116D 11B9;C45A;110A 116D 11B9; C45B;C45B;110A 116D 11BA;C45B;110A 116D 11BA; C45C;C45C;110A 116D 11BB;C45C;110A 116D 11BB; C45D;C45D;110A 116D 11BC;C45D;110A 116D 11BC; C45E;C45E;110A 116D 11BD;C45E;110A 116D 11BD; C45F;C45F;110A 116D 11BE;C45F;110A 116D 11BE; C460;C460;110A 116D 11BF;C460;110A 116D 11BF; C461;C461;110A 116D 11C0;C461;110A 116D 11C0; C462;C462;110A 116D 11C1;C462;110A 116D 11C1; C463;C463;110A 116D 11C2;C463;110A 116D 11C2; C464;C464;110A 116E;C464;110A 116E; C465;C465;110A 116E 11A8;C465;110A 116E 11A8; C466;C466;110A 116E 11A9;C466;110A 116E 11A9; C467;C467;110A 116E 11AA;C467;110A 116E 11AA; C468;C468;110A 116E 11AB;C468;110A 116E 11AB; C469;C469;110A 116E 11AC;C469;110A 116E 11AC; C46A;C46A;110A 116E 11AD;C46A;110A 116E 11AD; C46B;C46B;110A 116E 11AE;C46B;110A 116E 11AE; C46C;C46C;110A 116E 11AF;C46C;110A 116E 11AF; C46D;C46D;110A 116E 11B0;C46D;110A 116E 11B0; C46E;C46E;110A 116E 11B1;C46E;110A 116E 11B1; C46F;C46F;110A 116E 11B2;C46F;110A 116E 11B2; C470;C470;110A 116E 11B3;C470;110A 116E 11B3; C471;C471;110A 116E 11B4;C471;110A 116E 11B4; C472;C472;110A 116E 11B5;C472;110A 116E 11B5; C473;C473;110A 116E 11B6;C473;110A 116E 11B6; C474;C474;110A 116E 11B7;C474;110A 116E 11B7; C475;C475;110A 116E 11B8;C475;110A 116E 11B8; C476;C476;110A 116E 11B9;C476;110A 116E 11B9; C477;C477;110A 116E 11BA;C477;110A 116E 11BA; C478;C478;110A 116E 11BB;C478;110A 116E 11BB; C479;C479;110A 116E 11BC;C479;110A 116E 11BC; C47A;C47A;110A 116E 11BD;C47A;110A 116E 11BD; C47B;C47B;110A 116E 11BE;C47B;110A 116E 11BE; C47C;C47C;110A 116E 11BF;C47C;110A 116E 11BF; C47D;C47D;110A 116E 11C0;C47D;110A 116E 11C0; C47E;C47E;110A 116E 11C1;C47E;110A 116E 11C1; C47F;C47F;110A 116E 11C2;C47F;110A 116E 11C2; C480;C480;110A 116F;C480;110A 116F; C481;C481;110A 116F 11A8;C481;110A 116F 11A8; C482;C482;110A 116F 11A9;C482;110A 116F 11A9; C483;C483;110A 116F 11AA;C483;110A 116F 11AA; C484;C484;110A 116F 11AB;C484;110A 116F 11AB; C485;C485;110A 116F 11AC;C485;110A 116F 11AC; C486;C486;110A 116F 11AD;C486;110A 116F 11AD; C487;C487;110A 116F 11AE;C487;110A 116F 11AE; C488;C488;110A 116F 11AF;C488;110A 116F 11AF; C489;C489;110A 116F 11B0;C489;110A 116F 11B0; C48A;C48A;110A 116F 11B1;C48A;110A 116F 11B1; C48B;C48B;110A 116F 11B2;C48B;110A 116F 11B2; C48C;C48C;110A 116F 11B3;C48C;110A 116F 11B3; C48D;C48D;110A 116F 11B4;C48D;110A 116F 11B4; C48E;C48E;110A 116F 11B5;C48E;110A 116F 11B5; C48F;C48F;110A 116F 11B6;C48F;110A 116F 11B6; C490;C490;110A 116F 11B7;C490;110A 116F 11B7; C491;C491;110A 116F 11B8;C491;110A 116F 11B8; C492;C492;110A 116F 11B9;C492;110A 116F 11B9; C493;C493;110A 116F 11BA;C493;110A 116F 11BA; C494;C494;110A 116F 11BB;C494;110A 116F 11BB; C495;C495;110A 116F 11BC;C495;110A 116F 11BC; C496;C496;110A 116F 11BD;C496;110A 116F 11BD; C497;C497;110A 116F 11BE;C497;110A 116F 11BE; C498;C498;110A 116F 11BF;C498;110A 116F 11BF; C499;C499;110A 116F 11C0;C499;110A 116F 11C0; C49A;C49A;110A 116F 11C1;C49A;110A 116F 11C1; C49B;C49B;110A 116F 11C2;C49B;110A 116F 11C2; C49C;C49C;110A 1170;C49C;110A 1170; C49D;C49D;110A 1170 11A8;C49D;110A 1170 11A8; C49E;C49E;110A 1170 11A9;C49E;110A 1170 11A9; C49F;C49F;110A 1170 11AA;C49F;110A 1170 11AA; C4A0;C4A0;110A 1170 11AB;C4A0;110A 1170 11AB; C4A1;C4A1;110A 1170 11AC;C4A1;110A 1170 11AC; C4A2;C4A2;110A 1170 11AD;C4A2;110A 1170 11AD; C4A3;C4A3;110A 1170 11AE;C4A3;110A 1170 11AE; C4A4;C4A4;110A 1170 11AF;C4A4;110A 1170 11AF; C4A5;C4A5;110A 1170 11B0;C4A5;110A 1170 11B0; C4A6;C4A6;110A 1170 11B1;C4A6;110A 1170 11B1; C4A7;C4A7;110A 1170 11B2;C4A7;110A 1170 11B2; C4A8;C4A8;110A 1170 11B3;C4A8;110A 1170 11B3; C4A9;C4A9;110A 1170 11B4;C4A9;110A 1170 11B4; C4AA;C4AA;110A 1170 11B5;C4AA;110A 1170 11B5; C4AB;C4AB;110A 1170 11B6;C4AB;110A 1170 11B6; C4AC;C4AC;110A 1170 11B7;C4AC;110A 1170 11B7; C4AD;C4AD;110A 1170 11B8;C4AD;110A 1170 11B8; C4AE;C4AE;110A 1170 11B9;C4AE;110A 1170 11B9; C4AF;C4AF;110A 1170 11BA;C4AF;110A 1170 11BA; C4B0;C4B0;110A 1170 11BB;C4B0;110A 1170 11BB; C4B1;C4B1;110A 1170 11BC;C4B1;110A 1170 11BC; C4B2;C4B2;110A 1170 11BD;C4B2;110A 1170 11BD; C4B3;C4B3;110A 1170 11BE;C4B3;110A 1170 11BE; C4B4;C4B4;110A 1170 11BF;C4B4;110A 1170 11BF; C4B5;C4B5;110A 1170 11C0;C4B5;110A 1170 11C0; C4B6;C4B6;110A 1170 11C1;C4B6;110A 1170 11C1; C4B7;C4B7;110A 1170 11C2;C4B7;110A 1170 11C2; C4B8;C4B8;110A 1171;C4B8;110A 1171; C4B9;C4B9;110A 1171 11A8;C4B9;110A 1171 11A8; C4BA;C4BA;110A 1171 11A9;C4BA;110A 1171 11A9; C4BB;C4BB;110A 1171 11AA;C4BB;110A 1171 11AA; C4BC;C4BC;110A 1171 11AB;C4BC;110A 1171 11AB; C4BD;C4BD;110A 1171 11AC;C4BD;110A 1171 11AC; C4BE;C4BE;110A 1171 11AD;C4BE;110A 1171 11AD; C4BF;C4BF;110A 1171 11AE;C4BF;110A 1171 11AE; C4C0;C4C0;110A 1171 11AF;C4C0;110A 1171 11AF; C4C1;C4C1;110A 1171 11B0;C4C1;110A 1171 11B0; C4C2;C4C2;110A 1171 11B1;C4C2;110A 1171 11B1; C4C3;C4C3;110A 1171 11B2;C4C3;110A 1171 11B2; C4C4;C4C4;110A 1171 11B3;C4C4;110A 1171 11B3; C4C5;C4C5;110A 1171 11B4;C4C5;110A 1171 11B4; C4C6;C4C6;110A 1171 11B5;C4C6;110A 1171 11B5; C4C7;C4C7;110A 1171 11B6;C4C7;110A 1171 11B6; C4C8;C4C8;110A 1171 11B7;C4C8;110A 1171 11B7; C4C9;C4C9;110A 1171 11B8;C4C9;110A 1171 11B8; C4CA;C4CA;110A 1171 11B9;C4CA;110A 1171 11B9; C4CB;C4CB;110A 1171 11BA;C4CB;110A 1171 11BA; C4CC;C4CC;110A 1171 11BB;C4CC;110A 1171 11BB; C4CD;C4CD;110A 1171 11BC;C4CD;110A 1171 11BC; C4CE;C4CE;110A 1171 11BD;C4CE;110A 1171 11BD; C4CF;C4CF;110A 1171 11BE;C4CF;110A 1171 11BE; C4D0;C4D0;110A 1171 11BF;C4D0;110A 1171 11BF; C4D1;C4D1;110A 1171 11C0;C4D1;110A 1171 11C0; C4D2;C4D2;110A 1171 11C1;C4D2;110A 1171 11C1; C4D3;C4D3;110A 1171 11C2;C4D3;110A 1171 11C2; C4D4;C4D4;110A 1172;C4D4;110A 1172; C4D5;C4D5;110A 1172 11A8;C4D5;110A 1172 11A8; C4D6;C4D6;110A 1172 11A9;C4D6;110A 1172 11A9; C4D7;C4D7;110A 1172 11AA;C4D7;110A 1172 11AA; C4D8;C4D8;110A 1172 11AB;C4D8;110A 1172 11AB; C4D9;C4D9;110A 1172 11AC;C4D9;110A 1172 11AC; C4DA;C4DA;110A 1172 11AD;C4DA;110A 1172 11AD; C4DB;C4DB;110A 1172 11AE;C4DB;110A 1172 11AE; C4DC;C4DC;110A 1172 11AF;C4DC;110A 1172 11AF; C4DD;C4DD;110A 1172 11B0;C4DD;110A 1172 11B0; C4DE;C4DE;110A 1172 11B1;C4DE;110A 1172 11B1; C4DF;C4DF;110A 1172 11B2;C4DF;110A 1172 11B2; C4E0;C4E0;110A 1172 11B3;C4E0;110A 1172 11B3; C4E1;C4E1;110A 1172 11B4;C4E1;110A 1172 11B4; C4E2;C4E2;110A 1172 11B5;C4E2;110A 1172 11B5; C4E3;C4E3;110A 1172 11B6;C4E3;110A 1172 11B6; C4E4;C4E4;110A 1172 11B7;C4E4;110A 1172 11B7; C4E5;C4E5;110A 1172 11B8;C4E5;110A 1172 11B8; C4E6;C4E6;110A 1172 11B9;C4E6;110A 1172 11B9; C4E7;C4E7;110A 1172 11BA;C4E7;110A 1172 11BA; C4E8;C4E8;110A 1172 11BB;C4E8;110A 1172 11BB; C4E9;C4E9;110A 1172 11BC;C4E9;110A 1172 11BC; C4EA;C4EA;110A 1172 11BD;C4EA;110A 1172 11BD; C4EB;C4EB;110A 1172 11BE;C4EB;110A 1172 11BE; C4EC;C4EC;110A 1172 11BF;C4EC;110A 1172 11BF; C4ED;C4ED;110A 1172 11C0;C4ED;110A 1172 11C0; C4EE;C4EE;110A 1172 11C1;C4EE;110A 1172 11C1; C4EF;C4EF;110A 1172 11C2;C4EF;110A 1172 11C2; C4F0;C4F0;110A 1173;C4F0;110A 1173; C4F1;C4F1;110A 1173 11A8;C4F1;110A 1173 11A8; C4F2;C4F2;110A 1173 11A9;C4F2;110A 1173 11A9; C4F3;C4F3;110A 1173 11AA;C4F3;110A 1173 11AA; C4F4;C4F4;110A 1173 11AB;C4F4;110A 1173 11AB; C4F5;C4F5;110A 1173 11AC;C4F5;110A 1173 11AC; C4F6;C4F6;110A 1173 11AD;C4F6;110A 1173 11AD; C4F7;C4F7;110A 1173 11AE;C4F7;110A 1173 11AE; C4F8;C4F8;110A 1173 11AF;C4F8;110A 1173 11AF; C4F9;C4F9;110A 1173 11B0;C4F9;110A 1173 11B0; C4FA;C4FA;110A 1173 11B1;C4FA;110A 1173 11B1; C4FB;C4FB;110A 1173 11B2;C4FB;110A 1173 11B2; C4FC;C4FC;110A 1173 11B3;C4FC;110A 1173 11B3; C4FD;C4FD;110A 1173 11B4;C4FD;110A 1173 11B4; C4FE;C4FE;110A 1173 11B5;C4FE;110A 1173 11B5; C4FF;C4FF;110A 1173 11B6;C4FF;110A 1173 11B6; C500;C500;110A 1173 11B7;C500;110A 1173 11B7; C501;C501;110A 1173 11B8;C501;110A 1173 11B8; C502;C502;110A 1173 11B9;C502;110A 1173 11B9; C503;C503;110A 1173 11BA;C503;110A 1173 11BA; C504;C504;110A 1173 11BB;C504;110A 1173 11BB; C505;C505;110A 1173 11BC;C505;110A 1173 11BC; C506;C506;110A 1173 11BD;C506;110A 1173 11BD; C507;C507;110A 1173 11BE;C507;110A 1173 11BE; C508;C508;110A 1173 11BF;C508;110A 1173 11BF; C509;C509;110A 1173 11C0;C509;110A 1173 11C0; C50A;C50A;110A 1173 11C1;C50A;110A 1173 11C1; C50B;C50B;110A 1173 11C2;C50B;110A 1173 11C2; C50C;C50C;110A 1174;C50C;110A 1174; C50D;C50D;110A 1174 11A8;C50D;110A 1174 11A8; C50E;C50E;110A 1174 11A9;C50E;110A 1174 11A9; C50F;C50F;110A 1174 11AA;C50F;110A 1174 11AA; C510;C510;110A 1174 11AB;C510;110A 1174 11AB; C511;C511;110A 1174 11AC;C511;110A 1174 11AC; C512;C512;110A 1174 11AD;C512;110A 1174 11AD; C513;C513;110A 1174 11AE;C513;110A 1174 11AE; C514;C514;110A 1174 11AF;C514;110A 1174 11AF; C515;C515;110A 1174 11B0;C515;110A 1174 11B0; C516;C516;110A 1174 11B1;C516;110A 1174 11B1; C517;C517;110A 1174 11B2;C517;110A 1174 11B2; C518;C518;110A 1174 11B3;C518;110A 1174 11B3; C519;C519;110A 1174 11B4;C519;110A 1174 11B4; C51A;C51A;110A 1174 11B5;C51A;110A 1174 11B5; C51B;C51B;110A 1174 11B6;C51B;110A 1174 11B6; C51C;C51C;110A 1174 11B7;C51C;110A 1174 11B7; C51D;C51D;110A 1174 11B8;C51D;110A 1174 11B8; C51E;C51E;110A 1174 11B9;C51E;110A 1174 11B9; C51F;C51F;110A 1174 11BA;C51F;110A 1174 11BA; C520;C520;110A 1174 11BB;C520;110A 1174 11BB; C521;C521;110A 1174 11BC;C521;110A 1174 11BC; C522;C522;110A 1174 11BD;C522;110A 1174 11BD; C523;C523;110A 1174 11BE;C523;110A 1174 11BE; C524;C524;110A 1174 11BF;C524;110A 1174 11BF; C525;C525;110A 1174 11C0;C525;110A 1174 11C0; C526;C526;110A 1174 11C1;C526;110A 1174 11C1; C527;C527;110A 1174 11C2;C527;110A 1174 11C2; C528;C528;110A 1175;C528;110A 1175; C529;C529;110A 1175 11A8;C529;110A 1175 11A8; C52A;C52A;110A 1175 11A9;C52A;110A 1175 11A9; C52B;C52B;110A 1175 11AA;C52B;110A 1175 11AA; C52C;C52C;110A 1175 11AB;C52C;110A 1175 11AB; C52D;C52D;110A 1175 11AC;C52D;110A 1175 11AC; C52E;C52E;110A 1175 11AD;C52E;110A 1175 11AD; C52F;C52F;110A 1175 11AE;C52F;110A 1175 11AE; C530;C530;110A 1175 11AF;C530;110A 1175 11AF; C531;C531;110A 1175 11B0;C531;110A 1175 11B0; C532;C532;110A 1175 11B1;C532;110A 1175 11B1; C533;C533;110A 1175 11B2;C533;110A 1175 11B2; C534;C534;110A 1175 11B3;C534;110A 1175 11B3; C535;C535;110A 1175 11B4;C535;110A 1175 11B4; C536;C536;110A 1175 11B5;C536;110A 1175 11B5; C537;C537;110A 1175 11B6;C537;110A 1175 11B6; C538;C538;110A 1175 11B7;C538;110A 1175 11B7; C539;C539;110A 1175 11B8;C539;110A 1175 11B8; C53A;C53A;110A 1175 11B9;C53A;110A 1175 11B9; C53B;C53B;110A 1175 11BA;C53B;110A 1175 11BA; C53C;C53C;110A 1175 11BB;C53C;110A 1175 11BB; C53D;C53D;110A 1175 11BC;C53D;110A 1175 11BC; C53E;C53E;110A 1175 11BD;C53E;110A 1175 11BD; C53F;C53F;110A 1175 11BE;C53F;110A 1175 11BE; C540;C540;110A 1175 11BF;C540;110A 1175 11BF; C541;C541;110A 1175 11C0;C541;110A 1175 11C0; C542;C542;110A 1175 11C1;C542;110A 1175 11C1; C543;C543;110A 1175 11C2;C543;110A 1175 11C2; C544;C544;110B 1161;C544;110B 1161; C545;C545;110B 1161 11A8;C545;110B 1161 11A8; C546;C546;110B 1161 11A9;C546;110B 1161 11A9; C547;C547;110B 1161 11AA;C547;110B 1161 11AA; C548;C548;110B 1161 11AB;C548;110B 1161 11AB; C549;C549;110B 1161 11AC;C549;110B 1161 11AC; C54A;C54A;110B 1161 11AD;C54A;110B 1161 11AD; C54B;C54B;110B 1161 11AE;C54B;110B 1161 11AE; C54C;C54C;110B 1161 11AF;C54C;110B 1161 11AF; C54D;C54D;110B 1161 11B0;C54D;110B 1161 11B0; C54E;C54E;110B 1161 11B1;C54E;110B 1161 11B1; C54F;C54F;110B 1161 11B2;C54F;110B 1161 11B2; C550;C550;110B 1161 11B3;C550;110B 1161 11B3; C551;C551;110B 1161 11B4;C551;110B 1161 11B4; C552;C552;110B 1161 11B5;C552;110B 1161 11B5; C553;C553;110B 1161 11B6;C553;110B 1161 11B6; C554;C554;110B 1161 11B7;C554;110B 1161 11B7; C555;C555;110B 1161 11B8;C555;110B 1161 11B8; C556;C556;110B 1161 11B9;C556;110B 1161 11B9; C557;C557;110B 1161 11BA;C557;110B 1161 11BA; C558;C558;110B 1161 11BB;C558;110B 1161 11BB; C559;C559;110B 1161 11BC;C559;110B 1161 11BC; C55A;C55A;110B 1161 11BD;C55A;110B 1161 11BD; C55B;C55B;110B 1161 11BE;C55B;110B 1161 11BE; C55C;C55C;110B 1161 11BF;C55C;110B 1161 11BF; C55D;C55D;110B 1161 11C0;C55D;110B 1161 11C0; C55E;C55E;110B 1161 11C1;C55E;110B 1161 11C1; C55F;C55F;110B 1161 11C2;C55F;110B 1161 11C2; C560;C560;110B 1162;C560;110B 1162; C561;C561;110B 1162 11A8;C561;110B 1162 11A8; C562;C562;110B 1162 11A9;C562;110B 1162 11A9; C563;C563;110B 1162 11AA;C563;110B 1162 11AA; C564;C564;110B 1162 11AB;C564;110B 1162 11AB; C565;C565;110B 1162 11AC;C565;110B 1162 11AC; C566;C566;110B 1162 11AD;C566;110B 1162 11AD; C567;C567;110B 1162 11AE;C567;110B 1162 11AE; C568;C568;110B 1162 11AF;C568;110B 1162 11AF; C569;C569;110B 1162 11B0;C569;110B 1162 11B0; C56A;C56A;110B 1162 11B1;C56A;110B 1162 11B1; C56B;C56B;110B 1162 11B2;C56B;110B 1162 11B2; C56C;C56C;110B 1162 11B3;C56C;110B 1162 11B3; C56D;C56D;110B 1162 11B4;C56D;110B 1162 11B4; C56E;C56E;110B 1162 11B5;C56E;110B 1162 11B5; C56F;C56F;110B 1162 11B6;C56F;110B 1162 11B6; C570;C570;110B 1162 11B7;C570;110B 1162 11B7; C571;C571;110B 1162 11B8;C571;110B 1162 11B8; C572;C572;110B 1162 11B9;C572;110B 1162 11B9; C573;C573;110B 1162 11BA;C573;110B 1162 11BA; C574;C574;110B 1162 11BB;C574;110B 1162 11BB; C575;C575;110B 1162 11BC;C575;110B 1162 11BC; C576;C576;110B 1162 11BD;C576;110B 1162 11BD; C577;C577;110B 1162 11BE;C577;110B 1162 11BE; C578;C578;110B 1162 11BF;C578;110B 1162 11BF; C579;C579;110B 1162 11C0;C579;110B 1162 11C0; C57A;C57A;110B 1162 11C1;C57A;110B 1162 11C1; C57B;C57B;110B 1162 11C2;C57B;110B 1162 11C2; C57C;C57C;110B 1163;C57C;110B 1163; C57D;C57D;110B 1163 11A8;C57D;110B 1163 11A8; C57E;C57E;110B 1163 11A9;C57E;110B 1163 11A9; C57F;C57F;110B 1163 11AA;C57F;110B 1163 11AA; C580;C580;110B 1163 11AB;C580;110B 1163 11AB; C581;C581;110B 1163 11AC;C581;110B 1163 11AC; C582;C582;110B 1163 11AD;C582;110B 1163 11AD; C583;C583;110B 1163 11AE;C583;110B 1163 11AE; C584;C584;110B 1163 11AF;C584;110B 1163 11AF; C585;C585;110B 1163 11B0;C585;110B 1163 11B0; C586;C586;110B 1163 11B1;C586;110B 1163 11B1; C587;C587;110B 1163 11B2;C587;110B 1163 11B2; C588;C588;110B 1163 11B3;C588;110B 1163 11B3; C589;C589;110B 1163 11B4;C589;110B 1163 11B4; C58A;C58A;110B 1163 11B5;C58A;110B 1163 11B5; C58B;C58B;110B 1163 11B6;C58B;110B 1163 11B6; C58C;C58C;110B 1163 11B7;C58C;110B 1163 11B7; C58D;C58D;110B 1163 11B8;C58D;110B 1163 11B8; C58E;C58E;110B 1163 11B9;C58E;110B 1163 11B9; C58F;C58F;110B 1163 11BA;C58F;110B 1163 11BA; C590;C590;110B 1163 11BB;C590;110B 1163 11BB; C591;C591;110B 1163 11BC;C591;110B 1163 11BC; C592;C592;110B 1163 11BD;C592;110B 1163 11BD; C593;C593;110B 1163 11BE;C593;110B 1163 11BE; C594;C594;110B 1163 11BF;C594;110B 1163 11BF; C595;C595;110B 1163 11C0;C595;110B 1163 11C0; C596;C596;110B 1163 11C1;C596;110B 1163 11C1; C597;C597;110B 1163 11C2;C597;110B 1163 11C2; C598;C598;110B 1164;C598;110B 1164; C599;C599;110B 1164 11A8;C599;110B 1164 11A8; C59A;C59A;110B 1164 11A9;C59A;110B 1164 11A9; C59B;C59B;110B 1164 11AA;C59B;110B 1164 11AA; C59C;C59C;110B 1164 11AB;C59C;110B 1164 11AB; C59D;C59D;110B 1164 11AC;C59D;110B 1164 11AC; C59E;C59E;110B 1164 11AD;C59E;110B 1164 11AD; C59F;C59F;110B 1164 11AE;C59F;110B 1164 11AE; C5A0;C5A0;110B 1164 11AF;C5A0;110B 1164 11AF; C5A1;C5A1;110B 1164 11B0;C5A1;110B 1164 11B0; C5A2;C5A2;110B 1164 11B1;C5A2;110B 1164 11B1; C5A3;C5A3;110B 1164 11B2;C5A3;110B 1164 11B2; C5A4;C5A4;110B 1164 11B3;C5A4;110B 1164 11B3; C5A5;C5A5;110B 1164 11B4;C5A5;110B 1164 11B4; C5A6;C5A6;110B 1164 11B5;C5A6;110B 1164 11B5; C5A7;C5A7;110B 1164 11B6;C5A7;110B 1164 11B6; C5A8;C5A8;110B 1164 11B7;C5A8;110B 1164 11B7; C5A9;C5A9;110B 1164 11B8;C5A9;110B 1164 11B8; C5AA;C5AA;110B 1164 11B9;C5AA;110B 1164 11B9; C5AB;C5AB;110B 1164 11BA;C5AB;110B 1164 11BA; C5AC;C5AC;110B 1164 11BB;C5AC;110B 1164 11BB; C5AD;C5AD;110B 1164 11BC;C5AD;110B 1164 11BC; C5AE;C5AE;110B 1164 11BD;C5AE;110B 1164 11BD; C5AF;C5AF;110B 1164 11BE;C5AF;110B 1164 11BE; C5B0;C5B0;110B 1164 11BF;C5B0;110B 1164 11BF; C5B1;C5B1;110B 1164 11C0;C5B1;110B 1164 11C0; C5B2;C5B2;110B 1164 11C1;C5B2;110B 1164 11C1; C5B3;C5B3;110B 1164 11C2;C5B3;110B 1164 11C2; C5B4;C5B4;110B 1165;C5B4;110B 1165; C5B5;C5B5;110B 1165 11A8;C5B5;110B 1165 11A8; C5B6;C5B6;110B 1165 11A9;C5B6;110B 1165 11A9; C5B7;C5B7;110B 1165 11AA;C5B7;110B 1165 11AA; C5B8;C5B8;110B 1165 11AB;C5B8;110B 1165 11AB; C5B9;C5B9;110B 1165 11AC;C5B9;110B 1165 11AC; C5BA;C5BA;110B 1165 11AD;C5BA;110B 1165 11AD; C5BB;C5BB;110B 1165 11AE;C5BB;110B 1165 11AE; C5BC;C5BC;110B 1165 11AF;C5BC;110B 1165 11AF; C5BD;C5BD;110B 1165 11B0;C5BD;110B 1165 11B0; C5BE;C5BE;110B 1165 11B1;C5BE;110B 1165 11B1; C5BF;C5BF;110B 1165 11B2;C5BF;110B 1165 11B2; C5C0;C5C0;110B 1165 11B3;C5C0;110B 1165 11B3; C5C1;C5C1;110B 1165 11B4;C5C1;110B 1165 11B4; C5C2;C5C2;110B 1165 11B5;C5C2;110B 1165 11B5; C5C3;C5C3;110B 1165 11B6;C5C3;110B 1165 11B6; C5C4;C5C4;110B 1165 11B7;C5C4;110B 1165 11B7; C5C5;C5C5;110B 1165 11B8;C5C5;110B 1165 11B8; C5C6;C5C6;110B 1165 11B9;C5C6;110B 1165 11B9; C5C7;C5C7;110B 1165 11BA;C5C7;110B 1165 11BA; C5C8;C5C8;110B 1165 11BB;C5C8;110B 1165 11BB; C5C9;C5C9;110B 1165 11BC;C5C9;110B 1165 11BC; C5CA;C5CA;110B 1165 11BD;C5CA;110B 1165 11BD; C5CB;C5CB;110B 1165 11BE;C5CB;110B 1165 11BE; C5CC;C5CC;110B 1165 11BF;C5CC;110B 1165 11BF; C5CD;C5CD;110B 1165 11C0;C5CD;110B 1165 11C0; C5CE;C5CE;110B 1165 11C1;C5CE;110B 1165 11C1; C5CF;C5CF;110B 1165 11C2;C5CF;110B 1165 11C2; C5D0;C5D0;110B 1166;C5D0;110B 1166; C5D1;C5D1;110B 1166 11A8;C5D1;110B 1166 11A8; C5D2;C5D2;110B 1166 11A9;C5D2;110B 1166 11A9; C5D3;C5D3;110B 1166 11AA;C5D3;110B 1166 11AA; C5D4;C5D4;110B 1166 11AB;C5D4;110B 1166 11AB; C5D5;C5D5;110B 1166 11AC;C5D5;110B 1166 11AC; C5D6;C5D6;110B 1166 11AD;C5D6;110B 1166 11AD; C5D7;C5D7;110B 1166 11AE;C5D7;110B 1166 11AE; C5D8;C5D8;110B 1166 11AF;C5D8;110B 1166 11AF; C5D9;C5D9;110B 1166 11B0;C5D9;110B 1166 11B0; C5DA;C5DA;110B 1166 11B1;C5DA;110B 1166 11B1; C5DB;C5DB;110B 1166 11B2;C5DB;110B 1166 11B2; C5DC;C5DC;110B 1166 11B3;C5DC;110B 1166 11B3; C5DD;C5DD;110B 1166 11B4;C5DD;110B 1166 11B4; C5DE;C5DE;110B 1166 11B5;C5DE;110B 1166 11B5; C5DF;C5DF;110B 1166 11B6;C5DF;110B 1166 11B6; C5E0;C5E0;110B 1166 11B7;C5E0;110B 1166 11B7; C5E1;C5E1;110B 1166 11B8;C5E1;110B 1166 11B8; C5E2;C5E2;110B 1166 11B9;C5E2;110B 1166 11B9; C5E3;C5E3;110B 1166 11BA;C5E3;110B 1166 11BA; C5E4;C5E4;110B 1166 11BB;C5E4;110B 1166 11BB; C5E5;C5E5;110B 1166 11BC;C5E5;110B 1166 11BC; C5E6;C5E6;110B 1166 11BD;C5E6;110B 1166 11BD; C5E7;C5E7;110B 1166 11BE;C5E7;110B 1166 11BE; C5E8;C5E8;110B 1166 11BF;C5E8;110B 1166 11BF; C5E9;C5E9;110B 1166 11C0;C5E9;110B 1166 11C0; C5EA;C5EA;110B 1166 11C1;C5EA;110B 1166 11C1; C5EB;C5EB;110B 1166 11C2;C5EB;110B 1166 11C2; C5EC;C5EC;110B 1167;C5EC;110B 1167; C5ED;C5ED;110B 1167 11A8;C5ED;110B 1167 11A8; C5EE;C5EE;110B 1167 11A9;C5EE;110B 1167 11A9; C5EF;C5EF;110B 1167 11AA;C5EF;110B 1167 11AA; C5F0;C5F0;110B 1167 11AB;C5F0;110B 1167 11AB; C5F1;C5F1;110B 1167 11AC;C5F1;110B 1167 11AC; C5F2;C5F2;110B 1167 11AD;C5F2;110B 1167 11AD; C5F3;C5F3;110B 1167 11AE;C5F3;110B 1167 11AE; C5F4;C5F4;110B 1167 11AF;C5F4;110B 1167 11AF; C5F5;C5F5;110B 1167 11B0;C5F5;110B 1167 11B0; C5F6;C5F6;110B 1167 11B1;C5F6;110B 1167 11B1; C5F7;C5F7;110B 1167 11B2;C5F7;110B 1167 11B2; C5F8;C5F8;110B 1167 11B3;C5F8;110B 1167 11B3; C5F9;C5F9;110B 1167 11B4;C5F9;110B 1167 11B4; C5FA;C5FA;110B 1167 11B5;C5FA;110B 1167 11B5; C5FB;C5FB;110B 1167 11B6;C5FB;110B 1167 11B6; C5FC;C5FC;110B 1167 11B7;C5FC;110B 1167 11B7; C5FD;C5FD;110B 1167 11B8;C5FD;110B 1167 11B8; C5FE;C5FE;110B 1167 11B9;C5FE;110B 1167 11B9; C5FF;C5FF;110B 1167 11BA;C5FF;110B 1167 11BA; C600;C600;110B 1167 11BB;C600;110B 1167 11BB; C601;C601;110B 1167 11BC;C601;110B 1167 11BC; C602;C602;110B 1167 11BD;C602;110B 1167 11BD; C603;C603;110B 1167 11BE;C603;110B 1167 11BE; C604;C604;110B 1167 11BF;C604;110B 1167 11BF; C605;C605;110B 1167 11C0;C605;110B 1167 11C0; C606;C606;110B 1167 11C1;C606;110B 1167 11C1; C607;C607;110B 1167 11C2;C607;110B 1167 11C2; C608;C608;110B 1168;C608;110B 1168; C609;C609;110B 1168 11A8;C609;110B 1168 11A8; C60A;C60A;110B 1168 11A9;C60A;110B 1168 11A9; C60B;C60B;110B 1168 11AA;C60B;110B 1168 11AA; C60C;C60C;110B 1168 11AB;C60C;110B 1168 11AB; C60D;C60D;110B 1168 11AC;C60D;110B 1168 11AC; C60E;C60E;110B 1168 11AD;C60E;110B 1168 11AD; C60F;C60F;110B 1168 11AE;C60F;110B 1168 11AE; C610;C610;110B 1168 11AF;C610;110B 1168 11AF; C611;C611;110B 1168 11B0;C611;110B 1168 11B0; C612;C612;110B 1168 11B1;C612;110B 1168 11B1; C613;C613;110B 1168 11B2;C613;110B 1168 11B2; C614;C614;110B 1168 11B3;C614;110B 1168 11B3; C615;C615;110B 1168 11B4;C615;110B 1168 11B4; C616;C616;110B 1168 11B5;C616;110B 1168 11B5; C617;C617;110B 1168 11B6;C617;110B 1168 11B6; C618;C618;110B 1168 11B7;C618;110B 1168 11B7; C619;C619;110B 1168 11B8;C619;110B 1168 11B8; C61A;C61A;110B 1168 11B9;C61A;110B 1168 11B9; C61B;C61B;110B 1168 11BA;C61B;110B 1168 11BA; C61C;C61C;110B 1168 11BB;C61C;110B 1168 11BB; C61D;C61D;110B 1168 11BC;C61D;110B 1168 11BC; C61E;C61E;110B 1168 11BD;C61E;110B 1168 11BD; C61F;C61F;110B 1168 11BE;C61F;110B 1168 11BE; C620;C620;110B 1168 11BF;C620;110B 1168 11BF; C621;C621;110B 1168 11C0;C621;110B 1168 11C0; C622;C622;110B 1168 11C1;C622;110B 1168 11C1; C623;C623;110B 1168 11C2;C623;110B 1168 11C2; C624;C624;110B 1169;C624;110B 1169; C625;C625;110B 1169 11A8;C625;110B 1169 11A8; C626;C626;110B 1169 11A9;C626;110B 1169 11A9; C627;C627;110B 1169 11AA;C627;110B 1169 11AA; C628;C628;110B 1169 11AB;C628;110B 1169 11AB; C629;C629;110B 1169 11AC;C629;110B 1169 11AC; C62A;C62A;110B 1169 11AD;C62A;110B 1169 11AD; C62B;C62B;110B 1169 11AE;C62B;110B 1169 11AE; C62C;C62C;110B 1169 11AF;C62C;110B 1169 11AF; C62D;C62D;110B 1169 11B0;C62D;110B 1169 11B0; C62E;C62E;110B 1169 11B1;C62E;110B 1169 11B1; C62F;C62F;110B 1169 11B2;C62F;110B 1169 11B2; C630;C630;110B 1169 11B3;C630;110B 1169 11B3; C631;C631;110B 1169 11B4;C631;110B 1169 11B4; C632;C632;110B 1169 11B5;C632;110B 1169 11B5; C633;C633;110B 1169 11B6;C633;110B 1169 11B6; C634;C634;110B 1169 11B7;C634;110B 1169 11B7; C635;C635;110B 1169 11B8;C635;110B 1169 11B8; C636;C636;110B 1169 11B9;C636;110B 1169 11B9; C637;C637;110B 1169 11BA;C637;110B 1169 11BA; C638;C638;110B 1169 11BB;C638;110B 1169 11BB; C639;C639;110B 1169 11BC;C639;110B 1169 11BC; C63A;C63A;110B 1169 11BD;C63A;110B 1169 11BD; C63B;C63B;110B 1169 11BE;C63B;110B 1169 11BE; C63C;C63C;110B 1169 11BF;C63C;110B 1169 11BF; C63D;C63D;110B 1169 11C0;C63D;110B 1169 11C0; C63E;C63E;110B 1169 11C1;C63E;110B 1169 11C1; C63F;C63F;110B 1169 11C2;C63F;110B 1169 11C2; C640;C640;110B 116A;C640;110B 116A; C641;C641;110B 116A 11A8;C641;110B 116A 11A8; C642;C642;110B 116A 11A9;C642;110B 116A 11A9; C643;C643;110B 116A 11AA;C643;110B 116A 11AA; C644;C644;110B 116A 11AB;C644;110B 116A 11AB; C645;C645;110B 116A 11AC;C645;110B 116A 11AC; C646;C646;110B 116A 11AD;C646;110B 116A 11AD; C647;C647;110B 116A 11AE;C647;110B 116A 11AE; C648;C648;110B 116A 11AF;C648;110B 116A 11AF; C649;C649;110B 116A 11B0;C649;110B 116A 11B0; C64A;C64A;110B 116A 11B1;C64A;110B 116A 11B1; C64B;C64B;110B 116A 11B2;C64B;110B 116A 11B2; C64C;C64C;110B 116A 11B3;C64C;110B 116A 11B3; C64D;C64D;110B 116A 11B4;C64D;110B 116A 11B4; C64E;C64E;110B 116A 11B5;C64E;110B 116A 11B5; C64F;C64F;110B 116A 11B6;C64F;110B 116A 11B6; C650;C650;110B 116A 11B7;C650;110B 116A 11B7; C651;C651;110B 116A 11B8;C651;110B 116A 11B8; C652;C652;110B 116A 11B9;C652;110B 116A 11B9; C653;C653;110B 116A 11BA;C653;110B 116A 11BA; C654;C654;110B 116A 11BB;C654;110B 116A 11BB; C655;C655;110B 116A 11BC;C655;110B 116A 11BC; C656;C656;110B 116A 11BD;C656;110B 116A 11BD; C657;C657;110B 116A 11BE;C657;110B 116A 11BE; C658;C658;110B 116A 11BF;C658;110B 116A 11BF; C659;C659;110B 116A 11C0;C659;110B 116A 11C0; C65A;C65A;110B 116A 11C1;C65A;110B 116A 11C1; C65B;C65B;110B 116A 11C2;C65B;110B 116A 11C2; C65C;C65C;110B 116B;C65C;110B 116B; C65D;C65D;110B 116B 11A8;C65D;110B 116B 11A8; C65E;C65E;110B 116B 11A9;C65E;110B 116B 11A9; C65F;C65F;110B 116B 11AA;C65F;110B 116B 11AA; C660;C660;110B 116B 11AB;C660;110B 116B 11AB; C661;C661;110B 116B 11AC;C661;110B 116B 11AC; C662;C662;110B 116B 11AD;C662;110B 116B 11AD; C663;C663;110B 116B 11AE;C663;110B 116B 11AE; C664;C664;110B 116B 11AF;C664;110B 116B 11AF; C665;C665;110B 116B 11B0;C665;110B 116B 11B0; C666;C666;110B 116B 11B1;C666;110B 116B 11B1; C667;C667;110B 116B 11B2;C667;110B 116B 11B2; C668;C668;110B 116B 11B3;C668;110B 116B 11B3; C669;C669;110B 116B 11B4;C669;110B 116B 11B4; C66A;C66A;110B 116B 11B5;C66A;110B 116B 11B5; C66B;C66B;110B 116B 11B6;C66B;110B 116B 11B6; C66C;C66C;110B 116B 11B7;C66C;110B 116B 11B7; C66D;C66D;110B 116B 11B8;C66D;110B 116B 11B8; C66E;C66E;110B 116B 11B9;C66E;110B 116B 11B9; C66F;C66F;110B 116B 11BA;C66F;110B 116B 11BA; C670;C670;110B 116B 11BB;C670;110B 116B 11BB; C671;C671;110B 116B 11BC;C671;110B 116B 11BC; C672;C672;110B 116B 11BD;C672;110B 116B 11BD; C673;C673;110B 116B 11BE;C673;110B 116B 11BE; C674;C674;110B 116B 11BF;C674;110B 116B 11BF; C675;C675;110B 116B 11C0;C675;110B 116B 11C0; C676;C676;110B 116B 11C1;C676;110B 116B 11C1; C677;C677;110B 116B 11C2;C677;110B 116B 11C2; C678;C678;110B 116C;C678;110B 116C; C679;C679;110B 116C 11A8;C679;110B 116C 11A8; C67A;C67A;110B 116C 11A9;C67A;110B 116C 11A9; C67B;C67B;110B 116C 11AA;C67B;110B 116C 11AA; C67C;C67C;110B 116C 11AB;C67C;110B 116C 11AB; C67D;C67D;110B 116C 11AC;C67D;110B 116C 11AC; C67E;C67E;110B 116C 11AD;C67E;110B 116C 11AD; C67F;C67F;110B 116C 11AE;C67F;110B 116C 11AE; C680;C680;110B 116C 11AF;C680;110B 116C 11AF; C681;C681;110B 116C 11B0;C681;110B 116C 11B0; C682;C682;110B 116C 11B1;C682;110B 116C 11B1; C683;C683;110B 116C 11B2;C683;110B 116C 11B2; C684;C684;110B 116C 11B3;C684;110B 116C 11B3; C685;C685;110B 116C 11B4;C685;110B 116C 11B4; C686;C686;110B 116C 11B5;C686;110B 116C 11B5; C687;C687;110B 116C 11B6;C687;110B 116C 11B6; C688;C688;110B 116C 11B7;C688;110B 116C 11B7; C689;C689;110B 116C 11B8;C689;110B 116C 11B8; C68A;C68A;110B 116C 11B9;C68A;110B 116C 11B9; C68B;C68B;110B 116C 11BA;C68B;110B 116C 11BA; C68C;C68C;110B 116C 11BB;C68C;110B 116C 11BB; C68D;C68D;110B 116C 11BC;C68D;110B 116C 11BC; C68E;C68E;110B 116C 11BD;C68E;110B 116C 11BD; C68F;C68F;110B 116C 11BE;C68F;110B 116C 11BE; C690;C690;110B 116C 11BF;C690;110B 116C 11BF; C691;C691;110B 116C 11C0;C691;110B 116C 11C0; C692;C692;110B 116C 11C1;C692;110B 116C 11C1; C693;C693;110B 116C 11C2;C693;110B 116C 11C2; C694;C694;110B 116D;C694;110B 116D; C695;C695;110B 116D 11A8;C695;110B 116D 11A8; C696;C696;110B 116D 11A9;C696;110B 116D 11A9; C697;C697;110B 116D 11AA;C697;110B 116D 11AA; C698;C698;110B 116D 11AB;C698;110B 116D 11AB; C699;C699;110B 116D 11AC;C699;110B 116D 11AC; C69A;C69A;110B 116D 11AD;C69A;110B 116D 11AD; C69B;C69B;110B 116D 11AE;C69B;110B 116D 11AE; C69C;C69C;110B 116D 11AF;C69C;110B 116D 11AF; C69D;C69D;110B 116D 11B0;C69D;110B 116D 11B0; C69E;C69E;110B 116D 11B1;C69E;110B 116D 11B1; C69F;C69F;110B 116D 11B2;C69F;110B 116D 11B2; C6A0;C6A0;110B 116D 11B3;C6A0;110B 116D 11B3; C6A1;C6A1;110B 116D 11B4;C6A1;110B 116D 11B4; C6A2;C6A2;110B 116D 11B5;C6A2;110B 116D 11B5; C6A3;C6A3;110B 116D 11B6;C6A3;110B 116D 11B6; C6A4;C6A4;110B 116D 11B7;C6A4;110B 116D 11B7; C6A5;C6A5;110B 116D 11B8;C6A5;110B 116D 11B8; C6A6;C6A6;110B 116D 11B9;C6A6;110B 116D 11B9; C6A7;C6A7;110B 116D 11BA;C6A7;110B 116D 11BA; C6A8;C6A8;110B 116D 11BB;C6A8;110B 116D 11BB; C6A9;C6A9;110B 116D 11BC;C6A9;110B 116D 11BC; C6AA;C6AA;110B 116D 11BD;C6AA;110B 116D 11BD; C6AB;C6AB;110B 116D 11BE;C6AB;110B 116D 11BE; C6AC;C6AC;110B 116D 11BF;C6AC;110B 116D 11BF; C6AD;C6AD;110B 116D 11C0;C6AD;110B 116D 11C0; C6AE;C6AE;110B 116D 11C1;C6AE;110B 116D 11C1; C6AF;C6AF;110B 116D 11C2;C6AF;110B 116D 11C2; C6B0;C6B0;110B 116E;C6B0;110B 116E; C6B1;C6B1;110B 116E 11A8;C6B1;110B 116E 11A8; C6B2;C6B2;110B 116E 11A9;C6B2;110B 116E 11A9; C6B3;C6B3;110B 116E 11AA;C6B3;110B 116E 11AA; C6B4;C6B4;110B 116E 11AB;C6B4;110B 116E 11AB; C6B5;C6B5;110B 116E 11AC;C6B5;110B 116E 11AC; C6B6;C6B6;110B 116E 11AD;C6B6;110B 116E 11AD; C6B7;C6B7;110B 116E 11AE;C6B7;110B 116E 11AE; C6B8;C6B8;110B 116E 11AF;C6B8;110B 116E 11AF; C6B9;C6B9;110B 116E 11B0;C6B9;110B 116E 11B0; C6BA;C6BA;110B 116E 11B1;C6BA;110B 116E 11B1; C6BB;C6BB;110B 116E 11B2;C6BB;110B 116E 11B2; C6BC;C6BC;110B 116E 11B3;C6BC;110B 116E 11B3; C6BD;C6BD;110B 116E 11B4;C6BD;110B 116E 11B4; C6BE;C6BE;110B 116E 11B5;C6BE;110B 116E 11B5; C6BF;C6BF;110B 116E 11B6;C6BF;110B 116E 11B6; C6C0;C6C0;110B 116E 11B7;C6C0;110B 116E 11B7; C6C1;C6C1;110B 116E 11B8;C6C1;110B 116E 11B8; C6C2;C6C2;110B 116E 11B9;C6C2;110B 116E 11B9; C6C3;C6C3;110B 116E 11BA;C6C3;110B 116E 11BA; C6C4;C6C4;110B 116E 11BB;C6C4;110B 116E 11BB; C6C5;C6C5;110B 116E 11BC;C6C5;110B 116E 11BC; C6C6;C6C6;110B 116E 11BD;C6C6;110B 116E 11BD; C6C7;C6C7;110B 116E 11BE;C6C7;110B 116E 11BE; C6C8;C6C8;110B 116E 11BF;C6C8;110B 116E 11BF; C6C9;C6C9;110B 116E 11C0;C6C9;110B 116E 11C0; C6CA;C6CA;110B 116E 11C1;C6CA;110B 116E 11C1; C6CB;C6CB;110B 116E 11C2;C6CB;110B 116E 11C2; C6CC;C6CC;110B 116F;C6CC;110B 116F; C6CD;C6CD;110B 116F 11A8;C6CD;110B 116F 11A8; C6CE;C6CE;110B 116F 11A9;C6CE;110B 116F 11A9; C6CF;C6CF;110B 116F 11AA;C6CF;110B 116F 11AA; C6D0;C6D0;110B 116F 11AB;C6D0;110B 116F 11AB; C6D1;C6D1;110B 116F 11AC;C6D1;110B 116F 11AC; C6D2;C6D2;110B 116F 11AD;C6D2;110B 116F 11AD; C6D3;C6D3;110B 116F 11AE;C6D3;110B 116F 11AE; C6D4;C6D4;110B 116F 11AF;C6D4;110B 116F 11AF; C6D5;C6D5;110B 116F 11B0;C6D5;110B 116F 11B0; C6D6;C6D6;110B 116F 11B1;C6D6;110B 116F 11B1; C6D7;C6D7;110B 116F 11B2;C6D7;110B 116F 11B2; C6D8;C6D8;110B 116F 11B3;C6D8;110B 116F 11B3; C6D9;C6D9;110B 116F 11B4;C6D9;110B 116F 11B4; C6DA;C6DA;110B 116F 11B5;C6DA;110B 116F 11B5; C6DB;C6DB;110B 116F 11B6;C6DB;110B 116F 11B6; C6DC;C6DC;110B 116F 11B7;C6DC;110B 116F 11B7; C6DD;C6DD;110B 116F 11B8;C6DD;110B 116F 11B8; C6DE;C6DE;110B 116F 11B9;C6DE;110B 116F 11B9; C6DF;C6DF;110B 116F 11BA;C6DF;110B 116F 11BA; C6E0;C6E0;110B 116F 11BB;C6E0;110B 116F 11BB; C6E1;C6E1;110B 116F 11BC;C6E1;110B 116F 11BC; C6E2;C6E2;110B 116F 11BD;C6E2;110B 116F 11BD; C6E3;C6E3;110B 116F 11BE;C6E3;110B 116F 11BE; C6E4;C6E4;110B 116F 11BF;C6E4;110B 116F 11BF; C6E5;C6E5;110B 116F 11C0;C6E5;110B 116F 11C0; C6E6;C6E6;110B 116F 11C1;C6E6;110B 116F 11C1; C6E7;C6E7;110B 116F 11C2;C6E7;110B 116F 11C2; C6E8;C6E8;110B 1170;C6E8;110B 1170; C6E9;C6E9;110B 1170 11A8;C6E9;110B 1170 11A8; C6EA;C6EA;110B 1170 11A9;C6EA;110B 1170 11A9; C6EB;C6EB;110B 1170 11AA;C6EB;110B 1170 11AA; C6EC;C6EC;110B 1170 11AB;C6EC;110B 1170 11AB; C6ED;C6ED;110B 1170 11AC;C6ED;110B 1170 11AC; C6EE;C6EE;110B 1170 11AD;C6EE;110B 1170 11AD; C6EF;C6EF;110B 1170 11AE;C6EF;110B 1170 11AE; C6F0;C6F0;110B 1170 11AF;C6F0;110B 1170 11AF; C6F1;C6F1;110B 1170 11B0;C6F1;110B 1170 11B0; C6F2;C6F2;110B 1170 11B1;C6F2;110B 1170 11B1; C6F3;C6F3;110B 1170 11B2;C6F3;110B 1170 11B2; C6F4;C6F4;110B 1170 11B3;C6F4;110B 1170 11B3; C6F5;C6F5;110B 1170 11B4;C6F5;110B 1170 11B4; C6F6;C6F6;110B 1170 11B5;C6F6;110B 1170 11B5; C6F7;C6F7;110B 1170 11B6;C6F7;110B 1170 11B6; C6F8;C6F8;110B 1170 11B7;C6F8;110B 1170 11B7; C6F9;C6F9;110B 1170 11B8;C6F9;110B 1170 11B8; C6FA;C6FA;110B 1170 11B9;C6FA;110B 1170 11B9; C6FB;C6FB;110B 1170 11BA;C6FB;110B 1170 11BA; C6FC;C6FC;110B 1170 11BB;C6FC;110B 1170 11BB; C6FD;C6FD;110B 1170 11BC;C6FD;110B 1170 11BC; C6FE;C6FE;110B 1170 11BD;C6FE;110B 1170 11BD; C6FF;C6FF;110B 1170 11BE;C6FF;110B 1170 11BE; C700;C700;110B 1170 11BF;C700;110B 1170 11BF; C701;C701;110B 1170 11C0;C701;110B 1170 11C0; C702;C702;110B 1170 11C1;C702;110B 1170 11C1; C703;C703;110B 1170 11C2;C703;110B 1170 11C2; C704;C704;110B 1171;C704;110B 1171; C705;C705;110B 1171 11A8;C705;110B 1171 11A8; C706;C706;110B 1171 11A9;C706;110B 1171 11A9; C707;C707;110B 1171 11AA;C707;110B 1171 11AA; C708;C708;110B 1171 11AB;C708;110B 1171 11AB; C709;C709;110B 1171 11AC;C709;110B 1171 11AC; C70A;C70A;110B 1171 11AD;C70A;110B 1171 11AD; C70B;C70B;110B 1171 11AE;C70B;110B 1171 11AE; C70C;C70C;110B 1171 11AF;C70C;110B 1171 11AF; C70D;C70D;110B 1171 11B0;C70D;110B 1171 11B0; C70E;C70E;110B 1171 11B1;C70E;110B 1171 11B1; C70F;C70F;110B 1171 11B2;C70F;110B 1171 11B2; C710;C710;110B 1171 11B3;C710;110B 1171 11B3; C711;C711;110B 1171 11B4;C711;110B 1171 11B4; C712;C712;110B 1171 11B5;C712;110B 1171 11B5; C713;C713;110B 1171 11B6;C713;110B 1171 11B6; C714;C714;110B 1171 11B7;C714;110B 1171 11B7; C715;C715;110B 1171 11B8;C715;110B 1171 11B8; C716;C716;110B 1171 11B9;C716;110B 1171 11B9; C717;C717;110B 1171 11BA;C717;110B 1171 11BA; C718;C718;110B 1171 11BB;C718;110B 1171 11BB; C719;C719;110B 1171 11BC;C719;110B 1171 11BC; C71A;C71A;110B 1171 11BD;C71A;110B 1171 11BD; C71B;C71B;110B 1171 11BE;C71B;110B 1171 11BE; C71C;C71C;110B 1171 11BF;C71C;110B 1171 11BF; C71D;C71D;110B 1171 11C0;C71D;110B 1171 11C0; C71E;C71E;110B 1171 11C1;C71E;110B 1171 11C1; C71F;C71F;110B 1171 11C2;C71F;110B 1171 11C2; C720;C720;110B 1172;C720;110B 1172; C721;C721;110B 1172 11A8;C721;110B 1172 11A8; C722;C722;110B 1172 11A9;C722;110B 1172 11A9; C723;C723;110B 1172 11AA;C723;110B 1172 11AA; C724;C724;110B 1172 11AB;C724;110B 1172 11AB; C725;C725;110B 1172 11AC;C725;110B 1172 11AC; C726;C726;110B 1172 11AD;C726;110B 1172 11AD; C727;C727;110B 1172 11AE;C727;110B 1172 11AE; C728;C728;110B 1172 11AF;C728;110B 1172 11AF; C729;C729;110B 1172 11B0;C729;110B 1172 11B0; C72A;C72A;110B 1172 11B1;C72A;110B 1172 11B1; C72B;C72B;110B 1172 11B2;C72B;110B 1172 11B2; C72C;C72C;110B 1172 11B3;C72C;110B 1172 11B3; C72D;C72D;110B 1172 11B4;C72D;110B 1172 11B4; C72E;C72E;110B 1172 11B5;C72E;110B 1172 11B5; C72F;C72F;110B 1172 11B6;C72F;110B 1172 11B6; C730;C730;110B 1172 11B7;C730;110B 1172 11B7; C731;C731;110B 1172 11B8;C731;110B 1172 11B8; C732;C732;110B 1172 11B9;C732;110B 1172 11B9; C733;C733;110B 1172 11BA;C733;110B 1172 11BA; C734;C734;110B 1172 11BB;C734;110B 1172 11BB; C735;C735;110B 1172 11BC;C735;110B 1172 11BC; C736;C736;110B 1172 11BD;C736;110B 1172 11BD; C737;C737;110B 1172 11BE;C737;110B 1172 11BE; C738;C738;110B 1172 11BF;C738;110B 1172 11BF; C739;C739;110B 1172 11C0;C739;110B 1172 11C0; C73A;C73A;110B 1172 11C1;C73A;110B 1172 11C1; C73B;C73B;110B 1172 11C2;C73B;110B 1172 11C2; C73C;C73C;110B 1173;C73C;110B 1173; C73D;C73D;110B 1173 11A8;C73D;110B 1173 11A8; C73E;C73E;110B 1173 11A9;C73E;110B 1173 11A9; C73F;C73F;110B 1173 11AA;C73F;110B 1173 11AA; C740;C740;110B 1173 11AB;C740;110B 1173 11AB; C741;C741;110B 1173 11AC;C741;110B 1173 11AC; C742;C742;110B 1173 11AD;C742;110B 1173 11AD; C743;C743;110B 1173 11AE;C743;110B 1173 11AE; C744;C744;110B 1173 11AF;C744;110B 1173 11AF; C745;C745;110B 1173 11B0;C745;110B 1173 11B0; C746;C746;110B 1173 11B1;C746;110B 1173 11B1; C747;C747;110B 1173 11B2;C747;110B 1173 11B2; C748;C748;110B 1173 11B3;C748;110B 1173 11B3; C749;C749;110B 1173 11B4;C749;110B 1173 11B4; C74A;C74A;110B 1173 11B5;C74A;110B 1173 11B5; C74B;C74B;110B 1173 11B6;C74B;110B 1173 11B6; C74C;C74C;110B 1173 11B7;C74C;110B 1173 11B7; C74D;C74D;110B 1173 11B8;C74D;110B 1173 11B8; C74E;C74E;110B 1173 11B9;C74E;110B 1173 11B9; C74F;C74F;110B 1173 11BA;C74F;110B 1173 11BA; C750;C750;110B 1173 11BB;C750;110B 1173 11BB; C751;C751;110B 1173 11BC;C751;110B 1173 11BC; C752;C752;110B 1173 11BD;C752;110B 1173 11BD; C753;C753;110B 1173 11BE;C753;110B 1173 11BE; C754;C754;110B 1173 11BF;C754;110B 1173 11BF; C755;C755;110B 1173 11C0;C755;110B 1173 11C0; C756;C756;110B 1173 11C1;C756;110B 1173 11C1; C757;C757;110B 1173 11C2;C757;110B 1173 11C2; C758;C758;110B 1174;C758;110B 1174; C759;C759;110B 1174 11A8;C759;110B 1174 11A8; C75A;C75A;110B 1174 11A9;C75A;110B 1174 11A9; C75B;C75B;110B 1174 11AA;C75B;110B 1174 11AA; C75C;C75C;110B 1174 11AB;C75C;110B 1174 11AB; C75D;C75D;110B 1174 11AC;C75D;110B 1174 11AC; C75E;C75E;110B 1174 11AD;C75E;110B 1174 11AD; C75F;C75F;110B 1174 11AE;C75F;110B 1174 11AE; C760;C760;110B 1174 11AF;C760;110B 1174 11AF; C761;C761;110B 1174 11B0;C761;110B 1174 11B0; C762;C762;110B 1174 11B1;C762;110B 1174 11B1; C763;C763;110B 1174 11B2;C763;110B 1174 11B2; C764;C764;110B 1174 11B3;C764;110B 1174 11B3; C765;C765;110B 1174 11B4;C765;110B 1174 11B4; C766;C766;110B 1174 11B5;C766;110B 1174 11B5; C767;C767;110B 1174 11B6;C767;110B 1174 11B6; C768;C768;110B 1174 11B7;C768;110B 1174 11B7; C769;C769;110B 1174 11B8;C769;110B 1174 11B8; C76A;C76A;110B 1174 11B9;C76A;110B 1174 11B9; C76B;C76B;110B 1174 11BA;C76B;110B 1174 11BA; C76C;C76C;110B 1174 11BB;C76C;110B 1174 11BB; C76D;C76D;110B 1174 11BC;C76D;110B 1174 11BC; C76E;C76E;110B 1174 11BD;C76E;110B 1174 11BD; C76F;C76F;110B 1174 11BE;C76F;110B 1174 11BE; C770;C770;110B 1174 11BF;C770;110B 1174 11BF; C771;C771;110B 1174 11C0;C771;110B 1174 11C0; C772;C772;110B 1174 11C1;C772;110B 1174 11C1; C773;C773;110B 1174 11C2;C773;110B 1174 11C2; C774;C774;110B 1175;C774;110B 1175; C775;C775;110B 1175 11A8;C775;110B 1175 11A8; C776;C776;110B 1175 11A9;C776;110B 1175 11A9; C777;C777;110B 1175 11AA;C777;110B 1175 11AA; C778;C778;110B 1175 11AB;C778;110B 1175 11AB; C779;C779;110B 1175 11AC;C779;110B 1175 11AC; C77A;C77A;110B 1175 11AD;C77A;110B 1175 11AD; C77B;C77B;110B 1175 11AE;C77B;110B 1175 11AE; C77C;C77C;110B 1175 11AF;C77C;110B 1175 11AF; C77D;C77D;110B 1175 11B0;C77D;110B 1175 11B0; C77E;C77E;110B 1175 11B1;C77E;110B 1175 11B1; C77F;C77F;110B 1175 11B2;C77F;110B 1175 11B2; C780;C780;110B 1175 11B3;C780;110B 1175 11B3; C781;C781;110B 1175 11B4;C781;110B 1175 11B4; C782;C782;110B 1175 11B5;C782;110B 1175 11B5; C783;C783;110B 1175 11B6;C783;110B 1175 11B6; C784;C784;110B 1175 11B7;C784;110B 1175 11B7; C785;C785;110B 1175 11B8;C785;110B 1175 11B8; C786;C786;110B 1175 11B9;C786;110B 1175 11B9; C787;C787;110B 1175 11BA;C787;110B 1175 11BA; C788;C788;110B 1175 11BB;C788;110B 1175 11BB; C789;C789;110B 1175 11BC;C789;110B 1175 11BC; C78A;C78A;110B 1175 11BD;C78A;110B 1175 11BD; C78B;C78B;110B 1175 11BE;C78B;110B 1175 11BE; C78C;C78C;110B 1175 11BF;C78C;110B 1175 11BF; C78D;C78D;110B 1175 11C0;C78D;110B 1175 11C0; C78E;C78E;110B 1175 11C1;C78E;110B 1175 11C1; C78F;C78F;110B 1175 11C2;C78F;110B 1175 11C2; C790;C790;110C 1161;C790;110C 1161; C791;C791;110C 1161 11A8;C791;110C 1161 11A8; C792;C792;110C 1161 11A9;C792;110C 1161 11A9; C793;C793;110C 1161 11AA;C793;110C 1161 11AA; C794;C794;110C 1161 11AB;C794;110C 1161 11AB; C795;C795;110C 1161 11AC;C795;110C 1161 11AC; C796;C796;110C 1161 11AD;C796;110C 1161 11AD; C797;C797;110C 1161 11AE;C797;110C 1161 11AE; C798;C798;110C 1161 11AF;C798;110C 1161 11AF; C799;C799;110C 1161 11B0;C799;110C 1161 11B0; C79A;C79A;110C 1161 11B1;C79A;110C 1161 11B1; C79B;C79B;110C 1161 11B2;C79B;110C 1161 11B2; C79C;C79C;110C 1161 11B3;C79C;110C 1161 11B3; C79D;C79D;110C 1161 11B4;C79D;110C 1161 11B4; C79E;C79E;110C 1161 11B5;C79E;110C 1161 11B5; C79F;C79F;110C 1161 11B6;C79F;110C 1161 11B6; C7A0;C7A0;110C 1161 11B7;C7A0;110C 1161 11B7; C7A1;C7A1;110C 1161 11B8;C7A1;110C 1161 11B8; C7A2;C7A2;110C 1161 11B9;C7A2;110C 1161 11B9; C7A3;C7A3;110C 1161 11BA;C7A3;110C 1161 11BA; C7A4;C7A4;110C 1161 11BB;C7A4;110C 1161 11BB; C7A5;C7A5;110C 1161 11BC;C7A5;110C 1161 11BC; C7A6;C7A6;110C 1161 11BD;C7A6;110C 1161 11BD; C7A7;C7A7;110C 1161 11BE;C7A7;110C 1161 11BE; C7A8;C7A8;110C 1161 11BF;C7A8;110C 1161 11BF; C7A9;C7A9;110C 1161 11C0;C7A9;110C 1161 11C0; C7AA;C7AA;110C 1161 11C1;C7AA;110C 1161 11C1; C7AB;C7AB;110C 1161 11C2;C7AB;110C 1161 11C2; C7AC;C7AC;110C 1162;C7AC;110C 1162; C7AD;C7AD;110C 1162 11A8;C7AD;110C 1162 11A8; C7AE;C7AE;110C 1162 11A9;C7AE;110C 1162 11A9; C7AF;C7AF;110C 1162 11AA;C7AF;110C 1162 11AA; C7B0;C7B0;110C 1162 11AB;C7B0;110C 1162 11AB; C7B1;C7B1;110C 1162 11AC;C7B1;110C 1162 11AC; C7B2;C7B2;110C 1162 11AD;C7B2;110C 1162 11AD; C7B3;C7B3;110C 1162 11AE;C7B3;110C 1162 11AE; C7B4;C7B4;110C 1162 11AF;C7B4;110C 1162 11AF; C7B5;C7B5;110C 1162 11B0;C7B5;110C 1162 11B0; C7B6;C7B6;110C 1162 11B1;C7B6;110C 1162 11B1; C7B7;C7B7;110C 1162 11B2;C7B7;110C 1162 11B2; C7B8;C7B8;110C 1162 11B3;C7B8;110C 1162 11B3; C7B9;C7B9;110C 1162 11B4;C7B9;110C 1162 11B4; C7BA;C7BA;110C 1162 11B5;C7BA;110C 1162 11B5; C7BB;C7BB;110C 1162 11B6;C7BB;110C 1162 11B6; C7BC;C7BC;110C 1162 11B7;C7BC;110C 1162 11B7; C7BD;C7BD;110C 1162 11B8;C7BD;110C 1162 11B8; C7BE;C7BE;110C 1162 11B9;C7BE;110C 1162 11B9; C7BF;C7BF;110C 1162 11BA;C7BF;110C 1162 11BA; C7C0;C7C0;110C 1162 11BB;C7C0;110C 1162 11BB; C7C1;C7C1;110C 1162 11BC;C7C1;110C 1162 11BC; C7C2;C7C2;110C 1162 11BD;C7C2;110C 1162 11BD; C7C3;C7C3;110C 1162 11BE;C7C3;110C 1162 11BE; C7C4;C7C4;110C 1162 11BF;C7C4;110C 1162 11BF; C7C5;C7C5;110C 1162 11C0;C7C5;110C 1162 11C0; C7C6;C7C6;110C 1162 11C1;C7C6;110C 1162 11C1; C7C7;C7C7;110C 1162 11C2;C7C7;110C 1162 11C2; C7C8;C7C8;110C 1163;C7C8;110C 1163; C7C9;C7C9;110C 1163 11A8;C7C9;110C 1163 11A8; C7CA;C7CA;110C 1163 11A9;C7CA;110C 1163 11A9; C7CB;C7CB;110C 1163 11AA;C7CB;110C 1163 11AA; C7CC;C7CC;110C 1163 11AB;C7CC;110C 1163 11AB; C7CD;C7CD;110C 1163 11AC;C7CD;110C 1163 11AC; C7CE;C7CE;110C 1163 11AD;C7CE;110C 1163 11AD; C7CF;C7CF;110C 1163 11AE;C7CF;110C 1163 11AE; C7D0;C7D0;110C 1163 11AF;C7D0;110C 1163 11AF; C7D1;C7D1;110C 1163 11B0;C7D1;110C 1163 11B0; C7D2;C7D2;110C 1163 11B1;C7D2;110C 1163 11B1; C7D3;C7D3;110C 1163 11B2;C7D3;110C 1163 11B2; C7D4;C7D4;110C 1163 11B3;C7D4;110C 1163 11B3; C7D5;C7D5;110C 1163 11B4;C7D5;110C 1163 11B4; C7D6;C7D6;110C 1163 11B5;C7D6;110C 1163 11B5; C7D7;C7D7;110C 1163 11B6;C7D7;110C 1163 11B6; C7D8;C7D8;110C 1163 11B7;C7D8;110C 1163 11B7; C7D9;C7D9;110C 1163 11B8;C7D9;110C 1163 11B8; C7DA;C7DA;110C 1163 11B9;C7DA;110C 1163 11B9; C7DB;C7DB;110C 1163 11BA;C7DB;110C 1163 11BA; C7DC;C7DC;110C 1163 11BB;C7DC;110C 1163 11BB; C7DD;C7DD;110C 1163 11BC;C7DD;110C 1163 11BC; C7DE;C7DE;110C 1163 11BD;C7DE;110C 1163 11BD; C7DF;C7DF;110C 1163 11BE;C7DF;110C 1163 11BE; C7E0;C7E0;110C 1163 11BF;C7E0;110C 1163 11BF; C7E1;C7E1;110C 1163 11C0;C7E1;110C 1163 11C0; C7E2;C7E2;110C 1163 11C1;C7E2;110C 1163 11C1; C7E3;C7E3;110C 1163 11C2;C7E3;110C 1163 11C2; C7E4;C7E4;110C 1164;C7E4;110C 1164; C7E5;C7E5;110C 1164 11A8;C7E5;110C 1164 11A8; C7E6;C7E6;110C 1164 11A9;C7E6;110C 1164 11A9; C7E7;C7E7;110C 1164 11AA;C7E7;110C 1164 11AA; C7E8;C7E8;110C 1164 11AB;C7E8;110C 1164 11AB; C7E9;C7E9;110C 1164 11AC;C7E9;110C 1164 11AC; C7EA;C7EA;110C 1164 11AD;C7EA;110C 1164 11AD; C7EB;C7EB;110C 1164 11AE;C7EB;110C 1164 11AE; C7EC;C7EC;110C 1164 11AF;C7EC;110C 1164 11AF; C7ED;C7ED;110C 1164 11B0;C7ED;110C 1164 11B0; C7EE;C7EE;110C 1164 11B1;C7EE;110C 1164 11B1; C7EF;C7EF;110C 1164 11B2;C7EF;110C 1164 11B2; C7F0;C7F0;110C 1164 11B3;C7F0;110C 1164 11B3; C7F1;C7F1;110C 1164 11B4;C7F1;110C 1164 11B4; C7F2;C7F2;110C 1164 11B5;C7F2;110C 1164 11B5; C7F3;C7F3;110C 1164 11B6;C7F3;110C 1164 11B6; C7F4;C7F4;110C 1164 11B7;C7F4;110C 1164 11B7; C7F5;C7F5;110C 1164 11B8;C7F5;110C 1164 11B8; C7F6;C7F6;110C 1164 11B9;C7F6;110C 1164 11B9; C7F7;C7F7;110C 1164 11BA;C7F7;110C 1164 11BA; C7F8;C7F8;110C 1164 11BB;C7F8;110C 1164 11BB; C7F9;C7F9;110C 1164 11BC;C7F9;110C 1164 11BC; C7FA;C7FA;110C 1164 11BD;C7FA;110C 1164 11BD; C7FB;C7FB;110C 1164 11BE;C7FB;110C 1164 11BE; C7FC;C7FC;110C 1164 11BF;C7FC;110C 1164 11BF; C7FD;C7FD;110C 1164 11C0;C7FD;110C 1164 11C0; C7FE;C7FE;110C 1164 11C1;C7FE;110C 1164 11C1; C7FF;C7FF;110C 1164 11C2;C7FF;110C 1164 11C2; C800;C800;110C 1165;C800;110C 1165; C801;C801;110C 1165 11A8;C801;110C 1165 11A8; C802;C802;110C 1165 11A9;C802;110C 1165 11A9; C803;C803;110C 1165 11AA;C803;110C 1165 11AA; C804;C804;110C 1165 11AB;C804;110C 1165 11AB; C805;C805;110C 1165 11AC;C805;110C 1165 11AC; C806;C806;110C 1165 11AD;C806;110C 1165 11AD; C807;C807;110C 1165 11AE;C807;110C 1165 11AE; C808;C808;110C 1165 11AF;C808;110C 1165 11AF; C809;C809;110C 1165 11B0;C809;110C 1165 11B0; C80A;C80A;110C 1165 11B1;C80A;110C 1165 11B1; C80B;C80B;110C 1165 11B2;C80B;110C 1165 11B2; C80C;C80C;110C 1165 11B3;C80C;110C 1165 11B3; C80D;C80D;110C 1165 11B4;C80D;110C 1165 11B4; C80E;C80E;110C 1165 11B5;C80E;110C 1165 11B5; C80F;C80F;110C 1165 11B6;C80F;110C 1165 11B6; C810;C810;110C 1165 11B7;C810;110C 1165 11B7; C811;C811;110C 1165 11B8;C811;110C 1165 11B8; C812;C812;110C 1165 11B9;C812;110C 1165 11B9; C813;C813;110C 1165 11BA;C813;110C 1165 11BA; C814;C814;110C 1165 11BB;C814;110C 1165 11BB; C815;C815;110C 1165 11BC;C815;110C 1165 11BC; C816;C816;110C 1165 11BD;C816;110C 1165 11BD; C817;C817;110C 1165 11BE;C817;110C 1165 11BE; C818;C818;110C 1165 11BF;C818;110C 1165 11BF; C819;C819;110C 1165 11C0;C819;110C 1165 11C0; C81A;C81A;110C 1165 11C1;C81A;110C 1165 11C1; C81B;C81B;110C 1165 11C2;C81B;110C 1165 11C2; C81C;C81C;110C 1166;C81C;110C 1166; C81D;C81D;110C 1166 11A8;C81D;110C 1166 11A8; C81E;C81E;110C 1166 11A9;C81E;110C 1166 11A9; C81F;C81F;110C 1166 11AA;C81F;110C 1166 11AA; C820;C820;110C 1166 11AB;C820;110C 1166 11AB; C821;C821;110C 1166 11AC;C821;110C 1166 11AC; C822;C822;110C 1166 11AD;C822;110C 1166 11AD; C823;C823;110C 1166 11AE;C823;110C 1166 11AE; C824;C824;110C 1166 11AF;C824;110C 1166 11AF; C825;C825;110C 1166 11B0;C825;110C 1166 11B0; C826;C826;110C 1166 11B1;C826;110C 1166 11B1; C827;C827;110C 1166 11B2;C827;110C 1166 11B2; C828;C828;110C 1166 11B3;C828;110C 1166 11B3; C829;C829;110C 1166 11B4;C829;110C 1166 11B4; C82A;C82A;110C 1166 11B5;C82A;110C 1166 11B5; C82B;C82B;110C 1166 11B6;C82B;110C 1166 11B6; C82C;C82C;110C 1166 11B7;C82C;110C 1166 11B7; C82D;C82D;110C 1166 11B8;C82D;110C 1166 11B8; C82E;C82E;110C 1166 11B9;C82E;110C 1166 11B9; C82F;C82F;110C 1166 11BA;C82F;110C 1166 11BA; C830;C830;110C 1166 11BB;C830;110C 1166 11BB; C831;C831;110C 1166 11BC;C831;110C 1166 11BC; C832;C832;110C 1166 11BD;C832;110C 1166 11BD; C833;C833;110C 1166 11BE;C833;110C 1166 11BE; C834;C834;110C 1166 11BF;C834;110C 1166 11BF; C835;C835;110C 1166 11C0;C835;110C 1166 11C0; C836;C836;110C 1166 11C1;C836;110C 1166 11C1; C837;C837;110C 1166 11C2;C837;110C 1166 11C2; C838;C838;110C 1167;C838;110C 1167; C839;C839;110C 1167 11A8;C839;110C 1167 11A8; C83A;C83A;110C 1167 11A9;C83A;110C 1167 11A9; C83B;C83B;110C 1167 11AA;C83B;110C 1167 11AA; C83C;C83C;110C 1167 11AB;C83C;110C 1167 11AB; C83D;C83D;110C 1167 11AC;C83D;110C 1167 11AC; C83E;C83E;110C 1167 11AD;C83E;110C 1167 11AD; C83F;C83F;110C 1167 11AE;C83F;110C 1167 11AE; C840;C840;110C 1167 11AF;C840;110C 1167 11AF; C841;C841;110C 1167 11B0;C841;110C 1167 11B0; C842;C842;110C 1167 11B1;C842;110C 1167 11B1; C843;C843;110C 1167 11B2;C843;110C 1167 11B2; C844;C844;110C 1167 11B3;C844;110C 1167 11B3; C845;C845;110C 1167 11B4;C845;110C 1167 11B4; C846;C846;110C 1167 11B5;C846;110C 1167 11B5; C847;C847;110C 1167 11B6;C847;110C 1167 11B6; C848;C848;110C 1167 11B7;C848;110C 1167 11B7; C849;C849;110C 1167 11B8;C849;110C 1167 11B8; C84A;C84A;110C 1167 11B9;C84A;110C 1167 11B9; C84B;C84B;110C 1167 11BA;C84B;110C 1167 11BA; C84C;C84C;110C 1167 11BB;C84C;110C 1167 11BB; C84D;C84D;110C 1167 11BC;C84D;110C 1167 11BC; C84E;C84E;110C 1167 11BD;C84E;110C 1167 11BD; C84F;C84F;110C 1167 11BE;C84F;110C 1167 11BE; C850;C850;110C 1167 11BF;C850;110C 1167 11BF; C851;C851;110C 1167 11C0;C851;110C 1167 11C0; C852;C852;110C 1167 11C1;C852;110C 1167 11C1; C853;C853;110C 1167 11C2;C853;110C 1167 11C2; C854;C854;110C 1168;C854;110C 1168; C855;C855;110C 1168 11A8;C855;110C 1168 11A8; C856;C856;110C 1168 11A9;C856;110C 1168 11A9; C857;C857;110C 1168 11AA;C857;110C 1168 11AA; C858;C858;110C 1168 11AB;C858;110C 1168 11AB; C859;C859;110C 1168 11AC;C859;110C 1168 11AC; C85A;C85A;110C 1168 11AD;C85A;110C 1168 11AD; C85B;C85B;110C 1168 11AE;C85B;110C 1168 11AE; C85C;C85C;110C 1168 11AF;C85C;110C 1168 11AF; C85D;C85D;110C 1168 11B0;C85D;110C 1168 11B0; C85E;C85E;110C 1168 11B1;C85E;110C 1168 11B1; C85F;C85F;110C 1168 11B2;C85F;110C 1168 11B2; C860;C860;110C 1168 11B3;C860;110C 1168 11B3; C861;C861;110C 1168 11B4;C861;110C 1168 11B4; C862;C862;110C 1168 11B5;C862;110C 1168 11B5; C863;C863;110C 1168 11B6;C863;110C 1168 11B6; C864;C864;110C 1168 11B7;C864;110C 1168 11B7; C865;C865;110C 1168 11B8;C865;110C 1168 11B8; C866;C866;110C 1168 11B9;C866;110C 1168 11B9; C867;C867;110C 1168 11BA;C867;110C 1168 11BA; C868;C868;110C 1168 11BB;C868;110C 1168 11BB; C869;C869;110C 1168 11BC;C869;110C 1168 11BC; C86A;C86A;110C 1168 11BD;C86A;110C 1168 11BD; C86B;C86B;110C 1168 11BE;C86B;110C 1168 11BE; C86C;C86C;110C 1168 11BF;C86C;110C 1168 11BF; C86D;C86D;110C 1168 11C0;C86D;110C 1168 11C0; C86E;C86E;110C 1168 11C1;C86E;110C 1168 11C1; C86F;C86F;110C 1168 11C2;C86F;110C 1168 11C2; C870;C870;110C 1169;C870;110C 1169; C871;C871;110C 1169 11A8;C871;110C 1169 11A8; C872;C872;110C 1169 11A9;C872;110C 1169 11A9; C873;C873;110C 1169 11AA;C873;110C 1169 11AA; C874;C874;110C 1169 11AB;C874;110C 1169 11AB; C875;C875;110C 1169 11AC;C875;110C 1169 11AC; C876;C876;110C 1169 11AD;C876;110C 1169 11AD; C877;C877;110C 1169 11AE;C877;110C 1169 11AE; C878;C878;110C 1169 11AF;C878;110C 1169 11AF; C879;C879;110C 1169 11B0;C879;110C 1169 11B0; C87A;C87A;110C 1169 11B1;C87A;110C 1169 11B1; C87B;C87B;110C 1169 11B2;C87B;110C 1169 11B2; C87C;C87C;110C 1169 11B3;C87C;110C 1169 11B3; C87D;C87D;110C 1169 11B4;C87D;110C 1169 11B4; C87E;C87E;110C 1169 11B5;C87E;110C 1169 11B5; C87F;C87F;110C 1169 11B6;C87F;110C 1169 11B6; C880;C880;110C 1169 11B7;C880;110C 1169 11B7; C881;C881;110C 1169 11B8;C881;110C 1169 11B8; C882;C882;110C 1169 11B9;C882;110C 1169 11B9; C883;C883;110C 1169 11BA;C883;110C 1169 11BA; C884;C884;110C 1169 11BB;C884;110C 1169 11BB; C885;C885;110C 1169 11BC;C885;110C 1169 11BC; C886;C886;110C 1169 11BD;C886;110C 1169 11BD; C887;C887;110C 1169 11BE;C887;110C 1169 11BE; C888;C888;110C 1169 11BF;C888;110C 1169 11BF; C889;C889;110C 1169 11C0;C889;110C 1169 11C0; C88A;C88A;110C 1169 11C1;C88A;110C 1169 11C1; C88B;C88B;110C 1169 11C2;C88B;110C 1169 11C2; C88C;C88C;110C 116A;C88C;110C 116A; C88D;C88D;110C 116A 11A8;C88D;110C 116A 11A8; C88E;C88E;110C 116A 11A9;C88E;110C 116A 11A9; C88F;C88F;110C 116A 11AA;C88F;110C 116A 11AA; C890;C890;110C 116A 11AB;C890;110C 116A 11AB; C891;C891;110C 116A 11AC;C891;110C 116A 11AC; C892;C892;110C 116A 11AD;C892;110C 116A 11AD; C893;C893;110C 116A 11AE;C893;110C 116A 11AE; C894;C894;110C 116A 11AF;C894;110C 116A 11AF; C895;C895;110C 116A 11B0;C895;110C 116A 11B0; C896;C896;110C 116A 11B1;C896;110C 116A 11B1; C897;C897;110C 116A 11B2;C897;110C 116A 11B2; C898;C898;110C 116A 11B3;C898;110C 116A 11B3; C899;C899;110C 116A 11B4;C899;110C 116A 11B4; C89A;C89A;110C 116A 11B5;C89A;110C 116A 11B5; C89B;C89B;110C 116A 11B6;C89B;110C 116A 11B6; C89C;C89C;110C 116A 11B7;C89C;110C 116A 11B7; C89D;C89D;110C 116A 11B8;C89D;110C 116A 11B8; C89E;C89E;110C 116A 11B9;C89E;110C 116A 11B9; C89F;C89F;110C 116A 11BA;C89F;110C 116A 11BA; C8A0;C8A0;110C 116A 11BB;C8A0;110C 116A 11BB; C8A1;C8A1;110C 116A 11BC;C8A1;110C 116A 11BC; C8A2;C8A2;110C 116A 11BD;C8A2;110C 116A 11BD; C8A3;C8A3;110C 116A 11BE;C8A3;110C 116A 11BE; C8A4;C8A4;110C 116A 11BF;C8A4;110C 116A 11BF; C8A5;C8A5;110C 116A 11C0;C8A5;110C 116A 11C0; C8A6;C8A6;110C 116A 11C1;C8A6;110C 116A 11C1; C8A7;C8A7;110C 116A 11C2;C8A7;110C 116A 11C2; C8A8;C8A8;110C 116B;C8A8;110C 116B; C8A9;C8A9;110C 116B 11A8;C8A9;110C 116B 11A8; C8AA;C8AA;110C 116B 11A9;C8AA;110C 116B 11A9; C8AB;C8AB;110C 116B 11AA;C8AB;110C 116B 11AA; C8AC;C8AC;110C 116B 11AB;C8AC;110C 116B 11AB; C8AD;C8AD;110C 116B 11AC;C8AD;110C 116B 11AC; C8AE;C8AE;110C 116B 11AD;C8AE;110C 116B 11AD; C8AF;C8AF;110C 116B 11AE;C8AF;110C 116B 11AE; C8B0;C8B0;110C 116B 11AF;C8B0;110C 116B 11AF; C8B1;C8B1;110C 116B 11B0;C8B1;110C 116B 11B0; C8B2;C8B2;110C 116B 11B1;C8B2;110C 116B 11B1; C8B3;C8B3;110C 116B 11B2;C8B3;110C 116B 11B2; C8B4;C8B4;110C 116B 11B3;C8B4;110C 116B 11B3; C8B5;C8B5;110C 116B 11B4;C8B5;110C 116B 11B4; C8B6;C8B6;110C 116B 11B5;C8B6;110C 116B 11B5; C8B7;C8B7;110C 116B 11B6;C8B7;110C 116B 11B6; C8B8;C8B8;110C 116B 11B7;C8B8;110C 116B 11B7; C8B9;C8B9;110C 116B 11B8;C8B9;110C 116B 11B8; C8BA;C8BA;110C 116B 11B9;C8BA;110C 116B 11B9; C8BB;C8BB;110C 116B 11BA;C8BB;110C 116B 11BA; C8BC;C8BC;110C 116B 11BB;C8BC;110C 116B 11BB; C8BD;C8BD;110C 116B 11BC;C8BD;110C 116B 11BC; C8BE;C8BE;110C 116B 11BD;C8BE;110C 116B 11BD; C8BF;C8BF;110C 116B 11BE;C8BF;110C 116B 11BE; C8C0;C8C0;110C 116B 11BF;C8C0;110C 116B 11BF; C8C1;C8C1;110C 116B 11C0;C8C1;110C 116B 11C0; C8C2;C8C2;110C 116B 11C1;C8C2;110C 116B 11C1; C8C3;C8C3;110C 116B 11C2;C8C3;110C 116B 11C2; C8C4;C8C4;110C 116C;C8C4;110C 116C; C8C5;C8C5;110C 116C 11A8;C8C5;110C 116C 11A8; C8C6;C8C6;110C 116C 11A9;C8C6;110C 116C 11A9; C8C7;C8C7;110C 116C 11AA;C8C7;110C 116C 11AA; C8C8;C8C8;110C 116C 11AB;C8C8;110C 116C 11AB; C8C9;C8C9;110C 116C 11AC;C8C9;110C 116C 11AC; C8CA;C8CA;110C 116C 11AD;C8CA;110C 116C 11AD; C8CB;C8CB;110C 116C 11AE;C8CB;110C 116C 11AE; C8CC;C8CC;110C 116C 11AF;C8CC;110C 116C 11AF; C8CD;C8CD;110C 116C 11B0;C8CD;110C 116C 11B0; C8CE;C8CE;110C 116C 11B1;C8CE;110C 116C 11B1; C8CF;C8CF;110C 116C 11B2;C8CF;110C 116C 11B2; C8D0;C8D0;110C 116C 11B3;C8D0;110C 116C 11B3; C8D1;C8D1;110C 116C 11B4;C8D1;110C 116C 11B4; C8D2;C8D2;110C 116C 11B5;C8D2;110C 116C 11B5; C8D3;C8D3;110C 116C 11B6;C8D3;110C 116C 11B6; C8D4;C8D4;110C 116C 11B7;C8D4;110C 116C 11B7; C8D5;C8D5;110C 116C 11B8;C8D5;110C 116C 11B8; C8D6;C8D6;110C 116C 11B9;C8D6;110C 116C 11B9; C8D7;C8D7;110C 116C 11BA;C8D7;110C 116C 11BA; C8D8;C8D8;110C 116C 11BB;C8D8;110C 116C 11BB; C8D9;C8D9;110C 116C 11BC;C8D9;110C 116C 11BC; C8DA;C8DA;110C 116C 11BD;C8DA;110C 116C 11BD; C8DB;C8DB;110C 116C 11BE;C8DB;110C 116C 11BE; C8DC;C8DC;110C 116C 11BF;C8DC;110C 116C 11BF; C8DD;C8DD;110C 116C 11C0;C8DD;110C 116C 11C0; C8DE;C8DE;110C 116C 11C1;C8DE;110C 116C 11C1; C8DF;C8DF;110C 116C 11C2;C8DF;110C 116C 11C2; C8E0;C8E0;110C 116D;C8E0;110C 116D; C8E1;C8E1;110C 116D 11A8;C8E1;110C 116D 11A8; C8E2;C8E2;110C 116D 11A9;C8E2;110C 116D 11A9; C8E3;C8E3;110C 116D 11AA;C8E3;110C 116D 11AA; C8E4;C8E4;110C 116D 11AB;C8E4;110C 116D 11AB; C8E5;C8E5;110C 116D 11AC;C8E5;110C 116D 11AC; C8E6;C8E6;110C 116D 11AD;C8E6;110C 116D 11AD; C8E7;C8E7;110C 116D 11AE;C8E7;110C 116D 11AE; C8E8;C8E8;110C 116D 11AF;C8E8;110C 116D 11AF; C8E9;C8E9;110C 116D 11B0;C8E9;110C 116D 11B0; C8EA;C8EA;110C 116D 11B1;C8EA;110C 116D 11B1; C8EB;C8EB;110C 116D 11B2;C8EB;110C 116D 11B2; C8EC;C8EC;110C 116D 11B3;C8EC;110C 116D 11B3; C8ED;C8ED;110C 116D 11B4;C8ED;110C 116D 11B4; C8EE;C8EE;110C 116D 11B5;C8EE;110C 116D 11B5; C8EF;C8EF;110C 116D 11B6;C8EF;110C 116D 11B6; C8F0;C8F0;110C 116D 11B7;C8F0;110C 116D 11B7; C8F1;C8F1;110C 116D 11B8;C8F1;110C 116D 11B8; C8F2;C8F2;110C 116D 11B9;C8F2;110C 116D 11B9; C8F3;C8F3;110C 116D 11BA;C8F3;110C 116D 11BA; C8F4;C8F4;110C 116D 11BB;C8F4;110C 116D 11BB; C8F5;C8F5;110C 116D 11BC;C8F5;110C 116D 11BC; C8F6;C8F6;110C 116D 11BD;C8F6;110C 116D 11BD; C8F7;C8F7;110C 116D 11BE;C8F7;110C 116D 11BE; C8F8;C8F8;110C 116D 11BF;C8F8;110C 116D 11BF; C8F9;C8F9;110C 116D 11C0;C8F9;110C 116D 11C0; C8FA;C8FA;110C 116D 11C1;C8FA;110C 116D 11C1; C8FB;C8FB;110C 116D 11C2;C8FB;110C 116D 11C2; C8FC;C8FC;110C 116E;C8FC;110C 116E; C8FD;C8FD;110C 116E 11A8;C8FD;110C 116E 11A8; C8FE;C8FE;110C 116E 11A9;C8FE;110C 116E 11A9; C8FF;C8FF;110C 116E 11AA;C8FF;110C 116E 11AA; C900;C900;110C 116E 11AB;C900;110C 116E 11AB; C901;C901;110C 116E 11AC;C901;110C 116E 11AC; C902;C902;110C 116E 11AD;C902;110C 116E 11AD; C903;C903;110C 116E 11AE;C903;110C 116E 11AE; C904;C904;110C 116E 11AF;C904;110C 116E 11AF; C905;C905;110C 116E 11B0;C905;110C 116E 11B0; C906;C906;110C 116E 11B1;C906;110C 116E 11B1; C907;C907;110C 116E 11B2;C907;110C 116E 11B2; C908;C908;110C 116E 11B3;C908;110C 116E 11B3; C909;C909;110C 116E 11B4;C909;110C 116E 11B4; C90A;C90A;110C 116E 11B5;C90A;110C 116E 11B5; C90B;C90B;110C 116E 11B6;C90B;110C 116E 11B6; C90C;C90C;110C 116E 11B7;C90C;110C 116E 11B7; C90D;C90D;110C 116E 11B8;C90D;110C 116E 11B8; C90E;C90E;110C 116E 11B9;C90E;110C 116E 11B9; C90F;C90F;110C 116E 11BA;C90F;110C 116E 11BA; C910;C910;110C 116E 11BB;C910;110C 116E 11BB; C911;C911;110C 116E 11BC;C911;110C 116E 11BC; C912;C912;110C 116E 11BD;C912;110C 116E 11BD; C913;C913;110C 116E 11BE;C913;110C 116E 11BE; C914;C914;110C 116E 11BF;C914;110C 116E 11BF; C915;C915;110C 116E 11C0;C915;110C 116E 11C0; C916;C916;110C 116E 11C1;C916;110C 116E 11C1; C917;C917;110C 116E 11C2;C917;110C 116E 11C2; C918;C918;110C 116F;C918;110C 116F; C919;C919;110C 116F 11A8;C919;110C 116F 11A8; C91A;C91A;110C 116F 11A9;C91A;110C 116F 11A9; C91B;C91B;110C 116F 11AA;C91B;110C 116F 11AA; C91C;C91C;110C 116F 11AB;C91C;110C 116F 11AB; C91D;C91D;110C 116F 11AC;C91D;110C 116F 11AC; C91E;C91E;110C 116F 11AD;C91E;110C 116F 11AD; C91F;C91F;110C 116F 11AE;C91F;110C 116F 11AE; C920;C920;110C 116F 11AF;C920;110C 116F 11AF; C921;C921;110C 116F 11B0;C921;110C 116F 11B0; C922;C922;110C 116F 11B1;C922;110C 116F 11B1; C923;C923;110C 116F 11B2;C923;110C 116F 11B2; C924;C924;110C 116F 11B3;C924;110C 116F 11B3; C925;C925;110C 116F 11B4;C925;110C 116F 11B4; C926;C926;110C 116F 11B5;C926;110C 116F 11B5; C927;C927;110C 116F 11B6;C927;110C 116F 11B6; C928;C928;110C 116F 11B7;C928;110C 116F 11B7; C929;C929;110C 116F 11B8;C929;110C 116F 11B8; C92A;C92A;110C 116F 11B9;C92A;110C 116F 11B9; C92B;C92B;110C 116F 11BA;C92B;110C 116F 11BA; C92C;C92C;110C 116F 11BB;C92C;110C 116F 11BB; C92D;C92D;110C 116F 11BC;C92D;110C 116F 11BC; C92E;C92E;110C 116F 11BD;C92E;110C 116F 11BD; C92F;C92F;110C 116F 11BE;C92F;110C 116F 11BE; C930;C930;110C 116F 11BF;C930;110C 116F 11BF; C931;C931;110C 116F 11C0;C931;110C 116F 11C0; C932;C932;110C 116F 11C1;C932;110C 116F 11C1; C933;C933;110C 116F 11C2;C933;110C 116F 11C2; C934;C934;110C 1170;C934;110C 1170; C935;C935;110C 1170 11A8;C935;110C 1170 11A8; C936;C936;110C 1170 11A9;C936;110C 1170 11A9; C937;C937;110C 1170 11AA;C937;110C 1170 11AA; C938;C938;110C 1170 11AB;C938;110C 1170 11AB; C939;C939;110C 1170 11AC;C939;110C 1170 11AC; C93A;C93A;110C 1170 11AD;C93A;110C 1170 11AD; C93B;C93B;110C 1170 11AE;C93B;110C 1170 11AE; C93C;C93C;110C 1170 11AF;C93C;110C 1170 11AF; C93D;C93D;110C 1170 11B0;C93D;110C 1170 11B0; C93E;C93E;110C 1170 11B1;C93E;110C 1170 11B1; C93F;C93F;110C 1170 11B2;C93F;110C 1170 11B2; C940;C940;110C 1170 11B3;C940;110C 1170 11B3; C941;C941;110C 1170 11B4;C941;110C 1170 11B4; C942;C942;110C 1170 11B5;C942;110C 1170 11B5; C943;C943;110C 1170 11B6;C943;110C 1170 11B6; C944;C944;110C 1170 11B7;C944;110C 1170 11B7; C945;C945;110C 1170 11B8;C945;110C 1170 11B8; C946;C946;110C 1170 11B9;C946;110C 1170 11B9; C947;C947;110C 1170 11BA;C947;110C 1170 11BA; C948;C948;110C 1170 11BB;C948;110C 1170 11BB; C949;C949;110C 1170 11BC;C949;110C 1170 11BC; C94A;C94A;110C 1170 11BD;C94A;110C 1170 11BD; C94B;C94B;110C 1170 11BE;C94B;110C 1170 11BE; C94C;C94C;110C 1170 11BF;C94C;110C 1170 11BF; C94D;C94D;110C 1170 11C0;C94D;110C 1170 11C0; C94E;C94E;110C 1170 11C1;C94E;110C 1170 11C1; C94F;C94F;110C 1170 11C2;C94F;110C 1170 11C2; C950;C950;110C 1171;C950;110C 1171; C951;C951;110C 1171 11A8;C951;110C 1171 11A8; C952;C952;110C 1171 11A9;C952;110C 1171 11A9; C953;C953;110C 1171 11AA;C953;110C 1171 11AA; C954;C954;110C 1171 11AB;C954;110C 1171 11AB; C955;C955;110C 1171 11AC;C955;110C 1171 11AC; C956;C956;110C 1171 11AD;C956;110C 1171 11AD; C957;C957;110C 1171 11AE;C957;110C 1171 11AE; C958;C958;110C 1171 11AF;C958;110C 1171 11AF; C959;C959;110C 1171 11B0;C959;110C 1171 11B0; C95A;C95A;110C 1171 11B1;C95A;110C 1171 11B1; C95B;C95B;110C 1171 11B2;C95B;110C 1171 11B2; C95C;C95C;110C 1171 11B3;C95C;110C 1171 11B3; C95D;C95D;110C 1171 11B4;C95D;110C 1171 11B4; C95E;C95E;110C 1171 11B5;C95E;110C 1171 11B5; C95F;C95F;110C 1171 11B6;C95F;110C 1171 11B6; C960;C960;110C 1171 11B7;C960;110C 1171 11B7; C961;C961;110C 1171 11B8;C961;110C 1171 11B8; C962;C962;110C 1171 11B9;C962;110C 1171 11B9; C963;C963;110C 1171 11BA;C963;110C 1171 11BA; C964;C964;110C 1171 11BB;C964;110C 1171 11BB; C965;C965;110C 1171 11BC;C965;110C 1171 11BC; C966;C966;110C 1171 11BD;C966;110C 1171 11BD; C967;C967;110C 1171 11BE;C967;110C 1171 11BE; C968;C968;110C 1171 11BF;C968;110C 1171 11BF; C969;C969;110C 1171 11C0;C969;110C 1171 11C0; C96A;C96A;110C 1171 11C1;C96A;110C 1171 11C1; C96B;C96B;110C 1171 11C2;C96B;110C 1171 11C2; C96C;C96C;110C 1172;C96C;110C 1172; C96D;C96D;110C 1172 11A8;C96D;110C 1172 11A8; C96E;C96E;110C 1172 11A9;C96E;110C 1172 11A9; C96F;C96F;110C 1172 11AA;C96F;110C 1172 11AA; C970;C970;110C 1172 11AB;C970;110C 1172 11AB; C971;C971;110C 1172 11AC;C971;110C 1172 11AC; C972;C972;110C 1172 11AD;C972;110C 1172 11AD; C973;C973;110C 1172 11AE;C973;110C 1172 11AE; C974;C974;110C 1172 11AF;C974;110C 1172 11AF; C975;C975;110C 1172 11B0;C975;110C 1172 11B0; C976;C976;110C 1172 11B1;C976;110C 1172 11B1; C977;C977;110C 1172 11B2;C977;110C 1172 11B2; C978;C978;110C 1172 11B3;C978;110C 1172 11B3; C979;C979;110C 1172 11B4;C979;110C 1172 11B4; C97A;C97A;110C 1172 11B5;C97A;110C 1172 11B5; C97B;C97B;110C 1172 11B6;C97B;110C 1172 11B6; C97C;C97C;110C 1172 11B7;C97C;110C 1172 11B7; C97D;C97D;110C 1172 11B8;C97D;110C 1172 11B8; C97E;C97E;110C 1172 11B9;C97E;110C 1172 11B9; C97F;C97F;110C 1172 11BA;C97F;110C 1172 11BA; C980;C980;110C 1172 11BB;C980;110C 1172 11BB; C981;C981;110C 1172 11BC;C981;110C 1172 11BC; C982;C982;110C 1172 11BD;C982;110C 1172 11BD; C983;C983;110C 1172 11BE;C983;110C 1172 11BE; C984;C984;110C 1172 11BF;C984;110C 1172 11BF; C985;C985;110C 1172 11C0;C985;110C 1172 11C0; C986;C986;110C 1172 11C1;C986;110C 1172 11C1; C987;C987;110C 1172 11C2;C987;110C 1172 11C2; C988;C988;110C 1173;C988;110C 1173; C989;C989;110C 1173 11A8;C989;110C 1173 11A8; C98A;C98A;110C 1173 11A9;C98A;110C 1173 11A9; C98B;C98B;110C 1173 11AA;C98B;110C 1173 11AA; C98C;C98C;110C 1173 11AB;C98C;110C 1173 11AB; C98D;C98D;110C 1173 11AC;C98D;110C 1173 11AC; C98E;C98E;110C 1173 11AD;C98E;110C 1173 11AD; C98F;C98F;110C 1173 11AE;C98F;110C 1173 11AE; C990;C990;110C 1173 11AF;C990;110C 1173 11AF; C991;C991;110C 1173 11B0;C991;110C 1173 11B0; C992;C992;110C 1173 11B1;C992;110C 1173 11B1; C993;C993;110C 1173 11B2;C993;110C 1173 11B2; C994;C994;110C 1173 11B3;C994;110C 1173 11B3; C995;C995;110C 1173 11B4;C995;110C 1173 11B4; C996;C996;110C 1173 11B5;C996;110C 1173 11B5; C997;C997;110C 1173 11B6;C997;110C 1173 11B6; C998;C998;110C 1173 11B7;C998;110C 1173 11B7; C999;C999;110C 1173 11B8;C999;110C 1173 11B8; C99A;C99A;110C 1173 11B9;C99A;110C 1173 11B9; C99B;C99B;110C 1173 11BA;C99B;110C 1173 11BA; C99C;C99C;110C 1173 11BB;C99C;110C 1173 11BB; C99D;C99D;110C 1173 11BC;C99D;110C 1173 11BC; C99E;C99E;110C 1173 11BD;C99E;110C 1173 11BD; C99F;C99F;110C 1173 11BE;C99F;110C 1173 11BE; C9A0;C9A0;110C 1173 11BF;C9A0;110C 1173 11BF; C9A1;C9A1;110C 1173 11C0;C9A1;110C 1173 11C0; C9A2;C9A2;110C 1173 11C1;C9A2;110C 1173 11C1; C9A3;C9A3;110C 1173 11C2;C9A3;110C 1173 11C2; C9A4;C9A4;110C 1174;C9A4;110C 1174; C9A5;C9A5;110C 1174 11A8;C9A5;110C 1174 11A8; C9A6;C9A6;110C 1174 11A9;C9A6;110C 1174 11A9; C9A7;C9A7;110C 1174 11AA;C9A7;110C 1174 11AA; C9A8;C9A8;110C 1174 11AB;C9A8;110C 1174 11AB; C9A9;C9A9;110C 1174 11AC;C9A9;110C 1174 11AC; C9AA;C9AA;110C 1174 11AD;C9AA;110C 1174 11AD; C9AB;C9AB;110C 1174 11AE;C9AB;110C 1174 11AE; C9AC;C9AC;110C 1174 11AF;C9AC;110C 1174 11AF; C9AD;C9AD;110C 1174 11B0;C9AD;110C 1174 11B0; C9AE;C9AE;110C 1174 11B1;C9AE;110C 1174 11B1; C9AF;C9AF;110C 1174 11B2;C9AF;110C 1174 11B2; C9B0;C9B0;110C 1174 11B3;C9B0;110C 1174 11B3; C9B1;C9B1;110C 1174 11B4;C9B1;110C 1174 11B4; C9B2;C9B2;110C 1174 11B5;C9B2;110C 1174 11B5; C9B3;C9B3;110C 1174 11B6;C9B3;110C 1174 11B6; C9B4;C9B4;110C 1174 11B7;C9B4;110C 1174 11B7; C9B5;C9B5;110C 1174 11B8;C9B5;110C 1174 11B8; C9B6;C9B6;110C 1174 11B9;C9B6;110C 1174 11B9; C9B7;C9B7;110C 1174 11BA;C9B7;110C 1174 11BA; C9B8;C9B8;110C 1174 11BB;C9B8;110C 1174 11BB; C9B9;C9B9;110C 1174 11BC;C9B9;110C 1174 11BC; C9BA;C9BA;110C 1174 11BD;C9BA;110C 1174 11BD; C9BB;C9BB;110C 1174 11BE;C9BB;110C 1174 11BE; C9BC;C9BC;110C 1174 11BF;C9BC;110C 1174 11BF; C9BD;C9BD;110C 1174 11C0;C9BD;110C 1174 11C0; C9BE;C9BE;110C 1174 11C1;C9BE;110C 1174 11C1; C9BF;C9BF;110C 1174 11C2;C9BF;110C 1174 11C2; C9C0;C9C0;110C 1175;C9C0;110C 1175; C9C1;C9C1;110C 1175 11A8;C9C1;110C 1175 11A8; C9C2;C9C2;110C 1175 11A9;C9C2;110C 1175 11A9; C9C3;C9C3;110C 1175 11AA;C9C3;110C 1175 11AA; C9C4;C9C4;110C 1175 11AB;C9C4;110C 1175 11AB; C9C5;C9C5;110C 1175 11AC;C9C5;110C 1175 11AC; C9C6;C9C6;110C 1175 11AD;C9C6;110C 1175 11AD; C9C7;C9C7;110C 1175 11AE;C9C7;110C 1175 11AE; C9C8;C9C8;110C 1175 11AF;C9C8;110C 1175 11AF; C9C9;C9C9;110C 1175 11B0;C9C9;110C 1175 11B0; C9CA;C9CA;110C 1175 11B1;C9CA;110C 1175 11B1; C9CB;C9CB;110C 1175 11B2;C9CB;110C 1175 11B2; C9CC;C9CC;110C 1175 11B3;C9CC;110C 1175 11B3; C9CD;C9CD;110C 1175 11B4;C9CD;110C 1175 11B4; C9CE;C9CE;110C 1175 11B5;C9CE;110C 1175 11B5; C9CF;C9CF;110C 1175 11B6;C9CF;110C 1175 11B6; C9D0;C9D0;110C 1175 11B7;C9D0;110C 1175 11B7; C9D1;C9D1;110C 1175 11B8;C9D1;110C 1175 11B8; C9D2;C9D2;110C 1175 11B9;C9D2;110C 1175 11B9; C9D3;C9D3;110C 1175 11BA;C9D3;110C 1175 11BA; C9D4;C9D4;110C 1175 11BB;C9D4;110C 1175 11BB; C9D5;C9D5;110C 1175 11BC;C9D5;110C 1175 11BC; C9D6;C9D6;110C 1175 11BD;C9D6;110C 1175 11BD; C9D7;C9D7;110C 1175 11BE;C9D7;110C 1175 11BE; C9D8;C9D8;110C 1175 11BF;C9D8;110C 1175 11BF; C9D9;C9D9;110C 1175 11C0;C9D9;110C 1175 11C0; C9DA;C9DA;110C 1175 11C1;C9DA;110C 1175 11C1; C9DB;C9DB;110C 1175 11C2;C9DB;110C 1175 11C2; C9DC;C9DC;110D 1161;C9DC;110D 1161; C9DD;C9DD;110D 1161 11A8;C9DD;110D 1161 11A8; C9DE;C9DE;110D 1161 11A9;C9DE;110D 1161 11A9; C9DF;C9DF;110D 1161 11AA;C9DF;110D 1161 11AA; C9E0;C9E0;110D 1161 11AB;C9E0;110D 1161 11AB; C9E1;C9E1;110D 1161 11AC;C9E1;110D 1161 11AC; C9E2;C9E2;110D 1161 11AD;C9E2;110D 1161 11AD; C9E3;C9E3;110D 1161 11AE;C9E3;110D 1161 11AE; C9E4;C9E4;110D 1161 11AF;C9E4;110D 1161 11AF; C9E5;C9E5;110D 1161 11B0;C9E5;110D 1161 11B0; C9E6;C9E6;110D 1161 11B1;C9E6;110D 1161 11B1; C9E7;C9E7;110D 1161 11B2;C9E7;110D 1161 11B2; C9E8;C9E8;110D 1161 11B3;C9E8;110D 1161 11B3; C9E9;C9E9;110D 1161 11B4;C9E9;110D 1161 11B4; C9EA;C9EA;110D 1161 11B5;C9EA;110D 1161 11B5; C9EB;C9EB;110D 1161 11B6;C9EB;110D 1161 11B6; C9EC;C9EC;110D 1161 11B7;C9EC;110D 1161 11B7; C9ED;C9ED;110D 1161 11B8;C9ED;110D 1161 11B8; C9EE;C9EE;110D 1161 11B9;C9EE;110D 1161 11B9; C9EF;C9EF;110D 1161 11BA;C9EF;110D 1161 11BA; C9F0;C9F0;110D 1161 11BB;C9F0;110D 1161 11BB; C9F1;C9F1;110D 1161 11BC;C9F1;110D 1161 11BC; C9F2;C9F2;110D 1161 11BD;C9F2;110D 1161 11BD; C9F3;C9F3;110D 1161 11BE;C9F3;110D 1161 11BE; C9F4;C9F4;110D 1161 11BF;C9F4;110D 1161 11BF; C9F5;C9F5;110D 1161 11C0;C9F5;110D 1161 11C0; C9F6;C9F6;110D 1161 11C1;C9F6;110D 1161 11C1; C9F7;C9F7;110D 1161 11C2;C9F7;110D 1161 11C2; C9F8;C9F8;110D 1162;C9F8;110D 1162; C9F9;C9F9;110D 1162 11A8;C9F9;110D 1162 11A8; C9FA;C9FA;110D 1162 11A9;C9FA;110D 1162 11A9; C9FB;C9FB;110D 1162 11AA;C9FB;110D 1162 11AA; C9FC;C9FC;110D 1162 11AB;C9FC;110D 1162 11AB; C9FD;C9FD;110D 1162 11AC;C9FD;110D 1162 11AC; C9FE;C9FE;110D 1162 11AD;C9FE;110D 1162 11AD; C9FF;C9FF;110D 1162 11AE;C9FF;110D 1162 11AE; CA00;CA00;110D 1162 11AF;CA00;110D 1162 11AF; CA01;CA01;110D 1162 11B0;CA01;110D 1162 11B0; CA02;CA02;110D 1162 11B1;CA02;110D 1162 11B1; CA03;CA03;110D 1162 11B2;CA03;110D 1162 11B2; CA04;CA04;110D 1162 11B3;CA04;110D 1162 11B3; CA05;CA05;110D 1162 11B4;CA05;110D 1162 11B4; CA06;CA06;110D 1162 11B5;CA06;110D 1162 11B5; CA07;CA07;110D 1162 11B6;CA07;110D 1162 11B6; CA08;CA08;110D 1162 11B7;CA08;110D 1162 11B7; CA09;CA09;110D 1162 11B8;CA09;110D 1162 11B8; CA0A;CA0A;110D 1162 11B9;CA0A;110D 1162 11B9; CA0B;CA0B;110D 1162 11BA;CA0B;110D 1162 11BA; CA0C;CA0C;110D 1162 11BB;CA0C;110D 1162 11BB; CA0D;CA0D;110D 1162 11BC;CA0D;110D 1162 11BC; CA0E;CA0E;110D 1162 11BD;CA0E;110D 1162 11BD; CA0F;CA0F;110D 1162 11BE;CA0F;110D 1162 11BE; CA10;CA10;110D 1162 11BF;CA10;110D 1162 11BF; CA11;CA11;110D 1162 11C0;CA11;110D 1162 11C0; CA12;CA12;110D 1162 11C1;CA12;110D 1162 11C1; CA13;CA13;110D 1162 11C2;CA13;110D 1162 11C2; CA14;CA14;110D 1163;CA14;110D 1163; CA15;CA15;110D 1163 11A8;CA15;110D 1163 11A8; CA16;CA16;110D 1163 11A9;CA16;110D 1163 11A9; CA17;CA17;110D 1163 11AA;CA17;110D 1163 11AA; CA18;CA18;110D 1163 11AB;CA18;110D 1163 11AB; CA19;CA19;110D 1163 11AC;CA19;110D 1163 11AC; CA1A;CA1A;110D 1163 11AD;CA1A;110D 1163 11AD; CA1B;CA1B;110D 1163 11AE;CA1B;110D 1163 11AE; CA1C;CA1C;110D 1163 11AF;CA1C;110D 1163 11AF; CA1D;CA1D;110D 1163 11B0;CA1D;110D 1163 11B0; CA1E;CA1E;110D 1163 11B1;CA1E;110D 1163 11B1; CA1F;CA1F;110D 1163 11B2;CA1F;110D 1163 11B2; CA20;CA20;110D 1163 11B3;CA20;110D 1163 11B3; CA21;CA21;110D 1163 11B4;CA21;110D 1163 11B4; CA22;CA22;110D 1163 11B5;CA22;110D 1163 11B5; CA23;CA23;110D 1163 11B6;CA23;110D 1163 11B6; CA24;CA24;110D 1163 11B7;CA24;110D 1163 11B7; CA25;CA25;110D 1163 11B8;CA25;110D 1163 11B8; CA26;CA26;110D 1163 11B9;CA26;110D 1163 11B9; CA27;CA27;110D 1163 11BA;CA27;110D 1163 11BA; CA28;CA28;110D 1163 11BB;CA28;110D 1163 11BB; CA29;CA29;110D 1163 11BC;CA29;110D 1163 11BC; CA2A;CA2A;110D 1163 11BD;CA2A;110D 1163 11BD; CA2B;CA2B;110D 1163 11BE;CA2B;110D 1163 11BE; CA2C;CA2C;110D 1163 11BF;CA2C;110D 1163 11BF; CA2D;CA2D;110D 1163 11C0;CA2D;110D 1163 11C0; CA2E;CA2E;110D 1163 11C1;CA2E;110D 1163 11C1; CA2F;CA2F;110D 1163 11C2;CA2F;110D 1163 11C2; CA30;CA30;110D 1164;CA30;110D 1164; CA31;CA31;110D 1164 11A8;CA31;110D 1164 11A8; CA32;CA32;110D 1164 11A9;CA32;110D 1164 11A9; CA33;CA33;110D 1164 11AA;CA33;110D 1164 11AA; CA34;CA34;110D 1164 11AB;CA34;110D 1164 11AB; CA35;CA35;110D 1164 11AC;CA35;110D 1164 11AC; CA36;CA36;110D 1164 11AD;CA36;110D 1164 11AD; CA37;CA37;110D 1164 11AE;CA37;110D 1164 11AE; CA38;CA38;110D 1164 11AF;CA38;110D 1164 11AF; CA39;CA39;110D 1164 11B0;CA39;110D 1164 11B0; CA3A;CA3A;110D 1164 11B1;CA3A;110D 1164 11B1; CA3B;CA3B;110D 1164 11B2;CA3B;110D 1164 11B2; CA3C;CA3C;110D 1164 11B3;CA3C;110D 1164 11B3; CA3D;CA3D;110D 1164 11B4;CA3D;110D 1164 11B4; CA3E;CA3E;110D 1164 11B5;CA3E;110D 1164 11B5; CA3F;CA3F;110D 1164 11B6;CA3F;110D 1164 11B6; CA40;CA40;110D 1164 11B7;CA40;110D 1164 11B7; CA41;CA41;110D 1164 11B8;CA41;110D 1164 11B8; CA42;CA42;110D 1164 11B9;CA42;110D 1164 11B9; CA43;CA43;110D 1164 11BA;CA43;110D 1164 11BA; CA44;CA44;110D 1164 11BB;CA44;110D 1164 11BB; CA45;CA45;110D 1164 11BC;CA45;110D 1164 11BC; CA46;CA46;110D 1164 11BD;CA46;110D 1164 11BD; CA47;CA47;110D 1164 11BE;CA47;110D 1164 11BE; CA48;CA48;110D 1164 11BF;CA48;110D 1164 11BF; CA49;CA49;110D 1164 11C0;CA49;110D 1164 11C0; CA4A;CA4A;110D 1164 11C1;CA4A;110D 1164 11C1; CA4B;CA4B;110D 1164 11C2;CA4B;110D 1164 11C2; CA4C;CA4C;110D 1165;CA4C;110D 1165; CA4D;CA4D;110D 1165 11A8;CA4D;110D 1165 11A8; CA4E;CA4E;110D 1165 11A9;CA4E;110D 1165 11A9; CA4F;CA4F;110D 1165 11AA;CA4F;110D 1165 11AA; CA50;CA50;110D 1165 11AB;CA50;110D 1165 11AB; CA51;CA51;110D 1165 11AC;CA51;110D 1165 11AC; CA52;CA52;110D 1165 11AD;CA52;110D 1165 11AD; CA53;CA53;110D 1165 11AE;CA53;110D 1165 11AE; CA54;CA54;110D 1165 11AF;CA54;110D 1165 11AF; CA55;CA55;110D 1165 11B0;CA55;110D 1165 11B0; CA56;CA56;110D 1165 11B1;CA56;110D 1165 11B1; CA57;CA57;110D 1165 11B2;CA57;110D 1165 11B2; CA58;CA58;110D 1165 11B3;CA58;110D 1165 11B3; CA59;CA59;110D 1165 11B4;CA59;110D 1165 11B4; CA5A;CA5A;110D 1165 11B5;CA5A;110D 1165 11B5; CA5B;CA5B;110D 1165 11B6;CA5B;110D 1165 11B6; CA5C;CA5C;110D 1165 11B7;CA5C;110D 1165 11B7; CA5D;CA5D;110D 1165 11B8;CA5D;110D 1165 11B8; CA5E;CA5E;110D 1165 11B9;CA5E;110D 1165 11B9; CA5F;CA5F;110D 1165 11BA;CA5F;110D 1165 11BA; CA60;CA60;110D 1165 11BB;CA60;110D 1165 11BB; CA61;CA61;110D 1165 11BC;CA61;110D 1165 11BC; CA62;CA62;110D 1165 11BD;CA62;110D 1165 11BD; CA63;CA63;110D 1165 11BE;CA63;110D 1165 11BE; CA64;CA64;110D 1165 11BF;CA64;110D 1165 11BF; CA65;CA65;110D 1165 11C0;CA65;110D 1165 11C0; CA66;CA66;110D 1165 11C1;CA66;110D 1165 11C1; CA67;CA67;110D 1165 11C2;CA67;110D 1165 11C2; CA68;CA68;110D 1166;CA68;110D 1166; CA69;CA69;110D 1166 11A8;CA69;110D 1166 11A8; CA6A;CA6A;110D 1166 11A9;CA6A;110D 1166 11A9; CA6B;CA6B;110D 1166 11AA;CA6B;110D 1166 11AA; CA6C;CA6C;110D 1166 11AB;CA6C;110D 1166 11AB; CA6D;CA6D;110D 1166 11AC;CA6D;110D 1166 11AC; CA6E;CA6E;110D 1166 11AD;CA6E;110D 1166 11AD; CA6F;CA6F;110D 1166 11AE;CA6F;110D 1166 11AE; CA70;CA70;110D 1166 11AF;CA70;110D 1166 11AF; CA71;CA71;110D 1166 11B0;CA71;110D 1166 11B0; CA72;CA72;110D 1166 11B1;CA72;110D 1166 11B1; CA73;CA73;110D 1166 11B2;CA73;110D 1166 11B2; CA74;CA74;110D 1166 11B3;CA74;110D 1166 11B3; CA75;CA75;110D 1166 11B4;CA75;110D 1166 11B4; CA76;CA76;110D 1166 11B5;CA76;110D 1166 11B5; CA77;CA77;110D 1166 11B6;CA77;110D 1166 11B6; CA78;CA78;110D 1166 11B7;CA78;110D 1166 11B7; CA79;CA79;110D 1166 11B8;CA79;110D 1166 11B8; CA7A;CA7A;110D 1166 11B9;CA7A;110D 1166 11B9; CA7B;CA7B;110D 1166 11BA;CA7B;110D 1166 11BA; CA7C;CA7C;110D 1166 11BB;CA7C;110D 1166 11BB; CA7D;CA7D;110D 1166 11BC;CA7D;110D 1166 11BC; CA7E;CA7E;110D 1166 11BD;CA7E;110D 1166 11BD; CA7F;CA7F;110D 1166 11BE;CA7F;110D 1166 11BE; CA80;CA80;110D 1166 11BF;CA80;110D 1166 11BF; CA81;CA81;110D 1166 11C0;CA81;110D 1166 11C0; CA82;CA82;110D 1166 11C1;CA82;110D 1166 11C1; CA83;CA83;110D 1166 11C2;CA83;110D 1166 11C2; CA84;CA84;110D 1167;CA84;110D 1167; CA85;CA85;110D 1167 11A8;CA85;110D 1167 11A8; CA86;CA86;110D 1167 11A9;CA86;110D 1167 11A9; CA87;CA87;110D 1167 11AA;CA87;110D 1167 11AA; CA88;CA88;110D 1167 11AB;CA88;110D 1167 11AB; CA89;CA89;110D 1167 11AC;CA89;110D 1167 11AC; CA8A;CA8A;110D 1167 11AD;CA8A;110D 1167 11AD; CA8B;CA8B;110D 1167 11AE;CA8B;110D 1167 11AE; CA8C;CA8C;110D 1167 11AF;CA8C;110D 1167 11AF; CA8D;CA8D;110D 1167 11B0;CA8D;110D 1167 11B0; CA8E;CA8E;110D 1167 11B1;CA8E;110D 1167 11B1; CA8F;CA8F;110D 1167 11B2;CA8F;110D 1167 11B2; CA90;CA90;110D 1167 11B3;CA90;110D 1167 11B3; CA91;CA91;110D 1167 11B4;CA91;110D 1167 11B4; CA92;CA92;110D 1167 11B5;CA92;110D 1167 11B5; CA93;CA93;110D 1167 11B6;CA93;110D 1167 11B6; CA94;CA94;110D 1167 11B7;CA94;110D 1167 11B7; CA95;CA95;110D 1167 11B8;CA95;110D 1167 11B8; CA96;CA96;110D 1167 11B9;CA96;110D 1167 11B9; CA97;CA97;110D 1167 11BA;CA97;110D 1167 11BA; CA98;CA98;110D 1167 11BB;CA98;110D 1167 11BB; CA99;CA99;110D 1167 11BC;CA99;110D 1167 11BC; CA9A;CA9A;110D 1167 11BD;CA9A;110D 1167 11BD; CA9B;CA9B;110D 1167 11BE;CA9B;110D 1167 11BE; CA9C;CA9C;110D 1167 11BF;CA9C;110D 1167 11BF; CA9D;CA9D;110D 1167 11C0;CA9D;110D 1167 11C0; CA9E;CA9E;110D 1167 11C1;CA9E;110D 1167 11C1; CA9F;CA9F;110D 1167 11C2;CA9F;110D 1167 11C2; CAA0;CAA0;110D 1168;CAA0;110D 1168; CAA1;CAA1;110D 1168 11A8;CAA1;110D 1168 11A8; CAA2;CAA2;110D 1168 11A9;CAA2;110D 1168 11A9; CAA3;CAA3;110D 1168 11AA;CAA3;110D 1168 11AA; CAA4;CAA4;110D 1168 11AB;CAA4;110D 1168 11AB; CAA5;CAA5;110D 1168 11AC;CAA5;110D 1168 11AC; CAA6;CAA6;110D 1168 11AD;CAA6;110D 1168 11AD; CAA7;CAA7;110D 1168 11AE;CAA7;110D 1168 11AE; CAA8;CAA8;110D 1168 11AF;CAA8;110D 1168 11AF; CAA9;CAA9;110D 1168 11B0;CAA9;110D 1168 11B0; CAAA;CAAA;110D 1168 11B1;CAAA;110D 1168 11B1; CAAB;CAAB;110D 1168 11B2;CAAB;110D 1168 11B2; CAAC;CAAC;110D 1168 11B3;CAAC;110D 1168 11B3; CAAD;CAAD;110D 1168 11B4;CAAD;110D 1168 11B4; CAAE;CAAE;110D 1168 11B5;CAAE;110D 1168 11B5; CAAF;CAAF;110D 1168 11B6;CAAF;110D 1168 11B6; CAB0;CAB0;110D 1168 11B7;CAB0;110D 1168 11B7; CAB1;CAB1;110D 1168 11B8;CAB1;110D 1168 11B8; CAB2;CAB2;110D 1168 11B9;CAB2;110D 1168 11B9; CAB3;CAB3;110D 1168 11BA;CAB3;110D 1168 11BA; CAB4;CAB4;110D 1168 11BB;CAB4;110D 1168 11BB; CAB5;CAB5;110D 1168 11BC;CAB5;110D 1168 11BC; CAB6;CAB6;110D 1168 11BD;CAB6;110D 1168 11BD; CAB7;CAB7;110D 1168 11BE;CAB7;110D 1168 11BE; CAB8;CAB8;110D 1168 11BF;CAB8;110D 1168 11BF; CAB9;CAB9;110D 1168 11C0;CAB9;110D 1168 11C0; CABA;CABA;110D 1168 11C1;CABA;110D 1168 11C1; CABB;CABB;110D 1168 11C2;CABB;110D 1168 11C2; CABC;CABC;110D 1169;CABC;110D 1169; CABD;CABD;110D 1169 11A8;CABD;110D 1169 11A8; CABE;CABE;110D 1169 11A9;CABE;110D 1169 11A9; CABF;CABF;110D 1169 11AA;CABF;110D 1169 11AA; CAC0;CAC0;110D 1169 11AB;CAC0;110D 1169 11AB; CAC1;CAC1;110D 1169 11AC;CAC1;110D 1169 11AC; CAC2;CAC2;110D 1169 11AD;CAC2;110D 1169 11AD; CAC3;CAC3;110D 1169 11AE;CAC3;110D 1169 11AE; CAC4;CAC4;110D 1169 11AF;CAC4;110D 1169 11AF; CAC5;CAC5;110D 1169 11B0;CAC5;110D 1169 11B0; CAC6;CAC6;110D 1169 11B1;CAC6;110D 1169 11B1; CAC7;CAC7;110D 1169 11B2;CAC7;110D 1169 11B2; CAC8;CAC8;110D 1169 11B3;CAC8;110D 1169 11B3; CAC9;CAC9;110D 1169 11B4;CAC9;110D 1169 11B4; CACA;CACA;110D 1169 11B5;CACA;110D 1169 11B5; CACB;CACB;110D 1169 11B6;CACB;110D 1169 11B6; CACC;CACC;110D 1169 11B7;CACC;110D 1169 11B7; CACD;CACD;110D 1169 11B8;CACD;110D 1169 11B8; CACE;CACE;110D 1169 11B9;CACE;110D 1169 11B9; CACF;CACF;110D 1169 11BA;CACF;110D 1169 11BA; CAD0;CAD0;110D 1169 11BB;CAD0;110D 1169 11BB; CAD1;CAD1;110D 1169 11BC;CAD1;110D 1169 11BC; CAD2;CAD2;110D 1169 11BD;CAD2;110D 1169 11BD; CAD3;CAD3;110D 1169 11BE;CAD3;110D 1169 11BE; CAD4;CAD4;110D 1169 11BF;CAD4;110D 1169 11BF; CAD5;CAD5;110D 1169 11C0;CAD5;110D 1169 11C0; CAD6;CAD6;110D 1169 11C1;CAD6;110D 1169 11C1; CAD7;CAD7;110D 1169 11C2;CAD7;110D 1169 11C2; CAD8;CAD8;110D 116A;CAD8;110D 116A; CAD9;CAD9;110D 116A 11A8;CAD9;110D 116A 11A8; CADA;CADA;110D 116A 11A9;CADA;110D 116A 11A9; CADB;CADB;110D 116A 11AA;CADB;110D 116A 11AA; CADC;CADC;110D 116A 11AB;CADC;110D 116A 11AB; CADD;CADD;110D 116A 11AC;CADD;110D 116A 11AC; CADE;CADE;110D 116A 11AD;CADE;110D 116A 11AD; CADF;CADF;110D 116A 11AE;CADF;110D 116A 11AE; CAE0;CAE0;110D 116A 11AF;CAE0;110D 116A 11AF; CAE1;CAE1;110D 116A 11B0;CAE1;110D 116A 11B0; CAE2;CAE2;110D 116A 11B1;CAE2;110D 116A 11B1; CAE3;CAE3;110D 116A 11B2;CAE3;110D 116A 11B2; CAE4;CAE4;110D 116A 11B3;CAE4;110D 116A 11B3; CAE5;CAE5;110D 116A 11B4;CAE5;110D 116A 11B4; CAE6;CAE6;110D 116A 11B5;CAE6;110D 116A 11B5; CAE7;CAE7;110D 116A 11B6;CAE7;110D 116A 11B6; CAE8;CAE8;110D 116A 11B7;CAE8;110D 116A 11B7; CAE9;CAE9;110D 116A 11B8;CAE9;110D 116A 11B8; CAEA;CAEA;110D 116A 11B9;CAEA;110D 116A 11B9; CAEB;CAEB;110D 116A 11BA;CAEB;110D 116A 11BA; CAEC;CAEC;110D 116A 11BB;CAEC;110D 116A 11BB; CAED;CAED;110D 116A 11BC;CAED;110D 116A 11BC; CAEE;CAEE;110D 116A 11BD;CAEE;110D 116A 11BD; CAEF;CAEF;110D 116A 11BE;CAEF;110D 116A 11BE; CAF0;CAF0;110D 116A 11BF;CAF0;110D 116A 11BF; CAF1;CAF1;110D 116A 11C0;CAF1;110D 116A 11C0; CAF2;CAF2;110D 116A 11C1;CAF2;110D 116A 11C1; CAF3;CAF3;110D 116A 11C2;CAF3;110D 116A 11C2; CAF4;CAF4;110D 116B;CAF4;110D 116B; CAF5;CAF5;110D 116B 11A8;CAF5;110D 116B 11A8; CAF6;CAF6;110D 116B 11A9;CAF6;110D 116B 11A9; CAF7;CAF7;110D 116B 11AA;CAF7;110D 116B 11AA; CAF8;CAF8;110D 116B 11AB;CAF8;110D 116B 11AB; CAF9;CAF9;110D 116B 11AC;CAF9;110D 116B 11AC; CAFA;CAFA;110D 116B 11AD;CAFA;110D 116B 11AD; CAFB;CAFB;110D 116B 11AE;CAFB;110D 116B 11AE; CAFC;CAFC;110D 116B 11AF;CAFC;110D 116B 11AF; CAFD;CAFD;110D 116B 11B0;CAFD;110D 116B 11B0; CAFE;CAFE;110D 116B 11B1;CAFE;110D 116B 11B1; CAFF;CAFF;110D 116B 11B2;CAFF;110D 116B 11B2; CB00;CB00;110D 116B 11B3;CB00;110D 116B 11B3; CB01;CB01;110D 116B 11B4;CB01;110D 116B 11B4; CB02;CB02;110D 116B 11B5;CB02;110D 116B 11B5; CB03;CB03;110D 116B 11B6;CB03;110D 116B 11B6; CB04;CB04;110D 116B 11B7;CB04;110D 116B 11B7; CB05;CB05;110D 116B 11B8;CB05;110D 116B 11B8; CB06;CB06;110D 116B 11B9;CB06;110D 116B 11B9; CB07;CB07;110D 116B 11BA;CB07;110D 116B 11BA; CB08;CB08;110D 116B 11BB;CB08;110D 116B 11BB; CB09;CB09;110D 116B 11BC;CB09;110D 116B 11BC; CB0A;CB0A;110D 116B 11BD;CB0A;110D 116B 11BD; CB0B;CB0B;110D 116B 11BE;CB0B;110D 116B 11BE; CB0C;CB0C;110D 116B 11BF;CB0C;110D 116B 11BF; CB0D;CB0D;110D 116B 11C0;CB0D;110D 116B 11C0; CB0E;CB0E;110D 116B 11C1;CB0E;110D 116B 11C1; CB0F;CB0F;110D 116B 11C2;CB0F;110D 116B 11C2; CB10;CB10;110D 116C;CB10;110D 116C; CB11;CB11;110D 116C 11A8;CB11;110D 116C 11A8; CB12;CB12;110D 116C 11A9;CB12;110D 116C 11A9; CB13;CB13;110D 116C 11AA;CB13;110D 116C 11AA; CB14;CB14;110D 116C 11AB;CB14;110D 116C 11AB; CB15;CB15;110D 116C 11AC;CB15;110D 116C 11AC; CB16;CB16;110D 116C 11AD;CB16;110D 116C 11AD; CB17;CB17;110D 116C 11AE;CB17;110D 116C 11AE; CB18;CB18;110D 116C 11AF;CB18;110D 116C 11AF; CB19;CB19;110D 116C 11B0;CB19;110D 116C 11B0; CB1A;CB1A;110D 116C 11B1;CB1A;110D 116C 11B1; CB1B;CB1B;110D 116C 11B2;CB1B;110D 116C 11B2; CB1C;CB1C;110D 116C 11B3;CB1C;110D 116C 11B3; CB1D;CB1D;110D 116C 11B4;CB1D;110D 116C 11B4; CB1E;CB1E;110D 116C 11B5;CB1E;110D 116C 11B5; CB1F;CB1F;110D 116C 11B6;CB1F;110D 116C 11B6; CB20;CB20;110D 116C 11B7;CB20;110D 116C 11B7; CB21;CB21;110D 116C 11B8;CB21;110D 116C 11B8; CB22;CB22;110D 116C 11B9;CB22;110D 116C 11B9; CB23;CB23;110D 116C 11BA;CB23;110D 116C 11BA; CB24;CB24;110D 116C 11BB;CB24;110D 116C 11BB; CB25;CB25;110D 116C 11BC;CB25;110D 116C 11BC; CB26;CB26;110D 116C 11BD;CB26;110D 116C 11BD; CB27;CB27;110D 116C 11BE;CB27;110D 116C 11BE; CB28;CB28;110D 116C 11BF;CB28;110D 116C 11BF; CB29;CB29;110D 116C 11C0;CB29;110D 116C 11C0; CB2A;CB2A;110D 116C 11C1;CB2A;110D 116C 11C1; CB2B;CB2B;110D 116C 11C2;CB2B;110D 116C 11C2; CB2C;CB2C;110D 116D;CB2C;110D 116D; CB2D;CB2D;110D 116D 11A8;CB2D;110D 116D 11A8; CB2E;CB2E;110D 116D 11A9;CB2E;110D 116D 11A9; CB2F;CB2F;110D 116D 11AA;CB2F;110D 116D 11AA; CB30;CB30;110D 116D 11AB;CB30;110D 116D 11AB; CB31;CB31;110D 116D 11AC;CB31;110D 116D 11AC; CB32;CB32;110D 116D 11AD;CB32;110D 116D 11AD; CB33;CB33;110D 116D 11AE;CB33;110D 116D 11AE; CB34;CB34;110D 116D 11AF;CB34;110D 116D 11AF; CB35;CB35;110D 116D 11B0;CB35;110D 116D 11B0; CB36;CB36;110D 116D 11B1;CB36;110D 116D 11B1; CB37;CB37;110D 116D 11B2;CB37;110D 116D 11B2; CB38;CB38;110D 116D 11B3;CB38;110D 116D 11B3; CB39;CB39;110D 116D 11B4;CB39;110D 116D 11B4; CB3A;CB3A;110D 116D 11B5;CB3A;110D 116D 11B5; CB3B;CB3B;110D 116D 11B6;CB3B;110D 116D 11B6; CB3C;CB3C;110D 116D 11B7;CB3C;110D 116D 11B7; CB3D;CB3D;110D 116D 11B8;CB3D;110D 116D 11B8; CB3E;CB3E;110D 116D 11B9;CB3E;110D 116D 11B9; CB3F;CB3F;110D 116D 11BA;CB3F;110D 116D 11BA; CB40;CB40;110D 116D 11BB;CB40;110D 116D 11BB; CB41;CB41;110D 116D 11BC;CB41;110D 116D 11BC; CB42;CB42;110D 116D 11BD;CB42;110D 116D 11BD; CB43;CB43;110D 116D 11BE;CB43;110D 116D 11BE; CB44;CB44;110D 116D 11BF;CB44;110D 116D 11BF; CB45;CB45;110D 116D 11C0;CB45;110D 116D 11C0; CB46;CB46;110D 116D 11C1;CB46;110D 116D 11C1; CB47;CB47;110D 116D 11C2;CB47;110D 116D 11C2; CB48;CB48;110D 116E;CB48;110D 116E; CB49;CB49;110D 116E 11A8;CB49;110D 116E 11A8; CB4A;CB4A;110D 116E 11A9;CB4A;110D 116E 11A9; CB4B;CB4B;110D 116E 11AA;CB4B;110D 116E 11AA; CB4C;CB4C;110D 116E 11AB;CB4C;110D 116E 11AB; CB4D;CB4D;110D 116E 11AC;CB4D;110D 116E 11AC; CB4E;CB4E;110D 116E 11AD;CB4E;110D 116E 11AD; CB4F;CB4F;110D 116E 11AE;CB4F;110D 116E 11AE; CB50;CB50;110D 116E 11AF;CB50;110D 116E 11AF; CB51;CB51;110D 116E 11B0;CB51;110D 116E 11B0; CB52;CB52;110D 116E 11B1;CB52;110D 116E 11B1; CB53;CB53;110D 116E 11B2;CB53;110D 116E 11B2; CB54;CB54;110D 116E 11B3;CB54;110D 116E 11B3; CB55;CB55;110D 116E 11B4;CB55;110D 116E 11B4; CB56;CB56;110D 116E 11B5;CB56;110D 116E 11B5; CB57;CB57;110D 116E 11B6;CB57;110D 116E 11B6; CB58;CB58;110D 116E 11B7;CB58;110D 116E 11B7; CB59;CB59;110D 116E 11B8;CB59;110D 116E 11B8; CB5A;CB5A;110D 116E 11B9;CB5A;110D 116E 11B9; CB5B;CB5B;110D 116E 11BA;CB5B;110D 116E 11BA; CB5C;CB5C;110D 116E 11BB;CB5C;110D 116E 11BB; CB5D;CB5D;110D 116E 11BC;CB5D;110D 116E 11BC; CB5E;CB5E;110D 116E 11BD;CB5E;110D 116E 11BD; CB5F;CB5F;110D 116E 11BE;CB5F;110D 116E 11BE; CB60;CB60;110D 116E 11BF;CB60;110D 116E 11BF; CB61;CB61;110D 116E 11C0;CB61;110D 116E 11C0; CB62;CB62;110D 116E 11C1;CB62;110D 116E 11C1; CB63;CB63;110D 116E 11C2;CB63;110D 116E 11C2; CB64;CB64;110D 116F;CB64;110D 116F; CB65;CB65;110D 116F 11A8;CB65;110D 116F 11A8; CB66;CB66;110D 116F 11A9;CB66;110D 116F 11A9; CB67;CB67;110D 116F 11AA;CB67;110D 116F 11AA; CB68;CB68;110D 116F 11AB;CB68;110D 116F 11AB; CB69;CB69;110D 116F 11AC;CB69;110D 116F 11AC; CB6A;CB6A;110D 116F 11AD;CB6A;110D 116F 11AD; CB6B;CB6B;110D 116F 11AE;CB6B;110D 116F 11AE; CB6C;CB6C;110D 116F 11AF;CB6C;110D 116F 11AF; CB6D;CB6D;110D 116F 11B0;CB6D;110D 116F 11B0; CB6E;CB6E;110D 116F 11B1;CB6E;110D 116F 11B1; CB6F;CB6F;110D 116F 11B2;CB6F;110D 116F 11B2; CB70;CB70;110D 116F 11B3;CB70;110D 116F 11B3; CB71;CB71;110D 116F 11B4;CB71;110D 116F 11B4; CB72;CB72;110D 116F 11B5;CB72;110D 116F 11B5; CB73;CB73;110D 116F 11B6;CB73;110D 116F 11B6; CB74;CB74;110D 116F 11B7;CB74;110D 116F 11B7; CB75;CB75;110D 116F 11B8;CB75;110D 116F 11B8; CB76;CB76;110D 116F 11B9;CB76;110D 116F 11B9; CB77;CB77;110D 116F 11BA;CB77;110D 116F 11BA; CB78;CB78;110D 116F 11BB;CB78;110D 116F 11BB; CB79;CB79;110D 116F 11BC;CB79;110D 116F 11BC; CB7A;CB7A;110D 116F 11BD;CB7A;110D 116F 11BD; CB7B;CB7B;110D 116F 11BE;CB7B;110D 116F 11BE; CB7C;CB7C;110D 116F 11BF;CB7C;110D 116F 11BF; CB7D;CB7D;110D 116F 11C0;CB7D;110D 116F 11C0; CB7E;CB7E;110D 116F 11C1;CB7E;110D 116F 11C1; CB7F;CB7F;110D 116F 11C2;CB7F;110D 116F 11C2; CB80;CB80;110D 1170;CB80;110D 1170; CB81;CB81;110D 1170 11A8;CB81;110D 1170 11A8; CB82;CB82;110D 1170 11A9;CB82;110D 1170 11A9; CB83;CB83;110D 1170 11AA;CB83;110D 1170 11AA; CB84;CB84;110D 1170 11AB;CB84;110D 1170 11AB; CB85;CB85;110D 1170 11AC;CB85;110D 1170 11AC; CB86;CB86;110D 1170 11AD;CB86;110D 1170 11AD; CB87;CB87;110D 1170 11AE;CB87;110D 1170 11AE; CB88;CB88;110D 1170 11AF;CB88;110D 1170 11AF; CB89;CB89;110D 1170 11B0;CB89;110D 1170 11B0; CB8A;CB8A;110D 1170 11B1;CB8A;110D 1170 11B1; CB8B;CB8B;110D 1170 11B2;CB8B;110D 1170 11B2; CB8C;CB8C;110D 1170 11B3;CB8C;110D 1170 11B3; CB8D;CB8D;110D 1170 11B4;CB8D;110D 1170 11B4; CB8E;CB8E;110D 1170 11B5;CB8E;110D 1170 11B5; CB8F;CB8F;110D 1170 11B6;CB8F;110D 1170 11B6; CB90;CB90;110D 1170 11B7;CB90;110D 1170 11B7; CB91;CB91;110D 1170 11B8;CB91;110D 1170 11B8; CB92;CB92;110D 1170 11B9;CB92;110D 1170 11B9; CB93;CB93;110D 1170 11BA;CB93;110D 1170 11BA; CB94;CB94;110D 1170 11BB;CB94;110D 1170 11BB; CB95;CB95;110D 1170 11BC;CB95;110D 1170 11BC; CB96;CB96;110D 1170 11BD;CB96;110D 1170 11BD; CB97;CB97;110D 1170 11BE;CB97;110D 1170 11BE; CB98;CB98;110D 1170 11BF;CB98;110D 1170 11BF; CB99;CB99;110D 1170 11C0;CB99;110D 1170 11C0; CB9A;CB9A;110D 1170 11C1;CB9A;110D 1170 11C1; CB9B;CB9B;110D 1170 11C2;CB9B;110D 1170 11C2; CB9C;CB9C;110D 1171;CB9C;110D 1171; CB9D;CB9D;110D 1171 11A8;CB9D;110D 1171 11A8; CB9E;CB9E;110D 1171 11A9;CB9E;110D 1171 11A9; CB9F;CB9F;110D 1171 11AA;CB9F;110D 1171 11AA; CBA0;CBA0;110D 1171 11AB;CBA0;110D 1171 11AB; CBA1;CBA1;110D 1171 11AC;CBA1;110D 1171 11AC; CBA2;CBA2;110D 1171 11AD;CBA2;110D 1171 11AD; CBA3;CBA3;110D 1171 11AE;CBA3;110D 1171 11AE; CBA4;CBA4;110D 1171 11AF;CBA4;110D 1171 11AF; CBA5;CBA5;110D 1171 11B0;CBA5;110D 1171 11B0; CBA6;CBA6;110D 1171 11B1;CBA6;110D 1171 11B1; CBA7;CBA7;110D 1171 11B2;CBA7;110D 1171 11B2; CBA8;CBA8;110D 1171 11B3;CBA8;110D 1171 11B3; CBA9;CBA9;110D 1171 11B4;CBA9;110D 1171 11B4; CBAA;CBAA;110D 1171 11B5;CBAA;110D 1171 11B5; CBAB;CBAB;110D 1171 11B6;CBAB;110D 1171 11B6; CBAC;CBAC;110D 1171 11B7;CBAC;110D 1171 11B7; CBAD;CBAD;110D 1171 11B8;CBAD;110D 1171 11B8; CBAE;CBAE;110D 1171 11B9;CBAE;110D 1171 11B9; CBAF;CBAF;110D 1171 11BA;CBAF;110D 1171 11BA; CBB0;CBB0;110D 1171 11BB;CBB0;110D 1171 11BB; CBB1;CBB1;110D 1171 11BC;CBB1;110D 1171 11BC; CBB2;CBB2;110D 1171 11BD;CBB2;110D 1171 11BD; CBB3;CBB3;110D 1171 11BE;CBB3;110D 1171 11BE; CBB4;CBB4;110D 1171 11BF;CBB4;110D 1171 11BF; CBB5;CBB5;110D 1171 11C0;CBB5;110D 1171 11C0; CBB6;CBB6;110D 1171 11C1;CBB6;110D 1171 11C1; CBB7;CBB7;110D 1171 11C2;CBB7;110D 1171 11C2; CBB8;CBB8;110D 1172;CBB8;110D 1172; CBB9;CBB9;110D 1172 11A8;CBB9;110D 1172 11A8; CBBA;CBBA;110D 1172 11A9;CBBA;110D 1172 11A9; CBBB;CBBB;110D 1172 11AA;CBBB;110D 1172 11AA; CBBC;CBBC;110D 1172 11AB;CBBC;110D 1172 11AB; CBBD;CBBD;110D 1172 11AC;CBBD;110D 1172 11AC; CBBE;CBBE;110D 1172 11AD;CBBE;110D 1172 11AD; CBBF;CBBF;110D 1172 11AE;CBBF;110D 1172 11AE; CBC0;CBC0;110D 1172 11AF;CBC0;110D 1172 11AF; CBC1;CBC1;110D 1172 11B0;CBC1;110D 1172 11B0; CBC2;CBC2;110D 1172 11B1;CBC2;110D 1172 11B1; CBC3;CBC3;110D 1172 11B2;CBC3;110D 1172 11B2; CBC4;CBC4;110D 1172 11B3;CBC4;110D 1172 11B3; CBC5;CBC5;110D 1172 11B4;CBC5;110D 1172 11B4; CBC6;CBC6;110D 1172 11B5;CBC6;110D 1172 11B5; CBC7;CBC7;110D 1172 11B6;CBC7;110D 1172 11B6; CBC8;CBC8;110D 1172 11B7;CBC8;110D 1172 11B7; CBC9;CBC9;110D 1172 11B8;CBC9;110D 1172 11B8; CBCA;CBCA;110D 1172 11B9;CBCA;110D 1172 11B9; CBCB;CBCB;110D 1172 11BA;CBCB;110D 1172 11BA; CBCC;CBCC;110D 1172 11BB;CBCC;110D 1172 11BB; CBCD;CBCD;110D 1172 11BC;CBCD;110D 1172 11BC; CBCE;CBCE;110D 1172 11BD;CBCE;110D 1172 11BD; CBCF;CBCF;110D 1172 11BE;CBCF;110D 1172 11BE; CBD0;CBD0;110D 1172 11BF;CBD0;110D 1172 11BF; CBD1;CBD1;110D 1172 11C0;CBD1;110D 1172 11C0; CBD2;CBD2;110D 1172 11C1;CBD2;110D 1172 11C1; CBD3;CBD3;110D 1172 11C2;CBD3;110D 1172 11C2; CBD4;CBD4;110D 1173;CBD4;110D 1173; CBD5;CBD5;110D 1173 11A8;CBD5;110D 1173 11A8; CBD6;CBD6;110D 1173 11A9;CBD6;110D 1173 11A9; CBD7;CBD7;110D 1173 11AA;CBD7;110D 1173 11AA; CBD8;CBD8;110D 1173 11AB;CBD8;110D 1173 11AB; CBD9;CBD9;110D 1173 11AC;CBD9;110D 1173 11AC; CBDA;CBDA;110D 1173 11AD;CBDA;110D 1173 11AD; CBDB;CBDB;110D 1173 11AE;CBDB;110D 1173 11AE; CBDC;CBDC;110D 1173 11AF;CBDC;110D 1173 11AF; CBDD;CBDD;110D 1173 11B0;CBDD;110D 1173 11B0; CBDE;CBDE;110D 1173 11B1;CBDE;110D 1173 11B1; CBDF;CBDF;110D 1173 11B2;CBDF;110D 1173 11B2; CBE0;CBE0;110D 1173 11B3;CBE0;110D 1173 11B3; CBE1;CBE1;110D 1173 11B4;CBE1;110D 1173 11B4; CBE2;CBE2;110D 1173 11B5;CBE2;110D 1173 11B5; CBE3;CBE3;110D 1173 11B6;CBE3;110D 1173 11B6; CBE4;CBE4;110D 1173 11B7;CBE4;110D 1173 11B7; CBE5;CBE5;110D 1173 11B8;CBE5;110D 1173 11B8; CBE6;CBE6;110D 1173 11B9;CBE6;110D 1173 11B9; CBE7;CBE7;110D 1173 11BA;CBE7;110D 1173 11BA; CBE8;CBE8;110D 1173 11BB;CBE8;110D 1173 11BB; CBE9;CBE9;110D 1173 11BC;CBE9;110D 1173 11BC; CBEA;CBEA;110D 1173 11BD;CBEA;110D 1173 11BD; CBEB;CBEB;110D 1173 11BE;CBEB;110D 1173 11BE; CBEC;CBEC;110D 1173 11BF;CBEC;110D 1173 11BF; CBED;CBED;110D 1173 11C0;CBED;110D 1173 11C0; CBEE;CBEE;110D 1173 11C1;CBEE;110D 1173 11C1; CBEF;CBEF;110D 1173 11C2;CBEF;110D 1173 11C2; CBF0;CBF0;110D 1174;CBF0;110D 1174; CBF1;CBF1;110D 1174 11A8;CBF1;110D 1174 11A8; CBF2;CBF2;110D 1174 11A9;CBF2;110D 1174 11A9; CBF3;CBF3;110D 1174 11AA;CBF3;110D 1174 11AA; CBF4;CBF4;110D 1174 11AB;CBF4;110D 1174 11AB; CBF5;CBF5;110D 1174 11AC;CBF5;110D 1174 11AC; CBF6;CBF6;110D 1174 11AD;CBF6;110D 1174 11AD; CBF7;CBF7;110D 1174 11AE;CBF7;110D 1174 11AE; CBF8;CBF8;110D 1174 11AF;CBF8;110D 1174 11AF; CBF9;CBF9;110D 1174 11B0;CBF9;110D 1174 11B0; CBFA;CBFA;110D 1174 11B1;CBFA;110D 1174 11B1; CBFB;CBFB;110D 1174 11B2;CBFB;110D 1174 11B2; CBFC;CBFC;110D 1174 11B3;CBFC;110D 1174 11B3; CBFD;CBFD;110D 1174 11B4;CBFD;110D 1174 11B4; CBFE;CBFE;110D 1174 11B5;CBFE;110D 1174 11B5; CBFF;CBFF;110D 1174 11B6;CBFF;110D 1174 11B6; CC00;CC00;110D 1174 11B7;CC00;110D 1174 11B7; CC01;CC01;110D 1174 11B8;CC01;110D 1174 11B8; CC02;CC02;110D 1174 11B9;CC02;110D 1174 11B9; CC03;CC03;110D 1174 11BA;CC03;110D 1174 11BA; CC04;CC04;110D 1174 11BB;CC04;110D 1174 11BB; CC05;CC05;110D 1174 11BC;CC05;110D 1174 11BC; CC06;CC06;110D 1174 11BD;CC06;110D 1174 11BD; CC07;CC07;110D 1174 11BE;CC07;110D 1174 11BE; CC08;CC08;110D 1174 11BF;CC08;110D 1174 11BF; CC09;CC09;110D 1174 11C0;CC09;110D 1174 11C0; CC0A;CC0A;110D 1174 11C1;CC0A;110D 1174 11C1; CC0B;CC0B;110D 1174 11C2;CC0B;110D 1174 11C2; CC0C;CC0C;110D 1175;CC0C;110D 1175; CC0D;CC0D;110D 1175 11A8;CC0D;110D 1175 11A8; CC0E;CC0E;110D 1175 11A9;CC0E;110D 1175 11A9; CC0F;CC0F;110D 1175 11AA;CC0F;110D 1175 11AA; CC10;CC10;110D 1175 11AB;CC10;110D 1175 11AB; CC11;CC11;110D 1175 11AC;CC11;110D 1175 11AC; CC12;CC12;110D 1175 11AD;CC12;110D 1175 11AD; CC13;CC13;110D 1175 11AE;CC13;110D 1175 11AE; CC14;CC14;110D 1175 11AF;CC14;110D 1175 11AF; CC15;CC15;110D 1175 11B0;CC15;110D 1175 11B0; CC16;CC16;110D 1175 11B1;CC16;110D 1175 11B1; CC17;CC17;110D 1175 11B2;CC17;110D 1175 11B2; CC18;CC18;110D 1175 11B3;CC18;110D 1175 11B3; CC19;CC19;110D 1175 11B4;CC19;110D 1175 11B4; CC1A;CC1A;110D 1175 11B5;CC1A;110D 1175 11B5; CC1B;CC1B;110D 1175 11B6;CC1B;110D 1175 11B6; CC1C;CC1C;110D 1175 11B7;CC1C;110D 1175 11B7; CC1D;CC1D;110D 1175 11B8;CC1D;110D 1175 11B8; CC1E;CC1E;110D 1175 11B9;CC1E;110D 1175 11B9; CC1F;CC1F;110D 1175 11BA;CC1F;110D 1175 11BA; CC20;CC20;110D 1175 11BB;CC20;110D 1175 11BB; CC21;CC21;110D 1175 11BC;CC21;110D 1175 11BC; CC22;CC22;110D 1175 11BD;CC22;110D 1175 11BD; CC23;CC23;110D 1175 11BE;CC23;110D 1175 11BE; CC24;CC24;110D 1175 11BF;CC24;110D 1175 11BF; CC25;CC25;110D 1175 11C0;CC25;110D 1175 11C0; CC26;CC26;110D 1175 11C1;CC26;110D 1175 11C1; CC27;CC27;110D 1175 11C2;CC27;110D 1175 11C2; CC28;CC28;110E 1161;CC28;110E 1161; CC29;CC29;110E 1161 11A8;CC29;110E 1161 11A8; CC2A;CC2A;110E 1161 11A9;CC2A;110E 1161 11A9; CC2B;CC2B;110E 1161 11AA;CC2B;110E 1161 11AA; CC2C;CC2C;110E 1161 11AB;CC2C;110E 1161 11AB; CC2D;CC2D;110E 1161 11AC;CC2D;110E 1161 11AC; CC2E;CC2E;110E 1161 11AD;CC2E;110E 1161 11AD; CC2F;CC2F;110E 1161 11AE;CC2F;110E 1161 11AE; CC30;CC30;110E 1161 11AF;CC30;110E 1161 11AF; CC31;CC31;110E 1161 11B0;CC31;110E 1161 11B0; CC32;CC32;110E 1161 11B1;CC32;110E 1161 11B1; CC33;CC33;110E 1161 11B2;CC33;110E 1161 11B2; CC34;CC34;110E 1161 11B3;CC34;110E 1161 11B3; CC35;CC35;110E 1161 11B4;CC35;110E 1161 11B4; CC36;CC36;110E 1161 11B5;CC36;110E 1161 11B5; CC37;CC37;110E 1161 11B6;CC37;110E 1161 11B6; CC38;CC38;110E 1161 11B7;CC38;110E 1161 11B7; CC39;CC39;110E 1161 11B8;CC39;110E 1161 11B8; CC3A;CC3A;110E 1161 11B9;CC3A;110E 1161 11B9; CC3B;CC3B;110E 1161 11BA;CC3B;110E 1161 11BA; CC3C;CC3C;110E 1161 11BB;CC3C;110E 1161 11BB; CC3D;CC3D;110E 1161 11BC;CC3D;110E 1161 11BC; CC3E;CC3E;110E 1161 11BD;CC3E;110E 1161 11BD; CC3F;CC3F;110E 1161 11BE;CC3F;110E 1161 11BE; CC40;CC40;110E 1161 11BF;CC40;110E 1161 11BF; CC41;CC41;110E 1161 11C0;CC41;110E 1161 11C0; CC42;CC42;110E 1161 11C1;CC42;110E 1161 11C1; CC43;CC43;110E 1161 11C2;CC43;110E 1161 11C2; CC44;CC44;110E 1162;CC44;110E 1162; CC45;CC45;110E 1162 11A8;CC45;110E 1162 11A8; CC46;CC46;110E 1162 11A9;CC46;110E 1162 11A9; CC47;CC47;110E 1162 11AA;CC47;110E 1162 11AA; CC48;CC48;110E 1162 11AB;CC48;110E 1162 11AB; CC49;CC49;110E 1162 11AC;CC49;110E 1162 11AC; CC4A;CC4A;110E 1162 11AD;CC4A;110E 1162 11AD; CC4B;CC4B;110E 1162 11AE;CC4B;110E 1162 11AE; CC4C;CC4C;110E 1162 11AF;CC4C;110E 1162 11AF; CC4D;CC4D;110E 1162 11B0;CC4D;110E 1162 11B0; CC4E;CC4E;110E 1162 11B1;CC4E;110E 1162 11B1; CC4F;CC4F;110E 1162 11B2;CC4F;110E 1162 11B2; CC50;CC50;110E 1162 11B3;CC50;110E 1162 11B3; CC51;CC51;110E 1162 11B4;CC51;110E 1162 11B4; CC52;CC52;110E 1162 11B5;CC52;110E 1162 11B5; CC53;CC53;110E 1162 11B6;CC53;110E 1162 11B6; CC54;CC54;110E 1162 11B7;CC54;110E 1162 11B7; CC55;CC55;110E 1162 11B8;CC55;110E 1162 11B8; CC56;CC56;110E 1162 11B9;CC56;110E 1162 11B9; CC57;CC57;110E 1162 11BA;CC57;110E 1162 11BA; CC58;CC58;110E 1162 11BB;CC58;110E 1162 11BB; CC59;CC59;110E 1162 11BC;CC59;110E 1162 11BC; CC5A;CC5A;110E 1162 11BD;CC5A;110E 1162 11BD; CC5B;CC5B;110E 1162 11BE;CC5B;110E 1162 11BE; CC5C;CC5C;110E 1162 11BF;CC5C;110E 1162 11BF; CC5D;CC5D;110E 1162 11C0;CC5D;110E 1162 11C0; CC5E;CC5E;110E 1162 11C1;CC5E;110E 1162 11C1; CC5F;CC5F;110E 1162 11C2;CC5F;110E 1162 11C2; CC60;CC60;110E 1163;CC60;110E 1163; CC61;CC61;110E 1163 11A8;CC61;110E 1163 11A8; CC62;CC62;110E 1163 11A9;CC62;110E 1163 11A9; CC63;CC63;110E 1163 11AA;CC63;110E 1163 11AA; CC64;CC64;110E 1163 11AB;CC64;110E 1163 11AB; CC65;CC65;110E 1163 11AC;CC65;110E 1163 11AC; CC66;CC66;110E 1163 11AD;CC66;110E 1163 11AD; CC67;CC67;110E 1163 11AE;CC67;110E 1163 11AE; CC68;CC68;110E 1163 11AF;CC68;110E 1163 11AF; CC69;CC69;110E 1163 11B0;CC69;110E 1163 11B0; CC6A;CC6A;110E 1163 11B1;CC6A;110E 1163 11B1; CC6B;CC6B;110E 1163 11B2;CC6B;110E 1163 11B2; CC6C;CC6C;110E 1163 11B3;CC6C;110E 1163 11B3; CC6D;CC6D;110E 1163 11B4;CC6D;110E 1163 11B4; CC6E;CC6E;110E 1163 11B5;CC6E;110E 1163 11B5; CC6F;CC6F;110E 1163 11B6;CC6F;110E 1163 11B6; CC70;CC70;110E 1163 11B7;CC70;110E 1163 11B7; CC71;CC71;110E 1163 11B8;CC71;110E 1163 11B8; CC72;CC72;110E 1163 11B9;CC72;110E 1163 11B9; CC73;CC73;110E 1163 11BA;CC73;110E 1163 11BA; CC74;CC74;110E 1163 11BB;CC74;110E 1163 11BB; CC75;CC75;110E 1163 11BC;CC75;110E 1163 11BC; CC76;CC76;110E 1163 11BD;CC76;110E 1163 11BD; CC77;CC77;110E 1163 11BE;CC77;110E 1163 11BE; CC78;CC78;110E 1163 11BF;CC78;110E 1163 11BF; CC79;CC79;110E 1163 11C0;CC79;110E 1163 11C0; CC7A;CC7A;110E 1163 11C1;CC7A;110E 1163 11C1; CC7B;CC7B;110E 1163 11C2;CC7B;110E 1163 11C2; CC7C;CC7C;110E 1164;CC7C;110E 1164; CC7D;CC7D;110E 1164 11A8;CC7D;110E 1164 11A8; CC7E;CC7E;110E 1164 11A9;CC7E;110E 1164 11A9; CC7F;CC7F;110E 1164 11AA;CC7F;110E 1164 11AA; CC80;CC80;110E 1164 11AB;CC80;110E 1164 11AB; CC81;CC81;110E 1164 11AC;CC81;110E 1164 11AC; CC82;CC82;110E 1164 11AD;CC82;110E 1164 11AD; CC83;CC83;110E 1164 11AE;CC83;110E 1164 11AE; CC84;CC84;110E 1164 11AF;CC84;110E 1164 11AF; CC85;CC85;110E 1164 11B0;CC85;110E 1164 11B0; CC86;CC86;110E 1164 11B1;CC86;110E 1164 11B1; CC87;CC87;110E 1164 11B2;CC87;110E 1164 11B2; CC88;CC88;110E 1164 11B3;CC88;110E 1164 11B3; CC89;CC89;110E 1164 11B4;CC89;110E 1164 11B4; CC8A;CC8A;110E 1164 11B5;CC8A;110E 1164 11B5; CC8B;CC8B;110E 1164 11B6;CC8B;110E 1164 11B6; CC8C;CC8C;110E 1164 11B7;CC8C;110E 1164 11B7; CC8D;CC8D;110E 1164 11B8;CC8D;110E 1164 11B8; CC8E;CC8E;110E 1164 11B9;CC8E;110E 1164 11B9; CC8F;CC8F;110E 1164 11BA;CC8F;110E 1164 11BA; CC90;CC90;110E 1164 11BB;CC90;110E 1164 11BB; CC91;CC91;110E 1164 11BC;CC91;110E 1164 11BC; CC92;CC92;110E 1164 11BD;CC92;110E 1164 11BD; CC93;CC93;110E 1164 11BE;CC93;110E 1164 11BE; CC94;CC94;110E 1164 11BF;CC94;110E 1164 11BF; CC95;CC95;110E 1164 11C0;CC95;110E 1164 11C0; CC96;CC96;110E 1164 11C1;CC96;110E 1164 11C1; CC97;CC97;110E 1164 11C2;CC97;110E 1164 11C2; CC98;CC98;110E 1165;CC98;110E 1165; CC99;CC99;110E 1165 11A8;CC99;110E 1165 11A8; CC9A;CC9A;110E 1165 11A9;CC9A;110E 1165 11A9; CC9B;CC9B;110E 1165 11AA;CC9B;110E 1165 11AA; CC9C;CC9C;110E 1165 11AB;CC9C;110E 1165 11AB; CC9D;CC9D;110E 1165 11AC;CC9D;110E 1165 11AC; CC9E;CC9E;110E 1165 11AD;CC9E;110E 1165 11AD; CC9F;CC9F;110E 1165 11AE;CC9F;110E 1165 11AE; CCA0;CCA0;110E 1165 11AF;CCA0;110E 1165 11AF; CCA1;CCA1;110E 1165 11B0;CCA1;110E 1165 11B0; CCA2;CCA2;110E 1165 11B1;CCA2;110E 1165 11B1; CCA3;CCA3;110E 1165 11B2;CCA3;110E 1165 11B2; CCA4;CCA4;110E 1165 11B3;CCA4;110E 1165 11B3; CCA5;CCA5;110E 1165 11B4;CCA5;110E 1165 11B4; CCA6;CCA6;110E 1165 11B5;CCA6;110E 1165 11B5; CCA7;CCA7;110E 1165 11B6;CCA7;110E 1165 11B6; CCA8;CCA8;110E 1165 11B7;CCA8;110E 1165 11B7; CCA9;CCA9;110E 1165 11B8;CCA9;110E 1165 11B8; CCAA;CCAA;110E 1165 11B9;CCAA;110E 1165 11B9; CCAB;CCAB;110E 1165 11BA;CCAB;110E 1165 11BA; CCAC;CCAC;110E 1165 11BB;CCAC;110E 1165 11BB; CCAD;CCAD;110E 1165 11BC;CCAD;110E 1165 11BC; CCAE;CCAE;110E 1165 11BD;CCAE;110E 1165 11BD; CCAF;CCAF;110E 1165 11BE;CCAF;110E 1165 11BE; CCB0;CCB0;110E 1165 11BF;CCB0;110E 1165 11BF; CCB1;CCB1;110E 1165 11C0;CCB1;110E 1165 11C0; CCB2;CCB2;110E 1165 11C1;CCB2;110E 1165 11C1; CCB3;CCB3;110E 1165 11C2;CCB3;110E 1165 11C2; CCB4;CCB4;110E 1166;CCB4;110E 1166; CCB5;CCB5;110E 1166 11A8;CCB5;110E 1166 11A8; CCB6;CCB6;110E 1166 11A9;CCB6;110E 1166 11A9; CCB7;CCB7;110E 1166 11AA;CCB7;110E 1166 11AA; CCB8;CCB8;110E 1166 11AB;CCB8;110E 1166 11AB; CCB9;CCB9;110E 1166 11AC;CCB9;110E 1166 11AC; CCBA;CCBA;110E 1166 11AD;CCBA;110E 1166 11AD; CCBB;CCBB;110E 1166 11AE;CCBB;110E 1166 11AE; CCBC;CCBC;110E 1166 11AF;CCBC;110E 1166 11AF; CCBD;CCBD;110E 1166 11B0;CCBD;110E 1166 11B0; CCBE;CCBE;110E 1166 11B1;CCBE;110E 1166 11B1; CCBF;CCBF;110E 1166 11B2;CCBF;110E 1166 11B2; CCC0;CCC0;110E 1166 11B3;CCC0;110E 1166 11B3; CCC1;CCC1;110E 1166 11B4;CCC1;110E 1166 11B4; CCC2;CCC2;110E 1166 11B5;CCC2;110E 1166 11B5; CCC3;CCC3;110E 1166 11B6;CCC3;110E 1166 11B6; CCC4;CCC4;110E 1166 11B7;CCC4;110E 1166 11B7; CCC5;CCC5;110E 1166 11B8;CCC5;110E 1166 11B8; CCC6;CCC6;110E 1166 11B9;CCC6;110E 1166 11B9; CCC7;CCC7;110E 1166 11BA;CCC7;110E 1166 11BA; CCC8;CCC8;110E 1166 11BB;CCC8;110E 1166 11BB; CCC9;CCC9;110E 1166 11BC;CCC9;110E 1166 11BC; CCCA;CCCA;110E 1166 11BD;CCCA;110E 1166 11BD; CCCB;CCCB;110E 1166 11BE;CCCB;110E 1166 11BE; CCCC;CCCC;110E 1166 11BF;CCCC;110E 1166 11BF; CCCD;CCCD;110E 1166 11C0;CCCD;110E 1166 11C0; CCCE;CCCE;110E 1166 11C1;CCCE;110E 1166 11C1; CCCF;CCCF;110E 1166 11C2;CCCF;110E 1166 11C2; CCD0;CCD0;110E 1167;CCD0;110E 1167; CCD1;CCD1;110E 1167 11A8;CCD1;110E 1167 11A8; CCD2;CCD2;110E 1167 11A9;CCD2;110E 1167 11A9; CCD3;CCD3;110E 1167 11AA;CCD3;110E 1167 11AA; CCD4;CCD4;110E 1167 11AB;CCD4;110E 1167 11AB; CCD5;CCD5;110E 1167 11AC;CCD5;110E 1167 11AC; CCD6;CCD6;110E 1167 11AD;CCD6;110E 1167 11AD; CCD7;CCD7;110E 1167 11AE;CCD7;110E 1167 11AE; CCD8;CCD8;110E 1167 11AF;CCD8;110E 1167 11AF; CCD9;CCD9;110E 1167 11B0;CCD9;110E 1167 11B0; CCDA;CCDA;110E 1167 11B1;CCDA;110E 1167 11B1; CCDB;CCDB;110E 1167 11B2;CCDB;110E 1167 11B2; CCDC;CCDC;110E 1167 11B3;CCDC;110E 1167 11B3; CCDD;CCDD;110E 1167 11B4;CCDD;110E 1167 11B4; CCDE;CCDE;110E 1167 11B5;CCDE;110E 1167 11B5; CCDF;CCDF;110E 1167 11B6;CCDF;110E 1167 11B6; CCE0;CCE0;110E 1167 11B7;CCE0;110E 1167 11B7; CCE1;CCE1;110E 1167 11B8;CCE1;110E 1167 11B8; CCE2;CCE2;110E 1167 11B9;CCE2;110E 1167 11B9; CCE3;CCE3;110E 1167 11BA;CCE3;110E 1167 11BA; CCE4;CCE4;110E 1167 11BB;CCE4;110E 1167 11BB; CCE5;CCE5;110E 1167 11BC;CCE5;110E 1167 11BC; CCE6;CCE6;110E 1167 11BD;CCE6;110E 1167 11BD; CCE7;CCE7;110E 1167 11BE;CCE7;110E 1167 11BE; CCE8;CCE8;110E 1167 11BF;CCE8;110E 1167 11BF; CCE9;CCE9;110E 1167 11C0;CCE9;110E 1167 11C0; CCEA;CCEA;110E 1167 11C1;CCEA;110E 1167 11C1; CCEB;CCEB;110E 1167 11C2;CCEB;110E 1167 11C2; CCEC;CCEC;110E 1168;CCEC;110E 1168; CCED;CCED;110E 1168 11A8;CCED;110E 1168 11A8; CCEE;CCEE;110E 1168 11A9;CCEE;110E 1168 11A9; CCEF;CCEF;110E 1168 11AA;CCEF;110E 1168 11AA; CCF0;CCF0;110E 1168 11AB;CCF0;110E 1168 11AB; CCF1;CCF1;110E 1168 11AC;CCF1;110E 1168 11AC; CCF2;CCF2;110E 1168 11AD;CCF2;110E 1168 11AD; CCF3;CCF3;110E 1168 11AE;CCF3;110E 1168 11AE; CCF4;CCF4;110E 1168 11AF;CCF4;110E 1168 11AF; CCF5;CCF5;110E 1168 11B0;CCF5;110E 1168 11B0; CCF6;CCF6;110E 1168 11B1;CCF6;110E 1168 11B1; CCF7;CCF7;110E 1168 11B2;CCF7;110E 1168 11B2; CCF8;CCF8;110E 1168 11B3;CCF8;110E 1168 11B3; CCF9;CCF9;110E 1168 11B4;CCF9;110E 1168 11B4; CCFA;CCFA;110E 1168 11B5;CCFA;110E 1168 11B5; CCFB;CCFB;110E 1168 11B6;CCFB;110E 1168 11B6; CCFC;CCFC;110E 1168 11B7;CCFC;110E 1168 11B7; CCFD;CCFD;110E 1168 11B8;CCFD;110E 1168 11B8; CCFE;CCFE;110E 1168 11B9;CCFE;110E 1168 11B9; CCFF;CCFF;110E 1168 11BA;CCFF;110E 1168 11BA; CD00;CD00;110E 1168 11BB;CD00;110E 1168 11BB; CD01;CD01;110E 1168 11BC;CD01;110E 1168 11BC; CD02;CD02;110E 1168 11BD;CD02;110E 1168 11BD; CD03;CD03;110E 1168 11BE;CD03;110E 1168 11BE; CD04;CD04;110E 1168 11BF;CD04;110E 1168 11BF; CD05;CD05;110E 1168 11C0;CD05;110E 1168 11C0; CD06;CD06;110E 1168 11C1;CD06;110E 1168 11C1; CD07;CD07;110E 1168 11C2;CD07;110E 1168 11C2; CD08;CD08;110E 1169;CD08;110E 1169; CD09;CD09;110E 1169 11A8;CD09;110E 1169 11A8; CD0A;CD0A;110E 1169 11A9;CD0A;110E 1169 11A9; CD0B;CD0B;110E 1169 11AA;CD0B;110E 1169 11AA; CD0C;CD0C;110E 1169 11AB;CD0C;110E 1169 11AB; CD0D;CD0D;110E 1169 11AC;CD0D;110E 1169 11AC; CD0E;CD0E;110E 1169 11AD;CD0E;110E 1169 11AD; CD0F;CD0F;110E 1169 11AE;CD0F;110E 1169 11AE; CD10;CD10;110E 1169 11AF;CD10;110E 1169 11AF; CD11;CD11;110E 1169 11B0;CD11;110E 1169 11B0; CD12;CD12;110E 1169 11B1;CD12;110E 1169 11B1; CD13;CD13;110E 1169 11B2;CD13;110E 1169 11B2; CD14;CD14;110E 1169 11B3;CD14;110E 1169 11B3; CD15;CD15;110E 1169 11B4;CD15;110E 1169 11B4; CD16;CD16;110E 1169 11B5;CD16;110E 1169 11B5; CD17;CD17;110E 1169 11B6;CD17;110E 1169 11B6; CD18;CD18;110E 1169 11B7;CD18;110E 1169 11B7; CD19;CD19;110E 1169 11B8;CD19;110E 1169 11B8; CD1A;CD1A;110E 1169 11B9;CD1A;110E 1169 11B9; CD1B;CD1B;110E 1169 11BA;CD1B;110E 1169 11BA; CD1C;CD1C;110E 1169 11BB;CD1C;110E 1169 11BB; CD1D;CD1D;110E 1169 11BC;CD1D;110E 1169 11BC; CD1E;CD1E;110E 1169 11BD;CD1E;110E 1169 11BD; CD1F;CD1F;110E 1169 11BE;CD1F;110E 1169 11BE; CD20;CD20;110E 1169 11BF;CD20;110E 1169 11BF; CD21;CD21;110E 1169 11C0;CD21;110E 1169 11C0; CD22;CD22;110E 1169 11C1;CD22;110E 1169 11C1; CD23;CD23;110E 1169 11C2;CD23;110E 1169 11C2; CD24;CD24;110E 116A;CD24;110E 116A; CD25;CD25;110E 116A 11A8;CD25;110E 116A 11A8; CD26;CD26;110E 116A 11A9;CD26;110E 116A 11A9; CD27;CD27;110E 116A 11AA;CD27;110E 116A 11AA; CD28;CD28;110E 116A 11AB;CD28;110E 116A 11AB; CD29;CD29;110E 116A 11AC;CD29;110E 116A 11AC; CD2A;CD2A;110E 116A 11AD;CD2A;110E 116A 11AD; CD2B;CD2B;110E 116A 11AE;CD2B;110E 116A 11AE; CD2C;CD2C;110E 116A 11AF;CD2C;110E 116A 11AF; CD2D;CD2D;110E 116A 11B0;CD2D;110E 116A 11B0; CD2E;CD2E;110E 116A 11B1;CD2E;110E 116A 11B1; CD2F;CD2F;110E 116A 11B2;CD2F;110E 116A 11B2; CD30;CD30;110E 116A 11B3;CD30;110E 116A 11B3; CD31;CD31;110E 116A 11B4;CD31;110E 116A 11B4; CD32;CD32;110E 116A 11B5;CD32;110E 116A 11B5; CD33;CD33;110E 116A 11B6;CD33;110E 116A 11B6; CD34;CD34;110E 116A 11B7;CD34;110E 116A 11B7; CD35;CD35;110E 116A 11B8;CD35;110E 116A 11B8; CD36;CD36;110E 116A 11B9;CD36;110E 116A 11B9; CD37;CD37;110E 116A 11BA;CD37;110E 116A 11BA; CD38;CD38;110E 116A 11BB;CD38;110E 116A 11BB; CD39;CD39;110E 116A 11BC;CD39;110E 116A 11BC; CD3A;CD3A;110E 116A 11BD;CD3A;110E 116A 11BD; CD3B;CD3B;110E 116A 11BE;CD3B;110E 116A 11BE; CD3C;CD3C;110E 116A 11BF;CD3C;110E 116A 11BF; CD3D;CD3D;110E 116A 11C0;CD3D;110E 116A 11C0; CD3E;CD3E;110E 116A 11C1;CD3E;110E 116A 11C1; CD3F;CD3F;110E 116A 11C2;CD3F;110E 116A 11C2; CD40;CD40;110E 116B;CD40;110E 116B; CD41;CD41;110E 116B 11A8;CD41;110E 116B 11A8; CD42;CD42;110E 116B 11A9;CD42;110E 116B 11A9; CD43;CD43;110E 116B 11AA;CD43;110E 116B 11AA; CD44;CD44;110E 116B 11AB;CD44;110E 116B 11AB; CD45;CD45;110E 116B 11AC;CD45;110E 116B 11AC; CD46;CD46;110E 116B 11AD;CD46;110E 116B 11AD; CD47;CD47;110E 116B 11AE;CD47;110E 116B 11AE; CD48;CD48;110E 116B 11AF;CD48;110E 116B 11AF; CD49;CD49;110E 116B 11B0;CD49;110E 116B 11B0; CD4A;CD4A;110E 116B 11B1;CD4A;110E 116B 11B1; CD4B;CD4B;110E 116B 11B2;CD4B;110E 116B 11B2; CD4C;CD4C;110E 116B 11B3;CD4C;110E 116B 11B3; CD4D;CD4D;110E 116B 11B4;CD4D;110E 116B 11B4; CD4E;CD4E;110E 116B 11B5;CD4E;110E 116B 11B5; CD4F;CD4F;110E 116B 11B6;CD4F;110E 116B 11B6; CD50;CD50;110E 116B 11B7;CD50;110E 116B 11B7; CD51;CD51;110E 116B 11B8;CD51;110E 116B 11B8; CD52;CD52;110E 116B 11B9;CD52;110E 116B 11B9; CD53;CD53;110E 116B 11BA;CD53;110E 116B 11BA; CD54;CD54;110E 116B 11BB;CD54;110E 116B 11BB; CD55;CD55;110E 116B 11BC;CD55;110E 116B 11BC; CD56;CD56;110E 116B 11BD;CD56;110E 116B 11BD; CD57;CD57;110E 116B 11BE;CD57;110E 116B 11BE; CD58;CD58;110E 116B 11BF;CD58;110E 116B 11BF; CD59;CD59;110E 116B 11C0;CD59;110E 116B 11C0; CD5A;CD5A;110E 116B 11C1;CD5A;110E 116B 11C1; CD5B;CD5B;110E 116B 11C2;CD5B;110E 116B 11C2; CD5C;CD5C;110E 116C;CD5C;110E 116C; CD5D;CD5D;110E 116C 11A8;CD5D;110E 116C 11A8; CD5E;CD5E;110E 116C 11A9;CD5E;110E 116C 11A9; CD5F;CD5F;110E 116C 11AA;CD5F;110E 116C 11AA; CD60;CD60;110E 116C 11AB;CD60;110E 116C 11AB; CD61;CD61;110E 116C 11AC;CD61;110E 116C 11AC; CD62;CD62;110E 116C 11AD;CD62;110E 116C 11AD; CD63;CD63;110E 116C 11AE;CD63;110E 116C 11AE; CD64;CD64;110E 116C 11AF;CD64;110E 116C 11AF; CD65;CD65;110E 116C 11B0;CD65;110E 116C 11B0; CD66;CD66;110E 116C 11B1;CD66;110E 116C 11B1; CD67;CD67;110E 116C 11B2;CD67;110E 116C 11B2; CD68;CD68;110E 116C 11B3;CD68;110E 116C 11B3; CD69;CD69;110E 116C 11B4;CD69;110E 116C 11B4; CD6A;CD6A;110E 116C 11B5;CD6A;110E 116C 11B5; CD6B;CD6B;110E 116C 11B6;CD6B;110E 116C 11B6; CD6C;CD6C;110E 116C 11B7;CD6C;110E 116C 11B7; CD6D;CD6D;110E 116C 11B8;CD6D;110E 116C 11B8; CD6E;CD6E;110E 116C 11B9;CD6E;110E 116C 11B9; CD6F;CD6F;110E 116C 11BA;CD6F;110E 116C 11BA; CD70;CD70;110E 116C 11BB;CD70;110E 116C 11BB; CD71;CD71;110E 116C 11BC;CD71;110E 116C 11BC; CD72;CD72;110E 116C 11BD;CD72;110E 116C 11BD; CD73;CD73;110E 116C 11BE;CD73;110E 116C 11BE; CD74;CD74;110E 116C 11BF;CD74;110E 116C 11BF; CD75;CD75;110E 116C 11C0;CD75;110E 116C 11C0; CD76;CD76;110E 116C 11C1;CD76;110E 116C 11C1; CD77;CD77;110E 116C 11C2;CD77;110E 116C 11C2; CD78;CD78;110E 116D;CD78;110E 116D; CD79;CD79;110E 116D 11A8;CD79;110E 116D 11A8; CD7A;CD7A;110E 116D 11A9;CD7A;110E 116D 11A9; CD7B;CD7B;110E 116D 11AA;CD7B;110E 116D 11AA; CD7C;CD7C;110E 116D 11AB;CD7C;110E 116D 11AB; CD7D;CD7D;110E 116D 11AC;CD7D;110E 116D 11AC; CD7E;CD7E;110E 116D 11AD;CD7E;110E 116D 11AD; CD7F;CD7F;110E 116D 11AE;CD7F;110E 116D 11AE; CD80;CD80;110E 116D 11AF;CD80;110E 116D 11AF; CD81;CD81;110E 116D 11B0;CD81;110E 116D 11B0; CD82;CD82;110E 116D 11B1;CD82;110E 116D 11B1; CD83;CD83;110E 116D 11B2;CD83;110E 116D 11B2; CD84;CD84;110E 116D 11B3;CD84;110E 116D 11B3; CD85;CD85;110E 116D 11B4;CD85;110E 116D 11B4; CD86;CD86;110E 116D 11B5;CD86;110E 116D 11B5; CD87;CD87;110E 116D 11B6;CD87;110E 116D 11B6; CD88;CD88;110E 116D 11B7;CD88;110E 116D 11B7; CD89;CD89;110E 116D 11B8;CD89;110E 116D 11B8; CD8A;CD8A;110E 116D 11B9;CD8A;110E 116D 11B9; CD8B;CD8B;110E 116D 11BA;CD8B;110E 116D 11BA; CD8C;CD8C;110E 116D 11BB;CD8C;110E 116D 11BB; CD8D;CD8D;110E 116D 11BC;CD8D;110E 116D 11BC; CD8E;CD8E;110E 116D 11BD;CD8E;110E 116D 11BD; CD8F;CD8F;110E 116D 11BE;CD8F;110E 116D 11BE; CD90;CD90;110E 116D 11BF;CD90;110E 116D 11BF; CD91;CD91;110E 116D 11C0;CD91;110E 116D 11C0; CD92;CD92;110E 116D 11C1;CD92;110E 116D 11C1; CD93;CD93;110E 116D 11C2;CD93;110E 116D 11C2; CD94;CD94;110E 116E;CD94;110E 116E; CD95;CD95;110E 116E 11A8;CD95;110E 116E 11A8; CD96;CD96;110E 116E 11A9;CD96;110E 116E 11A9; CD97;CD97;110E 116E 11AA;CD97;110E 116E 11AA; CD98;CD98;110E 116E 11AB;CD98;110E 116E 11AB; CD99;CD99;110E 116E 11AC;CD99;110E 116E 11AC; CD9A;CD9A;110E 116E 11AD;CD9A;110E 116E 11AD; CD9B;CD9B;110E 116E 11AE;CD9B;110E 116E 11AE; CD9C;CD9C;110E 116E 11AF;CD9C;110E 116E 11AF; CD9D;CD9D;110E 116E 11B0;CD9D;110E 116E 11B0; CD9E;CD9E;110E 116E 11B1;CD9E;110E 116E 11B1; CD9F;CD9F;110E 116E 11B2;CD9F;110E 116E 11B2; CDA0;CDA0;110E 116E 11B3;CDA0;110E 116E 11B3; CDA1;CDA1;110E 116E 11B4;CDA1;110E 116E 11B4; CDA2;CDA2;110E 116E 11B5;CDA2;110E 116E 11B5; CDA3;CDA3;110E 116E 11B6;CDA3;110E 116E 11B6; CDA4;CDA4;110E 116E 11B7;CDA4;110E 116E 11B7; CDA5;CDA5;110E 116E 11B8;CDA5;110E 116E 11B8; CDA6;CDA6;110E 116E 11B9;CDA6;110E 116E 11B9; CDA7;CDA7;110E 116E 11BA;CDA7;110E 116E 11BA; CDA8;CDA8;110E 116E 11BB;CDA8;110E 116E 11BB; CDA9;CDA9;110E 116E 11BC;CDA9;110E 116E 11BC; CDAA;CDAA;110E 116E 11BD;CDAA;110E 116E 11BD; CDAB;CDAB;110E 116E 11BE;CDAB;110E 116E 11BE; CDAC;CDAC;110E 116E 11BF;CDAC;110E 116E 11BF; CDAD;CDAD;110E 116E 11C0;CDAD;110E 116E 11C0; CDAE;CDAE;110E 116E 11C1;CDAE;110E 116E 11C1; CDAF;CDAF;110E 116E 11C2;CDAF;110E 116E 11C2; CDB0;CDB0;110E 116F;CDB0;110E 116F; CDB1;CDB1;110E 116F 11A8;CDB1;110E 116F 11A8; CDB2;CDB2;110E 116F 11A9;CDB2;110E 116F 11A9; CDB3;CDB3;110E 116F 11AA;CDB3;110E 116F 11AA; CDB4;CDB4;110E 116F 11AB;CDB4;110E 116F 11AB; CDB5;CDB5;110E 116F 11AC;CDB5;110E 116F 11AC; CDB6;CDB6;110E 116F 11AD;CDB6;110E 116F 11AD; CDB7;CDB7;110E 116F 11AE;CDB7;110E 116F 11AE; CDB8;CDB8;110E 116F 11AF;CDB8;110E 116F 11AF; CDB9;CDB9;110E 116F 11B0;CDB9;110E 116F 11B0; CDBA;CDBA;110E 116F 11B1;CDBA;110E 116F 11B1; CDBB;CDBB;110E 116F 11B2;CDBB;110E 116F 11B2; CDBC;CDBC;110E 116F 11B3;CDBC;110E 116F 11B3; CDBD;CDBD;110E 116F 11B4;CDBD;110E 116F 11B4; CDBE;CDBE;110E 116F 11B5;CDBE;110E 116F 11B5; CDBF;CDBF;110E 116F 11B6;CDBF;110E 116F 11B6; CDC0;CDC0;110E 116F 11B7;CDC0;110E 116F 11B7; CDC1;CDC1;110E 116F 11B8;CDC1;110E 116F 11B8; CDC2;CDC2;110E 116F 11B9;CDC2;110E 116F 11B9; CDC3;CDC3;110E 116F 11BA;CDC3;110E 116F 11BA; CDC4;CDC4;110E 116F 11BB;CDC4;110E 116F 11BB; CDC5;CDC5;110E 116F 11BC;CDC5;110E 116F 11BC; CDC6;CDC6;110E 116F 11BD;CDC6;110E 116F 11BD; CDC7;CDC7;110E 116F 11BE;CDC7;110E 116F 11BE; CDC8;CDC8;110E 116F 11BF;CDC8;110E 116F 11BF; CDC9;CDC9;110E 116F 11C0;CDC9;110E 116F 11C0; CDCA;CDCA;110E 116F 11C1;CDCA;110E 116F 11C1; CDCB;CDCB;110E 116F 11C2;CDCB;110E 116F 11C2; CDCC;CDCC;110E 1170;CDCC;110E 1170; CDCD;CDCD;110E 1170 11A8;CDCD;110E 1170 11A8; CDCE;CDCE;110E 1170 11A9;CDCE;110E 1170 11A9; CDCF;CDCF;110E 1170 11AA;CDCF;110E 1170 11AA; CDD0;CDD0;110E 1170 11AB;CDD0;110E 1170 11AB; CDD1;CDD1;110E 1170 11AC;CDD1;110E 1170 11AC; CDD2;CDD2;110E 1170 11AD;CDD2;110E 1170 11AD; CDD3;CDD3;110E 1170 11AE;CDD3;110E 1170 11AE; CDD4;CDD4;110E 1170 11AF;CDD4;110E 1170 11AF; CDD5;CDD5;110E 1170 11B0;CDD5;110E 1170 11B0; CDD6;CDD6;110E 1170 11B1;CDD6;110E 1170 11B1; CDD7;CDD7;110E 1170 11B2;CDD7;110E 1170 11B2; CDD8;CDD8;110E 1170 11B3;CDD8;110E 1170 11B3; CDD9;CDD9;110E 1170 11B4;CDD9;110E 1170 11B4; CDDA;CDDA;110E 1170 11B5;CDDA;110E 1170 11B5; CDDB;CDDB;110E 1170 11B6;CDDB;110E 1170 11B6; CDDC;CDDC;110E 1170 11B7;CDDC;110E 1170 11B7; CDDD;CDDD;110E 1170 11B8;CDDD;110E 1170 11B8; CDDE;CDDE;110E 1170 11B9;CDDE;110E 1170 11B9; CDDF;CDDF;110E 1170 11BA;CDDF;110E 1170 11BA; CDE0;CDE0;110E 1170 11BB;CDE0;110E 1170 11BB; CDE1;CDE1;110E 1170 11BC;CDE1;110E 1170 11BC; CDE2;CDE2;110E 1170 11BD;CDE2;110E 1170 11BD; CDE3;CDE3;110E 1170 11BE;CDE3;110E 1170 11BE; CDE4;CDE4;110E 1170 11BF;CDE4;110E 1170 11BF; CDE5;CDE5;110E 1170 11C0;CDE5;110E 1170 11C0; CDE6;CDE6;110E 1170 11C1;CDE6;110E 1170 11C1; CDE7;CDE7;110E 1170 11C2;CDE7;110E 1170 11C2; CDE8;CDE8;110E 1171;CDE8;110E 1171; CDE9;CDE9;110E 1171 11A8;CDE9;110E 1171 11A8; CDEA;CDEA;110E 1171 11A9;CDEA;110E 1171 11A9; CDEB;CDEB;110E 1171 11AA;CDEB;110E 1171 11AA; CDEC;CDEC;110E 1171 11AB;CDEC;110E 1171 11AB; CDED;CDED;110E 1171 11AC;CDED;110E 1171 11AC; CDEE;CDEE;110E 1171 11AD;CDEE;110E 1171 11AD; CDEF;CDEF;110E 1171 11AE;CDEF;110E 1171 11AE; CDF0;CDF0;110E 1171 11AF;CDF0;110E 1171 11AF; CDF1;CDF1;110E 1171 11B0;CDF1;110E 1171 11B0; CDF2;CDF2;110E 1171 11B1;CDF2;110E 1171 11B1; CDF3;CDF3;110E 1171 11B2;CDF3;110E 1171 11B2; CDF4;CDF4;110E 1171 11B3;CDF4;110E 1171 11B3; CDF5;CDF5;110E 1171 11B4;CDF5;110E 1171 11B4; CDF6;CDF6;110E 1171 11B5;CDF6;110E 1171 11B5; CDF7;CDF7;110E 1171 11B6;CDF7;110E 1171 11B6; CDF8;CDF8;110E 1171 11B7;CDF8;110E 1171 11B7; CDF9;CDF9;110E 1171 11B8;CDF9;110E 1171 11B8; CDFA;CDFA;110E 1171 11B9;CDFA;110E 1171 11B9; CDFB;CDFB;110E 1171 11BA;CDFB;110E 1171 11BA; CDFC;CDFC;110E 1171 11BB;CDFC;110E 1171 11BB; CDFD;CDFD;110E 1171 11BC;CDFD;110E 1171 11BC; CDFE;CDFE;110E 1171 11BD;CDFE;110E 1171 11BD; CDFF;CDFF;110E 1171 11BE;CDFF;110E 1171 11BE; CE00;CE00;110E 1171 11BF;CE00;110E 1171 11BF; CE01;CE01;110E 1171 11C0;CE01;110E 1171 11C0; CE02;CE02;110E 1171 11C1;CE02;110E 1171 11C1; CE03;CE03;110E 1171 11C2;CE03;110E 1171 11C2; CE04;CE04;110E 1172;CE04;110E 1172; CE05;CE05;110E 1172 11A8;CE05;110E 1172 11A8; CE06;CE06;110E 1172 11A9;CE06;110E 1172 11A9; CE07;CE07;110E 1172 11AA;CE07;110E 1172 11AA; CE08;CE08;110E 1172 11AB;CE08;110E 1172 11AB; CE09;CE09;110E 1172 11AC;CE09;110E 1172 11AC; CE0A;CE0A;110E 1172 11AD;CE0A;110E 1172 11AD; CE0B;CE0B;110E 1172 11AE;CE0B;110E 1172 11AE; CE0C;CE0C;110E 1172 11AF;CE0C;110E 1172 11AF; CE0D;CE0D;110E 1172 11B0;CE0D;110E 1172 11B0; CE0E;CE0E;110E 1172 11B1;CE0E;110E 1172 11B1; CE0F;CE0F;110E 1172 11B2;CE0F;110E 1172 11B2; CE10;CE10;110E 1172 11B3;CE10;110E 1172 11B3; CE11;CE11;110E 1172 11B4;CE11;110E 1172 11B4; CE12;CE12;110E 1172 11B5;CE12;110E 1172 11B5; CE13;CE13;110E 1172 11B6;CE13;110E 1172 11B6; CE14;CE14;110E 1172 11B7;CE14;110E 1172 11B7; CE15;CE15;110E 1172 11B8;CE15;110E 1172 11B8; CE16;CE16;110E 1172 11B9;CE16;110E 1172 11B9; CE17;CE17;110E 1172 11BA;CE17;110E 1172 11BA; CE18;CE18;110E 1172 11BB;CE18;110E 1172 11BB; CE19;CE19;110E 1172 11BC;CE19;110E 1172 11BC; CE1A;CE1A;110E 1172 11BD;CE1A;110E 1172 11BD; CE1B;CE1B;110E 1172 11BE;CE1B;110E 1172 11BE; CE1C;CE1C;110E 1172 11BF;CE1C;110E 1172 11BF; CE1D;CE1D;110E 1172 11C0;CE1D;110E 1172 11C0; CE1E;CE1E;110E 1172 11C1;CE1E;110E 1172 11C1; CE1F;CE1F;110E 1172 11C2;CE1F;110E 1172 11C2; CE20;CE20;110E 1173;CE20;110E 1173; CE21;CE21;110E 1173 11A8;CE21;110E 1173 11A8; CE22;CE22;110E 1173 11A9;CE22;110E 1173 11A9; CE23;CE23;110E 1173 11AA;CE23;110E 1173 11AA; CE24;CE24;110E 1173 11AB;CE24;110E 1173 11AB; CE25;CE25;110E 1173 11AC;CE25;110E 1173 11AC; CE26;CE26;110E 1173 11AD;CE26;110E 1173 11AD; CE27;CE27;110E 1173 11AE;CE27;110E 1173 11AE; CE28;CE28;110E 1173 11AF;CE28;110E 1173 11AF; CE29;CE29;110E 1173 11B0;CE29;110E 1173 11B0; CE2A;CE2A;110E 1173 11B1;CE2A;110E 1173 11B1; CE2B;CE2B;110E 1173 11B2;CE2B;110E 1173 11B2; CE2C;CE2C;110E 1173 11B3;CE2C;110E 1173 11B3; CE2D;CE2D;110E 1173 11B4;CE2D;110E 1173 11B4; CE2E;CE2E;110E 1173 11B5;CE2E;110E 1173 11B5; CE2F;CE2F;110E 1173 11B6;CE2F;110E 1173 11B6; CE30;CE30;110E 1173 11B7;CE30;110E 1173 11B7; CE31;CE31;110E 1173 11B8;CE31;110E 1173 11B8; CE32;CE32;110E 1173 11B9;CE32;110E 1173 11B9; CE33;CE33;110E 1173 11BA;CE33;110E 1173 11BA; CE34;CE34;110E 1173 11BB;CE34;110E 1173 11BB; CE35;CE35;110E 1173 11BC;CE35;110E 1173 11BC; CE36;CE36;110E 1173 11BD;CE36;110E 1173 11BD; CE37;CE37;110E 1173 11BE;CE37;110E 1173 11BE; CE38;CE38;110E 1173 11BF;CE38;110E 1173 11BF; CE39;CE39;110E 1173 11C0;CE39;110E 1173 11C0; CE3A;CE3A;110E 1173 11C1;CE3A;110E 1173 11C1; CE3B;CE3B;110E 1173 11C2;CE3B;110E 1173 11C2; CE3C;CE3C;110E 1174;CE3C;110E 1174; CE3D;CE3D;110E 1174 11A8;CE3D;110E 1174 11A8; CE3E;CE3E;110E 1174 11A9;CE3E;110E 1174 11A9; CE3F;CE3F;110E 1174 11AA;CE3F;110E 1174 11AA; CE40;CE40;110E 1174 11AB;CE40;110E 1174 11AB; CE41;CE41;110E 1174 11AC;CE41;110E 1174 11AC; CE42;CE42;110E 1174 11AD;CE42;110E 1174 11AD; CE43;CE43;110E 1174 11AE;CE43;110E 1174 11AE; CE44;CE44;110E 1174 11AF;CE44;110E 1174 11AF; CE45;CE45;110E 1174 11B0;CE45;110E 1174 11B0; CE46;CE46;110E 1174 11B1;CE46;110E 1174 11B1; CE47;CE47;110E 1174 11B2;CE47;110E 1174 11B2; CE48;CE48;110E 1174 11B3;CE48;110E 1174 11B3; CE49;CE49;110E 1174 11B4;CE49;110E 1174 11B4; CE4A;CE4A;110E 1174 11B5;CE4A;110E 1174 11B5; CE4B;CE4B;110E 1174 11B6;CE4B;110E 1174 11B6; CE4C;CE4C;110E 1174 11B7;CE4C;110E 1174 11B7; CE4D;CE4D;110E 1174 11B8;CE4D;110E 1174 11B8; CE4E;CE4E;110E 1174 11B9;CE4E;110E 1174 11B9; CE4F;CE4F;110E 1174 11BA;CE4F;110E 1174 11BA; CE50;CE50;110E 1174 11BB;CE50;110E 1174 11BB; CE51;CE51;110E 1174 11BC;CE51;110E 1174 11BC; CE52;CE52;110E 1174 11BD;CE52;110E 1174 11BD; CE53;CE53;110E 1174 11BE;CE53;110E 1174 11BE; CE54;CE54;110E 1174 11BF;CE54;110E 1174 11BF; CE55;CE55;110E 1174 11C0;CE55;110E 1174 11C0; CE56;CE56;110E 1174 11C1;CE56;110E 1174 11C1; CE57;CE57;110E 1174 11C2;CE57;110E 1174 11C2; CE58;CE58;110E 1175;CE58;110E 1175; CE59;CE59;110E 1175 11A8;CE59;110E 1175 11A8; CE5A;CE5A;110E 1175 11A9;CE5A;110E 1175 11A9; CE5B;CE5B;110E 1175 11AA;CE5B;110E 1175 11AA; CE5C;CE5C;110E 1175 11AB;CE5C;110E 1175 11AB; CE5D;CE5D;110E 1175 11AC;CE5D;110E 1175 11AC; CE5E;CE5E;110E 1175 11AD;CE5E;110E 1175 11AD; CE5F;CE5F;110E 1175 11AE;CE5F;110E 1175 11AE; CE60;CE60;110E 1175 11AF;CE60;110E 1175 11AF; CE61;CE61;110E 1175 11B0;CE61;110E 1175 11B0; CE62;CE62;110E 1175 11B1;CE62;110E 1175 11B1; CE63;CE63;110E 1175 11B2;CE63;110E 1175 11B2; CE64;CE64;110E 1175 11B3;CE64;110E 1175 11B3; CE65;CE65;110E 1175 11B4;CE65;110E 1175 11B4; CE66;CE66;110E 1175 11B5;CE66;110E 1175 11B5; CE67;CE67;110E 1175 11B6;CE67;110E 1175 11B6; CE68;CE68;110E 1175 11B7;CE68;110E 1175 11B7; CE69;CE69;110E 1175 11B8;CE69;110E 1175 11B8; CE6A;CE6A;110E 1175 11B9;CE6A;110E 1175 11B9; CE6B;CE6B;110E 1175 11BA;CE6B;110E 1175 11BA; CE6C;CE6C;110E 1175 11BB;CE6C;110E 1175 11BB; CE6D;CE6D;110E 1175 11BC;CE6D;110E 1175 11BC; CE6E;CE6E;110E 1175 11BD;CE6E;110E 1175 11BD; CE6F;CE6F;110E 1175 11BE;CE6F;110E 1175 11BE; CE70;CE70;110E 1175 11BF;CE70;110E 1175 11BF; CE71;CE71;110E 1175 11C0;CE71;110E 1175 11C0; CE72;CE72;110E 1175 11C1;CE72;110E 1175 11C1; CE73;CE73;110E 1175 11C2;CE73;110E 1175 11C2; CE74;CE74;110F 1161;CE74;110F 1161; CE75;CE75;110F 1161 11A8;CE75;110F 1161 11A8; CE76;CE76;110F 1161 11A9;CE76;110F 1161 11A9; CE77;CE77;110F 1161 11AA;CE77;110F 1161 11AA; CE78;CE78;110F 1161 11AB;CE78;110F 1161 11AB; CE79;CE79;110F 1161 11AC;CE79;110F 1161 11AC; CE7A;CE7A;110F 1161 11AD;CE7A;110F 1161 11AD; CE7B;CE7B;110F 1161 11AE;CE7B;110F 1161 11AE; CE7C;CE7C;110F 1161 11AF;CE7C;110F 1161 11AF; CE7D;CE7D;110F 1161 11B0;CE7D;110F 1161 11B0; CE7E;CE7E;110F 1161 11B1;CE7E;110F 1161 11B1; CE7F;CE7F;110F 1161 11B2;CE7F;110F 1161 11B2; CE80;CE80;110F 1161 11B3;CE80;110F 1161 11B3; CE81;CE81;110F 1161 11B4;CE81;110F 1161 11B4; CE82;CE82;110F 1161 11B5;CE82;110F 1161 11B5; CE83;CE83;110F 1161 11B6;CE83;110F 1161 11B6; CE84;CE84;110F 1161 11B7;CE84;110F 1161 11B7; CE85;CE85;110F 1161 11B8;CE85;110F 1161 11B8; CE86;CE86;110F 1161 11B9;CE86;110F 1161 11B9; CE87;CE87;110F 1161 11BA;CE87;110F 1161 11BA; CE88;CE88;110F 1161 11BB;CE88;110F 1161 11BB; CE89;CE89;110F 1161 11BC;CE89;110F 1161 11BC; CE8A;CE8A;110F 1161 11BD;CE8A;110F 1161 11BD; CE8B;CE8B;110F 1161 11BE;CE8B;110F 1161 11BE; CE8C;CE8C;110F 1161 11BF;CE8C;110F 1161 11BF; CE8D;CE8D;110F 1161 11C0;CE8D;110F 1161 11C0; CE8E;CE8E;110F 1161 11C1;CE8E;110F 1161 11C1; CE8F;CE8F;110F 1161 11C2;CE8F;110F 1161 11C2; CE90;CE90;110F 1162;CE90;110F 1162; CE91;CE91;110F 1162 11A8;CE91;110F 1162 11A8; CE92;CE92;110F 1162 11A9;CE92;110F 1162 11A9; CE93;CE93;110F 1162 11AA;CE93;110F 1162 11AA; CE94;CE94;110F 1162 11AB;CE94;110F 1162 11AB; CE95;CE95;110F 1162 11AC;CE95;110F 1162 11AC; CE96;CE96;110F 1162 11AD;CE96;110F 1162 11AD; CE97;CE97;110F 1162 11AE;CE97;110F 1162 11AE; CE98;CE98;110F 1162 11AF;CE98;110F 1162 11AF; CE99;CE99;110F 1162 11B0;CE99;110F 1162 11B0; CE9A;CE9A;110F 1162 11B1;CE9A;110F 1162 11B1; CE9B;CE9B;110F 1162 11B2;CE9B;110F 1162 11B2; CE9C;CE9C;110F 1162 11B3;CE9C;110F 1162 11B3; CE9D;CE9D;110F 1162 11B4;CE9D;110F 1162 11B4; CE9E;CE9E;110F 1162 11B5;CE9E;110F 1162 11B5; CE9F;CE9F;110F 1162 11B6;CE9F;110F 1162 11B6; CEA0;CEA0;110F 1162 11B7;CEA0;110F 1162 11B7; CEA1;CEA1;110F 1162 11B8;CEA1;110F 1162 11B8; CEA2;CEA2;110F 1162 11B9;CEA2;110F 1162 11B9; CEA3;CEA3;110F 1162 11BA;CEA3;110F 1162 11BA; CEA4;CEA4;110F 1162 11BB;CEA4;110F 1162 11BB; CEA5;CEA5;110F 1162 11BC;CEA5;110F 1162 11BC; CEA6;CEA6;110F 1162 11BD;CEA6;110F 1162 11BD; CEA7;CEA7;110F 1162 11BE;CEA7;110F 1162 11BE; CEA8;CEA8;110F 1162 11BF;CEA8;110F 1162 11BF; CEA9;CEA9;110F 1162 11C0;CEA9;110F 1162 11C0; CEAA;CEAA;110F 1162 11C1;CEAA;110F 1162 11C1; CEAB;CEAB;110F 1162 11C2;CEAB;110F 1162 11C2; CEAC;CEAC;110F 1163;CEAC;110F 1163; CEAD;CEAD;110F 1163 11A8;CEAD;110F 1163 11A8; CEAE;CEAE;110F 1163 11A9;CEAE;110F 1163 11A9; CEAF;CEAF;110F 1163 11AA;CEAF;110F 1163 11AA; CEB0;CEB0;110F 1163 11AB;CEB0;110F 1163 11AB; CEB1;CEB1;110F 1163 11AC;CEB1;110F 1163 11AC; CEB2;CEB2;110F 1163 11AD;CEB2;110F 1163 11AD; CEB3;CEB3;110F 1163 11AE;CEB3;110F 1163 11AE; CEB4;CEB4;110F 1163 11AF;CEB4;110F 1163 11AF; CEB5;CEB5;110F 1163 11B0;CEB5;110F 1163 11B0; CEB6;CEB6;110F 1163 11B1;CEB6;110F 1163 11B1; CEB7;CEB7;110F 1163 11B2;CEB7;110F 1163 11B2; CEB8;CEB8;110F 1163 11B3;CEB8;110F 1163 11B3; CEB9;CEB9;110F 1163 11B4;CEB9;110F 1163 11B4; CEBA;CEBA;110F 1163 11B5;CEBA;110F 1163 11B5; CEBB;CEBB;110F 1163 11B6;CEBB;110F 1163 11B6; CEBC;CEBC;110F 1163 11B7;CEBC;110F 1163 11B7; CEBD;CEBD;110F 1163 11B8;CEBD;110F 1163 11B8; CEBE;CEBE;110F 1163 11B9;CEBE;110F 1163 11B9; CEBF;CEBF;110F 1163 11BA;CEBF;110F 1163 11BA; CEC0;CEC0;110F 1163 11BB;CEC0;110F 1163 11BB; CEC1;CEC1;110F 1163 11BC;CEC1;110F 1163 11BC; CEC2;CEC2;110F 1163 11BD;CEC2;110F 1163 11BD; CEC3;CEC3;110F 1163 11BE;CEC3;110F 1163 11BE; CEC4;CEC4;110F 1163 11BF;CEC4;110F 1163 11BF; CEC5;CEC5;110F 1163 11C0;CEC5;110F 1163 11C0; CEC6;CEC6;110F 1163 11C1;CEC6;110F 1163 11C1; CEC7;CEC7;110F 1163 11C2;CEC7;110F 1163 11C2; CEC8;CEC8;110F 1164;CEC8;110F 1164; CEC9;CEC9;110F 1164 11A8;CEC9;110F 1164 11A8; CECA;CECA;110F 1164 11A9;CECA;110F 1164 11A9; CECB;CECB;110F 1164 11AA;CECB;110F 1164 11AA; CECC;CECC;110F 1164 11AB;CECC;110F 1164 11AB; CECD;CECD;110F 1164 11AC;CECD;110F 1164 11AC; CECE;CECE;110F 1164 11AD;CECE;110F 1164 11AD; CECF;CECF;110F 1164 11AE;CECF;110F 1164 11AE; CED0;CED0;110F 1164 11AF;CED0;110F 1164 11AF; CED1;CED1;110F 1164 11B0;CED1;110F 1164 11B0; CED2;CED2;110F 1164 11B1;CED2;110F 1164 11B1; CED3;CED3;110F 1164 11B2;CED3;110F 1164 11B2; CED4;CED4;110F 1164 11B3;CED4;110F 1164 11B3; CED5;CED5;110F 1164 11B4;CED5;110F 1164 11B4; CED6;CED6;110F 1164 11B5;CED6;110F 1164 11B5; CED7;CED7;110F 1164 11B6;CED7;110F 1164 11B6; CED8;CED8;110F 1164 11B7;CED8;110F 1164 11B7; CED9;CED9;110F 1164 11B8;CED9;110F 1164 11B8; CEDA;CEDA;110F 1164 11B9;CEDA;110F 1164 11B9; CEDB;CEDB;110F 1164 11BA;CEDB;110F 1164 11BA; CEDC;CEDC;110F 1164 11BB;CEDC;110F 1164 11BB; CEDD;CEDD;110F 1164 11BC;CEDD;110F 1164 11BC; CEDE;CEDE;110F 1164 11BD;CEDE;110F 1164 11BD; CEDF;CEDF;110F 1164 11BE;CEDF;110F 1164 11BE; CEE0;CEE0;110F 1164 11BF;CEE0;110F 1164 11BF; CEE1;CEE1;110F 1164 11C0;CEE1;110F 1164 11C0; CEE2;CEE2;110F 1164 11C1;CEE2;110F 1164 11C1; CEE3;CEE3;110F 1164 11C2;CEE3;110F 1164 11C2; CEE4;CEE4;110F 1165;CEE4;110F 1165; CEE5;CEE5;110F 1165 11A8;CEE5;110F 1165 11A8; CEE6;CEE6;110F 1165 11A9;CEE6;110F 1165 11A9; CEE7;CEE7;110F 1165 11AA;CEE7;110F 1165 11AA; CEE8;CEE8;110F 1165 11AB;CEE8;110F 1165 11AB; CEE9;CEE9;110F 1165 11AC;CEE9;110F 1165 11AC; CEEA;CEEA;110F 1165 11AD;CEEA;110F 1165 11AD; CEEB;CEEB;110F 1165 11AE;CEEB;110F 1165 11AE; CEEC;CEEC;110F 1165 11AF;CEEC;110F 1165 11AF; CEED;CEED;110F 1165 11B0;CEED;110F 1165 11B0; CEEE;CEEE;110F 1165 11B1;CEEE;110F 1165 11B1; CEEF;CEEF;110F 1165 11B2;CEEF;110F 1165 11B2; CEF0;CEF0;110F 1165 11B3;CEF0;110F 1165 11B3; CEF1;CEF1;110F 1165 11B4;CEF1;110F 1165 11B4; CEF2;CEF2;110F 1165 11B5;CEF2;110F 1165 11B5; CEF3;CEF3;110F 1165 11B6;CEF3;110F 1165 11B6; CEF4;CEF4;110F 1165 11B7;CEF4;110F 1165 11B7; CEF5;CEF5;110F 1165 11B8;CEF5;110F 1165 11B8; CEF6;CEF6;110F 1165 11B9;CEF6;110F 1165 11B9; CEF7;CEF7;110F 1165 11BA;CEF7;110F 1165 11BA; CEF8;CEF8;110F 1165 11BB;CEF8;110F 1165 11BB; CEF9;CEF9;110F 1165 11BC;CEF9;110F 1165 11BC; CEFA;CEFA;110F 1165 11BD;CEFA;110F 1165 11BD; CEFB;CEFB;110F 1165 11BE;CEFB;110F 1165 11BE; CEFC;CEFC;110F 1165 11BF;CEFC;110F 1165 11BF; CEFD;CEFD;110F 1165 11C0;CEFD;110F 1165 11C0; CEFE;CEFE;110F 1165 11C1;CEFE;110F 1165 11C1; CEFF;CEFF;110F 1165 11C2;CEFF;110F 1165 11C2; CF00;CF00;110F 1166;CF00;110F 1166; CF01;CF01;110F 1166 11A8;CF01;110F 1166 11A8; CF02;CF02;110F 1166 11A9;CF02;110F 1166 11A9; CF03;CF03;110F 1166 11AA;CF03;110F 1166 11AA; CF04;CF04;110F 1166 11AB;CF04;110F 1166 11AB; CF05;CF05;110F 1166 11AC;CF05;110F 1166 11AC; CF06;CF06;110F 1166 11AD;CF06;110F 1166 11AD; CF07;CF07;110F 1166 11AE;CF07;110F 1166 11AE; CF08;CF08;110F 1166 11AF;CF08;110F 1166 11AF; CF09;CF09;110F 1166 11B0;CF09;110F 1166 11B0; CF0A;CF0A;110F 1166 11B1;CF0A;110F 1166 11B1; CF0B;CF0B;110F 1166 11B2;CF0B;110F 1166 11B2; CF0C;CF0C;110F 1166 11B3;CF0C;110F 1166 11B3; CF0D;CF0D;110F 1166 11B4;CF0D;110F 1166 11B4; CF0E;CF0E;110F 1166 11B5;CF0E;110F 1166 11B5; CF0F;CF0F;110F 1166 11B6;CF0F;110F 1166 11B6; CF10;CF10;110F 1166 11B7;CF10;110F 1166 11B7; CF11;CF11;110F 1166 11B8;CF11;110F 1166 11B8; CF12;CF12;110F 1166 11B9;CF12;110F 1166 11B9; CF13;CF13;110F 1166 11BA;CF13;110F 1166 11BA; CF14;CF14;110F 1166 11BB;CF14;110F 1166 11BB; CF15;CF15;110F 1166 11BC;CF15;110F 1166 11BC; CF16;CF16;110F 1166 11BD;CF16;110F 1166 11BD; CF17;CF17;110F 1166 11BE;CF17;110F 1166 11BE; CF18;CF18;110F 1166 11BF;CF18;110F 1166 11BF; CF19;CF19;110F 1166 11C0;CF19;110F 1166 11C0; CF1A;CF1A;110F 1166 11C1;CF1A;110F 1166 11C1; CF1B;CF1B;110F 1166 11C2;CF1B;110F 1166 11C2; CF1C;CF1C;110F 1167;CF1C;110F 1167; CF1D;CF1D;110F 1167 11A8;CF1D;110F 1167 11A8; CF1E;CF1E;110F 1167 11A9;CF1E;110F 1167 11A9; CF1F;CF1F;110F 1167 11AA;CF1F;110F 1167 11AA; CF20;CF20;110F 1167 11AB;CF20;110F 1167 11AB; CF21;CF21;110F 1167 11AC;CF21;110F 1167 11AC; CF22;CF22;110F 1167 11AD;CF22;110F 1167 11AD; CF23;CF23;110F 1167 11AE;CF23;110F 1167 11AE; CF24;CF24;110F 1167 11AF;CF24;110F 1167 11AF; CF25;CF25;110F 1167 11B0;CF25;110F 1167 11B0; CF26;CF26;110F 1167 11B1;CF26;110F 1167 11B1; CF27;CF27;110F 1167 11B2;CF27;110F 1167 11B2; CF28;CF28;110F 1167 11B3;CF28;110F 1167 11B3; CF29;CF29;110F 1167 11B4;CF29;110F 1167 11B4; CF2A;CF2A;110F 1167 11B5;CF2A;110F 1167 11B5; CF2B;CF2B;110F 1167 11B6;CF2B;110F 1167 11B6; CF2C;CF2C;110F 1167 11B7;CF2C;110F 1167 11B7; CF2D;CF2D;110F 1167 11B8;CF2D;110F 1167 11B8; CF2E;CF2E;110F 1167 11B9;CF2E;110F 1167 11B9; CF2F;CF2F;110F 1167 11BA;CF2F;110F 1167 11BA; CF30;CF30;110F 1167 11BB;CF30;110F 1167 11BB; CF31;CF31;110F 1167 11BC;CF31;110F 1167 11BC; CF32;CF32;110F 1167 11BD;CF32;110F 1167 11BD; CF33;CF33;110F 1167 11BE;CF33;110F 1167 11BE; CF34;CF34;110F 1167 11BF;CF34;110F 1167 11BF; CF35;CF35;110F 1167 11C0;CF35;110F 1167 11C0; CF36;CF36;110F 1167 11C1;CF36;110F 1167 11C1; CF37;CF37;110F 1167 11C2;CF37;110F 1167 11C2; CF38;CF38;110F 1168;CF38;110F 1168; CF39;CF39;110F 1168 11A8;CF39;110F 1168 11A8; CF3A;CF3A;110F 1168 11A9;CF3A;110F 1168 11A9; CF3B;CF3B;110F 1168 11AA;CF3B;110F 1168 11AA; CF3C;CF3C;110F 1168 11AB;CF3C;110F 1168 11AB; CF3D;CF3D;110F 1168 11AC;CF3D;110F 1168 11AC; CF3E;CF3E;110F 1168 11AD;CF3E;110F 1168 11AD; CF3F;CF3F;110F 1168 11AE;CF3F;110F 1168 11AE; CF40;CF40;110F 1168 11AF;CF40;110F 1168 11AF; CF41;CF41;110F 1168 11B0;CF41;110F 1168 11B0; CF42;CF42;110F 1168 11B1;CF42;110F 1168 11B1; CF43;CF43;110F 1168 11B2;CF43;110F 1168 11B2; CF44;CF44;110F 1168 11B3;CF44;110F 1168 11B3; CF45;CF45;110F 1168 11B4;CF45;110F 1168 11B4; CF46;CF46;110F 1168 11B5;CF46;110F 1168 11B5; CF47;CF47;110F 1168 11B6;CF47;110F 1168 11B6; CF48;CF48;110F 1168 11B7;CF48;110F 1168 11B7; CF49;CF49;110F 1168 11B8;CF49;110F 1168 11B8; CF4A;CF4A;110F 1168 11B9;CF4A;110F 1168 11B9; CF4B;CF4B;110F 1168 11BA;CF4B;110F 1168 11BA; CF4C;CF4C;110F 1168 11BB;CF4C;110F 1168 11BB; CF4D;CF4D;110F 1168 11BC;CF4D;110F 1168 11BC; CF4E;CF4E;110F 1168 11BD;CF4E;110F 1168 11BD; CF4F;CF4F;110F 1168 11BE;CF4F;110F 1168 11BE; CF50;CF50;110F 1168 11BF;CF50;110F 1168 11BF; CF51;CF51;110F 1168 11C0;CF51;110F 1168 11C0; CF52;CF52;110F 1168 11C1;CF52;110F 1168 11C1; CF53;CF53;110F 1168 11C2;CF53;110F 1168 11C2; CF54;CF54;110F 1169;CF54;110F 1169; CF55;CF55;110F 1169 11A8;CF55;110F 1169 11A8; CF56;CF56;110F 1169 11A9;CF56;110F 1169 11A9; CF57;CF57;110F 1169 11AA;CF57;110F 1169 11AA; CF58;CF58;110F 1169 11AB;CF58;110F 1169 11AB; CF59;CF59;110F 1169 11AC;CF59;110F 1169 11AC; CF5A;CF5A;110F 1169 11AD;CF5A;110F 1169 11AD; CF5B;CF5B;110F 1169 11AE;CF5B;110F 1169 11AE; CF5C;CF5C;110F 1169 11AF;CF5C;110F 1169 11AF; CF5D;CF5D;110F 1169 11B0;CF5D;110F 1169 11B0; CF5E;CF5E;110F 1169 11B1;CF5E;110F 1169 11B1; CF5F;CF5F;110F 1169 11B2;CF5F;110F 1169 11B2; CF60;CF60;110F 1169 11B3;CF60;110F 1169 11B3; CF61;CF61;110F 1169 11B4;CF61;110F 1169 11B4; CF62;CF62;110F 1169 11B5;CF62;110F 1169 11B5; CF63;CF63;110F 1169 11B6;CF63;110F 1169 11B6; CF64;CF64;110F 1169 11B7;CF64;110F 1169 11B7; CF65;CF65;110F 1169 11B8;CF65;110F 1169 11B8; CF66;CF66;110F 1169 11B9;CF66;110F 1169 11B9; CF67;CF67;110F 1169 11BA;CF67;110F 1169 11BA; CF68;CF68;110F 1169 11BB;CF68;110F 1169 11BB; CF69;CF69;110F 1169 11BC;CF69;110F 1169 11BC; CF6A;CF6A;110F 1169 11BD;CF6A;110F 1169 11BD; CF6B;CF6B;110F 1169 11BE;CF6B;110F 1169 11BE; CF6C;CF6C;110F 1169 11BF;CF6C;110F 1169 11BF; CF6D;CF6D;110F 1169 11C0;CF6D;110F 1169 11C0; CF6E;CF6E;110F 1169 11C1;CF6E;110F 1169 11C1; CF6F;CF6F;110F 1169 11C2;CF6F;110F 1169 11C2; CF70;CF70;110F 116A;CF70;110F 116A; CF71;CF71;110F 116A 11A8;CF71;110F 116A 11A8; CF72;CF72;110F 116A 11A9;CF72;110F 116A 11A9; CF73;CF73;110F 116A 11AA;CF73;110F 116A 11AA; CF74;CF74;110F 116A 11AB;CF74;110F 116A 11AB; CF75;CF75;110F 116A 11AC;CF75;110F 116A 11AC; CF76;CF76;110F 116A 11AD;CF76;110F 116A 11AD; CF77;CF77;110F 116A 11AE;CF77;110F 116A 11AE; CF78;CF78;110F 116A 11AF;CF78;110F 116A 11AF; CF79;CF79;110F 116A 11B0;CF79;110F 116A 11B0; CF7A;CF7A;110F 116A 11B1;CF7A;110F 116A 11B1; CF7B;CF7B;110F 116A 11B2;CF7B;110F 116A 11B2; CF7C;CF7C;110F 116A 11B3;CF7C;110F 116A 11B3; CF7D;CF7D;110F 116A 11B4;CF7D;110F 116A 11B4; CF7E;CF7E;110F 116A 11B5;CF7E;110F 116A 11B5; CF7F;CF7F;110F 116A 11B6;CF7F;110F 116A 11B6; CF80;CF80;110F 116A 11B7;CF80;110F 116A 11B7; CF81;CF81;110F 116A 11B8;CF81;110F 116A 11B8; CF82;CF82;110F 116A 11B9;CF82;110F 116A 11B9; CF83;CF83;110F 116A 11BA;CF83;110F 116A 11BA; CF84;CF84;110F 116A 11BB;CF84;110F 116A 11BB; CF85;CF85;110F 116A 11BC;CF85;110F 116A 11BC; CF86;CF86;110F 116A 11BD;CF86;110F 116A 11BD; CF87;CF87;110F 116A 11BE;CF87;110F 116A 11BE; CF88;CF88;110F 116A 11BF;CF88;110F 116A 11BF; CF89;CF89;110F 116A 11C0;CF89;110F 116A 11C0; CF8A;CF8A;110F 116A 11C1;CF8A;110F 116A 11C1; CF8B;CF8B;110F 116A 11C2;CF8B;110F 116A 11C2; CF8C;CF8C;110F 116B;CF8C;110F 116B; CF8D;CF8D;110F 116B 11A8;CF8D;110F 116B 11A8; CF8E;CF8E;110F 116B 11A9;CF8E;110F 116B 11A9; CF8F;CF8F;110F 116B 11AA;CF8F;110F 116B 11AA; CF90;CF90;110F 116B 11AB;CF90;110F 116B 11AB; CF91;CF91;110F 116B 11AC;CF91;110F 116B 11AC; CF92;CF92;110F 116B 11AD;CF92;110F 116B 11AD; CF93;CF93;110F 116B 11AE;CF93;110F 116B 11AE; CF94;CF94;110F 116B 11AF;CF94;110F 116B 11AF; CF95;CF95;110F 116B 11B0;CF95;110F 116B 11B0; CF96;CF96;110F 116B 11B1;CF96;110F 116B 11B1; CF97;CF97;110F 116B 11B2;CF97;110F 116B 11B2; CF98;CF98;110F 116B 11B3;CF98;110F 116B 11B3; CF99;CF99;110F 116B 11B4;CF99;110F 116B 11B4; CF9A;CF9A;110F 116B 11B5;CF9A;110F 116B 11B5; CF9B;CF9B;110F 116B 11B6;CF9B;110F 116B 11B6; CF9C;CF9C;110F 116B 11B7;CF9C;110F 116B 11B7; CF9D;CF9D;110F 116B 11B8;CF9D;110F 116B 11B8; CF9E;CF9E;110F 116B 11B9;CF9E;110F 116B 11B9; CF9F;CF9F;110F 116B 11BA;CF9F;110F 116B 11BA; CFA0;CFA0;110F 116B 11BB;CFA0;110F 116B 11BB; CFA1;CFA1;110F 116B 11BC;CFA1;110F 116B 11BC; CFA2;CFA2;110F 116B 11BD;CFA2;110F 116B 11BD; CFA3;CFA3;110F 116B 11BE;CFA3;110F 116B 11BE; CFA4;CFA4;110F 116B 11BF;CFA4;110F 116B 11BF; CFA5;CFA5;110F 116B 11C0;CFA5;110F 116B 11C0; CFA6;CFA6;110F 116B 11C1;CFA6;110F 116B 11C1; CFA7;CFA7;110F 116B 11C2;CFA7;110F 116B 11C2; CFA8;CFA8;110F 116C;CFA8;110F 116C; CFA9;CFA9;110F 116C 11A8;CFA9;110F 116C 11A8; CFAA;CFAA;110F 116C 11A9;CFAA;110F 116C 11A9; CFAB;CFAB;110F 116C 11AA;CFAB;110F 116C 11AA; CFAC;CFAC;110F 116C 11AB;CFAC;110F 116C 11AB; CFAD;CFAD;110F 116C 11AC;CFAD;110F 116C 11AC; CFAE;CFAE;110F 116C 11AD;CFAE;110F 116C 11AD; CFAF;CFAF;110F 116C 11AE;CFAF;110F 116C 11AE; CFB0;CFB0;110F 116C 11AF;CFB0;110F 116C 11AF; CFB1;CFB1;110F 116C 11B0;CFB1;110F 116C 11B0; CFB2;CFB2;110F 116C 11B1;CFB2;110F 116C 11B1; CFB3;CFB3;110F 116C 11B2;CFB3;110F 116C 11B2; CFB4;CFB4;110F 116C 11B3;CFB4;110F 116C 11B3; CFB5;CFB5;110F 116C 11B4;CFB5;110F 116C 11B4; CFB6;CFB6;110F 116C 11B5;CFB6;110F 116C 11B5; CFB7;CFB7;110F 116C 11B6;CFB7;110F 116C 11B6; CFB8;CFB8;110F 116C 11B7;CFB8;110F 116C 11B7; CFB9;CFB9;110F 116C 11B8;CFB9;110F 116C 11B8; CFBA;CFBA;110F 116C 11B9;CFBA;110F 116C 11B9; CFBB;CFBB;110F 116C 11BA;CFBB;110F 116C 11BA; CFBC;CFBC;110F 116C 11BB;CFBC;110F 116C 11BB; CFBD;CFBD;110F 116C 11BC;CFBD;110F 116C 11BC; CFBE;CFBE;110F 116C 11BD;CFBE;110F 116C 11BD; CFBF;CFBF;110F 116C 11BE;CFBF;110F 116C 11BE; CFC0;CFC0;110F 116C 11BF;CFC0;110F 116C 11BF; CFC1;CFC1;110F 116C 11C0;CFC1;110F 116C 11C0; CFC2;CFC2;110F 116C 11C1;CFC2;110F 116C 11C1; CFC3;CFC3;110F 116C 11C2;CFC3;110F 116C 11C2; CFC4;CFC4;110F 116D;CFC4;110F 116D; CFC5;CFC5;110F 116D 11A8;CFC5;110F 116D 11A8; CFC6;CFC6;110F 116D 11A9;CFC6;110F 116D 11A9; CFC7;CFC7;110F 116D 11AA;CFC7;110F 116D 11AA; CFC8;CFC8;110F 116D 11AB;CFC8;110F 116D 11AB; CFC9;CFC9;110F 116D 11AC;CFC9;110F 116D 11AC; CFCA;CFCA;110F 116D 11AD;CFCA;110F 116D 11AD; CFCB;CFCB;110F 116D 11AE;CFCB;110F 116D 11AE; CFCC;CFCC;110F 116D 11AF;CFCC;110F 116D 11AF; CFCD;CFCD;110F 116D 11B0;CFCD;110F 116D 11B0; CFCE;CFCE;110F 116D 11B1;CFCE;110F 116D 11B1; CFCF;CFCF;110F 116D 11B2;CFCF;110F 116D 11B2; CFD0;CFD0;110F 116D 11B3;CFD0;110F 116D 11B3; CFD1;CFD1;110F 116D 11B4;CFD1;110F 116D 11B4; CFD2;CFD2;110F 116D 11B5;CFD2;110F 116D 11B5; CFD3;CFD3;110F 116D 11B6;CFD3;110F 116D 11B6; CFD4;CFD4;110F 116D 11B7;CFD4;110F 116D 11B7; CFD5;CFD5;110F 116D 11B8;CFD5;110F 116D 11B8; CFD6;CFD6;110F 116D 11B9;CFD6;110F 116D 11B9; CFD7;CFD7;110F 116D 11BA;CFD7;110F 116D 11BA; CFD8;CFD8;110F 116D 11BB;CFD8;110F 116D 11BB; CFD9;CFD9;110F 116D 11BC;CFD9;110F 116D 11BC; CFDA;CFDA;110F 116D 11BD;CFDA;110F 116D 11BD; CFDB;CFDB;110F 116D 11BE;CFDB;110F 116D 11BE; CFDC;CFDC;110F 116D 11BF;CFDC;110F 116D 11BF; CFDD;CFDD;110F 116D 11C0;CFDD;110F 116D 11C0; CFDE;CFDE;110F 116D 11C1;CFDE;110F 116D 11C1; CFDF;CFDF;110F 116D 11C2;CFDF;110F 116D 11C2; CFE0;CFE0;110F 116E;CFE0;110F 116E; CFE1;CFE1;110F 116E 11A8;CFE1;110F 116E 11A8; CFE2;CFE2;110F 116E 11A9;CFE2;110F 116E 11A9; CFE3;CFE3;110F 116E 11AA;CFE3;110F 116E 11AA; CFE4;CFE4;110F 116E 11AB;CFE4;110F 116E 11AB; CFE5;CFE5;110F 116E 11AC;CFE5;110F 116E 11AC; CFE6;CFE6;110F 116E 11AD;CFE6;110F 116E 11AD; CFE7;CFE7;110F 116E 11AE;CFE7;110F 116E 11AE; CFE8;CFE8;110F 116E 11AF;CFE8;110F 116E 11AF; CFE9;CFE9;110F 116E 11B0;CFE9;110F 116E 11B0; CFEA;CFEA;110F 116E 11B1;CFEA;110F 116E 11B1; CFEB;CFEB;110F 116E 11B2;CFEB;110F 116E 11B2; CFEC;CFEC;110F 116E 11B3;CFEC;110F 116E 11B3; CFED;CFED;110F 116E 11B4;CFED;110F 116E 11B4; CFEE;CFEE;110F 116E 11B5;CFEE;110F 116E 11B5; CFEF;CFEF;110F 116E 11B6;CFEF;110F 116E 11B6; CFF0;CFF0;110F 116E 11B7;CFF0;110F 116E 11B7; CFF1;CFF1;110F 116E 11B8;CFF1;110F 116E 11B8; CFF2;CFF2;110F 116E 11B9;CFF2;110F 116E 11B9; CFF3;CFF3;110F 116E 11BA;CFF3;110F 116E 11BA; CFF4;CFF4;110F 116E 11BB;CFF4;110F 116E 11BB; CFF5;CFF5;110F 116E 11BC;CFF5;110F 116E 11BC; CFF6;CFF6;110F 116E 11BD;CFF6;110F 116E 11BD; CFF7;CFF7;110F 116E 11BE;CFF7;110F 116E 11BE; CFF8;CFF8;110F 116E 11BF;CFF8;110F 116E 11BF; CFF9;CFF9;110F 116E 11C0;CFF9;110F 116E 11C0; CFFA;CFFA;110F 116E 11C1;CFFA;110F 116E 11C1; CFFB;CFFB;110F 116E 11C2;CFFB;110F 116E 11C2; CFFC;CFFC;110F 116F;CFFC;110F 116F; CFFD;CFFD;110F 116F 11A8;CFFD;110F 116F 11A8; CFFE;CFFE;110F 116F 11A9;CFFE;110F 116F 11A9; CFFF;CFFF;110F 116F 11AA;CFFF;110F 116F 11AA; D000;D000;110F 116F 11AB;D000;110F 116F 11AB; D001;D001;110F 116F 11AC;D001;110F 116F 11AC; D002;D002;110F 116F 11AD;D002;110F 116F 11AD; D003;D003;110F 116F 11AE;D003;110F 116F 11AE; D004;D004;110F 116F 11AF;D004;110F 116F 11AF; D005;D005;110F 116F 11B0;D005;110F 116F 11B0; D006;D006;110F 116F 11B1;D006;110F 116F 11B1; D007;D007;110F 116F 11B2;D007;110F 116F 11B2; D008;D008;110F 116F 11B3;D008;110F 116F 11B3; D009;D009;110F 116F 11B4;D009;110F 116F 11B4; D00A;D00A;110F 116F 11B5;D00A;110F 116F 11B5; D00B;D00B;110F 116F 11B6;D00B;110F 116F 11B6; D00C;D00C;110F 116F 11B7;D00C;110F 116F 11B7; D00D;D00D;110F 116F 11B8;D00D;110F 116F 11B8; D00E;D00E;110F 116F 11B9;D00E;110F 116F 11B9; D00F;D00F;110F 116F 11BA;D00F;110F 116F 11BA; D010;D010;110F 116F 11BB;D010;110F 116F 11BB; D011;D011;110F 116F 11BC;D011;110F 116F 11BC; D012;D012;110F 116F 11BD;D012;110F 116F 11BD; D013;D013;110F 116F 11BE;D013;110F 116F 11BE; D014;D014;110F 116F 11BF;D014;110F 116F 11BF; D015;D015;110F 116F 11C0;D015;110F 116F 11C0; D016;D016;110F 116F 11C1;D016;110F 116F 11C1; D017;D017;110F 116F 11C2;D017;110F 116F 11C2; D018;D018;110F 1170;D018;110F 1170; D019;D019;110F 1170 11A8;D019;110F 1170 11A8; D01A;D01A;110F 1170 11A9;D01A;110F 1170 11A9; D01B;D01B;110F 1170 11AA;D01B;110F 1170 11AA; D01C;D01C;110F 1170 11AB;D01C;110F 1170 11AB; D01D;D01D;110F 1170 11AC;D01D;110F 1170 11AC; D01E;D01E;110F 1170 11AD;D01E;110F 1170 11AD; D01F;D01F;110F 1170 11AE;D01F;110F 1170 11AE; D020;D020;110F 1170 11AF;D020;110F 1170 11AF; D021;D021;110F 1170 11B0;D021;110F 1170 11B0; D022;D022;110F 1170 11B1;D022;110F 1170 11B1; D023;D023;110F 1170 11B2;D023;110F 1170 11B2; D024;D024;110F 1170 11B3;D024;110F 1170 11B3; D025;D025;110F 1170 11B4;D025;110F 1170 11B4; D026;D026;110F 1170 11B5;D026;110F 1170 11B5; D027;D027;110F 1170 11B6;D027;110F 1170 11B6; D028;D028;110F 1170 11B7;D028;110F 1170 11B7; D029;D029;110F 1170 11B8;D029;110F 1170 11B8; D02A;D02A;110F 1170 11B9;D02A;110F 1170 11B9; D02B;D02B;110F 1170 11BA;D02B;110F 1170 11BA; D02C;D02C;110F 1170 11BB;D02C;110F 1170 11BB; D02D;D02D;110F 1170 11BC;D02D;110F 1170 11BC; D02E;D02E;110F 1170 11BD;D02E;110F 1170 11BD; D02F;D02F;110F 1170 11BE;D02F;110F 1170 11BE; D030;D030;110F 1170 11BF;D030;110F 1170 11BF; D031;D031;110F 1170 11C0;D031;110F 1170 11C0; D032;D032;110F 1170 11C1;D032;110F 1170 11C1; D033;D033;110F 1170 11C2;D033;110F 1170 11C2; D034;D034;110F 1171;D034;110F 1171; D035;D035;110F 1171 11A8;D035;110F 1171 11A8; D036;D036;110F 1171 11A9;D036;110F 1171 11A9; D037;D037;110F 1171 11AA;D037;110F 1171 11AA; D038;D038;110F 1171 11AB;D038;110F 1171 11AB; D039;D039;110F 1171 11AC;D039;110F 1171 11AC; D03A;D03A;110F 1171 11AD;D03A;110F 1171 11AD; D03B;D03B;110F 1171 11AE;D03B;110F 1171 11AE; D03C;D03C;110F 1171 11AF;D03C;110F 1171 11AF; D03D;D03D;110F 1171 11B0;D03D;110F 1171 11B0; D03E;D03E;110F 1171 11B1;D03E;110F 1171 11B1; D03F;D03F;110F 1171 11B2;D03F;110F 1171 11B2; D040;D040;110F 1171 11B3;D040;110F 1171 11B3; D041;D041;110F 1171 11B4;D041;110F 1171 11B4; D042;D042;110F 1171 11B5;D042;110F 1171 11B5; D043;D043;110F 1171 11B6;D043;110F 1171 11B6; D044;D044;110F 1171 11B7;D044;110F 1171 11B7; D045;D045;110F 1171 11B8;D045;110F 1171 11B8; D046;D046;110F 1171 11B9;D046;110F 1171 11B9; D047;D047;110F 1171 11BA;D047;110F 1171 11BA; D048;D048;110F 1171 11BB;D048;110F 1171 11BB; D049;D049;110F 1171 11BC;D049;110F 1171 11BC; D04A;D04A;110F 1171 11BD;D04A;110F 1171 11BD; D04B;D04B;110F 1171 11BE;D04B;110F 1171 11BE; D04C;D04C;110F 1171 11BF;D04C;110F 1171 11BF; D04D;D04D;110F 1171 11C0;D04D;110F 1171 11C0; D04E;D04E;110F 1171 11C1;D04E;110F 1171 11C1; D04F;D04F;110F 1171 11C2;D04F;110F 1171 11C2; D050;D050;110F 1172;D050;110F 1172; D051;D051;110F 1172 11A8;D051;110F 1172 11A8; D052;D052;110F 1172 11A9;D052;110F 1172 11A9; D053;D053;110F 1172 11AA;D053;110F 1172 11AA; D054;D054;110F 1172 11AB;D054;110F 1172 11AB; D055;D055;110F 1172 11AC;D055;110F 1172 11AC; D056;D056;110F 1172 11AD;D056;110F 1172 11AD; D057;D057;110F 1172 11AE;D057;110F 1172 11AE; D058;D058;110F 1172 11AF;D058;110F 1172 11AF; D059;D059;110F 1172 11B0;D059;110F 1172 11B0; D05A;D05A;110F 1172 11B1;D05A;110F 1172 11B1; D05B;D05B;110F 1172 11B2;D05B;110F 1172 11B2; D05C;D05C;110F 1172 11B3;D05C;110F 1172 11B3; D05D;D05D;110F 1172 11B4;D05D;110F 1172 11B4; D05E;D05E;110F 1172 11B5;D05E;110F 1172 11B5; D05F;D05F;110F 1172 11B6;D05F;110F 1172 11B6; D060;D060;110F 1172 11B7;D060;110F 1172 11B7; D061;D061;110F 1172 11B8;D061;110F 1172 11B8; D062;D062;110F 1172 11B9;D062;110F 1172 11B9; D063;D063;110F 1172 11BA;D063;110F 1172 11BA; D064;D064;110F 1172 11BB;D064;110F 1172 11BB; D065;D065;110F 1172 11BC;D065;110F 1172 11BC; D066;D066;110F 1172 11BD;D066;110F 1172 11BD; D067;D067;110F 1172 11BE;D067;110F 1172 11BE; D068;D068;110F 1172 11BF;D068;110F 1172 11BF; D069;D069;110F 1172 11C0;D069;110F 1172 11C0; D06A;D06A;110F 1172 11C1;D06A;110F 1172 11C1; D06B;D06B;110F 1172 11C2;D06B;110F 1172 11C2; D06C;D06C;110F 1173;D06C;110F 1173; D06D;D06D;110F 1173 11A8;D06D;110F 1173 11A8; D06E;D06E;110F 1173 11A9;D06E;110F 1173 11A9; D06F;D06F;110F 1173 11AA;D06F;110F 1173 11AA; D070;D070;110F 1173 11AB;D070;110F 1173 11AB; D071;D071;110F 1173 11AC;D071;110F 1173 11AC; D072;D072;110F 1173 11AD;D072;110F 1173 11AD; D073;D073;110F 1173 11AE;D073;110F 1173 11AE; D074;D074;110F 1173 11AF;D074;110F 1173 11AF; D075;D075;110F 1173 11B0;D075;110F 1173 11B0; D076;D076;110F 1173 11B1;D076;110F 1173 11B1; D077;D077;110F 1173 11B2;D077;110F 1173 11B2; D078;D078;110F 1173 11B3;D078;110F 1173 11B3; D079;D079;110F 1173 11B4;D079;110F 1173 11B4; D07A;D07A;110F 1173 11B5;D07A;110F 1173 11B5; D07B;D07B;110F 1173 11B6;D07B;110F 1173 11B6; D07C;D07C;110F 1173 11B7;D07C;110F 1173 11B7; D07D;D07D;110F 1173 11B8;D07D;110F 1173 11B8; D07E;D07E;110F 1173 11B9;D07E;110F 1173 11B9; D07F;D07F;110F 1173 11BA;D07F;110F 1173 11BA; D080;D080;110F 1173 11BB;D080;110F 1173 11BB; D081;D081;110F 1173 11BC;D081;110F 1173 11BC; D082;D082;110F 1173 11BD;D082;110F 1173 11BD; D083;D083;110F 1173 11BE;D083;110F 1173 11BE; D084;D084;110F 1173 11BF;D084;110F 1173 11BF; D085;D085;110F 1173 11C0;D085;110F 1173 11C0; D086;D086;110F 1173 11C1;D086;110F 1173 11C1; D087;D087;110F 1173 11C2;D087;110F 1173 11C2; D088;D088;110F 1174;D088;110F 1174; D089;D089;110F 1174 11A8;D089;110F 1174 11A8; D08A;D08A;110F 1174 11A9;D08A;110F 1174 11A9; D08B;D08B;110F 1174 11AA;D08B;110F 1174 11AA; D08C;D08C;110F 1174 11AB;D08C;110F 1174 11AB; D08D;D08D;110F 1174 11AC;D08D;110F 1174 11AC; D08E;D08E;110F 1174 11AD;D08E;110F 1174 11AD; D08F;D08F;110F 1174 11AE;D08F;110F 1174 11AE; D090;D090;110F 1174 11AF;D090;110F 1174 11AF; D091;D091;110F 1174 11B0;D091;110F 1174 11B0; D092;D092;110F 1174 11B1;D092;110F 1174 11B1; D093;D093;110F 1174 11B2;D093;110F 1174 11B2; D094;D094;110F 1174 11B3;D094;110F 1174 11B3; D095;D095;110F 1174 11B4;D095;110F 1174 11B4; D096;D096;110F 1174 11B5;D096;110F 1174 11B5; D097;D097;110F 1174 11B6;D097;110F 1174 11B6; D098;D098;110F 1174 11B7;D098;110F 1174 11B7; D099;D099;110F 1174 11B8;D099;110F 1174 11B8; D09A;D09A;110F 1174 11B9;D09A;110F 1174 11B9; D09B;D09B;110F 1174 11BA;D09B;110F 1174 11BA; D09C;D09C;110F 1174 11BB;D09C;110F 1174 11BB; D09D;D09D;110F 1174 11BC;D09D;110F 1174 11BC; D09E;D09E;110F 1174 11BD;D09E;110F 1174 11BD; D09F;D09F;110F 1174 11BE;D09F;110F 1174 11BE; D0A0;D0A0;110F 1174 11BF;D0A0;110F 1174 11BF; D0A1;D0A1;110F 1174 11C0;D0A1;110F 1174 11C0; D0A2;D0A2;110F 1174 11C1;D0A2;110F 1174 11C1; D0A3;D0A3;110F 1174 11C2;D0A3;110F 1174 11C2; D0A4;D0A4;110F 1175;D0A4;110F 1175; D0A5;D0A5;110F 1175 11A8;D0A5;110F 1175 11A8; D0A6;D0A6;110F 1175 11A9;D0A6;110F 1175 11A9; D0A7;D0A7;110F 1175 11AA;D0A7;110F 1175 11AA; D0A8;D0A8;110F 1175 11AB;D0A8;110F 1175 11AB; D0A9;D0A9;110F 1175 11AC;D0A9;110F 1175 11AC; D0AA;D0AA;110F 1175 11AD;D0AA;110F 1175 11AD; D0AB;D0AB;110F 1175 11AE;D0AB;110F 1175 11AE; D0AC;D0AC;110F 1175 11AF;D0AC;110F 1175 11AF; D0AD;D0AD;110F 1175 11B0;D0AD;110F 1175 11B0; D0AE;D0AE;110F 1175 11B1;D0AE;110F 1175 11B1; D0AF;D0AF;110F 1175 11B2;D0AF;110F 1175 11B2; D0B0;D0B0;110F 1175 11B3;D0B0;110F 1175 11B3; D0B1;D0B1;110F 1175 11B4;D0B1;110F 1175 11B4; D0B2;D0B2;110F 1175 11B5;D0B2;110F 1175 11B5; D0B3;D0B3;110F 1175 11B6;D0B3;110F 1175 11B6; D0B4;D0B4;110F 1175 11B7;D0B4;110F 1175 11B7; D0B5;D0B5;110F 1175 11B8;D0B5;110F 1175 11B8; D0B6;D0B6;110F 1175 11B9;D0B6;110F 1175 11B9; D0B7;D0B7;110F 1175 11BA;D0B7;110F 1175 11BA; D0B8;D0B8;110F 1175 11BB;D0B8;110F 1175 11BB; D0B9;D0B9;110F 1175 11BC;D0B9;110F 1175 11BC; D0BA;D0BA;110F 1175 11BD;D0BA;110F 1175 11BD; D0BB;D0BB;110F 1175 11BE;D0BB;110F 1175 11BE; D0BC;D0BC;110F 1175 11BF;D0BC;110F 1175 11BF; D0BD;D0BD;110F 1175 11C0;D0BD;110F 1175 11C0; D0BE;D0BE;110F 1175 11C1;D0BE;110F 1175 11C1; D0BF;D0BF;110F 1175 11C2;D0BF;110F 1175 11C2; D0C0;D0C0;1110 1161;D0C0;1110 1161; D0C1;D0C1;1110 1161 11A8;D0C1;1110 1161 11A8; D0C2;D0C2;1110 1161 11A9;D0C2;1110 1161 11A9; D0C3;D0C3;1110 1161 11AA;D0C3;1110 1161 11AA; D0C4;D0C4;1110 1161 11AB;D0C4;1110 1161 11AB; D0C5;D0C5;1110 1161 11AC;D0C5;1110 1161 11AC; D0C6;D0C6;1110 1161 11AD;D0C6;1110 1161 11AD; D0C7;D0C7;1110 1161 11AE;D0C7;1110 1161 11AE; D0C8;D0C8;1110 1161 11AF;D0C8;1110 1161 11AF; D0C9;D0C9;1110 1161 11B0;D0C9;1110 1161 11B0; D0CA;D0CA;1110 1161 11B1;D0CA;1110 1161 11B1; D0CB;D0CB;1110 1161 11B2;D0CB;1110 1161 11B2; D0CC;D0CC;1110 1161 11B3;D0CC;1110 1161 11B3; D0CD;D0CD;1110 1161 11B4;D0CD;1110 1161 11B4; D0CE;D0CE;1110 1161 11B5;D0CE;1110 1161 11B5; D0CF;D0CF;1110 1161 11B6;D0CF;1110 1161 11B6; D0D0;D0D0;1110 1161 11B7;D0D0;1110 1161 11B7; D0D1;D0D1;1110 1161 11B8;D0D1;1110 1161 11B8; D0D2;D0D2;1110 1161 11B9;D0D2;1110 1161 11B9; D0D3;D0D3;1110 1161 11BA;D0D3;1110 1161 11BA; D0D4;D0D4;1110 1161 11BB;D0D4;1110 1161 11BB; D0D5;D0D5;1110 1161 11BC;D0D5;1110 1161 11BC; D0D6;D0D6;1110 1161 11BD;D0D6;1110 1161 11BD; D0D7;D0D7;1110 1161 11BE;D0D7;1110 1161 11BE; D0D8;D0D8;1110 1161 11BF;D0D8;1110 1161 11BF; D0D9;D0D9;1110 1161 11C0;D0D9;1110 1161 11C0; D0DA;D0DA;1110 1161 11C1;D0DA;1110 1161 11C1; D0DB;D0DB;1110 1161 11C2;D0DB;1110 1161 11C2; D0DC;D0DC;1110 1162;D0DC;1110 1162; D0DD;D0DD;1110 1162 11A8;D0DD;1110 1162 11A8; D0DE;D0DE;1110 1162 11A9;D0DE;1110 1162 11A9; D0DF;D0DF;1110 1162 11AA;D0DF;1110 1162 11AA; D0E0;D0E0;1110 1162 11AB;D0E0;1110 1162 11AB; D0E1;D0E1;1110 1162 11AC;D0E1;1110 1162 11AC; D0E2;D0E2;1110 1162 11AD;D0E2;1110 1162 11AD; D0E3;D0E3;1110 1162 11AE;D0E3;1110 1162 11AE; D0E4;D0E4;1110 1162 11AF;D0E4;1110 1162 11AF; D0E5;D0E5;1110 1162 11B0;D0E5;1110 1162 11B0; D0E6;D0E6;1110 1162 11B1;D0E6;1110 1162 11B1; D0E7;D0E7;1110 1162 11B2;D0E7;1110 1162 11B2; D0E8;D0E8;1110 1162 11B3;D0E8;1110 1162 11B3; D0E9;D0E9;1110 1162 11B4;D0E9;1110 1162 11B4; D0EA;D0EA;1110 1162 11B5;D0EA;1110 1162 11B5; D0EB;D0EB;1110 1162 11B6;D0EB;1110 1162 11B6; D0EC;D0EC;1110 1162 11B7;D0EC;1110 1162 11B7; D0ED;D0ED;1110 1162 11B8;D0ED;1110 1162 11B8; D0EE;D0EE;1110 1162 11B9;D0EE;1110 1162 11B9; D0EF;D0EF;1110 1162 11BA;D0EF;1110 1162 11BA; D0F0;D0F0;1110 1162 11BB;D0F0;1110 1162 11BB; D0F1;D0F1;1110 1162 11BC;D0F1;1110 1162 11BC; D0F2;D0F2;1110 1162 11BD;D0F2;1110 1162 11BD; D0F3;D0F3;1110 1162 11BE;D0F3;1110 1162 11BE; D0F4;D0F4;1110 1162 11BF;D0F4;1110 1162 11BF; D0F5;D0F5;1110 1162 11C0;D0F5;1110 1162 11C0; D0F6;D0F6;1110 1162 11C1;D0F6;1110 1162 11C1; D0F7;D0F7;1110 1162 11C2;D0F7;1110 1162 11C2; D0F8;D0F8;1110 1163;D0F8;1110 1163; D0F9;D0F9;1110 1163 11A8;D0F9;1110 1163 11A8; D0FA;D0FA;1110 1163 11A9;D0FA;1110 1163 11A9; D0FB;D0FB;1110 1163 11AA;D0FB;1110 1163 11AA; D0FC;D0FC;1110 1163 11AB;D0FC;1110 1163 11AB; D0FD;D0FD;1110 1163 11AC;D0FD;1110 1163 11AC; D0FE;D0FE;1110 1163 11AD;D0FE;1110 1163 11AD; D0FF;D0FF;1110 1163 11AE;D0FF;1110 1163 11AE; D100;D100;1110 1163 11AF;D100;1110 1163 11AF; D101;D101;1110 1163 11B0;D101;1110 1163 11B0; D102;D102;1110 1163 11B1;D102;1110 1163 11B1; D103;D103;1110 1163 11B2;D103;1110 1163 11B2; D104;D104;1110 1163 11B3;D104;1110 1163 11B3; D105;D105;1110 1163 11B4;D105;1110 1163 11B4; D106;D106;1110 1163 11B5;D106;1110 1163 11B5; D107;D107;1110 1163 11B6;D107;1110 1163 11B6; D108;D108;1110 1163 11B7;D108;1110 1163 11B7; D109;D109;1110 1163 11B8;D109;1110 1163 11B8; D10A;D10A;1110 1163 11B9;D10A;1110 1163 11B9; D10B;D10B;1110 1163 11BA;D10B;1110 1163 11BA; D10C;D10C;1110 1163 11BB;D10C;1110 1163 11BB; D10D;D10D;1110 1163 11BC;D10D;1110 1163 11BC; D10E;D10E;1110 1163 11BD;D10E;1110 1163 11BD; D10F;D10F;1110 1163 11BE;D10F;1110 1163 11BE; D110;D110;1110 1163 11BF;D110;1110 1163 11BF; D111;D111;1110 1163 11C0;D111;1110 1163 11C0; D112;D112;1110 1163 11C1;D112;1110 1163 11C1; D113;D113;1110 1163 11C2;D113;1110 1163 11C2; D114;D114;1110 1164;D114;1110 1164; D115;D115;1110 1164 11A8;D115;1110 1164 11A8; D116;D116;1110 1164 11A9;D116;1110 1164 11A9; D117;D117;1110 1164 11AA;D117;1110 1164 11AA; D118;D118;1110 1164 11AB;D118;1110 1164 11AB; D119;D119;1110 1164 11AC;D119;1110 1164 11AC; D11A;D11A;1110 1164 11AD;D11A;1110 1164 11AD; D11B;D11B;1110 1164 11AE;D11B;1110 1164 11AE; D11C;D11C;1110 1164 11AF;D11C;1110 1164 11AF; D11D;D11D;1110 1164 11B0;D11D;1110 1164 11B0; D11E;D11E;1110 1164 11B1;D11E;1110 1164 11B1; D11F;D11F;1110 1164 11B2;D11F;1110 1164 11B2; D120;D120;1110 1164 11B3;D120;1110 1164 11B3; D121;D121;1110 1164 11B4;D121;1110 1164 11B4; D122;D122;1110 1164 11B5;D122;1110 1164 11B5; D123;D123;1110 1164 11B6;D123;1110 1164 11B6; D124;D124;1110 1164 11B7;D124;1110 1164 11B7; D125;D125;1110 1164 11B8;D125;1110 1164 11B8; D126;D126;1110 1164 11B9;D126;1110 1164 11B9; D127;D127;1110 1164 11BA;D127;1110 1164 11BA; D128;D128;1110 1164 11BB;D128;1110 1164 11BB; D129;D129;1110 1164 11BC;D129;1110 1164 11BC; D12A;D12A;1110 1164 11BD;D12A;1110 1164 11BD; D12B;D12B;1110 1164 11BE;D12B;1110 1164 11BE; D12C;D12C;1110 1164 11BF;D12C;1110 1164 11BF; D12D;D12D;1110 1164 11C0;D12D;1110 1164 11C0; D12E;D12E;1110 1164 11C1;D12E;1110 1164 11C1; D12F;D12F;1110 1164 11C2;D12F;1110 1164 11C2; D130;D130;1110 1165;D130;1110 1165; D131;D131;1110 1165 11A8;D131;1110 1165 11A8; D132;D132;1110 1165 11A9;D132;1110 1165 11A9; D133;D133;1110 1165 11AA;D133;1110 1165 11AA; D134;D134;1110 1165 11AB;D134;1110 1165 11AB; D135;D135;1110 1165 11AC;D135;1110 1165 11AC; D136;D136;1110 1165 11AD;D136;1110 1165 11AD; D137;D137;1110 1165 11AE;D137;1110 1165 11AE; D138;D138;1110 1165 11AF;D138;1110 1165 11AF; D139;D139;1110 1165 11B0;D139;1110 1165 11B0; D13A;D13A;1110 1165 11B1;D13A;1110 1165 11B1; D13B;D13B;1110 1165 11B2;D13B;1110 1165 11B2; D13C;D13C;1110 1165 11B3;D13C;1110 1165 11B3; D13D;D13D;1110 1165 11B4;D13D;1110 1165 11B4; D13E;D13E;1110 1165 11B5;D13E;1110 1165 11B5; D13F;D13F;1110 1165 11B6;D13F;1110 1165 11B6; D140;D140;1110 1165 11B7;D140;1110 1165 11B7; D141;D141;1110 1165 11B8;D141;1110 1165 11B8; D142;D142;1110 1165 11B9;D142;1110 1165 11B9; D143;D143;1110 1165 11BA;D143;1110 1165 11BA; D144;D144;1110 1165 11BB;D144;1110 1165 11BB; D145;D145;1110 1165 11BC;D145;1110 1165 11BC; D146;D146;1110 1165 11BD;D146;1110 1165 11BD; D147;D147;1110 1165 11BE;D147;1110 1165 11BE; D148;D148;1110 1165 11BF;D148;1110 1165 11BF; D149;D149;1110 1165 11C0;D149;1110 1165 11C0; D14A;D14A;1110 1165 11C1;D14A;1110 1165 11C1; D14B;D14B;1110 1165 11C2;D14B;1110 1165 11C2; D14C;D14C;1110 1166;D14C;1110 1166; D14D;D14D;1110 1166 11A8;D14D;1110 1166 11A8; D14E;D14E;1110 1166 11A9;D14E;1110 1166 11A9; D14F;D14F;1110 1166 11AA;D14F;1110 1166 11AA; D150;D150;1110 1166 11AB;D150;1110 1166 11AB; D151;D151;1110 1166 11AC;D151;1110 1166 11AC; D152;D152;1110 1166 11AD;D152;1110 1166 11AD; D153;D153;1110 1166 11AE;D153;1110 1166 11AE; D154;D154;1110 1166 11AF;D154;1110 1166 11AF; D155;D155;1110 1166 11B0;D155;1110 1166 11B0; D156;D156;1110 1166 11B1;D156;1110 1166 11B1; D157;D157;1110 1166 11B2;D157;1110 1166 11B2; D158;D158;1110 1166 11B3;D158;1110 1166 11B3; D159;D159;1110 1166 11B4;D159;1110 1166 11B4; D15A;D15A;1110 1166 11B5;D15A;1110 1166 11B5; D15B;D15B;1110 1166 11B6;D15B;1110 1166 11B6; D15C;D15C;1110 1166 11B7;D15C;1110 1166 11B7; D15D;D15D;1110 1166 11B8;D15D;1110 1166 11B8; D15E;D15E;1110 1166 11B9;D15E;1110 1166 11B9; D15F;D15F;1110 1166 11BA;D15F;1110 1166 11BA; D160;D160;1110 1166 11BB;D160;1110 1166 11BB; D161;D161;1110 1166 11BC;D161;1110 1166 11BC; D162;D162;1110 1166 11BD;D162;1110 1166 11BD; D163;D163;1110 1166 11BE;D163;1110 1166 11BE; D164;D164;1110 1166 11BF;D164;1110 1166 11BF; D165;D165;1110 1166 11C0;D165;1110 1166 11C0; D166;D166;1110 1166 11C1;D166;1110 1166 11C1; D167;D167;1110 1166 11C2;D167;1110 1166 11C2; D168;D168;1110 1167;D168;1110 1167; D169;D169;1110 1167 11A8;D169;1110 1167 11A8; D16A;D16A;1110 1167 11A9;D16A;1110 1167 11A9; D16B;D16B;1110 1167 11AA;D16B;1110 1167 11AA; D16C;D16C;1110 1167 11AB;D16C;1110 1167 11AB; D16D;D16D;1110 1167 11AC;D16D;1110 1167 11AC; D16E;D16E;1110 1167 11AD;D16E;1110 1167 11AD; D16F;D16F;1110 1167 11AE;D16F;1110 1167 11AE; D170;D170;1110 1167 11AF;D170;1110 1167 11AF; D171;D171;1110 1167 11B0;D171;1110 1167 11B0; D172;D172;1110 1167 11B1;D172;1110 1167 11B1; D173;D173;1110 1167 11B2;D173;1110 1167 11B2; D174;D174;1110 1167 11B3;D174;1110 1167 11B3; D175;D175;1110 1167 11B4;D175;1110 1167 11B4; D176;D176;1110 1167 11B5;D176;1110 1167 11B5; D177;D177;1110 1167 11B6;D177;1110 1167 11B6; D178;D178;1110 1167 11B7;D178;1110 1167 11B7; D179;D179;1110 1167 11B8;D179;1110 1167 11B8; D17A;D17A;1110 1167 11B9;D17A;1110 1167 11B9; D17B;D17B;1110 1167 11BA;D17B;1110 1167 11BA; D17C;D17C;1110 1167 11BB;D17C;1110 1167 11BB; D17D;D17D;1110 1167 11BC;D17D;1110 1167 11BC; D17E;D17E;1110 1167 11BD;D17E;1110 1167 11BD; D17F;D17F;1110 1167 11BE;D17F;1110 1167 11BE; D180;D180;1110 1167 11BF;D180;1110 1167 11BF; D181;D181;1110 1167 11C0;D181;1110 1167 11C0; D182;D182;1110 1167 11C1;D182;1110 1167 11C1; D183;D183;1110 1167 11C2;D183;1110 1167 11C2; D184;D184;1110 1168;D184;1110 1168; D185;D185;1110 1168 11A8;D185;1110 1168 11A8; D186;D186;1110 1168 11A9;D186;1110 1168 11A9; D187;D187;1110 1168 11AA;D187;1110 1168 11AA; D188;D188;1110 1168 11AB;D188;1110 1168 11AB; D189;D189;1110 1168 11AC;D189;1110 1168 11AC; D18A;D18A;1110 1168 11AD;D18A;1110 1168 11AD; D18B;D18B;1110 1168 11AE;D18B;1110 1168 11AE; D18C;D18C;1110 1168 11AF;D18C;1110 1168 11AF; D18D;D18D;1110 1168 11B0;D18D;1110 1168 11B0; D18E;D18E;1110 1168 11B1;D18E;1110 1168 11B1; D18F;D18F;1110 1168 11B2;D18F;1110 1168 11B2; D190;D190;1110 1168 11B3;D190;1110 1168 11B3; D191;D191;1110 1168 11B4;D191;1110 1168 11B4; D192;D192;1110 1168 11B5;D192;1110 1168 11B5; D193;D193;1110 1168 11B6;D193;1110 1168 11B6; D194;D194;1110 1168 11B7;D194;1110 1168 11B7; D195;D195;1110 1168 11B8;D195;1110 1168 11B8; D196;D196;1110 1168 11B9;D196;1110 1168 11B9; D197;D197;1110 1168 11BA;D197;1110 1168 11BA; D198;D198;1110 1168 11BB;D198;1110 1168 11BB; D199;D199;1110 1168 11BC;D199;1110 1168 11BC; D19A;D19A;1110 1168 11BD;D19A;1110 1168 11BD; D19B;D19B;1110 1168 11BE;D19B;1110 1168 11BE; D19C;D19C;1110 1168 11BF;D19C;1110 1168 11BF; D19D;D19D;1110 1168 11C0;D19D;1110 1168 11C0; D19E;D19E;1110 1168 11C1;D19E;1110 1168 11C1; D19F;D19F;1110 1168 11C2;D19F;1110 1168 11C2; D1A0;D1A0;1110 1169;D1A0;1110 1169; D1A1;D1A1;1110 1169 11A8;D1A1;1110 1169 11A8; D1A2;D1A2;1110 1169 11A9;D1A2;1110 1169 11A9; D1A3;D1A3;1110 1169 11AA;D1A3;1110 1169 11AA; D1A4;D1A4;1110 1169 11AB;D1A4;1110 1169 11AB; D1A5;D1A5;1110 1169 11AC;D1A5;1110 1169 11AC; D1A6;D1A6;1110 1169 11AD;D1A6;1110 1169 11AD; D1A7;D1A7;1110 1169 11AE;D1A7;1110 1169 11AE; D1A8;D1A8;1110 1169 11AF;D1A8;1110 1169 11AF; D1A9;D1A9;1110 1169 11B0;D1A9;1110 1169 11B0; D1AA;D1AA;1110 1169 11B1;D1AA;1110 1169 11B1; D1AB;D1AB;1110 1169 11B2;D1AB;1110 1169 11B2; D1AC;D1AC;1110 1169 11B3;D1AC;1110 1169 11B3; D1AD;D1AD;1110 1169 11B4;D1AD;1110 1169 11B4; D1AE;D1AE;1110 1169 11B5;D1AE;1110 1169 11B5; D1AF;D1AF;1110 1169 11B6;D1AF;1110 1169 11B6; D1B0;D1B0;1110 1169 11B7;D1B0;1110 1169 11B7; D1B1;D1B1;1110 1169 11B8;D1B1;1110 1169 11B8; D1B2;D1B2;1110 1169 11B9;D1B2;1110 1169 11B9; D1B3;D1B3;1110 1169 11BA;D1B3;1110 1169 11BA; D1B4;D1B4;1110 1169 11BB;D1B4;1110 1169 11BB; D1B5;D1B5;1110 1169 11BC;D1B5;1110 1169 11BC; D1B6;D1B6;1110 1169 11BD;D1B6;1110 1169 11BD; D1B7;D1B7;1110 1169 11BE;D1B7;1110 1169 11BE; D1B8;D1B8;1110 1169 11BF;D1B8;1110 1169 11BF; D1B9;D1B9;1110 1169 11C0;D1B9;1110 1169 11C0; D1BA;D1BA;1110 1169 11C1;D1BA;1110 1169 11C1; D1BB;D1BB;1110 1169 11C2;D1BB;1110 1169 11C2; D1BC;D1BC;1110 116A;D1BC;1110 116A; D1BD;D1BD;1110 116A 11A8;D1BD;1110 116A 11A8; D1BE;D1BE;1110 116A 11A9;D1BE;1110 116A 11A9; D1BF;D1BF;1110 116A 11AA;D1BF;1110 116A 11AA; D1C0;D1C0;1110 116A 11AB;D1C0;1110 116A 11AB; D1C1;D1C1;1110 116A 11AC;D1C1;1110 116A 11AC; D1C2;D1C2;1110 116A 11AD;D1C2;1110 116A 11AD; D1C3;D1C3;1110 116A 11AE;D1C3;1110 116A 11AE; D1C4;D1C4;1110 116A 11AF;D1C4;1110 116A 11AF; D1C5;D1C5;1110 116A 11B0;D1C5;1110 116A 11B0; D1C6;D1C6;1110 116A 11B1;D1C6;1110 116A 11B1; D1C7;D1C7;1110 116A 11B2;D1C7;1110 116A 11B2; D1C8;D1C8;1110 116A 11B3;D1C8;1110 116A 11B3; D1C9;D1C9;1110 116A 11B4;D1C9;1110 116A 11B4; D1CA;D1CA;1110 116A 11B5;D1CA;1110 116A 11B5; D1CB;D1CB;1110 116A 11B6;D1CB;1110 116A 11B6; D1CC;D1CC;1110 116A 11B7;D1CC;1110 116A 11B7; D1CD;D1CD;1110 116A 11B8;D1CD;1110 116A 11B8; D1CE;D1CE;1110 116A 11B9;D1CE;1110 116A 11B9; D1CF;D1CF;1110 116A 11BA;D1CF;1110 116A 11BA; D1D0;D1D0;1110 116A 11BB;D1D0;1110 116A 11BB; D1D1;D1D1;1110 116A 11BC;D1D1;1110 116A 11BC; D1D2;D1D2;1110 116A 11BD;D1D2;1110 116A 11BD; D1D3;D1D3;1110 116A 11BE;D1D3;1110 116A 11BE; D1D4;D1D4;1110 116A 11BF;D1D4;1110 116A 11BF; D1D5;D1D5;1110 116A 11C0;D1D5;1110 116A 11C0; D1D6;D1D6;1110 116A 11C1;D1D6;1110 116A 11C1; D1D7;D1D7;1110 116A 11C2;D1D7;1110 116A 11C2; D1D8;D1D8;1110 116B;D1D8;1110 116B; D1D9;D1D9;1110 116B 11A8;D1D9;1110 116B 11A8; D1DA;D1DA;1110 116B 11A9;D1DA;1110 116B 11A9; D1DB;D1DB;1110 116B 11AA;D1DB;1110 116B 11AA; D1DC;D1DC;1110 116B 11AB;D1DC;1110 116B 11AB; D1DD;D1DD;1110 116B 11AC;D1DD;1110 116B 11AC; D1DE;D1DE;1110 116B 11AD;D1DE;1110 116B 11AD; D1DF;D1DF;1110 116B 11AE;D1DF;1110 116B 11AE; D1E0;D1E0;1110 116B 11AF;D1E0;1110 116B 11AF; D1E1;D1E1;1110 116B 11B0;D1E1;1110 116B 11B0; D1E2;D1E2;1110 116B 11B1;D1E2;1110 116B 11B1; D1E3;D1E3;1110 116B 11B2;D1E3;1110 116B 11B2; D1E4;D1E4;1110 116B 11B3;D1E4;1110 116B 11B3; D1E5;D1E5;1110 116B 11B4;D1E5;1110 116B 11B4; D1E6;D1E6;1110 116B 11B5;D1E6;1110 116B 11B5; D1E7;D1E7;1110 116B 11B6;D1E7;1110 116B 11B6; D1E8;D1E8;1110 116B 11B7;D1E8;1110 116B 11B7; D1E9;D1E9;1110 116B 11B8;D1E9;1110 116B 11B8; D1EA;D1EA;1110 116B 11B9;D1EA;1110 116B 11B9; D1EB;D1EB;1110 116B 11BA;D1EB;1110 116B 11BA; D1EC;D1EC;1110 116B 11BB;D1EC;1110 116B 11BB; D1ED;D1ED;1110 116B 11BC;D1ED;1110 116B 11BC; D1EE;D1EE;1110 116B 11BD;D1EE;1110 116B 11BD; D1EF;D1EF;1110 116B 11BE;D1EF;1110 116B 11BE; D1F0;D1F0;1110 116B 11BF;D1F0;1110 116B 11BF; D1F1;D1F1;1110 116B 11C0;D1F1;1110 116B 11C0; D1F2;D1F2;1110 116B 11C1;D1F2;1110 116B 11C1; D1F3;D1F3;1110 116B 11C2;D1F3;1110 116B 11C2; D1F4;D1F4;1110 116C;D1F4;1110 116C; D1F5;D1F5;1110 116C 11A8;D1F5;1110 116C 11A8; D1F6;D1F6;1110 116C 11A9;D1F6;1110 116C 11A9; D1F7;D1F7;1110 116C 11AA;D1F7;1110 116C 11AA; D1F8;D1F8;1110 116C 11AB;D1F8;1110 116C 11AB; D1F9;D1F9;1110 116C 11AC;D1F9;1110 116C 11AC; D1FA;D1FA;1110 116C 11AD;D1FA;1110 116C 11AD; D1FB;D1FB;1110 116C 11AE;D1FB;1110 116C 11AE; D1FC;D1FC;1110 116C 11AF;D1FC;1110 116C 11AF; D1FD;D1FD;1110 116C 11B0;D1FD;1110 116C 11B0; D1FE;D1FE;1110 116C 11B1;D1FE;1110 116C 11B1; D1FF;D1FF;1110 116C 11B2;D1FF;1110 116C 11B2; D200;D200;1110 116C 11B3;D200;1110 116C 11B3; D201;D201;1110 116C 11B4;D201;1110 116C 11B4; D202;D202;1110 116C 11B5;D202;1110 116C 11B5; D203;D203;1110 116C 11B6;D203;1110 116C 11B6; D204;D204;1110 116C 11B7;D204;1110 116C 11B7; D205;D205;1110 116C 11B8;D205;1110 116C 11B8; D206;D206;1110 116C 11B9;D206;1110 116C 11B9; D207;D207;1110 116C 11BA;D207;1110 116C 11BA; D208;D208;1110 116C 11BB;D208;1110 116C 11BB; D209;D209;1110 116C 11BC;D209;1110 116C 11BC; D20A;D20A;1110 116C 11BD;D20A;1110 116C 11BD; D20B;D20B;1110 116C 11BE;D20B;1110 116C 11BE; D20C;D20C;1110 116C 11BF;D20C;1110 116C 11BF; D20D;D20D;1110 116C 11C0;D20D;1110 116C 11C0; D20E;D20E;1110 116C 11C1;D20E;1110 116C 11C1; D20F;D20F;1110 116C 11C2;D20F;1110 116C 11C2; D210;D210;1110 116D;D210;1110 116D; D211;D211;1110 116D 11A8;D211;1110 116D 11A8; D212;D212;1110 116D 11A9;D212;1110 116D 11A9; D213;D213;1110 116D 11AA;D213;1110 116D 11AA; D214;D214;1110 116D 11AB;D214;1110 116D 11AB; D215;D215;1110 116D 11AC;D215;1110 116D 11AC; D216;D216;1110 116D 11AD;D216;1110 116D 11AD; D217;D217;1110 116D 11AE;D217;1110 116D 11AE; D218;D218;1110 116D 11AF;D218;1110 116D 11AF; D219;D219;1110 116D 11B0;D219;1110 116D 11B0; D21A;D21A;1110 116D 11B1;D21A;1110 116D 11B1; D21B;D21B;1110 116D 11B2;D21B;1110 116D 11B2; D21C;D21C;1110 116D 11B3;D21C;1110 116D 11B3; D21D;D21D;1110 116D 11B4;D21D;1110 116D 11B4; D21E;D21E;1110 116D 11B5;D21E;1110 116D 11B5; D21F;D21F;1110 116D 11B6;D21F;1110 116D 11B6; D220;D220;1110 116D 11B7;D220;1110 116D 11B7; D221;D221;1110 116D 11B8;D221;1110 116D 11B8; D222;D222;1110 116D 11B9;D222;1110 116D 11B9; D223;D223;1110 116D 11BA;D223;1110 116D 11BA; D224;D224;1110 116D 11BB;D224;1110 116D 11BB; D225;D225;1110 116D 11BC;D225;1110 116D 11BC; D226;D226;1110 116D 11BD;D226;1110 116D 11BD; D227;D227;1110 116D 11BE;D227;1110 116D 11BE; D228;D228;1110 116D 11BF;D228;1110 116D 11BF; D229;D229;1110 116D 11C0;D229;1110 116D 11C0; D22A;D22A;1110 116D 11C1;D22A;1110 116D 11C1; D22B;D22B;1110 116D 11C2;D22B;1110 116D 11C2; D22C;D22C;1110 116E;D22C;1110 116E; D22D;D22D;1110 116E 11A8;D22D;1110 116E 11A8; D22E;D22E;1110 116E 11A9;D22E;1110 116E 11A9; D22F;D22F;1110 116E 11AA;D22F;1110 116E 11AA; D230;D230;1110 116E 11AB;D230;1110 116E 11AB; D231;D231;1110 116E 11AC;D231;1110 116E 11AC; D232;D232;1110 116E 11AD;D232;1110 116E 11AD; D233;D233;1110 116E 11AE;D233;1110 116E 11AE; D234;D234;1110 116E 11AF;D234;1110 116E 11AF; D235;D235;1110 116E 11B0;D235;1110 116E 11B0; D236;D236;1110 116E 11B1;D236;1110 116E 11B1; D237;D237;1110 116E 11B2;D237;1110 116E 11B2; D238;D238;1110 116E 11B3;D238;1110 116E 11B3; D239;D239;1110 116E 11B4;D239;1110 116E 11B4; D23A;D23A;1110 116E 11B5;D23A;1110 116E 11B5; D23B;D23B;1110 116E 11B6;D23B;1110 116E 11B6; D23C;D23C;1110 116E 11B7;D23C;1110 116E 11B7; D23D;D23D;1110 116E 11B8;D23D;1110 116E 11B8; D23E;D23E;1110 116E 11B9;D23E;1110 116E 11B9; D23F;D23F;1110 116E 11BA;D23F;1110 116E 11BA; D240;D240;1110 116E 11BB;D240;1110 116E 11BB; D241;D241;1110 116E 11BC;D241;1110 116E 11BC; D242;D242;1110 116E 11BD;D242;1110 116E 11BD; D243;D243;1110 116E 11BE;D243;1110 116E 11BE; D244;D244;1110 116E 11BF;D244;1110 116E 11BF; D245;D245;1110 116E 11C0;D245;1110 116E 11C0; D246;D246;1110 116E 11C1;D246;1110 116E 11C1; D247;D247;1110 116E 11C2;D247;1110 116E 11C2; D248;D248;1110 116F;D248;1110 116F; D249;D249;1110 116F 11A8;D249;1110 116F 11A8; D24A;D24A;1110 116F 11A9;D24A;1110 116F 11A9; D24B;D24B;1110 116F 11AA;D24B;1110 116F 11AA; D24C;D24C;1110 116F 11AB;D24C;1110 116F 11AB; D24D;D24D;1110 116F 11AC;D24D;1110 116F 11AC; D24E;D24E;1110 116F 11AD;D24E;1110 116F 11AD; D24F;D24F;1110 116F 11AE;D24F;1110 116F 11AE; D250;D250;1110 116F 11AF;D250;1110 116F 11AF; D251;D251;1110 116F 11B0;D251;1110 116F 11B0; D252;D252;1110 116F 11B1;D252;1110 116F 11B1; D253;D253;1110 116F 11B2;D253;1110 116F 11B2; D254;D254;1110 116F 11B3;D254;1110 116F 11B3; D255;D255;1110 116F 11B4;D255;1110 116F 11B4; D256;D256;1110 116F 11B5;D256;1110 116F 11B5; D257;D257;1110 116F 11B6;D257;1110 116F 11B6; D258;D258;1110 116F 11B7;D258;1110 116F 11B7; D259;D259;1110 116F 11B8;D259;1110 116F 11B8; D25A;D25A;1110 116F 11B9;D25A;1110 116F 11B9; D25B;D25B;1110 116F 11BA;D25B;1110 116F 11BA; D25C;D25C;1110 116F 11BB;D25C;1110 116F 11BB; D25D;D25D;1110 116F 11BC;D25D;1110 116F 11BC; D25E;D25E;1110 116F 11BD;D25E;1110 116F 11BD; D25F;D25F;1110 116F 11BE;D25F;1110 116F 11BE; D260;D260;1110 116F 11BF;D260;1110 116F 11BF; D261;D261;1110 116F 11C0;D261;1110 116F 11C0; D262;D262;1110 116F 11C1;D262;1110 116F 11C1; D263;D263;1110 116F 11C2;D263;1110 116F 11C2; D264;D264;1110 1170;D264;1110 1170; D265;D265;1110 1170 11A8;D265;1110 1170 11A8; D266;D266;1110 1170 11A9;D266;1110 1170 11A9; D267;D267;1110 1170 11AA;D267;1110 1170 11AA; D268;D268;1110 1170 11AB;D268;1110 1170 11AB; D269;D269;1110 1170 11AC;D269;1110 1170 11AC; D26A;D26A;1110 1170 11AD;D26A;1110 1170 11AD; D26B;D26B;1110 1170 11AE;D26B;1110 1170 11AE; D26C;D26C;1110 1170 11AF;D26C;1110 1170 11AF; D26D;D26D;1110 1170 11B0;D26D;1110 1170 11B0; D26E;D26E;1110 1170 11B1;D26E;1110 1170 11B1; D26F;D26F;1110 1170 11B2;D26F;1110 1170 11B2; D270;D270;1110 1170 11B3;D270;1110 1170 11B3; D271;D271;1110 1170 11B4;D271;1110 1170 11B4; D272;D272;1110 1170 11B5;D272;1110 1170 11B5; D273;D273;1110 1170 11B6;D273;1110 1170 11B6; D274;D274;1110 1170 11B7;D274;1110 1170 11B7; D275;D275;1110 1170 11B8;D275;1110 1170 11B8; D276;D276;1110 1170 11B9;D276;1110 1170 11B9; D277;D277;1110 1170 11BA;D277;1110 1170 11BA; D278;D278;1110 1170 11BB;D278;1110 1170 11BB; D279;D279;1110 1170 11BC;D279;1110 1170 11BC; D27A;D27A;1110 1170 11BD;D27A;1110 1170 11BD; D27B;D27B;1110 1170 11BE;D27B;1110 1170 11BE; D27C;D27C;1110 1170 11BF;D27C;1110 1170 11BF; D27D;D27D;1110 1170 11C0;D27D;1110 1170 11C0; D27E;D27E;1110 1170 11C1;D27E;1110 1170 11C1; D27F;D27F;1110 1170 11C2;D27F;1110 1170 11C2; D280;D280;1110 1171;D280;1110 1171; D281;D281;1110 1171 11A8;D281;1110 1171 11A8; D282;D282;1110 1171 11A9;D282;1110 1171 11A9; D283;D283;1110 1171 11AA;D283;1110 1171 11AA; D284;D284;1110 1171 11AB;D284;1110 1171 11AB; D285;D285;1110 1171 11AC;D285;1110 1171 11AC; D286;D286;1110 1171 11AD;D286;1110 1171 11AD; D287;D287;1110 1171 11AE;D287;1110 1171 11AE; D288;D288;1110 1171 11AF;D288;1110 1171 11AF; D289;D289;1110 1171 11B0;D289;1110 1171 11B0; D28A;D28A;1110 1171 11B1;D28A;1110 1171 11B1; D28B;D28B;1110 1171 11B2;D28B;1110 1171 11B2; D28C;D28C;1110 1171 11B3;D28C;1110 1171 11B3; D28D;D28D;1110 1171 11B4;D28D;1110 1171 11B4; D28E;D28E;1110 1171 11B5;D28E;1110 1171 11B5; D28F;D28F;1110 1171 11B6;D28F;1110 1171 11B6; D290;D290;1110 1171 11B7;D290;1110 1171 11B7; D291;D291;1110 1171 11B8;D291;1110 1171 11B8; D292;D292;1110 1171 11B9;D292;1110 1171 11B9; D293;D293;1110 1171 11BA;D293;1110 1171 11BA; D294;D294;1110 1171 11BB;D294;1110 1171 11BB; D295;D295;1110 1171 11BC;D295;1110 1171 11BC; D296;D296;1110 1171 11BD;D296;1110 1171 11BD; D297;D297;1110 1171 11BE;D297;1110 1171 11BE; D298;D298;1110 1171 11BF;D298;1110 1171 11BF; D299;D299;1110 1171 11C0;D299;1110 1171 11C0; D29A;D29A;1110 1171 11C1;D29A;1110 1171 11C1; D29B;D29B;1110 1171 11C2;D29B;1110 1171 11C2; D29C;D29C;1110 1172;D29C;1110 1172; D29D;D29D;1110 1172 11A8;D29D;1110 1172 11A8; D29E;D29E;1110 1172 11A9;D29E;1110 1172 11A9; D29F;D29F;1110 1172 11AA;D29F;1110 1172 11AA; D2A0;D2A0;1110 1172 11AB;D2A0;1110 1172 11AB; D2A1;D2A1;1110 1172 11AC;D2A1;1110 1172 11AC; D2A2;D2A2;1110 1172 11AD;D2A2;1110 1172 11AD; D2A3;D2A3;1110 1172 11AE;D2A3;1110 1172 11AE; D2A4;D2A4;1110 1172 11AF;D2A4;1110 1172 11AF; D2A5;D2A5;1110 1172 11B0;D2A5;1110 1172 11B0; D2A6;D2A6;1110 1172 11B1;D2A6;1110 1172 11B1; D2A7;D2A7;1110 1172 11B2;D2A7;1110 1172 11B2; D2A8;D2A8;1110 1172 11B3;D2A8;1110 1172 11B3; D2A9;D2A9;1110 1172 11B4;D2A9;1110 1172 11B4; D2AA;D2AA;1110 1172 11B5;D2AA;1110 1172 11B5; D2AB;D2AB;1110 1172 11B6;D2AB;1110 1172 11B6; D2AC;D2AC;1110 1172 11B7;D2AC;1110 1172 11B7; D2AD;D2AD;1110 1172 11B8;D2AD;1110 1172 11B8; D2AE;D2AE;1110 1172 11B9;D2AE;1110 1172 11B9; D2AF;D2AF;1110 1172 11BA;D2AF;1110 1172 11BA; D2B0;D2B0;1110 1172 11BB;D2B0;1110 1172 11BB; D2B1;D2B1;1110 1172 11BC;D2B1;1110 1172 11BC; D2B2;D2B2;1110 1172 11BD;D2B2;1110 1172 11BD; D2B3;D2B3;1110 1172 11BE;D2B3;1110 1172 11BE; D2B4;D2B4;1110 1172 11BF;D2B4;1110 1172 11BF; D2B5;D2B5;1110 1172 11C0;D2B5;1110 1172 11C0; D2B6;D2B6;1110 1172 11C1;D2B6;1110 1172 11C1; D2B7;D2B7;1110 1172 11C2;D2B7;1110 1172 11C2; D2B8;D2B8;1110 1173;D2B8;1110 1173; D2B9;D2B9;1110 1173 11A8;D2B9;1110 1173 11A8; D2BA;D2BA;1110 1173 11A9;D2BA;1110 1173 11A9; D2BB;D2BB;1110 1173 11AA;D2BB;1110 1173 11AA; D2BC;D2BC;1110 1173 11AB;D2BC;1110 1173 11AB; D2BD;D2BD;1110 1173 11AC;D2BD;1110 1173 11AC; D2BE;D2BE;1110 1173 11AD;D2BE;1110 1173 11AD; D2BF;D2BF;1110 1173 11AE;D2BF;1110 1173 11AE; D2C0;D2C0;1110 1173 11AF;D2C0;1110 1173 11AF; D2C1;D2C1;1110 1173 11B0;D2C1;1110 1173 11B0; D2C2;D2C2;1110 1173 11B1;D2C2;1110 1173 11B1; D2C3;D2C3;1110 1173 11B2;D2C3;1110 1173 11B2; D2C4;D2C4;1110 1173 11B3;D2C4;1110 1173 11B3; D2C5;D2C5;1110 1173 11B4;D2C5;1110 1173 11B4; D2C6;D2C6;1110 1173 11B5;D2C6;1110 1173 11B5; D2C7;D2C7;1110 1173 11B6;D2C7;1110 1173 11B6; D2C8;D2C8;1110 1173 11B7;D2C8;1110 1173 11B7; D2C9;D2C9;1110 1173 11B8;D2C9;1110 1173 11B8; D2CA;D2CA;1110 1173 11B9;D2CA;1110 1173 11B9; D2CB;D2CB;1110 1173 11BA;D2CB;1110 1173 11BA; D2CC;D2CC;1110 1173 11BB;D2CC;1110 1173 11BB; D2CD;D2CD;1110 1173 11BC;D2CD;1110 1173 11BC; D2CE;D2CE;1110 1173 11BD;D2CE;1110 1173 11BD; D2CF;D2CF;1110 1173 11BE;D2CF;1110 1173 11BE; D2D0;D2D0;1110 1173 11BF;D2D0;1110 1173 11BF; D2D1;D2D1;1110 1173 11C0;D2D1;1110 1173 11C0; D2D2;D2D2;1110 1173 11C1;D2D2;1110 1173 11C1; D2D3;D2D3;1110 1173 11C2;D2D3;1110 1173 11C2; D2D4;D2D4;1110 1174;D2D4;1110 1174; D2D5;D2D5;1110 1174 11A8;D2D5;1110 1174 11A8; D2D6;D2D6;1110 1174 11A9;D2D6;1110 1174 11A9; D2D7;D2D7;1110 1174 11AA;D2D7;1110 1174 11AA; D2D8;D2D8;1110 1174 11AB;D2D8;1110 1174 11AB; D2D9;D2D9;1110 1174 11AC;D2D9;1110 1174 11AC; D2DA;D2DA;1110 1174 11AD;D2DA;1110 1174 11AD; D2DB;D2DB;1110 1174 11AE;D2DB;1110 1174 11AE; D2DC;D2DC;1110 1174 11AF;D2DC;1110 1174 11AF; D2DD;D2DD;1110 1174 11B0;D2DD;1110 1174 11B0; D2DE;D2DE;1110 1174 11B1;D2DE;1110 1174 11B1; D2DF;D2DF;1110 1174 11B2;D2DF;1110 1174 11B2; D2E0;D2E0;1110 1174 11B3;D2E0;1110 1174 11B3; D2E1;D2E1;1110 1174 11B4;D2E1;1110 1174 11B4; D2E2;D2E2;1110 1174 11B5;D2E2;1110 1174 11B5; D2E3;D2E3;1110 1174 11B6;D2E3;1110 1174 11B6; D2E4;D2E4;1110 1174 11B7;D2E4;1110 1174 11B7; D2E5;D2E5;1110 1174 11B8;D2E5;1110 1174 11B8; D2E6;D2E6;1110 1174 11B9;D2E6;1110 1174 11B9; D2E7;D2E7;1110 1174 11BA;D2E7;1110 1174 11BA; D2E8;D2E8;1110 1174 11BB;D2E8;1110 1174 11BB; D2E9;D2E9;1110 1174 11BC;D2E9;1110 1174 11BC; D2EA;D2EA;1110 1174 11BD;D2EA;1110 1174 11BD; D2EB;D2EB;1110 1174 11BE;D2EB;1110 1174 11BE; D2EC;D2EC;1110 1174 11BF;D2EC;1110 1174 11BF; D2ED;D2ED;1110 1174 11C0;D2ED;1110 1174 11C0; D2EE;D2EE;1110 1174 11C1;D2EE;1110 1174 11C1; D2EF;D2EF;1110 1174 11C2;D2EF;1110 1174 11C2; D2F0;D2F0;1110 1175;D2F0;1110 1175; D2F1;D2F1;1110 1175 11A8;D2F1;1110 1175 11A8; D2F2;D2F2;1110 1175 11A9;D2F2;1110 1175 11A9; D2F3;D2F3;1110 1175 11AA;D2F3;1110 1175 11AA; D2F4;D2F4;1110 1175 11AB;D2F4;1110 1175 11AB; D2F5;D2F5;1110 1175 11AC;D2F5;1110 1175 11AC; D2F6;D2F6;1110 1175 11AD;D2F6;1110 1175 11AD; D2F7;D2F7;1110 1175 11AE;D2F7;1110 1175 11AE; D2F8;D2F8;1110 1175 11AF;D2F8;1110 1175 11AF; D2F9;D2F9;1110 1175 11B0;D2F9;1110 1175 11B0; D2FA;D2FA;1110 1175 11B1;D2FA;1110 1175 11B1; D2FB;D2FB;1110 1175 11B2;D2FB;1110 1175 11B2; D2FC;D2FC;1110 1175 11B3;D2FC;1110 1175 11B3; D2FD;D2FD;1110 1175 11B4;D2FD;1110 1175 11B4; D2FE;D2FE;1110 1175 11B5;D2FE;1110 1175 11B5; D2FF;D2FF;1110 1175 11B6;D2FF;1110 1175 11B6; D300;D300;1110 1175 11B7;D300;1110 1175 11B7; D301;D301;1110 1175 11B8;D301;1110 1175 11B8; D302;D302;1110 1175 11B9;D302;1110 1175 11B9; D303;D303;1110 1175 11BA;D303;1110 1175 11BA; D304;D304;1110 1175 11BB;D304;1110 1175 11BB; D305;D305;1110 1175 11BC;D305;1110 1175 11BC; D306;D306;1110 1175 11BD;D306;1110 1175 11BD; D307;D307;1110 1175 11BE;D307;1110 1175 11BE; D308;D308;1110 1175 11BF;D308;1110 1175 11BF; D309;D309;1110 1175 11C0;D309;1110 1175 11C0; D30A;D30A;1110 1175 11C1;D30A;1110 1175 11C1; D30B;D30B;1110 1175 11C2;D30B;1110 1175 11C2; D30C;D30C;1111 1161;D30C;1111 1161; D30D;D30D;1111 1161 11A8;D30D;1111 1161 11A8; D30E;D30E;1111 1161 11A9;D30E;1111 1161 11A9; D30F;D30F;1111 1161 11AA;D30F;1111 1161 11AA; D310;D310;1111 1161 11AB;D310;1111 1161 11AB; D311;D311;1111 1161 11AC;D311;1111 1161 11AC; D312;D312;1111 1161 11AD;D312;1111 1161 11AD; D313;D313;1111 1161 11AE;D313;1111 1161 11AE; D314;D314;1111 1161 11AF;D314;1111 1161 11AF; D315;D315;1111 1161 11B0;D315;1111 1161 11B0; D316;D316;1111 1161 11B1;D316;1111 1161 11B1; D317;D317;1111 1161 11B2;D317;1111 1161 11B2; D318;D318;1111 1161 11B3;D318;1111 1161 11B3; D319;D319;1111 1161 11B4;D319;1111 1161 11B4; D31A;D31A;1111 1161 11B5;D31A;1111 1161 11B5; D31B;D31B;1111 1161 11B6;D31B;1111 1161 11B6; D31C;D31C;1111 1161 11B7;D31C;1111 1161 11B7; D31D;D31D;1111 1161 11B8;D31D;1111 1161 11B8; D31E;D31E;1111 1161 11B9;D31E;1111 1161 11B9; D31F;D31F;1111 1161 11BA;D31F;1111 1161 11BA; D320;D320;1111 1161 11BB;D320;1111 1161 11BB; D321;D321;1111 1161 11BC;D321;1111 1161 11BC; D322;D322;1111 1161 11BD;D322;1111 1161 11BD; D323;D323;1111 1161 11BE;D323;1111 1161 11BE; D324;D324;1111 1161 11BF;D324;1111 1161 11BF; D325;D325;1111 1161 11C0;D325;1111 1161 11C0; D326;D326;1111 1161 11C1;D326;1111 1161 11C1; D327;D327;1111 1161 11C2;D327;1111 1161 11C2; D328;D328;1111 1162;D328;1111 1162; D329;D329;1111 1162 11A8;D329;1111 1162 11A8; D32A;D32A;1111 1162 11A9;D32A;1111 1162 11A9; D32B;D32B;1111 1162 11AA;D32B;1111 1162 11AA; D32C;D32C;1111 1162 11AB;D32C;1111 1162 11AB; D32D;D32D;1111 1162 11AC;D32D;1111 1162 11AC; D32E;D32E;1111 1162 11AD;D32E;1111 1162 11AD; D32F;D32F;1111 1162 11AE;D32F;1111 1162 11AE; D330;D330;1111 1162 11AF;D330;1111 1162 11AF; D331;D331;1111 1162 11B0;D331;1111 1162 11B0; D332;D332;1111 1162 11B1;D332;1111 1162 11B1; D333;D333;1111 1162 11B2;D333;1111 1162 11B2; D334;D334;1111 1162 11B3;D334;1111 1162 11B3; D335;D335;1111 1162 11B4;D335;1111 1162 11B4; D336;D336;1111 1162 11B5;D336;1111 1162 11B5; D337;D337;1111 1162 11B6;D337;1111 1162 11B6; D338;D338;1111 1162 11B7;D338;1111 1162 11B7; D339;D339;1111 1162 11B8;D339;1111 1162 11B8; D33A;D33A;1111 1162 11B9;D33A;1111 1162 11B9; D33B;D33B;1111 1162 11BA;D33B;1111 1162 11BA; D33C;D33C;1111 1162 11BB;D33C;1111 1162 11BB; D33D;D33D;1111 1162 11BC;D33D;1111 1162 11BC; D33E;D33E;1111 1162 11BD;D33E;1111 1162 11BD; D33F;D33F;1111 1162 11BE;D33F;1111 1162 11BE; D340;D340;1111 1162 11BF;D340;1111 1162 11BF; D341;D341;1111 1162 11C0;D341;1111 1162 11C0; D342;D342;1111 1162 11C1;D342;1111 1162 11C1; D343;D343;1111 1162 11C2;D343;1111 1162 11C2; D344;D344;1111 1163;D344;1111 1163; D345;D345;1111 1163 11A8;D345;1111 1163 11A8; D346;D346;1111 1163 11A9;D346;1111 1163 11A9; D347;D347;1111 1163 11AA;D347;1111 1163 11AA; D348;D348;1111 1163 11AB;D348;1111 1163 11AB; D349;D349;1111 1163 11AC;D349;1111 1163 11AC; D34A;D34A;1111 1163 11AD;D34A;1111 1163 11AD; D34B;D34B;1111 1163 11AE;D34B;1111 1163 11AE; D34C;D34C;1111 1163 11AF;D34C;1111 1163 11AF; D34D;D34D;1111 1163 11B0;D34D;1111 1163 11B0; D34E;D34E;1111 1163 11B1;D34E;1111 1163 11B1; D34F;D34F;1111 1163 11B2;D34F;1111 1163 11B2; D350;D350;1111 1163 11B3;D350;1111 1163 11B3; D351;D351;1111 1163 11B4;D351;1111 1163 11B4; D352;D352;1111 1163 11B5;D352;1111 1163 11B5; D353;D353;1111 1163 11B6;D353;1111 1163 11B6; D354;D354;1111 1163 11B7;D354;1111 1163 11B7; D355;D355;1111 1163 11B8;D355;1111 1163 11B8; D356;D356;1111 1163 11B9;D356;1111 1163 11B9; D357;D357;1111 1163 11BA;D357;1111 1163 11BA; D358;D358;1111 1163 11BB;D358;1111 1163 11BB; D359;D359;1111 1163 11BC;D359;1111 1163 11BC; D35A;D35A;1111 1163 11BD;D35A;1111 1163 11BD; D35B;D35B;1111 1163 11BE;D35B;1111 1163 11BE; D35C;D35C;1111 1163 11BF;D35C;1111 1163 11BF; D35D;D35D;1111 1163 11C0;D35D;1111 1163 11C0; D35E;D35E;1111 1163 11C1;D35E;1111 1163 11C1; D35F;D35F;1111 1163 11C2;D35F;1111 1163 11C2; D360;D360;1111 1164;D360;1111 1164; D361;D361;1111 1164 11A8;D361;1111 1164 11A8; D362;D362;1111 1164 11A9;D362;1111 1164 11A9; D363;D363;1111 1164 11AA;D363;1111 1164 11AA; D364;D364;1111 1164 11AB;D364;1111 1164 11AB; D365;D365;1111 1164 11AC;D365;1111 1164 11AC; D366;D366;1111 1164 11AD;D366;1111 1164 11AD; D367;D367;1111 1164 11AE;D367;1111 1164 11AE; D368;D368;1111 1164 11AF;D368;1111 1164 11AF; D369;D369;1111 1164 11B0;D369;1111 1164 11B0; D36A;D36A;1111 1164 11B1;D36A;1111 1164 11B1; D36B;D36B;1111 1164 11B2;D36B;1111 1164 11B2; D36C;D36C;1111 1164 11B3;D36C;1111 1164 11B3; D36D;D36D;1111 1164 11B4;D36D;1111 1164 11B4; D36E;D36E;1111 1164 11B5;D36E;1111 1164 11B5; D36F;D36F;1111 1164 11B6;D36F;1111 1164 11B6; D370;D370;1111 1164 11B7;D370;1111 1164 11B7; D371;D371;1111 1164 11B8;D371;1111 1164 11B8; D372;D372;1111 1164 11B9;D372;1111 1164 11B9; D373;D373;1111 1164 11BA;D373;1111 1164 11BA; D374;D374;1111 1164 11BB;D374;1111 1164 11BB; D375;D375;1111 1164 11BC;D375;1111 1164 11BC; D376;D376;1111 1164 11BD;D376;1111 1164 11BD; D377;D377;1111 1164 11BE;D377;1111 1164 11BE; D378;D378;1111 1164 11BF;D378;1111 1164 11BF; D379;D379;1111 1164 11C0;D379;1111 1164 11C0; D37A;D37A;1111 1164 11C1;D37A;1111 1164 11C1; D37B;D37B;1111 1164 11C2;D37B;1111 1164 11C2; D37C;D37C;1111 1165;D37C;1111 1165; D37D;D37D;1111 1165 11A8;D37D;1111 1165 11A8; D37E;D37E;1111 1165 11A9;D37E;1111 1165 11A9; D37F;D37F;1111 1165 11AA;D37F;1111 1165 11AA; D380;D380;1111 1165 11AB;D380;1111 1165 11AB; D381;D381;1111 1165 11AC;D381;1111 1165 11AC; D382;D382;1111 1165 11AD;D382;1111 1165 11AD; D383;D383;1111 1165 11AE;D383;1111 1165 11AE; D384;D384;1111 1165 11AF;D384;1111 1165 11AF; D385;D385;1111 1165 11B0;D385;1111 1165 11B0; D386;D386;1111 1165 11B1;D386;1111 1165 11B1; D387;D387;1111 1165 11B2;D387;1111 1165 11B2; D388;D388;1111 1165 11B3;D388;1111 1165 11B3; D389;D389;1111 1165 11B4;D389;1111 1165 11B4; D38A;D38A;1111 1165 11B5;D38A;1111 1165 11B5; D38B;D38B;1111 1165 11B6;D38B;1111 1165 11B6; D38C;D38C;1111 1165 11B7;D38C;1111 1165 11B7; D38D;D38D;1111 1165 11B8;D38D;1111 1165 11B8; D38E;D38E;1111 1165 11B9;D38E;1111 1165 11B9; D38F;D38F;1111 1165 11BA;D38F;1111 1165 11BA; D390;D390;1111 1165 11BB;D390;1111 1165 11BB; D391;D391;1111 1165 11BC;D391;1111 1165 11BC; D392;D392;1111 1165 11BD;D392;1111 1165 11BD; D393;D393;1111 1165 11BE;D393;1111 1165 11BE; D394;D394;1111 1165 11BF;D394;1111 1165 11BF; D395;D395;1111 1165 11C0;D395;1111 1165 11C0; D396;D396;1111 1165 11C1;D396;1111 1165 11C1; D397;D397;1111 1165 11C2;D397;1111 1165 11C2; D398;D398;1111 1166;D398;1111 1166; D399;D399;1111 1166 11A8;D399;1111 1166 11A8; D39A;D39A;1111 1166 11A9;D39A;1111 1166 11A9; D39B;D39B;1111 1166 11AA;D39B;1111 1166 11AA; D39C;D39C;1111 1166 11AB;D39C;1111 1166 11AB; D39D;D39D;1111 1166 11AC;D39D;1111 1166 11AC; D39E;D39E;1111 1166 11AD;D39E;1111 1166 11AD; D39F;D39F;1111 1166 11AE;D39F;1111 1166 11AE; D3A0;D3A0;1111 1166 11AF;D3A0;1111 1166 11AF; D3A1;D3A1;1111 1166 11B0;D3A1;1111 1166 11B0; D3A2;D3A2;1111 1166 11B1;D3A2;1111 1166 11B1; D3A3;D3A3;1111 1166 11B2;D3A3;1111 1166 11B2; D3A4;D3A4;1111 1166 11B3;D3A4;1111 1166 11B3; D3A5;D3A5;1111 1166 11B4;D3A5;1111 1166 11B4; D3A6;D3A6;1111 1166 11B5;D3A6;1111 1166 11B5; D3A7;D3A7;1111 1166 11B6;D3A7;1111 1166 11B6; D3A8;D3A8;1111 1166 11B7;D3A8;1111 1166 11B7; D3A9;D3A9;1111 1166 11B8;D3A9;1111 1166 11B8; D3AA;D3AA;1111 1166 11B9;D3AA;1111 1166 11B9; D3AB;D3AB;1111 1166 11BA;D3AB;1111 1166 11BA; D3AC;D3AC;1111 1166 11BB;D3AC;1111 1166 11BB; D3AD;D3AD;1111 1166 11BC;D3AD;1111 1166 11BC; D3AE;D3AE;1111 1166 11BD;D3AE;1111 1166 11BD; D3AF;D3AF;1111 1166 11BE;D3AF;1111 1166 11BE; D3B0;D3B0;1111 1166 11BF;D3B0;1111 1166 11BF; D3B1;D3B1;1111 1166 11C0;D3B1;1111 1166 11C0; D3B2;D3B2;1111 1166 11C1;D3B2;1111 1166 11C1; D3B3;D3B3;1111 1166 11C2;D3B3;1111 1166 11C2; D3B4;D3B4;1111 1167;D3B4;1111 1167; D3B5;D3B5;1111 1167 11A8;D3B5;1111 1167 11A8; D3B6;D3B6;1111 1167 11A9;D3B6;1111 1167 11A9; D3B7;D3B7;1111 1167 11AA;D3B7;1111 1167 11AA; D3B8;D3B8;1111 1167 11AB;D3B8;1111 1167 11AB; D3B9;D3B9;1111 1167 11AC;D3B9;1111 1167 11AC; D3BA;D3BA;1111 1167 11AD;D3BA;1111 1167 11AD; D3BB;D3BB;1111 1167 11AE;D3BB;1111 1167 11AE; D3BC;D3BC;1111 1167 11AF;D3BC;1111 1167 11AF; D3BD;D3BD;1111 1167 11B0;D3BD;1111 1167 11B0; D3BE;D3BE;1111 1167 11B1;D3BE;1111 1167 11B1; D3BF;D3BF;1111 1167 11B2;D3BF;1111 1167 11B2; D3C0;D3C0;1111 1167 11B3;D3C0;1111 1167 11B3; D3C1;D3C1;1111 1167 11B4;D3C1;1111 1167 11B4; D3C2;D3C2;1111 1167 11B5;D3C2;1111 1167 11B5; D3C3;D3C3;1111 1167 11B6;D3C3;1111 1167 11B6; D3C4;D3C4;1111 1167 11B7;D3C4;1111 1167 11B7; D3C5;D3C5;1111 1167 11B8;D3C5;1111 1167 11B8; D3C6;D3C6;1111 1167 11B9;D3C6;1111 1167 11B9; D3C7;D3C7;1111 1167 11BA;D3C7;1111 1167 11BA; D3C8;D3C8;1111 1167 11BB;D3C8;1111 1167 11BB; D3C9;D3C9;1111 1167 11BC;D3C9;1111 1167 11BC; D3CA;D3CA;1111 1167 11BD;D3CA;1111 1167 11BD; D3CB;D3CB;1111 1167 11BE;D3CB;1111 1167 11BE; D3CC;D3CC;1111 1167 11BF;D3CC;1111 1167 11BF; D3CD;D3CD;1111 1167 11C0;D3CD;1111 1167 11C0; D3CE;D3CE;1111 1167 11C1;D3CE;1111 1167 11C1; D3CF;D3CF;1111 1167 11C2;D3CF;1111 1167 11C2; D3D0;D3D0;1111 1168;D3D0;1111 1168; D3D1;D3D1;1111 1168 11A8;D3D1;1111 1168 11A8; D3D2;D3D2;1111 1168 11A9;D3D2;1111 1168 11A9; D3D3;D3D3;1111 1168 11AA;D3D3;1111 1168 11AA; D3D4;D3D4;1111 1168 11AB;D3D4;1111 1168 11AB; D3D5;D3D5;1111 1168 11AC;D3D5;1111 1168 11AC; D3D6;D3D6;1111 1168 11AD;D3D6;1111 1168 11AD; D3D7;D3D7;1111 1168 11AE;D3D7;1111 1168 11AE; D3D8;D3D8;1111 1168 11AF;D3D8;1111 1168 11AF; D3D9;D3D9;1111 1168 11B0;D3D9;1111 1168 11B0; D3DA;D3DA;1111 1168 11B1;D3DA;1111 1168 11B1; D3DB;D3DB;1111 1168 11B2;D3DB;1111 1168 11B2; D3DC;D3DC;1111 1168 11B3;D3DC;1111 1168 11B3; D3DD;D3DD;1111 1168 11B4;D3DD;1111 1168 11B4; D3DE;D3DE;1111 1168 11B5;D3DE;1111 1168 11B5; D3DF;D3DF;1111 1168 11B6;D3DF;1111 1168 11B6; D3E0;D3E0;1111 1168 11B7;D3E0;1111 1168 11B7; D3E1;D3E1;1111 1168 11B8;D3E1;1111 1168 11B8; D3E2;D3E2;1111 1168 11B9;D3E2;1111 1168 11B9; D3E3;D3E3;1111 1168 11BA;D3E3;1111 1168 11BA; D3E4;D3E4;1111 1168 11BB;D3E4;1111 1168 11BB; D3E5;D3E5;1111 1168 11BC;D3E5;1111 1168 11BC; D3E6;D3E6;1111 1168 11BD;D3E6;1111 1168 11BD; D3E7;D3E7;1111 1168 11BE;D3E7;1111 1168 11BE; D3E8;D3E8;1111 1168 11BF;D3E8;1111 1168 11BF; D3E9;D3E9;1111 1168 11C0;D3E9;1111 1168 11C0; D3EA;D3EA;1111 1168 11C1;D3EA;1111 1168 11C1; D3EB;D3EB;1111 1168 11C2;D3EB;1111 1168 11C2; D3EC;D3EC;1111 1169;D3EC;1111 1169; D3ED;D3ED;1111 1169 11A8;D3ED;1111 1169 11A8; D3EE;D3EE;1111 1169 11A9;D3EE;1111 1169 11A9; D3EF;D3EF;1111 1169 11AA;D3EF;1111 1169 11AA; D3F0;D3F0;1111 1169 11AB;D3F0;1111 1169 11AB; D3F1;D3F1;1111 1169 11AC;D3F1;1111 1169 11AC; D3F2;D3F2;1111 1169 11AD;D3F2;1111 1169 11AD; D3F3;D3F3;1111 1169 11AE;D3F3;1111 1169 11AE; D3F4;D3F4;1111 1169 11AF;D3F4;1111 1169 11AF; D3F5;D3F5;1111 1169 11B0;D3F5;1111 1169 11B0; D3F6;D3F6;1111 1169 11B1;D3F6;1111 1169 11B1; D3F7;D3F7;1111 1169 11B2;D3F7;1111 1169 11B2; D3F8;D3F8;1111 1169 11B3;D3F8;1111 1169 11B3; D3F9;D3F9;1111 1169 11B4;D3F9;1111 1169 11B4; D3FA;D3FA;1111 1169 11B5;D3FA;1111 1169 11B5; D3FB;D3FB;1111 1169 11B6;D3FB;1111 1169 11B6; D3FC;D3FC;1111 1169 11B7;D3FC;1111 1169 11B7; D3FD;D3FD;1111 1169 11B8;D3FD;1111 1169 11B8; D3FE;D3FE;1111 1169 11B9;D3FE;1111 1169 11B9; D3FF;D3FF;1111 1169 11BA;D3FF;1111 1169 11BA; D400;D400;1111 1169 11BB;D400;1111 1169 11BB; D401;D401;1111 1169 11BC;D401;1111 1169 11BC; D402;D402;1111 1169 11BD;D402;1111 1169 11BD; D403;D403;1111 1169 11BE;D403;1111 1169 11BE; D404;D404;1111 1169 11BF;D404;1111 1169 11BF; D405;D405;1111 1169 11C0;D405;1111 1169 11C0; D406;D406;1111 1169 11C1;D406;1111 1169 11C1; D407;D407;1111 1169 11C2;D407;1111 1169 11C2; D408;D408;1111 116A;D408;1111 116A; D409;D409;1111 116A 11A8;D409;1111 116A 11A8; D40A;D40A;1111 116A 11A9;D40A;1111 116A 11A9; D40B;D40B;1111 116A 11AA;D40B;1111 116A 11AA; D40C;D40C;1111 116A 11AB;D40C;1111 116A 11AB; D40D;D40D;1111 116A 11AC;D40D;1111 116A 11AC; D40E;D40E;1111 116A 11AD;D40E;1111 116A 11AD; D40F;D40F;1111 116A 11AE;D40F;1111 116A 11AE; D410;D410;1111 116A 11AF;D410;1111 116A 11AF; D411;D411;1111 116A 11B0;D411;1111 116A 11B0; D412;D412;1111 116A 11B1;D412;1111 116A 11B1; D413;D413;1111 116A 11B2;D413;1111 116A 11B2; D414;D414;1111 116A 11B3;D414;1111 116A 11B3; D415;D415;1111 116A 11B4;D415;1111 116A 11B4; D416;D416;1111 116A 11B5;D416;1111 116A 11B5; D417;D417;1111 116A 11B6;D417;1111 116A 11B6; D418;D418;1111 116A 11B7;D418;1111 116A 11B7; D419;D419;1111 116A 11B8;D419;1111 116A 11B8; D41A;D41A;1111 116A 11B9;D41A;1111 116A 11B9; D41B;D41B;1111 116A 11BA;D41B;1111 116A 11BA; D41C;D41C;1111 116A 11BB;D41C;1111 116A 11BB; D41D;D41D;1111 116A 11BC;D41D;1111 116A 11BC; D41E;D41E;1111 116A 11BD;D41E;1111 116A 11BD; D41F;D41F;1111 116A 11BE;D41F;1111 116A 11BE; D420;D420;1111 116A 11BF;D420;1111 116A 11BF; D421;D421;1111 116A 11C0;D421;1111 116A 11C0; D422;D422;1111 116A 11C1;D422;1111 116A 11C1; D423;D423;1111 116A 11C2;D423;1111 116A 11C2; D424;D424;1111 116B;D424;1111 116B; D425;D425;1111 116B 11A8;D425;1111 116B 11A8; D426;D426;1111 116B 11A9;D426;1111 116B 11A9; D427;D427;1111 116B 11AA;D427;1111 116B 11AA; D428;D428;1111 116B 11AB;D428;1111 116B 11AB; D429;D429;1111 116B 11AC;D429;1111 116B 11AC; D42A;D42A;1111 116B 11AD;D42A;1111 116B 11AD; D42B;D42B;1111 116B 11AE;D42B;1111 116B 11AE; D42C;D42C;1111 116B 11AF;D42C;1111 116B 11AF; D42D;D42D;1111 116B 11B0;D42D;1111 116B 11B0; D42E;D42E;1111 116B 11B1;D42E;1111 116B 11B1; D42F;D42F;1111 116B 11B2;D42F;1111 116B 11B2; D430;D430;1111 116B 11B3;D430;1111 116B 11B3; D431;D431;1111 116B 11B4;D431;1111 116B 11B4; D432;D432;1111 116B 11B5;D432;1111 116B 11B5; D433;D433;1111 116B 11B6;D433;1111 116B 11B6; D434;D434;1111 116B 11B7;D434;1111 116B 11B7; D435;D435;1111 116B 11B8;D435;1111 116B 11B8; D436;D436;1111 116B 11B9;D436;1111 116B 11B9; D437;D437;1111 116B 11BA;D437;1111 116B 11BA; D438;D438;1111 116B 11BB;D438;1111 116B 11BB; D439;D439;1111 116B 11BC;D439;1111 116B 11BC; D43A;D43A;1111 116B 11BD;D43A;1111 116B 11BD; D43B;D43B;1111 116B 11BE;D43B;1111 116B 11BE; D43C;D43C;1111 116B 11BF;D43C;1111 116B 11BF; D43D;D43D;1111 116B 11C0;D43D;1111 116B 11C0; D43E;D43E;1111 116B 11C1;D43E;1111 116B 11C1; D43F;D43F;1111 116B 11C2;D43F;1111 116B 11C2; D440;D440;1111 116C;D440;1111 116C; D441;D441;1111 116C 11A8;D441;1111 116C 11A8; D442;D442;1111 116C 11A9;D442;1111 116C 11A9; D443;D443;1111 116C 11AA;D443;1111 116C 11AA; D444;D444;1111 116C 11AB;D444;1111 116C 11AB; D445;D445;1111 116C 11AC;D445;1111 116C 11AC; D446;D446;1111 116C 11AD;D446;1111 116C 11AD; D447;D447;1111 116C 11AE;D447;1111 116C 11AE; D448;D448;1111 116C 11AF;D448;1111 116C 11AF; D449;D449;1111 116C 11B0;D449;1111 116C 11B0; D44A;D44A;1111 116C 11B1;D44A;1111 116C 11B1; D44B;D44B;1111 116C 11B2;D44B;1111 116C 11B2; D44C;D44C;1111 116C 11B3;D44C;1111 116C 11B3; D44D;D44D;1111 116C 11B4;D44D;1111 116C 11B4; D44E;D44E;1111 116C 11B5;D44E;1111 116C 11B5; D44F;D44F;1111 116C 11B6;D44F;1111 116C 11B6; D450;D450;1111 116C 11B7;D450;1111 116C 11B7; D451;D451;1111 116C 11B8;D451;1111 116C 11B8; D452;D452;1111 116C 11B9;D452;1111 116C 11B9; D453;D453;1111 116C 11BA;D453;1111 116C 11BA; D454;D454;1111 116C 11BB;D454;1111 116C 11BB; D455;D455;1111 116C 11BC;D455;1111 116C 11BC; D456;D456;1111 116C 11BD;D456;1111 116C 11BD; D457;D457;1111 116C 11BE;D457;1111 116C 11BE; D458;D458;1111 116C 11BF;D458;1111 116C 11BF; D459;D459;1111 116C 11C0;D459;1111 116C 11C0; D45A;D45A;1111 116C 11C1;D45A;1111 116C 11C1; D45B;D45B;1111 116C 11C2;D45B;1111 116C 11C2; D45C;D45C;1111 116D;D45C;1111 116D; D45D;D45D;1111 116D 11A8;D45D;1111 116D 11A8; D45E;D45E;1111 116D 11A9;D45E;1111 116D 11A9; D45F;D45F;1111 116D 11AA;D45F;1111 116D 11AA; D460;D460;1111 116D 11AB;D460;1111 116D 11AB; D461;D461;1111 116D 11AC;D461;1111 116D 11AC; D462;D462;1111 116D 11AD;D462;1111 116D 11AD; D463;D463;1111 116D 11AE;D463;1111 116D 11AE; D464;D464;1111 116D 11AF;D464;1111 116D 11AF; D465;D465;1111 116D 11B0;D465;1111 116D 11B0; D466;D466;1111 116D 11B1;D466;1111 116D 11B1; D467;D467;1111 116D 11B2;D467;1111 116D 11B2; D468;D468;1111 116D 11B3;D468;1111 116D 11B3; D469;D469;1111 116D 11B4;D469;1111 116D 11B4; D46A;D46A;1111 116D 11B5;D46A;1111 116D 11B5; D46B;D46B;1111 116D 11B6;D46B;1111 116D 11B6; D46C;D46C;1111 116D 11B7;D46C;1111 116D 11B7; D46D;D46D;1111 116D 11B8;D46D;1111 116D 11B8; D46E;D46E;1111 116D 11B9;D46E;1111 116D 11B9; D46F;D46F;1111 116D 11BA;D46F;1111 116D 11BA; D470;D470;1111 116D 11BB;D470;1111 116D 11BB; D471;D471;1111 116D 11BC;D471;1111 116D 11BC; D472;D472;1111 116D 11BD;D472;1111 116D 11BD; D473;D473;1111 116D 11BE;D473;1111 116D 11BE; D474;D474;1111 116D 11BF;D474;1111 116D 11BF; D475;D475;1111 116D 11C0;D475;1111 116D 11C0; D476;D476;1111 116D 11C1;D476;1111 116D 11C1; D477;D477;1111 116D 11C2;D477;1111 116D 11C2; D478;D478;1111 116E;D478;1111 116E; D479;D479;1111 116E 11A8;D479;1111 116E 11A8; D47A;D47A;1111 116E 11A9;D47A;1111 116E 11A9; D47B;D47B;1111 116E 11AA;D47B;1111 116E 11AA; D47C;D47C;1111 116E 11AB;D47C;1111 116E 11AB; D47D;D47D;1111 116E 11AC;D47D;1111 116E 11AC; D47E;D47E;1111 116E 11AD;D47E;1111 116E 11AD; D47F;D47F;1111 116E 11AE;D47F;1111 116E 11AE; D480;D480;1111 116E 11AF;D480;1111 116E 11AF; D481;D481;1111 116E 11B0;D481;1111 116E 11B0; D482;D482;1111 116E 11B1;D482;1111 116E 11B1; D483;D483;1111 116E 11B2;D483;1111 116E 11B2; D484;D484;1111 116E 11B3;D484;1111 116E 11B3; D485;D485;1111 116E 11B4;D485;1111 116E 11B4; D486;D486;1111 116E 11B5;D486;1111 116E 11B5; D487;D487;1111 116E 11B6;D487;1111 116E 11B6; D488;D488;1111 116E 11B7;D488;1111 116E 11B7; D489;D489;1111 116E 11B8;D489;1111 116E 11B8; D48A;D48A;1111 116E 11B9;D48A;1111 116E 11B9; D48B;D48B;1111 116E 11BA;D48B;1111 116E 11BA; D48C;D48C;1111 116E 11BB;D48C;1111 116E 11BB; D48D;D48D;1111 116E 11BC;D48D;1111 116E 11BC; D48E;D48E;1111 116E 11BD;D48E;1111 116E 11BD; D48F;D48F;1111 116E 11BE;D48F;1111 116E 11BE; D490;D490;1111 116E 11BF;D490;1111 116E 11BF; D491;D491;1111 116E 11C0;D491;1111 116E 11C0; D492;D492;1111 116E 11C1;D492;1111 116E 11C1; D493;D493;1111 116E 11C2;D493;1111 116E 11C2; D494;D494;1111 116F;D494;1111 116F; D495;D495;1111 116F 11A8;D495;1111 116F 11A8; D496;D496;1111 116F 11A9;D496;1111 116F 11A9; D497;D497;1111 116F 11AA;D497;1111 116F 11AA; D498;D498;1111 116F 11AB;D498;1111 116F 11AB; D499;D499;1111 116F 11AC;D499;1111 116F 11AC; D49A;D49A;1111 116F 11AD;D49A;1111 116F 11AD; D49B;D49B;1111 116F 11AE;D49B;1111 116F 11AE; D49C;D49C;1111 116F 11AF;D49C;1111 116F 11AF; D49D;D49D;1111 116F 11B0;D49D;1111 116F 11B0; D49E;D49E;1111 116F 11B1;D49E;1111 116F 11B1; D49F;D49F;1111 116F 11B2;D49F;1111 116F 11B2; D4A0;D4A0;1111 116F 11B3;D4A0;1111 116F 11B3; D4A1;D4A1;1111 116F 11B4;D4A1;1111 116F 11B4; D4A2;D4A2;1111 116F 11B5;D4A2;1111 116F 11B5; D4A3;D4A3;1111 116F 11B6;D4A3;1111 116F 11B6; D4A4;D4A4;1111 116F 11B7;D4A4;1111 116F 11B7; D4A5;D4A5;1111 116F 11B8;D4A5;1111 116F 11B8; D4A6;D4A6;1111 116F 11B9;D4A6;1111 116F 11B9; D4A7;D4A7;1111 116F 11BA;D4A7;1111 116F 11BA; D4A8;D4A8;1111 116F 11BB;D4A8;1111 116F 11BB; D4A9;D4A9;1111 116F 11BC;D4A9;1111 116F 11BC; D4AA;D4AA;1111 116F 11BD;D4AA;1111 116F 11BD; D4AB;D4AB;1111 116F 11BE;D4AB;1111 116F 11BE; D4AC;D4AC;1111 116F 11BF;D4AC;1111 116F 11BF; D4AD;D4AD;1111 116F 11C0;D4AD;1111 116F 11C0; D4AE;D4AE;1111 116F 11C1;D4AE;1111 116F 11C1; D4AF;D4AF;1111 116F 11C2;D4AF;1111 116F 11C2; D4B0;D4B0;1111 1170;D4B0;1111 1170; D4B1;D4B1;1111 1170 11A8;D4B1;1111 1170 11A8; D4B2;D4B2;1111 1170 11A9;D4B2;1111 1170 11A9; D4B3;D4B3;1111 1170 11AA;D4B3;1111 1170 11AA; D4B4;D4B4;1111 1170 11AB;D4B4;1111 1170 11AB; D4B5;D4B5;1111 1170 11AC;D4B5;1111 1170 11AC; D4B6;D4B6;1111 1170 11AD;D4B6;1111 1170 11AD; D4B7;D4B7;1111 1170 11AE;D4B7;1111 1170 11AE; D4B8;D4B8;1111 1170 11AF;D4B8;1111 1170 11AF; D4B9;D4B9;1111 1170 11B0;D4B9;1111 1170 11B0; D4BA;D4BA;1111 1170 11B1;D4BA;1111 1170 11B1; D4BB;D4BB;1111 1170 11B2;D4BB;1111 1170 11B2; D4BC;D4BC;1111 1170 11B3;D4BC;1111 1170 11B3; D4BD;D4BD;1111 1170 11B4;D4BD;1111 1170 11B4; D4BE;D4BE;1111 1170 11B5;D4BE;1111 1170 11B5; D4BF;D4BF;1111 1170 11B6;D4BF;1111 1170 11B6; D4C0;D4C0;1111 1170 11B7;D4C0;1111 1170 11B7; D4C1;D4C1;1111 1170 11B8;D4C1;1111 1170 11B8; D4C2;D4C2;1111 1170 11B9;D4C2;1111 1170 11B9; D4C3;D4C3;1111 1170 11BA;D4C3;1111 1170 11BA; D4C4;D4C4;1111 1170 11BB;D4C4;1111 1170 11BB; D4C5;D4C5;1111 1170 11BC;D4C5;1111 1170 11BC; D4C6;D4C6;1111 1170 11BD;D4C6;1111 1170 11BD; D4C7;D4C7;1111 1170 11BE;D4C7;1111 1170 11BE; D4C8;D4C8;1111 1170 11BF;D4C8;1111 1170 11BF; D4C9;D4C9;1111 1170 11C0;D4C9;1111 1170 11C0; D4CA;D4CA;1111 1170 11C1;D4CA;1111 1170 11C1; D4CB;D4CB;1111 1170 11C2;D4CB;1111 1170 11C2; D4CC;D4CC;1111 1171;D4CC;1111 1171; D4CD;D4CD;1111 1171 11A8;D4CD;1111 1171 11A8; D4CE;D4CE;1111 1171 11A9;D4CE;1111 1171 11A9; D4CF;D4CF;1111 1171 11AA;D4CF;1111 1171 11AA; D4D0;D4D0;1111 1171 11AB;D4D0;1111 1171 11AB; D4D1;D4D1;1111 1171 11AC;D4D1;1111 1171 11AC; D4D2;D4D2;1111 1171 11AD;D4D2;1111 1171 11AD; D4D3;D4D3;1111 1171 11AE;D4D3;1111 1171 11AE; D4D4;D4D4;1111 1171 11AF;D4D4;1111 1171 11AF; D4D5;D4D5;1111 1171 11B0;D4D5;1111 1171 11B0; D4D6;D4D6;1111 1171 11B1;D4D6;1111 1171 11B1; D4D7;D4D7;1111 1171 11B2;D4D7;1111 1171 11B2; D4D8;D4D8;1111 1171 11B3;D4D8;1111 1171 11B3; D4D9;D4D9;1111 1171 11B4;D4D9;1111 1171 11B4; D4DA;D4DA;1111 1171 11B5;D4DA;1111 1171 11B5; D4DB;D4DB;1111 1171 11B6;D4DB;1111 1171 11B6; D4DC;D4DC;1111 1171 11B7;D4DC;1111 1171 11B7; D4DD;D4DD;1111 1171 11B8;D4DD;1111 1171 11B8; D4DE;D4DE;1111 1171 11B9;D4DE;1111 1171 11B9; D4DF;D4DF;1111 1171 11BA;D4DF;1111 1171 11BA; D4E0;D4E0;1111 1171 11BB;D4E0;1111 1171 11BB; D4E1;D4E1;1111 1171 11BC;D4E1;1111 1171 11BC; D4E2;D4E2;1111 1171 11BD;D4E2;1111 1171 11BD; D4E3;D4E3;1111 1171 11BE;D4E3;1111 1171 11BE; D4E4;D4E4;1111 1171 11BF;D4E4;1111 1171 11BF; D4E5;D4E5;1111 1171 11C0;D4E5;1111 1171 11C0; D4E6;D4E6;1111 1171 11C1;D4E6;1111 1171 11C1; D4E7;D4E7;1111 1171 11C2;D4E7;1111 1171 11C2; D4E8;D4E8;1111 1172;D4E8;1111 1172; D4E9;D4E9;1111 1172 11A8;D4E9;1111 1172 11A8; D4EA;D4EA;1111 1172 11A9;D4EA;1111 1172 11A9; D4EB;D4EB;1111 1172 11AA;D4EB;1111 1172 11AA; D4EC;D4EC;1111 1172 11AB;D4EC;1111 1172 11AB; D4ED;D4ED;1111 1172 11AC;D4ED;1111 1172 11AC; D4EE;D4EE;1111 1172 11AD;D4EE;1111 1172 11AD; D4EF;D4EF;1111 1172 11AE;D4EF;1111 1172 11AE; D4F0;D4F0;1111 1172 11AF;D4F0;1111 1172 11AF; D4F1;D4F1;1111 1172 11B0;D4F1;1111 1172 11B0; D4F2;D4F2;1111 1172 11B1;D4F2;1111 1172 11B1; D4F3;D4F3;1111 1172 11B2;D4F3;1111 1172 11B2; D4F4;D4F4;1111 1172 11B3;D4F4;1111 1172 11B3; D4F5;D4F5;1111 1172 11B4;D4F5;1111 1172 11B4; D4F6;D4F6;1111 1172 11B5;D4F6;1111 1172 11B5; D4F7;D4F7;1111 1172 11B6;D4F7;1111 1172 11B6; D4F8;D4F8;1111 1172 11B7;D4F8;1111 1172 11B7; D4F9;D4F9;1111 1172 11B8;D4F9;1111 1172 11B8; D4FA;D4FA;1111 1172 11B9;D4FA;1111 1172 11B9; D4FB;D4FB;1111 1172 11BA;D4FB;1111 1172 11BA; D4FC;D4FC;1111 1172 11BB;D4FC;1111 1172 11BB; D4FD;D4FD;1111 1172 11BC;D4FD;1111 1172 11BC; D4FE;D4FE;1111 1172 11BD;D4FE;1111 1172 11BD; D4FF;D4FF;1111 1172 11BE;D4FF;1111 1172 11BE; D500;D500;1111 1172 11BF;D500;1111 1172 11BF; D501;D501;1111 1172 11C0;D501;1111 1172 11C0; D502;D502;1111 1172 11C1;D502;1111 1172 11C1; D503;D503;1111 1172 11C2;D503;1111 1172 11C2; D504;D504;1111 1173;D504;1111 1173; D505;D505;1111 1173 11A8;D505;1111 1173 11A8; D506;D506;1111 1173 11A9;D506;1111 1173 11A9; D507;D507;1111 1173 11AA;D507;1111 1173 11AA; D508;D508;1111 1173 11AB;D508;1111 1173 11AB; D509;D509;1111 1173 11AC;D509;1111 1173 11AC; D50A;D50A;1111 1173 11AD;D50A;1111 1173 11AD; D50B;D50B;1111 1173 11AE;D50B;1111 1173 11AE; D50C;D50C;1111 1173 11AF;D50C;1111 1173 11AF; D50D;D50D;1111 1173 11B0;D50D;1111 1173 11B0; D50E;D50E;1111 1173 11B1;D50E;1111 1173 11B1; D50F;D50F;1111 1173 11B2;D50F;1111 1173 11B2; D510;D510;1111 1173 11B3;D510;1111 1173 11B3; D511;D511;1111 1173 11B4;D511;1111 1173 11B4; D512;D512;1111 1173 11B5;D512;1111 1173 11B5; D513;D513;1111 1173 11B6;D513;1111 1173 11B6; D514;D514;1111 1173 11B7;D514;1111 1173 11B7; D515;D515;1111 1173 11B8;D515;1111 1173 11B8; D516;D516;1111 1173 11B9;D516;1111 1173 11B9; D517;D517;1111 1173 11BA;D517;1111 1173 11BA; D518;D518;1111 1173 11BB;D518;1111 1173 11BB; D519;D519;1111 1173 11BC;D519;1111 1173 11BC; D51A;D51A;1111 1173 11BD;D51A;1111 1173 11BD; D51B;D51B;1111 1173 11BE;D51B;1111 1173 11BE; D51C;D51C;1111 1173 11BF;D51C;1111 1173 11BF; D51D;D51D;1111 1173 11C0;D51D;1111 1173 11C0; D51E;D51E;1111 1173 11C1;D51E;1111 1173 11C1; D51F;D51F;1111 1173 11C2;D51F;1111 1173 11C2; D520;D520;1111 1174;D520;1111 1174; D521;D521;1111 1174 11A8;D521;1111 1174 11A8; D522;D522;1111 1174 11A9;D522;1111 1174 11A9; D523;D523;1111 1174 11AA;D523;1111 1174 11AA; D524;D524;1111 1174 11AB;D524;1111 1174 11AB; D525;D525;1111 1174 11AC;D525;1111 1174 11AC; D526;D526;1111 1174 11AD;D526;1111 1174 11AD; D527;D527;1111 1174 11AE;D527;1111 1174 11AE; D528;D528;1111 1174 11AF;D528;1111 1174 11AF; D529;D529;1111 1174 11B0;D529;1111 1174 11B0; D52A;D52A;1111 1174 11B1;D52A;1111 1174 11B1; D52B;D52B;1111 1174 11B2;D52B;1111 1174 11B2; D52C;D52C;1111 1174 11B3;D52C;1111 1174 11B3; D52D;D52D;1111 1174 11B4;D52D;1111 1174 11B4; D52E;D52E;1111 1174 11B5;D52E;1111 1174 11B5; D52F;D52F;1111 1174 11B6;D52F;1111 1174 11B6; D530;D530;1111 1174 11B7;D530;1111 1174 11B7; D531;D531;1111 1174 11B8;D531;1111 1174 11B8; D532;D532;1111 1174 11B9;D532;1111 1174 11B9; D533;D533;1111 1174 11BA;D533;1111 1174 11BA; D534;D534;1111 1174 11BB;D534;1111 1174 11BB; D535;D535;1111 1174 11BC;D535;1111 1174 11BC; D536;D536;1111 1174 11BD;D536;1111 1174 11BD; D537;D537;1111 1174 11BE;D537;1111 1174 11BE; D538;D538;1111 1174 11BF;D538;1111 1174 11BF; D539;D539;1111 1174 11C0;D539;1111 1174 11C0; D53A;D53A;1111 1174 11C1;D53A;1111 1174 11C1; D53B;D53B;1111 1174 11C2;D53B;1111 1174 11C2; D53C;D53C;1111 1175;D53C;1111 1175; D53D;D53D;1111 1175 11A8;D53D;1111 1175 11A8; D53E;D53E;1111 1175 11A9;D53E;1111 1175 11A9; D53F;D53F;1111 1175 11AA;D53F;1111 1175 11AA; D540;D540;1111 1175 11AB;D540;1111 1175 11AB; D541;D541;1111 1175 11AC;D541;1111 1175 11AC; D542;D542;1111 1175 11AD;D542;1111 1175 11AD; D543;D543;1111 1175 11AE;D543;1111 1175 11AE; D544;D544;1111 1175 11AF;D544;1111 1175 11AF; D545;D545;1111 1175 11B0;D545;1111 1175 11B0; D546;D546;1111 1175 11B1;D546;1111 1175 11B1; D547;D547;1111 1175 11B2;D547;1111 1175 11B2; D548;D548;1111 1175 11B3;D548;1111 1175 11B3; D549;D549;1111 1175 11B4;D549;1111 1175 11B4; D54A;D54A;1111 1175 11B5;D54A;1111 1175 11B5; D54B;D54B;1111 1175 11B6;D54B;1111 1175 11B6; D54C;D54C;1111 1175 11B7;D54C;1111 1175 11B7; D54D;D54D;1111 1175 11B8;D54D;1111 1175 11B8; D54E;D54E;1111 1175 11B9;D54E;1111 1175 11B9; D54F;D54F;1111 1175 11BA;D54F;1111 1175 11BA; D550;D550;1111 1175 11BB;D550;1111 1175 11BB; D551;D551;1111 1175 11BC;D551;1111 1175 11BC; D552;D552;1111 1175 11BD;D552;1111 1175 11BD; D553;D553;1111 1175 11BE;D553;1111 1175 11BE; D554;D554;1111 1175 11BF;D554;1111 1175 11BF; D555;D555;1111 1175 11C0;D555;1111 1175 11C0; D556;D556;1111 1175 11C1;D556;1111 1175 11C1; D557;D557;1111 1175 11C2;D557;1111 1175 11C2; D558;D558;1112 1161;D558;1112 1161; D559;D559;1112 1161 11A8;D559;1112 1161 11A8; D55A;D55A;1112 1161 11A9;D55A;1112 1161 11A9; D55B;D55B;1112 1161 11AA;D55B;1112 1161 11AA; D55C;D55C;1112 1161 11AB;D55C;1112 1161 11AB; D55D;D55D;1112 1161 11AC;D55D;1112 1161 11AC; D55E;D55E;1112 1161 11AD;D55E;1112 1161 11AD; D55F;D55F;1112 1161 11AE;D55F;1112 1161 11AE; D560;D560;1112 1161 11AF;D560;1112 1161 11AF; D561;D561;1112 1161 11B0;D561;1112 1161 11B0; D562;D562;1112 1161 11B1;D562;1112 1161 11B1; D563;D563;1112 1161 11B2;D563;1112 1161 11B2; D564;D564;1112 1161 11B3;D564;1112 1161 11B3; D565;D565;1112 1161 11B4;D565;1112 1161 11B4; D566;D566;1112 1161 11B5;D566;1112 1161 11B5; D567;D567;1112 1161 11B6;D567;1112 1161 11B6; D568;D568;1112 1161 11B7;D568;1112 1161 11B7; D569;D569;1112 1161 11B8;D569;1112 1161 11B8; D56A;D56A;1112 1161 11B9;D56A;1112 1161 11B9; D56B;D56B;1112 1161 11BA;D56B;1112 1161 11BA; D56C;D56C;1112 1161 11BB;D56C;1112 1161 11BB; D56D;D56D;1112 1161 11BC;D56D;1112 1161 11BC; D56E;D56E;1112 1161 11BD;D56E;1112 1161 11BD; D56F;D56F;1112 1161 11BE;D56F;1112 1161 11BE; D570;D570;1112 1161 11BF;D570;1112 1161 11BF; D571;D571;1112 1161 11C0;D571;1112 1161 11C0; D572;D572;1112 1161 11C1;D572;1112 1161 11C1; D573;D573;1112 1161 11C2;D573;1112 1161 11C2; D574;D574;1112 1162;D574;1112 1162; D575;D575;1112 1162 11A8;D575;1112 1162 11A8; D576;D576;1112 1162 11A9;D576;1112 1162 11A9; D577;D577;1112 1162 11AA;D577;1112 1162 11AA; D578;D578;1112 1162 11AB;D578;1112 1162 11AB; D579;D579;1112 1162 11AC;D579;1112 1162 11AC; D57A;D57A;1112 1162 11AD;D57A;1112 1162 11AD; D57B;D57B;1112 1162 11AE;D57B;1112 1162 11AE; D57C;D57C;1112 1162 11AF;D57C;1112 1162 11AF; D57D;D57D;1112 1162 11B0;D57D;1112 1162 11B0; D57E;D57E;1112 1162 11B1;D57E;1112 1162 11B1; D57F;D57F;1112 1162 11B2;D57F;1112 1162 11B2; D580;D580;1112 1162 11B3;D580;1112 1162 11B3; D581;D581;1112 1162 11B4;D581;1112 1162 11B4; D582;D582;1112 1162 11B5;D582;1112 1162 11B5; D583;D583;1112 1162 11B6;D583;1112 1162 11B6; D584;D584;1112 1162 11B7;D584;1112 1162 11B7; D585;D585;1112 1162 11B8;D585;1112 1162 11B8; D586;D586;1112 1162 11B9;D586;1112 1162 11B9; D587;D587;1112 1162 11BA;D587;1112 1162 11BA; D588;D588;1112 1162 11BB;D588;1112 1162 11BB; D589;D589;1112 1162 11BC;D589;1112 1162 11BC; D58A;D58A;1112 1162 11BD;D58A;1112 1162 11BD; D58B;D58B;1112 1162 11BE;D58B;1112 1162 11BE; D58C;D58C;1112 1162 11BF;D58C;1112 1162 11BF; D58D;D58D;1112 1162 11C0;D58D;1112 1162 11C0; D58E;D58E;1112 1162 11C1;D58E;1112 1162 11C1; D58F;D58F;1112 1162 11C2;D58F;1112 1162 11C2; D590;D590;1112 1163;D590;1112 1163; D591;D591;1112 1163 11A8;D591;1112 1163 11A8; D592;D592;1112 1163 11A9;D592;1112 1163 11A9; D593;D593;1112 1163 11AA;D593;1112 1163 11AA; D594;D594;1112 1163 11AB;D594;1112 1163 11AB; D595;D595;1112 1163 11AC;D595;1112 1163 11AC; D596;D596;1112 1163 11AD;D596;1112 1163 11AD; D597;D597;1112 1163 11AE;D597;1112 1163 11AE; D598;D598;1112 1163 11AF;D598;1112 1163 11AF; D599;D599;1112 1163 11B0;D599;1112 1163 11B0; D59A;D59A;1112 1163 11B1;D59A;1112 1163 11B1; D59B;D59B;1112 1163 11B2;D59B;1112 1163 11B2; D59C;D59C;1112 1163 11B3;D59C;1112 1163 11B3; D59D;D59D;1112 1163 11B4;D59D;1112 1163 11B4; D59E;D59E;1112 1163 11B5;D59E;1112 1163 11B5; D59F;D59F;1112 1163 11B6;D59F;1112 1163 11B6; D5A0;D5A0;1112 1163 11B7;D5A0;1112 1163 11B7; D5A1;D5A1;1112 1163 11B8;D5A1;1112 1163 11B8; D5A2;D5A2;1112 1163 11B9;D5A2;1112 1163 11B9; D5A3;D5A3;1112 1163 11BA;D5A3;1112 1163 11BA; D5A4;D5A4;1112 1163 11BB;D5A4;1112 1163 11BB; D5A5;D5A5;1112 1163 11BC;D5A5;1112 1163 11BC; D5A6;D5A6;1112 1163 11BD;D5A6;1112 1163 11BD; D5A7;D5A7;1112 1163 11BE;D5A7;1112 1163 11BE; D5A8;D5A8;1112 1163 11BF;D5A8;1112 1163 11BF; D5A9;D5A9;1112 1163 11C0;D5A9;1112 1163 11C0; D5AA;D5AA;1112 1163 11C1;D5AA;1112 1163 11C1; D5AB;D5AB;1112 1163 11C2;D5AB;1112 1163 11C2; D5AC;D5AC;1112 1164;D5AC;1112 1164; D5AD;D5AD;1112 1164 11A8;D5AD;1112 1164 11A8; D5AE;D5AE;1112 1164 11A9;D5AE;1112 1164 11A9; D5AF;D5AF;1112 1164 11AA;D5AF;1112 1164 11AA; D5B0;D5B0;1112 1164 11AB;D5B0;1112 1164 11AB; D5B1;D5B1;1112 1164 11AC;D5B1;1112 1164 11AC; D5B2;D5B2;1112 1164 11AD;D5B2;1112 1164 11AD; D5B3;D5B3;1112 1164 11AE;D5B3;1112 1164 11AE; D5B4;D5B4;1112 1164 11AF;D5B4;1112 1164 11AF; D5B5;D5B5;1112 1164 11B0;D5B5;1112 1164 11B0; D5B6;D5B6;1112 1164 11B1;D5B6;1112 1164 11B1; D5B7;D5B7;1112 1164 11B2;D5B7;1112 1164 11B2; D5B8;D5B8;1112 1164 11B3;D5B8;1112 1164 11B3; D5B9;D5B9;1112 1164 11B4;D5B9;1112 1164 11B4; D5BA;D5BA;1112 1164 11B5;D5BA;1112 1164 11B5; D5BB;D5BB;1112 1164 11B6;D5BB;1112 1164 11B6; D5BC;D5BC;1112 1164 11B7;D5BC;1112 1164 11B7; D5BD;D5BD;1112 1164 11B8;D5BD;1112 1164 11B8; D5BE;D5BE;1112 1164 11B9;D5BE;1112 1164 11B9; D5BF;D5BF;1112 1164 11BA;D5BF;1112 1164 11BA; D5C0;D5C0;1112 1164 11BB;D5C0;1112 1164 11BB; D5C1;D5C1;1112 1164 11BC;D5C1;1112 1164 11BC; D5C2;D5C2;1112 1164 11BD;D5C2;1112 1164 11BD; D5C3;D5C3;1112 1164 11BE;D5C3;1112 1164 11BE; D5C4;D5C4;1112 1164 11BF;D5C4;1112 1164 11BF; D5C5;D5C5;1112 1164 11C0;D5C5;1112 1164 11C0; D5C6;D5C6;1112 1164 11C1;D5C6;1112 1164 11C1; D5C7;D5C7;1112 1164 11C2;D5C7;1112 1164 11C2; D5C8;D5C8;1112 1165;D5C8;1112 1165; D5C9;D5C9;1112 1165 11A8;D5C9;1112 1165 11A8; D5CA;D5CA;1112 1165 11A9;D5CA;1112 1165 11A9; D5CB;D5CB;1112 1165 11AA;D5CB;1112 1165 11AA; D5CC;D5CC;1112 1165 11AB;D5CC;1112 1165 11AB; D5CD;D5CD;1112 1165 11AC;D5CD;1112 1165 11AC; D5CE;D5CE;1112 1165 11AD;D5CE;1112 1165 11AD; D5CF;D5CF;1112 1165 11AE;D5CF;1112 1165 11AE; D5D0;D5D0;1112 1165 11AF;D5D0;1112 1165 11AF; D5D1;D5D1;1112 1165 11B0;D5D1;1112 1165 11B0; D5D2;D5D2;1112 1165 11B1;D5D2;1112 1165 11B1; D5D3;D5D3;1112 1165 11B2;D5D3;1112 1165 11B2; D5D4;D5D4;1112 1165 11B3;D5D4;1112 1165 11B3; D5D5;D5D5;1112 1165 11B4;D5D5;1112 1165 11B4; D5D6;D5D6;1112 1165 11B5;D5D6;1112 1165 11B5; D5D7;D5D7;1112 1165 11B6;D5D7;1112 1165 11B6; D5D8;D5D8;1112 1165 11B7;D5D8;1112 1165 11B7; D5D9;D5D9;1112 1165 11B8;D5D9;1112 1165 11B8; D5DA;D5DA;1112 1165 11B9;D5DA;1112 1165 11B9; D5DB;D5DB;1112 1165 11BA;D5DB;1112 1165 11BA; D5DC;D5DC;1112 1165 11BB;D5DC;1112 1165 11BB; D5DD;D5DD;1112 1165 11BC;D5DD;1112 1165 11BC; D5DE;D5DE;1112 1165 11BD;D5DE;1112 1165 11BD; D5DF;D5DF;1112 1165 11BE;D5DF;1112 1165 11BE; D5E0;D5E0;1112 1165 11BF;D5E0;1112 1165 11BF; D5E1;D5E1;1112 1165 11C0;D5E1;1112 1165 11C0; D5E2;D5E2;1112 1165 11C1;D5E2;1112 1165 11C1; D5E3;D5E3;1112 1165 11C2;D5E3;1112 1165 11C2; D5E4;D5E4;1112 1166;D5E4;1112 1166; D5E5;D5E5;1112 1166 11A8;D5E5;1112 1166 11A8; D5E6;D5E6;1112 1166 11A9;D5E6;1112 1166 11A9; D5E7;D5E7;1112 1166 11AA;D5E7;1112 1166 11AA; D5E8;D5E8;1112 1166 11AB;D5E8;1112 1166 11AB; D5E9;D5E9;1112 1166 11AC;D5E9;1112 1166 11AC; D5EA;D5EA;1112 1166 11AD;D5EA;1112 1166 11AD; D5EB;D5EB;1112 1166 11AE;D5EB;1112 1166 11AE; D5EC;D5EC;1112 1166 11AF;D5EC;1112 1166 11AF; D5ED;D5ED;1112 1166 11B0;D5ED;1112 1166 11B0; D5EE;D5EE;1112 1166 11B1;D5EE;1112 1166 11B1; D5EF;D5EF;1112 1166 11B2;D5EF;1112 1166 11B2; D5F0;D5F0;1112 1166 11B3;D5F0;1112 1166 11B3; D5F1;D5F1;1112 1166 11B4;D5F1;1112 1166 11B4; D5F2;D5F2;1112 1166 11B5;D5F2;1112 1166 11B5; D5F3;D5F3;1112 1166 11B6;D5F3;1112 1166 11B6; D5F4;D5F4;1112 1166 11B7;D5F4;1112 1166 11B7; D5F5;D5F5;1112 1166 11B8;D5F5;1112 1166 11B8; D5F6;D5F6;1112 1166 11B9;D5F6;1112 1166 11B9; D5F7;D5F7;1112 1166 11BA;D5F7;1112 1166 11BA; D5F8;D5F8;1112 1166 11BB;D5F8;1112 1166 11BB; D5F9;D5F9;1112 1166 11BC;D5F9;1112 1166 11BC; D5FA;D5FA;1112 1166 11BD;D5FA;1112 1166 11BD; D5FB;D5FB;1112 1166 11BE;D5FB;1112 1166 11BE; D5FC;D5FC;1112 1166 11BF;D5FC;1112 1166 11BF; D5FD;D5FD;1112 1166 11C0;D5FD;1112 1166 11C0; D5FE;D5FE;1112 1166 11C1;D5FE;1112 1166 11C1; D5FF;D5FF;1112 1166 11C2;D5FF;1112 1166 11C2; D600;D600;1112 1167;D600;1112 1167; D601;D601;1112 1167 11A8;D601;1112 1167 11A8; D602;D602;1112 1167 11A9;D602;1112 1167 11A9; D603;D603;1112 1167 11AA;D603;1112 1167 11AA; D604;D604;1112 1167 11AB;D604;1112 1167 11AB; D605;D605;1112 1167 11AC;D605;1112 1167 11AC; D606;D606;1112 1167 11AD;D606;1112 1167 11AD; D607;D607;1112 1167 11AE;D607;1112 1167 11AE; D608;D608;1112 1167 11AF;D608;1112 1167 11AF; D609;D609;1112 1167 11B0;D609;1112 1167 11B0; D60A;D60A;1112 1167 11B1;D60A;1112 1167 11B1; D60B;D60B;1112 1167 11B2;D60B;1112 1167 11B2; D60C;D60C;1112 1167 11B3;D60C;1112 1167 11B3; D60D;D60D;1112 1167 11B4;D60D;1112 1167 11B4; D60E;D60E;1112 1167 11B5;D60E;1112 1167 11B5; D60F;D60F;1112 1167 11B6;D60F;1112 1167 11B6; D610;D610;1112 1167 11B7;D610;1112 1167 11B7; D611;D611;1112 1167 11B8;D611;1112 1167 11B8; D612;D612;1112 1167 11B9;D612;1112 1167 11B9; D613;D613;1112 1167 11BA;D613;1112 1167 11BA; D614;D614;1112 1167 11BB;D614;1112 1167 11BB; D615;D615;1112 1167 11BC;D615;1112 1167 11BC; D616;D616;1112 1167 11BD;D616;1112 1167 11BD; D617;D617;1112 1167 11BE;D617;1112 1167 11BE; D618;D618;1112 1167 11BF;D618;1112 1167 11BF; D619;D619;1112 1167 11C0;D619;1112 1167 11C0; D61A;D61A;1112 1167 11C1;D61A;1112 1167 11C1; D61B;D61B;1112 1167 11C2;D61B;1112 1167 11C2; D61C;D61C;1112 1168;D61C;1112 1168; D61D;D61D;1112 1168 11A8;D61D;1112 1168 11A8; D61E;D61E;1112 1168 11A9;D61E;1112 1168 11A9; D61F;D61F;1112 1168 11AA;D61F;1112 1168 11AA; D620;D620;1112 1168 11AB;D620;1112 1168 11AB; D621;D621;1112 1168 11AC;D621;1112 1168 11AC; D622;D622;1112 1168 11AD;D622;1112 1168 11AD; D623;D623;1112 1168 11AE;D623;1112 1168 11AE; D624;D624;1112 1168 11AF;D624;1112 1168 11AF; D625;D625;1112 1168 11B0;D625;1112 1168 11B0; D626;D626;1112 1168 11B1;D626;1112 1168 11B1; D627;D627;1112 1168 11B2;D627;1112 1168 11B2; D628;D628;1112 1168 11B3;D628;1112 1168 11B3; D629;D629;1112 1168 11B4;D629;1112 1168 11B4; D62A;D62A;1112 1168 11B5;D62A;1112 1168 11B5; D62B;D62B;1112 1168 11B6;D62B;1112 1168 11B6; D62C;D62C;1112 1168 11B7;D62C;1112 1168 11B7; D62D;D62D;1112 1168 11B8;D62D;1112 1168 11B8; D62E;D62E;1112 1168 11B9;D62E;1112 1168 11B9; D62F;D62F;1112 1168 11BA;D62F;1112 1168 11BA; D630;D630;1112 1168 11BB;D630;1112 1168 11BB; D631;D631;1112 1168 11BC;D631;1112 1168 11BC; D632;D632;1112 1168 11BD;D632;1112 1168 11BD; D633;D633;1112 1168 11BE;D633;1112 1168 11BE; D634;D634;1112 1168 11BF;D634;1112 1168 11BF; D635;D635;1112 1168 11C0;D635;1112 1168 11C0; D636;D636;1112 1168 11C1;D636;1112 1168 11C1; D637;D637;1112 1168 11C2;D637;1112 1168 11C2; D638;D638;1112 1169;D638;1112 1169; D639;D639;1112 1169 11A8;D639;1112 1169 11A8; D63A;D63A;1112 1169 11A9;D63A;1112 1169 11A9; D63B;D63B;1112 1169 11AA;D63B;1112 1169 11AA; D63C;D63C;1112 1169 11AB;D63C;1112 1169 11AB; D63D;D63D;1112 1169 11AC;D63D;1112 1169 11AC; D63E;D63E;1112 1169 11AD;D63E;1112 1169 11AD; D63F;D63F;1112 1169 11AE;D63F;1112 1169 11AE; D640;D640;1112 1169 11AF;D640;1112 1169 11AF; D641;D641;1112 1169 11B0;D641;1112 1169 11B0; D642;D642;1112 1169 11B1;D642;1112 1169 11B1; D643;D643;1112 1169 11B2;D643;1112 1169 11B2; D644;D644;1112 1169 11B3;D644;1112 1169 11B3; D645;D645;1112 1169 11B4;D645;1112 1169 11B4; D646;D646;1112 1169 11B5;D646;1112 1169 11B5; D647;D647;1112 1169 11B6;D647;1112 1169 11B6; D648;D648;1112 1169 11B7;D648;1112 1169 11B7; D649;D649;1112 1169 11B8;D649;1112 1169 11B8; D64A;D64A;1112 1169 11B9;D64A;1112 1169 11B9; D64B;D64B;1112 1169 11BA;D64B;1112 1169 11BA; D64C;D64C;1112 1169 11BB;D64C;1112 1169 11BB; D64D;D64D;1112 1169 11BC;D64D;1112 1169 11BC; D64E;D64E;1112 1169 11BD;D64E;1112 1169 11BD; D64F;D64F;1112 1169 11BE;D64F;1112 1169 11BE; D650;D650;1112 1169 11BF;D650;1112 1169 11BF; D651;D651;1112 1169 11C0;D651;1112 1169 11C0; D652;D652;1112 1169 11C1;D652;1112 1169 11C1; D653;D653;1112 1169 11C2;D653;1112 1169 11C2; D654;D654;1112 116A;D654;1112 116A; D655;D655;1112 116A 11A8;D655;1112 116A 11A8; D656;D656;1112 116A 11A9;D656;1112 116A 11A9; D657;D657;1112 116A 11AA;D657;1112 116A 11AA; D658;D658;1112 116A 11AB;D658;1112 116A 11AB; D659;D659;1112 116A 11AC;D659;1112 116A 11AC; D65A;D65A;1112 116A 11AD;D65A;1112 116A 11AD; D65B;D65B;1112 116A 11AE;D65B;1112 116A 11AE; D65C;D65C;1112 116A 11AF;D65C;1112 116A 11AF; D65D;D65D;1112 116A 11B0;D65D;1112 116A 11B0; D65E;D65E;1112 116A 11B1;D65E;1112 116A 11B1; D65F;D65F;1112 116A 11B2;D65F;1112 116A 11B2; D660;D660;1112 116A 11B3;D660;1112 116A 11B3; D661;D661;1112 116A 11B4;D661;1112 116A 11B4; D662;D662;1112 116A 11B5;D662;1112 116A 11B5; D663;D663;1112 116A 11B6;D663;1112 116A 11B6; D664;D664;1112 116A 11B7;D664;1112 116A 11B7; D665;D665;1112 116A 11B8;D665;1112 116A 11B8; D666;D666;1112 116A 11B9;D666;1112 116A 11B9; D667;D667;1112 116A 11BA;D667;1112 116A 11BA; D668;D668;1112 116A 11BB;D668;1112 116A 11BB; D669;D669;1112 116A 11BC;D669;1112 116A 11BC; D66A;D66A;1112 116A 11BD;D66A;1112 116A 11BD; D66B;D66B;1112 116A 11BE;D66B;1112 116A 11BE; D66C;D66C;1112 116A 11BF;D66C;1112 116A 11BF; D66D;D66D;1112 116A 11C0;D66D;1112 116A 11C0; D66E;D66E;1112 116A 11C1;D66E;1112 116A 11C1; D66F;D66F;1112 116A 11C2;D66F;1112 116A 11C2; D670;D670;1112 116B;D670;1112 116B; D671;D671;1112 116B 11A8;D671;1112 116B 11A8; D672;D672;1112 116B 11A9;D672;1112 116B 11A9; D673;D673;1112 116B 11AA;D673;1112 116B 11AA; D674;D674;1112 116B 11AB;D674;1112 116B 11AB; D675;D675;1112 116B 11AC;D675;1112 116B 11AC; D676;D676;1112 116B 11AD;D676;1112 116B 11AD; D677;D677;1112 116B 11AE;D677;1112 116B 11AE; D678;D678;1112 116B 11AF;D678;1112 116B 11AF; D679;D679;1112 116B 11B0;D679;1112 116B 11B0; D67A;D67A;1112 116B 11B1;D67A;1112 116B 11B1; D67B;D67B;1112 116B 11B2;D67B;1112 116B 11B2; D67C;D67C;1112 116B 11B3;D67C;1112 116B 11B3; D67D;D67D;1112 116B 11B4;D67D;1112 116B 11B4; D67E;D67E;1112 116B 11B5;D67E;1112 116B 11B5; D67F;D67F;1112 116B 11B6;D67F;1112 116B 11B6; D680;D680;1112 116B 11B7;D680;1112 116B 11B7; D681;D681;1112 116B 11B8;D681;1112 116B 11B8; D682;D682;1112 116B 11B9;D682;1112 116B 11B9; D683;D683;1112 116B 11BA;D683;1112 116B 11BA; D684;D684;1112 116B 11BB;D684;1112 116B 11BB; D685;D685;1112 116B 11BC;D685;1112 116B 11BC; D686;D686;1112 116B 11BD;D686;1112 116B 11BD; D687;D687;1112 116B 11BE;D687;1112 116B 11BE; D688;D688;1112 116B 11BF;D688;1112 116B 11BF; D689;D689;1112 116B 11C0;D689;1112 116B 11C0; D68A;D68A;1112 116B 11C1;D68A;1112 116B 11C1; D68B;D68B;1112 116B 11C2;D68B;1112 116B 11C2; D68C;D68C;1112 116C;D68C;1112 116C; D68D;D68D;1112 116C 11A8;D68D;1112 116C 11A8; D68E;D68E;1112 116C 11A9;D68E;1112 116C 11A9; D68F;D68F;1112 116C 11AA;D68F;1112 116C 11AA; D690;D690;1112 116C 11AB;D690;1112 116C 11AB; D691;D691;1112 116C 11AC;D691;1112 116C 11AC; D692;D692;1112 116C 11AD;D692;1112 116C 11AD; D693;D693;1112 116C 11AE;D693;1112 116C 11AE; D694;D694;1112 116C 11AF;D694;1112 116C 11AF; D695;D695;1112 116C 11B0;D695;1112 116C 11B0; D696;D696;1112 116C 11B1;D696;1112 116C 11B1; D697;D697;1112 116C 11B2;D697;1112 116C 11B2; D698;D698;1112 116C 11B3;D698;1112 116C 11B3; D699;D699;1112 116C 11B4;D699;1112 116C 11B4; D69A;D69A;1112 116C 11B5;D69A;1112 116C 11B5; D69B;D69B;1112 116C 11B6;D69B;1112 116C 11B6; D69C;D69C;1112 116C 11B7;D69C;1112 116C 11B7; D69D;D69D;1112 116C 11B8;D69D;1112 116C 11B8; D69E;D69E;1112 116C 11B9;D69E;1112 116C 11B9; D69F;D69F;1112 116C 11BA;D69F;1112 116C 11BA; D6A0;D6A0;1112 116C 11BB;D6A0;1112 116C 11BB; D6A1;D6A1;1112 116C 11BC;D6A1;1112 116C 11BC; D6A2;D6A2;1112 116C 11BD;D6A2;1112 116C 11BD; D6A3;D6A3;1112 116C 11BE;D6A3;1112 116C 11BE; D6A4;D6A4;1112 116C 11BF;D6A4;1112 116C 11BF; D6A5;D6A5;1112 116C 11C0;D6A5;1112 116C 11C0; D6A6;D6A6;1112 116C 11C1;D6A6;1112 116C 11C1; D6A7;D6A7;1112 116C 11C2;D6A7;1112 116C 11C2; D6A8;D6A8;1112 116D;D6A8;1112 116D; D6A9;D6A9;1112 116D 11A8;D6A9;1112 116D 11A8; D6AA;D6AA;1112 116D 11A9;D6AA;1112 116D 11A9; D6AB;D6AB;1112 116D 11AA;D6AB;1112 116D 11AA; D6AC;D6AC;1112 116D 11AB;D6AC;1112 116D 11AB; D6AD;D6AD;1112 116D 11AC;D6AD;1112 116D 11AC; D6AE;D6AE;1112 116D 11AD;D6AE;1112 116D 11AD; D6AF;D6AF;1112 116D 11AE;D6AF;1112 116D 11AE; D6B0;D6B0;1112 116D 11AF;D6B0;1112 116D 11AF; D6B1;D6B1;1112 116D 11B0;D6B1;1112 116D 11B0; D6B2;D6B2;1112 116D 11B1;D6B2;1112 116D 11B1; D6B3;D6B3;1112 116D 11B2;D6B3;1112 116D 11B2; D6B4;D6B4;1112 116D 11B3;D6B4;1112 116D 11B3; D6B5;D6B5;1112 116D 11B4;D6B5;1112 116D 11B4; D6B6;D6B6;1112 116D 11B5;D6B6;1112 116D 11B5; D6B7;D6B7;1112 116D 11B6;D6B7;1112 116D 11B6; D6B8;D6B8;1112 116D 11B7;D6B8;1112 116D 11B7; D6B9;D6B9;1112 116D 11B8;D6B9;1112 116D 11B8; D6BA;D6BA;1112 116D 11B9;D6BA;1112 116D 11B9; D6BB;D6BB;1112 116D 11BA;D6BB;1112 116D 11BA; D6BC;D6BC;1112 116D 11BB;D6BC;1112 116D 11BB; D6BD;D6BD;1112 116D 11BC;D6BD;1112 116D 11BC; D6BE;D6BE;1112 116D 11BD;D6BE;1112 116D 11BD; D6BF;D6BF;1112 116D 11BE;D6BF;1112 116D 11BE; D6C0;D6C0;1112 116D 11BF;D6C0;1112 116D 11BF; D6C1;D6C1;1112 116D 11C0;D6C1;1112 116D 11C0; D6C2;D6C2;1112 116D 11C1;D6C2;1112 116D 11C1; D6C3;D6C3;1112 116D 11C2;D6C3;1112 116D 11C2; D6C4;D6C4;1112 116E;D6C4;1112 116E; D6C5;D6C5;1112 116E 11A8;D6C5;1112 116E 11A8; D6C6;D6C6;1112 116E 11A9;D6C6;1112 116E 11A9; D6C7;D6C7;1112 116E 11AA;D6C7;1112 116E 11AA; D6C8;D6C8;1112 116E 11AB;D6C8;1112 116E 11AB; D6C9;D6C9;1112 116E 11AC;D6C9;1112 116E 11AC; D6CA;D6CA;1112 116E 11AD;D6CA;1112 116E 11AD; D6CB;D6CB;1112 116E 11AE;D6CB;1112 116E 11AE; D6CC;D6CC;1112 116E 11AF;D6CC;1112 116E 11AF; D6CD;D6CD;1112 116E 11B0;D6CD;1112 116E 11B0; D6CE;D6CE;1112 116E 11B1;D6CE;1112 116E 11B1; D6CF;D6CF;1112 116E 11B2;D6CF;1112 116E 11B2; D6D0;D6D0;1112 116E 11B3;D6D0;1112 116E 11B3; D6D1;D6D1;1112 116E 11B4;D6D1;1112 116E 11B4; D6D2;D6D2;1112 116E 11B5;D6D2;1112 116E 11B5; D6D3;D6D3;1112 116E 11B6;D6D3;1112 116E 11B6; D6D4;D6D4;1112 116E 11B7;D6D4;1112 116E 11B7; D6D5;D6D5;1112 116E 11B8;D6D5;1112 116E 11B8; D6D6;D6D6;1112 116E 11B9;D6D6;1112 116E 11B9; D6D7;D6D7;1112 116E 11BA;D6D7;1112 116E 11BA; D6D8;D6D8;1112 116E 11BB;D6D8;1112 116E 11BB; D6D9;D6D9;1112 116E 11BC;D6D9;1112 116E 11BC; D6DA;D6DA;1112 116E 11BD;D6DA;1112 116E 11BD; D6DB;D6DB;1112 116E 11BE;D6DB;1112 116E 11BE; D6DC;D6DC;1112 116E 11BF;D6DC;1112 116E 11BF; D6DD;D6DD;1112 116E 11C0;D6DD;1112 116E 11C0; D6DE;D6DE;1112 116E 11C1;D6DE;1112 116E 11C1; D6DF;D6DF;1112 116E 11C2;D6DF;1112 116E 11C2; D6E0;D6E0;1112 116F;D6E0;1112 116F; D6E1;D6E1;1112 116F 11A8;D6E1;1112 116F 11A8; D6E2;D6E2;1112 116F 11A9;D6E2;1112 116F 11A9; D6E3;D6E3;1112 116F 11AA;D6E3;1112 116F 11AA; D6E4;D6E4;1112 116F 11AB;D6E4;1112 116F 11AB; D6E5;D6E5;1112 116F 11AC;D6E5;1112 116F 11AC; D6E6;D6E6;1112 116F 11AD;D6E6;1112 116F 11AD; D6E7;D6E7;1112 116F 11AE;D6E7;1112 116F 11AE; D6E8;D6E8;1112 116F 11AF;D6E8;1112 116F 11AF; D6E9;D6E9;1112 116F 11B0;D6E9;1112 116F 11B0; D6EA;D6EA;1112 116F 11B1;D6EA;1112 116F 11B1; D6EB;D6EB;1112 116F 11B2;D6EB;1112 116F 11B2; D6EC;D6EC;1112 116F 11B3;D6EC;1112 116F 11B3; D6ED;D6ED;1112 116F 11B4;D6ED;1112 116F 11B4; D6EE;D6EE;1112 116F 11B5;D6EE;1112 116F 11B5; D6EF;D6EF;1112 116F 11B6;D6EF;1112 116F 11B6; D6F0;D6F0;1112 116F 11B7;D6F0;1112 116F 11B7; D6F1;D6F1;1112 116F 11B8;D6F1;1112 116F 11B8; D6F2;D6F2;1112 116F 11B9;D6F2;1112 116F 11B9; D6F3;D6F3;1112 116F 11BA;D6F3;1112 116F 11BA; D6F4;D6F4;1112 116F 11BB;D6F4;1112 116F 11BB; D6F5;D6F5;1112 116F 11BC;D6F5;1112 116F 11BC; D6F6;D6F6;1112 116F 11BD;D6F6;1112 116F 11BD; D6F7;D6F7;1112 116F 11BE;D6F7;1112 116F 11BE; D6F8;D6F8;1112 116F 11BF;D6F8;1112 116F 11BF; D6F9;D6F9;1112 116F 11C0;D6F9;1112 116F 11C0; D6FA;D6FA;1112 116F 11C1;D6FA;1112 116F 11C1; D6FB;D6FB;1112 116F 11C2;D6FB;1112 116F 11C2; D6FC;D6FC;1112 1170;D6FC;1112 1170; D6FD;D6FD;1112 1170 11A8;D6FD;1112 1170 11A8; D6FE;D6FE;1112 1170 11A9;D6FE;1112 1170 11A9; D6FF;D6FF;1112 1170 11AA;D6FF;1112 1170 11AA; D700;D700;1112 1170 11AB;D700;1112 1170 11AB; D701;D701;1112 1170 11AC;D701;1112 1170 11AC; D702;D702;1112 1170 11AD;D702;1112 1170 11AD; D703;D703;1112 1170 11AE;D703;1112 1170 11AE; D704;D704;1112 1170 11AF;D704;1112 1170 11AF; D705;D705;1112 1170 11B0;D705;1112 1170 11B0; D706;D706;1112 1170 11B1;D706;1112 1170 11B1; D707;D707;1112 1170 11B2;D707;1112 1170 11B2; D708;D708;1112 1170 11B3;D708;1112 1170 11B3; D709;D709;1112 1170 11B4;D709;1112 1170 11B4; D70A;D70A;1112 1170 11B5;D70A;1112 1170 11B5; D70B;D70B;1112 1170 11B6;D70B;1112 1170 11B6; D70C;D70C;1112 1170 11B7;D70C;1112 1170 11B7; D70D;D70D;1112 1170 11B8;D70D;1112 1170 11B8; D70E;D70E;1112 1170 11B9;D70E;1112 1170 11B9; D70F;D70F;1112 1170 11BA;D70F;1112 1170 11BA; D710;D710;1112 1170 11BB;D710;1112 1170 11BB; D711;D711;1112 1170 11BC;D711;1112 1170 11BC; D712;D712;1112 1170 11BD;D712;1112 1170 11BD; D713;D713;1112 1170 11BE;D713;1112 1170 11BE; D714;D714;1112 1170 11BF;D714;1112 1170 11BF; D715;D715;1112 1170 11C0;D715;1112 1170 11C0; D716;D716;1112 1170 11C1;D716;1112 1170 11C1; D717;D717;1112 1170 11C2;D717;1112 1170 11C2; D718;D718;1112 1171;D718;1112 1171; D719;D719;1112 1171 11A8;D719;1112 1171 11A8; D71A;D71A;1112 1171 11A9;D71A;1112 1171 11A9; D71B;D71B;1112 1171 11AA;D71B;1112 1171 11AA; D71C;D71C;1112 1171 11AB;D71C;1112 1171 11AB; D71D;D71D;1112 1171 11AC;D71D;1112 1171 11AC; D71E;D71E;1112 1171 11AD;D71E;1112 1171 11AD; D71F;D71F;1112 1171 11AE;D71F;1112 1171 11AE; D720;D720;1112 1171 11AF;D720;1112 1171 11AF; D721;D721;1112 1171 11B0;D721;1112 1171 11B0; D722;D722;1112 1171 11B1;D722;1112 1171 11B1; D723;D723;1112 1171 11B2;D723;1112 1171 11B2; D724;D724;1112 1171 11B3;D724;1112 1171 11B3; D725;D725;1112 1171 11B4;D725;1112 1171 11B4; D726;D726;1112 1171 11B5;D726;1112 1171 11B5; D727;D727;1112 1171 11B6;D727;1112 1171 11B6; D728;D728;1112 1171 11B7;D728;1112 1171 11B7; D729;D729;1112 1171 11B8;D729;1112 1171 11B8; D72A;D72A;1112 1171 11B9;D72A;1112 1171 11B9; D72B;D72B;1112 1171 11BA;D72B;1112 1171 11BA; D72C;D72C;1112 1171 11BB;D72C;1112 1171 11BB; D72D;D72D;1112 1171 11BC;D72D;1112 1171 11BC; D72E;D72E;1112 1171 11BD;D72E;1112 1171 11BD; D72F;D72F;1112 1171 11BE;D72F;1112 1171 11BE; D730;D730;1112 1171 11BF;D730;1112 1171 11BF; D731;D731;1112 1171 11C0;D731;1112 1171 11C0; D732;D732;1112 1171 11C1;D732;1112 1171 11C1; D733;D733;1112 1171 11C2;D733;1112 1171 11C2; D734;D734;1112 1172;D734;1112 1172; D735;D735;1112 1172 11A8;D735;1112 1172 11A8; D736;D736;1112 1172 11A9;D736;1112 1172 11A9; D737;D737;1112 1172 11AA;D737;1112 1172 11AA; D738;D738;1112 1172 11AB;D738;1112 1172 11AB; D739;D739;1112 1172 11AC;D739;1112 1172 11AC; D73A;D73A;1112 1172 11AD;D73A;1112 1172 11AD; D73B;D73B;1112 1172 11AE;D73B;1112 1172 11AE; D73C;D73C;1112 1172 11AF;D73C;1112 1172 11AF; D73D;D73D;1112 1172 11B0;D73D;1112 1172 11B0; D73E;D73E;1112 1172 11B1;D73E;1112 1172 11B1; D73F;D73F;1112 1172 11B2;D73F;1112 1172 11B2; D740;D740;1112 1172 11B3;D740;1112 1172 11B3; D741;D741;1112 1172 11B4;D741;1112 1172 11B4; D742;D742;1112 1172 11B5;D742;1112 1172 11B5; D743;D743;1112 1172 11B6;D743;1112 1172 11B6; D744;D744;1112 1172 11B7;D744;1112 1172 11B7; D745;D745;1112 1172 11B8;D745;1112 1172 11B8; D746;D746;1112 1172 11B9;D746;1112 1172 11B9; D747;D747;1112 1172 11BA;D747;1112 1172 11BA; D748;D748;1112 1172 11BB;D748;1112 1172 11BB; D749;D749;1112 1172 11BC;D749;1112 1172 11BC; D74A;D74A;1112 1172 11BD;D74A;1112 1172 11BD; D74B;D74B;1112 1172 11BE;D74B;1112 1172 11BE; D74C;D74C;1112 1172 11BF;D74C;1112 1172 11BF; D74D;D74D;1112 1172 11C0;D74D;1112 1172 11C0; D74E;D74E;1112 1172 11C1;D74E;1112 1172 11C1; D74F;D74F;1112 1172 11C2;D74F;1112 1172 11C2; D750;D750;1112 1173;D750;1112 1173; D751;D751;1112 1173 11A8;D751;1112 1173 11A8; D752;D752;1112 1173 11A9;D752;1112 1173 11A9; D753;D753;1112 1173 11AA;D753;1112 1173 11AA; D754;D754;1112 1173 11AB;D754;1112 1173 11AB; D755;D755;1112 1173 11AC;D755;1112 1173 11AC; D756;D756;1112 1173 11AD;D756;1112 1173 11AD; D757;D757;1112 1173 11AE;D757;1112 1173 11AE; D758;D758;1112 1173 11AF;D758;1112 1173 11AF; D759;D759;1112 1173 11B0;D759;1112 1173 11B0; D75A;D75A;1112 1173 11B1;D75A;1112 1173 11B1; D75B;D75B;1112 1173 11B2;D75B;1112 1173 11B2; D75C;D75C;1112 1173 11B3;D75C;1112 1173 11B3; D75D;D75D;1112 1173 11B4;D75D;1112 1173 11B4; D75E;D75E;1112 1173 11B5;D75E;1112 1173 11B5; D75F;D75F;1112 1173 11B6;D75F;1112 1173 11B6; D760;D760;1112 1173 11B7;D760;1112 1173 11B7; D761;D761;1112 1173 11B8;D761;1112 1173 11B8; D762;D762;1112 1173 11B9;D762;1112 1173 11B9; D763;D763;1112 1173 11BA;D763;1112 1173 11BA; D764;D764;1112 1173 11BB;D764;1112 1173 11BB; D765;D765;1112 1173 11BC;D765;1112 1173 11BC; D766;D766;1112 1173 11BD;D766;1112 1173 11BD; D767;D767;1112 1173 11BE;D767;1112 1173 11BE; D768;D768;1112 1173 11BF;D768;1112 1173 11BF; D769;D769;1112 1173 11C0;D769;1112 1173 11C0; D76A;D76A;1112 1173 11C1;D76A;1112 1173 11C1; D76B;D76B;1112 1173 11C2;D76B;1112 1173 11C2; D76C;D76C;1112 1174;D76C;1112 1174; D76D;D76D;1112 1174 11A8;D76D;1112 1174 11A8; D76E;D76E;1112 1174 11A9;D76E;1112 1174 11A9; D76F;D76F;1112 1174 11AA;D76F;1112 1174 11AA; D770;D770;1112 1174 11AB;D770;1112 1174 11AB; D771;D771;1112 1174 11AC;D771;1112 1174 11AC; D772;D772;1112 1174 11AD;D772;1112 1174 11AD; D773;D773;1112 1174 11AE;D773;1112 1174 11AE; D774;D774;1112 1174 11AF;D774;1112 1174 11AF; D775;D775;1112 1174 11B0;D775;1112 1174 11B0; D776;D776;1112 1174 11B1;D776;1112 1174 11B1; D777;D777;1112 1174 11B2;D777;1112 1174 11B2; D778;D778;1112 1174 11B3;D778;1112 1174 11B3; D779;D779;1112 1174 11B4;D779;1112 1174 11B4; D77A;D77A;1112 1174 11B5;D77A;1112 1174 11B5; D77B;D77B;1112 1174 11B6;D77B;1112 1174 11B6; D77C;D77C;1112 1174 11B7;D77C;1112 1174 11B7; D77D;D77D;1112 1174 11B8;D77D;1112 1174 11B8; D77E;D77E;1112 1174 11B9;D77E;1112 1174 11B9; D77F;D77F;1112 1174 11BA;D77F;1112 1174 11BA; D780;D780;1112 1174 11BB;D780;1112 1174 11BB; D781;D781;1112 1174 11BC;D781;1112 1174 11BC; D782;D782;1112 1174 11BD;D782;1112 1174 11BD; D783;D783;1112 1174 11BE;D783;1112 1174 11BE; D784;D784;1112 1174 11BF;D784;1112 1174 11BF; D785;D785;1112 1174 11C0;D785;1112 1174 11C0; D786;D786;1112 1174 11C1;D786;1112 1174 11C1; D787;D787;1112 1174 11C2;D787;1112 1174 11C2; D788;D788;1112 1175;D788;1112 1175; D789;D789;1112 1175 11A8;D789;1112 1175 11A8; D78A;D78A;1112 1175 11A9;D78A;1112 1175 11A9; D78B;D78B;1112 1175 11AA;D78B;1112 1175 11AA; D78C;D78C;1112 1175 11AB;D78C;1112 1175 11AB; D78D;D78D;1112 1175 11AC;D78D;1112 1175 11AC; D78E;D78E;1112 1175 11AD;D78E;1112 1175 11AD; D78F;D78F;1112 1175 11AE;D78F;1112 1175 11AE; D790;D790;1112 1175 11AF;D790;1112 1175 11AF; D791;D791;1112 1175 11B0;D791;1112 1175 11B0; D792;D792;1112 1175 11B1;D792;1112 1175 11B1; D793;D793;1112 1175 11B2;D793;1112 1175 11B2; D794;D794;1112 1175 11B3;D794;1112 1175 11B3; D795;D795;1112 1175 11B4;D795;1112 1175 11B4; D796;D796;1112 1175 11B5;D796;1112 1175 11B5; D797;D797;1112 1175 11B6;D797;1112 1175 11B6; D798;D798;1112 1175 11B7;D798;1112 1175 11B7; D799;D799;1112 1175 11B8;D799;1112 1175 11B8; D79A;D79A;1112 1175 11B9;D79A;1112 1175 11B9; D79B;D79B;1112 1175 11BA;D79B;1112 1175 11BA; D79C;D79C;1112 1175 11BB;D79C;1112 1175 11BB; D79D;D79D;1112 1175 11BC;D79D;1112 1175 11BC; D79E;D79E;1112 1175 11BD;D79E;1112 1175 11BD; D79F;D79F;1112 1175 11BE;D79F;1112 1175 11BE; D7A0;D7A0;1112 1175 11BF;D7A0;1112 1175 11BF; D7A1;D7A1;1112 1175 11C0;D7A1;1112 1175 11C0; D7A2;D7A2;1112 1175 11C1;D7A2;1112 1175 11C1; D7A3;D7A3;1112 1175 11C2;D7A3;1112 1175 11C2; F900;8C48;8C48;8C48;8C48; F901;66F4;66F4;66F4;66F4; F902;8ECA;8ECA;8ECA;8ECA; F903;8CC8;8CC8;8CC8;8CC8; F904;6ED1;6ED1;6ED1;6ED1; F905;4E32;4E32;4E32;4E32; F906;53E5;53E5;53E5;53E5; F907;9F9C;9F9C;9F9C;9F9C; F908;9F9C;9F9C;9F9C;9F9C; F909;5951;5951;5951;5951; F90A;91D1;91D1;91D1;91D1; F90B;5587;5587;5587;5587; F90C;5948;5948;5948;5948; F90D;61F6;61F6;61F6;61F6; F90E;7669;7669;7669;7669; F90F;7F85;7F85;7F85;7F85; F910;863F;863F;863F;863F; F911;87BA;87BA;87BA;87BA; F912;88F8;88F8;88F8;88F8; F913;908F;908F;908F;908F; F914;6A02;6A02;6A02;6A02; F915;6D1B;6D1B;6D1B;6D1B; F916;70D9;70D9;70D9;70D9; F917;73DE;73DE;73DE;73DE; F918;843D;843D;843D;843D; F919;916A;916A;916A;916A; F91A;99F1;99F1;99F1;99F1; F91B;4E82;4E82;4E82;4E82; F91C;5375;5375;5375;5375; F91D;6B04;6B04;6B04;6B04; F91E;721B;721B;721B;721B; F91F;862D;862D;862D;862D; F920;9E1E;9E1E;9E1E;9E1E; F921;5D50;5D50;5D50;5D50; F922;6FEB;6FEB;6FEB;6FEB; F923;85CD;85CD;85CD;85CD; F924;8964;8964;8964;8964; F925;62C9;62C9;62C9;62C9; F926;81D8;81D8;81D8;81D8; F927;881F;881F;881F;881F; F928;5ECA;5ECA;5ECA;5ECA; F929;6717;6717;6717;6717; F92A;6D6A;6D6A;6D6A;6D6A; F92B;72FC;72FC;72FC;72FC; F92C;90CE;90CE;90CE;90CE; F92D;4F86;4F86;4F86;4F86; F92E;51B7;51B7;51B7;51B7; F92F;52DE;52DE;52DE;52DE; F930;64C4;64C4;64C4;64C4; F931;6AD3;6AD3;6AD3;6AD3; F932;7210;7210;7210;7210; F933;76E7;76E7;76E7;76E7; F934;8001;8001;8001;8001; F935;8606;8606;8606;8606; F936;865C;865C;865C;865C; F937;8DEF;8DEF;8DEF;8DEF; F938;9732;9732;9732;9732; F939;9B6F;9B6F;9B6F;9B6F; F93A;9DFA;9DFA;9DFA;9DFA; F93B;788C;788C;788C;788C; F93C;797F;797F;797F;797F; F93D;7DA0;7DA0;7DA0;7DA0; F93E;83C9;83C9;83C9;83C9; F93F;9304;9304;9304;9304; F940;9E7F;9E7F;9E7F;9E7F; F941;8AD6;8AD6;8AD6;8AD6; F942;58DF;58DF;58DF;58DF; F943;5F04;5F04;5F04;5F04; F944;7C60;7C60;7C60;7C60; F945;807E;807E;807E;807E; F946;7262;7262;7262;7262; F947;78CA;78CA;78CA;78CA; F948;8CC2;8CC2;8CC2;8CC2; F949;96F7;96F7;96F7;96F7; F94A;58D8;58D8;58D8;58D8; F94B;5C62;5C62;5C62;5C62; F94C;6A13;6A13;6A13;6A13; F94D;6DDA;6DDA;6DDA;6DDA; F94E;6F0F;6F0F;6F0F;6F0F; F94F;7D2F;7D2F;7D2F;7D2F; F950;7E37;7E37;7E37;7E37; F951;964B;964B;964B;964B; F952;52D2;52D2;52D2;52D2; F953;808B;808B;808B;808B; F954;51DC;51DC;51DC;51DC; F955;51CC;51CC;51CC;51CC; F956;7A1C;7A1C;7A1C;7A1C; F957;7DBE;7DBE;7DBE;7DBE; F958;83F1;83F1;83F1;83F1; F959;9675;9675;9675;9675; F95A;8B80;8B80;8B80;8B80; F95B;62CF;62CF;62CF;62CF; F95C;6A02;6A02;6A02;6A02; F95D;8AFE;8AFE;8AFE;8AFE; F95E;4E39;4E39;4E39;4E39; F95F;5BE7;5BE7;5BE7;5BE7; F960;6012;6012;6012;6012; F961;7387;7387;7387;7387; F962;7570;7570;7570;7570; F963;5317;5317;5317;5317; F964;78FB;78FB;78FB;78FB; F965;4FBF;4FBF;4FBF;4FBF; F966;5FA9;5FA9;5FA9;5FA9; F967;4E0D;4E0D;4E0D;4E0D; F968;6CCC;6CCC;6CCC;6CCC; F969;6578;6578;6578;6578; F96A;7D22;7D22;7D22;7D22; F96B;53C3;53C3;53C3;53C3; F96C;585E;585E;585E;585E; F96D;7701;7701;7701;7701; F96E;8449;8449;8449;8449; F96F;8AAA;8AAA;8AAA;8AAA; F970;6BBA;6BBA;6BBA;6BBA; F971;8FB0;8FB0;8FB0;8FB0; F972;6C88;6C88;6C88;6C88; F973;62FE;62FE;62FE;62FE; F974;82E5;82E5;82E5;82E5; F975;63A0;63A0;63A0;63A0; F976;7565;7565;7565;7565; F977;4EAE;4EAE;4EAE;4EAE; F978;5169;5169;5169;5169; F979;51C9;51C9;51C9;51C9; F97A;6881;6881;6881;6881; F97B;7CE7;7CE7;7CE7;7CE7; F97C;826F;826F;826F;826F; F97D;8AD2;8AD2;8AD2;8AD2; F97E;91CF;91CF;91CF;91CF; F97F;52F5;52F5;52F5;52F5; F980;5442;5442;5442;5442; F981;5973;5973;5973;5973; F982;5EEC;5EEC;5EEC;5EEC; F983;65C5;65C5;65C5;65C5; F984;6FFE;6FFE;6FFE;6FFE; F985;792A;792A;792A;792A; F986;95AD;95AD;95AD;95AD; F987;9A6A;9A6A;9A6A;9A6A; F988;9E97;9E97;9E97;9E97; F989;9ECE;9ECE;9ECE;9ECE; F98A;529B;529B;529B;529B; F98B;66C6;66C6;66C6;66C6; F98C;6B77;6B77;6B77;6B77; F98D;8F62;8F62;8F62;8F62; F98E;5E74;5E74;5E74;5E74; F98F;6190;6190;6190;6190; F990;6200;6200;6200;6200; F991;649A;649A;649A;649A; F992;6F23;6F23;6F23;6F23; F993;7149;7149;7149;7149; F994;7489;7489;7489;7489; F995;79CA;79CA;79CA;79CA; F996;7DF4;7DF4;7DF4;7DF4; F997;806F;806F;806F;806F; F998;8F26;8F26;8F26;8F26; F999;84EE;84EE;84EE;84EE; F99A;9023;9023;9023;9023; F99B;934A;934A;934A;934A; F99C;5217;5217;5217;5217; F99D;52A3;52A3;52A3;52A3; F99E;54BD;54BD;54BD;54BD; F99F;70C8;70C8;70C8;70C8; F9A0;88C2;88C2;88C2;88C2; F9A1;8AAA;8AAA;8AAA;8AAA; F9A2;5EC9;5EC9;5EC9;5EC9; F9A3;5FF5;5FF5;5FF5;5FF5; F9A4;637B;637B;637B;637B; F9A5;6BAE;6BAE;6BAE;6BAE; F9A6;7C3E;7C3E;7C3E;7C3E; F9A7;7375;7375;7375;7375; F9A8;4EE4;4EE4;4EE4;4EE4; F9A9;56F9;56F9;56F9;56F9; F9AA;5BE7;5BE7;5BE7;5BE7; F9AB;5DBA;5DBA;5DBA;5DBA; F9AC;601C;601C;601C;601C; F9AD;73B2;73B2;73B2;73B2; F9AE;7469;7469;7469;7469; F9AF;7F9A;7F9A;7F9A;7F9A; F9B0;8046;8046;8046;8046; F9B1;9234;9234;9234;9234; F9B2;96F6;96F6;96F6;96F6; F9B3;9748;9748;9748;9748; F9B4;9818;9818;9818;9818; F9B5;4F8B;4F8B;4F8B;4F8B; F9B6;79AE;79AE;79AE;79AE; F9B7;91B4;91B4;91B4;91B4; F9B8;96B8;96B8;96B8;96B8; F9B9;60E1;60E1;60E1;60E1; F9BA;4E86;4E86;4E86;4E86; F9BB;50DA;50DA;50DA;50DA; F9BC;5BEE;5BEE;5BEE;5BEE; F9BD;5C3F;5C3F;5C3F;5C3F; F9BE;6599;6599;6599;6599; F9BF;6A02;6A02;6A02;6A02; F9C0;71CE;71CE;71CE;71CE; F9C1;7642;7642;7642;7642; F9C2;84FC;84FC;84FC;84FC; F9C3;907C;907C;907C;907C; F9C4;9F8D;9F8D;9F8D;9F8D; F9C5;6688;6688;6688;6688; F9C6;962E;962E;962E;962E; F9C7;5289;5289;5289;5289; F9C8;677B;677B;677B;677B; F9C9;67F3;67F3;67F3;67F3; F9CA;6D41;6D41;6D41;6D41; F9CB;6E9C;6E9C;6E9C;6E9C; F9CC;7409;7409;7409;7409; F9CD;7559;7559;7559;7559; F9CE;786B;786B;786B;786B; F9CF;7D10;7D10;7D10;7D10; F9D0;985E;985E;985E;985E; F9D1;516D;516D;516D;516D; F9D2;622E;622E;622E;622E; F9D3;9678;9678;9678;9678; F9D4;502B;502B;502B;502B; F9D5;5D19;5D19;5D19;5D19; F9D6;6DEA;6DEA;6DEA;6DEA; F9D7;8F2A;8F2A;8F2A;8F2A; F9D8;5F8B;5F8B;5F8B;5F8B; F9D9;6144;6144;6144;6144; F9DA;6817;6817;6817;6817; F9DB;7387;7387;7387;7387; F9DC;9686;9686;9686;9686; F9DD;5229;5229;5229;5229; F9DE;540F;540F;540F;540F; F9DF;5C65;5C65;5C65;5C65; F9E0;6613;6613;6613;6613; F9E1;674E;674E;674E;674E; F9E2;68A8;68A8;68A8;68A8; F9E3;6CE5;6CE5;6CE5;6CE5; F9E4;7406;7406;7406;7406; F9E5;75E2;75E2;75E2;75E2; F9E6;7F79;7F79;7F79;7F79; F9E7;88CF;88CF;88CF;88CF; F9E8;88E1;88E1;88E1;88E1; F9E9;91CC;91CC;91CC;91CC; F9EA;96E2;96E2;96E2;96E2; F9EB;533F;533F;533F;533F; F9EC;6EBA;6EBA;6EBA;6EBA; F9ED;541D;541D;541D;541D; F9EE;71D0;71D0;71D0;71D0; F9EF;7498;7498;7498;7498; F9F0;85FA;85FA;85FA;85FA; F9F1;96A3;96A3;96A3;96A3; F9F2;9C57;9C57;9C57;9C57; F9F3;9E9F;9E9F;9E9F;9E9F; F9F4;6797;6797;6797;6797; F9F5;6DCB;6DCB;6DCB;6DCB; F9F6;81E8;81E8;81E8;81E8; F9F7;7ACB;7ACB;7ACB;7ACB; F9F8;7B20;7B20;7B20;7B20; F9F9;7C92;7C92;7C92;7C92; F9FA;72C0;72C0;72C0;72C0; F9FB;7099;7099;7099;7099; F9FC;8B58;8B58;8B58;8B58; F9FD;4EC0;4EC0;4EC0;4EC0; F9FE;8336;8336;8336;8336; F9FF;523A;523A;523A;523A; FA00;5207;5207;5207;5207; FA01;5EA6;5EA6;5EA6;5EA6; FA02;62D3;62D3;62D3;62D3; FA03;7CD6;7CD6;7CD6;7CD6; FA04;5B85;5B85;5B85;5B85; FA05;6D1E;6D1E;6D1E;6D1E; FA06;66B4;66B4;66B4;66B4; FA07;8F3B;8F3B;8F3B;8F3B; FA08;884C;884C;884C;884C; FA09;964D;964D;964D;964D; FA0A;898B;898B;898B;898B; FA0B;5ED3;5ED3;5ED3;5ED3; FA0C;5140;5140;5140;5140; FA0D;55C0;55C0;55C0;55C0; FA10;585A;585A;585A;585A; FA12;6674;6674;6674;6674; FA15;51DE;51DE;51DE;51DE; FA16;732A;732A;732A;732A; FA17;76CA;76CA;76CA;76CA; FA18;793C;793C;793C;793C; FA19;795E;795E;795E;795E; FA1A;7965;7965;7965;7965; FA1B;798F;798F;798F;798F; FA1C;9756;9756;9756;9756; FA1D;7CBE;7CBE;7CBE;7CBE; FA1E;7FBD;7FBD;7FBD;7FBD; FA20;8612;8612;8612;8612; FA22;8AF8;8AF8;8AF8;8AF8; FA25;9038;9038;9038;9038; FA26;90FD;90FD;90FD;90FD; FA2A;98EF;98EF;98EF;98EF; FA2B;98FC;98FC;98FC;98FC; FA2C;9928;9928;9928;9928; FA2D;9DB4;9DB4;9DB4;9DB4; FA30;4FAE;4FAE;4FAE;4FAE; FA31;50E7;50E7;50E7;50E7; FA32;514D;514D;514D;514D; FA33;52C9;52C9;52C9;52C9; FA34;52E4;52E4;52E4;52E4; FA35;5351;5351;5351;5351; FA36;559D;559D;559D;559D; FA37;5606;5606;5606;5606; FA38;5668;5668;5668;5668; FA39;5840;5840;5840;5840; FA3A;58A8;58A8;58A8;58A8; FA3B;5C64;5C64;5C64;5C64; FA3C;5C6E;5C6E;5C6E;5C6E; FA3D;6094;6094;6094;6094; FA3E;6168;6168;6168;6168; FA3F;618E;618E;618E;618E; FA40;61F2;61F2;61F2;61F2; FA41;654F;654F;654F;654F; FA42;65E2;65E2;65E2;65E2; FA43;6691;6691;6691;6691; FA44;6885;6885;6885;6885; FA45;6D77;6D77;6D77;6D77; FA46;6E1A;6E1A;6E1A;6E1A; FA47;6F22;6F22;6F22;6F22; FA48;716E;716E;716E;716E; FA49;722B;722B;722B;722B; FA4A;7422;7422;7422;7422; FA4B;7891;7891;7891;7891; FA4C;793E;793E;793E;793E; FA4D;7949;7949;7949;7949; FA4E;7948;7948;7948;7948; FA4F;7950;7950;7950;7950; FA50;7956;7956;7956;7956; FA51;795D;795D;795D;795D; FA52;798D;798D;798D;798D; FA53;798E;798E;798E;798E; FA54;7A40;7A40;7A40;7A40; FA55;7A81;7A81;7A81;7A81; FA56;7BC0;7BC0;7BC0;7BC0; FA57;7DF4;7DF4;7DF4;7DF4; FA58;7E09;7E09;7E09;7E09; FA59;7E41;7E41;7E41;7E41; FA5A;7F72;7F72;7F72;7F72; FA5B;8005;8005;8005;8005; FA5C;81ED;81ED;81ED;81ED; FA5D;8279;8279;8279;8279; FA5E;8279;8279;8279;8279; FA5F;8457;8457;8457;8457; FA60;8910;8910;8910;8910; FA61;8996;8996;8996;8996; FA62;8B01;8B01;8B01;8B01; FA63;8B39;8B39;8B39;8B39; FA64;8CD3;8CD3;8CD3;8CD3; FA65;8D08;8D08;8D08;8D08; FA66;8FB6;8FB6;8FB6;8FB6; FA67;9038;9038;9038;9038; FA68;96E3;96E3;96E3;96E3; FA69;97FF;97FF;97FF;97FF; FA6A;983B;983B;983B;983B; FA6B;6075;6075;6075;6075; FA6C;242EE;242EE;242EE;242EE; FA6D;8218;8218;8218;8218; FA70;4E26;4E26;4E26;4E26; FA71;51B5;51B5;51B5;51B5; FA72;5168;5168;5168;5168; FA73;4F80;4F80;4F80;4F80; FA74;5145;5145;5145;5145; FA75;5180;5180;5180;5180; FA76;52C7;52C7;52C7;52C7; FA77;52FA;52FA;52FA;52FA; FA78;559D;559D;559D;559D; FA79;5555;5555;5555;5555; FA7A;5599;5599;5599;5599; FA7B;55E2;55E2;55E2;55E2; FA7C;585A;585A;585A;585A; FA7D;58B3;58B3;58B3;58B3; FA7E;5944;5944;5944;5944; FA7F;5954;5954;5954;5954; FA80;5A62;5A62;5A62;5A62; FA81;5B28;5B28;5B28;5B28; FA82;5ED2;5ED2;5ED2;5ED2; FA83;5ED9;5ED9;5ED9;5ED9; FA84;5F69;5F69;5F69;5F69; FA85;5FAD;5FAD;5FAD;5FAD; FA86;60D8;60D8;60D8;60D8; FA87;614E;614E;614E;614E; FA88;6108;6108;6108;6108; FA89;618E;618E;618E;618E; FA8A;6160;6160;6160;6160; FA8B;61F2;61F2;61F2;61F2; FA8C;6234;6234;6234;6234; FA8D;63C4;63C4;63C4;63C4; FA8E;641C;641C;641C;641C; FA8F;6452;6452;6452;6452; FA90;6556;6556;6556;6556; FA91;6674;6674;6674;6674; FA92;6717;6717;6717;6717; FA93;671B;671B;671B;671B; FA94;6756;6756;6756;6756; FA95;6B79;6B79;6B79;6B79; FA96;6BBA;6BBA;6BBA;6BBA; FA97;6D41;6D41;6D41;6D41; FA98;6EDB;6EDB;6EDB;6EDB; FA99;6ECB;6ECB;6ECB;6ECB; FA9A;6F22;6F22;6F22;6F22; FA9B;701E;701E;701E;701E; FA9C;716E;716E;716E;716E; FA9D;77A7;77A7;77A7;77A7; FA9E;7235;7235;7235;7235; FA9F;72AF;72AF;72AF;72AF; FAA0;732A;732A;732A;732A; FAA1;7471;7471;7471;7471; FAA2;7506;7506;7506;7506; FAA3;753B;753B;753B;753B; FAA4;761D;761D;761D;761D; FAA5;761F;761F;761F;761F; FAA6;76CA;76CA;76CA;76CA; FAA7;76DB;76DB;76DB;76DB; FAA8;76F4;76F4;76F4;76F4; FAA9;774A;774A;774A;774A; FAAA;7740;7740;7740;7740; FAAB;78CC;78CC;78CC;78CC; FAAC;7AB1;7AB1;7AB1;7AB1; FAAD;7BC0;7BC0;7BC0;7BC0; FAAE;7C7B;7C7B;7C7B;7C7B; FAAF;7D5B;7D5B;7D5B;7D5B; FAB0;7DF4;7DF4;7DF4;7DF4; FAB1;7F3E;7F3E;7F3E;7F3E; FAB2;8005;8005;8005;8005; FAB3;8352;8352;8352;8352; FAB4;83EF;83EF;83EF;83EF; FAB5;8779;8779;8779;8779; FAB6;8941;8941;8941;8941; FAB7;8986;8986;8986;8986; FAB8;8996;8996;8996;8996; FAB9;8ABF;8ABF;8ABF;8ABF; FABA;8AF8;8AF8;8AF8;8AF8; FABB;8ACB;8ACB;8ACB;8ACB; FABC;8B01;8B01;8B01;8B01; FABD;8AFE;8AFE;8AFE;8AFE; FABE;8AED;8AED;8AED;8AED; FABF;8B39;8B39;8B39;8B39; FAC0;8B8A;8B8A;8B8A;8B8A; FAC1;8D08;8D08;8D08;8D08; FAC2;8F38;8F38;8F38;8F38; FAC3;9072;9072;9072;9072; FAC4;9199;9199;9199;9199; FAC5;9276;9276;9276;9276; FAC6;967C;967C;967C;967C; FAC7;96E3;96E3;96E3;96E3; FAC8;9756;9756;9756;9756; FAC9;97DB;97DB;97DB;97DB; FACA;97FF;97FF;97FF;97FF; FACB;980B;980B;980B;980B; FACC;983B;983B;983B;983B; FACD;9B12;9B12;9B12;9B12; FACE;9F9C;9F9C;9F9C;9F9C; FACF;2284A;2284A;2284A;2284A; FAD0;22844;22844;22844;22844; FAD1;233D5;233D5;233D5;233D5; FAD2;3B9D;3B9D;3B9D;3B9D; FAD3;4018;4018;4018;4018; FAD4;4039;4039;4039;4039; FAD5;25249;25249;25249;25249; FAD6;25CD0;25CD0;25CD0;25CD0; FAD7;27ED3;27ED3;27ED3;27ED3; FAD8;9F43;9F43;9F43;9F43; FAD9;9F8E;9F8E;9F8E;9F8E; FB00;FB00;FB00;0066 0066;0066 0066; FB01;FB01;FB01;0066 0069;0066 0069; FB02;FB02;FB02;0066 006C;0066 006C; FB03;FB03;FB03;0066 0066 0069;0066 0066 0069; FB04;FB04;FB04;0066 0066 006C;0066 0066 006C; FB05;FB05;FB05;0073 0074;0073 0074; FB06;FB06;FB06;0073 0074;0073 0074; FB13;FB13;FB13;0574 0576;0574 0576; FB14;FB14;FB14;0574 0565;0574 0565; FB15;FB15;FB15;0574 056B;0574 056B; FB16;FB16;FB16;057E 0576;057E 0576; FB17;FB17;FB17;0574 056D;0574 056D; FB1D;05D9 05B4;05D9 05B4;05D9 05B4;05D9 05B4; FB1F;05F2 05B7;05F2 05B7;05F2 05B7;05F2 05B7; FB20;FB20;FB20;05E2;05E2; FB21;FB21;FB21;05D0;05D0; FB22;FB22;FB22;05D3;05D3; FB23;FB23;FB23;05D4;05D4; FB24;FB24;FB24;05DB;05DB; FB25;FB25;FB25;05DC;05DC; FB26;FB26;FB26;05DD;05DD; FB27;FB27;FB27;05E8;05E8; FB28;FB28;FB28;05EA;05EA; FB29;FB29;FB29;002B;002B; FB2A;05E9 05C1;05E9 05C1;05E9 05C1;05E9 05C1; FB2B;05E9 05C2;05E9 05C2;05E9 05C2;05E9 05C2; FB2C;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1; FB2D;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2; FB2E;05D0 05B7;05D0 05B7;05D0 05B7;05D0 05B7; FB2F;05D0 05B8;05D0 05B8;05D0 05B8;05D0 05B8; FB30;05D0 05BC;05D0 05BC;05D0 05BC;05D0 05BC; FB31;05D1 05BC;05D1 05BC;05D1 05BC;05D1 05BC; FB32;05D2 05BC;05D2 05BC;05D2 05BC;05D2 05BC; FB33;05D3 05BC;05D3 05BC;05D3 05BC;05D3 05BC; FB34;05D4 05BC;05D4 05BC;05D4 05BC;05D4 05BC; FB35;05D5 05BC;05D5 05BC;05D5 05BC;05D5 05BC; FB36;05D6 05BC;05D6 05BC;05D6 05BC;05D6 05BC; FB38;05D8 05BC;05D8 05BC;05D8 05BC;05D8 05BC; FB39;05D9 05BC;05D9 05BC;05D9 05BC;05D9 05BC; FB3A;05DA 05BC;05DA 05BC;05DA 05BC;05DA 05BC; FB3B;05DB 05BC;05DB 05BC;05DB 05BC;05DB 05BC; FB3C;05DC 05BC;05DC 05BC;05DC 05BC;05DC 05BC; FB3E;05DE 05BC;05DE 05BC;05DE 05BC;05DE 05BC; FB40;05E0 05BC;05E0 05BC;05E0 05BC;05E0 05BC; FB41;05E1 05BC;05E1 05BC;05E1 05BC;05E1 05BC; FB43;05E3 05BC;05E3 05BC;05E3 05BC;05E3 05BC; FB44;05E4 05BC;05E4 05BC;05E4 05BC;05E4 05BC; FB46;05E6 05BC;05E6 05BC;05E6 05BC;05E6 05BC; FB47;05E7 05BC;05E7 05BC;05E7 05BC;05E7 05BC; FB48;05E8 05BC;05E8 05BC;05E8 05BC;05E8 05BC; FB49;05E9 05BC;05E9 05BC;05E9 05BC;05E9 05BC; FB4A;05EA 05BC;05EA 05BC;05EA 05BC;05EA 05BC; FB4B;05D5 05B9;05D5 05B9;05D5 05B9;05D5 05B9; FB4C;05D1 05BF;05D1 05BF;05D1 05BF;05D1 05BF; FB4D;05DB 05BF;05DB 05BF;05DB 05BF;05DB 05BF; FB4E;05E4 05BF;05E4 05BF;05E4 05BF;05E4 05BF; FB4F;FB4F;FB4F;05D0 05DC;05D0 05DC; FB50;FB50;FB50;0671;0671; FB51;FB51;FB51;0671;0671; FB52;FB52;FB52;067B;067B; FB53;FB53;FB53;067B;067B; FB54;FB54;FB54;067B;067B; FB55;FB55;FB55;067B;067B; FB56;FB56;FB56;067E;067E; FB57;FB57;FB57;067E;067E; FB58;FB58;FB58;067E;067E; FB59;FB59;FB59;067E;067E; FB5A;FB5A;FB5A;0680;0680; FB5B;FB5B;FB5B;0680;0680; FB5C;FB5C;FB5C;0680;0680; FB5D;FB5D;FB5D;0680;0680; FB5E;FB5E;FB5E;067A;067A; FB5F;FB5F;FB5F;067A;067A; FB60;FB60;FB60;067A;067A; FB61;FB61;FB61;067A;067A; FB62;FB62;FB62;067F;067F; FB63;FB63;FB63;067F;067F; FB64;FB64;FB64;067F;067F; FB65;FB65;FB65;067F;067F; FB66;FB66;FB66;0679;0679; FB67;FB67;FB67;0679;0679; FB68;FB68;FB68;0679;0679; FB69;FB69;FB69;0679;0679; FB6A;FB6A;FB6A;06A4;06A4; FB6B;FB6B;FB6B;06A4;06A4; FB6C;FB6C;FB6C;06A4;06A4; FB6D;FB6D;FB6D;06A4;06A4; FB6E;FB6E;FB6E;06A6;06A6; FB6F;FB6F;FB6F;06A6;06A6; FB70;FB70;FB70;06A6;06A6; FB71;FB71;FB71;06A6;06A6; FB72;FB72;FB72;0684;0684; FB73;FB73;FB73;0684;0684; FB74;FB74;FB74;0684;0684; FB75;FB75;FB75;0684;0684; FB76;FB76;FB76;0683;0683; FB77;FB77;FB77;0683;0683; FB78;FB78;FB78;0683;0683; FB79;FB79;FB79;0683;0683; FB7A;FB7A;FB7A;0686;0686; FB7B;FB7B;FB7B;0686;0686; FB7C;FB7C;FB7C;0686;0686; FB7D;FB7D;FB7D;0686;0686; FB7E;FB7E;FB7E;0687;0687; FB7F;FB7F;FB7F;0687;0687; FB80;FB80;FB80;0687;0687; FB81;FB81;FB81;0687;0687; FB82;FB82;FB82;068D;068D; FB83;FB83;FB83;068D;068D; FB84;FB84;FB84;068C;068C; FB85;FB85;FB85;068C;068C; FB86;FB86;FB86;068E;068E; FB87;FB87;FB87;068E;068E; FB88;FB88;FB88;0688;0688; FB89;FB89;FB89;0688;0688; FB8A;FB8A;FB8A;0698;0698; FB8B;FB8B;FB8B;0698;0698; FB8C;FB8C;FB8C;0691;0691; FB8D;FB8D;FB8D;0691;0691; FB8E;FB8E;FB8E;06A9;06A9; FB8F;FB8F;FB8F;06A9;06A9; FB90;FB90;FB90;06A9;06A9; FB91;FB91;FB91;06A9;06A9; FB92;FB92;FB92;06AF;06AF; FB93;FB93;FB93;06AF;06AF; FB94;FB94;FB94;06AF;06AF; FB95;FB95;FB95;06AF;06AF; FB96;FB96;FB96;06B3;06B3; FB97;FB97;FB97;06B3;06B3; FB98;FB98;FB98;06B3;06B3; FB99;FB99;FB99;06B3;06B3; FB9A;FB9A;FB9A;06B1;06B1; FB9B;FB9B;FB9B;06B1;06B1; FB9C;FB9C;FB9C;06B1;06B1; FB9D;FB9D;FB9D;06B1;06B1; FB9E;FB9E;FB9E;06BA;06BA; FB9F;FB9F;FB9F;06BA;06BA; FBA0;FBA0;FBA0;06BB;06BB; FBA1;FBA1;FBA1;06BB;06BB; FBA2;FBA2;FBA2;06BB;06BB; FBA3;FBA3;FBA3;06BB;06BB; FBA4;FBA4;FBA4;06C0;06D5 0654; FBA5;FBA5;FBA5;06C0;06D5 0654; FBA6;FBA6;FBA6;06C1;06C1; FBA7;FBA7;FBA7;06C1;06C1; FBA8;FBA8;FBA8;06C1;06C1; FBA9;FBA9;FBA9;06C1;06C1; FBAA;FBAA;FBAA;06BE;06BE; FBAB;FBAB;FBAB;06BE;06BE; FBAC;FBAC;FBAC;06BE;06BE; FBAD;FBAD;FBAD;06BE;06BE; FBAE;FBAE;FBAE;06D2;06D2; FBAF;FBAF;FBAF;06D2;06D2; FBB0;FBB0;FBB0;06D3;06D2 0654; FBB1;FBB1;FBB1;06D3;06D2 0654; FBD3;FBD3;FBD3;06AD;06AD; FBD4;FBD4;FBD4;06AD;06AD; FBD5;FBD5;FBD5;06AD;06AD; FBD6;FBD6;FBD6;06AD;06AD; FBD7;FBD7;FBD7;06C7;06C7; FBD8;FBD8;FBD8;06C7;06C7; FBD9;FBD9;FBD9;06C6;06C6; FBDA;FBDA;FBDA;06C6;06C6; FBDB;FBDB;FBDB;06C8;06C8; FBDC;FBDC;FBDC;06C8;06C8; FBDD;FBDD;FBDD;06C7 0674;06C7 0674; FBDE;FBDE;FBDE;06CB;06CB; FBDF;FBDF;FBDF;06CB;06CB; FBE0;FBE0;FBE0;06C5;06C5; FBE1;FBE1;FBE1;06C5;06C5; FBE2;FBE2;FBE2;06C9;06C9; FBE3;FBE3;FBE3;06C9;06C9; FBE4;FBE4;FBE4;06D0;06D0; FBE5;FBE5;FBE5;06D0;06D0; FBE6;FBE6;FBE6;06D0;06D0; FBE7;FBE7;FBE7;06D0;06D0; FBE8;FBE8;FBE8;0649;0649; FBE9;FBE9;FBE9;0649;0649; FBEA;FBEA;FBEA;0626 0627;064A 0654 0627; FBEB;FBEB;FBEB;0626 0627;064A 0654 0627; FBEC;FBEC;FBEC;0626 06D5;064A 0654 06D5; FBED;FBED;FBED;0626 06D5;064A 0654 06D5; FBEE;FBEE;FBEE;0626 0648;064A 0654 0648; FBEF;FBEF;FBEF;0626 0648;064A 0654 0648; FBF0;FBF0;FBF0;0626 06C7;064A 0654 06C7; FBF1;FBF1;FBF1;0626 06C7;064A 0654 06C7; FBF2;FBF2;FBF2;0626 06C6;064A 0654 06C6; FBF3;FBF3;FBF3;0626 06C6;064A 0654 06C6; FBF4;FBF4;FBF4;0626 06C8;064A 0654 06C8; FBF5;FBF5;FBF5;0626 06C8;064A 0654 06C8; FBF6;FBF6;FBF6;0626 06D0;064A 0654 06D0; FBF7;FBF7;FBF7;0626 06D0;064A 0654 06D0; FBF8;FBF8;FBF8;0626 06D0;064A 0654 06D0; FBF9;FBF9;FBF9;0626 0649;064A 0654 0649; FBFA;FBFA;FBFA;0626 0649;064A 0654 0649; FBFB;FBFB;FBFB;0626 0649;064A 0654 0649; FBFC;FBFC;FBFC;06CC;06CC; FBFD;FBFD;FBFD;06CC;06CC; FBFE;FBFE;FBFE;06CC;06CC; FBFF;FBFF;FBFF;06CC;06CC; FC00;FC00;FC00;0626 062C;064A 0654 062C; FC01;FC01;FC01;0626 062D;064A 0654 062D; FC02;FC02;FC02;0626 0645;064A 0654 0645; FC03;FC03;FC03;0626 0649;064A 0654 0649; FC04;FC04;FC04;0626 064A;064A 0654 064A; FC05;FC05;FC05;0628 062C;0628 062C; FC06;FC06;FC06;0628 062D;0628 062D; FC07;FC07;FC07;0628 062E;0628 062E; FC08;FC08;FC08;0628 0645;0628 0645; FC09;FC09;FC09;0628 0649;0628 0649; FC0A;FC0A;FC0A;0628 064A;0628 064A; FC0B;FC0B;FC0B;062A 062C;062A 062C; FC0C;FC0C;FC0C;062A 062D;062A 062D; FC0D;FC0D;FC0D;062A 062E;062A 062E; FC0E;FC0E;FC0E;062A 0645;062A 0645; FC0F;FC0F;FC0F;062A 0649;062A 0649; FC10;FC10;FC10;062A 064A;062A 064A; FC11;FC11;FC11;062B 062C;062B 062C; FC12;FC12;FC12;062B 0645;062B 0645; FC13;FC13;FC13;062B 0649;062B 0649; FC14;FC14;FC14;062B 064A;062B 064A; FC15;FC15;FC15;062C 062D;062C 062D; FC16;FC16;FC16;062C 0645;062C 0645; FC17;FC17;FC17;062D 062C;062D 062C; FC18;FC18;FC18;062D 0645;062D 0645; FC19;FC19;FC19;062E 062C;062E 062C; FC1A;FC1A;FC1A;062E 062D;062E 062D; FC1B;FC1B;FC1B;062E 0645;062E 0645; FC1C;FC1C;FC1C;0633 062C;0633 062C; FC1D;FC1D;FC1D;0633 062D;0633 062D; FC1E;FC1E;FC1E;0633 062E;0633 062E; FC1F;FC1F;FC1F;0633 0645;0633 0645; FC20;FC20;FC20;0635 062D;0635 062D; FC21;FC21;FC21;0635 0645;0635 0645; FC22;FC22;FC22;0636 062C;0636 062C; FC23;FC23;FC23;0636 062D;0636 062D; FC24;FC24;FC24;0636 062E;0636 062E; FC25;FC25;FC25;0636 0645;0636 0645; FC26;FC26;FC26;0637 062D;0637 062D; FC27;FC27;FC27;0637 0645;0637 0645; FC28;FC28;FC28;0638 0645;0638 0645; FC29;FC29;FC29;0639 062C;0639 062C; FC2A;FC2A;FC2A;0639 0645;0639 0645; FC2B;FC2B;FC2B;063A 062C;063A 062C; FC2C;FC2C;FC2C;063A 0645;063A 0645; FC2D;FC2D;FC2D;0641 062C;0641 062C; FC2E;FC2E;FC2E;0641 062D;0641 062D; FC2F;FC2F;FC2F;0641 062E;0641 062E; FC30;FC30;FC30;0641 0645;0641 0645; FC31;FC31;FC31;0641 0649;0641 0649; FC32;FC32;FC32;0641 064A;0641 064A; FC33;FC33;FC33;0642 062D;0642 062D; FC34;FC34;FC34;0642 0645;0642 0645; FC35;FC35;FC35;0642 0649;0642 0649; FC36;FC36;FC36;0642 064A;0642 064A; FC37;FC37;FC37;0643 0627;0643 0627; FC38;FC38;FC38;0643 062C;0643 062C; FC39;FC39;FC39;0643 062D;0643 062D; FC3A;FC3A;FC3A;0643 062E;0643 062E; FC3B;FC3B;FC3B;0643 0644;0643 0644; FC3C;FC3C;FC3C;0643 0645;0643 0645; FC3D;FC3D;FC3D;0643 0649;0643 0649; FC3E;FC3E;FC3E;0643 064A;0643 064A; FC3F;FC3F;FC3F;0644 062C;0644 062C; FC40;FC40;FC40;0644 062D;0644 062D; FC41;FC41;FC41;0644 062E;0644 062E; FC42;FC42;FC42;0644 0645;0644 0645; FC43;FC43;FC43;0644 0649;0644 0649; FC44;FC44;FC44;0644 064A;0644 064A; FC45;FC45;FC45;0645 062C;0645 062C; FC46;FC46;FC46;0645 062D;0645 062D; FC47;FC47;FC47;0645 062E;0645 062E; FC48;FC48;FC48;0645 0645;0645 0645; FC49;FC49;FC49;0645 0649;0645 0649; FC4A;FC4A;FC4A;0645 064A;0645 064A; FC4B;FC4B;FC4B;0646 062C;0646 062C; FC4C;FC4C;FC4C;0646 062D;0646 062D; FC4D;FC4D;FC4D;0646 062E;0646 062E; FC4E;FC4E;FC4E;0646 0645;0646 0645; FC4F;FC4F;FC4F;0646 0649;0646 0649; FC50;FC50;FC50;0646 064A;0646 064A; FC51;FC51;FC51;0647 062C;0647 062C; FC52;FC52;FC52;0647 0645;0647 0645; FC53;FC53;FC53;0647 0649;0647 0649; FC54;FC54;FC54;0647 064A;0647 064A; FC55;FC55;FC55;064A 062C;064A 062C; FC56;FC56;FC56;064A 062D;064A 062D; FC57;FC57;FC57;064A 062E;064A 062E; FC58;FC58;FC58;064A 0645;064A 0645; FC59;FC59;FC59;064A 0649;064A 0649; FC5A;FC5A;FC5A;064A 064A;064A 064A; FC5B;FC5B;FC5B;0630 0670;0630 0670; FC5C;FC5C;FC5C;0631 0670;0631 0670; FC5D;FC5D;FC5D;0649 0670;0649 0670; FC5E;FC5E;FC5E;0020 064C 0651;0020 064C 0651; FC5F;FC5F;FC5F;0020 064D 0651;0020 064D 0651; FC60;FC60;FC60;0020 064E 0651;0020 064E 0651; FC61;FC61;FC61;0020 064F 0651;0020 064F 0651; FC62;FC62;FC62;0020 0650 0651;0020 0650 0651; FC63;FC63;FC63;0020 0651 0670;0020 0651 0670; FC64;FC64;FC64;0626 0631;064A 0654 0631; FC65;FC65;FC65;0626 0632;064A 0654 0632; FC66;FC66;FC66;0626 0645;064A 0654 0645; FC67;FC67;FC67;0626 0646;064A 0654 0646; FC68;FC68;FC68;0626 0649;064A 0654 0649; FC69;FC69;FC69;0626 064A;064A 0654 064A; FC6A;FC6A;FC6A;0628 0631;0628 0631; FC6B;FC6B;FC6B;0628 0632;0628 0632; FC6C;FC6C;FC6C;0628 0645;0628 0645; FC6D;FC6D;FC6D;0628 0646;0628 0646; FC6E;FC6E;FC6E;0628 0649;0628 0649; FC6F;FC6F;FC6F;0628 064A;0628 064A; FC70;FC70;FC70;062A 0631;062A 0631; FC71;FC71;FC71;062A 0632;062A 0632; FC72;FC72;FC72;062A 0645;062A 0645; FC73;FC73;FC73;062A 0646;062A 0646; FC74;FC74;FC74;062A 0649;062A 0649; FC75;FC75;FC75;062A 064A;062A 064A; FC76;FC76;FC76;062B 0631;062B 0631; FC77;FC77;FC77;062B 0632;062B 0632; FC78;FC78;FC78;062B 0645;062B 0645; FC79;FC79;FC79;062B 0646;062B 0646; FC7A;FC7A;FC7A;062B 0649;062B 0649; FC7B;FC7B;FC7B;062B 064A;062B 064A; FC7C;FC7C;FC7C;0641 0649;0641 0649; FC7D;FC7D;FC7D;0641 064A;0641 064A; FC7E;FC7E;FC7E;0642 0649;0642 0649; FC7F;FC7F;FC7F;0642 064A;0642 064A; FC80;FC80;FC80;0643 0627;0643 0627; FC81;FC81;FC81;0643 0644;0643 0644; FC82;FC82;FC82;0643 0645;0643 0645; FC83;FC83;FC83;0643 0649;0643 0649; FC84;FC84;FC84;0643 064A;0643 064A; FC85;FC85;FC85;0644 0645;0644 0645; FC86;FC86;FC86;0644 0649;0644 0649; FC87;FC87;FC87;0644 064A;0644 064A; FC88;FC88;FC88;0645 0627;0645 0627; FC89;FC89;FC89;0645 0645;0645 0645; FC8A;FC8A;FC8A;0646 0631;0646 0631; FC8B;FC8B;FC8B;0646 0632;0646 0632; FC8C;FC8C;FC8C;0646 0645;0646 0645; FC8D;FC8D;FC8D;0646 0646;0646 0646; FC8E;FC8E;FC8E;0646 0649;0646 0649; FC8F;FC8F;FC8F;0646 064A;0646 064A; FC90;FC90;FC90;0649 0670;0649 0670; FC91;FC91;FC91;064A 0631;064A 0631; FC92;FC92;FC92;064A 0632;064A 0632; FC93;FC93;FC93;064A 0645;064A 0645; FC94;FC94;FC94;064A 0646;064A 0646; FC95;FC95;FC95;064A 0649;064A 0649; FC96;FC96;FC96;064A 064A;064A 064A; FC97;FC97;FC97;0626 062C;064A 0654 062C; FC98;FC98;FC98;0626 062D;064A 0654 062D; FC99;FC99;FC99;0626 062E;064A 0654 062E; FC9A;FC9A;FC9A;0626 0645;064A 0654 0645; FC9B;FC9B;FC9B;0626 0647;064A 0654 0647; FC9C;FC9C;FC9C;0628 062C;0628 062C; FC9D;FC9D;FC9D;0628 062D;0628 062D; FC9E;FC9E;FC9E;0628 062E;0628 062E; FC9F;FC9F;FC9F;0628 0645;0628 0645; FCA0;FCA0;FCA0;0628 0647;0628 0647; FCA1;FCA1;FCA1;062A 062C;062A 062C; FCA2;FCA2;FCA2;062A 062D;062A 062D; FCA3;FCA3;FCA3;062A 062E;062A 062E; FCA4;FCA4;FCA4;062A 0645;062A 0645; FCA5;FCA5;FCA5;062A 0647;062A 0647; FCA6;FCA6;FCA6;062B 0645;062B 0645; FCA7;FCA7;FCA7;062C 062D;062C 062D; FCA8;FCA8;FCA8;062C 0645;062C 0645; FCA9;FCA9;FCA9;062D 062C;062D 062C; FCAA;FCAA;FCAA;062D 0645;062D 0645; FCAB;FCAB;FCAB;062E 062C;062E 062C; FCAC;FCAC;FCAC;062E 0645;062E 0645; FCAD;FCAD;FCAD;0633 062C;0633 062C; FCAE;FCAE;FCAE;0633 062D;0633 062D; FCAF;FCAF;FCAF;0633 062E;0633 062E; FCB0;FCB0;FCB0;0633 0645;0633 0645; FCB1;FCB1;FCB1;0635 062D;0635 062D; FCB2;FCB2;FCB2;0635 062E;0635 062E; FCB3;FCB3;FCB3;0635 0645;0635 0645; FCB4;FCB4;FCB4;0636 062C;0636 062C; FCB5;FCB5;FCB5;0636 062D;0636 062D; FCB6;FCB6;FCB6;0636 062E;0636 062E; FCB7;FCB7;FCB7;0636 0645;0636 0645; FCB8;FCB8;FCB8;0637 062D;0637 062D; FCB9;FCB9;FCB9;0638 0645;0638 0645; FCBA;FCBA;FCBA;0639 062C;0639 062C; FCBB;FCBB;FCBB;0639 0645;0639 0645; FCBC;FCBC;FCBC;063A 062C;063A 062C; FCBD;FCBD;FCBD;063A 0645;063A 0645; FCBE;FCBE;FCBE;0641 062C;0641 062C; FCBF;FCBF;FCBF;0641 062D;0641 062D; FCC0;FCC0;FCC0;0641 062E;0641 062E; FCC1;FCC1;FCC1;0641 0645;0641 0645; FCC2;FCC2;FCC2;0642 062D;0642 062D; FCC3;FCC3;FCC3;0642 0645;0642 0645; FCC4;FCC4;FCC4;0643 062C;0643 062C; FCC5;FCC5;FCC5;0643 062D;0643 062D; FCC6;FCC6;FCC6;0643 062E;0643 062E; FCC7;FCC7;FCC7;0643 0644;0643 0644; FCC8;FCC8;FCC8;0643 0645;0643 0645; FCC9;FCC9;FCC9;0644 062C;0644 062C; FCCA;FCCA;FCCA;0644 062D;0644 062D; FCCB;FCCB;FCCB;0644 062E;0644 062E; FCCC;FCCC;FCCC;0644 0645;0644 0645; FCCD;FCCD;FCCD;0644 0647;0644 0647; FCCE;FCCE;FCCE;0645 062C;0645 062C; FCCF;FCCF;FCCF;0645 062D;0645 062D; FCD0;FCD0;FCD0;0645 062E;0645 062E; FCD1;FCD1;FCD1;0645 0645;0645 0645; FCD2;FCD2;FCD2;0646 062C;0646 062C; FCD3;FCD3;FCD3;0646 062D;0646 062D; FCD4;FCD4;FCD4;0646 062E;0646 062E; FCD5;FCD5;FCD5;0646 0645;0646 0645; FCD6;FCD6;FCD6;0646 0647;0646 0647; FCD7;FCD7;FCD7;0647 062C;0647 062C; FCD8;FCD8;FCD8;0647 0645;0647 0645; FCD9;FCD9;FCD9;0647 0670;0647 0670; FCDA;FCDA;FCDA;064A 062C;064A 062C; FCDB;FCDB;FCDB;064A 062D;064A 062D; FCDC;FCDC;FCDC;064A 062E;064A 062E; FCDD;FCDD;FCDD;064A 0645;064A 0645; FCDE;FCDE;FCDE;064A 0647;064A 0647; FCDF;FCDF;FCDF;0626 0645;064A 0654 0645; FCE0;FCE0;FCE0;0626 0647;064A 0654 0647; FCE1;FCE1;FCE1;0628 0645;0628 0645; FCE2;FCE2;FCE2;0628 0647;0628 0647; FCE3;FCE3;FCE3;062A 0645;062A 0645; FCE4;FCE4;FCE4;062A 0647;062A 0647; FCE5;FCE5;FCE5;062B 0645;062B 0645; FCE6;FCE6;FCE6;062B 0647;062B 0647; FCE7;FCE7;FCE7;0633 0645;0633 0645; FCE8;FCE8;FCE8;0633 0647;0633 0647; FCE9;FCE9;FCE9;0634 0645;0634 0645; FCEA;FCEA;FCEA;0634 0647;0634 0647; FCEB;FCEB;FCEB;0643 0644;0643 0644; FCEC;FCEC;FCEC;0643 0645;0643 0645; FCED;FCED;FCED;0644 0645;0644 0645; FCEE;FCEE;FCEE;0646 0645;0646 0645; FCEF;FCEF;FCEF;0646 0647;0646 0647; FCF0;FCF0;FCF0;064A 0645;064A 0645; FCF1;FCF1;FCF1;064A 0647;064A 0647; FCF2;FCF2;FCF2;0640 064E 0651;0640 064E 0651; FCF3;FCF3;FCF3;0640 064F 0651;0640 064F 0651; FCF4;FCF4;FCF4;0640 0650 0651;0640 0650 0651; FCF5;FCF5;FCF5;0637 0649;0637 0649; FCF6;FCF6;FCF6;0637 064A;0637 064A; FCF7;FCF7;FCF7;0639 0649;0639 0649; FCF8;FCF8;FCF8;0639 064A;0639 064A; FCF9;FCF9;FCF9;063A 0649;063A 0649; FCFA;FCFA;FCFA;063A 064A;063A 064A; FCFB;FCFB;FCFB;0633 0649;0633 0649; FCFC;FCFC;FCFC;0633 064A;0633 064A; FCFD;FCFD;FCFD;0634 0649;0634 0649; FCFE;FCFE;FCFE;0634 064A;0634 064A; FCFF;FCFF;FCFF;062D 0649;062D 0649; FD00;FD00;FD00;062D 064A;062D 064A; FD01;FD01;FD01;062C 0649;062C 0649; FD02;FD02;FD02;062C 064A;062C 064A; FD03;FD03;FD03;062E 0649;062E 0649; FD04;FD04;FD04;062E 064A;062E 064A; FD05;FD05;FD05;0635 0649;0635 0649; FD06;FD06;FD06;0635 064A;0635 064A; FD07;FD07;FD07;0636 0649;0636 0649; FD08;FD08;FD08;0636 064A;0636 064A; FD09;FD09;FD09;0634 062C;0634 062C; FD0A;FD0A;FD0A;0634 062D;0634 062D; FD0B;FD0B;FD0B;0634 062E;0634 062E; FD0C;FD0C;FD0C;0634 0645;0634 0645; FD0D;FD0D;FD0D;0634 0631;0634 0631; FD0E;FD0E;FD0E;0633 0631;0633 0631; FD0F;FD0F;FD0F;0635 0631;0635 0631; FD10;FD10;FD10;0636 0631;0636 0631; FD11;FD11;FD11;0637 0649;0637 0649; FD12;FD12;FD12;0637 064A;0637 064A; FD13;FD13;FD13;0639 0649;0639 0649; FD14;FD14;FD14;0639 064A;0639 064A; FD15;FD15;FD15;063A 0649;063A 0649; FD16;FD16;FD16;063A 064A;063A 064A; FD17;FD17;FD17;0633 0649;0633 0649; FD18;FD18;FD18;0633 064A;0633 064A; FD19;FD19;FD19;0634 0649;0634 0649; FD1A;FD1A;FD1A;0634 064A;0634 064A; FD1B;FD1B;FD1B;062D 0649;062D 0649; FD1C;FD1C;FD1C;062D 064A;062D 064A; FD1D;FD1D;FD1D;062C 0649;062C 0649; FD1E;FD1E;FD1E;062C 064A;062C 064A; FD1F;FD1F;FD1F;062E 0649;062E 0649; FD20;FD20;FD20;062E 064A;062E 064A; FD21;FD21;FD21;0635 0649;0635 0649; FD22;FD22;FD22;0635 064A;0635 064A; FD23;FD23;FD23;0636 0649;0636 0649; FD24;FD24;FD24;0636 064A;0636 064A; FD25;FD25;FD25;0634 062C;0634 062C; FD26;FD26;FD26;0634 062D;0634 062D; FD27;FD27;FD27;0634 062E;0634 062E; FD28;FD28;FD28;0634 0645;0634 0645; FD29;FD29;FD29;0634 0631;0634 0631; FD2A;FD2A;FD2A;0633 0631;0633 0631; FD2B;FD2B;FD2B;0635 0631;0635 0631; FD2C;FD2C;FD2C;0636 0631;0636 0631; FD2D;FD2D;FD2D;0634 062C;0634 062C; FD2E;FD2E;FD2E;0634 062D;0634 062D; FD2F;FD2F;FD2F;0634 062E;0634 062E; FD30;FD30;FD30;0634 0645;0634 0645; FD31;FD31;FD31;0633 0647;0633 0647; FD32;FD32;FD32;0634 0647;0634 0647; FD33;FD33;FD33;0637 0645;0637 0645; FD34;FD34;FD34;0633 062C;0633 062C; FD35;FD35;FD35;0633 062D;0633 062D; FD36;FD36;FD36;0633 062E;0633 062E; FD37;FD37;FD37;0634 062C;0634 062C; FD38;FD38;FD38;0634 062D;0634 062D; FD39;FD39;FD39;0634 062E;0634 062E; FD3A;FD3A;FD3A;0637 0645;0637 0645; FD3B;FD3B;FD3B;0638 0645;0638 0645; FD3C;FD3C;FD3C;0627 064B;0627 064B; FD3D;FD3D;FD3D;0627 064B;0627 064B; FD50;FD50;FD50;062A 062C 0645;062A 062C 0645; FD51;FD51;FD51;062A 062D 062C;062A 062D 062C; FD52;FD52;FD52;062A 062D 062C;062A 062D 062C; FD53;FD53;FD53;062A 062D 0645;062A 062D 0645; FD54;FD54;FD54;062A 062E 0645;062A 062E 0645; FD55;FD55;FD55;062A 0645 062C;062A 0645 062C; FD56;FD56;FD56;062A 0645 062D;062A 0645 062D; FD57;FD57;FD57;062A 0645 062E;062A 0645 062E; FD58;FD58;FD58;062C 0645 062D;062C 0645 062D; FD59;FD59;FD59;062C 0645 062D;062C 0645 062D; FD5A;FD5A;FD5A;062D 0645 064A;062D 0645 064A; FD5B;FD5B;FD5B;062D 0645 0649;062D 0645 0649; FD5C;FD5C;FD5C;0633 062D 062C;0633 062D 062C; FD5D;FD5D;FD5D;0633 062C 062D;0633 062C 062D; FD5E;FD5E;FD5E;0633 062C 0649;0633 062C 0649; FD5F;FD5F;FD5F;0633 0645 062D;0633 0645 062D; FD60;FD60;FD60;0633 0645 062D;0633 0645 062D; FD61;FD61;FD61;0633 0645 062C;0633 0645 062C; FD62;FD62;FD62;0633 0645 0645;0633 0645 0645; FD63;FD63;FD63;0633 0645 0645;0633 0645 0645; FD64;FD64;FD64;0635 062D 062D;0635 062D 062D; FD65;FD65;FD65;0635 062D 062D;0635 062D 062D; FD66;FD66;FD66;0635 0645 0645;0635 0645 0645; FD67;FD67;FD67;0634 062D 0645;0634 062D 0645; FD68;FD68;FD68;0634 062D 0645;0634 062D 0645; FD69;FD69;FD69;0634 062C 064A;0634 062C 064A; FD6A;FD6A;FD6A;0634 0645 062E;0634 0645 062E; FD6B;FD6B;FD6B;0634 0645 062E;0634 0645 062E; FD6C;FD6C;FD6C;0634 0645 0645;0634 0645 0645; FD6D;FD6D;FD6D;0634 0645 0645;0634 0645 0645; FD6E;FD6E;FD6E;0636 062D 0649;0636 062D 0649; FD6F;FD6F;FD6F;0636 062E 0645;0636 062E 0645; FD70;FD70;FD70;0636 062E 0645;0636 062E 0645; FD71;FD71;FD71;0637 0645 062D;0637 0645 062D; FD72;FD72;FD72;0637 0645 062D;0637 0645 062D; FD73;FD73;FD73;0637 0645 0645;0637 0645 0645; FD74;FD74;FD74;0637 0645 064A;0637 0645 064A; FD75;FD75;FD75;0639 062C 0645;0639 062C 0645; FD76;FD76;FD76;0639 0645 0645;0639 0645 0645; FD77;FD77;FD77;0639 0645 0645;0639 0645 0645; FD78;FD78;FD78;0639 0645 0649;0639 0645 0649; FD79;FD79;FD79;063A 0645 0645;063A 0645 0645; FD7A;FD7A;FD7A;063A 0645 064A;063A 0645 064A; FD7B;FD7B;FD7B;063A 0645 0649;063A 0645 0649; FD7C;FD7C;FD7C;0641 062E 0645;0641 062E 0645; FD7D;FD7D;FD7D;0641 062E 0645;0641 062E 0645; FD7E;FD7E;FD7E;0642 0645 062D;0642 0645 062D; FD7F;FD7F;FD7F;0642 0645 0645;0642 0645 0645; FD80;FD80;FD80;0644 062D 0645;0644 062D 0645; FD81;FD81;FD81;0644 062D 064A;0644 062D 064A; FD82;FD82;FD82;0644 062D 0649;0644 062D 0649; FD83;FD83;FD83;0644 062C 062C;0644 062C 062C; FD84;FD84;FD84;0644 062C 062C;0644 062C 062C; FD85;FD85;FD85;0644 062E 0645;0644 062E 0645; FD86;FD86;FD86;0644 062E 0645;0644 062E 0645; FD87;FD87;FD87;0644 0645 062D;0644 0645 062D; FD88;FD88;FD88;0644 0645 062D;0644 0645 062D; FD89;FD89;FD89;0645 062D 062C;0645 062D 062C; FD8A;FD8A;FD8A;0645 062D 0645;0645 062D 0645; FD8B;FD8B;FD8B;0645 062D 064A;0645 062D 064A; FD8C;FD8C;FD8C;0645 062C 062D;0645 062C 062D; FD8D;FD8D;FD8D;0645 062C 0645;0645 062C 0645; FD8E;FD8E;FD8E;0645 062E 062C;0645 062E 062C; FD8F;FD8F;FD8F;0645 062E 0645;0645 062E 0645; FD92;FD92;FD92;0645 062C 062E;0645 062C 062E; FD93;FD93;FD93;0647 0645 062C;0647 0645 062C; FD94;FD94;FD94;0647 0645 0645;0647 0645 0645; FD95;FD95;FD95;0646 062D 0645;0646 062D 0645; FD96;FD96;FD96;0646 062D 0649;0646 062D 0649; FD97;FD97;FD97;0646 062C 0645;0646 062C 0645; FD98;FD98;FD98;0646 062C 0645;0646 062C 0645; FD99;FD99;FD99;0646 062C 0649;0646 062C 0649; FD9A;FD9A;FD9A;0646 0645 064A;0646 0645 064A; FD9B;FD9B;FD9B;0646 0645 0649;0646 0645 0649; FD9C;FD9C;FD9C;064A 0645 0645;064A 0645 0645; FD9D;FD9D;FD9D;064A 0645 0645;064A 0645 0645; FD9E;FD9E;FD9E;0628 062E 064A;0628 062E 064A; FD9F;FD9F;FD9F;062A 062C 064A;062A 062C 064A; FDA0;FDA0;FDA0;062A 062C 0649;062A 062C 0649; FDA1;FDA1;FDA1;062A 062E 064A;062A 062E 064A; FDA2;FDA2;FDA2;062A 062E 0649;062A 062E 0649; FDA3;FDA3;FDA3;062A 0645 064A;062A 0645 064A; FDA4;FDA4;FDA4;062A 0645 0649;062A 0645 0649; FDA5;FDA5;FDA5;062C 0645 064A;062C 0645 064A; FDA6;FDA6;FDA6;062C 062D 0649;062C 062D 0649; FDA7;FDA7;FDA7;062C 0645 0649;062C 0645 0649; FDA8;FDA8;FDA8;0633 062E 0649;0633 062E 0649; FDA9;FDA9;FDA9;0635 062D 064A;0635 062D 064A; FDAA;FDAA;FDAA;0634 062D 064A;0634 062D 064A; FDAB;FDAB;FDAB;0636 062D 064A;0636 062D 064A; FDAC;FDAC;FDAC;0644 062C 064A;0644 062C 064A; FDAD;FDAD;FDAD;0644 0645 064A;0644 0645 064A; FDAE;FDAE;FDAE;064A 062D 064A;064A 062D 064A; FDAF;FDAF;FDAF;064A 062C 064A;064A 062C 064A; FDB0;FDB0;FDB0;064A 0645 064A;064A 0645 064A; FDB1;FDB1;FDB1;0645 0645 064A;0645 0645 064A; FDB2;FDB2;FDB2;0642 0645 064A;0642 0645 064A; FDB3;FDB3;FDB3;0646 062D 064A;0646 062D 064A; FDB4;FDB4;FDB4;0642 0645 062D;0642 0645 062D; FDB5;FDB5;FDB5;0644 062D 0645;0644 062D 0645; FDB6;FDB6;FDB6;0639 0645 064A;0639 0645 064A; FDB7;FDB7;FDB7;0643 0645 064A;0643 0645 064A; FDB8;FDB8;FDB8;0646 062C 062D;0646 062C 062D; FDB9;FDB9;FDB9;0645 062E 064A;0645 062E 064A; FDBA;FDBA;FDBA;0644 062C 0645;0644 062C 0645; FDBB;FDBB;FDBB;0643 0645 0645;0643 0645 0645; FDBC;FDBC;FDBC;0644 062C 0645;0644 062C 0645; FDBD;FDBD;FDBD;0646 062C 062D;0646 062C 062D; FDBE;FDBE;FDBE;062C 062D 064A;062C 062D 064A; FDBF;FDBF;FDBF;062D 062C 064A;062D 062C 064A; FDC0;FDC0;FDC0;0645 062C 064A;0645 062C 064A; FDC1;FDC1;FDC1;0641 0645 064A;0641 0645 064A; FDC2;FDC2;FDC2;0628 062D 064A;0628 062D 064A; FDC3;FDC3;FDC3;0643 0645 0645;0643 0645 0645; FDC4;FDC4;FDC4;0639 062C 0645;0639 062C 0645; FDC5;FDC5;FDC5;0635 0645 0645;0635 0645 0645; FDC6;FDC6;FDC6;0633 062E 064A;0633 062E 064A; FDC7;FDC7;FDC7;0646 062C 064A;0646 062C 064A; FDF0;FDF0;FDF0;0635 0644 06D2;0635 0644 06D2; FDF1;FDF1;FDF1;0642 0644 06D2;0642 0644 06D2; FDF2;FDF2;FDF2;0627 0644 0644 0647;0627 0644 0644 0647; FDF3;FDF3;FDF3;0627 0643 0628 0631;0627 0643 0628 0631; FDF4;FDF4;FDF4;0645 062D 0645 062F;0645 062D 0645 062F; FDF5;FDF5;FDF5;0635 0644 0639 0645;0635 0644 0639 0645; FDF6;FDF6;FDF6;0631 0633 0648 0644;0631 0633 0648 0644; FDF7;FDF7;FDF7;0639 0644 064A 0647;0639 0644 064A 0647; FDF8;FDF8;FDF8;0648 0633 0644 0645;0648 0633 0644 0645; FDF9;FDF9;FDF9;0635 0644 0649;0635 0644 0649; 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; FDFB;FDFB;FDFB;062C 0644 0020 062C 0644 0627 0644 0647;062C 0644 0020 062C 0644 0627 0644 0647; FDFC;FDFC;FDFC;0631 06CC 0627 0644;0631 06CC 0627 0644; FE10;FE10;FE10;002C;002C; FE11;FE11;FE11;3001;3001; FE12;FE12;FE12;3002;3002; FE13;FE13;FE13;003A;003A; FE14;FE14;FE14;003B;003B; FE15;FE15;FE15;0021;0021; FE16;FE16;FE16;003F;003F; FE17;FE17;FE17;3016;3016; FE18;FE18;FE18;3017;3017; FE19;FE19;FE19;002E 002E 002E;002E 002E 002E; FE30;FE30;FE30;002E 002E;002E 002E; FE31;FE31;FE31;2014;2014; FE32;FE32;FE32;2013;2013; FE33;FE33;FE33;005F;005F; FE34;FE34;FE34;005F;005F; FE35;FE35;FE35;0028;0028; FE36;FE36;FE36;0029;0029; FE37;FE37;FE37;007B;007B; FE38;FE38;FE38;007D;007D; FE39;FE39;FE39;3014;3014; FE3A;FE3A;FE3A;3015;3015; FE3B;FE3B;FE3B;3010;3010; FE3C;FE3C;FE3C;3011;3011; FE3D;FE3D;FE3D;300A;300A; FE3E;FE3E;FE3E;300B;300B; FE3F;FE3F;FE3F;3008;3008; FE40;FE40;FE40;3009;3009; FE41;FE41;FE41;300C;300C; FE42;FE42;FE42;300D;300D; FE43;FE43;FE43;300E;300E; FE44;FE44;FE44;300F;300F; FE47;FE47;FE47;005B;005B; FE48;FE48;FE48;005D;005D; FE49;FE49;FE49;0020 0305;0020 0305; FE4A;FE4A;FE4A;0020 0305;0020 0305; FE4B;FE4B;FE4B;0020 0305;0020 0305; FE4C;FE4C;FE4C;0020 0305;0020 0305; FE4D;FE4D;FE4D;005F;005F; FE4E;FE4E;FE4E;005F;005F; FE4F;FE4F;FE4F;005F;005F; FE50;FE50;FE50;002C;002C; FE51;FE51;FE51;3001;3001; FE52;FE52;FE52;002E;002E; FE54;FE54;FE54;003B;003B; FE55;FE55;FE55;003A;003A; FE56;FE56;FE56;003F;003F; FE57;FE57;FE57;0021;0021; FE58;FE58;FE58;2014;2014; FE59;FE59;FE59;0028;0028; FE5A;FE5A;FE5A;0029;0029; FE5B;FE5B;FE5B;007B;007B; FE5C;FE5C;FE5C;007D;007D; FE5D;FE5D;FE5D;3014;3014; FE5E;FE5E;FE5E;3015;3015; FE5F;FE5F;FE5F;0023;0023; FE60;FE60;FE60;0026;0026; FE61;FE61;FE61;002A;002A; FE62;FE62;FE62;002B;002B; FE63;FE63;FE63;002D;002D; FE64;FE64;FE64;003C;003C; FE65;FE65;FE65;003E;003E; FE66;FE66;FE66;003D;003D; FE68;FE68;FE68;005C;005C; FE69;FE69;FE69;0024;0024; FE6A;FE6A;FE6A;0025;0025; FE6B;FE6B;FE6B;0040;0040; FE70;FE70;FE70;0020 064B;0020 064B; FE71;FE71;FE71;0640 064B;0640 064B; FE72;FE72;FE72;0020 064C;0020 064C; FE74;FE74;FE74;0020 064D;0020 064D; FE76;FE76;FE76;0020 064E;0020 064E; FE77;FE77;FE77;0640 064E;0640 064E; FE78;FE78;FE78;0020 064F;0020 064F; FE79;FE79;FE79;0640 064F;0640 064F; FE7A;FE7A;FE7A;0020 0650;0020 0650; FE7B;FE7B;FE7B;0640 0650;0640 0650; FE7C;FE7C;FE7C;0020 0651;0020 0651; FE7D;FE7D;FE7D;0640 0651;0640 0651; FE7E;FE7E;FE7E;0020 0652;0020 0652; FE7F;FE7F;FE7F;0640 0652;0640 0652; FE80;FE80;FE80;0621;0621; FE81;FE81;FE81;0622;0627 0653; FE82;FE82;FE82;0622;0627 0653; FE83;FE83;FE83;0623;0627 0654; FE84;FE84;FE84;0623;0627 0654; FE85;FE85;FE85;0624;0648 0654; FE86;FE86;FE86;0624;0648 0654; FE87;FE87;FE87;0625;0627 0655; FE88;FE88;FE88;0625;0627 0655; FE89;FE89;FE89;0626;064A 0654; FE8A;FE8A;FE8A;0626;064A 0654; FE8B;FE8B;FE8B;0626;064A 0654; FE8C;FE8C;FE8C;0626;064A 0654; FE8D;FE8D;FE8D;0627;0627; FE8E;FE8E;FE8E;0627;0627; FE8F;FE8F;FE8F;0628;0628; FE90;FE90;FE90;0628;0628; FE91;FE91;FE91;0628;0628; FE92;FE92;FE92;0628;0628; FE93;FE93;FE93;0629;0629; FE94;FE94;FE94;0629;0629; FE95;FE95;FE95;062A;062A; FE96;FE96;FE96;062A;062A; FE97;FE97;FE97;062A;062A; FE98;FE98;FE98;062A;062A; FE99;FE99;FE99;062B;062B; FE9A;FE9A;FE9A;062B;062B; FE9B;FE9B;FE9B;062B;062B; FE9C;FE9C;FE9C;062B;062B; FE9D;FE9D;FE9D;062C;062C; FE9E;FE9E;FE9E;062C;062C; FE9F;FE9F;FE9F;062C;062C; FEA0;FEA0;FEA0;062C;062C; FEA1;FEA1;FEA1;062D;062D; FEA2;FEA2;FEA2;062D;062D; FEA3;FEA3;FEA3;062D;062D; FEA4;FEA4;FEA4;062D;062D; FEA5;FEA5;FEA5;062E;062E; FEA6;FEA6;FEA6;062E;062E; FEA7;FEA7;FEA7;062E;062E; FEA8;FEA8;FEA8;062E;062E; FEA9;FEA9;FEA9;062F;062F; FEAA;FEAA;FEAA;062F;062F; FEAB;FEAB;FEAB;0630;0630; FEAC;FEAC;FEAC;0630;0630; FEAD;FEAD;FEAD;0631;0631; FEAE;FEAE;FEAE;0631;0631; FEAF;FEAF;FEAF;0632;0632; FEB0;FEB0;FEB0;0632;0632; FEB1;FEB1;FEB1;0633;0633; FEB2;FEB2;FEB2;0633;0633; FEB3;FEB3;FEB3;0633;0633; FEB4;FEB4;FEB4;0633;0633; FEB5;FEB5;FEB5;0634;0634; FEB6;FEB6;FEB6;0634;0634; FEB7;FEB7;FEB7;0634;0634; FEB8;FEB8;FEB8;0634;0634; FEB9;FEB9;FEB9;0635;0635; FEBA;FEBA;FEBA;0635;0635; FEBB;FEBB;FEBB;0635;0635; FEBC;FEBC;FEBC;0635;0635; FEBD;FEBD;FEBD;0636;0636; FEBE;FEBE;FEBE;0636;0636; FEBF;FEBF;FEBF;0636;0636; FEC0;FEC0;FEC0;0636;0636; FEC1;FEC1;FEC1;0637;0637; FEC2;FEC2;FEC2;0637;0637; FEC3;FEC3;FEC3;0637;0637; FEC4;FEC4;FEC4;0637;0637; FEC5;FEC5;FEC5;0638;0638; FEC6;FEC6;FEC6;0638;0638; FEC7;FEC7;FEC7;0638;0638; FEC8;FEC8;FEC8;0638;0638; FEC9;FEC9;FEC9;0639;0639; FECA;FECA;FECA;0639;0639; FECB;FECB;FECB;0639;0639; FECC;FECC;FECC;0639;0639; FECD;FECD;FECD;063A;063A; FECE;FECE;FECE;063A;063A; FECF;FECF;FECF;063A;063A; FED0;FED0;FED0;063A;063A; FED1;FED1;FED1;0641;0641; FED2;FED2;FED2;0641;0641; FED3;FED3;FED3;0641;0641; FED4;FED4;FED4;0641;0641; FED5;FED5;FED5;0642;0642; FED6;FED6;FED6;0642;0642; FED7;FED7;FED7;0642;0642; FED8;FED8;FED8;0642;0642; FED9;FED9;FED9;0643;0643; FEDA;FEDA;FEDA;0643;0643; FEDB;FEDB;FEDB;0643;0643; FEDC;FEDC;FEDC;0643;0643; FEDD;FEDD;FEDD;0644;0644; FEDE;FEDE;FEDE;0644;0644; FEDF;FEDF;FEDF;0644;0644; FEE0;FEE0;FEE0;0644;0644; FEE1;FEE1;FEE1;0645;0645; FEE2;FEE2;FEE2;0645;0645; FEE3;FEE3;FEE3;0645;0645; FEE4;FEE4;FEE4;0645;0645; FEE5;FEE5;FEE5;0646;0646; FEE6;FEE6;FEE6;0646;0646; FEE7;FEE7;FEE7;0646;0646; FEE8;FEE8;FEE8;0646;0646; FEE9;FEE9;FEE9;0647;0647; FEEA;FEEA;FEEA;0647;0647; FEEB;FEEB;FEEB;0647;0647; FEEC;FEEC;FEEC;0647;0647; FEED;FEED;FEED;0648;0648; FEEE;FEEE;FEEE;0648;0648; FEEF;FEEF;FEEF;0649;0649; FEF0;FEF0;FEF0;0649;0649; FEF1;FEF1;FEF1;064A;064A; FEF2;FEF2;FEF2;064A;064A; FEF3;FEF3;FEF3;064A;064A; FEF4;FEF4;FEF4;064A;064A; FEF5;FEF5;FEF5;0644 0622;0644 0627 0653; FEF6;FEF6;FEF6;0644 0622;0644 0627 0653; FEF7;FEF7;FEF7;0644 0623;0644 0627 0654; FEF8;FEF8;FEF8;0644 0623;0644 0627 0654; FEF9;FEF9;FEF9;0644 0625;0644 0627 0655; FEFA;FEFA;FEFA;0644 0625;0644 0627 0655; FEFB;FEFB;FEFB;0644 0627;0644 0627; FEFC;FEFC;FEFC;0644 0627;0644 0627; FF01;FF01;FF01;0021;0021; FF02;FF02;FF02;0022;0022; FF03;FF03;FF03;0023;0023; FF04;FF04;FF04;0024;0024; FF05;FF05;FF05;0025;0025; FF06;FF06;FF06;0026;0026; FF07;FF07;FF07;0027;0027; FF08;FF08;FF08;0028;0028; FF09;FF09;FF09;0029;0029; FF0A;FF0A;FF0A;002A;002A; FF0B;FF0B;FF0B;002B;002B; FF0C;FF0C;FF0C;002C;002C; FF0D;FF0D;FF0D;002D;002D; FF0E;FF0E;FF0E;002E;002E; FF0F;FF0F;FF0F;002F;002F; FF10;FF10;FF10;0030;0030; FF11;FF11;FF11;0031;0031; FF12;FF12;FF12;0032;0032; FF13;FF13;FF13;0033;0033; FF14;FF14;FF14;0034;0034; FF15;FF15;FF15;0035;0035; FF16;FF16;FF16;0036;0036; FF17;FF17;FF17;0037;0037; FF18;FF18;FF18;0038;0038; FF19;FF19;FF19;0039;0039; FF1A;FF1A;FF1A;003A;003A; FF1B;FF1B;FF1B;003B;003B; FF1C;FF1C;FF1C;003C;003C; FF1D;FF1D;FF1D;003D;003D; FF1E;FF1E;FF1E;003E;003E; FF1F;FF1F;FF1F;003F;003F; FF20;FF20;FF20;0040;0040; FF21;FF21;FF21;0041;0041; FF22;FF22;FF22;0042;0042; FF23;FF23;FF23;0043;0043; FF24;FF24;FF24;0044;0044; FF25;FF25;FF25;0045;0045; FF26;FF26;FF26;0046;0046; FF27;FF27;FF27;0047;0047; FF28;FF28;FF28;0048;0048; FF29;FF29;FF29;0049;0049; FF2A;FF2A;FF2A;004A;004A; FF2B;FF2B;FF2B;004B;004B; FF2C;FF2C;FF2C;004C;004C; FF2D;FF2D;FF2D;004D;004D; FF2E;FF2E;FF2E;004E;004E; FF2F;FF2F;FF2F;004F;004F; FF30;FF30;FF30;0050;0050; FF31;FF31;FF31;0051;0051; FF32;FF32;FF32;0052;0052; FF33;FF33;FF33;0053;0053; FF34;FF34;FF34;0054;0054; FF35;FF35;FF35;0055;0055; FF36;FF36;FF36;0056;0056; FF37;FF37;FF37;0057;0057; FF38;FF38;FF38;0058;0058; FF39;FF39;FF39;0059;0059; FF3A;FF3A;FF3A;005A;005A; FF3B;FF3B;FF3B;005B;005B; FF3C;FF3C;FF3C;005C;005C; FF3D;FF3D;FF3D;005D;005D; FF3E;FF3E;FF3E;005E;005E; FF3F;FF3F;FF3F;005F;005F; FF40;FF40;FF40;0060;0060; FF41;FF41;FF41;0061;0061; FF42;FF42;FF42;0062;0062; FF43;FF43;FF43;0063;0063; FF44;FF44;FF44;0064;0064; FF45;FF45;FF45;0065;0065; FF46;FF46;FF46;0066;0066; FF47;FF47;FF47;0067;0067; FF48;FF48;FF48;0068;0068; FF49;FF49;FF49;0069;0069; FF4A;FF4A;FF4A;006A;006A; FF4B;FF4B;FF4B;006B;006B; FF4C;FF4C;FF4C;006C;006C; FF4D;FF4D;FF4D;006D;006D; FF4E;FF4E;FF4E;006E;006E; FF4F;FF4F;FF4F;006F;006F; FF50;FF50;FF50;0070;0070; FF51;FF51;FF51;0071;0071; FF52;FF52;FF52;0072;0072; FF53;FF53;FF53;0073;0073; FF54;FF54;FF54;0074;0074; FF55;FF55;FF55;0075;0075; FF56;FF56;FF56;0076;0076; FF57;FF57;FF57;0077;0077; FF58;FF58;FF58;0078;0078; FF59;FF59;FF59;0079;0079; FF5A;FF5A;FF5A;007A;007A; FF5B;FF5B;FF5B;007B;007B; FF5C;FF5C;FF5C;007C;007C; FF5D;FF5D;FF5D;007D;007D; FF5E;FF5E;FF5E;007E;007E; FF5F;FF5F;FF5F;2985;2985; FF60;FF60;FF60;2986;2986; FF61;FF61;FF61;3002;3002; FF62;FF62;FF62;300C;300C; FF63;FF63;FF63;300D;300D; FF64;FF64;FF64;3001;3001; FF65;FF65;FF65;30FB;30FB; FF66;FF66;FF66;30F2;30F2; FF67;FF67;FF67;30A1;30A1; FF68;FF68;FF68;30A3;30A3; FF69;FF69;FF69;30A5;30A5; FF6A;FF6A;FF6A;30A7;30A7; FF6B;FF6B;FF6B;30A9;30A9; FF6C;FF6C;FF6C;30E3;30E3; FF6D;FF6D;FF6D;30E5;30E5; FF6E;FF6E;FF6E;30E7;30E7; FF6F;FF6F;FF6F;30C3;30C3; FF70;FF70;FF70;30FC;30FC; FF71;FF71;FF71;30A2;30A2; FF72;FF72;FF72;30A4;30A4; FF73;FF73;FF73;30A6;30A6; FF74;FF74;FF74;30A8;30A8; FF75;FF75;FF75;30AA;30AA; FF76;FF76;FF76;30AB;30AB; FF77;FF77;FF77;30AD;30AD; FF78;FF78;FF78;30AF;30AF; FF79;FF79;FF79;30B1;30B1; FF7A;FF7A;FF7A;30B3;30B3; FF7B;FF7B;FF7B;30B5;30B5; FF7C;FF7C;FF7C;30B7;30B7; FF7D;FF7D;FF7D;30B9;30B9; FF7E;FF7E;FF7E;30BB;30BB; FF7F;FF7F;FF7F;30BD;30BD; FF80;FF80;FF80;30BF;30BF; FF81;FF81;FF81;30C1;30C1; FF82;FF82;FF82;30C4;30C4; FF83;FF83;FF83;30C6;30C6; FF84;FF84;FF84;30C8;30C8; FF85;FF85;FF85;30CA;30CA; FF86;FF86;FF86;30CB;30CB; FF87;FF87;FF87;30CC;30CC; FF88;FF88;FF88;30CD;30CD; FF89;FF89;FF89;30CE;30CE; FF8A;FF8A;FF8A;30CF;30CF; FF8B;FF8B;FF8B;30D2;30D2; FF8C;FF8C;FF8C;30D5;30D5; FF8D;FF8D;FF8D;30D8;30D8; FF8E;FF8E;FF8E;30DB;30DB; FF8F;FF8F;FF8F;30DE;30DE; FF90;FF90;FF90;30DF;30DF; FF91;FF91;FF91;30E0;30E0; FF92;FF92;FF92;30E1;30E1; FF93;FF93;FF93;30E2;30E2; FF94;FF94;FF94;30E4;30E4; FF95;FF95;FF95;30E6;30E6; FF96;FF96;FF96;30E8;30E8; FF97;FF97;FF97;30E9;30E9; FF98;FF98;FF98;30EA;30EA; FF99;FF99;FF99;30EB;30EB; FF9A;FF9A;FF9A;30EC;30EC; FF9B;FF9B;FF9B;30ED;30ED; FF9C;FF9C;FF9C;30EF;30EF; FF9D;FF9D;FF9D;30F3;30F3; FF9E;FF9E;FF9E;3099;3099; FF9F;FF9F;FF9F;309A;309A; FFA0;FFA0;FFA0;1160;1160; FFA1;FFA1;FFA1;1100;1100; FFA2;FFA2;FFA2;1101;1101; FFA3;FFA3;FFA3;11AA;11AA; FFA4;FFA4;FFA4;1102;1102; FFA5;FFA5;FFA5;11AC;11AC; FFA6;FFA6;FFA6;11AD;11AD; FFA7;FFA7;FFA7;1103;1103; FFA8;FFA8;FFA8;1104;1104; FFA9;FFA9;FFA9;1105;1105; FFAA;FFAA;FFAA;11B0;11B0; FFAB;FFAB;FFAB;11B1;11B1; FFAC;FFAC;FFAC;11B2;11B2; FFAD;FFAD;FFAD;11B3;11B3; FFAE;FFAE;FFAE;11B4;11B4; FFAF;FFAF;FFAF;11B5;11B5; FFB0;FFB0;FFB0;111A;111A; FFB1;FFB1;FFB1;1106;1106; FFB2;FFB2;FFB2;1107;1107; FFB3;FFB3;FFB3;1108;1108; FFB4;FFB4;FFB4;1121;1121; FFB5;FFB5;FFB5;1109;1109; FFB6;FFB6;FFB6;110A;110A; FFB7;FFB7;FFB7;110B;110B; FFB8;FFB8;FFB8;110C;110C; FFB9;FFB9;FFB9;110D;110D; FFBA;FFBA;FFBA;110E;110E; FFBB;FFBB;FFBB;110F;110F; FFBC;FFBC;FFBC;1110;1110; FFBD;FFBD;FFBD;1111;1111; FFBE;FFBE;FFBE;1112;1112; FFC2;FFC2;FFC2;1161;1161; FFC3;FFC3;FFC3;1162;1162; FFC4;FFC4;FFC4;1163;1163; FFC5;FFC5;FFC5;1164;1164; FFC6;FFC6;FFC6;1165;1165; FFC7;FFC7;FFC7;1166;1166; FFCA;FFCA;FFCA;1167;1167; FFCB;FFCB;FFCB;1168;1168; FFCC;FFCC;FFCC;1169;1169; FFCD;FFCD;FFCD;116A;116A; FFCE;FFCE;FFCE;116B;116B; FFCF;FFCF;FFCF;116C;116C; FFD2;FFD2;FFD2;116D;116D; FFD3;FFD3;FFD3;116E;116E; FFD4;FFD4;FFD4;116F;116F; FFD5;FFD5;FFD5;1170;1170; FFD6;FFD6;FFD6;1171;1171; FFD7;FFD7;FFD7;1172;1172; FFDA;FFDA;FFDA;1173;1173; FFDB;FFDB;FFDB;1174;1174; FFDC;FFDC;FFDC;1175;1175; FFE0;FFE0;FFE0;00A2;00A2; FFE1;FFE1;FFE1;00A3;00A3; FFE2;FFE2;FFE2;00AC;00AC; FFE3;FFE3;FFE3;0020 0304;0020 0304; FFE4;FFE4;FFE4;00A6;00A6; FFE5;FFE5;FFE5;00A5;00A5; FFE6;FFE6;FFE6;20A9;20A9; FFE8;FFE8;FFE8;2502;2502; FFE9;FFE9;FFE9;2190;2190; FFEA;FFEA;FFEA;2191;2191; FFEB;FFEB;FFEB;2192;2192; FFEC;FFEC;FFEC;2193;2193; FFED;FFED;FFED;25A0;25A0; FFEE;FFEE;FFEE;25CB;25CB; 1109A;1109A;11099 110BA;1109A;11099 110BA; 1109C;1109C;1109B 110BA;1109C;1109B 110BA; 110AB;110AB;110A5 110BA;110AB;110A5 110BA; 1D15E;1D157 1D165;1D157 1D165;1D157 1D165;1D157 1D165; 1D15F;1D158 1D165;1D158 1D165;1D158 1D165;1D158 1D165; 1D160;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E; 1D161;1D158 1D165 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F; 1D162;1D158 1D165 1D170;1D158 1D165 1D170;1D158 1D165 1D170;1D158 1D165 1D170; 1D163;1D158 1D165 1D171;1D158 1D165 1D171;1D158 1D165 1D171;1D158 1D165 1D171; 1D164;1D158 1D165 1D172;1D158 1D165 1D172;1D158 1D165 1D172;1D158 1D165 1D172; 1D1BB;1D1B9 1D165;1D1B9 1D165;1D1B9 1D165;1D1B9 1D165; 1D1BC;1D1BA 1D165;1D1BA 1D165;1D1BA 1D165;1D1BA 1D165; 1D1BD;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E; 1D1BE;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E; 1D1BF;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F; 1D1C0;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F; 1D400;1D400;1D400;0041;0041; 1D401;1D401;1D401;0042;0042; 1D402;1D402;1D402;0043;0043; 1D403;1D403;1D403;0044;0044; 1D404;1D404;1D404;0045;0045; 1D405;1D405;1D405;0046;0046; 1D406;1D406;1D406;0047;0047; 1D407;1D407;1D407;0048;0048; 1D408;1D408;1D408;0049;0049; 1D409;1D409;1D409;004A;004A; 1D40A;1D40A;1D40A;004B;004B; 1D40B;1D40B;1D40B;004C;004C; 1D40C;1D40C;1D40C;004D;004D; 1D40D;1D40D;1D40D;004E;004E; 1D40E;1D40E;1D40E;004F;004F; 1D40F;1D40F;1D40F;0050;0050; 1D410;1D410;1D410;0051;0051; 1D411;1D411;1D411;0052;0052; 1D412;1D412;1D412;0053;0053; 1D413;1D413;1D413;0054;0054; 1D414;1D414;1D414;0055;0055; 1D415;1D415;1D415;0056;0056; 1D416;1D416;1D416;0057;0057; 1D417;1D417;1D417;0058;0058; 1D418;1D418;1D418;0059;0059; 1D419;1D419;1D419;005A;005A; 1D41A;1D41A;1D41A;0061;0061; 1D41B;1D41B;1D41B;0062;0062; 1D41C;1D41C;1D41C;0063;0063; 1D41D;1D41D;1D41D;0064;0064; 1D41E;1D41E;1D41E;0065;0065; 1D41F;1D41F;1D41F;0066;0066; 1D420;1D420;1D420;0067;0067; 1D421;1D421;1D421;0068;0068; 1D422;1D422;1D422;0069;0069; 1D423;1D423;1D423;006A;006A; 1D424;1D424;1D424;006B;006B; 1D425;1D425;1D425;006C;006C; 1D426;1D426;1D426;006D;006D; 1D427;1D427;1D427;006E;006E; 1D428;1D428;1D428;006F;006F; 1D429;1D429;1D429;0070;0070; 1D42A;1D42A;1D42A;0071;0071; 1D42B;1D42B;1D42B;0072;0072; 1D42C;1D42C;1D42C;0073;0073; 1D42D;1D42D;1D42D;0074;0074; 1D42E;1D42E;1D42E;0075;0075; 1D42F;1D42F;1D42F;0076;0076; 1D430;1D430;1D430;0077;0077; 1D431;1D431;1D431;0078;0078; 1D432;1D432;1D432;0079;0079; 1D433;1D433;1D433;007A;007A; 1D434;1D434;1D434;0041;0041; 1D435;1D435;1D435;0042;0042; 1D436;1D436;1D436;0043;0043; 1D437;1D437;1D437;0044;0044; 1D438;1D438;1D438;0045;0045; 1D439;1D439;1D439;0046;0046; 1D43A;1D43A;1D43A;0047;0047; 1D43B;1D43B;1D43B;0048;0048; 1D43C;1D43C;1D43C;0049;0049; 1D43D;1D43D;1D43D;004A;004A; 1D43E;1D43E;1D43E;004B;004B; 1D43F;1D43F;1D43F;004C;004C; 1D440;1D440;1D440;004D;004D; 1D441;1D441;1D441;004E;004E; 1D442;1D442;1D442;004F;004F; 1D443;1D443;1D443;0050;0050; 1D444;1D444;1D444;0051;0051; 1D445;1D445;1D445;0052;0052; 1D446;1D446;1D446;0053;0053; 1D447;1D447;1D447;0054;0054; 1D448;1D448;1D448;0055;0055; 1D449;1D449;1D449;0056;0056; 1D44A;1D44A;1D44A;0057;0057; 1D44B;1D44B;1D44B;0058;0058; 1D44C;1D44C;1D44C;0059;0059; 1D44D;1D44D;1D44D;005A;005A; 1D44E;1D44E;1D44E;0061;0061; 1D44F;1D44F;1D44F;0062;0062; 1D450;1D450;1D450;0063;0063; 1D451;1D451;1D451;0064;0064; 1D452;1D452;1D452;0065;0065; 1D453;1D453;1D453;0066;0066; 1D454;1D454;1D454;0067;0067; 1D456;1D456;1D456;0069;0069; 1D457;1D457;1D457;006A;006A; 1D458;1D458;1D458;006B;006B; 1D459;1D459;1D459;006C;006C; 1D45A;1D45A;1D45A;006D;006D; 1D45B;1D45B;1D45B;006E;006E; 1D45C;1D45C;1D45C;006F;006F; 1D45D;1D45D;1D45D;0070;0070; 1D45E;1D45E;1D45E;0071;0071; 1D45F;1D45F;1D45F;0072;0072; 1D460;1D460;1D460;0073;0073; 1D461;1D461;1D461;0074;0074; 1D462;1D462;1D462;0075;0075; 1D463;1D463;1D463;0076;0076; 1D464;1D464;1D464;0077;0077; 1D465;1D465;1D465;0078;0078; 1D466;1D466;1D466;0079;0079; 1D467;1D467;1D467;007A;007A; 1D468;1D468;1D468;0041;0041; 1D469;1D469;1D469;0042;0042; 1D46A;1D46A;1D46A;0043;0043; 1D46B;1D46B;1D46B;0044;0044; 1D46C;1D46C;1D46C;0045;0045; 1D46D;1D46D;1D46D;0046;0046; 1D46E;1D46E;1D46E;0047;0047; 1D46F;1D46F;1D46F;0048;0048; 1D470;1D470;1D470;0049;0049; 1D471;1D471;1D471;004A;004A; 1D472;1D472;1D472;004B;004B; 1D473;1D473;1D473;004C;004C; 1D474;1D474;1D474;004D;004D; 1D475;1D475;1D475;004E;004E; 1D476;1D476;1D476;004F;004F; 1D477;1D477;1D477;0050;0050; 1D478;1D478;1D478;0051;0051; 1D479;1D479;1D479;0052;0052; 1D47A;1D47A;1D47A;0053;0053; 1D47B;1D47B;1D47B;0054;0054; 1D47C;1D47C;1D47C;0055;0055; 1D47D;1D47D;1D47D;0056;0056; 1D47E;1D47E;1D47E;0057;0057; 1D47F;1D47F;1D47F;0058;0058; 1D480;1D480;1D480;0059;0059; 1D481;1D481;1D481;005A;005A; 1D482;1D482;1D482;0061;0061; 1D483;1D483;1D483;0062;0062; 1D484;1D484;1D484;0063;0063; 1D485;1D485;1D485;0064;0064; 1D486;1D486;1D486;0065;0065; 1D487;1D487;1D487;0066;0066; 1D488;1D488;1D488;0067;0067; 1D489;1D489;1D489;0068;0068; 1D48A;1D48A;1D48A;0069;0069; 1D48B;1D48B;1D48B;006A;006A; 1D48C;1D48C;1D48C;006B;006B; 1D48D;1D48D;1D48D;006C;006C; 1D48E;1D48E;1D48E;006D;006D; 1D48F;1D48F;1D48F;006E;006E; 1D490;1D490;1D490;006F;006F; 1D491;1D491;1D491;0070;0070; 1D492;1D492;1D492;0071;0071; 1D493;1D493;1D493;0072;0072; 1D494;1D494;1D494;0073;0073; 1D495;1D495;1D495;0074;0074; 1D496;1D496;1D496;0075;0075; 1D497;1D497;1D497;0076;0076; 1D498;1D498;1D498;0077;0077; 1D499;1D499;1D499;0078;0078; 1D49A;1D49A;1D49A;0079;0079; 1D49B;1D49B;1D49B;007A;007A; 1D49C;1D49C;1D49C;0041;0041; 1D49E;1D49E;1D49E;0043;0043; 1D49F;1D49F;1D49F;0044;0044; 1D4A2;1D4A2;1D4A2;0047;0047; 1D4A5;1D4A5;1D4A5;004A;004A; 1D4A6;1D4A6;1D4A6;004B;004B; 1D4A9;1D4A9;1D4A9;004E;004E; 1D4AA;1D4AA;1D4AA;004F;004F; 1D4AB;1D4AB;1D4AB;0050;0050; 1D4AC;1D4AC;1D4AC;0051;0051; 1D4AE;1D4AE;1D4AE;0053;0053; 1D4AF;1D4AF;1D4AF;0054;0054; 1D4B0;1D4B0;1D4B0;0055;0055; 1D4B1;1D4B1;1D4B1;0056;0056; 1D4B2;1D4B2;1D4B2;0057;0057; 1D4B3;1D4B3;1D4B3;0058;0058; 1D4B4;1D4B4;1D4B4;0059;0059; 1D4B5;1D4B5;1D4B5;005A;005A; 1D4B6;1D4B6;1D4B6;0061;0061; 1D4B7;1D4B7;1D4B7;0062;0062; 1D4B8;1D4B8;1D4B8;0063;0063; 1D4B9;1D4B9;1D4B9;0064;0064; 1D4BB;1D4BB;1D4BB;0066;0066; 1D4BD;1D4BD;1D4BD;0068;0068; 1D4BE;1D4BE;1D4BE;0069;0069; 1D4BF;1D4BF;1D4BF;006A;006A; 1D4C0;1D4C0;1D4C0;006B;006B; 1D4C1;1D4C1;1D4C1;006C;006C; 1D4C2;1D4C2;1D4C2;006D;006D; 1D4C3;1D4C3;1D4C3;006E;006E; 1D4C5;1D4C5;1D4C5;0070;0070; 1D4C6;1D4C6;1D4C6;0071;0071; 1D4C7;1D4C7;1D4C7;0072;0072; 1D4C8;1D4C8;1D4C8;0073;0073; 1D4C9;1D4C9;1D4C9;0074;0074; 1D4CA;1D4CA;1D4CA;0075;0075; 1D4CB;1D4CB;1D4CB;0076;0076; 1D4CC;1D4CC;1D4CC;0077;0077; 1D4CD;1D4CD;1D4CD;0078;0078; 1D4CE;1D4CE;1D4CE;0079;0079; 1D4CF;1D4CF;1D4CF;007A;007A; 1D4D0;1D4D0;1D4D0;0041;0041; 1D4D1;1D4D1;1D4D1;0042;0042; 1D4D2;1D4D2;1D4D2;0043;0043; 1D4D3;1D4D3;1D4D3;0044;0044; 1D4D4;1D4D4;1D4D4;0045;0045; 1D4D5;1D4D5;1D4D5;0046;0046; 1D4D6;1D4D6;1D4D6;0047;0047; 1D4D7;1D4D7;1D4D7;0048;0048; 1D4D8;1D4D8;1D4D8;0049;0049; 1D4D9;1D4D9;1D4D9;004A;004A; 1D4DA;1D4DA;1D4DA;004B;004B; 1D4DB;1D4DB;1D4DB;004C;004C; 1D4DC;1D4DC;1D4DC;004D;004D; 1D4DD;1D4DD;1D4DD;004E;004E; 1D4DE;1D4DE;1D4DE;004F;004F; 1D4DF;1D4DF;1D4DF;0050;0050; 1D4E0;1D4E0;1D4E0;0051;0051; 1D4E1;1D4E1;1D4E1;0052;0052; 1D4E2;1D4E2;1D4E2;0053;0053; 1D4E3;1D4E3;1D4E3;0054;0054; 1D4E4;1D4E4;1D4E4;0055;0055; 1D4E5;1D4E5;1D4E5;0056;0056; 1D4E6;1D4E6;1D4E6;0057;0057; 1D4E7;1D4E7;1D4E7;0058;0058; 1D4E8;1D4E8;1D4E8;0059;0059; 1D4E9;1D4E9;1D4E9;005A;005A; 1D4EA;1D4EA;1D4EA;0061;0061; 1D4EB;1D4EB;1D4EB;0062;0062; 1D4EC;1D4EC;1D4EC;0063;0063; 1D4ED;1D4ED;1D4ED;0064;0064; 1D4EE;1D4EE;1D4EE;0065;0065; 1D4EF;1D4EF;1D4EF;0066;0066; 1D4F0;1D4F0;1D4F0;0067;0067; 1D4F1;1D4F1;1D4F1;0068;0068; 1D4F2;1D4F2;1D4F2;0069;0069; 1D4F3;1D4F3;1D4F3;006A;006A; 1D4F4;1D4F4;1D4F4;006B;006B; 1D4F5;1D4F5;1D4F5;006C;006C; 1D4F6;1D4F6;1D4F6;006D;006D; 1D4F7;1D4F7;1D4F7;006E;006E; 1D4F8;1D4F8;1D4F8;006F;006F; 1D4F9;1D4F9;1D4F9;0070;0070; 1D4FA;1D4FA;1D4FA;0071;0071; 1D4FB;1D4FB;1D4FB;0072;0072; 1D4FC;1D4FC;1D4FC;0073;0073; 1D4FD;1D4FD;1D4FD;0074;0074; 1D4FE;1D4FE;1D4FE;0075;0075; 1D4FF;1D4FF;1D4FF;0076;0076; 1D500;1D500;1D500;0077;0077; 1D501;1D501;1D501;0078;0078; 1D502;1D502;1D502;0079;0079; 1D503;1D503;1D503;007A;007A; 1D504;1D504;1D504;0041;0041; 1D505;1D505;1D505;0042;0042; 1D507;1D507;1D507;0044;0044; 1D508;1D508;1D508;0045;0045; 1D509;1D509;1D509;0046;0046; 1D50A;1D50A;1D50A;0047;0047; 1D50D;1D50D;1D50D;004A;004A; 1D50E;1D50E;1D50E;004B;004B; 1D50F;1D50F;1D50F;004C;004C; 1D510;1D510;1D510;004D;004D; 1D511;1D511;1D511;004E;004E; 1D512;1D512;1D512;004F;004F; 1D513;1D513;1D513;0050;0050; 1D514;1D514;1D514;0051;0051; 1D516;1D516;1D516;0053;0053; 1D517;1D517;1D517;0054;0054; 1D518;1D518;1D518;0055;0055; 1D519;1D519;1D519;0056;0056; 1D51A;1D51A;1D51A;0057;0057; 1D51B;1D51B;1D51B;0058;0058; 1D51C;1D51C;1D51C;0059;0059; 1D51E;1D51E;1D51E;0061;0061; 1D51F;1D51F;1D51F;0062;0062; 1D520;1D520;1D520;0063;0063; 1D521;1D521;1D521;0064;0064; 1D522;1D522;1D522;0065;0065; 1D523;1D523;1D523;0066;0066; 1D524;1D524;1D524;0067;0067; 1D525;1D525;1D525;0068;0068; 1D526;1D526;1D526;0069;0069; 1D527;1D527;1D527;006A;006A; 1D528;1D528;1D528;006B;006B; 1D529;1D529;1D529;006C;006C; 1D52A;1D52A;1D52A;006D;006D; 1D52B;1D52B;1D52B;006E;006E; 1D52C;1D52C;1D52C;006F;006F; 1D52D;1D52D;1D52D;0070;0070; 1D52E;1D52E;1D52E;0071;0071; 1D52F;1D52F;1D52F;0072;0072; 1D530;1D530;1D530;0073;0073; 1D531;1D531;1D531;0074;0074; 1D532;1D532;1D532;0075;0075; 1D533;1D533;1D533;0076;0076; 1D534;1D534;1D534;0077;0077; 1D535;1D535;1D535;0078;0078; 1D536;1D536;1D536;0079;0079; 1D537;1D537;1D537;007A;007A; 1D538;1D538;1D538;0041;0041; 1D539;1D539;1D539;0042;0042; 1D53B;1D53B;1D53B;0044;0044; 1D53C;1D53C;1D53C;0045;0045; 1D53D;1D53D;1D53D;0046;0046; 1D53E;1D53E;1D53E;0047;0047; 1D540;1D540;1D540;0049;0049; 1D541;1D541;1D541;004A;004A; 1D542;1D542;1D542;004B;004B; 1D543;1D543;1D543;004C;004C; 1D544;1D544;1D544;004D;004D; 1D546;1D546;1D546;004F;004F; 1D54A;1D54A;1D54A;0053;0053; 1D54B;1D54B;1D54B;0054;0054; 1D54C;1D54C;1D54C;0055;0055; 1D54D;1D54D;1D54D;0056;0056; 1D54E;1D54E;1D54E;0057;0057; 1D54F;1D54F;1D54F;0058;0058; 1D550;1D550;1D550;0059;0059; 1D552;1D552;1D552;0061;0061; 1D553;1D553;1D553;0062;0062; 1D554;1D554;1D554;0063;0063; 1D555;1D555;1D555;0064;0064; 1D556;1D556;1D556;0065;0065; 1D557;1D557;1D557;0066;0066; 1D558;1D558;1D558;0067;0067; 1D559;1D559;1D559;0068;0068; 1D55A;1D55A;1D55A;0069;0069; 1D55B;1D55B;1D55B;006A;006A; 1D55C;1D55C;1D55C;006B;006B; 1D55D;1D55D;1D55D;006C;006C; 1D55E;1D55E;1D55E;006D;006D; 1D55F;1D55F;1D55F;006E;006E; 1D560;1D560;1D560;006F;006F; 1D561;1D561;1D561;0070;0070; 1D562;1D562;1D562;0071;0071; 1D563;1D563;1D563;0072;0072; 1D564;1D564;1D564;0073;0073; 1D565;1D565;1D565;0074;0074; 1D566;1D566;1D566;0075;0075; 1D567;1D567;1D567;0076;0076; 1D568;1D568;1D568;0077;0077; 1D569;1D569;1D569;0078;0078; 1D56A;1D56A;1D56A;0079;0079; 1D56B;1D56B;1D56B;007A;007A; 1D56C;1D56C;1D56C;0041;0041; 1D56D;1D56D;1D56D;0042;0042; 1D56E;1D56E;1D56E;0043;0043; 1D56F;1D56F;1D56F;0044;0044; 1D570;1D570;1D570;0045;0045; 1D571;1D571;1D571;0046;0046; 1D572;1D572;1D572;0047;0047; 1D573;1D573;1D573;0048;0048; 1D574;1D574;1D574;0049;0049; 1D575;1D575;1D575;004A;004A; 1D576;1D576;1D576;004B;004B; 1D577;1D577;1D577;004C;004C; 1D578;1D578;1D578;004D;004D; 1D579;1D579;1D579;004E;004E; 1D57A;1D57A;1D57A;004F;004F; 1D57B;1D57B;1D57B;0050;0050; 1D57C;1D57C;1D57C;0051;0051; 1D57D;1D57D;1D57D;0052;0052; 1D57E;1D57E;1D57E;0053;0053; 1D57F;1D57F;1D57F;0054;0054; 1D580;1D580;1D580;0055;0055; 1D581;1D581;1D581;0056;0056; 1D582;1D582;1D582;0057;0057; 1D583;1D583;1D583;0058;0058; 1D584;1D584;1D584;0059;0059; 1D585;1D585;1D585;005A;005A; 1D586;1D586;1D586;0061;0061; 1D587;1D587;1D587;0062;0062; 1D588;1D588;1D588;0063;0063; 1D589;1D589;1D589;0064;0064; 1D58A;1D58A;1D58A;0065;0065; 1D58B;1D58B;1D58B;0066;0066; 1D58C;1D58C;1D58C;0067;0067; 1D58D;1D58D;1D58D;0068;0068; 1D58E;1D58E;1D58E;0069;0069; 1D58F;1D58F;1D58F;006A;006A; 1D590;1D590;1D590;006B;006B; 1D591;1D591;1D591;006C;006C; 1D592;1D592;1D592;006D;006D; 1D593;1D593;1D593;006E;006E; 1D594;1D594;1D594;006F;006F; 1D595;1D595;1D595;0070;0070; 1D596;1D596;1D596;0071;0071; 1D597;1D597;1D597;0072;0072; 1D598;1D598;1D598;0073;0073; 1D599;1D599;1D599;0074;0074; 1D59A;1D59A;1D59A;0075;0075; 1D59B;1D59B;1D59B;0076;0076; 1D59C;1D59C;1D59C;0077;0077; 1D59D;1D59D;1D59D;0078;0078; 1D59E;1D59E;1D59E;0079;0079; 1D59F;1D59F;1D59F;007A;007A; 1D5A0;1D5A0;1D5A0;0041;0041; 1D5A1;1D5A1;1D5A1;0042;0042; 1D5A2;1D5A2;1D5A2;0043;0043; 1D5A3;1D5A3;1D5A3;0044;0044; 1D5A4;1D5A4;1D5A4;0045;0045; 1D5A5;1D5A5;1D5A5;0046;0046; 1D5A6;1D5A6;1D5A6;0047;0047; 1D5A7;1D5A7;1D5A7;0048;0048; 1D5A8;1D5A8;1D5A8;0049;0049; 1D5A9;1D5A9;1D5A9;004A;004A; 1D5AA;1D5AA;1D5AA;004B;004B; 1D5AB;1D5AB;1D5AB;004C;004C; 1D5AC;1D5AC;1D5AC;004D;004D; 1D5AD;1D5AD;1D5AD;004E;004E; 1D5AE;1D5AE;1D5AE;004F;004F; 1D5AF;1D5AF;1D5AF;0050;0050; 1D5B0;1D5B0;1D5B0;0051;0051; 1D5B1;1D5B1;1D5B1;0052;0052; 1D5B2;1D5B2;1D5B2;0053;0053; 1D5B3;1D5B3;1D5B3;0054;0054; 1D5B4;1D5B4;1D5B4;0055;0055; 1D5B5;1D5B5;1D5B5;0056;0056; 1D5B6;1D5B6;1D5B6;0057;0057; 1D5B7;1D5B7;1D5B7;0058;0058; 1D5B8;1D5B8;1D5B8;0059;0059; 1D5B9;1D5B9;1D5B9;005A;005A; 1D5BA;1D5BA;1D5BA;0061;0061; 1D5BB;1D5BB;1D5BB;0062;0062; 1D5BC;1D5BC;1D5BC;0063;0063; 1D5BD;1D5BD;1D5BD;0064;0064; 1D5BE;1D5BE;1D5BE;0065;0065; 1D5BF;1D5BF;1D5BF;0066;0066; 1D5C0;1D5C0;1D5C0;0067;0067; 1D5C1;1D5C1;1D5C1;0068;0068; 1D5C2;1D5C2;1D5C2;0069;0069; 1D5C3;1D5C3;1D5C3;006A;006A; 1D5C4;1D5C4;1D5C4;006B;006B; 1D5C5;1D5C5;1D5C5;006C;006C; 1D5C6;1D5C6;1D5C6;006D;006D; 1D5C7;1D5C7;1D5C7;006E;006E; 1D5C8;1D5C8;1D5C8;006F;006F; 1D5C9;1D5C9;1D5C9;0070;0070; 1D5CA;1D5CA;1D5CA;0071;0071; 1D5CB;1D5CB;1D5CB;0072;0072; 1D5CC;1D5CC;1D5CC;0073;0073; 1D5CD;1D5CD;1D5CD;0074;0074; 1D5CE;1D5CE;1D5CE;0075;0075; 1D5CF;1D5CF;1D5CF;0076;0076; 1D5D0;1D5D0;1D5D0;0077;0077; 1D5D1;1D5D1;1D5D1;0078;0078; 1D5D2;1D5D2;1D5D2;0079;0079; 1D5D3;1D5D3;1D5D3;007A;007A; 1D5D4;1D5D4;1D5D4;0041;0041; 1D5D5;1D5D5;1D5D5;0042;0042; 1D5D6;1D5D6;1D5D6;0043;0043; 1D5D7;1D5D7;1D5D7;0044;0044; 1D5D8;1D5D8;1D5D8;0045;0045; 1D5D9;1D5D9;1D5D9;0046;0046; 1D5DA;1D5DA;1D5DA;0047;0047; 1D5DB;1D5DB;1D5DB;0048;0048; 1D5DC;1D5DC;1D5DC;0049;0049; 1D5DD;1D5DD;1D5DD;004A;004A; 1D5DE;1D5DE;1D5DE;004B;004B; 1D5DF;1D5DF;1D5DF;004C;004C; 1D5E0;1D5E0;1D5E0;004D;004D; 1D5E1;1D5E1;1D5E1;004E;004E; 1D5E2;1D5E2;1D5E2;004F;004F; 1D5E3;1D5E3;1D5E3;0050;0050; 1D5E4;1D5E4;1D5E4;0051;0051; 1D5E5;1D5E5;1D5E5;0052;0052; 1D5E6;1D5E6;1D5E6;0053;0053; 1D5E7;1D5E7;1D5E7;0054;0054; 1D5E8;1D5E8;1D5E8;0055;0055; 1D5E9;1D5E9;1D5E9;0056;0056; 1D5EA;1D5EA;1D5EA;0057;0057; 1D5EB;1D5EB;1D5EB;0058;0058; 1D5EC;1D5EC;1D5EC;0059;0059; 1D5ED;1D5ED;1D5ED;005A;005A; 1D5EE;1D5EE;1D5EE;0061;0061; 1D5EF;1D5EF;1D5EF;0062;0062; 1D5F0;1D5F0;1D5F0;0063;0063; 1D5F1;1D5F1;1D5F1;0064;0064; 1D5F2;1D5F2;1D5F2;0065;0065; 1D5F3;1D5F3;1D5F3;0066;0066; 1D5F4;1D5F4;1D5F4;0067;0067; 1D5F5;1D5F5;1D5F5;0068;0068; 1D5F6;1D5F6;1D5F6;0069;0069; 1D5F7;1D5F7;1D5F7;006A;006A; 1D5F8;1D5F8;1D5F8;006B;006B; 1D5F9;1D5F9;1D5F9;006C;006C; 1D5FA;1D5FA;1D5FA;006D;006D; 1D5FB;1D5FB;1D5FB;006E;006E; 1D5FC;1D5FC;1D5FC;006F;006F; 1D5FD;1D5FD;1D5FD;0070;0070; 1D5FE;1D5FE;1D5FE;0071;0071; 1D5FF;1D5FF;1D5FF;0072;0072; 1D600;1D600;1D600;0073;0073; 1D601;1D601;1D601;0074;0074; 1D602;1D602;1D602;0075;0075; 1D603;1D603;1D603;0076;0076; 1D604;1D604;1D604;0077;0077; 1D605;1D605;1D605;0078;0078; 1D606;1D606;1D606;0079;0079; 1D607;1D607;1D607;007A;007A; 1D608;1D608;1D608;0041;0041; 1D609;1D609;1D609;0042;0042; 1D60A;1D60A;1D60A;0043;0043; 1D60B;1D60B;1D60B;0044;0044; 1D60C;1D60C;1D60C;0045;0045; 1D60D;1D60D;1D60D;0046;0046; 1D60E;1D60E;1D60E;0047;0047; 1D60F;1D60F;1D60F;0048;0048; 1D610;1D610;1D610;0049;0049; 1D611;1D611;1D611;004A;004A; 1D612;1D612;1D612;004B;004B; 1D613;1D613;1D613;004C;004C; 1D614;1D614;1D614;004D;004D; 1D615;1D615;1D615;004E;004E; 1D616;1D616;1D616;004F;004F; 1D617;1D617;1D617;0050;0050; 1D618;1D618;1D618;0051;0051; 1D619;1D619;1D619;0052;0052; 1D61A;1D61A;1D61A;0053;0053; 1D61B;1D61B;1D61B;0054;0054; 1D61C;1D61C;1D61C;0055;0055; 1D61D;1D61D;1D61D;0056;0056; 1D61E;1D61E;1D61E;0057;0057; 1D61F;1D61F;1D61F;0058;0058; 1D620;1D620;1D620;0059;0059; 1D621;1D621;1D621;005A;005A; 1D622;1D622;1D622;0061;0061; 1D623;1D623;1D623;0062;0062; 1D624;1D624;1D624;0063;0063; 1D625;1D625;1D625;0064;0064; 1D626;1D626;1D626;0065;0065; 1D627;1D627;1D627;0066;0066; 1D628;1D628;1D628;0067;0067; 1D629;1D629;1D629;0068;0068; 1D62A;1D62A;1D62A;0069;0069; 1D62B;1D62B;1D62B;006A;006A; 1D62C;1D62C;1D62C;006B;006B; 1D62D;1D62D;1D62D;006C;006C; 1D62E;1D62E;1D62E;006D;006D; 1D62F;1D62F;1D62F;006E;006E; 1D630;1D630;1D630;006F;006F; 1D631;1D631;1D631;0070;0070; 1D632;1D632;1D632;0071;0071; 1D633;1D633;1D633;0072;0072; 1D634;1D634;1D634;0073;0073; 1D635;1D635;1D635;0074;0074; 1D636;1D636;1D636;0075;0075; 1D637;1D637;1D637;0076;0076; 1D638;1D638;1D638;0077;0077; 1D639;1D639;1D639;0078;0078; 1D63A;1D63A;1D63A;0079;0079; 1D63B;1D63B;1D63B;007A;007A; 1D63C;1D63C;1D63C;0041;0041; 1D63D;1D63D;1D63D;0042;0042; 1D63E;1D63E;1D63E;0043;0043; 1D63F;1D63F;1D63F;0044;0044; 1D640;1D640;1D640;0045;0045; 1D641;1D641;1D641;0046;0046; 1D642;1D642;1D642;0047;0047; 1D643;1D643;1D643;0048;0048; 1D644;1D644;1D644;0049;0049; 1D645;1D645;1D645;004A;004A; 1D646;1D646;1D646;004B;004B; 1D647;1D647;1D647;004C;004C; 1D648;1D648;1D648;004D;004D; 1D649;1D649;1D649;004E;004E; 1D64A;1D64A;1D64A;004F;004F; 1D64B;1D64B;1D64B;0050;0050; 1D64C;1D64C;1D64C;0051;0051; 1D64D;1D64D;1D64D;0052;0052; 1D64E;1D64E;1D64E;0053;0053; 1D64F;1D64F;1D64F;0054;0054; 1D650;1D650;1D650;0055;0055; 1D651;1D651;1D651;0056;0056; 1D652;1D652;1D652;0057;0057; 1D653;1D653;1D653;0058;0058; 1D654;1D654;1D654;0059;0059; 1D655;1D655;1D655;005A;005A; 1D656;1D656;1D656;0061;0061; 1D657;1D657;1D657;0062;0062; 1D658;1D658;1D658;0063;0063; 1D659;1D659;1D659;0064;0064; 1D65A;1D65A;1D65A;0065;0065; 1D65B;1D65B;1D65B;0066;0066; 1D65C;1D65C;1D65C;0067;0067; 1D65D;1D65D;1D65D;0068;0068; 1D65E;1D65E;1D65E;0069;0069; 1D65F;1D65F;1D65F;006A;006A; 1D660;1D660;1D660;006B;006B; 1D661;1D661;1D661;006C;006C; 1D662;1D662;1D662;006D;006D; 1D663;1D663;1D663;006E;006E; 1D664;1D664;1D664;006F;006F; 1D665;1D665;1D665;0070;0070; 1D666;1D666;1D666;0071;0071; 1D667;1D667;1D667;0072;0072; 1D668;1D668;1D668;0073;0073; 1D669;1D669;1D669;0074;0074; 1D66A;1D66A;1D66A;0075;0075; 1D66B;1D66B;1D66B;0076;0076; 1D66C;1D66C;1D66C;0077;0077; 1D66D;1D66D;1D66D;0078;0078; 1D66E;1D66E;1D66E;0079;0079; 1D66F;1D66F;1D66F;007A;007A; 1D670;1D670;1D670;0041;0041; 1D671;1D671;1D671;0042;0042; 1D672;1D672;1D672;0043;0043; 1D673;1D673;1D673;0044;0044; 1D674;1D674;1D674;0045;0045; 1D675;1D675;1D675;0046;0046; 1D676;1D676;1D676;0047;0047; 1D677;1D677;1D677;0048;0048; 1D678;1D678;1D678;0049;0049; 1D679;1D679;1D679;004A;004A; 1D67A;1D67A;1D67A;004B;004B; 1D67B;1D67B;1D67B;004C;004C; 1D67C;1D67C;1D67C;004D;004D; 1D67D;1D67D;1D67D;004E;004E; 1D67E;1D67E;1D67E;004F;004F; 1D67F;1D67F;1D67F;0050;0050; 1D680;1D680;1D680;0051;0051; 1D681;1D681;1D681;0052;0052; 1D682;1D682;1D682;0053;0053; 1D683;1D683;1D683;0054;0054; 1D684;1D684;1D684;0055;0055; 1D685;1D685;1D685;0056;0056; 1D686;1D686;1D686;0057;0057; 1D687;1D687;1D687;0058;0058; 1D688;1D688;1D688;0059;0059; 1D689;1D689;1D689;005A;005A; 1D68A;1D68A;1D68A;0061;0061; 1D68B;1D68B;1D68B;0062;0062; 1D68C;1D68C;1D68C;0063;0063; 1D68D;1D68D;1D68D;0064;0064; 1D68E;1D68E;1D68E;0065;0065; 1D68F;1D68F;1D68F;0066;0066; 1D690;1D690;1D690;0067;0067; 1D691;1D691;1D691;0068;0068; 1D692;1D692;1D692;0069;0069; 1D693;1D693;1D693;006A;006A; 1D694;1D694;1D694;006B;006B; 1D695;1D695;1D695;006C;006C; 1D696;1D696;1D696;006D;006D; 1D697;1D697;1D697;006E;006E; 1D698;1D698;1D698;006F;006F; 1D699;1D699;1D699;0070;0070; 1D69A;1D69A;1D69A;0071;0071; 1D69B;1D69B;1D69B;0072;0072; 1D69C;1D69C;1D69C;0073;0073; 1D69D;1D69D;1D69D;0074;0074; 1D69E;1D69E;1D69E;0075;0075; 1D69F;1D69F;1D69F;0076;0076; 1D6A0;1D6A0;1D6A0;0077;0077; 1D6A1;1D6A1;1D6A1;0078;0078; 1D6A2;1D6A2;1D6A2;0079;0079; 1D6A3;1D6A3;1D6A3;007A;007A; 1D6A4;1D6A4;1D6A4;0131;0131; 1D6A5;1D6A5;1D6A5;0237;0237; 1D6A8;1D6A8;1D6A8;0391;0391; 1D6A9;1D6A9;1D6A9;0392;0392; 1D6AA;1D6AA;1D6AA;0393;0393; 1D6AB;1D6AB;1D6AB;0394;0394; 1D6AC;1D6AC;1D6AC;0395;0395; 1D6AD;1D6AD;1D6AD;0396;0396; 1D6AE;1D6AE;1D6AE;0397;0397; 1D6AF;1D6AF;1D6AF;0398;0398; 1D6B0;1D6B0;1D6B0;0399;0399; 1D6B1;1D6B1;1D6B1;039A;039A; 1D6B2;1D6B2;1D6B2;039B;039B; 1D6B3;1D6B3;1D6B3;039C;039C; 1D6B4;1D6B4;1D6B4;039D;039D; 1D6B5;1D6B5;1D6B5;039E;039E; 1D6B6;1D6B6;1D6B6;039F;039F; 1D6B7;1D6B7;1D6B7;03A0;03A0; 1D6B8;1D6B8;1D6B8;03A1;03A1; 1D6B9;1D6B9;1D6B9;0398;0398; 1D6BA;1D6BA;1D6BA;03A3;03A3; 1D6BB;1D6BB;1D6BB;03A4;03A4; 1D6BC;1D6BC;1D6BC;03A5;03A5; 1D6BD;1D6BD;1D6BD;03A6;03A6; 1D6BE;1D6BE;1D6BE;03A7;03A7; 1D6BF;1D6BF;1D6BF;03A8;03A8; 1D6C0;1D6C0;1D6C0;03A9;03A9; 1D6C1;1D6C1;1D6C1;2207;2207; 1D6C2;1D6C2;1D6C2;03B1;03B1; 1D6C3;1D6C3;1D6C3;03B2;03B2; 1D6C4;1D6C4;1D6C4;03B3;03B3; 1D6C5;1D6C5;1D6C5;03B4;03B4; 1D6C6;1D6C6;1D6C6;03B5;03B5; 1D6C7;1D6C7;1D6C7;03B6;03B6; 1D6C8;1D6C8;1D6C8;03B7;03B7; 1D6C9;1D6C9;1D6C9;03B8;03B8; 1D6CA;1D6CA;1D6CA;03B9;03B9; 1D6CB;1D6CB;1D6CB;03BA;03BA; 1D6CC;1D6CC;1D6CC;03BB;03BB; 1D6CD;1D6CD;1D6CD;03BC;03BC; 1D6CE;1D6CE;1D6CE;03BD;03BD; 1D6CF;1D6CF;1D6CF;03BE;03BE; 1D6D0;1D6D0;1D6D0;03BF;03BF; 1D6D1;1D6D1;1D6D1;03C0;03C0; 1D6D2;1D6D2;1D6D2;03C1;03C1; 1D6D3;1D6D3;1D6D3;03C2;03C2; 1D6D4;1D6D4;1D6D4;03C3;03C3; 1D6D5;1D6D5;1D6D5;03C4;03C4; 1D6D6;1D6D6;1D6D6;03C5;03C5; 1D6D7;1D6D7;1D6D7;03C6;03C6; 1D6D8;1D6D8;1D6D8;03C7;03C7; 1D6D9;1D6D9;1D6D9;03C8;03C8; 1D6DA;1D6DA;1D6DA;03C9;03C9; 1D6DB;1D6DB;1D6DB;2202;2202; 1D6DC;1D6DC;1D6DC;03B5;03B5; 1D6DD;1D6DD;1D6DD;03B8;03B8; 1D6DE;1D6DE;1D6DE;03BA;03BA; 1D6DF;1D6DF;1D6DF;03C6;03C6; 1D6E0;1D6E0;1D6E0;03C1;03C1; 1D6E1;1D6E1;1D6E1;03C0;03C0; 1D6E2;1D6E2;1D6E2;0391;0391; 1D6E3;1D6E3;1D6E3;0392;0392; 1D6E4;1D6E4;1D6E4;0393;0393; 1D6E5;1D6E5;1D6E5;0394;0394; 1D6E6;1D6E6;1D6E6;0395;0395; 1D6E7;1D6E7;1D6E7;0396;0396; 1D6E8;1D6E8;1D6E8;0397;0397; 1D6E9;1D6E9;1D6E9;0398;0398; 1D6EA;1D6EA;1D6EA;0399;0399; 1D6EB;1D6EB;1D6EB;039A;039A; 1D6EC;1D6EC;1D6EC;039B;039B; 1D6ED;1D6ED;1D6ED;039C;039C; 1D6EE;1D6EE;1D6EE;039D;039D; 1D6EF;1D6EF;1D6EF;039E;039E; 1D6F0;1D6F0;1D6F0;039F;039F; 1D6F1;1D6F1;1D6F1;03A0;03A0; 1D6F2;1D6F2;1D6F2;03A1;03A1; 1D6F3;1D6F3;1D6F3;0398;0398; 1D6F4;1D6F4;1D6F4;03A3;03A3; 1D6F5;1D6F5;1D6F5;03A4;03A4; 1D6F6;1D6F6;1D6F6;03A5;03A5; 1D6F7;1D6F7;1D6F7;03A6;03A6; 1D6F8;1D6F8;1D6F8;03A7;03A7; 1D6F9;1D6F9;1D6F9;03A8;03A8; 1D6FA;1D6FA;1D6FA;03A9;03A9; 1D6FB;1D6FB;1D6FB;2207;2207; 1D6FC;1D6FC;1D6FC;03B1;03B1; 1D6FD;1D6FD;1D6FD;03B2;03B2; 1D6FE;1D6FE;1D6FE;03B3;03B3; 1D6FF;1D6FF;1D6FF;03B4;03B4; 1D700;1D700;1D700;03B5;03B5; 1D701;1D701;1D701;03B6;03B6; 1D702;1D702;1D702;03B7;03B7; 1D703;1D703;1D703;03B8;03B8; 1D704;1D704;1D704;03B9;03B9; 1D705;1D705;1D705;03BA;03BA; 1D706;1D706;1D706;03BB;03BB; 1D707;1D707;1D707;03BC;03BC; 1D708;1D708;1D708;03BD;03BD; 1D709;1D709;1D709;03BE;03BE; 1D70A;1D70A;1D70A;03BF;03BF; 1D70B;1D70B;1D70B;03C0;03C0; 1D70C;1D70C;1D70C;03C1;03C1; 1D70D;1D70D;1D70D;03C2;03C2; 1D70E;1D70E;1D70E;03C3;03C3; 1D70F;1D70F;1D70F;03C4;03C4; 1D710;1D710;1D710;03C5;03C5; 1D711;1D711;1D711;03C6;03C6; 1D712;1D712;1D712;03C7;03C7; 1D713;1D713;1D713;03C8;03C8; 1D714;1D714;1D714;03C9;03C9; 1D715;1D715;1D715;2202;2202; 1D716;1D716;1D716;03B5;03B5; 1D717;1D717;1D717;03B8;03B8; 1D718;1D718;1D718;03BA;03BA; 1D719;1D719;1D719;03C6;03C6; 1D71A;1D71A;1D71A;03C1;03C1; 1D71B;1D71B;1D71B;03C0;03C0; 1D71C;1D71C;1D71C;0391;0391; 1D71D;1D71D;1D71D;0392;0392; 1D71E;1D71E;1D71E;0393;0393; 1D71F;1D71F;1D71F;0394;0394; 1D720;1D720;1D720;0395;0395; 1D721;1D721;1D721;0396;0396; 1D722;1D722;1D722;0397;0397; 1D723;1D723;1D723;0398;0398; 1D724;1D724;1D724;0399;0399; 1D725;1D725;1D725;039A;039A; 1D726;1D726;1D726;039B;039B; 1D727;1D727;1D727;039C;039C; 1D728;1D728;1D728;039D;039D; 1D729;1D729;1D729;039E;039E; 1D72A;1D72A;1D72A;039F;039F; 1D72B;1D72B;1D72B;03A0;03A0; 1D72C;1D72C;1D72C;03A1;03A1; 1D72D;1D72D;1D72D;0398;0398; 1D72E;1D72E;1D72E;03A3;03A3; 1D72F;1D72F;1D72F;03A4;03A4; 1D730;1D730;1D730;03A5;03A5; 1D731;1D731;1D731;03A6;03A6; 1D732;1D732;1D732;03A7;03A7; 1D733;1D733;1D733;03A8;03A8; 1D734;1D734;1D734;03A9;03A9; 1D735;1D735;1D735;2207;2207; 1D736;1D736;1D736;03B1;03B1; 1D737;1D737;1D737;03B2;03B2; 1D738;1D738;1D738;03B3;03B3; 1D739;1D739;1D739;03B4;03B4; 1D73A;1D73A;1D73A;03B5;03B5; 1D73B;1D73B;1D73B;03B6;03B6; 1D73C;1D73C;1D73C;03B7;03B7; 1D73D;1D73D;1D73D;03B8;03B8; 1D73E;1D73E;1D73E;03B9;03B9; 1D73F;1D73F;1D73F;03BA;03BA; 1D740;1D740;1D740;03BB;03BB; 1D741;1D741;1D741;03BC;03BC; 1D742;1D742;1D742;03BD;03BD; 1D743;1D743;1D743;03BE;03BE; 1D744;1D744;1D744;03BF;03BF; 1D745;1D745;1D745;03C0;03C0; 1D746;1D746;1D746;03C1;03C1; 1D747;1D747;1D747;03C2;03C2; 1D748;1D748;1D748;03C3;03C3; 1D749;1D749;1D749;03C4;03C4; 1D74A;1D74A;1D74A;03C5;03C5; 1D74B;1D74B;1D74B;03C6;03C6; 1D74C;1D74C;1D74C;03C7;03C7; 1D74D;1D74D;1D74D;03C8;03C8; 1D74E;1D74E;1D74E;03C9;03C9; 1D74F;1D74F;1D74F;2202;2202; 1D750;1D750;1D750;03B5;03B5; 1D751;1D751;1D751;03B8;03B8; 1D752;1D752;1D752;03BA;03BA; 1D753;1D753;1D753;03C6;03C6; 1D754;1D754;1D754;03C1;03C1; 1D755;1D755;1D755;03C0;03C0; 1D756;1D756;1D756;0391;0391; 1D757;1D757;1D757;0392;0392; 1D758;1D758;1D758;0393;0393; 1D759;1D759;1D759;0394;0394; 1D75A;1D75A;1D75A;0395;0395; 1D75B;1D75B;1D75B;0396;0396; 1D75C;1D75C;1D75C;0397;0397; 1D75D;1D75D;1D75D;0398;0398; 1D75E;1D75E;1D75E;0399;0399; 1D75F;1D75F;1D75F;039A;039A; 1D760;1D760;1D760;039B;039B; 1D761;1D761;1D761;039C;039C; 1D762;1D762;1D762;039D;039D; 1D763;1D763;1D763;039E;039E; 1D764;1D764;1D764;039F;039F; 1D765;1D765;1D765;03A0;03A0; 1D766;1D766;1D766;03A1;03A1; 1D767;1D767;1D767;0398;0398; 1D768;1D768;1D768;03A3;03A3; 1D769;1D769;1D769;03A4;03A4; 1D76A;1D76A;1D76A;03A5;03A5; 1D76B;1D76B;1D76B;03A6;03A6; 1D76C;1D76C;1D76C;03A7;03A7; 1D76D;1D76D;1D76D;03A8;03A8; 1D76E;1D76E;1D76E;03A9;03A9; 1D76F;1D76F;1D76F;2207;2207; 1D770;1D770;1D770;03B1;03B1; 1D771;1D771;1D771;03B2;03B2; 1D772;1D772;1D772;03B3;03B3; 1D773;1D773;1D773;03B4;03B4; 1D774;1D774;1D774;03B5;03B5; 1D775;1D775;1D775;03B6;03B6; 1D776;1D776;1D776;03B7;03B7; 1D777;1D777;1D777;03B8;03B8; 1D778;1D778;1D778;03B9;03B9; 1D779;1D779;1D779;03BA;03BA; 1D77A;1D77A;1D77A;03BB;03BB; 1D77B;1D77B;1D77B;03BC;03BC; 1D77C;1D77C;1D77C;03BD;03BD; 1D77D;1D77D;1D77D;03BE;03BE; 1D77E;1D77E;1D77E;03BF;03BF; 1D77F;1D77F;1D77F;03C0;03C0; 1D780;1D780;1D780;03C1;03C1; 1D781;1D781;1D781;03C2;03C2; 1D782;1D782;1D782;03C3;03C3; 1D783;1D783;1D783;03C4;03C4; 1D784;1D784;1D784;03C5;03C5; 1D785;1D785;1D785;03C6;03C6; 1D786;1D786;1D786;03C7;03C7; 1D787;1D787;1D787;03C8;03C8; 1D788;1D788;1D788;03C9;03C9; 1D789;1D789;1D789;2202;2202; 1D78A;1D78A;1D78A;03B5;03B5; 1D78B;1D78B;1D78B;03B8;03B8; 1D78C;1D78C;1D78C;03BA;03BA; 1D78D;1D78D;1D78D;03C6;03C6; 1D78E;1D78E;1D78E;03C1;03C1; 1D78F;1D78F;1D78F;03C0;03C0; 1D790;1D790;1D790;0391;0391; 1D791;1D791;1D791;0392;0392; 1D792;1D792;1D792;0393;0393; 1D793;1D793;1D793;0394;0394; 1D794;1D794;1D794;0395;0395; 1D795;1D795;1D795;0396;0396; 1D796;1D796;1D796;0397;0397; 1D797;1D797;1D797;0398;0398; 1D798;1D798;1D798;0399;0399; 1D799;1D799;1D799;039A;039A; 1D79A;1D79A;1D79A;039B;039B; 1D79B;1D79B;1D79B;039C;039C; 1D79C;1D79C;1D79C;039D;039D; 1D79D;1D79D;1D79D;039E;039E; 1D79E;1D79E;1D79E;039F;039F; 1D79F;1D79F;1D79F;03A0;03A0; 1D7A0;1D7A0;1D7A0;03A1;03A1; 1D7A1;1D7A1;1D7A1;0398;0398; 1D7A2;1D7A2;1D7A2;03A3;03A3; 1D7A3;1D7A3;1D7A3;03A4;03A4; 1D7A4;1D7A4;1D7A4;03A5;03A5; 1D7A5;1D7A5;1D7A5;03A6;03A6; 1D7A6;1D7A6;1D7A6;03A7;03A7; 1D7A7;1D7A7;1D7A7;03A8;03A8; 1D7A8;1D7A8;1D7A8;03A9;03A9; 1D7A9;1D7A9;1D7A9;2207;2207; 1D7AA;1D7AA;1D7AA;03B1;03B1; 1D7AB;1D7AB;1D7AB;03B2;03B2; 1D7AC;1D7AC;1D7AC;03B3;03B3; 1D7AD;1D7AD;1D7AD;03B4;03B4; 1D7AE;1D7AE;1D7AE;03B5;03B5; 1D7AF;1D7AF;1D7AF;03B6;03B6; 1D7B0;1D7B0;1D7B0;03B7;03B7; 1D7B1;1D7B1;1D7B1;03B8;03B8; 1D7B2;1D7B2;1D7B2;03B9;03B9; 1D7B3;1D7B3;1D7B3;03BA;03BA; 1D7B4;1D7B4;1D7B4;03BB;03BB; 1D7B5;1D7B5;1D7B5;03BC;03BC; 1D7B6;1D7B6;1D7B6;03BD;03BD; 1D7B7;1D7B7;1D7B7;03BE;03BE; 1D7B8;1D7B8;1D7B8;03BF;03BF; 1D7B9;1D7B9;1D7B9;03C0;03C0; 1D7BA;1D7BA;1D7BA;03C1;03C1; 1D7BB;1D7BB;1D7BB;03C2;03C2; 1D7BC;1D7BC;1D7BC;03C3;03C3; 1D7BD;1D7BD;1D7BD;03C4;03C4; 1D7BE;1D7BE;1D7BE;03C5;03C5; 1D7BF;1D7BF;1D7BF;03C6;03C6; 1D7C0;1D7C0;1D7C0;03C7;03C7; 1D7C1;1D7C1;1D7C1;03C8;03C8; 1D7C2;1D7C2;1D7C2;03C9;03C9; 1D7C3;1D7C3;1D7C3;2202;2202; 1D7C4;1D7C4;1D7C4;03B5;03B5; 1D7C5;1D7C5;1D7C5;03B8;03B8; 1D7C6;1D7C6;1D7C6;03BA;03BA; 1D7C7;1D7C7;1D7C7;03C6;03C6; 1D7C8;1D7C8;1D7C8;03C1;03C1; 1D7C9;1D7C9;1D7C9;03C0;03C0; 1D7CA;1D7CA;1D7CA;03DC;03DC; 1D7CB;1D7CB;1D7CB;03DD;03DD; 1D7CE;1D7CE;1D7CE;0030;0030; 1D7CF;1D7CF;1D7CF;0031;0031; 1D7D0;1D7D0;1D7D0;0032;0032; 1D7D1;1D7D1;1D7D1;0033;0033; 1D7D2;1D7D2;1D7D2;0034;0034; 1D7D3;1D7D3;1D7D3;0035;0035; 1D7D4;1D7D4;1D7D4;0036;0036; 1D7D5;1D7D5;1D7D5;0037;0037; 1D7D6;1D7D6;1D7D6;0038;0038; 1D7D7;1D7D7;1D7D7;0039;0039; 1D7D8;1D7D8;1D7D8;0030;0030; 1D7D9;1D7D9;1D7D9;0031;0031; 1D7DA;1D7DA;1D7DA;0032;0032; 1D7DB;1D7DB;1D7DB;0033;0033; 1D7DC;1D7DC;1D7DC;0034;0034; 1D7DD;1D7DD;1D7DD;0035;0035; 1D7DE;1D7DE;1D7DE;0036;0036; 1D7DF;1D7DF;1D7DF;0037;0037; 1D7E0;1D7E0;1D7E0;0038;0038; 1D7E1;1D7E1;1D7E1;0039;0039; 1D7E2;1D7E2;1D7E2;0030;0030; 1D7E3;1D7E3;1D7E3;0031;0031; 1D7E4;1D7E4;1D7E4;0032;0032; 1D7E5;1D7E5;1D7E5;0033;0033; 1D7E6;1D7E6;1D7E6;0034;0034; 1D7E7;1D7E7;1D7E7;0035;0035; 1D7E8;1D7E8;1D7E8;0036;0036; 1D7E9;1D7E9;1D7E9;0037;0037; 1D7EA;1D7EA;1D7EA;0038;0038; 1D7EB;1D7EB;1D7EB;0039;0039; 1D7EC;1D7EC;1D7EC;0030;0030; 1D7ED;1D7ED;1D7ED;0031;0031; 1D7EE;1D7EE;1D7EE;0032;0032; 1D7EF;1D7EF;1D7EF;0033;0033; 1D7F0;1D7F0;1D7F0;0034;0034; 1D7F1;1D7F1;1D7F1;0035;0035; 1D7F2;1D7F2;1D7F2;0036;0036; 1D7F3;1D7F3;1D7F3;0037;0037; 1D7F4;1D7F4;1D7F4;0038;0038; 1D7F5;1D7F5;1D7F5;0039;0039; 1D7F6;1D7F6;1D7F6;0030;0030; 1D7F7;1D7F7;1D7F7;0031;0031; 1D7F8;1D7F8;1D7F8;0032;0032; 1D7F9;1D7F9;1D7F9;0033;0033; 1D7FA;1D7FA;1D7FA;0034;0034; 1D7FB;1D7FB;1D7FB;0035;0035; 1D7FC;1D7FC;1D7FC;0036;0036; 1D7FD;1D7FD;1D7FD;0037;0037; 1D7FE;1D7FE;1D7FE;0038;0038; 1D7FF;1D7FF;1D7FF;0039;0039; 1F100;1F100;1F100;0030 002E;0030 002E; 1F101;1F101;1F101;0030 002C;0030 002C; 1F102;1F102;1F102;0031 002C;0031 002C; 1F103;1F103;1F103;0032 002C;0032 002C; 1F104;1F104;1F104;0033 002C;0033 002C; 1F105;1F105;1F105;0034 002C;0034 002C; 1F106;1F106;1F106;0035 002C;0035 002C; 1F107;1F107;1F107;0036 002C;0036 002C; 1F108;1F108;1F108;0037 002C;0037 002C; 1F109;1F109;1F109;0038 002C;0038 002C; 1F10A;1F10A;1F10A;0039 002C;0039 002C; 1F110;1F110;1F110;0028 0041 0029;0028 0041 0029; 1F111;1F111;1F111;0028 0042 0029;0028 0042 0029; 1F112;1F112;1F112;0028 0043 0029;0028 0043 0029; 1F113;1F113;1F113;0028 0044 0029;0028 0044 0029; 1F114;1F114;1F114;0028 0045 0029;0028 0045 0029; 1F115;1F115;1F115;0028 0046 0029;0028 0046 0029; 1F116;1F116;1F116;0028 0047 0029;0028 0047 0029; 1F117;1F117;1F117;0028 0048 0029;0028 0048 0029; 1F118;1F118;1F118;0028 0049 0029;0028 0049 0029; 1F119;1F119;1F119;0028 004A 0029;0028 004A 0029; 1F11A;1F11A;1F11A;0028 004B 0029;0028 004B 0029; 1F11B;1F11B;1F11B;0028 004C 0029;0028 004C 0029; 1F11C;1F11C;1F11C;0028 004D 0029;0028 004D 0029; 1F11D;1F11D;1F11D;0028 004E 0029;0028 004E 0029; 1F11E;1F11E;1F11E;0028 004F 0029;0028 004F 0029; 1F11F;1F11F;1F11F;0028 0050 0029;0028 0050 0029; 1F120;1F120;1F120;0028 0051 0029;0028 0051 0029; 1F121;1F121;1F121;0028 0052 0029;0028 0052 0029; 1F122;1F122;1F122;0028 0053 0029;0028 0053 0029; 1F123;1F123;1F123;0028 0054 0029;0028 0054 0029; 1F124;1F124;1F124;0028 0055 0029;0028 0055 0029; 1F125;1F125;1F125;0028 0056 0029;0028 0056 0029; 1F126;1F126;1F126;0028 0057 0029;0028 0057 0029; 1F127;1F127;1F127;0028 0058 0029;0028 0058 0029; 1F128;1F128;1F128;0028 0059 0029;0028 0059 0029; 1F129;1F129;1F129;0028 005A 0029;0028 005A 0029; 1F12A;1F12A;1F12A;3014 0053 3015;3014 0053 3015; 1F12B;1F12B;1F12B;0043;0043; 1F12C;1F12C;1F12C;0052;0052; 1F12D;1F12D;1F12D;0043 0044;0043 0044; 1F12E;1F12E;1F12E;0057 005A;0057 005A; 1F130;1F130;1F130;0041;0041; 1F131;1F131;1F131;0042;0042; 1F132;1F132;1F132;0043;0043; 1F133;1F133;1F133;0044;0044; 1F134;1F134;1F134;0045;0045; 1F135;1F135;1F135;0046;0046; 1F136;1F136;1F136;0047;0047; 1F137;1F137;1F137;0048;0048; 1F138;1F138;1F138;0049;0049; 1F139;1F139;1F139;004A;004A; 1F13A;1F13A;1F13A;004B;004B; 1F13B;1F13B;1F13B;004C;004C; 1F13C;1F13C;1F13C;004D;004D; 1F13D;1F13D;1F13D;004E;004E; 1F13E;1F13E;1F13E;004F;004F; 1F13F;1F13F;1F13F;0050;0050; 1F140;1F140;1F140;0051;0051; 1F141;1F141;1F141;0052;0052; 1F142;1F142;1F142;0053;0053; 1F143;1F143;1F143;0054;0054; 1F144;1F144;1F144;0055;0055; 1F145;1F145;1F145;0056;0056; 1F146;1F146;1F146;0057;0057; 1F147;1F147;1F147;0058;0058; 1F148;1F148;1F148;0059;0059; 1F149;1F149;1F149;005A;005A; 1F14A;1F14A;1F14A;0048 0056;0048 0056; 1F14B;1F14B;1F14B;004D 0056;004D 0056; 1F14C;1F14C;1F14C;0053 0044;0053 0044; 1F14D;1F14D;1F14D;0053 0053;0053 0053; 1F14E;1F14E;1F14E;0050 0050 0056;0050 0050 0056; 1F14F;1F14F;1F14F;0057 0043;0057 0043; 1F190;1F190;1F190;0044 004A;0044 004A; 1F200;1F200;1F200;307B 304B;307B 304B; 1F201;1F201;1F201;30B3 30B3;30B3 30B3; 1F202;1F202;1F202;30B5;30B5; 1F210;1F210;1F210;624B;624B; 1F211;1F211;1F211;5B57;5B57; 1F212;1F212;1F212;53CC;53CC; 1F213;1F213;1F213;30C7;30C6 3099; 1F214;1F214;1F214;4E8C;4E8C; 1F215;1F215;1F215;591A;591A; 1F216;1F216;1F216;89E3;89E3; 1F217;1F217;1F217;5929;5929; 1F218;1F218;1F218;4EA4;4EA4; 1F219;1F219;1F219;6620;6620; 1F21A;1F21A;1F21A;7121;7121; 1F21B;1F21B;1F21B;6599;6599; 1F21C;1F21C;1F21C;524D;524D; 1F21D;1F21D;1F21D;5F8C;5F8C; 1F21E;1F21E;1F21E;518D;518D; 1F21F;1F21F;1F21F;65B0;65B0; 1F220;1F220;1F220;521D;521D; 1F221;1F221;1F221;7D42;7D42; 1F222;1F222;1F222;751F;751F; 1F223;1F223;1F223;8CA9;8CA9; 1F224;1F224;1F224;58F0;58F0; 1F225;1F225;1F225;5439;5439; 1F226;1F226;1F226;6F14;6F14; 1F227;1F227;1F227;6295;6295; 1F228;1F228;1F228;6355;6355; 1F229;1F229;1F229;4E00;4E00; 1F22A;1F22A;1F22A;4E09;4E09; 1F22B;1F22B;1F22B;904A;904A; 1F22C;1F22C;1F22C;5DE6;5DE6; 1F22D;1F22D;1F22D;4E2D;4E2D; 1F22E;1F22E;1F22E;53F3;53F3; 1F22F;1F22F;1F22F;6307;6307; 1F230;1F230;1F230;8D70;8D70; 1F231;1F231;1F231;6253;6253; 1F232;1F232;1F232;7981;7981; 1F233;1F233;1F233;7A7A;7A7A; 1F234;1F234;1F234;5408;5408; 1F235;1F235;1F235;6E80;6E80; 1F236;1F236;1F236;6709;6709; 1F237;1F237;1F237;6708;6708; 1F238;1F238;1F238;7533;7533; 1F239;1F239;1F239;5272;5272; 1F23A;1F23A;1F23A;55B6;55B6; 1F240;1F240;1F240;3014 672C 3015;3014 672C 3015; 1F241;1F241;1F241;3014 4E09 3015;3014 4E09 3015; 1F242;1F242;1F242;3014 4E8C 3015;3014 4E8C 3015; 1F243;1F243;1F243;3014 5B89 3015;3014 5B89 3015; 1F244;1F244;1F244;3014 70B9 3015;3014 70B9 3015; 1F245;1F245;1F245;3014 6253 3015;3014 6253 3015; 1F246;1F246;1F246;3014 76D7 3015;3014 76D7 3015; 1F247;1F247;1F247;3014 52DD 3015;3014 52DD 3015; 1F248;1F248;1F248;3014 6557 3015;3014 6557 3015; 1F250;1F250;1F250;5F97;5F97; 1F251;1F251;1F251;53EF;53EF; 2F800;4E3D;4E3D;4E3D;4E3D; 2F801;4E38;4E38;4E38;4E38; 2F802;4E41;4E41;4E41;4E41; 2F803;20122;20122;20122;20122; 2F804;4F60;4F60;4F60;4F60; 2F805;4FAE;4FAE;4FAE;4FAE; 2F806;4FBB;4FBB;4FBB;4FBB; 2F807;5002;5002;5002;5002; 2F808;507A;507A;507A;507A; 2F809;5099;5099;5099;5099; 2F80A;50E7;50E7;50E7;50E7; 2F80B;50CF;50CF;50CF;50CF; 2F80C;349E;349E;349E;349E; 2F80D;2063A;2063A;2063A;2063A; 2F80E;514D;514D;514D;514D; 2F80F;5154;5154;5154;5154; 2F810;5164;5164;5164;5164; 2F811;5177;5177;5177;5177; 2F812;2051C;2051C;2051C;2051C; 2F813;34B9;34B9;34B9;34B9; 2F814;5167;5167;5167;5167; 2F815;518D;518D;518D;518D; 2F816;2054B;2054B;2054B;2054B; 2F817;5197;5197;5197;5197; 2F818;51A4;51A4;51A4;51A4; 2F819;4ECC;4ECC;4ECC;4ECC; 2F81A;51AC;51AC;51AC;51AC; 2F81B;51B5;51B5;51B5;51B5; 2F81C;291DF;291DF;291DF;291DF; 2F81D;51F5;51F5;51F5;51F5; 2F81E;5203;5203;5203;5203; 2F81F;34DF;34DF;34DF;34DF; 2F820;523B;523B;523B;523B; 2F821;5246;5246;5246;5246; 2F822;5272;5272;5272;5272; 2F823;5277;5277;5277;5277; 2F824;3515;3515;3515;3515; 2F825;52C7;52C7;52C7;52C7; 2F826;52C9;52C9;52C9;52C9; 2F827;52E4;52E4;52E4;52E4; 2F828;52FA;52FA;52FA;52FA; 2F829;5305;5305;5305;5305; 2F82A;5306;5306;5306;5306; 2F82B;5317;5317;5317;5317; 2F82C;5349;5349;5349;5349; 2F82D;5351;5351;5351;5351; 2F82E;535A;535A;535A;535A; 2F82F;5373;5373;5373;5373; 2F830;537D;537D;537D;537D; 2F831;537F;537F;537F;537F; 2F832;537F;537F;537F;537F; 2F833;537F;537F;537F;537F; 2F834;20A2C;20A2C;20A2C;20A2C; 2F835;7070;7070;7070;7070; 2F836;53CA;53CA;53CA;53CA; 2F837;53DF;53DF;53DF;53DF; 2F838;20B63;20B63;20B63;20B63; 2F839;53EB;53EB;53EB;53EB; 2F83A;53F1;53F1;53F1;53F1; 2F83B;5406;5406;5406;5406; 2F83C;549E;549E;549E;549E; 2F83D;5438;5438;5438;5438; 2F83E;5448;5448;5448;5448; 2F83F;5468;5468;5468;5468; 2F840;54A2;54A2;54A2;54A2; 2F841;54F6;54F6;54F6;54F6; 2F842;5510;5510;5510;5510; 2F843;5553;5553;5553;5553; 2F844;5563;5563;5563;5563; 2F845;5584;5584;5584;5584; 2F846;5584;5584;5584;5584; 2F847;5599;5599;5599;5599; 2F848;55AB;55AB;55AB;55AB; 2F849;55B3;55B3;55B3;55B3; 2F84A;55C2;55C2;55C2;55C2; 2F84B;5716;5716;5716;5716; 2F84C;5606;5606;5606;5606; 2F84D;5717;5717;5717;5717; 2F84E;5651;5651;5651;5651; 2F84F;5674;5674;5674;5674; 2F850;5207;5207;5207;5207; 2F851;58EE;58EE;58EE;58EE; 2F852;57CE;57CE;57CE;57CE; 2F853;57F4;57F4;57F4;57F4; 2F854;580D;580D;580D;580D; 2F855;578B;578B;578B;578B; 2F856;5832;5832;5832;5832; 2F857;5831;5831;5831;5831; 2F858;58AC;58AC;58AC;58AC; 2F859;214E4;214E4;214E4;214E4; 2F85A;58F2;58F2;58F2;58F2; 2F85B;58F7;58F7;58F7;58F7; 2F85C;5906;5906;5906;5906; 2F85D;591A;591A;591A;591A; 2F85E;5922;5922;5922;5922; 2F85F;5962;5962;5962;5962; 2F860;216A8;216A8;216A8;216A8; 2F861;216EA;216EA;216EA;216EA; 2F862;59EC;59EC;59EC;59EC; 2F863;5A1B;5A1B;5A1B;5A1B; 2F864;5A27;5A27;5A27;5A27; 2F865;59D8;59D8;59D8;59D8; 2F866;5A66;5A66;5A66;5A66; 2F867;36EE;36EE;36EE;36EE; 2F868;36FC;36FC;36FC;36FC; 2F869;5B08;5B08;5B08;5B08; 2F86A;5B3E;5B3E;5B3E;5B3E; 2F86B;5B3E;5B3E;5B3E;5B3E; 2F86C;219C8;219C8;219C8;219C8; 2F86D;5BC3;5BC3;5BC3;5BC3; 2F86E;5BD8;5BD8;5BD8;5BD8; 2F86F;5BE7;5BE7;5BE7;5BE7; 2F870;5BF3;5BF3;5BF3;5BF3; 2F871;21B18;21B18;21B18;21B18; 2F872;5BFF;5BFF;5BFF;5BFF; 2F873;5C06;5C06;5C06;5C06; 2F874;5F53;5F53;5F53;5F53; 2F875;5C22;5C22;5C22;5C22; 2F876;3781;3781;3781;3781; 2F877;5C60;5C60;5C60;5C60; 2F878;5C6E;5C6E;5C6E;5C6E; 2F879;5CC0;5CC0;5CC0;5CC0; 2F87A;5C8D;5C8D;5C8D;5C8D; 2F87B;21DE4;21DE4;21DE4;21DE4; 2F87C;5D43;5D43;5D43;5D43; 2F87D;21DE6;21DE6;21DE6;21DE6; 2F87E;5D6E;5D6E;5D6E;5D6E; 2F87F;5D6B;5D6B;5D6B;5D6B; 2F880;5D7C;5D7C;5D7C;5D7C; 2F881;5DE1;5DE1;5DE1;5DE1; 2F882;5DE2;5DE2;5DE2;5DE2; 2F883;382F;382F;382F;382F; 2F884;5DFD;5DFD;5DFD;5DFD; 2F885;5E28;5E28;5E28;5E28; 2F886;5E3D;5E3D;5E3D;5E3D; 2F887;5E69;5E69;5E69;5E69; 2F888;3862;3862;3862;3862; 2F889;22183;22183;22183;22183; 2F88A;387C;387C;387C;387C; 2F88B;5EB0;5EB0;5EB0;5EB0; 2F88C;5EB3;5EB3;5EB3;5EB3; 2F88D;5EB6;5EB6;5EB6;5EB6; 2F88E;5ECA;5ECA;5ECA;5ECA; 2F88F;2A392;2A392;2A392;2A392; 2F890;5EFE;5EFE;5EFE;5EFE; 2F891;22331;22331;22331;22331; 2F892;22331;22331;22331;22331; 2F893;8201;8201;8201;8201; 2F894;5F22;5F22;5F22;5F22; 2F895;5F22;5F22;5F22;5F22; 2F896;38C7;38C7;38C7;38C7; 2F897;232B8;232B8;232B8;232B8; 2F898;261DA;261DA;261DA;261DA; 2F899;5F62;5F62;5F62;5F62; 2F89A;5F6B;5F6B;5F6B;5F6B; 2F89B;38E3;38E3;38E3;38E3; 2F89C;5F9A;5F9A;5F9A;5F9A; 2F89D;5FCD;5FCD;5FCD;5FCD; 2F89E;5FD7;5FD7;5FD7;5FD7; 2F89F;5FF9;5FF9;5FF9;5FF9; 2F8A0;6081;6081;6081;6081; 2F8A1;393A;393A;393A;393A; 2F8A2;391C;391C;391C;391C; 2F8A3;6094;6094;6094;6094; 2F8A4;226D4;226D4;226D4;226D4; 2F8A5;60C7;60C7;60C7;60C7; 2F8A6;6148;6148;6148;6148; 2F8A7;614C;614C;614C;614C; 2F8A8;614E;614E;614E;614E; 2F8A9;614C;614C;614C;614C; 2F8AA;617A;617A;617A;617A; 2F8AB;618E;618E;618E;618E; 2F8AC;61B2;61B2;61B2;61B2; 2F8AD;61A4;61A4;61A4;61A4; 2F8AE;61AF;61AF;61AF;61AF; 2F8AF;61DE;61DE;61DE;61DE; 2F8B0;61F2;61F2;61F2;61F2; 2F8B1;61F6;61F6;61F6;61F6; 2F8B2;6210;6210;6210;6210; 2F8B3;621B;621B;621B;621B; 2F8B4;625D;625D;625D;625D; 2F8B5;62B1;62B1;62B1;62B1; 2F8B6;62D4;62D4;62D4;62D4; 2F8B7;6350;6350;6350;6350; 2F8B8;22B0C;22B0C;22B0C;22B0C; 2F8B9;633D;633D;633D;633D; 2F8BA;62FC;62FC;62FC;62FC; 2F8BB;6368;6368;6368;6368; 2F8BC;6383;6383;6383;6383; 2F8BD;63E4;63E4;63E4;63E4; 2F8BE;22BF1;22BF1;22BF1;22BF1; 2F8BF;6422;6422;6422;6422; 2F8C0;63C5;63C5;63C5;63C5; 2F8C1;63A9;63A9;63A9;63A9; 2F8C2;3A2E;3A2E;3A2E;3A2E; 2F8C3;6469;6469;6469;6469; 2F8C4;647E;647E;647E;647E; 2F8C5;649D;649D;649D;649D; 2F8C6;6477;6477;6477;6477; 2F8C7;3A6C;3A6C;3A6C;3A6C; 2F8C8;654F;654F;654F;654F; 2F8C9;656C;656C;656C;656C; 2F8CA;2300A;2300A;2300A;2300A; 2F8CB;65E3;65E3;65E3;65E3; 2F8CC;66F8;66F8;66F8;66F8; 2F8CD;6649;6649;6649;6649; 2F8CE;3B19;3B19;3B19;3B19; 2F8CF;6691;6691;6691;6691; 2F8D0;3B08;3B08;3B08;3B08; 2F8D1;3AE4;3AE4;3AE4;3AE4; 2F8D2;5192;5192;5192;5192; 2F8D3;5195;5195;5195;5195; 2F8D4;6700;6700;6700;6700; 2F8D5;669C;669C;669C;669C; 2F8D6;80AD;80AD;80AD;80AD; 2F8D7;43D9;43D9;43D9;43D9; 2F8D8;6717;6717;6717;6717; 2F8D9;671B;671B;671B;671B; 2F8DA;6721;6721;6721;6721; 2F8DB;675E;675E;675E;675E; 2F8DC;6753;6753;6753;6753; 2F8DD;233C3;233C3;233C3;233C3; 2F8DE;3B49;3B49;3B49;3B49; 2F8DF;67FA;67FA;67FA;67FA; 2F8E0;6785;6785;6785;6785; 2F8E1;6852;6852;6852;6852; 2F8E2;6885;6885;6885;6885; 2F8E3;2346D;2346D;2346D;2346D; 2F8E4;688E;688E;688E;688E; 2F8E5;681F;681F;681F;681F; 2F8E6;6914;6914;6914;6914; 2F8E7;3B9D;3B9D;3B9D;3B9D; 2F8E8;6942;6942;6942;6942; 2F8E9;69A3;69A3;69A3;69A3; 2F8EA;69EA;69EA;69EA;69EA; 2F8EB;6AA8;6AA8;6AA8;6AA8; 2F8EC;236A3;236A3;236A3;236A3; 2F8ED;6ADB;6ADB;6ADB;6ADB; 2F8EE;3C18;3C18;3C18;3C18; 2F8EF;6B21;6B21;6B21;6B21; 2F8F0;238A7;238A7;238A7;238A7; 2F8F1;6B54;6B54;6B54;6B54; 2F8F2;3C4E;3C4E;3C4E;3C4E; 2F8F3;6B72;6B72;6B72;6B72; 2F8F4;6B9F;6B9F;6B9F;6B9F; 2F8F5;6BBA;6BBA;6BBA;6BBA; 2F8F6;6BBB;6BBB;6BBB;6BBB; 2F8F7;23A8D;23A8D;23A8D;23A8D; 2F8F8;21D0B;21D0B;21D0B;21D0B; 2F8F9;23AFA;23AFA;23AFA;23AFA; 2F8FA;6C4E;6C4E;6C4E;6C4E; 2F8FB;23CBC;23CBC;23CBC;23CBC; 2F8FC;6CBF;6CBF;6CBF;6CBF; 2F8FD;6CCD;6CCD;6CCD;6CCD; 2F8FE;6C67;6C67;6C67;6C67; 2F8FF;6D16;6D16;6D16;6D16; 2F900;6D3E;6D3E;6D3E;6D3E; 2F901;6D77;6D77;6D77;6D77; 2F902;6D41;6D41;6D41;6D41; 2F903;6D69;6D69;6D69;6D69; 2F904;6D78;6D78;6D78;6D78; 2F905;6D85;6D85;6D85;6D85; 2F906;23D1E;23D1E;23D1E;23D1E; 2F907;6D34;6D34;6D34;6D34; 2F908;6E2F;6E2F;6E2F;6E2F; 2F909;6E6E;6E6E;6E6E;6E6E; 2F90A;3D33;3D33;3D33;3D33; 2F90B;6ECB;6ECB;6ECB;6ECB; 2F90C;6EC7;6EC7;6EC7;6EC7; 2F90D;23ED1;23ED1;23ED1;23ED1; 2F90E;6DF9;6DF9;6DF9;6DF9; 2F90F;6F6E;6F6E;6F6E;6F6E; 2F910;23F5E;23F5E;23F5E;23F5E; 2F911;23F8E;23F8E;23F8E;23F8E; 2F912;6FC6;6FC6;6FC6;6FC6; 2F913;7039;7039;7039;7039; 2F914;701E;701E;701E;701E; 2F915;701B;701B;701B;701B; 2F916;3D96;3D96;3D96;3D96; 2F917;704A;704A;704A;704A; 2F918;707D;707D;707D;707D; 2F919;7077;7077;7077;7077; 2F91A;70AD;70AD;70AD;70AD; 2F91B;20525;20525;20525;20525; 2F91C;7145;7145;7145;7145; 2F91D;24263;24263;24263;24263; 2F91E;719C;719C;719C;719C; 2F91F;243AB;243AB;243AB;243AB; 2F920;7228;7228;7228;7228; 2F921;7235;7235;7235;7235; 2F922;7250;7250;7250;7250; 2F923;24608;24608;24608;24608; 2F924;7280;7280;7280;7280; 2F925;7295;7295;7295;7295; 2F926;24735;24735;24735;24735; 2F927;24814;24814;24814;24814; 2F928;737A;737A;737A;737A; 2F929;738B;738B;738B;738B; 2F92A;3EAC;3EAC;3EAC;3EAC; 2F92B;73A5;73A5;73A5;73A5; 2F92C;3EB8;3EB8;3EB8;3EB8; 2F92D;3EB8;3EB8;3EB8;3EB8; 2F92E;7447;7447;7447;7447; 2F92F;745C;745C;745C;745C; 2F930;7471;7471;7471;7471; 2F931;7485;7485;7485;7485; 2F932;74CA;74CA;74CA;74CA; 2F933;3F1B;3F1B;3F1B;3F1B; 2F934;7524;7524;7524;7524; 2F935;24C36;24C36;24C36;24C36; 2F936;753E;753E;753E;753E; 2F937;24C92;24C92;24C92;24C92; 2F938;7570;7570;7570;7570; 2F939;2219F;2219F;2219F;2219F; 2F93A;7610;7610;7610;7610; 2F93B;24FA1;24FA1;24FA1;24FA1; 2F93C;24FB8;24FB8;24FB8;24FB8; 2F93D;25044;25044;25044;25044; 2F93E;3FFC;3FFC;3FFC;3FFC; 2F93F;4008;4008;4008;4008; 2F940;76F4;76F4;76F4;76F4; 2F941;250F3;250F3;250F3;250F3; 2F942;250F2;250F2;250F2;250F2; 2F943;25119;25119;25119;25119; 2F944;25133;25133;25133;25133; 2F945;771E;771E;771E;771E; 2F946;771F;771F;771F;771F; 2F947;771F;771F;771F;771F; 2F948;774A;774A;774A;774A; 2F949;4039;4039;4039;4039; 2F94A;778B;778B;778B;778B; 2F94B;4046;4046;4046;4046; 2F94C;4096;4096;4096;4096; 2F94D;2541D;2541D;2541D;2541D; 2F94E;784E;784E;784E;784E; 2F94F;788C;788C;788C;788C; 2F950;78CC;78CC;78CC;78CC; 2F951;40E3;40E3;40E3;40E3; 2F952;25626;25626;25626;25626; 2F953;7956;7956;7956;7956; 2F954;2569A;2569A;2569A;2569A; 2F955;256C5;256C5;256C5;256C5; 2F956;798F;798F;798F;798F; 2F957;79EB;79EB;79EB;79EB; 2F958;412F;412F;412F;412F; 2F959;7A40;7A40;7A40;7A40; 2F95A;7A4A;7A4A;7A4A;7A4A; 2F95B;7A4F;7A4F;7A4F;7A4F; 2F95C;2597C;2597C;2597C;2597C; 2F95D;25AA7;25AA7;25AA7;25AA7; 2F95E;25AA7;25AA7;25AA7;25AA7; 2F95F;7AEE;7AEE;7AEE;7AEE; 2F960;4202;4202;4202;4202; 2F961;25BAB;25BAB;25BAB;25BAB; 2F962;7BC6;7BC6;7BC6;7BC6; 2F963;7BC9;7BC9;7BC9;7BC9; 2F964;4227;4227;4227;4227; 2F965;25C80;25C80;25C80;25C80; 2F966;7CD2;7CD2;7CD2;7CD2; 2F967;42A0;42A0;42A0;42A0; 2F968;7CE8;7CE8;7CE8;7CE8; 2F969;7CE3;7CE3;7CE3;7CE3; 2F96A;7D00;7D00;7D00;7D00; 2F96B;25F86;25F86;25F86;25F86; 2F96C;7D63;7D63;7D63;7D63; 2F96D;4301;4301;4301;4301; 2F96E;7DC7;7DC7;7DC7;7DC7; 2F96F;7E02;7E02;7E02;7E02; 2F970;7E45;7E45;7E45;7E45; 2F971;4334;4334;4334;4334; 2F972;26228;26228;26228;26228; 2F973;26247;26247;26247;26247; 2F974;4359;4359;4359;4359; 2F975;262D9;262D9;262D9;262D9; 2F976;7F7A;7F7A;7F7A;7F7A; 2F977;2633E;2633E;2633E;2633E; 2F978;7F95;7F95;7F95;7F95; 2F979;7FFA;7FFA;7FFA;7FFA; 2F97A;8005;8005;8005;8005; 2F97B;264DA;264DA;264DA;264DA; 2F97C;26523;26523;26523;26523; 2F97D;8060;8060;8060;8060; 2F97E;265A8;265A8;265A8;265A8; 2F97F;8070;8070;8070;8070; 2F980;2335F;2335F;2335F;2335F; 2F981;43D5;43D5;43D5;43D5; 2F982;80B2;80B2;80B2;80B2; 2F983;8103;8103;8103;8103; 2F984;440B;440B;440B;440B; 2F985;813E;813E;813E;813E; 2F986;5AB5;5AB5;5AB5;5AB5; 2F987;267A7;267A7;267A7;267A7; 2F988;267B5;267B5;267B5;267B5; 2F989;23393;23393;23393;23393; 2F98A;2339C;2339C;2339C;2339C; 2F98B;8201;8201;8201;8201; 2F98C;8204;8204;8204;8204; 2F98D;8F9E;8F9E;8F9E;8F9E; 2F98E;446B;446B;446B;446B; 2F98F;8291;8291;8291;8291; 2F990;828B;828B;828B;828B; 2F991;829D;829D;829D;829D; 2F992;52B3;52B3;52B3;52B3; 2F993;82B1;82B1;82B1;82B1; 2F994;82B3;82B3;82B3;82B3; 2F995;82BD;82BD;82BD;82BD; 2F996;82E6;82E6;82E6;82E6; 2F997;26B3C;26B3C;26B3C;26B3C; 2F998;82E5;82E5;82E5;82E5; 2F999;831D;831D;831D;831D; 2F99A;8363;8363;8363;8363; 2F99B;83AD;83AD;83AD;83AD; 2F99C;8323;8323;8323;8323; 2F99D;83BD;83BD;83BD;83BD; 2F99E;83E7;83E7;83E7;83E7; 2F99F;8457;8457;8457;8457; 2F9A0;8353;8353;8353;8353; 2F9A1;83CA;83CA;83CA;83CA; 2F9A2;83CC;83CC;83CC;83CC; 2F9A3;83DC;83DC;83DC;83DC; 2F9A4;26C36;26C36;26C36;26C36; 2F9A5;26D6B;26D6B;26D6B;26D6B; 2F9A6;26CD5;26CD5;26CD5;26CD5; 2F9A7;452B;452B;452B;452B; 2F9A8;84F1;84F1;84F1;84F1; 2F9A9;84F3;84F3;84F3;84F3; 2F9AA;8516;8516;8516;8516; 2F9AB;273CA;273CA;273CA;273CA; 2F9AC;8564;8564;8564;8564; 2F9AD;26F2C;26F2C;26F2C;26F2C; 2F9AE;455D;455D;455D;455D; 2F9AF;4561;4561;4561;4561; 2F9B0;26FB1;26FB1;26FB1;26FB1; 2F9B1;270D2;270D2;270D2;270D2; 2F9B2;456B;456B;456B;456B; 2F9B3;8650;8650;8650;8650; 2F9B4;865C;865C;865C;865C; 2F9B5;8667;8667;8667;8667; 2F9B6;8669;8669;8669;8669; 2F9B7;86A9;86A9;86A9;86A9; 2F9B8;8688;8688;8688;8688; 2F9B9;870E;870E;870E;870E; 2F9BA;86E2;86E2;86E2;86E2; 2F9BB;8779;8779;8779;8779; 2F9BC;8728;8728;8728;8728; 2F9BD;876B;876B;876B;876B; 2F9BE;8786;8786;8786;8786; 2F9BF;45D7;45D7;45D7;45D7; 2F9C0;87E1;87E1;87E1;87E1; 2F9C1;8801;8801;8801;8801; 2F9C2;45F9;45F9;45F9;45F9; 2F9C3;8860;8860;8860;8860; 2F9C4;8863;8863;8863;8863; 2F9C5;27667;27667;27667;27667; 2F9C6;88D7;88D7;88D7;88D7; 2F9C7;88DE;88DE;88DE;88DE; 2F9C8;4635;4635;4635;4635; 2F9C9;88FA;88FA;88FA;88FA; 2F9CA;34BB;34BB;34BB;34BB; 2F9CB;278AE;278AE;278AE;278AE; 2F9CC;27966;27966;27966;27966; 2F9CD;46BE;46BE;46BE;46BE; 2F9CE;46C7;46C7;46C7;46C7; 2F9CF;8AA0;8AA0;8AA0;8AA0; 2F9D0;8AED;8AED;8AED;8AED; 2F9D1;8B8A;8B8A;8B8A;8B8A; 2F9D2;8C55;8C55;8C55;8C55; 2F9D3;27CA8;27CA8;27CA8;27CA8; 2F9D4;8CAB;8CAB;8CAB;8CAB; 2F9D5;8CC1;8CC1;8CC1;8CC1; 2F9D6;8D1B;8D1B;8D1B;8D1B; 2F9D7;8D77;8D77;8D77;8D77; 2F9D8;27F2F;27F2F;27F2F;27F2F; 2F9D9;20804;20804;20804;20804; 2F9DA;8DCB;8DCB;8DCB;8DCB; 2F9DB;8DBC;8DBC;8DBC;8DBC; 2F9DC;8DF0;8DF0;8DF0;8DF0; 2F9DD;208DE;208DE;208DE;208DE; 2F9DE;8ED4;8ED4;8ED4;8ED4; 2F9DF;8F38;8F38;8F38;8F38; 2F9E0;285D2;285D2;285D2;285D2; 2F9E1;285ED;285ED;285ED;285ED; 2F9E2;9094;9094;9094;9094; 2F9E3;90F1;90F1;90F1;90F1; 2F9E4;9111;9111;9111;9111; 2F9E5;2872E;2872E;2872E;2872E; 2F9E6;911B;911B;911B;911B; 2F9E7;9238;9238;9238;9238; 2F9E8;92D7;92D7;92D7;92D7; 2F9E9;92D8;92D8;92D8;92D8; 2F9EA;927C;927C;927C;927C; 2F9EB;93F9;93F9;93F9;93F9; 2F9EC;9415;9415;9415;9415; 2F9ED;28BFA;28BFA;28BFA;28BFA; 2F9EE;958B;958B;958B;958B; 2F9EF;4995;4995;4995;4995; 2F9F0;95B7;95B7;95B7;95B7; 2F9F1;28D77;28D77;28D77;28D77; 2F9F2;49E6;49E6;49E6;49E6; 2F9F3;96C3;96C3;96C3;96C3; 2F9F4;5DB2;5DB2;5DB2;5DB2; 2F9F5;9723;9723;9723;9723; 2F9F6;29145;29145;29145;29145; 2F9F7;2921A;2921A;2921A;2921A; 2F9F8;4A6E;4A6E;4A6E;4A6E; 2F9F9;4A76;4A76;4A76;4A76; 2F9FA;97E0;97E0;97E0;97E0; 2F9FB;2940A;2940A;2940A;2940A; 2F9FC;4AB2;4AB2;4AB2;4AB2; 2F9FD;29496;29496;29496;29496; 2F9FE;980B;980B;980B;980B; 2F9FF;980B;980B;980B;980B; 2FA00;9829;9829;9829;9829; 2FA01;295B6;295B6;295B6;295B6; 2FA02;98E2;98E2;98E2;98E2; 2FA03;4B33;4B33;4B33;4B33; 2FA04;9929;9929;9929;9929; 2FA05;99A7;99A7;99A7;99A7; 2FA06;99C2;99C2;99C2;99C2; 2FA07;99FE;99FE;99FE;99FE; 2FA08;4BCE;4BCE;4BCE;4BCE; 2FA09;29B30;29B30;29B30;29B30; 2FA0A;9B12;9B12;9B12;9B12; 2FA0B;9C40;9C40;9C40;9C40; 2FA0C;9CFD;9CFD;9CFD;9CFD; 2FA0D;4CCE;4CCE;4CCE;4CCE; 2FA0E;4CED;4CED;4CED;4CED; 2FA0F;9D67;9D67;9D67;9D67; 2FA10;2A0CE;2A0CE;2A0CE;2A0CE; 2FA11;4CF8;4CF8;4CF8;4CF8; 2FA12;2A105;2A105;2A105;2A105; 2FA13;2A20E;2A20E;2A20E;2A20E; 2FA14;2A291;2A291;2A291;2A291; 2FA15;9EBB;9EBB;9EBB;9EBB; 2FA16;4D56;4D56;4D56;4D56; 2FA17;9EF9;9EF9;9EF9;9EF9; 2FA18;9EFE;9EFE;9EFE;9EFE; 2FA19;9F05;9F05;9F05;9F05; 2FA1A;9F0F;9F0F;9F0F;9F0F; 2FA1B;9F16;9F16;9F16;9F16; 2FA1C;9F3B;9F3B;9F3B;9F3B; 2FA1D;2A600;2A600;2A600;2A600; @Part2 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; @Part3 09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE; 09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7; 0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E; 0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56; 0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57; 0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7; 0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE; 0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7; 0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE; 0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5; 0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2; 0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5; 0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6; 0CCA 0334 0CD5;0CCA 0334 0CD5;0CC6 0CC2 0334 0CD5;0CCA 0334 0CD5;0CC6 0CC2 0334 0CD5; 0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E; 0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57; 0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E; 0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF; 0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF; 0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5; 0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7; 0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7; 0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7; 0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7; 0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7; 0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5; 0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7; 0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7; 0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7; 0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7; 0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7; 1025 0334 102E;1025 0334 102E;1025 0334 102E;1025 0334 102E;1025 0334 102E; 1100 0334 1161;1100 0334 1161;1100 0334 1161;1100 0334 1161;1100 0334 1161; 1100 0334 116E;1100 0334 116E;1100 0334 116E;1100 0334 116E;1100 0334 116E; 1101 0334 1166;1101 0334 1166;1101 0334 1166;1101 0334 1166;1101 0334 1166; 1101 0334 1173;1101 0334 1173;1101 0334 1173;1101 0334 1173;1101 0334 1173; 1102 0334 116B;1102 0334 116B;1102 0334 116B;1102 0334 116B;1102 0334 116B; 1103 0334 1163;1103 0334 1163;1103 0334 1163;1103 0334 1163;1103 0334 1163; 1103 0334 1170;1103 0334 1170;1103 0334 1170;1103 0334 1170;1103 0334 1170; 1104 0334 1168;1104 0334 1168;1104 0334 1168;1104 0334 1168;1104 0334 1168; 1104 0334 1175;1104 0334 1175;1104 0334 1175;1104 0334 1175;1104 0334 1175; 1105 0334 116D;1105 0334 116D;1105 0334 116D;1105 0334 116D;1105 0334 116D; 1106 0334 1165;1106 0334 1165;1106 0334 1165;1106 0334 1165;1106 0334 1165; 1106 0334 1172;1106 0334 1172;1106 0334 1172;1106 0334 1172;1106 0334 1172; 1107 0334 116A;1107 0334 116A;1107 0334 116A;1107 0334 116A;1107 0334 116A; 1108 0334 1162;1108 0334 1162;1108 0334 1162;1108 0334 1162;1108 0334 1162; 1108 0334 116F;1108 0334 116F;1108 0334 116F;1108 0334 116F;1108 0334 116F; 1109 0334 1167;1109 0334 1167;1109 0334 1167;1109 0334 1167;1109 0334 1167; 1109 0334 1174;1109 0334 1174;1109 0334 1174;1109 0334 1174;1109 0334 1174; 110A 0334 116C;110A 0334 116C;110A 0334 116C;110A 0334 116C;110A 0334 116C; 110B 0334 1164;110B 0334 1164;110B 0334 1164;110B 0334 1164;110B 0334 1164; 110B 0334 1171;110B 0334 1171;110B 0334 1171;110B 0334 1171;110B 0334 1171; 110C 0334 1169;110C 0334 1169;110C 0334 1169;110C 0334 1169;110C 0334 1169; 110D 0334 1161;110D 0334 1161;110D 0334 1161;110D 0334 1161;110D 0334 1161; 110D 0334 116E;110D 0334 116E;110D 0334 116E;110D 0334 116E;110D 0334 116E; 110E 0334 1166;110E 0334 1166;110E 0334 1166;110E 0334 1166;110E 0334 1166; 110E 0334 1173;110E 0334 1173;110E 0334 1173;110E 0334 1173;110E 0334 1173; 110F 0334 116B;110F 0334 116B;110F 0334 116B;110F 0334 116B;110F 0334 116B; 1110 0334 1163;1110 0334 1163;1110 0334 1163;1110 0334 1163;1110 0334 1163; 1110 0334 1170;1110 0334 1170;1110 0334 1170;1110 0334 1170;1110 0334 1170; 1111 0334 1168;1111 0334 1168;1111 0334 1168;1111 0334 1168;1111 0334 1168; 1111 0334 1175;1111 0334 1175;1111 0334 1175;1111 0334 1175;1111 0334 1175; 1112 0334 116D;1112 0334 116D;1112 0334 116D;1112 0334 116D;1112 0334 116D; 1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35; 1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35; 1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35; 1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35; 1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35; 1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35; 1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35; 1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35; 1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35; 1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35; 1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35; AC54 0334 11AE;AC54 0334 11AE;1100 1164 0334 11AE;AC54 0334 11AE;1100 1164 0334 11AE; ACA8 0334 11B5;ACA8 0334 11B5;1100 1167 0334 11B5;ACA8 0334 11B5;1100 1167 0334 11B5; ACFC 0334 11BC;ACFC 0334 11BC;1100 116A 0334 11BC;ACFC 0334 11BC;1100 116A 0334 11BC; ADC0 0334 11AE;ADC0 0334 11AE;1100 1171 0334 11AE;ADC0 0334 11AE;1100 1171 0334 11AE; AE14 0334 11B5;AE14 0334 11B5;1100 1174 0334 11B5;AE14 0334 11B5;1100 1174 0334 11B5; AE68 0334 11BC;AE68 0334 11BC;1101 1162 0334 11BC;AE68 0334 11BC;1101 1162 0334 11BC; AF2C 0334 11AE;AF2C 0334 11AE;1101 1169 0334 11AE;AF2C 0334 11AE;1101 1169 0334 11AE; AF80 0334 11B5;AF80 0334 11B5;1101 116C 0334 11B5;AF80 0334 11B5;1101 116C 0334 11B5; AFD4 0334 11BC;AFD4 0334 11BC;1101 116F 0334 11BC;AFD4 0334 11BC;1101 116F 0334 11BC; B098 0334 11AE;B098 0334 11AE;1102 1161 0334 11AE;B098 0334 11AE;1102 1161 0334 11AE; B0EC 0334 11B5;B0EC 0334 11B5;1102 1164 0334 11B5;B0EC 0334 11B5;1102 1164 0334 11B5; B140 0334 11BC;B140 0334 11BC;1102 1167 0334 11BC;B140 0334 11BC;1102 1167 0334 11BC; B204 0334 11AE;B204 0334 11AE;1102 116E 0334 11AE;B204 0334 11AE;1102 116E 0334 11AE; B258 0334 11B5;B258 0334 11B5;1102 1171 0334 11B5;B258 0334 11B5;1102 1171 0334 11B5; B2AC 0334 11BC;B2AC 0334 11BC;1102 1174 0334 11BC;B2AC 0334 11BC;1102 1174 0334 11BC; B370 0334 11AE;B370 0334 11AE;1103 1166 0334 11AE;B370 0334 11AE;1103 1166 0334 11AE; B3C4 0334 11B5;B3C4 0334 11B5;1103 1169 0334 11B5;B3C4 0334 11B5;1103 1169 0334 11B5; B418 0334 11BC;B418 0334 11BC;1103 116C 0334 11BC;B418 0334 11BC;1103 116C 0334 11BC; B4DC 0334 11AE;B4DC 0334 11AE;1103 1173 0334 11AE;B4DC 0334 11AE;1103 1173 0334 11AE; B530 0334 11B5;B530 0334 11B5;1104 1161 0334 11B5;B530 0334 11B5;1104 1161 0334 11B5; B584 0334 11BC;B584 0334 11BC;1104 1164 0334 11BC;B584 0334 11BC;1104 1164 0334 11BC; B648 0334 11AE;B648 0334 11AE;1104 116B 0334 11AE;B648 0334 11AE;1104 116B 0334 11AE; B69C 0334 11B5;B69C 0334 11B5;1104 116E 0334 11B5;B69C 0334 11B5;1104 116E 0334 11B5; B6F0 0334 11BC;B6F0 0334 11BC;1104 1171 0334 11BC;B6F0 0334 11BC;1104 1171 0334 11BC; B7B4 0334 11AE;B7B4 0334 11AE;1105 1163 0334 11AE;B7B4 0334 11AE;1105 1163 0334 11AE; B808 0334 11B5;B808 0334 11B5;1105 1166 0334 11B5;B808 0334 11B5;1105 1166 0334 11B5; B85C 0334 11BC;B85C 0334 11BC;1105 1169 0334 11BC;B85C 0334 11BC;1105 1169 0334 11BC; B920 0334 11AE;B920 0334 11AE;1105 1170 0334 11AE;B920 0334 11AE;1105 1170 0334 11AE; B974 0334 11B5;B974 0334 11B5;1105 1173 0334 11B5;B974 0334 11B5;1105 1173 0334 11B5; B9C8 0334 11BC;B9C8 0334 11BC;1106 1161 0334 11BC;B9C8 0334 11BC;1106 1161 0334 11BC; BA8C 0334 11AE;BA8C 0334 11AE;1106 1168 0334 11AE;BA8C 0334 11AE;1106 1168 0334 11AE; BAE0 0334 11B5;BAE0 0334 11B5;1106 116B 0334 11B5;BAE0 0334 11B5;1106 116B 0334 11B5; BB34 0334 11BC;BB34 0334 11BC;1106 116E 0334 11BC;BB34 0334 11BC;1106 116E 0334 11BC; BBF8 0334 11AE;BBF8 0334 11AE;1106 1175 0334 11AE;BBF8 0334 11AE;1106 1175 0334 11AE; BC4C 0334 11B5;BC4C 0334 11B5;1107 1163 0334 11B5;BC4C 0334 11B5;1107 1163 0334 11B5; BCA0 0334 11BC;BCA0 0334 11BC;1107 1166 0334 11BC;BCA0 0334 11BC;1107 1166 0334 11BC; BD64 0334 11AE;BD64 0334 11AE;1107 116D 0334 11AE;BD64 0334 11AE;1107 116D 0334 11AE; BDB8 0334 11B5;BDB8 0334 11B5;1107 1170 0334 11B5;BDB8 0334 11B5;1107 1170 0334 11B5; BE0C 0334 11BC;BE0C 0334 11BC;1107 1173 0334 11BC;BE0C 0334 11BC;1107 1173 0334 11BC; BED0 0334 11AE;BED0 0334 11AE;1108 1165 0334 11AE;BED0 0334 11AE;1108 1165 0334 11AE; BF24 0334 11B5;BF24 0334 11B5;1108 1168 0334 11B5;BF24 0334 11B5;1108 1168 0334 11B5; BF78 0334 11BC;BF78 0334 11BC;1108 116B 0334 11BC;BF78 0334 11BC;1108 116B 0334 11BC; C03C 0334 11AE;C03C 0334 11AE;1108 1172 0334 11AE;C03C 0334 11AE;1108 1172 0334 11AE; C090 0334 11B5;C090 0334 11B5;1108 1175 0334 11B5;C090 0334 11B5;1108 1175 0334 11B5; C0E4 0334 11BC;C0E4 0334 11BC;1109 1163 0334 11BC;C0E4 0334 11BC;1109 1163 0334 11BC; C1A8 0334 11AE;C1A8 0334 11AE;1109 116A 0334 11AE;C1A8 0334 11AE;1109 116A 0334 11AE; C1FC 0334 11B5;C1FC 0334 11B5;1109 116D 0334 11B5;C1FC 0334 11B5;1109 116D 0334 11B5; C250 0334 11BC;C250 0334 11BC;1109 1170 0334 11BC;C250 0334 11BC;1109 1170 0334 11BC; C314 0334 11AE;C314 0334 11AE;110A 1162 0334 11AE;C314 0334 11AE;110A 1162 0334 11AE; C368 0334 11B5;C368 0334 11B5;110A 1165 0334 11B5;C368 0334 11B5;110A 1165 0334 11B5; C3BC 0334 11BC;C3BC 0334 11BC;110A 1168 0334 11BC;C3BC 0334 11BC;110A 1168 0334 11BC; C480 0334 11AE;C480 0334 11AE;110A 116F 0334 11AE;C480 0334 11AE;110A 116F 0334 11AE; C4D4 0334 11B5;C4D4 0334 11B5;110A 1172 0334 11B5;C4D4 0334 11B5;110A 1172 0334 11B5; C528 0334 11BC;C528 0334 11BC;110A 1175 0334 11BC;C528 0334 11BC;110A 1175 0334 11BC; C5EC 0334 11AE;C5EC 0334 11AE;110B 1167 0334 11AE;C5EC 0334 11AE;110B 1167 0334 11AE; C640 0334 11B5;C640 0334 11B5;110B 116A 0334 11B5;C640 0334 11B5;110B 116A 0334 11B5; C694 0334 11BC;C694 0334 11BC;110B 116D 0334 11BC;C694 0334 11BC;110B 116D 0334 11BC; C758 0334 11AE;C758 0334 11AE;110B 1174 0334 11AE;C758 0334 11AE;110B 1174 0334 11AE; C7AC 0334 11B5;C7AC 0334 11B5;110C 1162 0334 11B5;C7AC 0334 11B5;110C 1162 0334 11B5; C800 0334 11BC;C800 0334 11BC;110C 1165 0334 11BC;C800 0334 11BC;110C 1165 0334 11BC; C8C4 0334 11AE;C8C4 0334 11AE;110C 116C 0334 11AE;C8C4 0334 11AE;110C 116C 0334 11AE; C918 0334 11B5;C918 0334 11B5;110C 116F 0334 11B5;C918 0334 11B5;110C 116F 0334 11B5; C96C 0334 11BC;C96C 0334 11BC;110C 1172 0334 11BC;C96C 0334 11BC;110C 1172 0334 11BC; CA30 0334 11AE;CA30 0334 11AE;110D 1164 0334 11AE;CA30 0334 11AE;110D 1164 0334 11AE; CA84 0334 11B5;CA84 0334 11B5;110D 1167 0334 11B5;CA84 0334 11B5;110D 1167 0334 11B5; CAD8 0334 11BC;CAD8 0334 11BC;110D 116A 0334 11BC;CAD8 0334 11BC;110D 116A 0334 11BC; CB9C 0334 11AE;CB9C 0334 11AE;110D 1171 0334 11AE;CB9C 0334 11AE;110D 1171 0334 11AE; CBF0 0334 11B5;CBF0 0334 11B5;110D 1174 0334 11B5;CBF0 0334 11B5;110D 1174 0334 11B5; CC44 0334 11BC;CC44 0334 11BC;110E 1162 0334 11BC;CC44 0334 11BC;110E 1162 0334 11BC; CD08 0334 11AE;CD08 0334 11AE;110E 1169 0334 11AE;CD08 0334 11AE;110E 1169 0334 11AE; CD5C 0334 11B5;CD5C 0334 11B5;110E 116C 0334 11B5;CD5C 0334 11B5;110E 116C 0334 11B5; CDB0 0334 11BC;CDB0 0334 11BC;110E 116F 0334 11BC;CDB0 0334 11BC;110E 116F 0334 11BC; CE74 0334 11AE;CE74 0334 11AE;110F 1161 0334 11AE;CE74 0334 11AE;110F 1161 0334 11AE; CEC8 0334 11B5;CEC8 0334 11B5;110F 1164 0334 11B5;CEC8 0334 11B5;110F 1164 0334 11B5; CF1C 0334 11BC;CF1C 0334 11BC;110F 1167 0334 11BC;CF1C 0334 11BC;110F 1167 0334 11BC; CFE0 0334 11AE;CFE0 0334 11AE;110F 116E 0334 11AE;CFE0 0334 11AE;110F 116E 0334 11AE; D034 0334 11B5;D034 0334 11B5;110F 1171 0334 11B5;D034 0334 11B5;110F 1171 0334 11B5; D088 0334 11BC;D088 0334 11BC;110F 1174 0334 11BC;D088 0334 11BC;110F 1174 0334 11BC; D14C 0334 11AE;D14C 0334 11AE;1110 1166 0334 11AE;D14C 0334 11AE;1110 1166 0334 11AE; D1A0 0334 11B5;D1A0 0334 11B5;1110 1169 0334 11B5;D1A0 0334 11B5;1110 1169 0334 11B5; D1F4 0334 11BC;D1F4 0334 11BC;1110 116C 0334 11BC;D1F4 0334 11BC;1110 116C 0334 11BC; D2B8 0334 11AE;D2B8 0334 11AE;1110 1173 0334 11AE;D2B8 0334 11AE;1110 1173 0334 11AE; D30C 0334 11B5;D30C 0334 11B5;1111 1161 0334 11B5;D30C 0334 11B5;1111 1161 0334 11B5; D360 0334 11BC;D360 0334 11BC;1111 1164 0334 11BC;D360 0334 11BC;1111 1164 0334 11BC; D424 0334 11AE;D424 0334 11AE;1111 116B 0334 11AE;D424 0334 11AE;1111 116B 0334 11AE; D478 0334 11B5;D478 0334 11B5;1111 116E 0334 11B5;D478 0334 11B5;1111 116E 0334 11B5; D4CC 0334 11BC;D4CC 0334 11BC;1111 1171 0334 11BC;D4CC 0334 11BC;1111 1171 0334 11BC; D590 0334 11AE;D590 0334 11AE;1112 1163 0334 11AE;D590 0334 11AE;1112 1163 0334 11AE; D5E4 0334 11B5;D5E4 0334 11B5;1112 1166 0334 11B5;D5E4 0334 11B5;1112 1166 0334 11B5; D638 0334 11BC;D638 0334 11BC;1112 1169 0334 11BC;D638 0334 11BC;1112 1169 0334 11BC; D6FC 0334 11AE;D6FC 0334 11AE;1112 1170 0334 11AE;D6FC 0334 11AE;1112 1170 0334 11AE; D750 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-canonical-decomposition.c���������������������������������0000664�0000000�0000000�00000010240�11671051007�0025242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of Unicode characters. Copyright (C) 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 <http://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 <http://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-20111211-stable/tests/uninorm/test-compat-decomposition.c������������������������������������0000664�0000000�0000000�00000013037�11671051007�0024605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of Unicode characters. Copyright (C) 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 <http://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 <http://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-20111211-stable/tests/uninorm/test-composition.c���������������������������������������������0000664�0000000�0000000�00000003153�11671051007�0023011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical composition of Unicode characters. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-decomposing-form.c����������������������������������������0000664�0000000�0000000�00000002234�11671051007�0023715�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of decomposing variant of a normalization form. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-decomposition.c�������������������������������������������0000664�0000000�0000000�00000014453�11671051007�0023327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of decomposition of Unicode characters. Copyright (C) 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 <http://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 <http://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-20111211-stable/tests/uninorm/test-nfc.c�����������������������������������������������������0000664�0000000�0000000�00000002334�11671051007�0021214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of Unicode strings. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include "uninorm.h" #if !WOE32DLL /* 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. */ uninorm_t nf = UNINORM_NFC; (void) nf; test_u32_nfc (); test_u16_nfc (); test_u8_nfc (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-nfd.c�����������������������������������������������������0000664�0000000�0000000�00000002334�11671051007�0021215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of Unicode strings. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include "uninorm.h" #if !WOE32DLL /* 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. */ uninorm_t nf = UNINORM_NFD; (void) nf; test_u32_nfd (); test_u16_nfd (); test_u8_nfd (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-nfkc.c����������������������������������������������������0000664�0000000�0000000�00000002352�11671051007�0021367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility normalization of Unicode strings. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include "uninorm.h" #if !WOE32DLL /* 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. */ uninorm_t nf = UNINORM_NFKC; (void) nf; test_u32_nfkc (); test_u16_nfkc (); test_u8_nfkc (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-nfkd.c����������������������������������������������������0000664�0000000�0000000�00000002352�11671051007�0021370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of Unicode strings. Copyright (C) 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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include "uninorm.h" #if !WOE32DLL /* 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. */ uninorm_t nf = UNINORM_NFKD; (void) nf; test_u32_nfkd (); test_u16_nfkd (); test_u8_nfkd (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u16-nfc.c�������������������������������������������������0000664�0000000�0000000�00000025306�11671051007�0021631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u16-nfd.c�������������������������������������������������0000664�0000000�0000000�00000023336�11671051007�0021633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u16-nfkc.c������������������������������������������������0000664�0000000�0000000�00000034577�11671051007�0022016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility normalization of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u16-nfkd.c������������������������������������������������0000664�0000000�0000000�00000025604�11671051007�0022006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u16-normcmp.c���������������������������������������������0000664�0000000�0000000�00000010144�11671051007�0022530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u16-normcmp.h���������������������������������������������0000664�0000000�0000000�00000004477�11671051007�0022551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u16-normcoll.c��������������������������������������������0000664�0000000�0000000�00000002204�11671051007�0022700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, normalization insensitive comparison of UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u32-nfc-big.c���������������������������������������������0000664�0000000�0000000�00000006024�11671051007�0022362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of canonical normalization of UTF-32 strings. Copyright (C) 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 <http://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 "progname.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; set_program_name (argv[0]); read_normalization_test_file (argv[1], &file); test_specific (&file, check); test_other (&file, UNINORM_NFC); return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); return 77; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-nfc-big.sh��������������������������������������������0000775�0000000�0000000�00000000123�11671051007�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-u32-nfc-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-nfc.c�������������������������������������������������0000664�0000000�0000000�00000025306�11671051007�0021627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u32-nfd-big.c���������������������������������������������0000664�0000000�0000000�00000006024�11671051007�0022363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of canonical decomposition of UTF-32 strings. Copyright (C) 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 <http://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 "progname.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; set_program_name (argv[0]); read_normalization_test_file (argv[1], &file); test_specific (&file, check); test_other (&file, UNINORM_NFD); return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); return 77; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-nfd-big.sh��������������������������������������������0000775�0000000�0000000�00000000123�11671051007�0022550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-u32-nfd-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-nfd.c�������������������������������������������������0000664�0000000�0000000�00000023336�11671051007�0021631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u32-nfkc-big.c��������������������������������������������0000664�0000000�0000000�00000006014�11671051007�0022534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of compatibility normalization of UTF-32 strings. Copyright (C) 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 <http://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 "progname.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; set_program_name (argv[0]); read_normalization_test_file (argv[1], &file); test_specific (&file, check); test_other (&file, UNINORM_NFKC); return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-nfkc-big.sh�������������������������������������������0000775�0000000�0000000�00000000124�11671051007�0022723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-u32-nfkc-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-nfkc.c������������������������������������������������0000664�0000000�0000000�00000034577�11671051007�0022014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility normalization of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u32-nfkd-big.c��������������������������������������������0000664�0000000�0000000�00000006014�11671051007�0022535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of compatibility decomposition of UTF-32 strings. Copyright (C) 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 <http://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 "progname.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; set_program_name (argv[0]); read_normalization_test_file (argv[1], &file); test_specific (&file, check); test_other (&file, UNINORM_NFKD); return 0; } #else #include <stdio.h> int main () { fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-nfkd-big.sh�������������������������������������������0000775�0000000�0000000�00000000124�11671051007�0022724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ./test-u32-nfkd-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-nfkd.c������������������������������������������������0000664�0000000�0000000�00000025604�11671051007�0022004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u32-normalize-big.c���������������������������������������0000664�0000000�0000000�00000022175�11671051007�0023621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of normalization of UTF-32 strings. Copyright (C) 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 <http://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 *) xnrealloc (lines, lines_length, sizeof (struct normalization_test_line)); 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 *) xnrealloc (sequence, sequence_length + 2, sizeof (uint32_t)); 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 *) xnrealloc (lines, lines_allocated, sizeof (struct normalization_test_line)); } lines[lines_length] = line; lines_length++; } if (part_index >= 0) { lines = (struct normalization_test_line *) xnrealloc (lines, lines_length, sizeof (struct normalization_test_line)); 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); } } } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-normalize-big.h���������������������������������������0000664�0000000�0000000�00000005304�11671051007�0023621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of Unicode compliance of normalization of UTF-32 strings. Copyright (C) 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 <http://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. */ const 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); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uninorm/test-u32-normcmp.c���������������������������������������������0000664�0000000�0000000�00000010144�11671051007�0022526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u32-normcmp.h���������������������������������������������0000664�0000000�0000000�00000004477�11671051007�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u32-normcoll.c��������������������������������������������0000664�0000000�0000000�00000002204�11671051007�0022676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, normalization insensitive comparison of UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u8-nfc.c��������������������������������������������������0000664�0000000�0000000�00000027543�11671051007�0021557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u8-nfd.c��������������������������������������������������0000664�0000000�0000000�00000025525�11671051007�0021556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical decomposition of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u8-nfkc.c�������������������������������������������������0000664�0000000�0000000�00000037365�11671051007�0021735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility normalization of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u8-nfkd.c�������������������������������������������������0000664�0000000�0000000�00000030066�11671051007�0021725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of compatibility decomposition of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u8-normcmp.c����������������������������������������������0000664�0000000�0000000�00000010332�11671051007�0022450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u8-normcmp.h����������������������������������������������0000664�0000000�0000000�00000004467�11671051007�0022471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of normalization insensitive comparison of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-u8-normcoll.c���������������������������������������������0000664�0000000�0000000�00000002201�11671051007�0022616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locale dependent, normalization insensitive comparison of UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uninorm/test-uninorm-filter-nfc.c��������������������������������������0000664�0000000�0000000�00000006635�11671051007�0024174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of canonical normalization of streams. Copyright (C) 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 <http://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-20111211-stable/tests/unistdio/��������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017472�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistdio/test-u16-asnprintf1.c�����������������������������������������0000664�0000000�0000000�00000002232�11671051007�0023310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_asnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u16-asnprintf1.h�����������������������������������������0000664�0000000�0000000�00000003732�11671051007�0023323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_[v]asnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u16-printf1.h��������������������������������������������0000664�0000000�0000000�00000076503�11671051007�0022627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_v[a]s[n]printf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u16-vasnprintf1.c����������������������������������������0000664�0000000�0000000�00000003363�11671051007�0023504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vasnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u16-vasnprintf2.c����������������������������������������0000664�0000000�0000000�00000006641�11671051007�0023507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vasnprintf() function in an ISO-8859-1 locale. 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 <http://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-20111211-stable/tests/unistdio/test-u16-vasnprintf2.sh���������������������������������������0000775�0000000�0000000�00000000730�11671051007�0023673�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 \ ./test-u16-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ./test-u16-vasnprintf2${EXEEXT} ����������������������������������������gnulib-20111211-stable/tests/unistdio/test-u16-vasnprintf3.c����������������������������������������0000664�0000000�0000000�00000006640�11671051007�0023507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vasnprintf() function in an UTF-8 locale. 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 <http://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-20111211-stable/tests/unistdio/test-u16-vasnprintf3.sh���������������������������������������0000775�0000000�0000000�00000000741�11671051007�0023676�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 \ ./test-u16-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ./test-u16-vasnprintf3${EXEEXT} �������������������������������gnulib-20111211-stable/tests/unistdio/test-u16-vasprintf1.c�����������������������������������������0000664�0000000�0000000�00000002665�11671051007�0023332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vasprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u16-vsnprintf1.c�����������������������������������������0000664�0000000�0000000�00000003243�11671051007�0023340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vsnprintf() function. 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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_vsnprintf (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistdio/test-u16-vsprintf1.c������������������������������������������0000664�0000000�0000000�00000003221�11671051007�0023156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_vsprintf() function. 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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_vsprintf (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistdio/test-u32-asnprintf1.c�����������������������������������������0000664�0000000�0000000�00000002232�11671051007�0023306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_asnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u32-asnprintf1.h�����������������������������������������0000664�0000000�0000000�00000003732�11671051007�0023321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_[v]asnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u32-printf1.h��������������������������������������������0000664�0000000�0000000�00000076503�11671051007�0022625�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_v[a]s[n]printf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u32-vasnprintf1.c����������������������������������������0000664�0000000�0000000�00000003363�11671051007�0023502�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vasnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u32-vasnprintf2.c����������������������������������������0000664�0000000�0000000�00000006641�11671051007�0023505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vasnprintf() function in an ISO-8859-1 locale. 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 <http://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-20111211-stable/tests/unistdio/test-u32-vasnprintf2.sh���������������������������������������0000775�0000000�0000000�00000000730�11671051007�0023671�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 \ ./test-u32-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ./test-u32-vasnprintf2${EXEEXT} ����������������������������������������gnulib-20111211-stable/tests/unistdio/test-u32-vasnprintf3.c����������������������������������������0000664�0000000�0000000�00000006640�11671051007�0023505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vasnprintf() function in an UTF-8 locale. 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 <http://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-20111211-stable/tests/unistdio/test-u32-vasnprintf3.sh���������������������������������������0000775�0000000�0000000�00000000741�11671051007�0023674�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 \ ./test-u32-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ./test-u32-vasnprintf3${EXEEXT} �������������������������������gnulib-20111211-stable/tests/unistdio/test-u32-vasprintf1.c�����������������������������������������0000664�0000000�0000000�00000002665�11671051007�0023330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vasprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u32-vsnprintf1.c�����������������������������������������0000664�0000000�0000000�00000003243�11671051007�0023336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vsnprintf() function. 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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_vsnprintf (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistdio/test-u32-vsprintf1.c������������������������������������������0000664�0000000�0000000�00000003221�11671051007�0023154�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_vsprintf() function. 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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_vsprintf (); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistdio/test-u8-asnprintf1.c������������������������������������������0000664�0000000�0000000�00000002227�11671051007�0023235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_asnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u8-asnprintf1.h������������������������������������������0000664�0000000�0000000�00000003544�11671051007�0023245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_[v]asnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u8-printf1.h���������������������������������������������0000664�0000000�0000000�00000055034�11671051007�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_v[a]s[n]printf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u8-vasnprintf1.c�����������������������������������������0000664�0000000�0000000�00000003350�11671051007�0023421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vasnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u8-vasnprintf2.c�����������������������������������������0000664�0000000�0000000�00000006174�11671051007�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vasnprintf() function in an ISO-8859-1 locale. 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 <http://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-20111211-stable/tests/unistdio/test-u8-vasnprintf2.sh����������������������������������������0000775�0000000�0000000�00000000726�11671051007�0023621�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 \ ./test-u8-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ./test-u8-vasnprintf2${EXEEXT} ������������������������������������������gnulib-20111211-stable/tests/unistdio/test-u8-vasnprintf3.c�����������������������������������������0000664�0000000�0000000�00000006173�11671051007�0023431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vasnprintf() function in an UTF-8 locale. 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 <http://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-20111211-stable/tests/unistdio/test-u8-vasnprintf3.sh����������������������������������������0000775�0000000�0000000�00000000737�11671051007�0023624�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 \ ./test-u8-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ./test-u8-vasnprintf3${EXEEXT} ���������������������������������gnulib-20111211-stable/tests/unistdio/test-u8-vasprintf1.c������������������������������������������0000664�0000000�0000000�00000002660�11671051007�0023246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vasprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-u8-vsnprintf1.c������������������������������������������0000664�0000000�0000000�00000003232�11671051007�0023257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vsnprintf() function. 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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_vsnprintf (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistdio/test-u8-vsprintf1.c�������������������������������������������0000664�0000000�0000000�00000003210�11671051007�0023075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_vsprintf() function. 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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_vsprintf (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistdio/test-ulc-asnprintf1.c�����������������������������������������0000664�0000000�0000000�00000002163�11671051007�0023463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_asnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-ulc-asnprintf1.h�����������������������������������������0000664�0000000�0000000�00000003264�11671051007�0023473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_[v]asnprintf() 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 <http://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-20111211-stable/tests/unistdio/test-ulc-printf1.h��������������������������������������������0000664�0000000�0000000�00000034234�11671051007�0022772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_v[a]s[n]printf() 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 <http://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-20111211-stable/tests/unistdio/test-ulc-vasnprintf1.c����������������������������������������0000664�0000000�0000000�00000003264�11671051007�0023654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vasnprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-ulc-vasnprintf2.c����������������������������������������0000664�0000000�0000000�00000017342�11671051007�0023657�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vasnprintf() function in an ISO-8859-1 locale. 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 <http://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-20111211-stable/tests/unistdio/test-ulc-vasnprintf2.sh���������������������������������������0000775�0000000�0000000�00000000730�11671051007�0024043�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 \ ./test-ulc-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ./test-ulc-vasnprintf2${EXEEXT} ����������������������������������������gnulib-20111211-stable/tests/unistdio/test-ulc-vasnprintf3.c����������������������������������������0000664�0000000�0000000�00000016105�11671051007�0023654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vasnprintf() function in an UTF-8 locale. 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 <http://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-20111211-stable/tests/unistdio/test-ulc-vasnprintf3.sh���������������������������������������0000775�0000000�0000000�00000000741�11671051007�0024046�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 \ ./test-ulc-vasnprintf1${EXEEXT} \ || exit 1 LC_ALL=$testlocale \ ./test-ulc-vasnprintf3${EXEEXT} �������������������������������gnulib-20111211-stable/tests/unistdio/test-ulc-vasprintf1.c�����������������������������������������0000664�0000000�0000000�00000002606�11671051007�0023475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vasprintf() function. 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 <http://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-20111211-stable/tests/unistdio/test-ulc-vsnprintf1.c�����������������������������������������0000664�0000000�0000000�00000002767�11671051007�0023522�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vsnprintf() function. 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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_vsnprintf (); return 0; } ���������gnulib-20111211-stable/tests/unistdio/test-ulc-vsprintf1.c������������������������������������������0000664�0000000�0000000�00000002742�11671051007�0023335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ulc_vsprintf() function. 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 <http://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 "progname.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[]) { set_program_name (argv[0]); test_vsprintf (); return 0; } ������������������������������gnulib-20111211-stable/tests/unistr/����������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017160�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-chr.h������������������������������������������������������0000664�0000000�0000000�00000007326�11671051007�0021072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_chr() functions. Copyright (C) 2008-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 <http://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); ASSERT (U_CHR (zerosize_ptr (), 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); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-cmp.h������������������������������������������������������0000664�0000000�0000000�00000006217�11671051007�0021073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_cmp() functions. Copyright (C) 2008-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 <http://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. */ ASSERT (U_CMP (zerosize_ptr (), zerosize_ptr (), 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-20111211-stable/tests/unistr/test-cmp2.h�����������������������������������������������������0000664�0000000�0000000�00000004036�11671051007�0021152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_cmp2() functions. Copyright (C) 2008-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 <http://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-20111211-stable/tests/unistr/test-cpy-alloc.h������������������������������������������������0000664�0000000�0000000�00000002272�11671051007�0022174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_cpy_alloc() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-cpy.h������������������������������������������������������0000664�0000000�0000000�00000002556�11671051007�0021111�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_cpy() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-move.h�����������������������������������������������������0000664�0000000�0000000�00000011510�11671051007�0021252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_move() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-set.h������������������������������������������������������0000664�0000000�0000000�00000002415�11671051007�0021103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_set() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-stpcpy.h���������������������������������������������������0000664�0000000�0000000�00000002701�11671051007�0021630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_stpcpy() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-stpncpy.h��������������������������������������������������0000664�0000000�0000000�00000004310�11671051007�0022004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_stpncpy() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-strcat.h���������������������������������������������������0000664�0000000�0000000�00000003551�11671051007�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strcat() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-strchr.h���������������������������������������������������0000664�0000000�0000000�00000011055�11671051007�0021615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strchr() functions. Copyright (C) 2008-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 <http://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); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-strcmp.h���������������������������������������������������0000664�0000000�0000000�00000003700�11671051007�0021616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strcmp() and uN_strcoll() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-strcpy.h���������������������������������������������������0000664�0000000�0000000�00000002701�11671051007�0021632�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strcpy() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-strdup.h���������������������������������������������������0000664�0000000�0000000�00000002332�11671051007�0021627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strdup() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-strncat.h��������������������������������������������������0000664�0000000�0000000�00000005041�11671051007�0021764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strncat() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-strncmp.h��������������������������������������������������0000664�0000000�0000000�00000007345�11671051007�0022005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strncmp() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-strncpy.h��������������������������������������������������0000664�0000000�0000000�00000004253�11671051007�0022014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strncpy() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-strnlen.h��������������������������������������������������0000664�0000000�0000000�00000003442�11671051007�0021776�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strnlen() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u-strstr.h�������������������������������������������������0000664�0000000�0000000�00000017344�11671051007�0022122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uN_strstr() functions. Copyright (C) 2004, 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 <http://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-20111211-stable/tests/unistr/test-u16-check.c������������������������������������������������0000664�0000000�0000000�00000004026�11671051007�0021771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_check() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-chr.c��������������������������������������������������0000664�0000000�0000000�00000002054�11671051007�0021467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_chr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-cmp.c��������������������������������������������������0000664�0000000�0000000�00000002543�11671051007�0021475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_cmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-cmp2.c�������������������������������������������������0000664�0000000�0000000�00000001664�11671051007�0021562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_cmp2() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-cpy-alloc.c��������������������������������������������0000664�0000000�0000000�00000001710�11671051007�0022574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_cpy_alloc() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-cpy.c��������������������������������������������������0000664�0000000�0000000�00000001660�11671051007�0021510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_cpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-mblen.c������������������������������������������������0000664�0000000�0000000�00000003645�11671051007�0022017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mblen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-mbsnlen.c����������������������������������������������0000664�0000000�0000000�00000004134�11671051007�0022352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbsnlen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-mbtouc-unsafe.c����������������������������������������0000664�0000000�0000000�00000001703�11671051007�0023463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbtouc_unsafe() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-mbtouc.c�����������������������������������������������0000664�0000000�0000000�00000001665�11671051007�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbtouc() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-mbtouc.h�����������������������������������������������0000664�0000000�0000000�00000004226�11671051007�0022214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbtouc() and u16_mbtouc_unsafe() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-mbtoucr.c����������������������������������������������0000664�0000000�0000000�00000004152�11671051007�0022367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_mbtoucr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-move.c�������������������������������������������������0000664�0000000�0000000�00000001664�11671051007�0021667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_move() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-next.c�������������������������������������������������0000664�0000000�0000000�00000004214�11671051007�0021671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_next() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-prev.c�������������������������������������������������0000664�0000000�0000000�00000007434�11671051007�0021676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_prev() function. Copyright (C) 2010-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 <http://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; #if CONFIG_UNICODE_SAFETY /* 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; } #endif 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-20111211-stable/tests/unistr/test-u16-set.c��������������������������������������������������0000664�0000000�0000000�00000001705�11671051007�0021510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_set() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-stpcpy.c�����������������������������������������������0000664�0000000�0000000�00000001674�11671051007�0022244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_stpcpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-stpncpy.c����������������������������������������������0000664�0000000�0000000�00000003603�11671051007�0022414�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_stpncpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strcat.c�����������������������������������������������0000664�0000000�0000000�00000001674�11671051007�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcat() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strchr.c�����������������������������������������������0000664�0000000�0000000�00000002155�11671051007�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strchr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strcmp.c�����������������������������������������������0000664�0000000�0000000�00000001711�11671051007�0022222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strcmp.h�����������������������������������������������0000664�0000000�0000000�00000002664�11671051007�0022237�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcmp() and u16_strcoll() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strcoll.c����������������������������������������������0000664�0000000�0000000�00000002510�11671051007�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcoll() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strcpy.c�����������������������������������������������0000664�0000000�0000000�00000001674�11671051007�0022246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strcpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strdup.c�����������������������������������������������0000664�0000000�0000000�00000001647�11671051007�0022243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strdup() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strlen.c�����������������������������������������������0000664�0000000�0000000�00000003610�11671051007�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strlen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strmblen.c���������������������������������������������0000664�0000000�0000000�00000003473�11671051007�0022547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strmblen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strmbtouc.c��������������������������������������������0000664�0000000�0000000�00000004214�11671051007�0022735�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strmbtouc() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strncat.c����������������������������������������������0000664�0000000�0000000�00000003603�11671051007�0022372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strncat() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strncmp.c����������������������������������������������0000664�0000000�0000000�00000002702�11671051007�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strncmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strncpy.c����������������������������������������������0000664�0000000�0000000�00000003603�11671051007�0022416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strncpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strnlen.c����������������������������������������������0000664�0000000�0000000�00000003531�11671051007�0022401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strnlen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-strstr.c�����������������������������������������������0000664�0000000�0000000�00000002371�11671051007�0022256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strstr() function. 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 <http://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 (5); #endif test_u_strstr (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-u16-to-u32.c�����������������������������������������������0000664�0000000�0000000�00000012105�11671051007�0021742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_to_u32() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-to-u8.c������������������������������������������������0000664�0000000�0000000�00000012442�11671051007�0021671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_to_u8() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u16-uctomb.c�����������������������������������������������0000664�0000000�0000000�00000005157�11671051007�0022213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_uctomb() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-check.c������������������������������������������������0000664�0000000�0000000�00000004024�11671051007�0021765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_check() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-chr.c��������������������������������������������������0000664�0000000�0000000�00000002136�11671051007�0021466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_chr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-cmp.c��������������������������������������������������0000664�0000000�0000000�00000002350�11671051007�0021467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_cmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-cmp2.c�������������������������������������������������0000664�0000000�0000000�00000001667�11671051007�0021563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_cmp2() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-cpy-alloc.c��������������������������������������������0000664�0000000�0000000�00000001710�11671051007�0022572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_cpy_alloc() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-cpy.c��������������������������������������������������0000664�0000000�0000000�00000001663�11671051007�0021511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_cpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-mblen.c������������������������������������������������0000664�0000000�0000000�00000003514�11671051007�0022010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mblen() function. Copyright (C) 2010-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 <http://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); } #if CONFIG_UNICODE_SAFETY /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000 }; ret = u32_mblen (input, 1); ASSERT (ret == -1); } #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-u32-mbsnlen.c����������������������������������������������0000664�0000000�0000000�00000003660�11671051007�0022353�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbsnlen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-mbtouc-unsafe.c����������������������������������������0000664�0000000�0000000�00000001703�11671051007�0023461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbtouc_unsafe() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-mbtouc.c�����������������������������������������������0000664�0000000�0000000�00000002030�11671051007�0022174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbtouc() function. Copyright (C) 2010-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 <http://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> #include "unistr.h" #include "macros.h" /* Enable all tests that may be skipped when testing u32_mbtouc_unsafe. */ #define FULL_SAFETY 1 #include "test-u32-mbtouc.h" int main () { test_function (u32_mbtouc); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-u32-mbtouc.h�����������������������������������������������0000664�0000000�0000000�00000004011�11671051007�0022202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbtouc() and u32_mbtouc_unsafe() functions. Copyright (C) 2010-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 <http://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); } #if FULL_SAFETY || CONFIG_UNICODE_SAFETY /* 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); } #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-u32-mbtoucr.c����������������������������������������������0000664�0000000�0000000�00000003672�11671051007�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_mbtoucr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-move.c�������������������������������������������������0000664�0000000�0000000�00000001667�11671051007�0021670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_move() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-next.c�������������������������������������������������0000664�0000000�0000000�00000003776�11671051007�0021703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_next() function. Copyright (C) 2010-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 <http://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); } #if CONFIG_UNICODE_SAFETY /* 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); } #endif return 0; } ��gnulib-20111211-stable/tests/unistr/test-u32-prev.c�������������������������������������������������0000664�0000000�0000000�00000005653�11671051007�0021675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_prev() function. Copyright (C) 2010-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 <http://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) { #if CONFIG_UNICODE_SAFETY 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; } #endif 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-20111211-stable/tests/unistr/test-u32-set.c��������������������������������������������������0000664�0000000�0000000�00000001711�11671051007�0021503�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_set() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-stpcpy.c�����������������������������������������������0000664�0000000�0000000�00000001677�11671051007�0022245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_stpcpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-stpncpy.c����������������������������������������������0000664�0000000�0000000�00000003552�11671051007�0022415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_stpncpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strcat.c�����������������������������������������������0000664�0000000�0000000�00000001677�11671051007�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcat() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strchr.c�����������������������������������������������0000664�0000000�0000000�00000002237�11671051007�0022221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strchr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strcmp.c�����������������������������������������������0000664�0000000�0000000�00000001711�11671051007�0022220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strcmp.h�����������������������������������������������0000664�0000000�0000000�00000002626�11671051007�0022233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcmp() and u32_strcoll() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strcoll.c����������������������������������������������0000664�0000000�0000000�00000002510�11671051007�0022370�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcoll() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strcpy.c�����������������������������������������������0000664�0000000�0000000�00000001677�11671051007�0022247�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strcpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strdup.c�����������������������������������������������0000664�0000000�0000000�00000001647�11671051007�0022241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strdup() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strlen.c�����������������������������������������������0000664�0000000�0000000�00000003554�11671051007�0022226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strlen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strmblen.c���������������������������������������������0000664�0000000�0000000�00000003337�11671051007�0022544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strmblen() function. Copyright (C) 2010-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 <http://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); } #if CONFIG_UNICODE_SAFETY /* Test incomplete/invalid 1-unit input. */ { static const uint32_t input[] = { 0x340000, 0 }; ret = u32_strmblen (input); ASSERT (ret == -1); } #endif return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-u32-strmbtouc.c��������������������������������������������0000664�0000000�0000000�00000003770�11671051007�0022741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strmbtouc() function. Copyright (C) 2010-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 <http://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); } #if CONFIG_UNICODE_SAFETY /* 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); } #endif return 0; } ��������gnulib-20111211-stable/tests/unistr/test-u32-strncat.c����������������������������������������������0000664�0000000�0000000�00000003552�11671051007�0022373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strncat() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strncmp.c����������������������������������������������0000664�0000000�0000000�00000002644�11671051007�0022404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strncmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strncpy.c����������������������������������������������0000664�0000000�0000000�00000003552�11671051007�0022417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strncpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strnlen.c����������������������������������������������0000664�0000000�0000000�00000003475�11671051007�0022406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strnlen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-strstr.c�����������������������������������������������0000664�0000000�0000000�00000002371�11671051007�0022254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strstr() function. 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 <http://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 (5); #endif test_u_strstr (); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/unistr/test-u32-to-u16.c�����������������������������������������������0000664�0000000�0000000�00000012113�11671051007�0021741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_to_u16() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-to-u8.c������������������������������������������������0000664�0000000�0000000�00000012414�11671051007�0021666�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_to_u8() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u32-uctomb.c�����������������������������������������������0000664�0000000�0000000�00000004663�11671051007�0022212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_uctomb() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-check.c�������������������������������������������������0000664�0000000�0000000�00000013716�11671051007�0021720�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_check() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-chr.c���������������������������������������������������0000664�0000000�0000000�00000002046�11671051007�0021411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_chr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-cmp.c���������������������������������������������������0000664�0000000�0000000�00000002377�11671051007�0021423�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_cmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-cmp2.c��������������������������������������������������0000664�0000000�0000000�00000001657�11671051007�0021505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_cmp2() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-cpy-alloc.c���������������������������������������������0000664�0000000�0000000�00000001705�11671051007�0022521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_cpy_alloc() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-cpy.c���������������������������������������������������0000664�0000000�0000000�00000001653�11671051007�0021433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_cpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-mblen.c�������������������������������������������������0000664�0000000�0000000�00000006765�11671051007�0021746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mblen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-mbsnlen.c�����������������������������������������������0000664�0000000�0000000�00000010164�11671051007�0022273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbsnlen() function. Copyright (C) 2010-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 <http://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 <http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt> <http://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-20111211-stable/tests/unistr/test-u8-mbtouc-unsafe.c�����������������������������������������0000664�0000000�0000000�00000001700�11671051007�0023401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbtouc_unsafe() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-mbtouc.c������������������������������������������������0000664�0000000�0000000�00000012633�11671051007�0022131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbtouc() function. Copyright (C) 2010-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 <http://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 <http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt> <http://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-20111211-stable/tests/unistr/test-u8-mbtouc.h������������������������������������������������0000664�0000000�0000000�00000010731�11671051007�0022133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbtouc() and u8_mbtouc_unsafe() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-mbtoucr.c�����������������������������������������������0000664�0000000�0000000�00000010576�11671051007�0022317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_mbtoucr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-move.c��������������������������������������������������0000664�0000000�0000000�00000001657�11671051007�0021612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_move() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-next.c��������������������������������������������������0000664�0000000�0000000�00000010630�11671051007�0021611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_next() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-prev.c��������������������������������������������������0000664�0000000�0000000�00000015713�11671051007�0021616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_prev() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-set.c���������������������������������������������������0000664�0000000�0000000�00000001675�11671051007�0021437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_set() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-stpcpy.c������������������������������������������������0000664�0000000�0000000�00000001667�11671051007�0022167�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_stpcpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-stpncpy.c�����������������������������������������������0000664�0000000�0000000�00000003426�11671051007�0022340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_stpncpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strcat.c������������������������������������������������0000664�0000000�0000000�00000001667�11671051007�0022145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcat() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strchr.c������������������������������������������������0000664�0000000�0000000�00000012012�11671051007�0022134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strchr() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strcmp.c������������������������������������������������0000664�0000000�0000000�00000001705�11671051007�0022146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strcmp.h������������������������������������������������0000664�0000000�0000000�00000002665�11671051007�0022161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcmp() and u8_strcoll() functions. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strcoll.c�����������������������������������������������0000664�0000000�0000000�00000002502�11671051007�0022314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcoll() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strcpy.c������������������������������������������������0000664�0000000�0000000�00000001667�11671051007�0022171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strcpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strdup.c������������������������������������������������0000664�0000000�0000000�00000001644�11671051007�0022161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strdup() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strlen.c������������������������������������������������0000664�0000000�0000000�00000003410�11671051007�0022140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strlen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strmblen.c����������������������������������������������0000664�0000000�0000000�00000006667�11671051007�0022500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strmblen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strmbtouc.c���������������������������������������������0000664�0000000�0000000�00000010736�11671051007�0022664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strmbtouc() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strncat.c�����������������������������������������������0000664�0000000�0000000�00000003426�11671051007�0022316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strncat() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strncmp.c�����������������������������������������������0000664�0000000�0000000�00000003332�11671051007�0022322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strncmp() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strncpy.c�����������������������������������������������0000664�0000000�0000000�00000003426�11671051007�0022342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strncpy() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strnlen.c�����������������������������������������������0000664�0000000�0000000�00000003356�11671051007�0022327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strnlen() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-strstr.c������������������������������������������������0000664�0000000�0000000�00000002676�11671051007�0022207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strstr() function. 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 <http://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-20111211-stable/tests/unistr/test-u8-to-u16.c������������������������������������������������0000664�0000000�0000000�00000012420�11671051007�0021665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_to_u16() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-to-u32.c������������������������������������������������0000664�0000000�0000000�00000012364�11671051007�0021672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_to_u32() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/unistr/test-u8-uctomb.c������������������������������������������������0000664�0000000�0000000�00000007402�11671051007�0022127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_uctomb() function. Copyright (C) 2010-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 <http://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-20111211-stable/tests/uniwbrk/���������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017315�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uniwbrk/test-u16-wordbreaks.c������������������������������������������0000664�0000000�0000000�00000006350�11671051007�0023216�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of word breaks in UTF-16 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uniwbrk/test-u32-wordbreaks.c������������������������������������������0000664�0000000�0000000�00000006350�11671051007�0023214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of word breaks in UTF-32 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uniwbrk/test-u8-wordbreaks.c�������������������������������������������0000664�0000000�0000000�00000006327�11671051007�0023143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of word breaks in UTF-8 strings. Copyright (C) 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 <http://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-20111211-stable/tests/uniwbrk/test-ulc-wordbreaks.c������������������������������������������0000664�0000000�0000000�00000003321�11671051007�0023361�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of word breaks in strings. Copyright (C) 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 <http://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-20111211-stable/tests/uniwbrk/test-ulc-wordbreaks.sh�����������������������������������������0000775�0000000�0000000�00000000552�11671051007�0023557�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 \ ./test-ulc-wordbreaks${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uniwidth/��������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0017467�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/tests/uniwidth/test-u16-strwidth.c�������������������������������������������0000664�0000000�0000000�00000003405�11671051007�0023073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_strwidth() function. 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 <http://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-20111211-stable/tests/uniwidth/test-u16-width.c����������������������������������������������0000664�0000000�0000000�00000004023�11671051007�0022337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u16_width() function. 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 <http://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-20111211-stable/tests/uniwidth/test-u32-strwidth.c�������������������������������������������0000664�0000000�0000000�00000003405�11671051007�0023071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_strwidth() function. 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 <http://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-20111211-stable/tests/uniwidth/test-u32-width.c����������������������������������������������0000664�0000000�0000000�00000004023�11671051007�0022335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u32_width() function. 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 <http://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-20111211-stable/tests/uniwidth/test-u8-strwidth.c��������������������������������������������0000664�0000000�0000000�00000003170�11671051007�0023013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_strwidth() function. 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 <http://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-20111211-stable/tests/uniwidth/test-u8-width.c�����������������������������������������������0000664�0000000�0000000�00000003637�11671051007�0022272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of u8_width() function. 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 <http://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-20111211-stable/tests/uniwidth/test-uc_width.c�����������������������������������������������0000664�0000000�0000000�00000003424�11671051007�0022421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uc_width() function. 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 <http://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-20111211-stable/tests/uniwidth/test-uc_width2.c����������������������������������������������0000664�0000000�0000000�00000004217�11671051007�0022504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uc_width() function. 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 <http://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-20111211-stable/tests/uniwidth/test-uc_width2.sh���������������������������������������������0000775�0000000�0000000�00000013066�11671051007�0022701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' 1 2 3 15 tmpfiles="$tmpfiles uc_width.out" ./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..0603 0 0604..060F A 0610..061A 0 061B..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..08FF A 0900..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..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..0CBB A 0CBC 0 0CBD..0CCB A 0CCC..0CCD 0 0CCE..0CE1 A 0CE2..0CE3 0 0CE4..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..180D 0 180E..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..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..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..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..1DBF A 1DC0..1DE6 0 1DE7..1DFB A 1DFC..1DFF 0 1E00..200A A 200B..200F 0 2010..2029 A 202A..202E 0 202F..205F A 2060..2064 0 2065..2069 A 206A..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..302F 0 3030..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..A67B A A67C..A67D 0 A67E..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 0 A8C5..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..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..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..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..FE26 0 FE27..FE2F A 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..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..11000 1 11001 0 11002..11037 1 11038..11046 0 11047..1107F 1 11080..11081 0 11082..110B2 1 110B3..110B6 0 110B7..110B8 1 110B9..110BA 0 110BB..110BC 1 110BD 0 110BE..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..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-20111211-stable/tests/zerosize-ptr.h���������������������������������������������������������0000664�0000000�0000000�00000004716�11671051007�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a pointer to a zero-size object in memory. Copyright (C) 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 <http://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. */ #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. */ #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # 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 # 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-20111211-stable/top/�������������������������������������������������������������������������0000775�0000000�0000000�00000000000�11671051007�0015274�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnulib-20111211-stable/top/GNUmakefile��������������������������������������������������������������0000664�0000000�0000000�00000011447�11671051007�0017355�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-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 <http://www.gnu.org/licenses/>. # Systems where /bin/sh is not the default shell need this. The $(shell) # command below won't work with e.g. stock DOS/Windows shells. ifeq ($(wildcard /bin/s[h]),/bin/sh) SHELL = /bin/sh else # will be used only with the next shell-test line, then overwritten # by a configured-in value SHELL = sh endif # If the user runs GNU make but has not yet run ./configure, # give them a diagnostic. _have-Makefile := $(shell test -f Makefile && echo yes) ifeq ($(_have-Makefile),yes) # 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-20111211-stable/top/README-release�����������������������������������������������������������0000664�0000000�0000000�00000005660�11671051007�0017601�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. make -k maintainer-clean || { ./configure && make maintainer-clean; } git checkout master git pull origin master * Ensure that the desired versions of autoconf, automake, etc. are in your PATH. See the buildreq list in bootstrap.conf for the complete list. * Ensure that you're on "master" with no uncommitted diffs. This should produce no output: git checkout master; git diff * Ensure that you've pushed all changes that belong in the release and that the NixOS/Hydra autobuilder is reporting all is well: http://hydra.nixos.org/jobset/gnu/@PACKAGE@-master * Run "./bootstrap && ./configure". This downloads any new translations: * Pre-release testing: Ensure that "make check syntax-check" succeeds. * Run "make distcheck" * Set the date, version number, and release type [stable/alpha/beta] on line 3 of NEWS, commit that, and tag the release by running e.g., build-aux/do-release-commit-and-tag X.Y stable * 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}. # "TYPE" must be stable, beta or alpha make 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 stable" run above. * 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 preferable savannah.org announcement link in the email message. From here: https://savannah.gnu.org/projects/@PACKAGE@/ click on the "submit news", then write something like the following: (If there is no such button, then enable "News" for the project via the Main -> "Select Features" menu item, or via this link: https://savannah.gnu.org/project/admin/editgroupfeatures.php?group=@PACKAGE@) 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, update the on-line manual accessible via http://www.gnu.org/software/@PACKAGE@/manual/ by running this: build-aux/gnu-web-doc-update ��������������������������������������������������������������������������������gnulib-20111211-stable/top/maint.mk�����������������������������������������������������������������0000664�0000000�0000000�00000160647�11671051007�0016753�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-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 <http://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 # Diagnostic for continued use of deprecated variable. # Remove in 2013 ifneq ($(build_aux),) $(error "$(ME): \ set $$(_build-aux) relative to $$(srcdir) instead of $$(build_aux)") endif # 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 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 = \ $(if $(exclude_file_name_regexp--$@),$(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 # 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)) ifeq ($(gnu_rel_host),ftp.gnu.org) url_dir_list ?= http://ftpmirror.gnu.org/$(PACKAGE) else url_dir_list ?= ftp://$(gnu_rel_host)/gnu/$(PACKAGE) endif # 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. ## ## --------------- ## _cfg_mk := $(shell test -f $(srcdir)/cfg.mk && echo '$(srcdir)/cfg.mk') # Collect the names of rules starting with `sc_'. syntax-check-rules := $(sort $(shell 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) # _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. # # in_vc_files | in_files # # grep-E-style regexp denoting the files to check. If no files # are specified the default are all the 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. # 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 # _sc_search_regexp used to be named _prohibit_regexp. However, # upgrading to the new definition and leaving the old name undefined # would usually convert each custom rule using $(_prohibit_regexp) # (usually defined in cfg.mk) into a no-op. This definition ensures # that people know right away if they're still using the old name. # FIXME: remove in 2012. _prohibit_regexp = \ $(error '*** you need to s/_prohibit_regexp/_sc_search_regexp/, and adapt') 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 -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 '$(exclude_file_name_regexp--$@)'); \ 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=$$(grep -l "$$containing" $$files); } || :; \ test -n "$$files" && test -n "$$non_containing" \ && { files=$$(grep -vl "$$non_containing" $$files); } || :; \ \ : Check for the construct; \ if test -n "$$files"; then \ if test -n "$$prohibit"; then \ grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \ && { msg="$$halt" $(_sc_say_and_exit) } || :; \ else \ grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \ | grep . \ && { msg="$$halt" $(_sc_say_and_exit) } || :; \ fi \ else :; \ fi || :; endef sc_avoid_if_before_free: @$(srcdir)/$(_build-aux)/useless-if-before-free \ $(useless_free_options) \ $$($(VC_LIST_EXCEPT) | grep -v useless-if-before-free) && \ { echo '$(ME): found useless "if" before "free" above' 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. sc_prohibit_strcmp: @grep -nE '! *str''cmp *\(|\<str''cmp *\(.+\) *[!=]=' \ $$($(VC_LIST_EXCEPT)) \ | grep -vE ':# *define STRN?EQ\(' && \ { echo '$(ME): replace str''cmp calls above with STREQ/STRNEQ' \ 1>&2; exit 1; } || : # 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) ?\([0-9]|\<error ?\([1-9][0-9]*,' \ halt='use EXIT_* values rather than magic number' \ $(_sc_search_regexp) # 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: @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ | 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: @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ | 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: @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ | grep -E '[^."]\."' && \ { echo '$(ME): found error message ending in period' 1>&2; \ exit 1; } || : sc_file_system: @prohibit=file''system \ 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) # 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 -l '\.c$$' > /dev/null; then \ fail=0; \ for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do \ grep '^# *include\>' $$i | sed 1q \ | grep -E '^# *include $(config_h_header)' > /dev/null \ || { echo $$i; fail=1; }; \ done; \ test $$fail = 1 && \ { 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 -l '\.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)? *\(' $(_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 *\(' \ $(_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 *\(' $(_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='(\<(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)' \ $(_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)\>' \ $(_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) _empty = _sp = $(_empty) $(_empty) # 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) # Get the list of symbol names with this: # perl -lne '/^# *define ([A-Z]\w+)\(/ and print $1' lib/intprops.h|fmt _intprops_names = \ TYPE_IS_INTEGER TYPE_TWOS_COMPLEMENT TYPE_ONES_COMPLEMENT \ TYPE_SIGNED_MAGNITUDE TYPE_SIGNED TYPE_MINIMUM TYPE_MAXIMUM \ INT_BITS_STRLEN_BOUND INT_STRLEN_BOUND INT_BUFSIZE_BOUND \ INT_ADD_RANGE_OVERFLOW INT_SUBTRACT_RANGE_OVERFLOW \ INT_NEGATE_RANGE_OVERFLOW INT_MULTIPLY_RANGE_OVERFLOW \ INT_DIVIDE_RANGE_OVERFLOW INT_REMAINDER_RANGE_OVERFLOW \ INT_LEFT_SHIFT_RANGE_OVERFLOW INT_ADD_OVERFLOW INT_SUBTRACT_OVERFLOW \ INT_NEGATE_OVERFLOW INT_MULTIPLY_OVERFLOW INT_DIVIDE_OVERFLOW \ INT_REMAINDER_OVERFLOW INT_LEFT_SHIFT_OVERFLOW _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)?|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 set_program_name. sc_program_name: @require='set_program_name *\(m?argv\[0\]\);' \ in_vc_files='\.c$$' \ containing='\<main *(' \ halt='the above files do not call set_program_name' \ $(_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)' \ $(_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: @grep -nE \ '\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ $$($(VC_LIST_EXCEPT)) \ | grep -Ev '(_|ngettext ?)\(' && \ { echo '$(ME): found unmarked diagnostic(s)' 1>&2; \ exit 1; } || : # 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) # ================================================================== 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; \ $(def_sym_regex) | grep -E -f - $$($(VC_LIST_EXCEPT)) \ && { echo '$(ME): define the above via some gnulib .h file' \ 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{}. # http://lists.gnu.org/archive/html/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 ends 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: @perl -le '$(require_exactly_one_NL_at_EOF_)' $$($(VC_LIST_EXCEPT)) \ || { 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_word_RE_ ?= \ /\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\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: @perl -n -0777 $(prohibit_doubled_word_) $$($(VC_LIST_EXCEPT)) \ | 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 "*". prohibit_undesirable_word_seq_RE_ ?= \ /\bcan\s+not\b/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: @perl -n -0777 $(prohibit_undesirable_word_seq_) \ $$($(VC_LIST_EXCEPT)) \ | grep -vE '$(ignore_undesirable_word_sequence_RE_)' | grep . \ && { echo '$(ME): undesirable word sequence' >&2; exit 1; } || : _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=$$(grep -l 'proper_name_utf8 ''("' $$($(VC_LIST_EXCEPT)));\ 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: @grep '^ *static.*struct option ' $$($(VC_LIST_EXCEPT)) \ | grep -Ev 'const struct option|struct option const' && { \ echo 1>&2 '$(ME): add "const" to the above declarations'; \ exit 1; } || : 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 '/\@[A-Z_0-9]+\@/' \ -e ' && !/([A-Z_0-9]+)\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 if sed -n $(news-check-lines-spec)p $(srcdir)/NEWS \ | 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' # Verify that all source files using _() are listed in po/POTFILES.in. po_file ?= $(srcdir)/po/POTFILES.in generated_files ?= $(srcdir)/lib/*.[ch] sc_po_check: @if test -f $(po_file); then \ grep -E -v '^(#|$$)' $(po_file) \ | grep -v '^src/false\.c$$' | sort > $@-1; \ files=; \ for file in $$($(VC_LIST_EXCEPT)) $(generated_files); do \ test -r $$file || continue; \ case $$file in \ *.m4|*.mk) continue ;; \ *.?|*.??) ;; \ *) continue;; \ esac; \ case $$file in \ *.[ch]) \ base=`expr " $$file" : ' \(.*\)\..'`; \ { test -f $$base.l || test -f $$base.y; } && continue;; \ esac; \ files="$$files $$file"; \ done; \ grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files \ | 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 = '$(ME): 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: 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)' Free' \ 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)); \ grep -LFx "$$good" \ $$(grep -lE '$(_hv_regex_weak)' $$($(VC_LIST_EXCEPT))) \ | grep . && \ { echo "$(ME): the above files use path_prepend_ inconsistently" \ 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 *\([^)]*|\[[^]]*)PATH_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=$$(find $(srcdir) -name Makefile.in) \ halt=$$(printf '%s\n' \ 'the above files are vulnerable; beware of running' \ ' "make dist*" rules, and upgrade to fixed automake' \ ' see http://bugzilla.redhat.com/542609 for details') \ $(_sc_search_regexp) vc-diff-check: (unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || : 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_dir ?= $(srcdir)/gnulib gnulib-version = $$(cd $(gnulib_dir) && git describe) bootstrap-tools ?= autoconf,automake,gnulib # 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 ?= \ $$(git cat-file tag v$(VERSION) \ | gpgv --status-fd 1 --keyring /dev/null - - 2>/dev/null \ | sed -n '/^\[GNUPG:\] ERRSIG /{s///;s/ .*//p;q}') translation_project_ ?= coordinator@translationproject.org # Make info-gnu the default only for a stable release. ifeq ($(RELEASE_TYPE),stable) announcement_Cc_ ?= $(translation_project_), $(PACKAGE_BUGREPORT) announcement_mail_headers_ ?= \ To: info-gnu@gnu.org \ Cc: $(announcement_Cc_) \ Mail-Followup-To: $(PACKAGE_BUGREPORT) else announcement_Cc_ ?= $(translation_project_) announcement_mail_headers_ ?= \ To: $(PACKAGE_BUGREPORT) \ Cc: $(announcement_Cc_) endif announcement: NEWS ChangeLog $(rel-files) @$(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) \ --news=$(srcdir)/NEWS \ --bootstrap-tools=$(bootstrap-tools) \ --gnulib-version=$(gnulib-version) \ --no-print-checksums \ $(addprefix --url-dir=, $(url_dir_list)) ## ---------------- ## ## Updating files. ## ## ---------------- ## ftp-gnu = ftp://ftp.gnu.org/gnu www-gnu = http://www.gnu.org upload_dest_dir_ ?= $(PACKAGE) emit_upload_commands: @echo ===================================== @echo ===================================== @echo "$(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \\" @echo " --to $(gnu_rel_host):$(upload_dest_dir_) \\" @echo " $(rel-files)" @echo '# send the ~/announce-$(my_distdir) e-mail' @echo ===================================== @echo ===================================== 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: if test -d $(srcdir)/.git; 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; 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 ALL_RECURSIVE_TARGETS += alpha beta stable alpha beta stable: $(local-check) writable-files $(submodule-checks) test $@ = stable \ && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ || : $(MAKE) vc-diff-check $(MAKE) news-check $(MAKE) distcheck $(MAKE) dist XZ_OPT=-9ev $(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ $(MAKE) -s emit_upload_commands 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: case $$RELEASE_TYPE in alpha|beta|stable) ;; \ *) echo "invalid RELEASE_TYPE: $$RELEASE_TYPE" 1>&2; exit 1;; esac $(MAKE) --no-print-directory -s announcement > ~/announce-$(my_distdir) if test -d $(release_archive_dir); then \ ln $(rel-files) $(release_archive_dir); \ chmod a-w $(rel-files); \ fi echo $(VERSION) > $(prev_version_file) $(MAKE) update-NEWS-hash perl -pi -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' NEWS $(emit-commit-log) > .ci-msg $(VC) commit -F .ci-msg -a rm .ci-msg # 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: @test -z "$(manual_title)" \ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : @cd '$(srcdir)/doc'; \ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ -o '$(abs_builddir)/doc/manual' \ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ "$(PACKAGE_NAME) - $(manual_title)" @echo " *** Upload the doc/manual directory to web-cvs." # 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: init-coverage build-coverage gen-coverage # Update gettext files. PACKAGE ?= $(shell basename $(PWD)) PO_DOMAIN ?= $(PACKAGE) POURL = http://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//' | sed '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: 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)) +.*?(\S+) *\(/ # 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) .PHONY: _gl_tight_scope _gl_tight_scope: $(bin_PROGRAMS) 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/ .*//'; \ perl -lne \ '$(_gl_TS_function_match) and print "^$$1\$$"' $$hdr; \ ) | sort -u > $$t; \ nm -e $(_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' '__.*' $(_gl_TS_unmarked_extern_vars); \ perl -lne '$(_gl_TS_var_match) and print "^$$1\$$"' $$hdr *.h \ ) | sort -u > $$t; \ nm -e $(_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-20111211-stable/users.txt��������������������������������������������������������������������0000664�0000000�0000000�00000014471�11671051007�0016403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������The following packages appear to be using gnulib and gnulib-tool: CSSC http://git.savannah.gnu.org/cgit/cssc.git Net::CDP http://search.cpan.org/src/MCHAPMAN/Net-CDP-0.09/libcdp/ OPeNDAP http://scm.opendap.org:8090/svn/trunk/ acct http://cvs.sv.gnu.org/viewcvs/acct/acct/ anubis http://cvs.sv.gnu.org/viewcvs/anubis/anubis/ augeas http://augeas.net/ autobuild http://josefsson.org/autobuild/ barcode http://git.sv.gnu.org/cgit/barcode.git/ bison http://git.sv.gnu.org/gitweb/?p=bison.git clisp http://clisp.cvs.sourceforge.net/clisp/clisp/ coreutils http://git.sv.gnu.org/gitweb/?p=coreutils.git cpio http://cvs.sv.gnu.org/viewcvs/cpio/cpio/ cvs http://cvs.sv.gnu.org/viewcvs/cvs/ccvs/ cvsps http://sourceforge.net/projects/cvsps/ diffutils http://git.sv.gnu.org/cgit/diffutils.git/ febootstrap http://people.redhat.com/~rjones/febootstrap/ findutils http://cvs.sv.gnu.org/viewcvs/findutils/findutils/ gcal http://git.savannah.gnu.org/gitweb/?p=gcal.git gdb http://sourceware.org/git/?p=gdb.git;a=summary gettext http://cvs.sv.gnu.org/viewcvs/gettext/gettext/ gengetopt http://git.sv.gnu.org/gitweb/?p=gengetopt.git gmediaserver http://cvs.sv.gnu.org/viewvc/gmediaserver/gmediaserver/ gnuit http://www.gnu.org/software/gnuit/ http://git.savannah.gnu.org/gitweb/?p=gnuit.git gnutls http://cvs.gnupg.org/cgi-bin/viewcvs.cgi/gnutls/?root=GNU+TLS+Library http://git.sv.gnu.org/gitweb/?p=gnutls.git http://repo.or.cz/w/gnutls.git gpg http://cvs.gnupg.org/cgi-bin/viewcvs.cgi/trunk/ gsasl http://git.sv.gnu.org/gitweb/?p=gsasl.git gss http://git.sv.gnu.org/gitweb/?p=gss.git gtkreindeer http://git.sv.gnu.org/gitweb/?p=gtkreindeer.git gtk-vnc http://gtk-vnc.codemonkey.ws/hg/outgoing.hg grep http://git.sv.gnu.org/cgit/grep.git/ guile http://cvs.sv.gnu.org/viewvc/guile/guile/guile-core/ gzip http://git.sv.gnu.org/cgit/gzip.git/ hello http://cvs.sv.gnu.org/viewcvs/hello/hello/ hivex http://git.annexia.org/?p=hivex.git icoutils http://riva.ucam.org/svn/cjwatson/src/debian/icoutils/trunk/icoutils/ inetutils http://cvs.sv.gnu.org/viewcvs/inetutils/inetutils/ iwhd http://git.fedorahosted.org/git/?p=iwhd.git jugtail http://cvs.savannah.gnu.org/viewvc/?root=jugtail jwhois http://cvs.sv.gnu.org/viewvc/jwhois/jwhois/ libdap http://scm.opendap.org:8090/svn/trunk/libdap/ libffcall http://savannah.gnu.org/projects/libffcall/ libgnupdf http://cvs.savannah.gnu.org/viewvc/libgnupdf/?root=pdf libguestfs http://libguestfs.org/ libiconv http://libiconv.cvs.sourceforge.net/libiconv/libiconv/ libidn http://git.sv.gnu.org/gitweb/?p=libidn.git libidn2 http://josefsson.org/libidn2/ libksba http://cvs.gnupg.org/cgi-bin/viewcvs.cgi/trunk/?root=KSBA libntlm http://git.josefsson.org/?p=libntlm.git;a=summary libprelude https://trac.prelude-ids.org/browser/trunk/libprelude/ libpreludedb https://trac.prelude-ids.org/browser/trunk/libpreludedb/ libtasn1 http://git.savannah.gnu.org/gitweb/?p=libtasn1.git libunistring http://git.sv.gnu.org/gitweb/?p=libunistring.git libvirt http://libvirt.org/ http://git.et.redhat.com/?p=libvirt.git;a=summary m4 http://git.sv.gnu.org/gitweb/?p=m4.git;a=summary mailfromd http://svn.gnu.org.ua/viewvc/mailfromd/trunk/ mailutils http://cvs.sv.gnu.org/viewcvs/mailutils/mailutils/ man-db http://www.chiark.greenend.org.uk/~cjwatson/bzr/man-db/trunk/ miktex https://svn.sourceforge.net/svnroot/miktex/miktex/trunk mini-httpd http://git.sv.gnu.org/gitweb/?p=mini-httpd.git msmtp http://msmtp.cvs.sourceforge.net/msmtp/msmtp/ myserver http://git.sv.gnu.org/gitweb/?p=myserver.git;a=summary nagios-plugins http://nagiosplug.git.sourceforge.net/ netcf http://fedorahosted.org/netcf/ newts http://svn.arete.cc/newts/trunk/ OATH Toolkit http://www.nongnu.org/oath-toolkit/ octave http://hg.savannah.gnu.org/hgweb/octave/ parted http://git.debian.org/?p=parted/parted.git;a=summary patch http://git.sv.gnu.org/gitweb/?p=patch.git prelude-lml https://trac.prelude-ids.org/browser/trunk/prelude-lml/ prelude-manager https://trac.prelude-ids.org/browser/trunk/prelude-manager/ pspp http://git.sv.gnu.org/gitweb/?p=pspp.git radius http://cvs.sv.gnu.org/viewcvs/radius/radius/ recutils http://git.savannah.gnu.org/gitweb/?p=recutils.git reindeer http://git.sv.gnu.org/gitweb/?p=reindeer.git rcs http://git.savannah.gnu.org/cgit/rcs.git sed http://cvs.savannah.gnu.org/viewcvs/sed/?root=sed sharutils http://cvs.savannah.gnu.org/viewvc/sharutils/sharutils/ shishi http://git.sv.gnu.org/gitweb/?p=shishi.git tar http://cvs.sv.gnu.org/viewcvs/tar/tar/ texinfo http://cvs.sv.gnu.org/viewcvs/texinfo/texinfo/ tmpwatch https://fedorahosted.org/tmpwatch/ vc-dwim http://git.sv.gnu.org/gitweb/?p=vc-dwim.git wget http://hg.addictivecode.org/wget/mainline/ wydawca http://svn.gnu.org.ua/viewvc/wydawca/trunk/ wyslij-po http://svn.gnu.org.ua/viewvc/wyslij-po/trunk/ zile http://www.gnu.org/software/zile/ The following packages are using gnulib without gnulib-tool: libtool http://cvs.sv.gnu.org/viewcvs/libtool/libtool/ libgcrypt http://cvs.gnupg.org/cgi-bin/viewcvs.cgi/trunk/?root=Libgcrypt Articles: "Using Gnulib to improve software portability", by Diego 'Flameeyes' Pettenò on December 28, 2005, http://www.linux.com/articles/50702 ----- Copyright (C) 2006-2011 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: indent-tabs-mode: nil whitespace-check-buffer-indent: nil End: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������